After fixing the same dark-mode bug 4x one surface at a time, swept
it system-wide. Root pattern: var(--name, fallback) where --name is
NOT a token in tokens.css -> the light fallback applied in BOTH themes
-> dark broken. Offenders: --color-surface*, --color-border*,
--color-text*, --text-color, --surface* (none are tokens).
- Remapped all 53 occurrences in common.css to the real theme-aware
tokens (--surface-base/-dim/-container, --border-default,
--text-primary/-body/-muted), KEEPING each fallback literal
(comma-boundary sed). Diff verified: exactly 53/53 var-name-only
swaps, no fallback/structure change, line count unchanged.
- Light mode: identical where token==fallback (#fff, off-whites);
minor canonical nudges where they differ (muted #888->#666, body
#333->#515151, primary #111->#333, borders ->#e0e0e0) — the design
system's intended values, the 'light looks better' direction.
- Dark mode fixed app-wide (wells, suggest cards, counts, checksum
table, and every other surface using these vars).
- Excluded (not the bug): --shop-theme-*, --color-accent, --pico-*,
--primary-color, the --dark-* family, theme-neutral font/size vars.
- CLAUDE.md: DARK-MODE TRAP rule + pre-commit grep gate. mps-24.md
Phase 2.8r. 1151 passed (CSS-only).