Skip to content

Colors

Stable

A 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.

P
PrimitivesRaw values

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

S
SemanticAlways use in components

Purpose-driven aliases of primitives. Use these in every component — never a raw primitive value.

background/brand/primary→ Green/80
text/semantic/error/subtle→ Red/90
border/semantic/info/primary→ Blue/80

Semantic tokens

59 tokens across 4 categories. Hover any row to copy the token name or hex value.

Neutral
14 tokens
Token name
Value
background/neutral/primary

Page surfaces, cards, modals

#ffffff
background/neutral/secondary

Subtle row alternation, tinted page bg

#f5f5f5
background/neutral/tertiary

Hover states on neutral surfaces

#e1e1e1
background/neutral/disabled

Disabled component backgrounds

#8f8f8f
text/neutral/primary

Body text, headings

#000000
text/neutral/secondary

Secondary labels, captions

#3b3b3d
text/neutral/tertiary

Hints, placeholders

#656566
text/neutral/disabled

Disabled text

#f5f5f5
border/neutral/primary

Default borders for inputs and cards

#e1e1e1
border/neutral/inverse

Stronger emphasis borders

#a3a3a3
icon/neutral/primary

Primary icons

#000000
icon/neutral/secondary

Secondary icons

#3b3b3d
icon/neutral/tertiary

Subtle / tertiary icons

#4f5052
icon/neutral/disabled

Disabled icons

#f5f5f5
Brand
9 tokens
Token name
Value
background/brand/primary

Primary CTA buttons

#318272
background/brand/secondary

CTA hover state

#429f8d
background/brand/tertiary

Tinted brand surfaces, highlights

#6cd9c4
text/brand/primary

Brand text on light backgrounds

#15483e
text/brand/secondary

Brand text on dark backgrounds

#f3fffc
border/brand/primary

Focused inputs, brand emphasis

#318272
border/brand/inverse

Brand border on dark backgrounds

#d0fff6
icon/brand/primary

Brand icons on light backgrounds

#15483e
icon/brand/secondary

Brand icons on dark backgrounds

#f3fffc
Success
8 tokens
Token name
Value
background/semantic/success/subtle

Success alert background

#f3fffc
background/semantic/success/bold

Success badge background

#56bca8
text/semantic/success/subtle

Success text on subtle background

#226558
text/semantic/success/bold

Success text on bold background

#f3fffc
border/semantic/success/primary

Success state borders

#318272
border/semantic/success/inverse

Success border on dark background

#d0fff6
icon/semantic/success/subtle

Success icons on subtle background

#226558
icon/semantic/success/bold

Success icons on bold background

#f3fffc
Warning
8 tokens
Token name
Value
background/semantic/warning/subtle

Warning alert background

#fff6ee
background/semantic/warning/bold

Warning badge background

#dd8a46
text/semantic/warning/subtle

Warning text on subtle background

#995824
text/semantic/warning/bold

Warning text on bold background

#fff6ee
border/semantic/warning/primary

Warning state borders

#995824
border/semantic/warning/inverse

Warning border on dark background

#ffe2ca
icon/semantic/warning/subtle

Warning icons on subtle background

#995824
icon/semantic/warning/bold

Warning icons on bold background

#fff6ee
Error
8 tokens
Token name
Value
background/semantic/error/subtle

Error alert background

#ffeae7
background/semantic/error/bold

Destructive buttons

#bc1700
text/semantic/error/subtle

Error text on subtle background

#931200
text/semantic/error/bold

Error text on bold background

#ffeae7
border/semantic/error/primary

Error state borders

#bc1700
border/semantic/error/inverse

Error border on dark background

#ffc5bd
icon/semantic/error/subtle

Error icons on subtle background

#931200
icon/semantic/error/bold

Error icons on bold background

#ffeae7
Info
8 tokens
Token name
Value
background/semantic/info/subtle

Info alert background

#ecf7ff
background/semantic/info/bold

Info badge background

#0070c6
text/semantic/info/subtle

Info text on subtle background

#004275
text/semantic/info/bold

Info text on bold background

#ecf7ff
border/semantic/info/primary

Info state borders

#00599d
border/semantic/info/inverse

Info border on dark background

#b7e0ff
icon/semantic/info/subtle

Info icons on subtle background

#004275
icon/semantic/info/bold

Info icons on bold background

#ecf7ff

Semantic 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

bgbackground/semantic/success/subtle
texttext/semantic/success/subtle
borderborder/semantic/success/primary

Subscription expiring

Your plan expires in 3 days. Review your options.

Warning tokens used

bgbackground/semantic/warning/subtle
texttext/semantic/warning/subtle
borderborder/semantic/warning/primary

Action failed

Unable to save changes. Check your connection and try again.

Error tokens used

bgbackground/semantic/error/subtle
texttext/semantic/error/subtle
borderborder/semantic/error/primary

Maintenance scheduled

System will be unavailable Sunday, 2–4 AM UTC.

Info tokens used

bgbackground/semantic/info/subtle
texttext/semantic/info/subtle
borderborder/semantic/info/primary

Primitive 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.

GreenBrand
GreyscaleNeutral
RedError
OrangeWarning
YellowAttention
BlueInfo
Black & WhiteBase

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.