ffmol-rdkit / frontend /src /styles.css
hercules168's picture
Upload 44 files
40ad0f5 verified
Raw
History Blame Contribute Delete
12.3 kB
:root {
color-scheme: dark;
--bg: #071014;
--surface: rgba(247, 252, 252, 0.94);
--surface-strong: #ffffff;
--line: rgba(121, 220, 209, 0.24);
--line-strong: rgba(24, 120, 125, 0.28);
--ink: #102027;
--muted: #55707a;
--cyan: #31d8c6;
--teal: #0f7b78;
--blue: #4d8dff;
--lime: #b5e853;
--amber: #f4b740;
--rose: #db4a70;
--shadow: 0 18px 48px rgba(0, 0, 0, 0.24);
}
* {
box-sizing: border-box;
}
body {
margin: 0;
font-family: Inter, "Segoe UI", Arial, sans-serif;
background:
linear-gradient(90deg, rgba(49, 216, 198, 0.08) 1px, transparent 1px) 0 0 / 58px 58px,
linear-gradient(rgba(49, 216, 198, 0.06) 1px, transparent 1px) 0 0 / 58px 58px,
linear-gradient(135deg, rgba(181, 232, 83, 0.12) 0 12%, transparent 12% 48%, rgba(77, 141, 255, 0.11) 48% 61%, transparent 61%),
var(--bg);
color: var(--ink);
}
body::before {
content: "";
position: fixed;
inset: 0;
pointer-events: none;
background:
linear-gradient(120deg, transparent 0 36%, rgba(49, 216, 198, 0.08) 36% 37%, transparent 37% 100%),
linear-gradient(300deg, transparent 0 61%, rgba(181, 232, 83, 0.08) 61% 62%, transparent 62% 100%);
mask-image: linear-gradient(to bottom, #000, transparent 78%);
}
button {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 8px;
width: fit-content;
min-height: 38px;
border: 1px solid rgba(49, 216, 198, 0.45);
background: linear-gradient(135deg, #0f7b78, #1263a8);
color: white;
padding: 10px 15px;
border-radius: 7px;
cursor: pointer;
font: inherit;
font-weight: 800;
box-shadow: 0 10px 24px rgba(15, 123, 120, 0.26);
}
button:hover:not(:disabled) {
filter: brightness(1.08);
transform: translateY(-1px);
}
button:disabled {
opacity: 0.55;
cursor: not-allowed;
box-shadow: none;
}
input,
select,
textarea {
width: 100%;
border: 1px solid #b8d7d6;
border-radius: 7px;
padding: 10px 11px;
background: rgba(255, 255, 255, 0.86);
color: var(--ink);
font: inherit;
outline: none;
transition: border-color 160ms ease, box-shadow 160ms ease, background 160ms ease;
}
input:focus,
select:focus,
textarea:focus {
border-color: var(--teal);
background: #ffffff;
box-shadow: 0 0 0 4px rgba(49, 216, 198, 0.18);
}
textarea {
min-height: 82px;
resize: vertical;
}
label {
display: grid;
gap: 6px;
color: #24404a;
font-size: 13px;
font-weight: 800;
}
table {
width: 100%;
border-collapse: separate;
border-spacing: 0;
font-size: 13px;
}
th,
td {
border-bottom: 1px solid rgba(24, 120, 125, 0.16);
padding: 11px 10px;
text-align: left;
vertical-align: top;
}
th {
position: sticky;
top: 0;
z-index: 1;
background: #e9f8f6;
color: #173942;
font-size: 11px;
text-transform: uppercase;
letter-spacing: 0;
}
tbody tr {
background: rgba(255, 255, 255, 0.7);
}
tbody tr:hover {
background: rgba(229, 255, 249, 0.86);
}
h2,
h3,
p {
margin-top: 0;
}
h2,
h3 {
margin-bottom: 0;
color: #0b2931;
line-height: 1.18;
}
.app-shell {
position: relative;
min-height: 100vh;
padding-bottom: 4px;
}
.topbar {
position: sticky;
top: 0;
z-index: 10;
display: flex;
align-items: center;
justify-content: space-between;
gap: 20px;
padding: 18px 24px;
background: rgba(6, 18, 23, 0.9);
border-bottom: 1px solid rgba(49, 216, 198, 0.22);
color: #f6ffff;
backdrop-filter: blur(18px);
box-shadow: 0 14px 36px rgba(0, 0, 0, 0.22);
}
.brand-block {
display: grid;
gap: 5px;
}
.brand {
display: flex;
align-items: center;
gap: 10px;
flex-wrap: wrap;
font-weight: 850;
font-size: 19px;
line-height: 1.3;
}
.brand-mark {
display: inline-flex;
width: 38px;
height: 38px;
align-items: center;
justify-content: center;
border: 1px solid rgba(49, 216, 198, 0.46);
border-radius: 8px;
background: rgba(49, 216, 198, 0.12);
color: var(--cyan);
}
.topbar p {
margin: 0;
color: #a5c6cc;
font-size: 13px;
}
.topbar-signals {
display: flex;
align-items: center;
justify-content: flex-end;
gap: 9px;
flex-wrap: wrap;
}
.topbar-signals span,
.count-chip,
.eyebrow {
display: inline-flex;
align-items: center;
gap: 6px;
width: fit-content;
border: 1px solid rgba(49, 216, 198, 0.28);
border-radius: 999px;
color: #dffdf8;
background: rgba(49, 216, 198, 0.1);
padding: 6px 10px;
font-size: 12px;
font-weight: 800;
line-height: 1;
}
.workspace {
display: grid;
grid-template-columns: minmax(320px, 430px) minmax(0, 1fr);
gap: 18px;
padding: 22px 24px 18px;
}
.panel,
.results,
.candidate-detail {
position: relative;
overflow: hidden;
background: var(--surface);
border: 1px solid var(--line);
border-radius: 8px;
box-shadow: var(--shadow);
}
.panel::before,
.results::before,
.candidate-detail::before {
content: "";
position: absolute;
inset: 0 0 auto;
height: 3px;
background: linear-gradient(90deg, var(--cyan), var(--blue), var(--lime));
}
.panel {
display: grid;
gap: 13px;
align-content: start;
padding: 18px;
}
.panel-heading,
.results-heading {
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: 12px;
}
.panel-heading {
display: grid;
}
.panel-heading .eyebrow,
.results .eyebrow,
.candidate-detail .eyebrow {
border-color: rgba(15, 123, 120, 0.24);
background: rgba(15, 123, 120, 0.08);
color: #0f6564;
}
.steps {
counter-reset: step;
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 9px;
padding-left: 0;
list-style: none;
}
.steps li {
counter-increment: step;
min-height: 42px;
display: flex;
align-items: center;
gap: 9px;
border: 1px solid rgba(16, 32, 39, 0.08);
border-radius: 7px;
background: rgba(255, 255, 255, 0.72);
padding: 8px 9px;
color: #496872;
font-size: 12px;
font-weight: 800;
}
.steps li::before {
content: counter(step);
display: inline-flex;
width: 21px;
height: 21px;
flex: 0 0 auto;
align-items: center;
justify-content: center;
border-radius: 50%;
background: #e6eff0;
color: #55707a;
font-size: 11px;
}
.steps .step-complete {
border-color: rgba(49, 216, 198, 0.36);
background: rgba(218, 255, 247, 0.82);
color: #0f6564;
}
.steps .step-complete::before {
content: "";
background: var(--teal);
box-shadow: inset 0 0 0 6px var(--cyan);
}
.steps .step-active {
border-color: rgba(244, 183, 64, 0.5);
background: rgba(255, 247, 224, 0.92);
color: #725010;
}
.status-grid {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 10px;
}
.status-grid p {
margin: 0;
display: grid;
gap: 5px;
border: 1px solid rgba(24, 120, 125, 0.16);
border-radius: 7px;
padding: 11px;
background: rgba(255, 255, 255, 0.68);
}
.status-grid span {
color: var(--muted);
font-size: 12px;
font-weight: 700;
}
.status-grid strong {
color: #0b2931;
font-size: 20px;
}
.status-pill {
width: fit-content;
border-radius: 999px;
padding: 5px 10px;
font-size: 12px !important;
text-transform: uppercase;
letter-spacing: 0;
}
.status-idle {
background: #e9eff2;
}
.status-running {
background: rgba(244, 183, 64, 0.18);
color: #6d4a00 !important;
}
.status-completed {
background: rgba(49, 216, 198, 0.18);
color: #0f6564 !important;
}
.status-failed {
background: rgba(219, 74, 112, 0.16);
color: #8a1d3a !important;
}
.results,
.candidate-detail {
margin: 0 24px 24px;
padding: 18px;
}
.results {
overflow-x: auto;
}
.results-heading {
margin-bottom: 14px;
}
.count-chip {
flex: 0 0 auto;
border-color: rgba(181, 232, 83, 0.36);
background: rgba(181, 232, 83, 0.14);
color: #325100;
}
.structure-depiction {
width: 188px;
min-height: 126px;
display: flex;
align-items: center;
justify-content: center;
border: 1px solid rgba(24, 120, 125, 0.14);
border-radius: 7px;
background:
linear-gradient(90deg, rgba(15, 123, 120, 0.05) 1px, transparent 1px) 0 0 / 22px 22px,
linear-gradient(rgba(15, 123, 120, 0.05) 1px, transparent 1px) 0 0 / 22px 22px,
#ffffff;
}
.structure-button {
min-height: 126px;
padding: 8px;
border-radius: 7px;
color: inherit;
box-shadow: none;
}
.structure-depiction svg {
width: auto;
height: auto;
max-width: 100%;
max-height: 144px;
}
.structure-depiction img {
width: auto;
height: auto;
max-width: 100%;
max-height: 144px;
object-fit: contain;
}
.detail-structure {
width: min(260px, 100%);
}
.lookup-row {
display: grid;
grid-template-columns: minmax(0, 1fr) auto;
gap: 8px;
}
.lookup-note {
margin: 0;
color: #0f6564;
font-size: 12px;
font-weight: 800;
}
.field-note {
margin: -4px 0 2px;
color: #4c6570;
font-size: 12px;
line-height: 1.45;
}
.reference-preview {
display: grid;
gap: 8px;
border: 1px solid rgba(24, 120, 125, 0.16);
border-radius: 8px;
background: rgba(255, 255, 255, 0.66);
padding: 10px;
}
.reference-preview-heading {
display: flex;
justify-content: space-between;
gap: 10px;
color: #31525d;
font-size: 12px;
font-weight: 800;
}
.reference-structure {
width: 100%;
min-height: 168px;
}
.image-modal-backdrop {
position: fixed;
inset: 0;
z-index: 40;
display: flex;
align-items: center;
justify-content: center;
padding: 24px;
background: rgba(3, 10, 13, 0.72);
}
.image-modal {
width: min(760px, 100%);
max-height: min(720px, calc(100vh - 48px));
overflow: auto;
border: 1px solid rgba(49, 216, 198, 0.28);
border-radius: 8px;
background: #f8ffff;
padding: 18px;
box-shadow: 0 28px 80px rgba(0, 0, 0, 0.42);
}
.structure-preview {
display: flex;
min-height: 360px;
align-items: center;
justify-content: center;
border: 1px solid rgba(24, 120, 125, 0.16);
border-radius: 8px;
background: #ffffff;
padding: 20px;
}
.comparison-grid {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 14px;
}
.comparison-grid h4 {
margin: 0 0 8px;
color: #193943;
}
.change-note {
margin: 12px 0 0;
border-left: 4px solid var(--amber);
border-radius: 6px;
background: rgba(244, 183, 64, 0.12);
color: #5d4308;
padding: 10px 12px;
font-size: 13px;
font-weight: 800;
}
.structure-preview svg,
.structure-preview img {
width: auto;
height: auto;
max-width: 100%;
max-height: min(520px, 60vh);
object-fit: contain;
}
.pagination {
display: flex;
align-items: center;
justify-content: flex-end;
gap: 12px;
padding-top: 14px;
color: #31525d;
font-size: 13px;
font-weight: 800;
}
.candidate-detail dl {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 10px;
}
.candidate-detail div {
display: grid;
gap: 3px;
}
.candidate-detail dt {
color: var(--muted);
font-size: 12px;
}
.candidate-detail dd {
margin: 0;
font-weight: 800;
}
.mono {
font-family: Consolas, "SFMono-Regular", monospace;
max-width: 460px;
color: #193943;
word-break: break-all;
}
.error {
margin-bottom: 0;
border-left: 4px solid var(--rose);
border-radius: 6px;
background: rgba(219, 74, 112, 0.1);
color: #8a1d3a;
padding: 10px 12px;
font-weight: 800;
}
.empty-state {
color: var(--muted);
font-weight: 800;
}
.app-footer {
padding: 0 24px 24px;
color: #a5c6cc;
font-size: 13px;
text-align: right;
}
@media (max-width: 980px) {
.topbar {
align-items: flex-start;
flex-direction: column;
}
.topbar-signals {
justify-content: flex-start;
}
.workspace {
grid-template-columns: 1fr;
padding: 14px;
}
.results,
.candidate-detail {
margin: 0 14px 14px;
}
}
@media (max-width: 620px) {
.topbar {
padding: 15px;
}
.brand {
font-size: 17px;
}
.panel,
.results,
.candidate-detail {
padding: 14px;
}
.panel-heading,
.results-heading,
.status-grid,
.candidate-detail dl {
grid-template-columns: 1fr;
}
.results-heading {
display: grid;
}
.steps {
grid-template-columns: 1fr;
}
.pagination {
justify-content: flex-start;
flex-wrap: wrap;
}
.lookup-row {
grid-template-columns: 1fr;
}
.structure-preview {
min-height: 240px;
}
.comparison-grid {
grid-template-columns: 1fr;
}
.app-footer {
padding: 0 14px 16px;
text-align: left;
}
}