The three layers of a color naming system
Most mature design systems separate color naming into three layers. Layer 1 — Raw values: the actual hex values, organized but unnamed beyond a reference index. Layer 2 — Primitives: named stops on a scale (brand-blue-60, neutral-gray-20). These exist in the token file but are not directly referenced in UI code. Layer 3 — Semantics: purpose-driven names (color-text-primary, color-border-interactive, color-feedback-error). UI code references only Layer 3. The separation means that changing the underlying hue of 'brand-blue' requires updating exactly one mapping, rather than finding every place in the codebase where 'blue-60' appears. Most naming system failures come from skipping Layer 2 or blending Layer 2 and Layer 3 into a single list.
