By Tim King · Updated
APCA Contrast Checker
APCA Color Contrast Lc Score with WCAG 3 Draft Thresholds
OneTask is free, with no sign-up, and built by one person.
If this tool saved you time, a coffee helps keep new ones coming.
How the APCA Contrast Checker works
This APCA contrast checker scores text against its background the way the WCAG 3 draft does. Pick a text colour and a background, enter the font size and weight you plan to use, and the readout gives the APCA Lc score, which way round the contrast runs, whether that combination passes for your text, and the highest of the draft WCAG 3 levels it clears. The WCAG 2 ratio is shown next to it so you can see where the two methods disagree. The table lists every APCA level with what it is meant for, and the minimum font size the score allows at each weight from 300 to 700.
APCA contrast checker: reading the Lc score
APCA, the Accessible Perceptual Contrast Algorithm, is the contrast method in the working draft of WCAG 3. It replaces the WCAG 2 luminance ratio with a lightness contrast value, Lc, on a scale from 0 to about 106, where the sign tells you the polarity: positive for dark text on a light background, negative for light text on dark. The number is designed to track how readable text actually is, so it depends on which colour is the text and which the background, and its thresholds are tied to font size and weight rather than a single pass mark.
Why it differs from WCAG 2. The 4.5:1 ratio treats colours symmetrically and uses a simple luminance model, so it passes some mid-grey and orange combinations that are hard to read and fails some dark-mode pairings that are fine. APCA models the non-linearity of perceived lightness, the flare of a bright background and the difference between light-on-dark and dark-on-light, which is why a swap of the two colours produces a different Lc but the same WCAG ratio. Body-text grey #767676 on white is the classic case: it just passes WCAG AA at 4.54:1 but scores about Lc 72 in APCA, short of the 75 wanted for body text at 16px, and #888888 on white drops to Lc 63.
The levels. Lc 90 is the preferred body-text level and works at any weight including thin faces. Lc 75 is the minimum for body text of 16px or larger at normal weight. Lc 60 is the minimum for content text that is larger or bolder, around 24px regular or 18px bold. Lc 45 is for headlines and large text of 36px and above. Lc 30 is the floor for non-text elements such as icons, input borders and placeholder text, and Lc 15 is the lowest usable value, for decorative elements and disabled controls only. Anything below 15 is treated as invisible.
Font size and weight. APCA's real output is a lookup: for a given Lc, what is the smallest text that stays readable at each weight? The table gives that minimum for weights 300 to 700, derived from the draft lookup table, and the readout compares it with the size and weight you entered. Heavier weights can go smaller at the same contrast; thin weights need both higher contrast and larger sizes, which is why light 300-weight body text so often looks washed out.
Status of the standard. WCAG 3 is a working draft and APCA is not yet a normative requirement; WCAG 2.x remains the standard cited in law and procurement. Use this checker to design text that is comfortably readable, and keep the WCAG 2 checker for compliance. Where the two disagree, the safest choice is to satisfy both, which usually means a slightly darker text colour than WCAG 2 alone would require.
APCA contrast of greys on white
Grey text on #ffffff at 16 px and weight 400.
APCA Lc and WCAG 2 ratio for grey text on white
| Text colour | APCA | Highest level | WCAG 2 |
|---|---|---|---|
| #000000 | Lc 106.0 | Lc 90 | 21.00:1 |
| #111111 | Lc 105.4 | Lc 90 | 18.88:1 |
| #222222 | Lc 102.9 | Lc 90 | 15.91:1 |
| #333333 | Lc 98.7 | Lc 90 | 12.63:1 |
| #444444 | Lc 92.6 | Lc 90 | 9.74:1 |
| #555555 | Lc 85.9 | Lc 75 | 7.46:1 |
| #5b6472 | Lc 79.9 | Lc 75 | 5.98:1 |
| #666666 | Lc 78.8 | Lc 75 | 5.74:1 |
| #6b6b6b | Lc 76.5 | Lc 75 | 5.33:1 |
| #707070 | Lc 74.3 | Lc 60 | 4.95:1 |
| #767676 | Lc 71.6 | Lc 60 | 4.54:1 |
| #777777 | Lc 71.1 | Lc 60 | 4.48:1 |
| #808080 | Lc 66.9 | Lc 60 | 3.95:1 |
| #888888 | Lc 63.1 | Lc 60 | 3.54:1 |
| #949494 | Lc 57.1 | Lc 45 | 3.03:1 |
| #999999 | Lc 54.6 | Lc 45 | 2.85:1 |
| #a0a0a0 | Lc 51.0 | Lc 45 | 2.61:1 |
| #aaaaaa | Lc 45.8 | Lc 45 | 2.32:1 |
| #bbbbbb | Lc 36.7 | Lc 30 | 1.92:1 |
| #cccccc | Lc 27.3 | Lc 15 | 1.61:1 |
| #dddddd | Lc 17.6 | Lc 15 | 1.36:1 |
APCA formula and worked examples
The formula: the APCA formula converts each colour to an estimated screen luminance Y, then takes Lc = (Ybg^0.56 − Ytext^0.57) × 1.14 × 100 for dark text on a light background, or (Ybg^0.65 − Ytext^0.62) × 1.14 × 100 for light text on dark, with a small offset and a soft clamp near black. The different exponents are why the score is not symmetrical.
First example. black text on white scores Lc 106.0, comfortably above the Lc 90 preferred for body text. Swap them and white on black scores Lc -107.9 — negative because the polarity is reversed, and slightly larger in size.
Second example. mid-grey #767676 on white scores Lc 71.6. Its WCAG 2 ratio is 4.54:1, which just passes AA, but at Lc 72 APCA only accepts it for larger or bolder text — a clear example of the two methods disagreeing.
How many Lc points do you need? Lc 90 is preferred for body text, Lc 75 is the minimum for body text, Lc 60 for content text that is not body copy, Lc 45 for large headings, Lc 30 for placeholder and disabled text and Lc 15 for non-text dividers.
FAQ
What is a good APCA score?
Lc 75 or above for body text, and 90 if you can get it. Headlines can go down to Lc 45, and icons and borders to Lc 30. Black on white scores about Lc 106, dark grey #333 on white about Lc 99, and mid-grey #767676 on white about Lc 72, which is why that grey reads as faint for small text even though it passes WCAG 2 AA.
What does a negative Lc value mean?
Light text on a dark background. APCA is polarity-aware, so white on black gives about Lc -108 and black on white about Lc 106. Compare the absolute value against the thresholds; the sign only records which way round the colours are.
Is APCA part of WCAG?
Not yet. It is the contrast method in the WCAG 3 working draft, which is still being developed and is not a legal or conformance standard. WCAG 2.1 and 2.2 with the 4.5:1 ratio remain the required standard. Treat APCA as the better guide to readability and WCAG 2 as the compliance check.
Why does swapping the text and background change the score?
Because APCA models how people read text, and light text on dark is perceived differently from dark text on light. The same two colours can pass in one direction and fall short in the other. WCAG 2 ignores this, which is one of the problems APCA sets out to fix.
What font size do I need at my contrast level?
Read the last row of the table: it gives the minimum size at your Lc for each weight. At Lc 75, for example, regular 400-weight text needs 16px, 700-weight can drop to 14px and 300-weight needs 24px. If your text is smaller than the figure for its weight, raise the contrast or the size.
See also: all Colour tools, Layout & Spacing, Shadows & Motion, Shapes & SVG, UI Components, Forms & Inputs.
Related tools
Contrast Checker
Check colour contrast against WCAG and APCA.
WCAG Checker
Find WCAG accessibility failures in pasted HTML, with the criterion each breaks.
Luminance Scorer
Score many colour pairs for contrast at once.
Colour Harmonizer
Generate harmonious palettes in OKLCH, HSL, RGB and hex.
Colour Blindness Simulator
View any image through protanopia, deuteranopia, tritanopia or achromatopsia.