2026-07-04 — v24 design-system cohesion + launch readiness
This pass closes cohesion gaps across the shipped app: token fallbacks are now first-class
variables, reference/variant tokens live in the primary token block, transition timing is
standardized on --transition-fast, focus rings are consistently 3 px in the
action-heavy contig/primer surfaces, and spinners now respect reduced-motion preferences.
For launch-readiness, README now leads with an animated open → render → share → analyze hero
GIF and a one-paragraph product pitch that keeps the privacy promise explicit: all parsing,
rendering, sharing state, and analysis stay in-browser.
What changed
-
Token cohesion (
src/style.css). Added explicit--color-hover,--color-accent,--color-accent-muted,--color-error, and--color-error-mutedfor light+dark themes and removed ad-hoc fallback literals from workspace-bar styles. -
Single source of token truth (
src/style.css). Moved Reference Panel and Variant Table token declarations into the main light/dark token blocks and removed the appended duplicate:rootsection. -
Motion + focus consistency (
src/style.css). Replaced remaining hard-coded0.12s/0.1stransitions withvar(--transition-fast), aligned key component focus outlines to 3 px--color-focus-ring, and added aprefers-reduced-motionspinner guard. -
Launch-ready README hero (
README.md,docs/hero-open-render-share-analyze.gif). Added an animated hero GIF and concise pitch paragraph for first-time visitors.
Spec grounding
docs/specs/01-shareable-permalinks.md(share flow messaging + privacy language)docs/specs/07-reference-alignment.md+08-variant-calling-review.md(reference/variant surfaces themed coherently)docs/specs/05-paired-read-contig-assembly.md+09-primer-design-and-tm.md+10-in-silico-pcr.md(contig/primer focus-state parity)
Tests
| File | Assertion |
|---|---|
tests/e2e/permalink.e2e.test.ts |
Share button focus ring width is exact 3px in light and dark modes. |
tests/e2e/ux-a11y.e2e.test.ts |
With reduced motion enabled, loading spinner computes to animation-name: none and animation-duration: 0s. |