Hardcoded colors are technical debt that compounds in the dark. A bg-emerald-500 on a stat card works in one theme and looks alien in another. An rgba() value in a toolbar doesn't adapt when the surface behind it changes. A text-slate-400 that's readable on white becomes invisible on navy.
Eight files swept. Dashboard stat cards moved from Tailwind color classes to token classes. Toolbar calendar and select components moved from rgba() to var(). The tenant table moved from text-slate-* to text-prime-text-*. Quick Measure moved from #fff and #000 to token references with color-mix() for shadows — color-mix(in srgb, var(--color-prime-deep) %, transparent) adapts to whatever the deep surface color is, instead of assuming black.
The analytics page got redesigned alongside the sweep. The old view showed generic charts. The new one leads with lawn-care-specific KPIs: Total Revenue, Average Job Value, Close Rate, Jobs Closed. Secondary insights — average per month, jobs won versus lost, top lead source. A Best Month banner that celebrates the peak. All token-driven, all theme-adaptive.
A Revenue link in the sidebar, pro-plan gated with orders read permission. And a missing campaignFilter state in the dashboard store that the component had been referencing against undefined — a bug that manifested as nothing, which is the hardest kind to notice.
Token sweeps pay compound interest. Every hardcoded value replaced now is one that automatically adapts when the theme changes — and the theme will change, because design is never finished.