@@ -10,8 +10,21 @@ in `out/` is served by any static host (GitHub Pages, GitLab Pages, Bitbucket).
1010
1111** Key Features:**
1212- Search over curated repository listing (` repositories.txt ` )
13- - Breadcrumb trail under the menu (` components/breadcrumbs.jsx ` +
14- ` lib/breadcrumbs.js ` ): mirrors ` /user/repo/branch ` with linked ancestors;
13+ - Dark mode, 100% CSS switching (` components/theme-toggle.jsx ` +
14+ ` plans/css-only-dark-mode.md ` ): three radios (light/dark/system) on the
15+ right side of the ` .theme-bar ` row below the header, rendered by
16+ ` app/layout.jsx ` — the breadcrumb trail shares the row on report routes
17+ (crumbs left, toggle right, vertically centered; the right-edge mirror
18+ of the breadcrumbs' left-edge alignment) — palettes selected in
19+ ` app/globals.css ` via ` :root:has(#rf-theme-…:checked) ` +
20+ ` prefers-color-scheme ` ; an inline pre-paint script in ` app/layout.jsx `
21+ only restores/persists the choice (CSP-hashed by the build). Guards:
22+ ` tests/unit/theme-css.test.js ` (the two dark blocks must stay
23+ byte-identical; all hex colors live in the palette blocks; dark palette
24+ passes the same WCAG AA math as ` tests/unit/css-a11y.test.js ` )
25+ - Breadcrumb trail on the theme bar row under the menu
26+ (` components/breadcrumbs.jsx ` + ` lib/breadcrumbs.js ` ): mirrors
27+ ` /user/repo/branch ` with linked ancestors;
1528 the repo crumb never self-links, and ReportView announces the resolved
1629 branch (` rf:branch-resolved ` event) so the label matches the loaded report
1730 (` main ` 404 → ` master ` fallback)
@@ -130,6 +143,14 @@ coverage there when introducing new markup patterns.
130143- ** Environment config:** meta tags in ` app/layout.jsx ` (` submission-target ` ,
131144 ` sentry-dsn ` , ` platform-base-url ` ) plus ` NEXT_PUBLIC_HOSTING_ENVIRONMENT `
132145 / ` NEXT_PUBLIC_BASE_PATH ` at build time.
146+ - ** Theming:** see the dark-mode bullet above — the radios in
147+ ` components/theme-toggle.jsx ` are the single source of truth; never add
148+ JS-driven styling. All colors must be custom properties declared only in
149+ the four palette blocks (` :root ` , ` html:root ` mvp overrides, and the two
150+ identical dark blocks) in ` app/globals.css ` ; mvp.css light overrides must
151+ stay on ` html:root ` (mvp loads after the bundle). Report-template
152+ widgets that hardcode light colors are re-driven from ` main#app … `
153+ rules there (the mustache stays byte-identical).
133154
134155## Report Tables (Enhanced)
135156
@@ -178,7 +199,7 @@ coverage there when introducing new markup patterns.
178199
179200## Current Test Count
180201
181- ~ 543 unit/integration + ~ 202 E2E (~ 198 across three browsers + 4 basePath leg).
202+ ~ 584 unit/integration + ~ 229 E2E (~ 202 across three browsers + 4 basePath leg + 27 dark mode ).
182203
183204WCAG 2.2 AA / HTML5 guards live in tests/unit/html5-attributes.test.js,
184205tests/unit/report-template-wcag.test.js, tests/unit/css-a11y.test.js and
0 commit comments