Colors
27 ramps and 298 stops - the Tailwind v4 palettes plus five ramps synthesized for Gremorie, including the clay brand ramp.
Gremorie inherits the Tailwind v4 palettes and extends them with
five synthesized ramps: four extra neutrals (mauve, mist,
olive, taupe) and one brand ramp (clay, anchored on Claude's
#D97757). Together they form 27 ramps and 298 stops, every one
declared in OKLCH in packages/tokens/styles/theme.css.
Each stop is intentionally spaced in lightness (perceptually uniform
in OKLCH space), so slate-200 and blue-200 behave the same way
when used as a surface even though the hues are completely
different.
All ramps at a glance
Every ramp, lightest to darkest. Click a row to jump to its full table.
How to read the scale
Stops run from 50 (lightest) to 950 (darkest); the gray
ramp adds a 0 stop (pure white) for elevated surfaces in light
mode. There is no rigid usage rule, but the patterns are strong:
| Range | Typical use |
|---|---|
| 0, 50, 100 | Backgrounds, item hover, subtle surfaces |
| 200, 300 | Borders, separators, secondary surfaces |
| 400, 500 | Secondary text, icons, placeholders |
| 600, 700 | Primary text, primary actions, active UI icons |
| 800, 900, 950 | Headings, dark mode surfaces |
These values are stable: they only change when the primitive is
edited in theme.css, and when that happens the change cascades to
every theme that references it.
How to consume
Three equivalent forms:
// 1. Tailwind utility (generated automatically from the @theme block)
<div className="bg-blue-600" />
// 2. CSS variable, for APIs that take a color string (SVG, Recharts)
<div style={{ background: 'var(--color-blue-600)' }} />/* 3. Referencing the ramp in a theme file (the only place this is normal) */
[data-theme='claude'] {
--primary: var(--color-clay-500);
}Inside a themed component, almost every case should consume a
semantic token (bg-primary, text-foreground) instead of a
primitive. Primitives are for marketing surfaces, illustration, and
feeding the semantic layer. See
when you touch primitives.
Primitives do not change with the mode. Unlike semantic tokens, a
primitive resolves to the same color in light and dark: --color-clay-500 is
always #D97757. Dark mode happens one layer up, when a theme remaps its
intents to different primitives under .dark.
HEX is an approximation. The HEX values below are the sRGB-clamped rendering of the OKLCH source. For saturated stops in fuchsia, lime, and friends, the OKLCH describes colors outside the sRGB gamut; the HEX is the closest in-gamut point, not the exact value. The source of truth is always OKLCH.
Neutrals
Nine neutral ramps cover the spectrum from pure gray to temperature
bias: slate cold, stone warm, mauve violet-pink. Use them for
chrome, surfaces, text, and backgrounds. Five are stock Tailwind;
four are Gremorie synthesized (mauve, mist, olive,
taupe), created so the themes can map to consistent primitives
instead of literal OKLCH values.
Gray
Pure zero-chroma neutral and the working gray of the system: the default theme resolves its semantic intents here. The extra 0 stop is pure white, used for elevated surfaces (card, popover) in light mode.
| Sample | Step | CSS Token | Tailwind class | OKLCH | HEX |
|---|---|---|---|---|---|
| 0 | --color-gray-0 | bg-gray-0 | oklch(1 0 0) | #FFFFFF | |
| 50 | --color-gray-50 | bg-gray-50 | oklch(0.985 0 0) | #FAFAFA | |
| 100 | --color-gray-100 | bg-gray-100 | oklch(0.97 0 0) | #F5F5F5 | |
| 200 | --color-gray-200 | bg-gray-200 | oklch(0.922 0 0) | #E5E5E5 | |
| 300 | --color-gray-300 | bg-gray-300 | oklch(0.87 0 0) | #D4D4D4 | |
| 400 | --color-gray-400 | bg-gray-400 | oklch(0.708 0 0) | #A1A1A1 | |
| 500 | --color-gray-500 | bg-gray-500 | oklch(0.556 0 0) | #737373 | |
| 600 | --color-gray-600 | bg-gray-600 | oklch(0.45 0 0) | #555555 | |
| 700 | --color-gray-700 | bg-gray-700 | oklch(0.35 0 0) | #3A3A3A | |
| 800 | --color-gray-800 | bg-gray-800 | oklch(0.269 0 0) | #262626 | |
| 900 | --color-gray-900 | bg-gray-900 | oklch(0.205 0 0) | #171717 | |
| 950 | --color-gray-950 | bg-gray-950 | oklch(0.145 0 0) | #0A0A0A |
Slate
Cool neutral with a subtle blue bias. Serious UI chrome, corporate dashboards, and products where credibility outweighs personality.
| Sample | Step | CSS Token | Tailwind class | OKLCH | HEX |
|---|---|---|---|---|---|
| 50 | --color-slate-50 | bg-slate-50 | oklch(98.4% 0.003 247.858) | #F8FAFC | |
| 100 | --color-slate-100 | bg-slate-100 | oklch(96.8% 0.007 247.896) | #F1F5F9 | |
| 200 | --color-slate-200 | bg-slate-200 | oklch(92.9% 0.013 255.508) | #E2E8F0 | |
| 300 | --color-slate-300 | bg-slate-300 | oklch(86.9% 0.022 252.894) | #CAD5E2 | |
| 400 | --color-slate-400 | bg-slate-400 | oklch(70.4% 0.04 256.788) | #90A1B9 | |
| 500 | --color-slate-500 | bg-slate-500 | oklch(55.4% 0.046 257.417) | #62748E | |
| 600 | --color-slate-600 | bg-slate-600 | oklch(44.6% 0.043 257.281) | #45556C | |
| 700 | --color-slate-700 | bg-slate-700 | oklch(37.2% 0.044 257.287) | #314158 | |
| 800 | --color-slate-800 | bg-slate-800 | oklch(27.9% 0.041 260.031) | #1D293D | |
| 900 | --color-slate-900 | bg-slate-900 | oklch(20.8% 0.042 265.755) | #0F172B | |
| 950 | --color-slate-950 | bg-slate-950 | oklch(12.9% 0.042 264.695) | #020618 |
Zinc
Slightly violet, more technical neutral. Good on product surfaces that want a gray with character without committing to a declared color.
| Sample | Step | CSS Token | Tailwind class | OKLCH | HEX |
|---|---|---|---|---|---|
| 50 | --color-zinc-50 | bg-zinc-50 | oklch(98.5% 0 0) | #FAFAFA | |
| 100 | --color-zinc-100 | bg-zinc-100 | oklch(96.7% 0.001 286.375) | #F4F4F5 | |
| 200 | --color-zinc-200 | bg-zinc-200 | oklch(92% 0.004 286.32) | #E4E4E7 | |
| 300 | --color-zinc-300 | bg-zinc-300 | oklch(87.1% 0.006 286.286) | #D4D4D8 | |
| 400 | --color-zinc-400 | bg-zinc-400 | oklch(70.5% 0.015 286.067) | #9F9FA9 | |
| 500 | --color-zinc-500 | bg-zinc-500 | oklch(55.2% 0.016 285.938) | #71717B | |
| 600 | --color-zinc-600 | bg-zinc-600 | oklch(44.2% 0.017 285.786) | #52525C | |
| 700 | --color-zinc-700 | bg-zinc-700 | oklch(37% 0.013 285.805) | #3F3F46 | |
| 800 | --color-zinc-800 | bg-zinc-800 | oklch(27.4% 0.006 286.033) | #27272A | |
| 900 | --color-zinc-900 | bg-zinc-900 | oklch(21% 0.006 285.885) | #18181B | |
| 950 | --color-zinc-950 | bg-zinc-950 | oklch(14.1% 0.005 285.823) | #09090B |
Neutral
The canonical Tailwind zero-chroma gray, kept for compatibility. Nearly identical to gray, minus the 0 stop and with the stock 600 and 700 values.
| Sample | Step | CSS Token | Tailwind class | OKLCH | HEX |
|---|---|---|---|---|---|
| 50 | --color-neutral-50 | bg-neutral-50 | oklch(98.5% 0 0) | #FAFAFA | |
| 100 | --color-neutral-100 | bg-neutral-100 | oklch(97% 0 0) | #F5F5F5 | |
| 200 | --color-neutral-200 | bg-neutral-200 | oklch(92.2% 0 0) | #E5E5E5 | |
| 300 | --color-neutral-300 | bg-neutral-300 | oklch(87% 0 0) | #D4D4D4 | |
| 400 | --color-neutral-400 | bg-neutral-400 | oklch(70.8% 0 0) | #A1A1A1 | |
| 500 | --color-neutral-500 | bg-neutral-500 | oklch(55.6% 0 0) | #737373 | |
| 600 | --color-neutral-600 | bg-neutral-600 | oklch(43.9% 0 0) | #525252 | |
| 700 | --color-neutral-700 | bg-neutral-700 | oklch(37.1% 0 0) | #404040 | |
| 800 | --color-neutral-800 | bg-neutral-800 | oklch(26.9% 0 0) | #262626 | |
| 900 | --color-neutral-900 | bg-neutral-900 | oklch(20.5% 0 0) | #171717 | |
| 950 | --color-neutral-950 | bg-neutral-950 | oklch(14.5% 0 0) | #0A0A0A |
Stone
Warm, earthy neutral. Mixes well with the amber and orange ramps and with editorial tones.
| Sample | Step | CSS Token | Tailwind class | OKLCH | HEX |
|---|---|---|---|---|---|
| 50 | --color-stone-50 | bg-stone-50 | oklch(98.5% 0.001 106.423) | #FAFAF9 | |
| 100 | --color-stone-100 | bg-stone-100 | oklch(97% 0.001 106.424) | #F5F5F4 | |
| 200 | --color-stone-200 | bg-stone-200 | oklch(92.3% 0.003 48.717) | #E7E5E4 | |
| 300 | --color-stone-300 | bg-stone-300 | oklch(86.9% 0.005 56.366) | #D6D3D1 | |
| 400 | --color-stone-400 | bg-stone-400 | oklch(70.9% 0.01 56.259) | #A6A09B | |
| 500 | --color-stone-500 | bg-stone-500 | oklch(55.3% 0.013 58.071) | #79716B | |
| 600 | --color-stone-600 | bg-stone-600 | oklch(44.4% 0.011 73.639) | #57534D | |
| 700 | --color-stone-700 | bg-stone-700 | oklch(37.4% 0.01 67.558) | #44403B | |
| 800 | --color-stone-800 | bg-stone-800 | oklch(26.8% 0.007 34.298) | #292524 | |
| 900 | --color-stone-900 | bg-stone-900 | oklch(21.6% 0.006 56.043) | #1C1917 | |
| 950 | --color-stone-950 | bg-stone-950 | oklch(14.7% 0.004 49.25) | #0C0A09 |
Mauve
Neutral with a subtle violet-pink bias, synthesized for Gremorie. Adds sophistication without leaving neutral territory.
| Sample | Step | CSS Token | Tailwind class | OKLCH | HEX |
|---|---|---|---|---|---|
| 50 | --color-mauve-50 | bg-mauve-50 | oklch(98.5% 0 0) | #FAFAFA | |
| 100 | --color-mauve-100 | bg-mauve-100 | oklch(96% 0.003 325.6) | #F3F1F3 | |
| 200 | --color-mauve-200 | bg-mauve-200 | oklch(92.2% 0.005 325.62) | #E7E4E7 | |
| 300 | --color-mauve-300 | bg-mauve-300 | oklch(86.5% 0.012 325.68) | #D7D0D7 | |
| 400 | --color-mauve-400 | bg-mauve-400 | oklch(71.1% 0.019 323.02) | #A89EA9 | |
| 500 | --color-mauve-500 | bg-mauve-500 | oklch(54.2% 0.034 322.5) | #79697B | |
| 600 | --color-mauve-600 | bg-mauve-600 | oklch(43.5% 0.029 321.78) | #594C5B | |
| 700 | --color-mauve-700 | bg-mauve-700 | oklch(36.4% 0.029 323.89) | #463947 | |
| 800 | --color-mauve-800 | bg-mauve-800 | oklch(26.3% 0.024 320.12) | #2A212C | |
| 900 | --color-mauve-900 | bg-mauve-900 | oklch(21.2% 0.019 322.12) | #1D161E | |
| 950 | --color-mauve-950 | bg-mauve-950 | oklch(14.5% 0.008 326) | #0C090C |
Olive
Yellow-green earthy neutral, synthesized for Gremorie. Complements amber and stone in editorial layouts and organic-feeling interfaces.
| Sample | Step | CSS Token | Tailwind class | OKLCH | HEX |
|---|---|---|---|---|---|
| 50 | --color-olive-50 | bg-olive-50 | oklch(98.8% 0.003 106.5) | #FBFBF9 | |
| 100 | --color-olive-100 | bg-olive-100 | oklch(96.6% 0.005 106.5) | #F4F4F0 | |
| 200 | --color-olive-200 | bg-olive-200 | oklch(93% 0.007 106.5) | #E8E8E3 | |
| 300 | --color-olive-300 | bg-olive-300 | oklch(88% 0.011 106.6) | #D8D8D0 | |
| 400 | --color-olive-400 | bg-olive-400 | oklch(73.7% 0.021 106.9) | #ABAB9C | |
| 500 | --color-olive-500 | bg-olive-500 | oklch(58% 0.031 107.3) | #7C7C67 | |
| 600 | --color-olive-600 | bg-olive-600 | oklch(46.6% 0.025 107.3) | #5B5B4B | |
| 700 | --color-olive-700 | bg-olive-700 | oklch(39.4% 0.023 107.4) | #474739 | |
| 800 | --color-olive-800 | bg-olive-800 | oklch(28.6% 0.016 107.4) | #2B2B22 | |
| 900 | --color-olive-900 | bg-olive-900 | oklch(22.8% 0.013 107.4) | #1D1D16 | |
| 950 | --color-olive-950 | bg-olive-950 | oklch(15.3% 0.006 107.1) | #0C0C09 |
Mist
Neutral with a micro cyan bias, synthesized for Gremorie. Useful when the product wants a gray cooler than slate without tipping into blue.
| Sample | Step | CSS Token | Tailwind class | OKLCH | HEX |
|---|---|---|---|---|---|
| 50 | --color-mist-50 | bg-mist-50 | oklch(98.7% 0.002 197.1) | #F9FBFB | |
| 100 | --color-mist-100 | bg-mist-100 | oklch(96.3% 0.002 197.1) | #F1F3F3 | |
| 200 | --color-mist-200 | bg-mist-200 | oklch(92.5% 0.005 214.3) | #E3E7E8 | |
| 300 | --color-mist-300 | bg-mist-300 | oklch(87.2% 0.007 219.6) | #D0D6D8 | |
| 400 | --color-mist-400 | bg-mist-400 | oklch(72.3% 0.014 214.4) | #9CA8AB | |
| 500 | --color-mist-500 | bg-mist-500 | oklch(56% 0.021 213.5) | #67787C | |
| 600 | --color-mist-600 | bg-mist-600 | oklch(45% 0.017 213.2) | #4B585B | |
| 700 | --color-mist-700 | bg-mist-700 | oklch(37.8% 0.015 216) | #394447 | |
| 800 | --color-mist-800 | bg-mist-800 | oklch(27.5% 0.011 216.9) | #22292B | |
| 900 | --color-mist-900 | bg-mist-900 | oklch(21.8% 0.008 223.9) | #161B1D | |
| 950 | --color-mist-950 | bg-mist-950 | oklch(14.8% 0.004 228.8) | #090B0C |
Taupe
Warm neutral between stone and mauve, earthy with a pink nuance. Synthesized for Gremorie; the Claude theme uses it for muted text and chart fills.
| Sample | Step | CSS Token | Tailwind class | OKLCH | HEX |
|---|---|---|---|---|---|
| 50 | --color-taupe-50 | bg-taupe-50 | oklch(98.6% 0.002 67.8) | #FBFAF9 | |
| 100 | --color-taupe-100 | bg-taupe-100 | oklch(96% 0.002 17.2) | #F3F1F1 | |
| 200 | --color-taupe-200 | bg-taupe-200 | oklch(92.2% 0.005 34.3) | #E8E4E3 | |
| 300 | --color-taupe-300 | bg-taupe-300 | oklch(86.8% 0.007 39.5) | #D8D2D0 | |
| 400 | --color-taupe-400 | bg-taupe-400 | oklch(71.4% 0.014 41.2) | #ABA09C | |
| 500 | --color-taupe-500 | bg-taupe-500 | oklch(54.7% 0.021 43.1) | #7C6D67 | |
| 600 | --color-taupe-600 | bg-taupe-600 | oklch(43.8% 0.017 39.3) | #5B4F4B | |
| 700 | --color-taupe-700 | bg-taupe-700 | oklch(36.7% 0.016 35.7) | #473C39 | |
| 800 | --color-taupe-800 | bg-taupe-800 | oklch(26.8% 0.011 36.5) | #2B2422 | |
| 900 | --color-taupe-900 | bg-taupe-900 | oklch(21.4% 0.009 43.1) | #1D1816 | |
| 950 | --color-taupe-950 | bg-taupe-950 | oklch(14.7% 0.004 49.3) | #0C0A09 |
Brand
The one ramp that exists for a brand rather than a hue family.
clay-500 is Claude's brand color, exactly, and the other ten
stops are derived from it with smooth lightness and chroma that
peaks mid-ramp.
Clay
Warm coral terracotta anchored on Claude's brand color: clay-500 is exactly #D97757 and the rest of the ramp is derived from it. The Claude theme binds its primary to clay-500 in light mode and clay-400 in dark mode.
| Sample | Step | CSS Token | Tailwind class | OKLCH | HEX |
|---|---|---|---|---|---|
| 50 | --color-clay-50 | bg-clay-50 | oklch(0.971 0.013 44) | #FEF3EE | |
| 100 | --color-clay-100 | bg-clay-100 | oklch(0.936 0.03 43) | #FCE4DA | |
| 200 | --color-clay-200 | bg-clay-200 | oklch(0.882 0.058 42) | #FBCCBB | |
| 300 | --color-clay-300 | bg-clay-300 | oklch(0.815 0.09 41) | #F5AF96 | |
| 400 | --color-clay-400 | bg-clay-400 | oklch(0.745 0.118 40) | #EC9272 | |
| 500 | --color-clay-500 | bg-clay-500 | oklch(0.672 0.131 38.76) | #D97757 | |
| 600 | --color-clay-600 | bg-clay-600 | oklch(0.57 0.135 38) | #B85637 | |
| 700 | --color-clay-700 | bg-clay-700 | oklch(0.5 0.118 36) | #9A4730 | |
| 800 | --color-clay-800 | bg-clay-800 | oklch(0.43 0.093 35) | #7A3B2B | |
| 900 | --color-clay-900 | bg-clay-900 | oklch(0.365 0.067 34) | #5D3026 | |
| 950 | --color-clay-950 | bg-clay-950 | oklch(0.268 0.042 33) | #381E18 |
Warm spectrum
Reds, oranges, ambers, yellows, limes, and greens. The range runs
from critical (red, for destructive) to organic (green,
lime). amber is one of the best warning hues without falling
into pure-yellow cliche.
Red
Classic high-contrast red. Reserved for destruction, critical failures, and unambiguous error states. The default theme binds destructive to red-600 (light) and red-400 (dark).
| Sample | Step | CSS Token | Tailwind class | OKLCH | HEX |
|---|---|---|---|---|---|
| 50 | --color-red-50 | bg-red-50 | oklch(97.1% 0.013 17.38) | #FEF2F2 | |
| 100 | --color-red-100 | bg-red-100 | oklch(93.6% 0.032 17.717) | #FFE2E2 | |
| 200 | --color-red-200 | bg-red-200 | oklch(88.5% 0.062 18.334) | #FFC9C9 | |
| 300 | --color-red-300 | bg-red-300 | oklch(80.8% 0.114 19.571) | #FFA2A2 | |
| 400 | --color-red-400 | bg-red-400 | oklch(70.4% 0.191 22.216) | #FF6467 | |
| 500 | --color-red-500 | bg-red-500 | oklch(63.7% 0.237 25.331) | #FB2C36 | |
| 600 | --color-red-600 | bg-red-600 | oklch(57.7% 0.245 27.325) | #E7000B | |
| 700 | --color-red-700 | bg-red-700 | oklch(50.5% 0.213 27.518) | #C10007 | |
| 800 | --color-red-800 | bg-red-800 | oklch(44.4% 0.177 26.899) | #9F0712 | |
| 900 | --color-red-900 | bg-red-900 | oklch(39.6% 0.141 25.723) | #82181A | |
| 950 | --color-red-950 | bg-red-950 | oklch(25.8% 0.092 26.042) | #460809 |
Orange
Warm and energetic, more approachable than red. Good for enthusiastic CTAs, non-critical alerts, and discovery elements.
| Sample | Step | CSS Token | Tailwind class | OKLCH | HEX |
|---|---|---|---|---|---|
| 50 | --color-orange-50 | bg-orange-50 | oklch(98% 0.016 73.684) | #FFF7ED | |
| 100 | --color-orange-100 | bg-orange-100 | oklch(95.4% 0.038 75.164) | #FFEDD4 | |
| 200 | --color-orange-200 | bg-orange-200 | oklch(90.1% 0.076 70.697) | #FFD6A7 | |
| 300 | --color-orange-300 | bg-orange-300 | oklch(83.7% 0.128 66.29) | #FFB86A | |
| 400 | --color-orange-400 | bg-orange-400 | oklch(75% 0.183 55.934) | #FF8904 | |
| 500 | --color-orange-500 | bg-orange-500 | oklch(70.5% 0.213 47.604) | #FF6900 | |
| 600 | --color-orange-600 | bg-orange-600 | oklch(64.6% 0.222 41.116) | #F54900 | |
| 700 | --color-orange-700 | bg-orange-700 | oklch(55.3% 0.195 38.402) | #CA3500 | |
| 800 | --color-orange-800 | bg-orange-800 | oklch(47% 0.157 37.304) | #9F2D00 | |
| 900 | --color-orange-900 | bg-orange-900 | oklch(40.8% 0.123 38.172) | #7E2A0C | |
| 950 | --color-orange-950 | bg-orange-950 | oklch(26.6% 0.079 36.259) | #441306 |
Amber
Luminous gold. Works well for warnings, premium badges, and warm highlights.
| Sample | Step | CSS Token | Tailwind class | OKLCH | HEX |
|---|---|---|---|---|---|
| 50 | --color-amber-50 | bg-amber-50 | oklch(98.7% 0.022 95.277) | #FFFBEB | |
| 100 | --color-amber-100 | bg-amber-100 | oklch(96.2% 0.059 95.617) | #FEF3C6 | |
| 200 | --color-amber-200 | bg-amber-200 | oklch(92.4% 0.12 95.746) | #FEE685 | |
| 300 | --color-amber-300 | bg-amber-300 | oklch(87.9% 0.169 91.605) | #FFD230 | |
| 400 | --color-amber-400 | bg-amber-400 | oklch(82.8% 0.189 84.429) | #FFB900 | |
| 500 | --color-amber-500 | bg-amber-500 | oklch(76.9% 0.188 70.08) | #FE9A00 | |
| 600 | --color-amber-600 | bg-amber-600 | oklch(66.6% 0.179 58.318) | #E17100 | |
| 700 | --color-amber-700 | bg-amber-700 | oklch(55.5% 0.163 48.998) | #BB4D00 | |
| 800 | --color-amber-800 | bg-amber-800 | oklch(47.3% 0.137 46.201) | #973C00 | |
| 900 | --color-amber-900 | bg-amber-900 | oklch(41.4% 0.112 45.904) | #7B3306 | |
| 950 | --color-amber-950 | bg-amber-950 | oklch(27.9% 0.077 45.635) | #461901 |
Yellow
Pure, high-value yellow. Use with care: contrast over white is treacherous, so prefer stops 600 and above for text.
| Sample | Step | CSS Token | Tailwind class | OKLCH | HEX |
|---|---|---|---|---|---|
| 50 | --color-yellow-50 | bg-yellow-50 | oklch(98.7% 0.026 102.212) | #FEFCE8 | |
| 100 | --color-yellow-100 | bg-yellow-100 | oklch(97.3% 0.071 103.193) | #FEF9C2 | |
| 200 | --color-yellow-200 | bg-yellow-200 | oklch(94.5% 0.129 101.54) | #FFF085 | |
| 300 | --color-yellow-300 | bg-yellow-300 | oklch(90.5% 0.182 98.111) | #FFDF20 | |
| 400 | --color-yellow-400 | bg-yellow-400 | oklch(85.2% 0.199 91.936) | #FDC700 | |
| 500 | --color-yellow-500 | bg-yellow-500 | oklch(79.5% 0.184 86.047) | #F0B100 | |
| 600 | --color-yellow-600 | bg-yellow-600 | oklch(68.1% 0.162 75.834) | #D08700 | |
| 700 | --color-yellow-700 | bg-yellow-700 | oklch(55.4% 0.135 66.442) | #A65F00 | |
| 800 | --color-yellow-800 | bg-yellow-800 | oklch(47.6% 0.114 61.907) | #894B00 | |
| 900 | --color-yellow-900 | bg-yellow-900 | oklch(42.1% 0.095 57.708) | #733E0A | |
| 950 | --color-yellow-950 | bg-yellow-950 | oklch(28.6% 0.066 53.813) | #432004 |
Lime
Acid lime green with attitude. Works for tech-forward and fitness brands; hard to combine with conservative palettes.
| Sample | Step | CSS Token | Tailwind class | OKLCH | HEX |
|---|---|---|---|---|---|
| 50 | --color-lime-50 | bg-lime-50 | oklch(98.6% 0.031 120.757) | #F7FEE7 | |
| 100 | --color-lime-100 | bg-lime-100 | oklch(96.7% 0.067 122.328) | #ECFCCA | |
| 200 | --color-lime-200 | bg-lime-200 | oklch(93.8% 0.127 124.321) | #D8F999 | |
| 300 | --color-lime-300 | bg-lime-300 | oklch(89.7% 0.196 126.665) | #BBF451 | |
| 400 | --color-lime-400 | bg-lime-400 | oklch(84.1% 0.238 128.85) | #9AE600 | |
| 500 | --color-lime-500 | bg-lime-500 | oklch(76.8% 0.233 130.85) | #7CCF00 | |
| 600 | --color-lime-600 | bg-lime-600 | oklch(64.8% 0.2 131.684) | #5EA500 | |
| 700 | --color-lime-700 | bg-lime-700 | oklch(53.2% 0.157 131.589) | #497D00 | |
| 800 | --color-lime-800 | bg-lime-800 | oklch(45.3% 0.124 130.933) | #3C6300 | |
| 900 | --color-lime-900 | bg-lime-900 | oklch(40.5% 0.101 131.063) | #35530E | |
| 950 | --color-lime-950 | bg-lime-950 | oklch(27.4% 0.072 132.109) | #192E03 |
Green
The classic growth green. In UI it signals progress and generic approval.
| Sample | Step | CSS Token | Tailwind class | OKLCH | HEX |
|---|---|---|---|---|---|
| 50 | --color-green-50 | bg-green-50 | oklch(98.2% 0.018 155.826) | #F0FDF4 | |
| 100 | --color-green-100 | bg-green-100 | oklch(96.2% 0.044 156.743) | #DCFCE7 | |
| 200 | --color-green-200 | bg-green-200 | oklch(92.5% 0.084 155.995) | #B9F8CF | |
| 300 | --color-green-300 | bg-green-300 | oklch(87.1% 0.15 154.449) | #7BF1A8 | |
| 400 | --color-green-400 | bg-green-400 | oklch(79.2% 0.209 151.711) | #05DF72 | |
| 500 | --color-green-500 | bg-green-500 | oklch(72.3% 0.219 149.579) | #00C950 | |
| 600 | --color-green-600 | bg-green-600 | oklch(62.7% 0.194 149.214) | #00A63E | |
| 700 | --color-green-700 | bg-green-700 | oklch(52.7% 0.154 150.069) | #008236 | |
| 800 | --color-green-800 | bg-green-800 | oklch(44.8% 0.119 151.328) | #016630 | |
| 900 | --color-green-900 | bg-green-900 | oklch(39.3% 0.095 152.535) | #0D542B | |
| 950 | --color-green-950 | bg-green-950 | oklch(26.6% 0.065 152.934) | #032E15 |
Cool spectrum
Blue-greens (emerald, teal), cyan, the blues, and the
transition into violet. This is the most "digital product" range of
the palette, where the defaults for links, primary actions, and
categorical charts live. emerald is the usual success hue; sky
is the usual info hue.
Emerald
A cooler, more sophisticated green and the usual success hue. Pairs well with slate and gray.
| Sample | Step | CSS Token | Tailwind class | OKLCH | HEX |
|---|---|---|---|---|---|
| 50 | --color-emerald-50 | bg-emerald-50 | oklch(97.9% 0.021 166.113) | #ECFDF5 | |
| 100 | --color-emerald-100 | bg-emerald-100 | oklch(95% 0.052 163.051) | #D0FAE5 | |
| 200 | --color-emerald-200 | bg-emerald-200 | oklch(90.5% 0.093 164.15) | #A4F4CF | |
| 300 | --color-emerald-300 | bg-emerald-300 | oklch(84.5% 0.143 164.978) | #5EE9B5 | |
| 400 | --color-emerald-400 | bg-emerald-400 | oklch(76.5% 0.177 163.223) | #00D492 | |
| 500 | --color-emerald-500 | bg-emerald-500 | oklch(69.6% 0.17 162.48) | #00BC7D | |
| 600 | --color-emerald-600 | bg-emerald-600 | oklch(59.6% 0.145 163.225) | #009966 | |
| 700 | --color-emerald-700 | bg-emerald-700 | oklch(50.8% 0.118 165.612) | #007A55 | |
| 800 | --color-emerald-800 | bg-emerald-800 | oklch(43.2% 0.095 166.913) | #006045 | |
| 900 | --color-emerald-900 | bg-emerald-900 | oklch(37.8% 0.077 168.94) | #004F3B | |
| 950 | --color-emerald-950 | bg-emerald-950 | oklch(26.2% 0.051 172.552) | #002C22 |
Teal
The balance point between green and blue. Ideal for calm brands and health, finance, or wellness products.
| Sample | Step | CSS Token | Tailwind class | OKLCH | HEX |
|---|---|---|---|---|---|
| 50 | --color-teal-50 | bg-teal-50 | oklch(98.4% 0.014 180.72) | #F0FDFA | |
| 100 | --color-teal-100 | bg-teal-100 | oklch(95.3% 0.051 180.801) | #CBFBF1 | |
| 200 | --color-teal-200 | bg-teal-200 | oklch(91% 0.096 180.426) | #96F7E4 | |
| 300 | --color-teal-300 | bg-teal-300 | oklch(85.5% 0.138 181.071) | #46ECD5 | |
| 400 | --color-teal-400 | bg-teal-400 | oklch(77.7% 0.152 181.912) | #00D5BE | |
| 500 | --color-teal-500 | bg-teal-500 | oklch(70.4% 0.14 182.503) | #00BBA7 | |
| 600 | --color-teal-600 | bg-teal-600 | oklch(60% 0.118 184.704) | #009689 | |
| 700 | --color-teal-700 | bg-teal-700 | oklch(51.1% 0.096 186.391) | #00786F | |
| 800 | --color-teal-800 | bg-teal-800 | oklch(43.7% 0.078 188.216) | #005F5A | |
| 900 | --color-teal-900 | bg-teal-900 | oklch(38.6% 0.063 188.416) | #0B4F4A | |
| 950 | --color-teal-950 | bg-teal-950 | oklch(27.7% 0.046 192.524) | #022F2E |
Cyan
Vibrant light blue, almost electric. A tech accent without falling into corporate blue.
| Sample | Step | CSS Token | Tailwind class | OKLCH | HEX |
|---|---|---|---|---|---|
| 50 | --color-cyan-50 | bg-cyan-50 | oklch(98.4% 0.019 200.873) | #ECFEFF | |
| 100 | --color-cyan-100 | bg-cyan-100 | oklch(95.6% 0.045 203.388) | #CEFAFE | |
| 200 | --color-cyan-200 | bg-cyan-200 | oklch(91.7% 0.08 205.041) | #A2F4FD | |
| 300 | --color-cyan-300 | bg-cyan-300 | oklch(86.5% 0.127 207.078) | #53EAFD | |
| 400 | --color-cyan-400 | bg-cyan-400 | oklch(78.9% 0.154 211.53) | #00D3F2 | |
| 500 | --color-cyan-500 | bg-cyan-500 | oklch(71.5% 0.143 215.221) | #00B8DB | |
| 600 | --color-cyan-600 | bg-cyan-600 | oklch(60.9% 0.126 221.723) | #0092B8 | |
| 700 | --color-cyan-700 | bg-cyan-700 | oklch(52% 0.105 223.128) | #007595 | |
| 800 | --color-cyan-800 | bg-cyan-800 | oklch(45% 0.085 224.283) | #005F78 | |
| 900 | --color-cyan-900 | bg-cyan-900 | oklch(39.8% 0.07 227.392) | #104E64 | |
| 950 | --color-cyan-950 | bg-cyan-950 | oklch(30.2% 0.056 229.695) | #053345 |
Sky
Light, airy blue and the usual info hue. Friendlier than blue while keeping the technical character.
| Sample | Step | CSS Token | Tailwind class | OKLCH | HEX |
|---|---|---|---|---|---|
| 50 | --color-sky-50 | bg-sky-50 | oklch(97.7% 0.013 236.62) | #F0F9FF | |
| 100 | --color-sky-100 | bg-sky-100 | oklch(95.1% 0.026 236.824) | #DFF2FE | |
| 200 | --color-sky-200 | bg-sky-200 | oklch(90.1% 0.058 230.902) | #B8E6FE | |
| 300 | --color-sky-300 | bg-sky-300 | oklch(82.8% 0.111 230.318) | #74D4FF | |
| 400 | --color-sky-400 | bg-sky-400 | oklch(74.6% 0.16 232.661) | #00BCFF | |
| 500 | --color-sky-500 | bg-sky-500 | oklch(68.5% 0.169 237.323) | #00A6F4 | |
| 600 | --color-sky-600 | bg-sky-600 | oklch(58.8% 0.158 241.966) | #0084D1 | |
| 700 | --color-sky-700 | bg-sky-700 | oklch(50% 0.134 242.749) | #0069A8 | |
| 800 | --color-sky-800 | bg-sky-800 | oklch(44.3% 0.11 240.79) | #00598A | |
| 900 | --color-sky-900 | bg-sky-900 | oklch(39.1% 0.09 240.876) | #024A70 | |
| 950 | --color-sky-950 | bg-sky-950 | oklch(29.3% 0.066 243.157) | #052F4A |
Blue
The classic digital product blue. The safe, versatile default for links and primary actions.
| Sample | Step | CSS Token | Tailwind class | OKLCH | HEX |
|---|---|---|---|---|---|
| 50 | --color-blue-50 | bg-blue-50 | oklch(97% 0.014 254.604) | #EFF6FF | |
| 100 | --color-blue-100 | bg-blue-100 | oklch(93.2% 0.032 255.585) | #DBEAFE | |
| 200 | --color-blue-200 | bg-blue-200 | oklch(88.2% 0.059 254.128) | #BEDBFF | |
| 300 | --color-blue-300 | bg-blue-300 | oklch(80.9% 0.105 251.813) | #8EC5FF | |
| 400 | --color-blue-400 | bg-blue-400 | oklch(70.7% 0.165 254.624) | #51A2FF | |
| 500 | --color-blue-500 | bg-blue-500 | oklch(62.3% 0.214 259.815) | #2B7FFF | |
| 600 | --color-blue-600 | bg-blue-600 | oklch(54.6% 0.245 262.881) | #155DFC | |
| 700 | --color-blue-700 | bg-blue-700 | oklch(48.8% 0.243 264.376) | #1447E6 | |
| 800 | --color-blue-800 | bg-blue-800 | oklch(42.4% 0.199 265.638) | #193CB8 | |
| 900 | --color-blue-900 | bg-blue-900 | oklch(37.9% 0.146 265.522) | #1C398E | |
| 950 | --color-blue-950 | bg-blue-950 | oklch(28.2% 0.091 267.935) | #162456 |
Indigo
Deep blue with a violet pull. More editorial and premium than blue; suits nocturnal products and technical brands.
| Sample | Step | CSS Token | Tailwind class | OKLCH | HEX |
|---|---|---|---|---|---|
| 50 | --color-indigo-50 | bg-indigo-50 | oklch(96.2% 0.018 272.314) | #EEF2FF | |
| 100 | --color-indigo-100 | bg-indigo-100 | oklch(93% 0.034 272.788) | #E0E7FF | |
| 200 | --color-indigo-200 | bg-indigo-200 | oklch(87% 0.065 274.039) | #C6D2FF | |
| 300 | --color-indigo-300 | bg-indigo-300 | oklch(78.5% 0.115 274.713) | #A3B3FF | |
| 400 | --color-indigo-400 | bg-indigo-400 | oklch(67.3% 0.182 276.935) | #7C86FF | |
| 500 | --color-indigo-500 | bg-indigo-500 | oklch(58.5% 0.233 277.117) | #615FFF | |
| 600 | --color-indigo-600 | bg-indigo-600 | oklch(51.1% 0.262 276.966) | #4F39F6 | |
| 700 | --color-indigo-700 | bg-indigo-700 | oklch(45.7% 0.24 277.023) | #432DD7 | |
| 800 | --color-indigo-800 | bg-indigo-800 | oklch(39.8% 0.195 277.366) | #372AAC | |
| 900 | --color-indigo-900 | bg-indigo-900 | oklch(35.9% 0.144 278.697) | #312C85 | |
| 950 | --color-indigo-950 | bg-indigo-950 | oklch(25.7% 0.09 281.288) | #1E1A4D |
Violet
Balanced purple. Works as an accent without dominating the palette.
| Sample | Step | CSS Token | Tailwind class | OKLCH | HEX |
|---|---|---|---|---|---|
| 50 | --color-violet-50 | bg-violet-50 | oklch(96.9% 0.016 293.756) | #F5F3FF | |
| 100 | --color-violet-100 | bg-violet-100 | oklch(94.3% 0.029 294.588) | #EDE9FE | |
| 200 | --color-violet-200 | bg-violet-200 | oklch(89.4% 0.057 293.283) | #DDD6FF | |
| 300 | --color-violet-300 | bg-violet-300 | oklch(81.1% 0.111 293.571) | #C4B4FF | |
| 400 | --color-violet-400 | bg-violet-400 | oklch(70.2% 0.183 293.541) | #A684FF | |
| 500 | --color-violet-500 | bg-violet-500 | oklch(60.6% 0.25 292.717) | #8E51FF | |
| 600 | --color-violet-600 | bg-violet-600 | oklch(54.1% 0.281 293.009) | #7F22FE | |
| 700 | --color-violet-700 | bg-violet-700 | oklch(49.1% 0.27 292.581) | #7008E7 | |
| 800 | --color-violet-800 | bg-violet-800 | oklch(43.2% 0.232 292.759) | #5D0EC0 | |
| 900 | --color-violet-900 | bg-violet-900 | oklch(38% 0.189 293.745) | #4D179A | |
| 950 | --color-violet-950 | bg-violet-950 | oklch(28.3% 0.141 291.089) | #2F0D68 |
Purple
More saturated than violet, close to magenta at stop 500. Use for creativity, beta features, and differentiation.
| Sample | Step | CSS Token | Tailwind class | OKLCH | HEX |
|---|---|---|---|---|---|
| 50 | --color-purple-50 | bg-purple-50 | oklch(97.7% 0.014 308.299) | #FAF5FF | |
| 100 | --color-purple-100 | bg-purple-100 | oklch(94.6% 0.033 307.174) | #F3E8FF | |
| 200 | --color-purple-200 | bg-purple-200 | oklch(90.2% 0.063 306.703) | #E9D4FF | |
| 300 | --color-purple-300 | bg-purple-300 | oklch(82.7% 0.119 306.383) | #DAB2FF | |
| 400 | --color-purple-400 | bg-purple-400 | oklch(71.4% 0.203 305.504) | #C27AFF | |
| 500 | --color-purple-500 | bg-purple-500 | oklch(62.7% 0.265 303.9) | #AD46FF | |
| 600 | --color-purple-600 | bg-purple-600 | oklch(55.8% 0.288 302.321) | #9810FA | |
| 700 | --color-purple-700 | bg-purple-700 | oklch(49.6% 0.265 301.924) | #8200DB | |
| 800 | --color-purple-800 | bg-purple-800 | oklch(43.8% 0.218 303.724) | #6E11B0 | |
| 900 | --color-purple-900 | bg-purple-900 | oklch(38.1% 0.176 304.987) | #59168B | |
| 950 | --color-purple-950 | bg-purple-950 | oklch(29.1% 0.149 302.717) | #3C0366 |
Accents
Magentas, pinks, and red-pinks for products that want more
personality. rose pairs particularly well with stone and
taupe.
Fuchsia
Vibrant magenta, almost neon. A discovery and novelty color; hard to combine with conservative palettes.
| Sample | Step | CSS Token | Tailwind class | OKLCH | HEX |
|---|---|---|---|---|---|
| 50 | --color-fuchsia-50 | bg-fuchsia-50 | oklch(97.7% 0.017 320.058) | #FDF4FF | |
| 100 | --color-fuchsia-100 | bg-fuchsia-100 | oklch(95.2% 0.037 318.852) | #FAE8FF | |
| 200 | --color-fuchsia-200 | bg-fuchsia-200 | oklch(90.3% 0.076 319.62) | #F6CFFF | |
| 300 | --color-fuchsia-300 | bg-fuchsia-300 | oklch(83.3% 0.145 321.434) | #F4A8FF | |
| 400 | --color-fuchsia-400 | bg-fuchsia-400 | oklch(74% 0.238 322.16) | #ED6AFF | |
| 500 | --color-fuchsia-500 | bg-fuchsia-500 | oklch(66.7% 0.295 322.15) | #E12AFB | |
| 600 | --color-fuchsia-600 | bg-fuchsia-600 | oklch(59.1% 0.293 322.896) | #C800DE | |
| 700 | --color-fuchsia-700 | bg-fuchsia-700 | oklch(51.8% 0.253 323.949) | #A800B7 | |
| 800 | --color-fuchsia-800 | bg-fuchsia-800 | oklch(45.2% 0.211 324.591) | #8A0194 | |
| 900 | --color-fuchsia-900 | bg-fuchsia-900 | oklch(40.1% 0.17 325.612) | #721378 | |
| 950 | --color-fuchsia-950 | bg-fuchsia-950 | oklch(29.3% 0.136 325.661) | #4B004F |
Pink
Warm, social pink. Suits interfaces that want warmth and closeness, like community and wellbeing products.
| Sample | Step | CSS Token | Tailwind class | OKLCH | HEX |
|---|---|---|---|---|---|
| 50 | --color-pink-50 | bg-pink-50 | oklch(97.1% 0.014 343.198) | #FDF2F8 | |
| 100 | --color-pink-100 | bg-pink-100 | oklch(94.8% 0.028 342.258) | #FCE7F3 | |
| 200 | --color-pink-200 | bg-pink-200 | oklch(89.9% 0.061 343.231) | #FCCEE8 | |
| 300 | --color-pink-300 | bg-pink-300 | oklch(82.3% 0.12 346.018) | #FDA5D5 | |
| 400 | --color-pink-400 | bg-pink-400 | oklch(71.8% 0.202 349.761) | #FB64B6 | |
| 500 | --color-pink-500 | bg-pink-500 | oklch(65.6% 0.241 354.308) | #F6339A | |
| 600 | --color-pink-600 | bg-pink-600 | oklch(59.2% 0.249 0.584) | #E60076 | |
| 700 | --color-pink-700 | bg-pink-700 | oklch(52.5% 0.223 3.958) | #C6005C | |
| 800 | --color-pink-800 | bg-pink-800 | oklch(45.9% 0.187 3.815) | #A3004C | |
| 900 | --color-pink-900 | bg-pink-900 | oklch(40.8% 0.153 2.432) | #861043 | |
| 950 | --color-pink-950 | bg-pink-950 | oklch(28.4% 0.109 3.907) | #510424 |
Rose
Elegant red-leaning pink. Combines particularly well with stone and taupe.
| Sample | Step | CSS Token | Tailwind class | OKLCH | HEX |
|---|---|---|---|---|---|
| 50 | --color-rose-50 | bg-rose-50 | oklch(96.9% 0.015 12.422) | #FFF1F2 | |
| 100 | --color-rose-100 | bg-rose-100 | oklch(94.1% 0.03 12.58) | #FFE4E6 | |
| 200 | --color-rose-200 | bg-rose-200 | oklch(89.2% 0.058 10.001) | #FFCCD3 | |
| 300 | --color-rose-300 | bg-rose-300 | oklch(81% 0.117 11.638) | #FFA1AD | |
| 400 | --color-rose-400 | bg-rose-400 | oklch(71.2% 0.194 13.428) | #FF637E | |
| 500 | --color-rose-500 | bg-rose-500 | oklch(64.5% 0.246 16.439) | #FF2056 | |
| 600 | --color-rose-600 | bg-rose-600 | oklch(58.6% 0.253 17.585) | #EC003F | |
| 700 | --color-rose-700 | bg-rose-700 | oklch(51.4% 0.222 16.935) | #C70036 | |
| 800 | --color-rose-800 | bg-rose-800 | oklch(45.5% 0.188 13.697) | #A50036 | |
| 900 | --color-rose-900 | bg-rose-900 | oklch(41% 0.159 10.272) | #8B0836 | |
| 950 | --color-rose-950 | bg-rose-950 | oklch(27.1% 0.105 12.094) | #4D0218 |
Good practices
- Do not use stops 50 to 200 for text over white: the contrast is insufficient. Use them as surfaces.
- Stop 400 is tricky: good as a visual divider between primary and secondary, dangerous for critical text (the ratio varies a lot between ramps).
- Dark mode mirrors, it does not invert: 950 becomes the background and 50 the foreground. Do not swap the middle stops in logic; pick different primitives in the theme instead.
- Five ramps are Gremorie specific (
mauve,mist,olive,taupe,clay). If you export the system elsewhere, document that these are not stock Tailwind.