Design tokens were introduced as a solution to the synchronization problem between design tools and code: if both designers and engineers reference the same named variable rather than a raw hex value, a color change can propagate across the entire product by updating a single definition. But tokens are more than a synchronization mechanism — they encode semantic meaning, enforce systematic consistency, and create a contract between design intent and implementation. Getting token architecture right is the difference between a design system that scales and one that becomes a collection of exceptions.
The two-tier token architecture has become the industry standard for good reason. Primitive tokens (also called global tokens or reference tokens) represent raw color values with no semantic intent: ——brand-blue-500: #1E3A8A, or ——gray-200: #E5E7EB. These are the color vocabulary of the system. Semantic tokens reference primitives and attach usage intent: ——color-action-primary: var(——brand-blue-500), or ——color-surface-secondary: var(——gray-200). The critical rule: components and styles consume semantic tokens only, never primitives directly. When this discipline is maintained, changing the primitive value of brand-blue-500 automatically updates every surface, component, and state that uses it — and the semantic layer ensures the change is coherent rather than random.
Dark mode is where weak token architectures collapse. If components reference semantic tokens correctly, dark mode is a matter of remapping semantic tokens to different primitive values: ——color-surface-secondary might reference ——gray-200 in light mode and ——gray-800 in dark mode. If components reference primitives directly, dark mode requires touching every component individually. The dark mode test is a reliable indicator of whether a token system is properly layered: if implementing dark mode requires updating more than a few token mappings, the semantic layer is incomplete.
Component-level tokens (the third tier in some systems) encode component-specific semantics: ——button-primary-background, ——card-border-color, ——input-placeholder-color. These reference semantic tokens, which reference primitives. Component tokens add flexibility without sacrificing coherence: a button’s background can be independently adjusted without affecting every semantic token consumer. This tier adds maintenance overhead; whether the flexibility justifies the overhead depends on the product surface area.
Token naming conventions are a design decision with long-term consequences. Naming by color value (blue-500) makes primitives legible but semantics opaque. Naming by role (action-primary) makes intent clear but disconnects from the visual vocabulary. Hybrid naming (brand-blue-action-primary) maximizes legibility at the cost of verbosity. The practical recommendation: name primitives by color and shade (brand-blue-500, neutral-gray-200), name semantics by role and state (surface-primary, action-hover, feedback-error), and keep component tokens consistent with semantic naming. The important discipline is internal consistency — a mixed naming convention is harder to maintain than a verbose-but-consistent one.
ColorArchive Notes
2030-02-28
Design Token Color Systems: The Architecture Beyond Swatches
Color tokens aren’t just named variables — they’re a semantic contract between design intent and product implementation. How to build token architecture that scales.
Newer issue
Print vs Digital Color: Bridging the Impossible Gap
2030-02-28
Older issue
Color Psychology in E-Commerce: What the Research Actually Shows
2030-02-28
