The ramp
12 steps
Click a step to copy it. A gold underline marks a step whose chroma had to come down to fit sRGB — the colour you get is on the gamut boundary at the lightness and hue you asked for, rather than clipped channel by channel.
One bar per gap, each a real CIEDE2000 difference between two colours that are in the ramp. Flat bars mean the eye sees the same size of jump all the way along; a tall one is a visible seam. This was already right before the rebuild and is carried across unchanged — checked against all 34 published pairs from Sharma, Wu & Dalal (2005), where the worst disagreement is 0.000042.
The mean says how far apart the steps are; the evenness says whether they are equally far apart, which is usually the question. They move independently, and the Spaces tab is where that becomes obvious.
Where the ramp goes in hue and chroma
OKLCH · angle is hue, radius is chroma
Drawn on a circle, because hue is an angle. The panel this replaces ran hue 0 to 360 along a straight axis, so a ramp crossing the wrap drew a line across the whole plot — an artefact of the axis rather than anything about the colours. The hero also called it a chromaticity path, which means CIE xy or u′v′ and is a different thing; the panel’s own label was right all along.
Which route and easing give the evenest ramp
Every row is built at your two ends and your step count and then measured, not predicted from a model of the space. Thirty rows: six routes by five easings.
The desaturated middle, drawn
The usual argument for a polar space, shown rather than asserted: the same two ends by three routes, with the least chromatic step of each measured in OKLCH so the three are on one scale. That step is where the “muddy middle” lives when it lives anywhere.
The contrast figure passed text its own algorithm fails
measured on the shipped page
APCA is a published algorithm with published constants. The version being replaced kept its four exponents and replaced the rest: the scale was 161.8 where APCA uses 1.14 — that is φ × 100 — the soft clamp that lifts near-black luminances was missing, and so was the clip that reports very low contrast as zero. Both columns below come from the same code this page runs, so the comparison cannot drift from it:
Look at the two greys people really use for secondary text. Both were reported about a third higher than the algorithm gives. Across all 2,704 grey-on-grey pairs at a step of five, 520 cleared the tool’s Lc 60 threshold that real APCA does not — and a contrast checker that fails open is worse than none, because it is consulted and believed. Note the first two rows as well: exactly plus and minus the same number. APCA gives the two polarities different exponents on purpose, so a symmetric answer cannot be APCA whatever its scale factor is.
Your ramp, checked both ways
WCAG 2.2 was already right Unchanged
The ratio, the relative-luminance definition and the sRGB transfer function all check out: black on white gives exactly 21.00, #767676 on white gives 4.54 — the grey the 4.5:1 threshold is usually demonstrated with — and #595959 gives 7.00. It is shown beside the APCA figure rather than instead of it.
Where each number comes from
What was corrected, and what it printed
Four things the page said about its own arithmetic that were not true. None of them was a feature removed — the simulation, the ramp table and the plot all stayed. Each carries the reading it used to give, because a claim that a readout was wrong is worth nothing without the reading.
What was already true Carried across
Most of this engine checked out before anything was touched, and it was checked by measurement rather than by reading: the shipped functions were lifted out of their closure and run against published data. CIEDE2000 against all 34 pairs from Sharma, Wu & Dalal (2005), worst disagreement 0.000042; OKLab against Ottosson’s own reference values; the sRGB round trip exact; WCAG 2 exact; and the route comparison genuinely building and measuring every row. Two things were wrong, and both were claims about what the arithmetic was rather than the arithmetic itself.
What leaves this page
Two ways to write the same ramp, and they are not equivalent. The first asks the browser to interpolate; the second hands it the steps this page measured. Where the browser supports the space the first is a real gradient rather than a staircase; where it does not, it falls back to sRGB and stops being the ramp you chose.
The reading that goes with it
Saved beside the ramp if you want it, so a palette handed to somebody else carries what was measured about it — and what was not:
The contrast block names its algorithm and its version, because the figure means nothing without them — and because the last time this page wrote an Lc it was not the one APCA defines.
Sources
Six of these were already sound. One was rebuilt to match the citation it already carried, and one citation was withdrawn because the code never implemented it.
The seventh is the one that mattered. Naming Brettel, Viénot & Mollon beside a Machado simulation does not make the simulation wrong — it makes the page useless as evidence, because a reader checking the method against the citation finds they do not match and has no way to tell which is the truth. The fifth is the opposite case: the right citation, and code that did not implement it.
The arithmetic
Written once and used by both the drawing and the measuring, so the two cannot disagree.