The gap contrast checking leaves
A contrast checker asks one question: is this foreground separable from this background? It is a good question and it misses an entire category of failure, because it never compares two foreground colours to each other.
Take the status colours most frameworks ship. Bootstrap's danger red and success green sit at a perceptual distance of about 74 for typical vision — unmistakably different. Simulate deuteranopia and that distance drops to roughly 4. Tailwind's red-500 and green-500 fall from 76 to about 8. For the ~5% of men with deuteranomaly, a red error state and a green success state are close to the same colour, and every contrast audit will have passed them.
What the simulation is doing
The model is Machado, Oliveira and Fernandes (2009), the same one Chrome DevTools uses. It is physiologically based: it models a shift in cone response rather than simply desaturating or rotating hues.
One implementation detail matters more than it sounds. The matrices operate on linear RGB, not on the sRGB values in your hex codes. Applying them directly to sRGB is a common shortcut and it produces visibly wrong colours, so this tool linearises, transforms, then re-encodes.
Dichromacy — protanopia, deuteranopia, tritanopia — is modelled at full severity. The anomalous forms are the same transform at partial strength, which is an approximation of a condition that genuinely varies from person to person.
What to do about a collapse
Separate by lightness, not just hue.Lightness perception is unaffected by every red-green deficiency. Two colours a clear step apart in lightness stay distinguishable no matter what the cones are doing.
Use the blue-orange axis.It survives red-green deficiency intact — in measurement it often separates further under deuteranopia than under typical vision.
Add a second cue.This is the one that actually satisfies WCAG 1.4.1, which asks that colour never be the sole carrier of meaning. An icon on the error state, a direct label on the chart series, a dashed versus solid line. Then the palette stops being load-bearing.
Questions people ask
Straight answers. Each one links directly: copy the address after opening it.
How common is colour blindness?
Around 1 in 12 men and 1 in 200 women of Northern European ancestry have some form. Deuteranomaly — green cones shifted toward red — accounts for the majority at roughly 5% of men. Prevalence varies by population.
Why does my palette pass contrast but still fail here?
Contrast checking compares each colour against its background. It never compares two foreground colours against each other. A red and a green can both clear 4.5:1 on white and still be indistinguishable to a deuteranope, because the thing that separates them is the exact axis that person cannot see.
Which colour pairs are safe?
Blue against orange survives every red-green deficiency and is the most reliable two-colour axis. Anything separated mainly by lightness also survives, because lightness perception is unaffected. What fails is a pair that differs only along the red-green axis at similar lightness.
Is simulation enough to call a design accessible?
No. Simulation shows you what is likely lost, not what a specific person experiences, and the models are approximations. WCAG 1.4.1 asks that colour never be the only way information is conveyed — so the durable fix is a second cue: a label, an icon, a pattern or a position. Treat this tool as a way to find problems, not to certify their absence.