Color serves as a fundamental element that conveys mood, establishes brand identity, and ensures visual consistency across all user interfaces.
Semantic tokens map a role (text, background, icon, border, surface, overlay) to a primitive value per theme — reference these, never raw hex. The swatches below are live, so to compare light and dark, use the mode toggle in the header.
--sc-color-text-primary--sc-color-neutral-900--sc-color-neutral-50--sc-color-text-secondary--sc-color-neutral-800--sc-color-neutral-100--sc-color-text-tertiary--sc-color-neutral-600--sc-color-neutral-200--sc-color-text-primary-static--sc-color-neutral-900--sc-color-neutral-900--sc-color-text-secondary-static--sc-color-neutral-800--sc-color-neutral-800--sc-color-text-tertiary-static--sc-color-neutral-600--sc-color-neutral-600--sc-color-text-primary-inverse--sc-color-neutral-50--sc-color-neutral-900--sc-color-text-secondary-inverse--sc-color-neutral-100--sc-color-neutral-800--sc-color-text-tertiary-inverse--sc-color-neutral-200--sc-color-neutral-600--sc-color-text-primary-inverse-static--sc-color-neutral-50--sc-color-neutral-50--sc-color-text-secondary-inverse-static--sc-color-neutral-100--sc-color-neutral-100--sc-color-text-tertiary-inverse-static--sc-color-neutral-200--sc-color-neutral-200--sc-color-text-selected--sc-color-brand-500--sc-color-brand-400--sc-color-text-disabled--sc-color-neutral-300--sc-color-neutral-700--sc-color-text-brand--sc-color-brand-500--sc-color-brand-400--sc-color-text-link--sc-color-blue-500--sc-color-blue-400--sc-color-text-link-hover--sc-color-blue-600--sc-color-blue-300--sc-color-text-link-pressed--sc-color-blue-700--sc-color-blue-200--sc-color-text-warning--sc-color-orange-700--sc-color-orange-400--sc-color-text-negative--sc-color-red-600--sc-color-red-400--sc-color-text-negative-hover--sc-color-red-700--sc-color-red-300--sc-color-text-negative-pressed--sc-color-red-800--sc-color-red-200--sc-color-text-positive--sc-color-green-600--sc-color-green-400--sc-color-background-primary--sc-color-neutral-0--sc-color-neutral-900--sc-color-background-hover--sc-color-neutral-50--sc-color-neutral-800--sc-color-background-pressed--sc-color-neutral-100--sc-color-neutral-700--sc-color-background-neutral--sc-color-neutral-100--sc-color-neutral-800--sc-color-background-neutral-hover--sc-color-neutral-150--sc-color-neutral-750--sc-color-background-neutral-pressed--sc-color-neutral-200--sc-color-neutral-700--sc-color-background-selected--sc-color-neutral-50--sc-color-neutral-900--sc-color-background-subtle--sc-color-neutral-50--sc-color-neutral-900--sc-color-background-inverse--sc-color-neutral-900--sc-color-neutral-50--sc-color-background-disabled--sc-color-neutral-100--sc-color-neutral-900--sc-color-background-brand--sc-color-brand-500--sc-color-brand-400--sc-color-background-brand-hover--sc-color-brand-600--sc-color-brand-300--sc-color-background-brand-pressed--sc-color-brand-700--sc-color-brand-200--sc-color-background-brand-subtle--sc-color-brand-100--sc-color-brand-800--sc-color-background-info--sc-color-blue-500--sc-color-blue-400--sc-color-background-info-subtle--sc-color-blue-100--sc-color-blue-800--sc-color-background-warning--sc-color-orange-500--sc-color-orange-400--sc-color-background-warning-subtle--sc-color-orange-100--sc-color-orange-800--sc-color-background-negative--sc-color-red-500--sc-color-red-400--sc-color-background-negative-hover--sc-color-red-600--sc-color-red-300--sc-color-background-negative-pressed--sc-color-red-700--sc-color-red-200--sc-color-background-negative-subtle--sc-color-red-100--sc-color-red-800--sc-color-background-positive--sc-color-green-500--sc-color-green-400--sc-color-background-positive-subtle--sc-color-green-100--sc-color-green-800--sc-color-background-mono--sc-color-neutral-900--sc-color-neutral-50--sc-color-background-mono-hover--sc-color-neutral-800--sc-color-neutral-100--sc-color-background-mono-pressed--sc-color-neutral-700--sc-color-neutral-200--sc-color-background-inverse-static--sc-color-neutral-900--sc-color-neutral-900--sc-color-background-system-static--sc-color-neutral-1000--sc-color-neutral-1000--sc-color-background-system-inverse-static--sc-color-neutral-0--sc-color-neutral-0--sc-color-icon-primary--sc-color-neutral-900--sc-color-neutral-50--sc-color-icon-subtle--sc-color-neutral-600--sc-color-neutral-600--sc-color-icon-inverse--sc-color-neutral-50--sc-color-neutral-900--sc-color-icon-selected--sc-color-brand-500--sc-color-brand-400--sc-color-icon-disabled--sc-color-neutral-300--sc-color-neutral-700--sc-color-icon-brand--sc-color-brand-500--sc-color-brand-400--sc-color-icon-info--sc-color-blue-500--sc-color-blue-400--sc-color-icon-warning--sc-color-orange-500--sc-color-orange-400--sc-color-icon-negative--sc-color-red-500--sc-color-red-400--sc-color-icon-positive--sc-color-green-500--sc-color-green-400--sc-color-icon-primary-static--sc-color-neutral-900--sc-color-neutral-900--sc-color-icon-inverse-static--sc-color-neutral-50--sc-color-neutral-50--sc-color-border-primary--sc-color-neutral-300--sc-color-neutral-700--sc-color-border-subtle--sc-color-neutral-100--sc-color-neutral-750--sc-color-border-focus--sc-color-blue-500--sc-color-blue-400--sc-color-border-inverse--sc-color-neutral-0--sc-color-neutral-800--sc-color-border-selected--sc-color-blue-500--sc-color-blue-400--sc-color-border-disabled--sc-color-neutral-200--sc-color-neutral-800--sc-color-border-brand--sc-color-brand-500--sc-color-brand-400--sc-color-border-info--sc-color-blue-500--sc-color-blue-400--sc-color-border-warning--sc-color-orange-500--sc-color-orange-400--sc-color-border-negative--sc-color-red-500--sc-color-red-400--sc-color-border-positive--sc-color-green-500--sc-color-green-400--sc-color-border-mono--sc-color-neutral-900--sc-color-neutral-50--sc-color-surface-l0--sc-color-neutral-0--sc-color-neutral-1000--sc-color-surface-l1--sc-color-neutral-0--sc-color-neutral-950--sc-color-surface-l2--sc-color-neutral-0--sc-color-neutral-900--sc-color-surface-l3--sc-color-neutral-0--sc-color-neutral-850--sc-color-surface-l4--sc-color-neutral-0--sc-color-neutral-800--sc-color-overlay-30--sc-color-neutral-0-alpha-30--sc-color-neutral-1000-alpha-30--sc-color-overlay-30-static--sc-color-neutral-0-alpha-30--sc-color-neutral-0-alpha-30--sc-color-overlay-30-inverse--sc-color-neutral-1000-alpha-30--sc-color-neutral-0-alpha-30--sc-color-overlay-30-inverse-static--sc-color-neutral-1000-alpha-30--sc-color-neutral-1000-alpha-30--sc-color-overlay-70--sc-color-neutral-0-alpha-70--sc-color-neutral-1000-alpha-70--sc-color-overlay-70-static--sc-color-neutral-0-alpha-70--sc-color-neutral-0-alpha-70--sc-color-overlay-70-inverse--sc-color-neutral-1000-alpha-70--sc-color-neutral-0-alpha-70--sc-color-overlay-70-inverse-static--sc-color-neutral-1000-alpha-70--sc-color-neutral-1000-alpha-70Primitives are the raw, theme-independent values — the base palette every semantic token resolves to. Reference the semantic tokens above in product UI rather than these directly, so light/dark theming stays automatic — product UI should reference only the semantic tokens, never these. The contrast pill shows each value’s WCAG ratio against the background it reads best on — black or white.
--sc-color-neutral-0--sc-color-neutral-50--sc-color-neutral-100--sc-color-neutral-150--sc-color-neutral-200--sc-color-neutral-250--sc-color-neutral-300--sc-color-neutral-350--sc-color-neutral-400--sc-color-neutral-450--sc-color-neutral-500--sc-color-neutral-550--sc-color-neutral-600--sc-color-neutral-650--sc-color-neutral-700--sc-color-neutral-750--sc-color-neutral-800--sc-color-neutral-850--sc-color-neutral-900--sc-color-neutral-950--sc-color-neutral-1000--sc-color-brand-100--sc-color-brand-200--sc-color-brand-300--sc-color-brand-400--sc-color-brand-500--sc-color-brand-600--sc-color-brand-700--sc-color-brand-800--sc-color-brand-900--sc-color-purple-100--sc-color-purple-200--sc-color-purple-300--sc-color-purple-400--sc-color-purple-500--sc-color-purple-600--sc-color-purple-700--sc-color-purple-800--sc-color-purple-900--sc-color-blue-100--sc-color-blue-200--sc-color-blue-300--sc-color-blue-400--sc-color-blue-500--sc-color-blue-600--sc-color-blue-700--sc-color-blue-800--sc-color-blue-900--sc-color-green-100--sc-color-green-200--sc-color-green-300--sc-color-green-400--sc-color-green-500--sc-color-green-600--sc-color-green-700--sc-color-green-800--sc-color-green-900--sc-color-orange-100--sc-color-orange-200--sc-color-orange-300--sc-color-orange-400--sc-color-orange-500--sc-color-orange-600--sc-color-orange-700--sc-color-orange-800--sc-color-orange-900--sc-color-red-100--sc-color-red-200--sc-color-red-300--sc-color-red-400--sc-color-red-500--sc-color-red-600--sc-color-red-700--sc-color-red-800--sc-color-red-900--sc-color-text-*, -background-*, -border-*…) in product UI so light and dark theming stays automatic.-inverse tokens on dark or brand-filled surfaces, and -static tokens where a value must not flip with the theme.#3355FF) when a semantic token exists.--sc-color-border-focus for a clearly visible focus indicator at 3:1 contrast, and never remove it without an equivalent cue.prefers-color-scheme — verify contrast holds in both themes, not just one.