Why OKLCH and not HSL
An HSL ramp built on even lightness steps does not look even. HSL lightness is a mathematical transform of RGB with no model of human vision in it, so 50% means something very different for yellow than for blue.
OKLCH lightness is perceptually uniform. Equal steps look equal, which is the entire point of a ramp.
Roles, not values
Components should reference --brand-text, never --brand-600. When the brand colour changes — and it will — you regenerate the ramp and the roles keep pointing at the right steps. Reference raw values and every component has to be revisited.
It is also what makes theming possible at all. A role can point at a different step in each theme. A raw value cannot.
Questions people ask
Straight answers. Each one links directly: copy the address after opening it.
Why is my brand colour not the text colour?
A vivid brand colour is built to be seen at size, on a logo. Set as 16px body copy it usually misses 4.5:1. The step two or three darker still reads as your brand and actually passes, which is why roles here are assigned by measurement rather than by eye.
Why eleven steps?
It matches the convention most design systems and Tailwind already use, so the output drops into an existing setup without renaming. The extra 950 step exists because dark themes need a surface darker than 900.
Can I invert the light ramp for dark mode?
No, and this is the most common mistake. The WCAG 2 formula adds a fixed constant that dominates at the dark end, so inverted pairs can post passing ratios while reading as dim. Saturated colours also vibrate against dark backgrounds. The dark roles here are assigned separately from the same ramp.