Light
Brand blue accent (#2563eb), near-black text on #f6f6f7 surfaces.
Dark
Lime accent (#a3e635), light text on #050506 surfaces.
Auto
Follows your OS
prefers-color-scheme.Persistence
Your choice writes tolocalStorage under the key dashTheme (light,
dark, or system). The value is read on every page load before React
mounts, so there’s no flash of the wrong theme.
Accessibility
- WCAG 2.1 AA contrast on all text against its surface (audited via axe-core in CI for the dashboard’s primary surfaces).
prefers-reduced-motionhonored — entry animations, theme cross-fades, and the welcome screen all skip when set.- Keyboard navigation — every interactive control is in tab order, focus rings use the theme accent color, never browser default.
- Screen-reader labels — all icon-only buttons have
aria-label. The balance pill announces “Balance: $X.XX”. - Color is never the only signal — instance status, GPU availability, validation errors all combine color with text or shape.
Branding consistency
The lime/blue split is intentional:- Lime (
#a3e635) is our brand identifier. It appears in the logo always, regardless of theme. In dark mode it doubles as the primary accent for CTAs. - Brand blue (
#2563eb) is the light-mode CTA accent. Lime fails contrast on white, so we substitute. The lime accent line stays in the logo for brand recognition.