WCAG Contrast Ratios Explained: Why 4.5:1 Isn't Arbitrary
A color combination that looks perfectly readable on your screen can still come back at 4.4:1 and fail, and it's tempting to conclude the checker is being pedantic about a rounding error. It isn't guessing. Every accessibility checker on the web reduces a color pair to a single number and compares it to 4.5. Here's what that number is actually measuring, and why color blindness isn't part of the test.
What the formula actually computes
WCAG's contrast ratio isn't a straightforward "how different do these colors look" measurement. It's built from relative luminance, a calculation of how much light a color would reflect if it were a shade of gray of equivalent brightness. Each sRGB channel gets linearized (undoing the gamma correction monitors apply) and weighted. Green contributes far more to perceived brightness (a weight of about 0.7152) than red (about 0.2126) or blue (about 0.0722), matching how the human eye's cone cells respond to each. The two luminance values are then plugged into (L1 + 0.05) / (L2 + 0.05), with the lighter color as L1, producing a ratio from 1:1 (identical) to 21:1 (pure black on pure white).
The gap between "looks fine" and "fails at 4.4:1" is usually saturation, not brightness. A vivid, saturated color next to white can read as plenty legible at a glance, especially on a bright, color-calibrated monitor, while its actual luminance sits closer to the background's than the eye assumes. A near-miss result isn't the checker rounding harshly; it usually means the two colors are genuinely closer in luminance than they appear, and that gap widens further for people with lower-contrast vision or a duller screen, which is exactly the population the threshold was set for.
Why 4.5, not 3 or 6
The WCAG 2.0 working group (finalized 2008) set thresholds by testing where text became reliably readable for people with mild to moderate low vision. Roughly equivalent to 20/40 vision, the most common category of low-vision impairment. 4.5:1 is the level at which that group could read normal-sized text; 3:1 is treated as sufficient for large text (18pt+, or 14pt bold+) because bigger strokes are legible at lower contrast. AAA, the stricter optional tier, doubles the margin to 7:1 and 4.5:1 for the same reason a font size or lighting change gives you more headroom.
What it isn't checking
Contrast ratio is entirely about luminance. The lightness/darkness difference. Not hue. Two colors can have wildly different hues (say, red text on green) and still pass 4.5:1 if their luminance happens to be far apart, and that combination is one of the classic failure cases for red-green color blindness, which affects roughly 8% of men and 0.5% of women of Northern European descent. A contrast checker will wave that pairing through even though a meaningful share of readers may struggle to distinguish the two colors at all. Passing WCAG contrast is necessary for legibility; it's not a substitute for checking a palette against color-blindness simulators.
What to actually do about it
If your goal is passing an audit or clearing a legal compliance bar, aim for WCAG 2.1 AA specifically, 4.5:1 for normal text, 3:1 for large text, since that's the threshold the ADA's Title III enforcement in the US, Section 508 for federal sites, and the EU's European Accessibility Act (enforceable since June 2025) all point to; it's also the single most commonly cited failure in accessibility audits, because it's the easiest criterion to test automatically at scale. If your goal is a genuinely more accessible palette rather than just a passing number, don't stop at the ratio: run the same colors through a color-blindness simulator too, since a pair can clear 4.5:1 on luminance alone while still being hard to tell apart by hue. And if you just want to stop guessing whether a specific pair passes, check it directly instead of eyeballing it.
Check your own color pair against the AA and AAA thresholds with the color contrast checker.