syntheogenesis / dee /static /workbench.css
github-actions[bot]
Deploy 70383d2
47a84d0
Raw History Blame Contribute Delete
35 kB
/* Research workbench. Loaded after the legacy component sheets.
Layout preserves the existing rail, mobile detents and construct tabs.
Color expresses hierarchy; scientific status retains its semantic tokens. */
:root {
--gray-0: #ffffff;
--gray-1: #f5f6f8;
--gray-2: #eef1f4;
--gray-3: #dfe4e9;
--gray-4: #c9d1da;
--gray-5: #aeb8c4;
--gray-6: #637080;
--gray-7: #526071;
--gray-8: #293544;
--gray-9: #172331;
--brand: #293e52;
--brand-deep: #172331;
--brand-light: #526071;
--brand-50: #eef3f8;
--brand-100: #e1eaf3;
--brand-200: #c4d3e2;
--brand-ring: rgba(40, 86, 133, .22);
--ink-disabled: #697788;
--hover-fill: #172331;
--hover-text: #ffffff;
--on-ink: #ffffff;
--on-accent: #ffffff;
--font-display: var(--font-ui);
--font-body: var(--font-ui);
--workspace-accent: #285b88;
--workspace-wash: #e9f0f7;
}
:root[data-theme="dark"] {
--gray-0: #19212b;
--gray-1: #111820;
--gray-2: #202b37;
--gray-3: #303d4c;
--gray-4: #46576b;
--gray-5: #607287;
--gray-6: #a1adbc;
--gray-7: #b4bfcd;
--gray-8: #d5dde7;
--gray-9: #edf2f8;
--brand: #b8cde2;
--brand-deep: #e1ebf5;
--brand-light: #a1b5cb;
--brand-50: #202e3c;
--brand-100: #293e52;
--brand-200: #425b75;
--ink-disabled: #99a6b8;
--on-ink: #111820;
--on-accent: #111820;
--workspace-accent: #a9cbee;
--workspace-wash: #24394d;
}
body { font-family: var(--font-ui); }
.bg-atmos { display: none; }
.topbar-title, .mc-h, .view-title, .view-title em, .hero h1,
.card-title, .card-title em, .disclaimer-title, .disclaimer-title em,
.brand-word, .cp-empty-h, .bench-spec-name {
font-family: var(--font-ui);
font-style: normal;
font-weight: 600;
letter-spacing: -.025em;
}
.topbar { background: var(--bg-card); }
.topbar-title { font-size: var(--t-3); letter-spacing: -.01em; }
.topbar-sub { font-family: var(--font-ui); font-size: var(--t-2); }
.research-strip {
background: var(--bg-card); border-left: 0; border-bottom: 1px solid var(--line);
color: var(--ink-soft); font-family: var(--font-ui);
}
.research-strip strong { font-style: normal; font-weight: 500; }
.research-strip-dot { color: var(--ink-faint); }
.research-strip-link { font-family: var(--font-ui); text-transform: none; letter-spacing: 0; }
.view--mission { padding: 32px 36px 48px; }
.mc { width: 100%; max-width: 1120px; }
/* The heading owns the gap under itself. This file loads after app.css and
its `margin: 0` was silently beating app.css's `0 0 22px`, so the pill that
follows sat flush against the title with a measured gap of ZERO. */
.mc-h { font-size: var(--t-5); line-height: 1.2; margin: 0 0 22px; }
.mc-enter { margin: 20px 0 0; gap: 10px; flex-wrap: wrap; }
.mc-enter-cta, .mc-enter-find { min-height: 40px; border-radius: var(--r-2); font-size: var(--t-2); font-family: var(--font-ui); }
.mc-enter-cta { padding: 10px 16px; background: var(--ink-strong); color: var(--on-ink); }
.mc-enter-find { padding: 10px 14px; background: var(--bg-card); }
.mc-sec { margin-top: 28px; }
.mc-sec-h { align-items: center; margin-bottom: 14px; padding-bottom: 12px; gap: 12px; flex-wrap: wrap; }
/* Section heads speak the page titles' kicker: a short ink rule, then mono
capitals. They name a section; they are not headlines competing with it. */
.mc-sec-h h2, .mc-sec-h .micro {
display: flex; align-items: center; gap: 12px; margin: 0;
font: 600 var(--t-1)/1.3 var(--font-mono); letter-spacing: .16em; text-transform: uppercase;
color: var(--ink-strong);
}
.mc-sec-h h2::before, .mc-sec-h .micro::before { content: ""; flex: 0 0 22px; height: 1px; background: currentColor; }
.mc-sec-r { font-family: var(--font-mono); font-size: var(--t-1); color: var(--ink-faint); letter-spacing: .04em; }
.mc-sec-r { text-decoration: none; cursor: pointer; }
.mc-sec-r:hover { color: var(--workspace-accent); text-decoration: underline; }
.mc-work-empty {
grid-column: 1 / -1; padding: 20px; border: 1px solid var(--line);
border-radius: var(--r-3); background: var(--bg-card);
display: flex; align-items: center; flex-wrap: wrap; gap: 14px 24px;
}
.mc-work-empty > div { flex: 1 1 260px; }
.mc-work-empty h3 { margin: 0 0 5px; font-size: var(--t-3); font-weight: 500; }
.mc-work-empty p { margin: 0; color: var(--ink-soft); font-size: var(--t-2); line-height: 1.6; }
.mc-work-empty .mc-ex-note { flex-basis: 100%; }
.mc-empty-action { display: inline-flex; align-items: center; gap: 12px; min-height: 36px; color: var(--workspace-accent); font-size: var(--t-2); font-weight: 500; text-decoration: none; }
.mc-empty-action:hover { text-decoration: underline; }
/* The same link-styled action, as a <button> where it runs code (the
"Couldn't load your saved work" reload). Without this it would pick up the
browser's own button chrome — a grey box in a row of plain accent links. */
button.mc-empty-action { background: none; border: 0; padding: 0; font-family: inherit; cursor: pointer; }
.workbench-tools { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); border: 1px solid var(--line); border-radius: var(--r-3); overflow: hidden; background: var(--bg-card); }
.workbench-tool { display: flex; gap: 14px; align-items: center; padding: 17px 16px; color: var(--ink); text-decoration: none; border-bottom: 1px solid var(--line); min-width: 0; transition: background var(--t-fast); }
.workbench-tool:nth-child(odd) { border-right: 1px solid var(--line); }
.workbench-tool:nth-last-child(-n+2) { border-bottom: 0; }
.workbench-tool > span:nth-child(2) { flex: 1; min-width: 0; }
.workbench-tool > span:last-child { color: var(--ink-faint); }
.workbench-tool strong { display: block; font-size: var(--t-2); font-weight: 600; line-height: 1.5; }
.workbench-tool small { display: block; font-size: var(--t-2); color: var(--ink-soft); line-height: 1.5; margin-top: 2px; }
.workbench-tool-phase { font-family: var(--font-mono); font-size: var(--t-1); text-transform: uppercase; letter-spacing: .035em; color: var(--ink-soft); width: 48px; flex: 0 0 48px; }
.workbench-tool:hover { background: var(--workspace-wash); }
.workbench-tool:focus-visible { outline: 2px solid var(--workspace-accent); outline-offset: -3px; }
.mc-reference { margin-top: 14px; border: 1px solid var(--line); border-radius: var(--r-3); background: var(--bg-card); overflow: hidden; }
.mc-reference > summary { padding: 14px 16px; font-size: var(--t-2); font-weight: 500; cursor: pointer; color: var(--ink-strong); }
.mc-reference > summary > span { float: right; margin-left: 12px; font-weight: 400; color: var(--ink-soft); }
.mc-reference[open] > summary { border-bottom: 1px solid var(--line); }
.mc-reference > .mc-ex-grid, .mc-reference > .mc-sec-h { margin: 16px; }
.mc-reference .mc-tele { margin: 0; border: 0; border-radius: 0; }
.mc-reference .mc-atlas { border: 0; border-radius: 0; }
.mc-reference .mc-tl-big, .mc-as-big { font-size: var(--t-4); font-weight: 500; font-variant-numeric: tabular-nums; }
.mc-tl-dot { animation: none; }
.mc-ex-go, .mc-atlas-foot a, .mc-tl-lnk { color: var(--workspace-accent); }
.mc-ex { box-shadow: none; }
.mc-ex-why, .mc-ex-note { font-size: var(--t-2); }
#mcTryOne { margin-top: 22px; }
.footer-note { font-family: var(--font-ui); text-transform: none; letter-spacing: 0; }
/* The canvas holds workflow sections. Only outputs and editable scientific
surfaces need their own container; avoid a border around every border. */
.view > .card:where(:not(.results-card, .dna-results-card, .tc-result-card, .primer-results-card, .plasmid-results-card, #crisprResultsCard)) {
background: transparent;
border: 0;
border-top: 1px solid var(--line);
border-radius: 0;
box-shadow: none;
padding: 24px 0;
}
.view > .card .card-header { padding-top: 0; }
.view > :is(.hero, .view-head) + .card { border-top: 0; padding-top: 0; }
.view > .card > .card-header:not(.results-header) { border-bottom: 0; padding-bottom: 0; }
/* ── Continue your research: a specimen and a log ───────────────────────
The newest run is a specimen card: the predicted fold of the protein it
was about (the real AlphaFold model, coloured by the model's own pLDDT —
structcard.js), beside a data sheet of the run. The rest hang off a
timeline under it: the date left of a spine, what was asked, what came
back, and the next open step.
The card is paper, not ink. The credits readout above it is the page's
one ink-and-amber object; a second slab in the same colours read as the
same thing twice (2026-10-19 review). Amber here is a mark, not a
surface: the LATEST chip, the step under way, and where the pointer is.
One markup serves both shapes (app.js: recentCardHtml), because which
run is newest changes without a repaint when the open conversation is
hidden; the stylesheet decides which parts each shape shows.
A run's title is whatever the member typed, often a raw sequence with no
spaces. overflow-wrap:anywhere breaks it mid-token; min-width:0 alone
does not. No line clamp on the title, deliberately: a clamp that caps a
six-line sequence also cuts a five-line prose title, and the prose is
what says what the run did. */
#mcResume {
grid-template-columns: minmax(0, 1fr);
gap: 0;
--tl-date: 64px;
--tl-node: 46px;
}
.mc-recent-nm { min-width: 0; line-height: 1.4; overflow-wrap: anywhere; word-break: break-word; }
.mc-recent-goal { overflow-wrap: anywhere; word-break: break-word; }
.mc-recent-next { overflow-wrap: anywhere; word-break: break-word; }
/* ── the log: every run that is not the newest ───────────────────────── */
#mcResume .mc-recent {
position: relative;
display: grid;
grid-template-columns: var(--tl-date) var(--tl-node) minmax(0, 1fr) auto;
align-items: start;
gap: 0;
padding: 0 0 26px;
background: none;
border: 0;
border-radius: var(--r-3);
box-shadow: none;
transform: none;
text-align: left;
color: var(--ink);
}
/* The spine, drawn per entry so a hidden entry leaves no gap; it stops at
the last entry's node. */
#mcResume .mc-recent:not(.mc-recent--featured)::before {
content: "";
position: absolute;
left: calc(var(--tl-date) + var(--tl-node) / 2);
top: 0;
bottom: 0;
width: 1px;
background: var(--line-strong);
}
#mcResume .mc-recent:not(.mc-recent--featured):last-child::before { bottom: auto; height: 12px; }
/* app.css hides the conversation already open in the Turing rail with
.mc-recent[hidden]; the display above outranks it, so it is restated. */
#mcResume .mc-recent[hidden] { display: none; }
#mcResume .mc-recent:hover { background: none; box-shadow: none; transform: none; }
#mcResume .mc-recent:focus-visible { outline: none; box-shadow: var(--ring) var(--brand-ring); }
#mcResume .mc-recent-when { display: flex; flex-direction: column; align-items: flex-end; gap: 4px; padding-top: 1px; }
#mcResume .mc-recent-when span {
font: 600 var(--t-1)/1 var(--font-mono);
letter-spacing: .14em;
text-transform: uppercase;
color: var(--ink-faint);
}
#mcResume .mc-recent-when b {
font: italic 600 var(--t-4)/1 var(--font-display);
font-variant-numeric: tabular-nums;
color: var(--ink-strong);
}
#mcResume .mc-recent-node {
position: relative;
z-index: 1;
justify-self: center;
width: 11px;
height: 11px;
margin-top: 4px;
border-radius: 50%;
background: var(--bg-app);
border: 1.5px solid var(--ink-strong);
transition: background-color var(--t-fast) var(--ease);
}
/* Where the pointer is: the node lights amber and the title takes an amber
underline. The entry itself does not move or fill — it is a line in a log. */
#mcResume .mc-recent:hover .mc-recent-node { background: var(--amber); }
#mcResume .mc-recent:hover .mc-recent-nm {
text-decoration: underline;
text-decoration-color: var(--amber);
text-decoration-thickness: 3px;
text-underline-offset: 5px;
}
#mcResume .mc-recent-fold { display: none; }
#mcResume .mc-recent-main { display: flex; flex-wrap: wrap; align-items: baseline; gap: 6px 8px; min-width: 0; }
#mcResume .mc-recent-kick,
#mcResume .mc-recent-goal,
#mcResume .mc-recent-record { display: none; }
#mcResume .mc-recent-nm { order: 1; flex: 1 0 100%; font: 500 var(--t-3)/1.4 var(--font-ui); color: var(--ink-strong); }
#mcResume .mc-recent-subject { order: 2; font-size: var(--t-2); line-height: 1.5; color: var(--ink-soft); }
#mcResume .mc-recent-subject:empty { display: none; }
#mcResume .mc-recent-subject b { font: 600 var(--t-2)/1 var(--font-mono); letter-spacing: .03em; color: var(--ink-strong); }
#mcResume .mc-recent-subject i { font-style: italic; }
#mcResume .mc-recent-facts { display: contents; }
#mcResume .mc-recent-outcome { order: 3; min-width: 0; font-size: var(--t-2); line-height: 1.5; color: var(--ink); }
/* The log's own punctuation, on log entries only (the specimen sheet has columns instead). */
#mcResume .mc-recent:not(.mc-recent--featured) .mc-recent-subject:not(:empty) ~ .mc-recent-facts .mc-recent-outcome::before { content: "→ "; color: var(--ink-faint); }
#mcResume .mc-recent-outcome.is-open > span { font-style: italic; color: var(--ink-soft); }
#mcResume .mc-recent-progress { order: 4; font: 500 var(--t-1)/1.5 var(--font-mono); color: var(--ink-faint); }
#mcResume .mc-recent:not(.mc-recent--featured) .mc-recent-progress::before { content: "· "; }
#mcResume .mc-recent-progress .mc-recent-steps { display: none; }
#mcResume .mc-recent-next { order: 5; flex: 1 0 100%; font-size: var(--t-2); line-height: 1.5; color: var(--ink-soft); }
#mcResume .mc-recent-next b { margin-right: 6px; font-weight: 600; color: var(--ink); }
#mcResume .mc-recent:not(.mc-recent--featured) .mc-recent-next b::after { content: ":"; }
/* Labels a reader of the log does not need to see, kept for a screen reader. */
#mcResume :is(.mc-recent-outcome, .mc-recent-progress) > b,
#mcResume .mc-recent:not(.mc-recent--featured) .mc-recent-state-t {
position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0;
overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0;
}
#mcResume .mc-recent-state {
align-self: start;
padding: 2px 4px 0 16px;
color: var(--ink-faint);
font: 600 var(--t-2)/1 var(--font-ui);
white-space: nowrap;
transition: color var(--t-fast) var(--ease), transform var(--t-fast) var(--ease),
background-color var(--t-fast) var(--ease);
}
#mcResume .mc-recent:hover .mc-recent-state { color: var(--ink-strong); }
@media (prefers-reduced-motion: no-preference) {
#mcResume .mc-recent:not(.mc-recent--featured):hover .mc-recent-state { transform: translateX(2px); }
}
/* ── the specimen: the newest run ────────────────────────────────────── */
#mcResume .mc-recent--featured {
grid-template-columns: 236px minmax(0, 1fr);
grid-template-areas: "fold main" "fold state";
grid-template-rows: auto 1fr;
margin-bottom: 30px;
padding: 0;
overflow: hidden;
background: var(--bg-card);
border: 1px solid var(--line);
border-radius: var(--r-5);
box-shadow: 0 1px 2px rgba(23, 35, 49, .06), 0 14px 32px -26px rgba(23, 35, 49, .32);
}
#mcResume .mc-recent--featured:hover { background: var(--bg-card); }
#mcResume .mc-recent--featured:focus-visible { box-shadow: var(--ring) var(--brand-ring); }
#mcResume .mc-recent--featured :is(.mc-recent-when, .mc-recent-node) { display: none; }
#mcResume .mc-recent--featured:hover .mc-recent-nm { text-decoration: none; }
#mcResume .mc-recent--featured .mc-recent-fold {
grid-area: fold;
align-self: stretch;
position: relative;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 12px;
padding: 18px;
background: var(--bg-subtle);
border-right: 1px solid var(--line);
}
#mcResume .mc-recent-cv { display: block; width: 196px; height: 196px; transition: opacity var(--t-base) var(--ease); }
#mcResume .mc-recent-fold:is([data-sc="idle"], [data-sc="loading"]) .mc-recent-cv { opacity: 0; }
#mcResume .mc-recent-fold-msg {
position: absolute;
top: 18px; left: 18px; right: 18px; height: 196px;
display: grid;
place-items: center;
font: 500 var(--t-1)/1 var(--font-mono);
letter-spacing: .12em;
text-transform: uppercase;
color: var(--ink-faint);
pointer-events: none;
}
#mcResume .mc-recent-fold[data-sc="loading"] .mc-recent-fold-msg::after { content: "Folding…"; }
#mcResume .mc-recent-fold[data-sc="error"] .mc-recent-fold-msg::after { content: "Structure unavailable"; }
#mcResume .mc-recent-fold[data-sc="none"] .mc-recent-cv { display: none; }
/* No accession, or an edited construct: a plain plate that says so, never a
squiggle that could be mistaken for a fold (structcard.js's rule). */
#mcResume .mc-recent-plate {
display: grid;
place-items: center;
width: 132px;
height: 132px;
border: 1px dashed var(--line-strong);
border-radius: var(--r-4);
font: 600 var(--t-5)/1 var(--font-mono);
letter-spacing: .04em;
color: var(--ink-faint);
}
#mcResume .mc-recent-fold-cap {
font: 600 var(--t-1)/1.3 var(--font-mono);
letter-spacing: .12em;
text-align: center;
text-transform: uppercase;
color: var(--ink-faint);
}
#mcResume .mc-recent--featured .mc-recent-main {
grid-area: main;
display: flex;
flex-direction: column;
flex-wrap: nowrap;
align-items: stretch;
gap: 10px;
padding: 22px 28px 0;
}
#mcResume .mc-recent--featured .mc-recent-kick {
display: flex;
align-items: center;
gap: 10px;
font: 500 var(--t-1)/1 var(--font-mono);
letter-spacing: .12em;
text-transform: uppercase;
color: var(--ink-faint);
}
#mcResume .mc-recent-chip {
padding: 4px 7px;
border-radius: var(--r-1);
background: var(--amber);
color: var(--amber-ink);
font-weight: 700;
}
#mcResume .mc-recent--featured .mc-recent-subject { order: 0; margin-top: 2px; font-size: var(--t-3); line-height: 1.2; }
#mcResume .mc-recent--featured .mc-recent-subject b {
margin-right: 8px;
font: italic 600 var(--t-5)/1.1 var(--font-display);
letter-spacing: -.015em;
}
#mcResume .mc-recent--featured .mc-recent-nm {
order: 0;
flex: none;
max-width: 66ch;
font: 400 var(--t-3)/1.5 var(--font-ui);
color: var(--ink);
}
#mcResume .mc-recent--featured .mc-recent-nm::before { content: "“"; }
#mcResume .mc-recent--featured .mc-recent-nm::after { content: "”"; }
/* With nothing resolved, the request is the headline. */
#mcResume .mc-recent--featured .mc-recent-subject:empty + .mc-recent-nm {
font: italic 600 var(--t-4)/1.3 var(--font-display);
color: var(--ink-strong);
}
#mcResume .mc-recent--featured .mc-recent-subject:empty + .mc-recent-nm::before,
#mcResume .mc-recent--featured .mc-recent-subject:empty + .mc-recent-nm::after { content: none; }
#mcResume .mc-recent--featured .mc-recent-goal {
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
max-width: 72ch;
font-size: var(--t-2);
line-height: 1.5;
color: var(--ink-soft);
}
/* The data sheet: one ruled row per fact, mono label, plain value. */
#mcResume .mc-recent--featured .mc-recent-facts { display: block; margin-top: 4px; border-top: 1px solid var(--line); }
#mcResume .mc-recent--featured :is(.mc-recent-outcome, .mc-recent-progress, .mc-recent-next, .mc-recent-record) {
display: grid;
grid-template-columns: 96px minmax(0, 1fr);
gap: 16px;
padding: 9px 0;
border-bottom: 1px solid var(--line);
font: 400 var(--t-2)/1.5 var(--font-ui);
color: var(--ink-strong);
}
#mcResume .mc-recent--featured :is(.mc-recent-outcome, .mc-recent-progress, .mc-recent-next, .mc-recent-record) > b {
position: static; width: auto; height: auto; margin: 0; overflow: visible; clip: auto; white-space: normal;
font: 600 var(--t-1)/1.9 var(--font-mono);
letter-spacing: .12em;
text-transform: uppercase;
color: var(--ink-faint);
}
#mcResume .mc-recent--featured .mc-recent-progress .mc-recent-steps { display: inline-flex; margin-right: 8px; }
#mcResume .mc-recent-steps { gap: 3px; vertical-align: -1px; }
#mcResume .mc-recent-steps i { width: 9px; height: 9px; border: 1.5px solid var(--ink-strong); border-radius: var(--r-hair); }
#mcResume .mc-recent-steps i.is-done { background: var(--ink-strong); }
#mcResume .mc-recent-steps i.is-on { background: var(--amber); border-color: var(--amber); }
#mcResume .mc-recent--featured .mc-recent-state {
grid-area: state;
align-self: end;
justify-self: start;
margin: 16px 28px 22px;
padding: 10px 16px;
border: 1px solid var(--ink-strong);
border-radius: var(--r-pill);
background: var(--ink-strong);
color: var(--bg-card);
}
#mcResume .mc-recent--featured:hover .mc-recent-state { background: var(--hover-fill); border-color: var(--hover-fill); color: var(--hover-text); }
.mc-tools { border-top: 1px solid var(--line); }
.mc-tools > summary { cursor: pointer; padding: 18px 0; font-size: var(--t-3); font-weight: 600; }
.mc-tools > summary span { float: right; font-size: var(--t-2); font-weight: 400; color: var(--ink-soft); }
.mc-tools > summary:focus-visible { outline: 2px solid var(--workspace-accent); outline-offset: 3px; }
.mc-tools .workbench-tools { border: 0; border-radius: 0; background: transparent; }
.mc-tools .workbench-tool { padding-left: 0; }
.mc-tools .workbench-tool:nth-child(even) { padding-left: 16px; }
@media (max-width: 560px) {
.mc-tools > summary span { float: none; display: block; margin-top: 6px; }
#mcResume { --tl-date: 40px; --tl-node: 30px; }
#mcResume .mc-recent--featured { grid-template-columns: minmax(0, 1fr); grid-template-areas: "fold" "main" "state"; grid-template-rows: auto; }
#mcResume .mc-recent--featured .mc-recent-fold { flex-direction: row; justify-content: flex-start; gap: 16px; padding: 14px 18px; border-right: 0; border-bottom: 1px solid var(--line); }
#mcResume .mc-recent-cv { width: 96px; height: 96px; }
#mcResume .mc-recent-fold-msg { top: 14px; left: 18px; right: auto; width: 96px; height: 96px; }
#mcResume .mc-recent-plate { width: 96px; height: 96px; font-size: var(--t-4); }
#mcResume .mc-recent--featured .mc-recent-main { padding: 18px 18px 0; }
#mcResume .mc-recent--featured :is(.mc-recent-outcome, .mc-recent-progress, .mc-recent-next, .mc-recent-record) { grid-template-columns: minmax(0, 1fr); gap: 2px; }
#mcResume .mc-recent--featured .mc-recent-state { margin: 14px 18px 18px; }
}
/* A distinct assistant surface, with readable prose and deliberate controls. */
.cp-head { gap: 8px; }
.cp-mark { font-family: var(--font-ui); font-size: var(--t-3); letter-spacing: -.02em; }
.cp-icon { width: 28px; height: 28px; display: inline-flex; align-items: center; justify-content: center; border-color: transparent; border-radius: var(--r-1); background: transparent; color: var(--ink-soft); }
.cp-icon:hover { background: var(--bg-subtle); color: var(--ink-strong); }
.cp-transcript { padding: 22px 18px 12px; }
.cp-empty { padding: 0; }
.cp-empty-kicker { font-family: var(--font-mono); font-size: var(--t-1); color: var(--ink-soft); text-transform: uppercase; letter-spacing: .07em; margin: 0 0 14px; }
.cp-empty .cp-empty-h { font-size: var(--t-4); line-height: 1.3; margin: 0 0 10px; }
.cp-brief { margin: 24px 0; padding-left: 12px; border-left: 2px solid var(--line-strong); font-size: var(--t-2); color: var(--ink-soft); line-height: 1.7; }
.cp-brief > span { color: var(--ink); font-weight: 500; }
.cp-brief ul { list-style: none; padding: 0; margin: 6px 0 0; }
.cp-starters { font-size: var(--t-2); color: var(--ink-soft); border-top: 1px solid var(--line); padding-top: 14px; }
.cp-starters summary { cursor: pointer; }
.cp-eg { background: var(--bg-card); min-height: 40px; font-family: var(--font-ui); font-size: var(--t-2); border-radius: var(--r-2); }
.cp-compose { border-radius: var(--r-3); background: var(--bg-card); border-color: var(--line-strong); margin: 12px 14px 0; }
.cp-compose:focus-within { border-color: var(--workspace-accent); box-shadow: var(--ring) var(--brand-ring); }
.cp-compose textarea { font-family: var(--font-ui); line-height: 1.5; overflow-y: auto; }
.cp-send { border-radius: var(--r-2); }
.cp-model { padding: 10px 0 14px; margin: 0 18px; background: var(--bg-card); }
.cp-model-sel { flex: 1 1 0; }
.cp-model-lbl { letter-spacing: .035em; }
.cp-model-note { line-height: 1.5; }
.cp-tool { background: var(--bg-card); }
.cp-tool-top { background: var(--bg-subtle); padding: 12px; }
.cp-tool-sum { color: var(--ink-soft); }
.cp-user { border-left-color: var(--workspace-accent); }
.cp-decision { background: var(--bg-card); border-top: 2px solid var(--workspace-accent); }
.cp-decision h3 { font-family: var(--font-ui); font-size: var(--t-3); font-style: normal; line-height: 1.45; }
.cp-plan-goal { margin: 7px 0 14px; color: var(--ink-strong); font-size: var(--t-2); line-height: 1.55; }
.cp-plan-h--steps { padding-top: 10px; border-top: 1px solid var(--line); }
.cp-review-action { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 14px; border: 1px solid var(--line-strong); border-radius: var(--r-3); background: var(--bg-card); }
.cp-review-action > div { min-width: 0; }
.cp-review-action strong, .cp-review-action span { display: block; }
.cp-review-action strong { color: var(--ink-strong); font-size: var(--t-2); font-weight: 600; }
.cp-review-action span { margin-top: 3px; color: var(--ink-soft); font-size: var(--t-1); line-height: 1.45; }
.cp-review-action button { flex: 0 0 auto; min-height: 36px; padding: 7px 10px; border: 1px solid var(--workspace-accent); border-radius: var(--r-2); background: transparent; color: var(--workspace-accent); font: 500 var(--t-2)/1.2 var(--font-ui); cursor: pointer; }
.cp-review-action button:hover { background: var(--workspace-wash); }
.cp-outcome { overflow: hidden; border: 1px solid var(--line-strong); border-top: 3px solid var(--workspace-accent); border-radius: var(--r-3); background: var(--bg-card); }
.cp-outcome-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 14px; padding: 16px; border-bottom: 1px solid var(--line); background: var(--bg-subtle); }
.cp-outcome-head > div { min-width: 0; }
.cp-outcome-kicker { display: block; margin-bottom: 6px; color: var(--workspace-accent); font: 600 var(--t-1)/1.2 var(--font-mono); letter-spacing: .07em; text-transform: uppercase; }
.cp-outcome h3 { margin: 0; color: var(--ink-strong); font: 600 var(--t-3)/1.42 var(--font-ui); letter-spacing: -.01em; }
.cp-outcome-status { flex: 0 0 auto; padding: 4px 7px; border-radius: var(--r-hair); background: var(--workspace-wash); color: var(--workspace-accent); font: 500 var(--t-1)/1.2 var(--font-ui); white-space: nowrap; }
.cp-outcome-status--partial { background: var(--warning-soft, var(--bg-subtle)); color: var(--warning-ink, var(--ink-soft)); }
.cp-outcome-section { padding: 14px 16px 0; }
.cp-outcome-section > strong { display: block; margin-bottom: 8px; color: var(--ink-strong); font: 600 var(--t-2)/1.3 var(--font-ui); }
.cp-outcome-section ul { list-style: none; margin: 0; padding: 0; }
.cp-outcome-section li { padding: 7px 0; border-top: 1px solid var(--line); color: var(--ink); font-size: var(--t-2); line-height: 1.5; }
.cp-outcome-section li:first-child { border-top: 0; padding-top: 0; }
.cp-outcome-section li span { display: block; margin-bottom: 2px; color: var(--ink-soft); font-size: var(--t-1); }
.cp-outcome-section li .cp-outcome-finding { display: inline; margin: 0; color: var(--ink); font-size: var(--t-2); }
.cp-outcome-view { float: right; margin: -1px 0 0 8px; padding: 0; border: 0; background: transparent; color: var(--workspace-accent); font: 500 var(--t-1)/1.5 var(--font-ui); cursor: pointer; }
.cp-outcome-view:hover { text-decoration: underline; }
.cp-tool--referenced { outline: 2px solid var(--workspace-accent); outline-offset: 2px; transition: outline-color .3s ease; }
.cp-outcome-caveats li { color: var(--ink-soft); }
.cp-outcome-evidence { display: flex; align-items: center; flex-wrap: wrap; gap: 6px; margin: 12px 16px 0; padding-top: 12px; border-top: 1px solid var(--line); color: var(--ink-soft); font-size: var(--t-1); }
.cp-outcome-evidence b { padding: 3px 6px; border: 1px solid var(--line); border-radius: var(--r-hair); color: var(--ink); font-weight: 500; }
.cp-outcome-actions { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 7px; padding: 16px; }
.cp-outcome-actions button { min-width: 0; min-height: 38px; padding: 8px 9px; border: 1px solid var(--line-strong); border-radius: var(--r-2); background: transparent; color: var(--ink); font: 500 var(--t-2)/1.3 var(--font-ui); cursor: pointer; }
.cp-outcome-actions button:hover { border-color: var(--workspace-accent); background: var(--workspace-wash); color: var(--workspace-accent); }
.cp-outcome-actions .cp-outcome-primary { border-color: var(--workspace-accent); background: var(--workspace-accent); color: var(--on-accent, #fff); }
.cp-outcome-actions .cp-outcome-primary:hover { filter: brightness(.94); color: var(--on-accent, #fff); }
@media (max-width: 480px) {
.cp-review-action { align-items: stretch; flex-direction: column; }
.cp-review-action button { width: 100%; min-height: 44px; }
.cp-outcome-head { display: block; }
.cp-outcome-status { display: inline-block; margin-top: 10px; white-space: normal; }
.cp-outcome-actions { grid-template-columns: 1fr; }
.cp-outcome-actions button { min-height: 44px; }
}
.cp-decision-preview:not(:empty) { background: var(--bg-subtle); }
.cp-decision button { font-size: var(--t-2); }
.result-table { font-variant-numeric: tabular-nums; }
.result-table th { font-family: var(--font-ui); font-size: var(--t-2); font-weight: 500; text-transform: none; letter-spacing: 0; }
.disclaimer-title { font-size: var(--t-5); }
.disclaimer-body { font-family: var(--font-ui); }
button.primary, .primary, .secondary, .btn-primary { border-radius: var(--r-2); }
/* Continuous desktop shell. Retain the original geometry variables so
rail collapse and existing hit-testing logic keep their single owner. */
@media (min-width: 960px) {
body[data-cockpit]:not([data-bench="open"]) { --shell-gap: 0px; --shell-r: 0px; }
body[data-cockpit]:not([data-bench="open"]) .sidebar { border-width: 0 1px 0 0; background: var(--bg-subtle); }
body[data-cockpit]:not([data-bench="open"]) .cockpit { border-width: 0 1px 0 0; }
body[data-cockpit]:not([data-bench="open"]) .content { border: 0; }
body[data-cockpit]:not([data-bench="open"]) .topbar { border-radius: 0; }
}
@media (min-width: 1200px) {
body[data-cockpit]:not([data-bench="open"]) { --sidebar-w: 184px; }
body[data-cockpit]:not([data-bench="open"]) .sidebar { padding-inline: 10px; gap: 12px; }
body[data-cockpit]:not([data-bench="open"]) .sb-head { margin-inline: -10px; padding-inline: 14px; }
body[data-cockpit]:not([data-bench="open"]) .brand,
body[data-cockpit]:not([data-bench="open"]) .nav-item,
body[data-cockpit]:not([data-bench="open"]) .acct-trigger,
body[data-cockpit]:not([data-bench="open"]) .sidebar-signin { justify-content: flex-start; gap: 10px; }
body[data-cockpit]:not([data-bench="open"]) .nav-item { padding: 10px 8px; min-height: 40px; }
body[data-cockpit]:not([data-bench="open"]) .brand-word,
body[data-cockpit]:not([data-bench="open"]) .nav-step-nm,
body[data-cockpit]:not([data-bench="open"]) .nav-item > span:not([class]) {
position: static; width: auto; height: auto; margin: 0; overflow: visible;
white-space: normal; clip: auto; -webkit-clip-path: none; clip-path: none;
font-size: var(--t-2); line-height: 1.35;
}
body[data-cockpit]:not([data-bench="open"]) .brand-word { font-size: var(--t-3); }
body[data-cockpit]:not([data-bench="open"]) .acct-meta {
position: static; width: auto; height: auto; margin: 0; clip: auto;
-webkit-clip-path: none; clip-path: none; overflow: hidden;
}
body[data-cockpit]:not([data-bench="open"]) .nav-item.active { background: var(--workspace-wash); color: var(--workspace-accent); }
body[data-cockpit]:not([data-bench="open"]) .nav-item.active .nav-icon { color: var(--workspace-accent); }
}
@media (max-width: 1199px) and (min-width: 901px) {
.view--mission { padding: 28px 24px 40px; }
.workbench-tools { grid-template-columns: 1fr; }
.workbench-tool:nth-child(odd) { border-right: 0; }
.workbench-tool:nth-last-child(2) { border-bottom: 1px solid var(--line); }
}
@media (max-width: 900px) {
.view--mission { padding: 22px 18px 32px; }
.mc-h { font-size: var(--t-5); }
.mc-enter { display: flex; }
.mc-enter-cta, .mc-enter-find { min-height: 44px; flex: 1 1 220px; justify-content: center; }
.mc-sec { margin-top: 24px; }
.workbench-tools { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.workbench-tool { min-height: 88px; padding: 14px; flex-wrap: wrap; gap: 6px; }
.workbench-tool-phase { flex-basis: 100%; width: auto; }
.workbench-tool > span:last-child { display: none; }
.workbench-tool small { font-size: var(--t-2); }
.mc-reference > summary { min-height: 44px; line-height: 1.5; }
.mc-reference > summary > span { display: block; float: none; margin: 4px 0 0 14px; font-size: var(--t-2); }
.mc-empty-action { min-height: 44px; }
.mc-work-empty { padding: 16px; gap: 8px; }
.cp-head { min-height: 56px; }
.cp-transcript { padding: 18px; }
.cp-brief { font-size: var(--t-3); }
.cp-compose textarea { font-size: var(--t-4) !important; }
.cp-eg, .cp-starters summary { min-height: 44px; }
.cp-starters summary { padding-block: 10px; }
}
@media (prefers-reduced-motion: reduce) {
.workbench-tool { transition: none; }
}
.cp-action-icon { width: 16px; height: 16px; flex-shrink: 0; }
body[data-cockpit="min"] #cpCollapse .cp-action-icon { transform: rotate(180deg); }
.hero h1 { font-size: var(--t-5); line-height: 1.25; }
.card-header h2 { font-size: var(--t-4); font-weight: 600; }
.ghost, .plasmid-viewtoggle, .pe-tbbtn { border-radius: var(--r-2); }
@media (min-width: 901px) {
.cp-compose textarea { height: 38px; }
}
.card .primary { background: var(--ink-strong); color: var(--on-ink); border: 1px solid var(--ink-strong); box-shadow: none; }
.card .primary:disabled { opacity: .5; }
@media (max-width: 900px) {
.cp-model-note { font-size: var(--t-2); }
}
.modal-header h2 { font-family: var(--font-ui); font-style: normal; font-size: var(--t-4); font-weight: 600; }
.cp-model-off { opacity: 1; }