Foundations

Color

62 semantic colors in each mode, each one a reference to a step on the ladders below. Use semantic colors in UI. Never a ladder step, never a raw hex.

Do

Use the semantic token for the role: text.muted for secondary text on any surface.

Don't

Pick a gray from the ladder because it looks right. It won't follow dark mode or a future contrast fix.

Surface

Backgrounds: the page, cards, tinted areas, inverse bands and code.

TokenCSS variableLightDark
surface.page --color-surface-page #f8fafccolor.gray.50 #0d1117color.ink.900
surface.default --color-surface-default #ffffffcolor.white #161b22color.ink.800
surface.subtle --color-surface-subtle #f1f5f9color.gray.100 #21262dcolor.ink.700
surface.inverse --color-surface-inverse #0d2b45color.blue.900 #f8fafccolor.gray.50
surface.code --color-surface-code #1e293bcolor.gray.800 #010409color.ink.950

Text

Text and icons that sit on surfaces. Every pairing clears 7:1.

TokenCSS variableLightDark
text.heading --color-text-heading #0d2b45color.blue.900 #f0f6fccolor.ink.50
text.default --color-text-default #1e293bcolor.gray.800 #c9d1d9color.ink.100
text.muted --color-text-muted #334155color.gray.700 #aeb8c2color.ink.200
text.placeholder --color-text-placeholder #334155color.gray.700 #aeb8c2color.ink.200
text.link --color-text-link #1550a0color.blue.700 #93c5fdcolor.blue.300
text.inverse --color-text-inverse #ffffffcolor.white #0d1117color.ink.900
text.onCode --color-text-on-code #ffffffcolor.white #ffffffcolor.white

Action

Interactive fills and their labels. Labels on a fill use its "on" token.

TokenCSS variableLightDark
action.primary --color-action-primary #1550a0color.blue.700 #93c5fdcolor.blue.300
action.primaryHover --color-action-primary-hover #0d3b6ecolor.blue.800 #bfdbfecolor.blue.200
action.onPrimary --color-action-on-primary #ffffffcolor.white #0d1117color.ink.900
action.secondary --color-action-secondary #38bdf8color.sky.400 #38bdf8color.sky.400
action.focusRing --color-action-focus-ring #1550a0color.blue.700 #60a5facolor.blue.400
action.danger --color-action-danger #991b1bcolor.red.800 #fca5a5color.red.300
action.dangerHover --color-action-danger-hover #7f1d1dcolor.red.900 #fecacacolor.red.200
action.onDanger --color-action-on-danger #ffffffcolor.white #0d1117color.ink.900
action.disabled --color-action-disabled #64748bcolor.gray.500 #828b95color.ink.400
action.disabledBg --color-action-disabled-bg #f1f5f9color.gray.100 #21262dcolor.ink.700

Border

Edges. Only control, controlHover, focus and error may outline a control.

TokenCSS variableLightDark
border.default --color-border-default #e2e8f0color.gray.200 #6e7681color.ink.500
border.control --color-border-control #64748bcolor.gray.500 #6e7681color.ink.500
border.controlHover --color-border-control-hover #475569color.gray.600 #9aa4afcolor.ink.300
border.strong --color-border-strong #cbd5e1color.gray.300 #aeb8c2color.ink.200
border.focus --color-border-focus #1550a0color.blue.700 #60a5facolor.blue.400
border.error --color-border-error #dc2626color.red.600 #f87171color.red.400
border.disabled --color-border-disabled #e2e8f0color.gray.200 #545d68color.ink.600

Feedback

Success, warning, error and info. Keep each family together.

TokenCSS variableLightDark
feedback.success.surface --color-feedback-success-surface #f0fdf4color.green.50 #14532dcolor.green.900
feedback.success.border --color-feedback-success-border #bbf7d0color.green.200 #166534color.green.800
feedback.success.solid --color-feedback-success-solid #166534color.green.800 #4ade80color.green.400
feedback.success.text --color-feedback-success-text #14532dcolor.green.900 #bbf7d0color.green.200
feedback.success.onSolid --color-feedback-success-on-solid #ffffffcolor.white #0d1117color.ink.900
feedback.warning.surface --color-feedback-warning-surface #fffbebcolor.amber.50 #78350fcolor.amber.900
feedback.warning.border --color-feedback-warning-border #fde68acolor.amber.200 #92400ecolor.amber.800
feedback.warning.solid --color-feedback-warning-solid #92400ecolor.amber.800 #fbbf24color.amber.400
feedback.warning.text --color-feedback-warning-text #78350fcolor.amber.900 #fde68acolor.amber.200
feedback.warning.onSolid --color-feedback-warning-on-solid #ffffffcolor.white #0d1117color.ink.900
feedback.error.surface --color-feedback-error-surface #fef2f2color.red.50 #7f1d1dcolor.red.900
feedback.error.border --color-feedback-error-border #fecacacolor.red.200 #991b1bcolor.red.800
feedback.error.solid --color-feedback-error-solid #991b1bcolor.red.800 #fca5a5color.red.300
feedback.error.text --color-feedback-error-text #7f1d1dcolor.red.900 #fee2e2color.red.100
feedback.error.onSolid --color-feedback-error-on-solid #ffffffcolor.white #0d1117color.ink.900
feedback.info.surface --color-feedback-info-surface #eff6ffcolor.blue.50 #0d2b45color.blue.900
feedback.info.border --color-feedback-info-border #dbeafecolor.blue.100 #0d3b6ecolor.blue.800
feedback.info.solid --color-feedback-info-solid #1550a0color.blue.700 #93c5fdcolor.blue.300
feedback.info.text --color-feedback-info-text #0d3b6ecolor.blue.800 #93c5fdcolor.blue.300
feedback.info.onSolid --color-feedback-info-on-solid #ffffffcolor.white #0d1117color.ink.900

Accent

Small highlights. Not for large fills.

TokenCSS variableLightDark
accent.aaaSurface --color-accent-aaa-surface #ede9fecolor.violet.100 #4c1d95color.violet.900
accent.aaaSolid --color-accent-aaa-solid #6d28d9color.violet.700 #c4b5fdcolor.violet.300
accent.aaaText --color-accent-aaa-text #5b21b6color.violet.800 #ddd6fecolor.violet.200
accent.onAaa --color-accent-on-aaa #ffffffcolor.white #0d1117color.ink.900
accent.cyan --color-accent-cyan #0c4a6ecolor.sky.900 #7dd3fccolor.sky.300

Selected

The selected state, always paired with a second cue such as weight or a bar.

TokenCSS variableLightDark
selected.surface --color-selected-surface #eff6ffcolor.blue.50 #0d3b6ecolor.blue.800
selected.text --color-selected-text #1550a0color.blue.700 #bfdbfecolor.blue.200

Chart

Data visualization marks. See Data visualization.

TokenCSS variableLightDark
chart.1 --color-chart-1 #1a5fa8color.blue.600 #60a5facolor.blue.400
chart.2 --color-chart-2 #b45309color.amber.700 #fbbf24color.amber.400
chart.3 --color-chart-3 #7c3aedcolor.violet.600 #a78bfacolor.violet.400
chart.4 --color-chart-4 #15803dcolor.green.700 #4ade80color.green.400
chart.5 --color-chart-5 #dc2626color.red.600 #f87171color.red.400

Overlay

The dimmed layer behind dialogs and drawers.

TokenCSS variableLightDark
overlayScrim --color-overlay-scrim rgba(15, 23, 42, 0.5)literal value rgba(0, 0, 0, 0.6)literal value

The ladders

The primitive ramps every semantic color points at. Reference only.

blue
Step50100200300400500600700800900
Value
#eff6ff

#dbeafe

#bfdbfe

#93c5fd

#60a5fa

#2767cc

#1a5fa8

#1550a0

#0d3b6e

#0d2b45
sky
Step50100200300400500600700800900
Value
#f0f9ff

#e0f2fe

#bae6fd

#7dd3fc

#38bdf8

#0ea5e9

#0284c7

#0369a1

#075985

#0c4a6e
gray
Step50100200300350400450500550600700800900
Value
#f8fafc

#f1f5f9

#e2e8f0

#cbd5e1

#9fadc1

#94a3b8

#8492a6

#64748b

#5f6f84

#475569

#334155

#1e293b

#0f172a
ink
Step50100200300400500600700800900950
Value
#f0f6fc

#c9d1d9

#aeb8c2

#9aa4af

#828b95

#6e7681

#545d68

#21262d

#161b22

#0d1117

#010409
green
Step50100200300400500600700800900
Value
#f0fdf4

#dcfce7

#bbf7d0

#86efac

#4ade80

#22c55e

#16a34a

#15803d

#166534

#14532d
amber
Step50100200300400500600700800900
Value
#fffbeb

#fef3c7

#fde68a

#fcd34d

#fbbf24

#f59e0b

#d97706

#b45309

#92400e

#78350f
red
Step50100200300400500600700800900
Value
#fef2f2

#fee2e2

#fecaca

#fca5a5

#f87171

#ef4444

#dc2626

#b91c1c

#991b1b

#7f1d1d
violet
Step50100200300400500600700800900
Value
#f5f3ff

#ede9fe

#ddd6fe

#c4b5fd

#a78bfa

#8b5cf6

#7c3aed

#6d28d9

#5b21b6

#4c1d95