Skip to main content

Token reference

Below is a list of all tokens. The current values are those associated with the currently selected theme. You can change the current theme with the dropdown in the top-right corner. Each token shows its light value over its dark value, with a swatch of each.

Contrast: the --<x>-foreground on --<x> pairs and the text-on-background tokens are checked against WCAG AA (4.5:1) on every build. --primary, --destructive, --success, --warning and --sidebar-primary with their white foregrounds, and --muted-foreground on --muted in the light, are below it and listed in contrast-exceptions.json; the --<hue>-text tokens are the AA-safe way to show a hue as small text on --background.

Surfaces

TokenLight / dark
--background#ffffff#0a0a0a
--foreground#0a0a0a#fafafa
--border#e4e4e7#a1a1aa
--input#e4e4e7#27272a
--input-dirty#fffbeb#1a1808
--ring#27272a#d4d4d8

Semantic colour pairs

Each pair is a background and the text colour that sits on it.

TokenLight / dark
--primary#2563eb#2563eb
--primary-foreground#ffffff#ffffff
--primary-text#1d4ed8#60a5fa
--primary-glowrgba(59, 130, 246, 0.3)rgba(59, 130, 246, 0.4)
--secondary#f4f4f5#27272a
--secondary-foreground#18181b#fafafa
--muted#f4f4f5#27272a
--muted-foreground#65656d#a1a1aa
--accent#f4f4f5#27272a
--accent-foreground#18181b#fafafa
--accent-glowrgba(244, 244, 245, 0.5)rgba(39, 39, 42, 0.7)
--destructive#dc2626#dc2626
--destructive-foreground#ffffff#ffffff
--destructive-text#b91c1c#f87171
--success#15803d#15803d
--success-foreground#ffffff#ffffff
--success-text#166534#4ade80
--warning#b45309#b45309
--warning-foreground#ffffff#ffffff
--warning-text#b45309#fbbf24
--info#f9fafb#1f2937
--info-foreground#0a0a0a#fafafa
--info-border#e4e4e7#27272a
--popover#ffffff#18181b
--popover-foreground#0a0a0a#fafafa
--card#ffffff#18181b
--card-foreground#0a0a0a#fafafa
TokenLight / dark
--sidebar-background#f4f4f5#18181b
--sidebar-foreground#18181b#fafafa
--sidebar-primary#2563eb#2563eb
--sidebar-primary-foreground#ffffff#ffffff
--sidebar-accent#e4e4e7#27272a
--sidebar-accent-foreground#18181b#fafafa
--sidebar-border#e4e4e7#27272a
--sidebar-ring#2563eb#2563eb

Gradients

Tailwind exposes these as background images: bg-gradient-primary, bg-gradient-subtle, bg-gradient-card, bg-gradient-hero.

TokenLight / dark
--gradient-primarylinear-gradient(135deg, #3b82f6 0%, #2563eb 100%)linear-gradient(135deg, #3b82f6 0%, #2563eb 100%)
--gradient-subtlelinear-gradient(180deg, #ffffff 0%, #f4f4f5 100%)linear-gradient(180deg, #0a0a0a 0%, #18181b 100%)
--gradient-cardlinear-gradient(135deg, rgba(59,130,246,.05), rgba(37,99,235,.05))linear-gradient(135deg, rgba(59,130,246,.1), rgba(37,99,235,.1))
--gradient-herolinear-gradient(135deg, #3b82f6 0%, #8b5cf6 50%, #ec4899 100%)linear-gradient(135deg, #3b82f6 0%, #8b5cf6 50%, #ec4899 100%)

Shadows

TokenLight / dark
--shadow-soft0 1px 2px 0 rgba(0,0,0,.05)0 1px 2px 0 rgba(0,0,0,.3)
--shadow-medium0 4px 6px -1px rgba(0,0,0,.1), 0 2px 4px -1px rgba(0,0,0,.06)0 4px 6px -1px rgba(0,0,0,.5), 0 2px 4px -1px rgba(0,0,0,.3)
--shadow-large0 10px 15px -3px rgba(0,0,0,.1), 0 4px 6px -2px rgba(0,0,0,.05)0 10px 15px -3px rgba(0,0,0,.5), 0 4px 6px -2px rgba(0,0,0,.3)
--shadow-card0 1px 3px 0 rgba(0,0,0,.1), 0 1px 2px 0 rgba(0,0,0,.06)0 1px 3px 0 rgba(0,0,0,.5), 0 1px 2px 0 rgba(0,0,0,.3)
--shadow-elevated0 20px 25px -5px rgba(0,0,0,.1), 0 10px 10px -5px rgba(0,0,0,.04)0 20px 25px -5px rgba(0,0,0,.7), 0 10px 10px -5px rgba(0,0,0,.4)
--shadow-glow0 0 20px rgba(59,130,246,.4)0 0 20px rgba(59,130,246,.5)

Radii

Declared on :root in light-tokens.css, so they are part of tokens.css and need no Tailwind. One knob, --radius, and the steps derive from it. The same in both modes.

TokenValue
--radius0.5rem
--radius-smcalc(var(--radius) - 2px) = 0.375rem
--radius-mdvar(--radius) = 0.5rem
--radius-lgcalc(var(--radius) + 4px) = 0.75rem
--radius-xlcalc(var(--radius) + 8px) = 1rem
--radius-2xlcalc(var(--radius) + 16px) = 1.5rem
--radius-3xlcalc(var(--radius) + 24px) = 2rem
--radius-full9999px

The Tailwind utilities carry the derivation themselves (.rounded-md { border-radius: var(--radius) }, .rounded-lg { border-radius: calc(var(--radius) + 4px) }), so --radius is resolved at the element: --radius: 0 squares everything below it whether it is set on :root or on a subtree (.panel { --radius: 0 }). The --radius-* steps are the same derivation for plain CSS (border-radius: var(--radius-md)); a plain-CSS consumer may override a step on its own, the utilities do not read the steps.

Type, density and motion

Also on :root in light-tokens.css; the same in both modes.

TokenValue
--font-sans / --font-monosystem stacks; body uses --font-sans
--text-xs--text-3xl, --text-*-line-height0.75rem … 1.875rem
--font-weight-normal / -medium / -semibold / -bold400 / 500 / 600 / 700
--spacing0.25rem; every spacing utility is a multiple of it (p-4 = 4 × it)
--control-height-sm / -md / -lg2rem / 2.5rem / 3rem
--control-padding-x-sm / -md / -lg0.75rem / 1rem / 1rem (Input, Select, Textarea, Listbox, Combobox)
--button-padding-x-sm / -md / -lg0.75rem / 1rem / 1.5rem (Button)
--card-padding-sm / -md / -lg--spacing × 4 / 6 / 8 (Card)
--table-cell-padding-x-sm / -md, --table-cell-padding-y-sm / -md--spacing × 2 / 3, × 1.5 / 2.5 (Table cell, per size)
--drawer-size-sm / -md / -lg20rem / 28rem / 40rem (Drawer panel width or height)
--container-width-sm-2xl, --container-padding40 / 48 / 64 / 80 / 96rem, --spacing × 4 (Container)
--duration-fast / -normal / -slow150ms / 200ms / 300ms; -fast is the default of transition-*
--ease-standardcubic-bezier(0.4, 0, 0.2, 1); the default of transition-*
--ease-outcubic-bezier(0, 0, 0.2, 1); the .animate-* entrances and exits

In Tailwind, reach a scalar token with the arbitrary-value form: h-(--control-height-md), px-(--button-padding-x-md), duration-(--duration-fast).

Animations

Keyframes, one --animate-* token per animation and the .animate-* classes that apply them ship in tokens.css, so they need no Tailwind. With Tailwind the same tokens back the animate-* utilities and their variants (group-hover:animate-pulse). Override the token to retime one.

Class (token)KeyframesTiming
animate-fade-in / animate-fade-out (--animate-fade-in / -out)fade-in / fade-out--duration-normal (0.2s) --ease-out
animate-slide-in-from-top / -bottom / -left / -right (--animate-slide-in-from-*)slide-in-from-* (10px travel)--duration-normal --ease-out
animate-scale-in / animate-scale-out (--animate-scale-in / -out)scale-in / scale-out (0.95 ↔ 1)--duration-normal --ease-out
animate-spin (--animate-spin)zui-spin1s linear, infinite
animate-pulse (--animate-pulse)zui-pulse (opacity 1 ↔ 0.5)2s cubic-bezier(0.4, 0, 0.6, 1), infinite
animate-bounce (--animate-bounce)zui-bounce (10px)1s ease-in-out, infinite
animate-shake (--animate-shake)shake (±5px)0.5s ease-in-out
animate-skeleton-wave (--animate-skeleton-wave)skeleton-wave (sheen sweep)1.6s linear, infinite
animate-progress-indeterminate (--animate-progress-indeterminate)progress-indeterminate (bar sweep)1.5s --ease-standard, infinite