feat(themes): adopt Carol DS token surface with --color-* bridge (#138) #147
No reviewers
Labels
No labels
area:auth
area:ci
area:db
area:infra
area:native
area:pwa
area:service
epic
feature
foundation
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
james/carol!147
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "138-ds-tokens"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Closes #138. Extends
app/themes/{light,dark}.csswith the full Carol DS alias set the design package (../carol-design/) expects. The existing seven-name--color-*surface stays at its pre-DS values so every existing inline-styled component renders pixel-identically — the per-surface rebuild tickets (Profile / Skills / Education / Account / Notes / login / register) flip components onto the DS aliases one screen at a time, and a final cleanup ticket retires--color-*once every surface has flipped.What's added
--bg,--bg-subtle,--surface,--surface-2,--surface-3,--inset--text,--text-secondary,--text-muted,--text-faint--border,--border-strong,--border-subtle--accent,--accent-fg,--accent-subtle,--accent-text,--ring:root)--blue-400…700, ink ramp--ink-25…950Values lifted from
../carol-design/README.md§Design Tokens. The handful of light-theme aliases the README leaves unspecified (--bg-subtle,--surface-3,--inset,--border-strong/subtle,--text-faint,--accent-subtle) are derived from the ink ramp / blue scale to match the dark-theme pattern — comments inlight.cssflag the derivation so a future "spec these properly" pass knows where to look.Critical decision: the two token surfaces do NOT redirect
--color-fg-muteddoes not resolve to--text-secondary.--color-bgdoes not resolve to--bg. Doing so would flip every existing surface visually in one PR — exactly the regression the bridge exists to prevent.The two sets are independent: same theme files, same selectors, distinct definitions. They share nothing except declaration context. Per-surface rebuild tickets do the flip one screen at a time. ADR-0023 documents the call in full, including alternatives rejected (atomic rewrite, full redirect, separate
tokens.cssmodule, CSS preprocessor).Acceptance criteria (from #138)
git grep "var(--color-"still returns matches — 150 across 10 files. Bridge confirmed; new code reaches for the DS names.--color-*declarations are pre-DS values verbatim.CLAUDE.md update
The "Themes are pluggable" line was extended to call out the DS token surface as the new vocabulary and the
--color-*bridge as transitional. ADR-0008 stays cited as the engine; ADR-0023 stacks on top for the token migration.Test plan
npm run typecheck— clean.npm run lint— clean.npm run build— clean.git grep -c "var(--color-"totals 150 matches acrossapp/(app)/account,notes,profile,experience,skills,components,layout— i.e. every surface (no inline-styled component changed)./profile,/skills,/experience,/account,/notes,/login,/registerin both light and dark themes and confirm pixel-equal rendering vs main.Closes #138. Part of epic #4 (the per-surface rebuilds consume from here).
🤖 Generated with Claude Code
📊 Test coverage
Patch coverage: no testable lines changed.
Overall (
app/,lib/,db/, excluding UI per ADR-0019):Soft thresholds per ADR-0019. Coverage is informational and does not block merge.