When I inspected the existing dark mode, the diagnosis was familiar: it wasn't designed, it was inverted. Colors were hardcoded screen by screen. The same grey meant three different things in three different places. Text failed contrast on dark surfaces. And SAB's brand red - saturated and heavy - vibrated against black, turning harsh, hard to read, and impossible to use across large surfaces or text.
It was the same problem as the rest of the app, wearing a different skin: no system underneath.
So I didn't add a dark theme. I rebuilt the color layer from the tokens up.
Instead of raw colors bound to components, I defined a semantic token architecture - tokens named by role, not by value. A surface token. A primary text token. A border token. A danger token. Each mapped to a different value in light and dark, but the component never knew the difference. Design once, theme everywhere.
This solved three problems at once:
Brand integrity: I reworked how SAB red behaved across modes, tuning tints, elevations, and accent usage so the brand stayed unmistakably SAB without burning the eyes on dark surfaces.
Accessibility: Every token pairing was validated for WCAG AA contrast, so legibility held up in both themes instead of collapsing in the darker one.
Scale: Because theming lived in tokens, dark mode propagated automatically across thousands of screens, every hub, every product page, and both the adult and kids experiences - without redesigning a single component twice.
Dark mode stopped being a cosmetic toggle. It became proof that one architecture could carry two complete visual worlds. What Family Banking proved for interaction, color now proved for surface: the system didn't just hold - it scaled into its opposite.