demo-token-cleanuprun.md01_define/output/spec.mdDemo is the design source of truth, yet it hardcodes raw palette colours in places that
CONVENTIONS.md explicitly forbids ("Don't hardcode raw palette colours … use tokens"). The demo
sidebar uses bg-blue-600, text-gray-900/600/400, bg-white, border-gray-200 and
hover:bg-gray-100 instead of the shared --sidebar-*/semantic tokens, and several demo dashboard
components hardcode grays where web uses semantic tokens. Left as-is, "match demo" would propagate raw
palette colours into web and block a consistent light/dark result. This is stub 3 of the
demo-web-parity epic (initiative: Refine the Bridge / objective Q2 2026 — O1 vendor engagement):
per the styling decision, demo is fixed up to the design system so web can reliably match demo's
light output and future dark-mode work has a clean base.
Replace demo's hardcoded raw colours with the shared semantic tokens (--sidebar-*, bg-card,
text-muted-foreground, text-foreground, border-border, etc.), starting with
apps/demo/components/sidebar.tsx and extending to demo dashboard components under
apps/demo/components/dashboard/ that hardcode grays. Demo's layout and logic stay unchanged — this
is a colour-token pass only. Light-mode output must remain visually unchanged (or improved).
apps/demo/components/sidebar.tsx uses --sidebar-*/semantic tokens; no bg-blue-600, text-gray-*, bg-white, border-gray-* or hover:bg-gray-* literals remain.apps/demo/components/dashboard/ that hardcoded grays now use semantic tokens (text-muted-foreground, text-foreground, border-border, bg-card, etc.).pnpm lint passes with no new raw-colour violations.design-system-reconciliation).apps/demo (web/dashboards components).02_build/output/notes.mdfeat: demo-token-cleanup — sidebar uses --sidebar-* tokens, feat: demo-token-cleanup — dashboard components use semantic colour tokensapps/demo/components/sidebar.tsx: every raw palette literal replaced with --sidebar-* / semantic
tokens — chrome/borders → bg-sidebar/border-sidebar-border, brand mark & notification badge →
bg-sidebar-primary/text-sidebar-primary-foreground, nav hover/active → bg-sidebar-accent/
text-sidebar-foreground, secondary text → text-muted-foreground, mobile scrim → bg-foreground/20.apps/demo/components/dashboard/** (66 components): neutral grays mapped to semantic tokens on a
consistent scale — gray-900/800/700 → text-foreground, gray-600/500/400/300 →
text-muted-foreground, border-gray-* → border-border, bg-white → bg-card,
bg-gray-50/100/200 → bg-muted, hovers → hover:bg-muted/hover:text-foreground. The blue
accent (bg-blue-500/600, text-blue-*) → bg-primary/text-primary, blue tints → bg-primary/10.bg-gray-900 text-white hover:bg-gray-700) → bg-foreground text-background hover:bg-foreground/90; the urgent action pill's translucent overlay (bg-white/20) →
bg-primary-foreground/20, and its white-on-primary text → text-primary-foreground.apps/demo/components/sidebar.tsx uses --sidebar-*/semantic tokens; no bg-blue-600, text-gray-*, bg-white, border-gray-* or hover:bg-gray-* literals remain — verified by grep (0 matches).apps/demo/components/dashboard/ that hardcoded grays now use semantic tokens — 66 components converted; 0 in-scope gray/blue/white/black literals remain by grep.foreground=gray-900, muted-foreground=gray-600, border=gray-200, card=white).pnpm lint passes with no new raw-colour violations — only colour-class strings changed; verified in CI.emerald/red/amber for RAG,
urgency, deltas) were left as-is — they're status indicators, not the grays/blue-accent this cleanup
targets, and reconciling them into success/warning/destructive tokens is variant-reconciliation
(stub 1), explicitly out of scope here. The 5 remaining text-white literals all sit on those kept
status surfaces.foreground/muted-foreground), so a
few gray-400 captions render one step darker (gray-600). This is the intended "fix demo up to the
design system" result — worth a glance on the demo preview to confirm it reads as improved.03_release/output/release.mdbg-foreground text-background; translucent overlay on the primary action pill → bg-primary-foreground/20 text-primary-foreground; white-on-primary text → text-primary-foreground.apps/demo/components/sidebar.tsx uses --sidebar-*/semantic tokens; no bg-blue-600/text-gray-*/bg-white/border-gray-*/hover:bg-gray-* literals — verified by grep (0 matches).pnpm lint passes with no new raw-colour violations — Quality Project CI check green.