Color token values are defined by context. Toggle theme and hue to preview each context.
Overview
Beacon uses color tokens to keep UI consistent, themeable, and accessible. In product UI, prefer the brand role tokens (background/foreground/border) and treat the palette as reference.
Use role tokens for implementation: --bg-*, --fg-*, --border-*.
Avoid hard-coded hex values in components.
Palette tokens (--color-*) are primarily for reference and token wiring.
General concepts
Color themes and device color modes aren't synonymous. Themes are tailored to the product; modes are system-wide. Use theme-aware tokens so the UI remains readable and intentional.
In Beacon, context comes from two switches:
data-theme (light/dark) overrides brand role tokens.
data-hue (chromatic/sky/indigo) changes the semantic primary palette that brand roles reference.
Token mapping
Beacon uses a three-layer token system where each layer references the one below it. This creates a flexible, maintainable color system.
Primitives
--color-purple-500
Raw color values defined in hex. These are the foundation colors that never change.
↓
Semantic
--color-primary-500
Context-aware colors that reference primitives. The primary color changes based on the selected hue (chromatic/sky/indigo).
↓
Brand
--bg-primary
Product-facing role tokens that reference semantic tokens. These adapt to both theme (light/dark) and hue settings.
Example mapping:--bg-primary → --color-primary-500 → --color-purple-500 (when hue is "chromatic-prime")
Theme
Hue
Palette
Palette tokens are reference values and semantic wiring. Use role tokens for product UI, and use this section to understand the underlying system.
Primitives
Raw color families (hex + alpha variants).
Purple
(unavailable)
Blue
(unavailable)
Gray
(unavailable)
Chromatic
(unavailable)
Green
(unavailable)
Orange
(unavailable)
Red
(unavailable)
White (alpha)
(unavailable)
Black (alpha)
(unavailable)
Semantic
Semantic families (primary is hue-dependent).
Primary
(unavailable)
Neutral
(unavailable)
Success
(unavailable)
Warning
(unavailable)
Critical
(unavailable)
Alpha Neutral White
(unavailable)
Alpha Neutral Black
(unavailable)
Brand
These are the product-facing color roles. Prefer these in components and avoid selecting raw palette values by appearance.
Background
Surface and status backgrounds. Use these for containers, fills, and stateful backgrounds.
Token
Role
Preview
Resolved
Actions
--bg-page-primary
Page Primary
Default app background for main surfaces.
Aa
Preview
(unavailable)
dark:hue-sky
--bg-page-secondary
Page Secondary
Secondary surface background for grouped content.
Aa
Preview
(unavailable)
dark:hue-sky
--bg-page-tertiary
Page Tertiary
Tertiary surface background for subtle elevation.
Aa
Preview
(unavailable)
dark:hue-sky
--bg-white
White Surface (Brand)
A “white” surface role that adapts to theme.
Aa
Preview
(unavailable)
dark:hue-sky
--bg-disabled
Disabled Background
Background for disabled containers or controls.
Aa
Preview
(unavailable)
dark:hue-sky
--bg-transparent
Transparent Background
Transparent background role (use for overlays/ghost elements).
Aa
Preview
(unavailable)
dark:hue-sky
--bg-primary
Brand
Primary brand action background.
Aa
Preview
(unavailable)
dark:hue-sky
--bg-primary-on-hover
Brand Hover
Hover background for primary brand actions.
Aa
Preview
(unavailable)
dark:hue-sky
--bg-primary-pressed
Brand Pressed
Pressed background for primary brand actions.
Aa
Preview
(unavailable)
dark:hue-sky
--bg-primary-on-focused
Brand Focus
Focus background for primary brand actions (when specified).
Aa
Preview
(unavailable)
dark:hue-sky
--bg-primary-disabled
Brand Disabled
Disabled background for brand actions.
Aa
Preview
(unavailable)
dark:hue-sky
--bg-primary-tonal
Brand Tonal
Tonal brand surface (subtle emphasis).
Aa
Preview
(unavailable)
dark:hue-sky
--bg-primary-tonal-on-hover
Brand Tonal Hover
Hover state for tonal brand surfaces.
Aa
Preview
(unavailable)
dark:hue-sky
--bg-primary-dark
Brand Dark
High-contrast brand surface role (when specified).
Aa
Preview
(unavailable)
dark:hue-sky
--bg-success
Success
Success status background.
Aa
Preview
(unavailable)
dark:hue-sky
--bg-success-on-hover
Success Hover
Hover background for success actions.
Aa
Preview
(unavailable)
dark:hue-sky
--bg-success-tonal
Success Tonal
Tonal success surface (banners, subtle callouts).
Aa
Preview
(unavailable)
dark:hue-sky
--bg-success-dark
Success Dark
High-contrast success surface role (when specified).
Aa
Preview
(unavailable)
dark:hue-sky
--bg-warning
Warning
Warning status background.
Aa
Preview
(unavailable)
dark:hue-sky
--bg-warning-on-hover
Warning Hover
Hover background for warning actions.
Aa
Preview
(unavailable)
dark:hue-sky
--bg-warning-tonal
Warning Tonal
Tonal warning surface (banners, subtle callouts).
Aa
Preview
(unavailable)
dark:hue-sky
--bg-warning-dark
Warning Dark
High-contrast warning surface role (when specified).
Readable text/icon color on tonal critical surfaces.
Aa
Preview
(unavailable)
dark:hue-sky
--fg-warning
Warning
Warning foreground.
Aa
Preview
(unavailable)
dark:hue-sky
--fg-warning-tonal
Warning Tonal
Foreground on tonal warning surfaces.
Aa
Preview
(unavailable)
dark:hue-sky
--fg-warning-on-tonal
Warning On Tonal
Readable text/icon color on tonal warning surfaces.
Aa
Preview
(unavailable)
dark:hue-sky
--fg-success
Success
Success foreground.
Aa
Preview
(unavailable)
dark:hue-sky
--fg-success-tonal
Success Tonal
Foreground on tonal success surfaces.
Aa
Preview
(unavailable)
dark:hue-sky
--fg-success-on-tonal
Success On Tonal
Readable text/icon color on tonal success surfaces.
Aa
Preview
(unavailable)
dark:hue-sky
--fg-on-action
On Action
High-contrast foreground on strong action backgrounds.
Aa
Preview
(unavailable)
dark:hue-sky
--fg-white
White
White foreground role (for high-contrast cases).
Aa
Preview
(unavailable)
dark:hue-sky
--fg-disabled
Disabled
Disabled text/icon foreground.
Aa
Preview
(unavailable)
dark:hue-sky
--fg-on-disabled
On Disabled
Foreground used on disabled surfaces (paired with disabled background).
Aa
Preview
(unavailable)
dark:hue-sky
Border
Stroke colors. Use these for outlines, dividers, and focus/active borders.
Token
Role
Preview
Resolved
Actions
--border-neutral-primary
Neutral Primary
Primary neutral border for controls and containers.
Aa
Preview
(unavailable)
dark:hue-sky
--border-neutral-secondary
Neutral Secondary
Secondary neutral border for subtle separation.
Aa
Preview
(unavailable)
dark:hue-sky
--border-neutral-tertiary
Neutral Tertiary
Tertiary border for light dividers.
Aa
Preview
(unavailable)
dark:hue-sky
--border-strong
Strong
Strong outline for high emphasis separation.
Aa
Preview
(unavailable)
dark:hue-sky
--border-strong-100
Strong 100
Strong border with alpha (light emphasis).
Aa
Preview
(unavailable)
dark:hue-sky
--border-strong-200
Strong 200
Strong border with alpha (medium emphasis).
Aa
Preview
(unavailable)
dark:hue-sky
--border-primary
Primary
Brand border for focused/active elements.
Aa
Preview
(unavailable)
dark:hue-sky
--border-primary-on-hover
Primary Hover
Hover border for brand accents.
Aa
Preview
(unavailable)
dark:hue-sky
--border-primary-pressed
Primary Pressed
Pressed border for brand accents.
Aa
Preview
(unavailable)
dark:hue-sky
--border-primary-disabled
Primary Disabled
Disabled border for brand accents.
Aa
Preview
(unavailable)
dark:hue-sky
--border-primary-tonal
Primary Tonal
Border on tonal brand surfaces.
Aa
Preview
(unavailable)
dark:hue-sky
--border-success
Success
Success border.
Aa
Preview
(unavailable)
dark:hue-sky
--border-success-tonal
Success Tonal
Border on tonal success surfaces.
Aa
Preview
(unavailable)
dark:hue-sky
--border-warning
Warning
Warning border.
Aa
Preview
(unavailable)
dark:hue-sky
--border-warning-tonal
Warning Tonal
Border on tonal warning surfaces.
Aa
Preview
(unavailable)
dark:hue-sky
--border-critical
Critical
Critical border.
Aa
Preview
(unavailable)
dark:hue-sky
--border-critical-tonal
Critical Tonal
Border on tonal critical surfaces.
Aa
Preview
(unavailable)
dark:hue-sky
--border-on-action
On Action
Border/outline on strong action backgrounds (for contrast).
Aa
Preview
(unavailable)
dark:hue-sky
--border-white
White
White border role (for high-contrast cases).
Aa
Preview
(unavailable)
dark:hue-sky
--border-disabled
Disabled
Disabled borders.
Aa
Preview
(unavailable)
dark:hue-sky
Static
Non-adaptive colors for specific cases where theme switching must not change the output.
Token
Role
Preview
Resolved
Actions
--static-white
Static White
Absolute white (non-adaptive).
Aa
Preview
(unavailable)
dark:hue-sky
--static-black
Static Black
Absolute black (non-adaptive).
Aa
Preview
(unavailable)
dark:hue-sky
--static-primary
Static Primary
Absolute primary (non-adaptive).
Aa
Preview
(unavailable)
dark:hue-sky
--static-light-on-dark
Static Light on Dark
Light-on-dark role for static compositions.
Aa
Preview
(unavailable)
dark:hue-sky
Utilities
Overlay colors, pattern ink tokens, and utility roles (commonly for backdrops, focus lock, and CSS background patterns).
Token
Role
Preview
Resolved
Actions
--util-overlay-dull
Overlay Dull
Dull overlay for subtle dimming.
Aa
Preview
(unavailable)
dark:hue-sky
--util-overlay-light
Overlay Light
Light overlay for dimming surfaces.
Aa
Preview
(unavailable)
dark:hue-sky
--util-overlay-medium
Overlay Medium
Medium overlay for modals/drawers.
Aa
Preview
(unavailable)
dark:hue-sky
--util-overlay-strong
Overlay Strong
Strong overlay for focus/attention lock.
Aa
Preview
(unavailable)
dark:hue-sky
--util-pattern-ink-1
Pattern Ink 1
Primary pattern color for CSS background patterns (strongest opacity).
Aa
Preview
(unavailable)
dark:hue-sky
--util-pattern-ink-2
Pattern Ink 2
Secondary pattern color for CSS background patterns (medium opacity).
Aa
Preview
(unavailable)
dark:hue-sky
--util-pattern-ink-3
Pattern Ink 3
Tertiary pattern color for CSS background patterns (light opacity).
Aa
Preview
(unavailable)
dark:hue-sky
--util-pattern-ink-4
Pattern Ink 4
Quaternary pattern color for CSS background patterns (lightest opacity).
Aa
Preview
(unavailable)
dark:hue-sky
Shadows
Shadow color tokens used by effect tokens (e.g., drop shadows).
Token
Role
Preview
Resolved
Actions
--shadow-none
Shadow None
Shadow color for no/transparent shadow.
Aa
Preview
(unavailable)
dark:hue-sky
--shadow-subtle
Shadow Subtle
Shadow color for subtle elevation.
Aa
Preview
(unavailable)
dark:hue-sky
--shadow-normal
Shadow Normal
Shadow color for normal elevation.
Aa
Preview
(unavailable)
dark:hue-sky
--shadow-medium
Shadow Medium
Shadow color for medium elevation.
Aa
Preview
(unavailable)
dark:hue-sky
--shadow-strong
Shadow Strong
Shadow color for strong elevation.
Aa
Preview
(unavailable)
dark:hue-sky
Contrast ratio
This section computes contrast in the current theme/hue context and evaluates against WCAG AA (small text).
Contrast is calculated using the WCAG relative luminance formula and evaluated against WCAG 2.1 Level AA standards. 4.5:1 applies to normal text (body text, labels, paragraphs). 3:1 applies to large text (≥18pt regular or ≥14pt bold).
Pairing
Background
Foreground
Ratio
AA (3:1)
AA (4.5:1)
On-action text
Use for primary brand actions (buttons, strong emphasis).
--bg-primary
(unavailable)
--fg-on-action
(unavailable)
—
—
—
Body text on page
Default reading text on primary page background.
--bg-page-primary
(unavailable)
--fg-neutral
(unavailable)
—
—
—
Secondary text on page
Metadata/supporting text; verify AA for your font size.
--bg-page-primary
(unavailable)
--fg-neutral-secondary
(unavailable)
—
—
—
Tertiary text on page
Helper text, quiet labels; may not meet AA for small text.
--bg-page-primary
(unavailable)
--fg-neutral-tertiary
(unavailable)
—
—
—
Primary link on page
Brand links and accents on primary background.
--bg-page-primary
(unavailable)
--fg-primary
(unavailable)
—
—
—
Body text on secondary page
Default reading text on secondary page background.
--bg-page-secondary
(unavailable)
--fg-neutral
(unavailable)
—
—
—
Body text on tertiary page
Default reading text on tertiary page background.
--bg-page-tertiary
(unavailable)
--fg-neutral
(unavailable)
—
—
—
Primary tonal
Tonal brand surfaces (banners, subtle emphasis).
--bg-primary-tonal
(unavailable)
--fg-primary-on-tonal
(unavailable)
—
—
—
Success tonal
Tonal success surfaces (banners, callouts).
--bg-success-tonal
(unavailable)
--fg-success-on-tonal
(unavailable)
—
—
—
Success link on page
Success foreground on primary background.
--bg-page-primary
(unavailable)
--fg-success
(unavailable)
—
—
—
Warning tonal
Tonal warning surfaces (banners, callouts).
--bg-warning-tonal
(unavailable)
--fg-warning-on-tonal
(unavailable)
—
—
—
Warning link on page
Warning foreground on primary background.
--bg-page-primary
(unavailable)
--fg-warning
(unavailable)
—
—
—
Critical tonal
Tonal critical surfaces (banners, callouts).
--bg-critical-tonal
(unavailable)
--fg-critical-on-tonal
(unavailable)
—
—
—
Critical link on page
Critical foreground on primary background.
--bg-page-primary
(unavailable)
--fg-critical
(unavailable)
—
—
—
Disabled content
Disabled states should still be readable where required.
--bg-disabled
(unavailable)
--fg-on-disabled
(unavailable)
—
—
—
Disabled text on page
Disabled text on primary background.
--bg-page-primary
(unavailable)
--fg-disabled
(unavailable)
—
—
—
On-success action
Text on success action backgrounds (buttons).
--bg-success
(unavailable)
--fg-on-action
(unavailable)
—
—
—
On-warning action
Text on warning action backgrounds (buttons).
--bg-warning
(unavailable)
--fg-on-action
(unavailable)
—
—
—
On-critical action
Text on critical action backgrounds (buttons).
--bg-critical
(unavailable)
--fg-on-action
(unavailable)
—
—
—
On-primary dark
Text on high-contrast brand surfaces.
--bg-primary-dark
(unavailable)
--fg-on-action
(unavailable)
—
—
—
On-success dark
Text on high-contrast success surfaces.
--bg-success-dark
(unavailable)
--fg-on-action
(unavailable)
—
—
—
On-warning dark
Text on high-contrast warning surfaces.
--bg-warning-dark
(unavailable)
--fg-on-action
(unavailable)
—
—
—
On-critical dark
Text on high-contrast critical surfaces.
--bg-critical-dark
(unavailable)
--fg-on-action
(unavailable)
—
—
—
Usage guidance
Do
Use role tokens for implementation (--bg-*, --fg-*, --border-*).
Use paired "on" roles to preserve contrast (e.g. --fg-on-action on --bg-primary).
Use state-specific roles (hover/pressed/focus/disabled) instead of manually adjusting colors.
Verify contrast for text sizes and contexts.
Don't
Don't hardcode hex values in components.
Don't pick palette tokens by appearance for UI roles.
Don't rely on color alone to communicate meaning.
Don't invent new colors outside the Figma token source.