Spaces:
Running
Running
| /* βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| science.css β disclosure surfaces added for the 2026-08 scientific | |
| review. Kept out of app.css deliberately: this is a small, self-contained | |
| layer, and app.css is ~8,000 lines with a hostile cascade (see | |
| docs/ENGINEERING.md Β§13). | |
| TOKENS: only variables that already exist are used β here --line, --ink | |
| and --ink-soft. Inventing a token name silently computes the whole | |
| shorthand to nothing (Β§13.1), so grep app.css before adding one. | |
| βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ */ | |
| /* βββ CRISPR scope strip βββββββββββββββββββββββββββββββββββββββββββββββ | |
| The three things the results panel used to leave the reader to infer: | |
| the composite's weight, what repair context the indel columns assume, | |
| and how much of the genome was actually searched. Sits directly above | |
| the table, always visible β not a collapsed <details>, because the whole | |
| failure being fixed is that these facts were one click away and nobody | |
| clicked. Quiet by default so it informs without shouting over the data. */ | |
| .crispr-scope-strip { | |
| margin: 10px 0 12px; | |
| padding: 10px 12px; | |
| border: 1px solid var(--line); | |
| border-left-width: 3px; | |
| border-radius: 6px; | |
| font-size: 0.82rem; | |
| line-height: 1.5; | |
| color: var(--ink-soft); | |
| display: grid; | |
| gap: 6px; | |
| } | |
| .crispr-scope-strip:empty { display: none; } | |
| .crispr-scope-row { | |
| display: grid; | |
| grid-template-columns: 8.6rem 1fr; | |
| gap: 10px; | |
| align-items: baseline; | |
| } | |
| .crispr-scope-k { | |
| font-weight: 600; | |
| color: var(--ink); | |
| letter-spacing: 0.01em; | |
| text-transform: uppercase; | |
| font-size: 0.68rem; | |
| padding-top: 0.12rem; | |
| } | |
| .crispr-scope-v strong { color: var(--ink); font-weight: 600; } | |
| .crispr-scope-v em { font-style: italic; } | |
| /* Stack on narrow screens β a 8.6rem label column plus prose does not fit | |
| a phone, and the label is short enough to read as a heading. */ | |
| @media (max-width: 640px) { | |
| .crispr-scope-row { grid-template-columns: 1fr; gap: 2px; } | |
| } | |
| /* βββ Provenance block: the "Assumes" line βββββββββββββββββββββββββββββ | |
| Rendered by TDMethods from METHODS[*].assumes. Distinct from .basis | |
| (how the number was made) because it states the biological context the | |
| number is only valid inside β the difference between "here's the | |
| method" and "here's when it doesn't apply". */ | |
| .method-assumes { | |
| margin: 4px 0 0; | |
| color: var(--ink-soft); | |
| } | |
| .method-assumes strong { color: var(--ink); } | |
| /* βββ Directed evolution: search objective + library spread βββββββββββ | |
| The reviewer asked what score the simulated annealing maximises and | |
| could not find out β it was stated only inside the copy-paste | |
| manuscript paragraph. These two notes sit between the parameter pills | |
| and that paragraph: the objective in prose, and the MEASURED occupancy | |
| of the most-shared substitution in the library on screen. */ | |
| .run-notes { | |
| display: grid; | |
| gap: 8px; | |
| margin: 10px 0 4px; | |
| } | |
| .run-notes:empty { display: none; } | |
| .run-objective, | |
| .run-diversity { | |
| margin: 0; | |
| padding: 9px 11px; | |
| border: 1px solid var(--line); | |
| border-radius: 6px; | |
| font-size: 0.82rem; | |
| line-height: 1.55; | |
| color: var(--ink-soft); | |
| } | |
| .run-objective strong, | |
| .run-diversity strong { color: var(--ink); font-weight: 600; } | |
| .run-diversity code { | |
| font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; | |
| font-size: 0.94em; | |
| } | |