APCA Contrast Checker
APCA L_c contrast — the WCAG 3 draft contrast algorithm.
Overview
The APCA Contrast Checker measures the lightness contrast between a text colour and its background using the Accessible Perceptual Contrast Algorithm — the perceptual contrast model proposed for WCAG 3. Enter any two hex, rgb or hsl values and the tool returns an L_c score along with the minimum font size and weight that pair can legally carry.
It is built for designers and front-end engineers who already audit with WCAG 2.1 contrast ratios but want a second opinion that better matches how the human eye actually reads small body text on screens. The L_c value is particularly useful for dark-mode reviews where the legacy ratio formula tends to over-promise readability.
How it works
APCA replaces the linear WCAG 2 ratio with a polarity-sensitive lightness-difference calculation. Each colour is converted to sRGB, gamma-corrected, weighted by channel coefficients (0.2126R + 0.7152G + 0.0722B), then raised to a power that approximates Stevens' law of perceived brightness. The signed difference is scaled into the L_c range of roughly -108 to +106, where negative values indicate light text on dark backgrounds and positive values dark-on-light.
A separate font lookup table maps L_c thresholds to the smallest body text size and weight allowed (for example L_c 75 unlocks 14px / 400, while 90 is needed for 12px / 400). The algorithm intentionally penalises thin fonts and tiny sizes more aggressively than WCAG 2.
Examples
#1a1a1a on #ffffff → L_c 104.3 (body text OK to 12px / 400)
#777777 on #ffffff → L_c 58.2 (large headings only)
#ffffff on #2563eb → L_c -75.0 (16px / 600 minimum)
#ff0000 on #00ff00 → L_c 18.4 (fails for any readable size)
FAQ
Is APCA officially in WCAG 3?
Not yet. It is the leading candidate but the WCAG 3 specification is still in working-draft status, so legal compliance audits continue to use the WCAG 2.1 ratio.
Why does APCA score colours differently than WCAG 2?
APCA models the non-linear response of the eye and treats light-on-dark differently from dark-on-light, while the WCAG 2 formula is symmetric. Mid-grey text on white can pass WCAG 2 AA but fail APCA — and vice versa.
What L_c value should body text hit?
A common rule of thumb is L_c 75 for body copy and 60 for large headings, but the precise threshold depends on the chosen font size and weight.
Does it account for font weight?
Yes. Heavier weights at the same size require a lower L_c, which is why the tool reports a minimum weight alongside the score.