Color System

An overview-first guide to the color token families, how companion tones are derived, and where each group belongs in the component layer.

How to use this page

Start with the family, then expand only what you need.

  • Use the overview numbers to understand system size at a glance.
  • Open the anatomy section only when you need to understand how companion tones are derived.
  • Open a family accordion when you need the exact token names, swatches, defaults, and formulas.
At a glance

Read the system without opening every token group

20 Editable base families across brand, layout, utility, state, and palette.
45 Generated companions that stay in sync when the base or mix amounts change.
2 Global mix controls that tune the strength of border and alt companions system-wide.
10 Optional palette slots reserved for project, campaign, or seasonal accents.
Use the base token when you need to choose a family, use the contrast token when content sits on top of it, and let the generated companions handle borders, hover fills, and subtle surface states.
Token anatomy

The derivation rules are available when you need them

Primary and secondary interaction families.

Brand Colors

Use these for the core branded actions and accents. They are the families most often mapped into buttons, links, tags, and emphasized UI states.

Background and surface layers.

Layout Colors

These families define the canvas and the raised surfaces above it. They are the foundation for readable UI structure, separators, muted text, and nested containers.

Cross-cutting utility colors.

UI Colors

These tokens support focus indication and overlays across all components, independent of the brand families.

Semantic feedback families.

State Colors

Use these for product meaning rather than brand meaning: success, warning, danger, and info states stay recognizable even when the theme changes.

Optional accent slots

Brand Palette

The ten palette slots are intentionally empty by default. Fill them when a project needs campaign, department, or seasonal accent families without redefining the core brand colors.

--color--palette-1 Palette 1 · transparent by default
Contrast: --color--palette-1-contrast
Border: --color--palette-1-border
Alt: --color--palette-1-alt
--color--palette-2 Palette 2 · transparent by default
Contrast: --color--palette-2-contrast
Border: --color--palette-2-border
Alt: --color--palette-2-alt
--color--palette-3 Palette 3 · transparent by default
Contrast: --color--palette-3-contrast
Border: --color--palette-3-border
Alt: --color--palette-3-alt
--color--palette-4 Palette 4 · transparent by default
Contrast: --color--palette-4-contrast
Border: --color--palette-4-border
Alt: --color--palette-4-alt
--color--palette-5 Palette 5 · transparent by default
Contrast: --color--palette-5-contrast
Border: --color--palette-5-border
Alt: --color--palette-5-alt
--color--palette-6 Palette 6 · transparent by default
Contrast: --color--palette-6-contrast
Border: --color--palette-6-border
Alt: --color--palette-6-alt
--color--palette-7 Palette 7 · transparent by default
Contrast: --color--palette-7-contrast
Border: --color--palette-7-border
Alt: --color--palette-7-alt
--color--palette-8 Palette 8 · transparent by default
Contrast: --color--palette-8-contrast
Border: --color--palette-8-border
Alt: --color--palette-8-alt
--color--palette-9 Palette 9 · transparent by default
Contrast: --color--palette-9-contrast
Border: --color--palette-9-border
Alt: --color--palette-9-alt
--color--palette-10 Palette 10 · transparent by default
Contrast: --color--palette-10-contrast
Border: --color--palette-10-border
Alt: --color--palette-10-alt
Palette slots stay invisible until you assign them. Once filled, any component that supports a palette family can consume the slot with the same companion-token rules as the built-in brand families.
Editing rules

Guidance stays available without taking over the page