Parallel System
A parallel system treats dark mode as its own complete design surface with unique rules for elevation, chroma, and text. Your light palette might use sharp shadows and high contrast whites. Dark mode cannot. Shadows disappear. Saturated colors bloom into painful halos. The concept exists because inversion creates flat grey disasters or burning accents that drive users back to light mode within minutes.
The entire system gets designed separately yet maps to the exact same semantic layer. Background, surface, accent, and text tokens stay consistent in name. Only the OKLCH values change. This lets components ignore the mode switch entirely while the root theme swaps the primitives. It is more work than slapping a media query on your light tokens. It is the only approach that does not look like an afterthought at 2 a.m.
A parallel system is not your light palette run through HSL darken functions. It is not a Figma plugin that flips lightness values and calls it done. The most common confusion comes from teams who treat dark mode as cosmetic instead of architectural. They end up with the same hues at wrong lightness levels creating mud or vibration. That is theme inversion. It is not a parallel system.
It is also not user custom themes like Arc browser spaces. Those let people pick any hue per workspace. A parallel system protects brand identity while adjusting only the physics of perception. Hue stays locked. Lightness lifts. Chroma drops. The brand stays recognizable. The eye stays comfortable.
Linear shipped a reference parallel system in 2022. Their light purple lives around oklch(0.62 0.22 270). The dark version shifts to oklch(0.72 0.15 270) against a warm oklch(0.10 0.012 30) background. Surface tokens step up in tight 0.04 increments creating four tiers without a single shadow. The UI feels like one seamless dark field with real depth. Adoption rates jumped because the dark mode finally felt as considered as the light one.
Stripe followed the same logic with their brand blue. They lifted lightness 10 points and pulled chroma back 25 percent. Their dense data tables remain readable at every surface tier because the elevation model was built in parallel rather than borrowed. Vercel proved the opposite extreme works too. Their binary background and elevated surface commit fully to the parallel approach without half measures. No muddy greys. No regrets.
Use a parallel system when your product sees heavy night usage or long sessions. Code editors, dashboards, design tools, and reading apps earn every hour spent. Skip it on marketing sites where dark mode is mostly cosmetic. The tradeoff is maintenance. You now own two complete primitive sets and must QA both for shimmer, halo, and bloom. Teams without senior oversight will drown in the details.
The extra effort only pays off if craft matters more than velocity. Early stage products can survive with clever inversion for the first year. Once real users stare at your UI past midnight the parallel system becomes non negotiable. Anything less signals you stopped at the settings page.
Build dark mode like it has to stand alone at 2 a.m. or do not bother building it at all.
Read the full guide
Related terms
Keep exploring
Dark Mode
Dark mode is a complete second theme with its own surface colors, contrast rules, elevation logic, and typography adjustments designed from scratch against the same components as the light theme.
Semantic Tokens
Design tokens that assign meaning to raw values. Instead of referencing color-blue-500 directly, components reference color-primary, which resolves to the appropriate raw value.
Surface Elevation
Surface elevation creates visual hierarchy in dark mode by lightening each raised UI surface rather than casting shadows. The technique replaces the light mode shadow system with a stepped scale of surfaces that step toward the viewer.
Accent Calibration
Accent calibration lifts lightness and drops chroma on brand colors for dark mode while locking hue in place so the color stays recognizable without haloing or burning retinas at night.