APCA and the end of the contrast ratio

WCAG 3 replaces the 4.5:1 ratio with a model that knows dark mode exists. Here is what changes and what to do about it now.

↑ Click any of these to repaint the entire site with it.

The WCAG 2.x contrast ratio has one property that makes it easy to work with and one that makes it wrong: it treats black-on-white and white-on-black as identical. Both compute to 21:1. Anyone who has set body copy in both knows they do not read the same.

APCA — Accessible Perceptual Contrast Algorithm — is the model intended to replace it in WCAG 3. It is worth understanding now, because it explains a category of "this passes but looks bad" that the ratio cannot.

What is different#

It is signed. APCA returns a lightness contrast value, Lc, from about -108 to +106. Positive means dark text on a light background; negative means light text on a dark background. The sign is not decoration — the model computes the two cases with different exponents, because they genuinely behave differently.

It maps to size and weight. There is no single pass mark. Lc 60 is adequate for 16px at weight 400 and inadequate for 14px at weight 300. The output is a lookup into a table, not a boolean.

It models the actual perceptual effect. Light text on dark backgrounds appears to bloom — the glyph strokes spread visually — which makes thin light type on dark harder to read than the same ratio the other way round. APCA accounts for this. The ratio cannot.

The rough guide#

LcWhat it supports
90+Any text, any weight, including thin at small sizes
75Body text from 16px
60Body text from 18px, or 16px at medium weight
45Large or bold text only
30Headlines and non-essential text
15Disabled and decorative only
below 15Effectively invisible

Lc 60 is the practical floor for body copy. Lc 75 is a comfortable target. Both are roughly, but not exactly, where the 4.5:1 line sits — which is the interesting part.

Where they disagree#

The two models diverge most in two places.

Dark themes with mid-lightness text. A muted gray on a dark background can clear 4.5:1 while APCA rates it below 60. If your dark theme's secondary text technically passes and still feels hard to read, this is why.

Light themes with saturated mid-tones. A mid-blue link on white frequently fails 4.5:1 by a small margin while APCA rates it comfortably readable. Under the current standard you have to darken it anyway.

When the two disagree, the disagreement itself is the signal. It means you are in a range where the WCAG formula is known to misbehave, and you should look at the thing with your eyes rather than trusting either number.

What to do now#

Ship against WCAG 2.2. It is the standard that gets audited, that appears in procurement requirements, and that in several jurisdictions has legal force. This is not the place to be an early adopter.

Check APCA alongside it. Use it to catch the pairs that pass the ratio and read badly — mostly in dark mode, mostly secondary text. Those are real defects that the ratio will never flag.

Do not use it to justify failures. "APCA says it is fine" is not a defense in an audit. If a pair fails 4.5:1, fix it, even when you are confident it is legible.

The part nobody mentions#

APCA is more accurate and it is also harder to design with. A single number you must exceed is easy to build a process around. A number that maps into a table of sizes and weights requires you to know the typography at the moment you pick the color.

That is not a flaw in the model — it is an accurate reflection of the fact that contrast and typography were never separable in the first place. It is just less convenient, and less convenient standards take longer to adopt.

Which is roughly where WCAG 3 has been for several years.