Foundations
Semantic Colors
Functional color tokens that map a role to a visual value. They adapt automatically between light and dark mode while keeping the same token names across themes.
Semantic tokens reference raw primitives and give them a functional meaning. Components only ever consume semantic tokens.
When the theme switches, semantic tokens resolve to different primitives automatically. Components don’t need any manual overrides — the same token name produces the correct color in both light and dark mode.
Surface fill and border tokens are documented on the Surface Elevations page. This page covers content, element, border, illustration, and shadow color tokens.
Content colors
Content tokens are used exclusively for text and icons. They define the color of readable elements in the interface, from high-emphasis headings to disabled labels and semantic status indicators.
Text hierarchy
Five neutral tones that establish reading priority. All derive from neutral primitives and carry no semantic meaning — they communicate importance, not intent.
content-primary content-secondary content-tertiary content-muted content-disabled content-primary content-secondary content-tertiary content-muted content-disabled content-primary-inverse primary-inverse
A true inverse of primary — white in light mode,
near-black in dark mode. It flips with the theme, unlike
on-dark-primary which stays white in both modes.
content-primary-inverse Flips with theme. Switch ball, inverted labels.
content-on-dark-primary Always white (static). Text on permanently dark surfaces.
In light mode both tokens resolve to white and look identical. The
difference shows in dark mode: primary-inverse flips
to dark, while on-dark-primary stays white because
dark-suffix surfaces don’t change with the theme.
Semantic intents
Color-coded content for communicating meaning: status messages, links, labels, and indicators. Each intent has a base variant for content on plain surfaces and a contrast variant for content on element fills (soft / softer backgrounds).
Neutral vs secondary. Although visually similar,
content-neutral belongs to the intent family — use it
when a component appears alongside other intents (brand, critical, info,
warning) so that at equal desaturation all colours carry the same visual
weight. content-secondary is for standalone plain content
where you need to set text priority (primary → secondary → tertiary).
content-brand content-critical content-info content-warning content-neutral content-accent-orange content-accent-violet Base tokens
content-brand content-critical content-info content-warning content-neutral content-accent-orange content-accent-violet Contrast tokens
content-brand-contrast content-critical-contrast content-info-contrast content-warning-contrast content-neutral-contrast content-accent-orange-contrast content-accent-violet-contrast Base vs contrast
Base — content on plain surface
Contrast — content on element soft / softer fill
Base tokens are for content sitting directly on a surface (page, raised, etc.) without any element fill behind them. Contrast tokens are paired with element fills — the soft or softer background combined with the surface creates a darker composite, so the contrast variant shifts the content color for better readability.
Emphasis
A special brand token (neon green) reserved for handwritten-style decorations — underlines beneath headlines, circles, waves, and micro-illustrations that add a visual flourish near text. Not for regular text or icons: the color does not meet text accessibility contrast ratios.
content-emphasis content-emphasis Button content
Dedicated tokens for text inside filled buttons. Each intent has a specific label color optimized for readability against its bold fill.
content-button-brand-primary content-button-critical-primary content-button-info-primary content-button-warning-primary content-button-accent-orange-primary content-button-accent-violet-primary on-bold
For text and icons on surfaces with a Bold suffix
(e.g. surface-brand-bold). Bold surfaces have a saturated
fill that stays the same across themes. These tokens use black alphas
to stay readable on bright backgrounds.
content-on-bold-primary content-on-bold-secondary content-on-bold-tertiary content-on-bold-muted content-on-bold-disabled content-on-bold-primary content-on-bold-secondary content-on-bold-tertiary content-on-bold-muted content-on-bold-disabled content-on-bold-emphasis content-on-bold-neutral-contrast on-dark
For text and icons on surfaces with a Dark suffix
(e.g. surface-brand-dark, modeless-neutral-dark).
Dark surfaces are permanently dark regardless of the active theme.
These tokens use white alphas to stay readable on dark fills.
The “Dark” suffix is a general naming convention —
any token with -dark in its name is static
across themes and does not invert when switching modes.
content-on-dark-primary content-on-dark-secondary content-on-dark-tertiary content-on-dark-muted content-on-dark-disabled content-on-dark-primary content-on-dark-secondary content-on-dark-tertiary content-on-dark-muted content-on-dark-disabled content-on-dark-primary-inverse content-on-dark-brand content-on-dark-brand-contrast content-on-dark-critical content-on-dark-critical-contrast content-on-dark-info content-on-dark-info-contrast content-on-dark-warning content-on-dark-warning-contrast content-on-dark-neutral content-on-dark-neutral-contrast content-on-dark-accent-orange content-on-dark-accent-orange-contrast content-on-dark-accent-violet content-on-dark-accent-violet-contrast content-on-dark-button-brand-primary content-on-dark-button-critical-primary content-on-dark-button-info-primary content-on-dark-button-warning-primary content-on-dark-button-accent-orange-primary content-on-dark-button-accent-violet-primary Content interaction states (hovered / pressed) 34
content-primary-hovered content-primary-pressed content-secondary-hovered content-secondary-pressed content-tertiary-hovered content-tertiary-pressed content-brand-hovered content-brand-pressed content-brand-contrast-hovered content-brand-contrast-pressed content-critical-hovered content-critical-pressed content-critical-contrast-hovered content-critical-contrast-pressed content-info-hovered content-info-pressed content-info-contrast-hovered content-info-contrast-pressed content-warning-hovered content-warning-pressed content-warning-contrast-hovered content-warning-contrast-pressed content-neutral-hovered content-neutral-pressed content-neutral-contrast-hovered content-neutral-contrast-pressed content-accent-orange-hovered content-accent-orange-pressed content-accent-orange-contrast-hovered content-accent-orange-contrast-pressed content-accent-violet-hovered content-accent-violet-pressed content-accent-violet-contrast-hovered content-accent-violet-contrast-pressed on-bold interaction states 6
content-on-bold-primary-hovered content-on-bold-primary-pressed content-on-bold-secondary-hovered content-on-bold-secondary-pressed content-on-bold-tertiary-hovered content-on-bold-tertiary-pressed on-dark interaction states 34
content-on-dark-primary-hovered content-on-dark-primary-pressed content-on-dark-secondary-hovered content-on-dark-secondary-pressed content-on-dark-tertiary-hovered content-on-dark-tertiary-pressed content-on-dark-brand-hovered content-on-dark-brand-pressed content-on-dark-brand-contrast-hovered content-on-dark-brand-contrast-pressed content-on-dark-critical-hovered content-on-dark-critical-pressed content-on-dark-critical-contrast-hovered content-on-dark-critical-contrast-pressed content-on-dark-info-hovered content-on-dark-info-pressed content-on-dark-info-contrast-hovered content-on-dark-info-contrast-pressed content-on-dark-warning-hovered content-on-dark-warning-pressed content-on-dark-warning-contrast-hovered content-on-dark-warning-contrast-pressed content-on-dark-neutral-hovered content-on-dark-neutral-pressed content-on-dark-neutral-contrast-hovered content-on-dark-neutral-contrast-pressed content-on-dark-accent-orange-hovered content-on-dark-accent-orange-pressed content-on-dark-accent-orange-contrast-hovered content-on-dark-accent-orange-contrast-pressed content-on-dark-accent-violet-hovered content-on-dark-accent-violet-pressed content-on-dark-accent-violet-contrast-hovered content-on-dark-accent-violet-contrast-pressed Element fill
Background colors for UI elements — everything that lives on top of a surface. Buttons, badges, tags, inputs, toggles, indicators, and other components. Each intent comes in three emphasis levels that control visual prominence.
Emphasis levels
Bold
Primary prominence. Saturated fills for primary buttons, selected states, and high-emphasis indicators.
Soft
Secondary prominence. Translucent fills for secondary buttons, badges, tags, and chips. The most commonly used level across components. No matching border — use without a border.
Softer
Tertiary prominence. Subtle fills for molecule-level components where soft would compete with the atomic elements inside — alert banners, segmented control backgrounds. Always comes with a matching border.
Bold
fill-element-brand-bold fill-element-critical-bold fill-element-info-bold fill-element-warning-bold fill-element-neutral-bold fill-element-accent-orange-bold fill-element-accent-violet-bold Soft
fill-element-brand-soft fill-element-critical-soft fill-element-info-soft fill-element-warning-soft fill-element-neutral-soft fill-element-accent-orange-soft fill-element-accent-violet-soft Softer
fill-element-brand-softer fill-element-critical-softer fill-element-info-softer fill-element-warning-softer fill-element-neutral-softer fill-element-accent-orange-softer fill-element-accent-violet-softer fill-element-brand-bold fill-element-brand-soft fill-element-brand-softer fill-element-critical-bold fill-element-critical-soft fill-element-critical-softer fill-element-info-bold fill-element-info-soft fill-element-info-softer fill-element-warning-bold fill-element-warning-soft fill-element-warning-softer fill-element-neutral-bold fill-element-neutral-soft fill-element-neutral-softer fill-element-accent-orange-bold fill-element-accent-orange-soft fill-element-accent-orange-softer fill-element-accent-violet-bold fill-element-accent-violet-soft fill-element-accent-violet-softer Bundle rule
If a fill token has a matching border with the same name, use them as a pair. If no matching border exists, don’t add one.
Pair fill-element-brand-softer with
border-element-brand-softer — softer always
has a matching border.
Add a border to fill-element-brand-soft. Soft has
no matching border token — the element should be borderless.
State tokens
Non-intent fills for generic element states — form controls, selected indicators, and special interactive patterns.
contrast
Darkest neutral fill (nearly black in light, white in dark). Used for neutral primary buttons.
elevated
Selected element on grey surfaces (segmented controls, tabs). Also for slider handles and floating secondary buttons.
ghost-selected
Selected state for ghost elements (no default background). Best on white surfaces like modeless or fixed.
field / field-selected
Form controls: input, checkbox, radio, switch backgrounds and their selected / disabled states.
fill-element-contrast fill-element-elevated fill-element-ghost-selected fill-element-field fill-element-field-disabled fill-element-field-selected fill-element-field-selected-disabled fill-element-bold-disabled fill-element-soft-disabled on-bold
Element fills for use on bold-suffix surfaces.
fill-element-on-bold-contrast fill-element-on-bold-contrast-disabled fill-element-on-bold-neutral-soft fill-element-on-bold-soft-disabled on-dark
Element fills for use on dark-suffix surfaces. Mirrors the full set of base fills with dark-appropriate primitive references.
fill-element-on-dark-brand-bold fill-element-on-dark-brand-soft fill-element-on-dark-brand-softer fill-element-on-dark-critical-bold fill-element-on-dark-critical-soft fill-element-on-dark-critical-softer fill-element-on-dark-info-bold fill-element-on-dark-info-soft fill-element-on-dark-info-softer fill-element-on-dark-warning-bold fill-element-on-dark-warning-soft fill-element-on-dark-warning-softer fill-element-on-dark-neutral-bold fill-element-on-dark-neutral-soft fill-element-on-dark-neutral-softer fill-element-on-dark-accent-orange-bold fill-element-on-dark-accent-orange-soft fill-element-on-dark-accent-orange-softer fill-element-on-dark-accent-violet-bold fill-element-on-dark-accent-violet-soft fill-element-on-dark-accent-violet-softer fill-element-on-dark-contrast fill-element-on-dark-field fill-element-on-dark-field-disabled fill-element-on-dark-field-selected fill-element-on-dark-field-selected-disabled fill-element-on-dark-bold-disabled fill-element-on-dark-soft-disabled Element fill interaction states 40
fill-element-brand-bold-hovered fill-element-brand-bold-pressed fill-element-brand-soft-hovered fill-element-brand-soft-pressed fill-element-critical-bold-hovered fill-element-critical-bold-pressed fill-element-critical-soft-hovered fill-element-critical-soft-pressed fill-element-info-bold-hovered fill-element-info-bold-pressed fill-element-info-soft-hovered fill-element-info-soft-pressed fill-element-warning-bold-hovered fill-element-warning-bold-pressed fill-element-warning-soft-hovered fill-element-warning-soft-pressed fill-element-neutral-bold-hovered fill-element-neutral-bold-pressed fill-element-neutral-soft-hovered fill-element-neutral-soft-pressed fill-element-accent-orange-bold-hovered fill-element-accent-orange-bold-pressed fill-element-accent-orange-soft-hovered fill-element-accent-orange-soft-pressed fill-element-accent-violet-bold-hovered fill-element-accent-violet-bold-pressed fill-element-accent-violet-soft-hovered fill-element-accent-violet-soft-pressed fill-element-contrast-hovered fill-element-contrast-pressed fill-element-elevated-hovered fill-element-elevated-pressed fill-element-ghost-hovered fill-element-ghost-pressed fill-element-field-hovered fill-element-field-selected-hovered fill-element-on-bold-contrast-hovered fill-element-on-bold-contrast-pressed fill-element-on-bold-neutral-soft-hovered fill-element-on-bold-neutral-soft-pressed on-dark fill interaction states 32
fill-element-on-dark-brand-bold-hovered fill-element-on-dark-brand-bold-pressed fill-element-on-dark-brand-soft-hovered fill-element-on-dark-brand-soft-pressed fill-element-on-dark-critical-bold-hovered fill-element-on-dark-critical-bold-pressed fill-element-on-dark-critical-soft-hovered fill-element-on-dark-critical-soft-pressed fill-element-on-dark-info-bold-hovered fill-element-on-dark-info-bold-pressed fill-element-on-dark-info-soft-hovered fill-element-on-dark-info-soft-pressed fill-element-on-dark-warning-bold-hovered fill-element-on-dark-warning-bold-pressed fill-element-on-dark-warning-soft-hovered fill-element-on-dark-warning-soft-pressed fill-element-on-dark-neutral-bold-hovered fill-element-on-dark-neutral-bold-pressed fill-element-on-dark-neutral-soft-hovered fill-element-on-dark-neutral-soft-pressed fill-element-on-dark-accent-orange-bold-hovered fill-element-on-dark-accent-orange-bold-pressed fill-element-on-dark-accent-orange-soft-hovered fill-element-on-dark-accent-orange-soft-pressed fill-element-on-dark-accent-violet-bold-hovered fill-element-on-dark-accent-violet-bold-pressed fill-element-on-dark-accent-violet-soft-hovered fill-element-on-dark-accent-violet-soft-pressed fill-element-on-dark-contrast-hovered fill-element-on-dark-contrast-pressed fill-element-on-dark-field-hovered fill-element-on-dark-field-selected-hovered Element border
Border tokens for UI elements. The softer variants pair with their matching fill-softer tokens as a bundle. Field borders handle form control states.
Softer borders
Paired with fill-softer tokens. Each intent’s softer fill has a matching softer border — always apply them together.
border-element-brand-softer border-element-critical-softer border-element-info-softer border-element-warning-softer border-element-neutral-softer border-element-neutral-softer-alt border-element-accent-orange-softer border-element-accent-violet-softer Field states
Borders for form inputs, checkboxes, radios, and other form controls across their visual states.
border-element-field border-element-field-hovered border-element-field-focused border-element-field-error border-element-field-error-hovered border-element-field-disabled border-element-focus-ring on-dark
border-element-on-dark-brand-softer border-element-on-dark-critical-softer border-element-on-dark-info-softer border-element-on-dark-warning-softer border-element-on-dark-neutral-softer border-element-on-dark-neutral-softer-alt border-element-on-dark-accent-orange-softer border-element-on-dark-accent-violet-softer border-element-on-dark-field border-element-on-dark-field-hovered border-element-on-dark-field-focused border-element-on-dark-field-error border-element-on-dark-field-error-hovered border-element-on-dark-field-disabled Border / dividers
Standalone border tokens for dividers, separators, and lines that are not part of an element or surface bundle.
border-neutral border-neutral-dark border-brand border-critical border-info border-warning neutral
The most common divider / separator in the product. Use for section dividers, table rows, list separators.
neutral-dark
A more prominent separator, static across themes.
Pairs with modeless-neutral-dark.
Follows the “Dark” suffix convention.
border-neutral border-neutral-dark border-brand border-critical border-info border-warning on-bold and on-dark variants
border-on-bold-neutral border-on-dark-brand border-on-dark-critical border-on-dark-info border-on-dark-neutral border-on-dark-warning Illustration
Color tokens exclusively for SVG illustrations in the product — onboarding visuals, empty states, error pages. Not for icons. Fill and border are always used as a pair.
Illustration fills
illustration-fill-brand illustration-fill-critical illustration-fill-info illustration-fill-warning illustration-fill-emphasis illustration-fill-emphasis-alt illustration-fill-on-bold-brand illustration-fill-on-dark-brand Illustration borders
illustration-border-brand illustration-border-critical illustration-border-info illustration-border-warning illustration-border-emphasis illustration-border-emphasis-alt illustration-border-on-bold-brand illustration-border-on-dark-brand Shadow colors
Low-level color tokens that feed into the composite shadow values
in effects.css. Each shadow has two layers: a
key shadow (directional, stronger) and an
ambient shadow (diffuse, softer). In light mode
shadows are blue-tinted; in dark mode they shift to pure black.
shadow-ambient-action shadow-ambient-action-hover shadow-ambient-elevated shadow-ambient-fixed shadow-ambient-modal shadow-ambient-modeless shadow-key-action shadow-key-action-hover shadow-key-elevated shadow-key-fixed shadow-key-modal shadow-key-modeless Token reference
Full flat list of all semantic color tokens documented on this page. Surface tokens are on the Surface Elevations page.
Content
content-primary content-secondary content-tertiary content-muted content-disabled content-primary-inverse content-brand content-critical content-info content-warning content-neutral content-accent-orange content-accent-violet content-brand-contrast content-critical-contrast content-info-contrast content-warning-contrast content-neutral-contrast content-accent-orange-contrast content-accent-violet-contrast content-emphasis content-button-brand-primary content-button-critical-primary content-button-info-primary content-button-warning-primary content-button-accent-orange-primary content-button-accent-violet-primary content-on-bold-primary content-on-bold-secondary content-on-bold-tertiary content-on-bold-muted content-on-bold-disabled content-on-bold-emphasis content-on-bold-neutral-contrast content-on-dark-primary content-on-dark-secondary content-on-dark-tertiary content-on-dark-muted content-on-dark-disabled content-on-dark-primary-inverse content-on-dark-brand content-on-dark-brand-contrast content-on-dark-critical content-on-dark-critical-contrast content-on-dark-info content-on-dark-info-contrast content-on-dark-warning content-on-dark-warning-contrast content-on-dark-neutral content-on-dark-neutral-contrast content-on-dark-accent-orange content-on-dark-accent-orange-contrast content-on-dark-accent-violet content-on-dark-accent-violet-contrast content-on-dark-button-brand-primary content-on-dark-button-critical-primary content-on-dark-button-info-primary content-on-dark-button-warning-primary content-on-dark-button-accent-orange-primary content-on-dark-button-accent-violet-primary Element fill
fill-element-brand-bold fill-element-brand-soft fill-element-brand-softer fill-element-critical-bold fill-element-critical-soft fill-element-critical-softer fill-element-info-bold fill-element-info-soft fill-element-info-softer fill-element-warning-bold fill-element-warning-soft fill-element-warning-softer fill-element-neutral-bold fill-element-neutral-soft fill-element-neutral-softer fill-element-accent-orange-bold fill-element-accent-orange-soft fill-element-accent-orange-softer fill-element-accent-violet-bold fill-element-accent-violet-soft fill-element-accent-violet-softer fill-element-contrast fill-element-elevated fill-element-ghost-selected fill-element-field fill-element-field-disabled fill-element-field-selected fill-element-field-selected-disabled fill-element-bold-disabled fill-element-soft-disabled fill-element-on-bold-contrast fill-element-on-bold-contrast-disabled fill-element-on-bold-neutral-soft fill-element-on-bold-soft-disabled fill-element-on-dark-brand-bold fill-element-on-dark-brand-soft fill-element-on-dark-brand-softer fill-element-on-dark-critical-bold fill-element-on-dark-critical-soft fill-element-on-dark-critical-softer fill-element-on-dark-info-bold fill-element-on-dark-info-soft fill-element-on-dark-info-softer fill-element-on-dark-warning-bold fill-element-on-dark-warning-soft fill-element-on-dark-warning-softer fill-element-on-dark-neutral-bold fill-element-on-dark-neutral-soft fill-element-on-dark-neutral-softer fill-element-on-dark-accent-orange-bold fill-element-on-dark-accent-orange-soft fill-element-on-dark-accent-orange-softer fill-element-on-dark-accent-violet-bold fill-element-on-dark-accent-violet-soft fill-element-on-dark-accent-violet-softer fill-element-on-dark-contrast fill-element-on-dark-field fill-element-on-dark-field-disabled fill-element-on-dark-field-selected fill-element-on-dark-field-selected-disabled fill-element-on-dark-bold-disabled fill-element-on-dark-soft-disabled Element border
border-element-brand-softer border-element-critical-softer border-element-info-softer border-element-warning-softer border-element-neutral-softer border-element-neutral-softer-alt border-element-accent-orange-softer border-element-accent-violet-softer border-element-field border-element-field-hovered border-element-field-focused border-element-field-error border-element-field-error-hovered border-element-field-disabled border-element-focus-ring border-element-on-dark-brand-softer border-element-on-dark-critical-softer border-element-on-dark-info-softer border-element-on-dark-warning-softer border-element-on-dark-neutral-softer border-element-on-dark-neutral-softer-alt border-element-on-dark-accent-orange-softer border-element-on-dark-accent-violet-softer border-element-on-dark-field border-element-on-dark-field-hovered border-element-on-dark-field-focused border-element-on-dark-field-error border-element-on-dark-field-error-hovered border-element-on-dark-field-disabled Border / dividers
border-neutral border-neutral-dark border-brand border-critical border-info border-warning border-on-bold-neutral border-on-dark-brand border-on-dark-critical border-on-dark-info border-on-dark-neutral border-on-dark-warning Illustration
illustration-fill-brand illustration-fill-critical illustration-fill-info illustration-fill-warning illustration-fill-emphasis illustration-fill-emphasis-alt illustration-fill-on-bold-brand illustration-fill-on-dark-brand illustration-border-brand illustration-border-critical illustration-border-info illustration-border-warning illustration-border-emphasis illustration-border-emphasis-alt illustration-border-on-bold-brand illustration-border-on-dark-brand Shadow
shadow-ambient-action shadow-ambient-action-hover shadow-ambient-elevated shadow-ambient-fixed shadow-ambient-modal shadow-ambient-modeless shadow-key-action shadow-key-action-hover shadow-key-elevated shadow-key-fixed shadow-key-modal shadow-key-modeless