Remap roles, not channels
surface, ink, accent — the roles stay, the values change. Inverting channels turns a warm paper into a cold slate and a red error into a cyan error. The site's theme-drop scene swaps the token values, and the light theme is a different theme, not a negative.
Shadows die in the dark; elevation needs a new language
On near-black, box-shadows are invisible — elevation comes from surface lightness: one step up per layer. Borders get lighter, not darker. And the accent usually needs to lose saturation: a brand violet at full strength on black vibrates.
- Test images and charts first — they were designed for light.
- Elevation = lightness steps, documented as tokens, not one-off greys.
- The dark theme ships when its contrast pairs pass, not when the toggle exists.