Colors
StableA two-layer colour system — raw primitives and purpose-driven semantic tokens.
Two layers
The colour system has two layers. Primitives are the raw palette — never use them directly in components. Semantic tokens give each colour a purpose and allow the entire theme to shift with a single change.
The raw colour palette — 7 scales with 10 steps each. Use as the source of truth in Figma variables.
Red · Orange · Yellow · Green · Green · Blue · Grey
Purpose-driven aliases of primitives. Use these in every component — never a raw primitive value.
background/brand/primary→ Green/80text/semantic/error/subtle→ Red/90border/semantic/info/primary→ Blue/80Semantic tokens
59 tokens across 4 categories. Hover any row to copy the token name or hex value.
background/neutral/primaryPage surfaces, cards, modals
#ffffffbackground/neutral/secondarySubtle row alternation, tinted page bg
#f5f5f5background/neutral/tertiaryHover states on neutral surfaces
#e1e1e1background/neutral/disabledDisabled component backgrounds
#8f8f8ftext/neutral/primaryBody text, headings
#000000text/neutral/secondarySecondary labels, captions
#3b3b3dtext/neutral/tertiaryHints, placeholders
#656566text/neutral/disabledDisabled text
#f5f5f5border/neutral/primaryDefault borders for inputs and cards
#e1e1e1border/neutral/inverseStronger emphasis borders
#a3a3a3icon/neutral/primaryPrimary icons
#000000icon/neutral/secondarySecondary icons
#3b3b3dicon/neutral/tertiarySubtle / tertiary icons
#4f5052icon/neutral/disabledDisabled icons
#f5f5f5background/brand/primaryPrimary CTA buttons
#318272background/brand/secondaryCTA hover state
#429f8dbackground/brand/tertiaryTinted brand surfaces, highlights
#6cd9c4text/brand/primaryBrand text on light backgrounds
#15483etext/brand/secondaryBrand text on dark backgrounds
#f3fffcborder/brand/primaryFocused inputs, brand emphasis
#318272border/brand/inverseBrand border on dark backgrounds
#d0fff6icon/brand/primaryBrand icons on light backgrounds
#15483eicon/brand/secondaryBrand icons on dark backgrounds
#f3fffcbackground/semantic/success/subtleSuccess alert background
#f3fffcbackground/semantic/success/boldSuccess badge background
#56bca8text/semantic/success/subtleSuccess text on subtle background
#226558text/semantic/success/boldSuccess text on bold background
#f3fffcborder/semantic/success/primarySuccess state borders
#318272border/semantic/success/inverseSuccess border on dark background
#d0fff6icon/semantic/success/subtleSuccess icons on subtle background
#226558icon/semantic/success/boldSuccess icons on bold background
#f3fffcbackground/semantic/warning/subtleWarning alert background
#fff6eebackground/semantic/warning/boldWarning badge background
#dd8a46text/semantic/warning/subtleWarning text on subtle background
#995824text/semantic/warning/boldWarning text on bold background
#fff6eeborder/semantic/warning/primaryWarning state borders
#995824border/semantic/warning/inverseWarning border on dark background
#ffe2caicon/semantic/warning/subtleWarning icons on subtle background
#995824icon/semantic/warning/boldWarning icons on bold background
#fff6eebackground/semantic/error/subtleError alert background
#ffeae7background/semantic/error/boldDestructive buttons
#bc1700text/semantic/error/subtleError text on subtle background
#931200text/semantic/error/boldError text on bold background
#ffeae7border/semantic/error/primaryError state borders
#bc1700border/semantic/error/inverseError border on dark background
#ffc5bdicon/semantic/error/subtleError icons on subtle background
#931200icon/semantic/error/boldError icons on bold background
#ffeae7background/semantic/info/subtleInfo alert background
#ecf7ffbackground/semantic/info/boldInfo badge background
#0070c6text/semantic/info/subtleInfo text on subtle background
#004275text/semantic/info/boldInfo text on bold background
#ecf7ffborder/semantic/info/primaryInfo state borders
#00599dborder/semantic/info/inverseInfo border on dark background
#b7e0fficon/semantic/info/subtleInfo icons on subtle background
#004275icon/semantic/info/boldInfo icons on bold background
#ecf7ffSemantic states in practice
Each semantic state uses a coordinated set of background, text, and border tokens. Always pair the subtle background with subtle text and primary border.
Payment confirmed
Your transaction has been processed successfully.
Success tokens used
background/semantic/success/subtletext/semantic/success/subtleborder/semantic/success/primarySubscription expiring
Your plan expires in 3 days. Review your options.
Warning tokens used
background/semantic/warning/subtletext/semantic/warning/subtleborder/semantic/warning/primaryAction failed
Unable to save changes. Check your connection and try again.
Error tokens used
background/semantic/error/subtletext/semantic/error/subtleborder/semantic/error/primaryMaintenance scheduled
System will be unavailable Sunday, 2–4 AM UTC.
Info tokens used
background/semantic/info/subtletext/semantic/info/subtleborder/semantic/info/primaryPrimitive palettes
7 raw colour scales. These are the source of truth for all semantic tokens. Hover any swatch to see the step and hex — click to copy.Never use primitives directly in components.
Scale convention: Step 10 is the lightest tint, 100 is the darkest shade. Each step is perceptually spaced for predictable pairing — e.g. Green/10 as a background always pairs with Green/90 as text for accessible contrast.