Rotate hue and step lightness in the perceptually uniform OKLCH space — the same harmony rules, but the palettes simply look better than HSL. Every derived swatch can be tuned independently, with live WCAG contrast.
:root {
--harmony-1: #2b9d8f;
--harmony-2: #957abc;
--harmony-3: #b47b44;
}[
{
"hex": "#2b9d8f",
"oklch": "oklch(63.0% 0.101 183.0)",
"role": "base"
},
{
"hex": "#957abc",
"oklch": "oklch(63.0% 0.101 303.0)",
"role": "harmony-2"
},
{
"hex": "#b47b44",
"oklch": "oklch(63.0% 0.101 63.0)",
"role": "harmony-3"
}
]Perceptually uniform harmonies with live contrast and gamut mapping at every step.
Type or randomize a HEX, then pick complementary, split-complementary, triadic, tetradic, analogous or monochromatic.
Every derived swatch has L/C/H sliders in the OKLCH space; out-of-gamut values map to the nearest displayable color.
Watch vs-white/black contrast live, copy CSS variables or JSON, or send the whole set to the palette board.
Three common questions about OKLCH harmonies.
Keep going from here and put the colors to work.
Drag the wheel to pick a base, get six harmony schemes live, open in the board or export PNG.
Tune L / C / H in the perceptually uniform OKLCH space with live preview and oklch() / HEX / RGB output.
Feed one brand color, get primary / secondary / success / warning / danger — exported as Tailwind config and CSS variables.
Spacebar to randomize, lock, drag to reorder, share by URL - everything a palette board should do.