WCAG vs APCA: which contrast method should you use?

One number the law reads, one number modeled on how eyes read - and the color pairs where the two part ways.

Design · 114 4 Live Demos ~10 min read WCAG 2 · APCA
4.5:1
WCAG 2 AA for body text
Lc 75
APCA minimum for body text
2.x AA
What laws cite today
TBD
WCAG 3's contrast method
01

The short answer

If you need a rule you can defend in an audit, use WCAG 2. Its contrast ratio - 4.5:1 for body text, 3:1 for large text and 3:1 for the parts of a control people need to see - is the method that accessibility laws and procurement standards point to today.

If you want text that is comfortable to read, not merely compliant, check it with APCA as well. APCA is better at the cases where WCAG's ratio is known to mislead: gray text in dark mode, thin or small type, very large headlines and text on saturated, mid-bright colors.

So the practical answer is both, in a fixed order. WCAG 2 is the floor you have to clear; APCA is a second opinion that tells you when clearing the floor is not enough. Where they disagree, look for a pair that satisfies both - the last demo in this article finds one for you.

Start here if WCAG is new to you. This article builds on Accessible Color Design and WCAG Contrast, which explains relative luminance, the AA and AAA thresholds and non-text contrast from first principles. Here we compare the two methods head to head. Every score on this page is computed live by the same color code that runs this site's Contrast Checker.
02

Two formulas, side by side

WCAG 2 compares relative luminance. Each sRGB channel is decoded to linear light (divided by 12.92 at or below 0.04045, otherwise raised as ((v + 0.055) / 1.055)2.4), the channels are weighted 0.2126 red, 0.7152 green and 0.0722 blue, and the two luminances go into one ratio:

ratio = (Llighter + 0.05) / (Ldarker + 0.05) WCAG 2.0, 2.1 and 2.2 - from 1:1 (identical colors) to 21:1 (black on white)

The ratio is symmetric: swap the text and the background and nothing changes. Older copies of WCAG print the linear threshold as 0.03928; the W3C corrected it to the sRGB value, 0.04045, in 2021. No 8-bit channel value falls between the two - 10/255 is 0.0392 and 11/255 is 0.0431 - so every hex color gets exactly the same answer either way.

APCA, the Accessible Perceptual Contrast Algorithm by Andrew Somers of Myndex Research, starts from a similar luminance (a plain 2.4 power curve with weights 0.2126729, 0.7151522 and 0.0721750) and then does three things WCAG does not:

S = 1.14 × (Ybg0.56 − Ytext0.57)  ·  Lc = 100 × (S − 0.027) APCA-W3 0.0.98G-4g, dark text on a lighter background. Light text on a darker background uses 0.65 / 0.62 and adds 0.027, so its Lc is negative.

The output is Lc, lightness contrast: about +106 for black on white and about −108 for white on black. The sign only records polarity; the guidance is read from the magnitude. These are the constants of APCA-W3 version 0.0.98G-4g, the version this site implements.

Question WCAG 2 APCA
What does it output? A ratio from 1:1 to 21:1 A signed Lc, about −108 to +106
Swap text and background? Same number A different number
Font size and weight? Two classes: normal and large A table of sizes and weights
Very dark colors? Only the +0.05 flare term A soft clamp below Y 0.022
Status in September 2026 W3C Recommendation, cited by laws Published by its author; in no W3C Recommendation
Interactive 01 · WCAG vs APCA comparator

Score one pair both ways

Pick a text color and a background, or try one of the pairs this article discusses. The left card is WCAG 2 with its three verdicts; the right card is APCA with polarity, use level and the smallest text size its guidance allows. The math lines show the intermediate luminances, so you can follow each formula step by step.

Polarity
Try a pair
WCAG 2 ratio
-
AA body text (4.5:1)
AA large text and UI (3:1)
AAA body text (7:1)
Text luminance
Background luminance
APCA Lc
-
Polarity
Use level
Smallest regular text (400)
Smallest bold text (700)
Text Y after clamp
Background Y after clamp
03

Polarity: the difference WCAG cannot see

WCAG's ratio has no idea which color is the text. APCA does. Take #595959 and white: WCAG gives 7.00:1 in both directions. APCA gives Lc +84.3 for gray text on white and Lc −89.2 for white text on the gray. With #0066CC and white the ratio is 5.56:1 both ways, while APCA gives Lc +77.0 for blue text on white and Lc −82.3 for white text on blue.

Do not turn that into a rule of thumb. Which direction scores higher depends on where the pair sits on the lightness scale, and near black the soft clamp takes over. #949494 on black is 6.92:1 - a hair short of WCAG's AAA - yet APCA gives it only Lc −44.6, and black text on #949494 only Lc +46.9. Press Swap text and background in the comparator to flip any pair and watch the Lc change while the ratio stays put.

Why it matters for dark mode. A dark theme is light text on a dark background, which is exactly where WCAG and APCA drift apart. A gray that passes WCAG comfortably on a near-black surface can still read as faint, and APCA is the method that says so. See Dark Mode and Adaptive Color for building the second theme itself.
04

Same ratio, different Lc

A ratio squeezes two luminances into one number, and a great many pairs share it. Every gray pair in the demo below clears the same WCAG ratio, yet APCA spreads them far apart. At 4.5:1 with dark text, #767676 on white scores Lc +71.6, while #202020 on #878787 - a ratio of 4.53:1, one step further down the lightness scale - scores Lc +37.8.

This is the heart of the disagreement. WCAG rates contrast as a ratio, so a dim pair counts as much as a bright pair with the same ratio. APCA's model holds that the same ratio looks weaker in the darker part of the range, so it gives dim pairs a lower Lc. Across the 139 dark-on-light gray pairs that sit just at 4.5:1, APCA's scores run from Lc +71.6 at the top of the scale down to Lc +32.0 at the bottom.

Interactive 02 · Same ratio, different Lc

Seven gray pairs, one WCAG ratio

Choose a target ratio and a polarity. The demo searches every 8-bit gray pair, keeps the ones that reach the target by the smallest margin, and shows seven of them from the brightest to the dimmest. WCAG treats all seven alike; the Lc under each shows how differently APCA sees them.

4.50:1
Polarity
Pairs that reach the ratio
Strongest Lc
Weakest Lc
05

Where the two methods disagree

Most everyday pairs get similar verdicts from both methods. The interesting cases are the ones where one method passes a pair the other rejects. Five of them, each checked against the same color code the demos use:

Pair WCAG 2 APCA What it tells you
#767676 on black 4.62:1 - passes AA Lc −30.1 - spot text only A dark-mode gray the ratio accepts and APCA rejects for reading
White on #FF6600 2.93:1 - fails AA, even for large text Lc −60.1 - content text at 24px APCA accepts large white-on-orange; WCAG rejects it at every size
Black on #FF6600 7.15:1 - passes AAA Lc +49.3 - headlines only The ratio's favorite; APCA keeps it for big text
#777777 on white 4.47:1 - fails AA Lc +71.1 One step from a pass, and APCA barely notices the step
#767676 on white 4.54:1 - passes AA Lc +71.6 - 24px regular or 16px bold WCAG's lightest passing gray on white is below APCA's Lc 75 for body text

Orange is the classic case. WCAG's ratio divides by the darker color's luminance plus 0.05, so almost anything paired with black earns a large ratio. APCA subtracts perceptually scaled lightness instead, so black text on a mid-bright color gains far less, and white text gains more. Neither answer is the "true" one. The first is the method the law cites; the second is a model built to track readability.

The rows at the bottom show a second kind of disagreement: the cliff. #777777 fails WCAG and #767676 passes, though they are one step apart on each channel, with ratios of 4.47:1 and 4.54:1. APCA has thresholds too, but it does not pretend the cliff is between these two grays - it puts both below its body-text minimum.

06

Size and weight

WCAG 2 has two classes of text. Normal text needs 4.5:1 (7:1 for AAA); large text - at least 18 point, or 14 point bold, which browsers render as about 24px and 18.66px - needs 3:1 (4.5:1 for AAA). Success criterion 1.4.11 adds 3:1 for the boundaries of controls, focus indicators and meaningful graphics. That is the whole model: a 12px caption and a 23px subheading need the same ratio, and so do a 24px heading and a 96px display line.

APCA ties the Lc a text needs to its size and weight, which is closer to how vision works: the contrast you need depends on the size of the detail you are looking at, as Contrast Sensitivity explains. The published guidance, as this site's tools apply it:

The simple table the site's tools use is written for regular (400) and bold (700) text. The tools read 500 and 600 as 400 and 800 and 900 as 700, and hold anything lighter than 400 one level stricter - a house rule, labeled as one in the tools. It lands on APCA's own figures for light type: 24px at weight 300 needs Lc 75, and 18px at weight 300 needs Lc 90.

Interactive 03 · Size, weight and the Lc they need

How big does this pair have to be?

Set a pair, a font size and a weight. The sample is drawn at that exact size. Below it, WCAG's two classes and APCA's requirement are checked side by side, and the table marks every size and weight this pair's Lc can carry.

16 px
Weight
WCAG 2
Text class
Needs
This pair
Verdict
APCA
Needs
This pair
Verdict
Each cell is the requirement at that size and weight. A tick means this pair meets it; a cross means it does not. The outlined column is the size you chose.
07

What laws and standards use today

Every accessibility law and procurement standard that names a contrast method names WCAG 2. The success criteria behind it - 1.4.3 Contrast (Minimum), 1.4.6 Contrast (Enhanced) and 1.4.11 Non-text Contrast - read the same in WCAG 2.1 and 2.2. As of September 2026:

None of them mentions APCA. A design that passes APCA and fails WCAG 2 AA fails the standard these documents cite.

And WCAG 3?

WCAG 3 is a W3C Working Draft, not a standard. APCA was developed as a candidate contrast method for it, and early drafts included an APCA-based guideline. The current draft, dated 10 September 2026, says the contrast algorithm for WCAG 3 is yet to be determined and marks its contrast requirements as still developing. Nothing in WCAG 3 is normative yet. If someone tells you that WCAG 3 "uses APCA", they are ahead of the text.

Not legal advice. This section summarizes which documents cite which version of WCAG, as of September 2026. For the obligations that apply to you, read the regulation itself or ask a qualified lawyer.
08

A workflow that passes both

  1. Clear WCAG 2 AA first. 4.5:1 for text, 3:1 for large text, 3:1 for control boundaries, focus indicators and meaningful graphics. In a regulated market this part is not optional.
  2. Score the same pairs with APCA at the sizes and weights you actually ship. Treat Lc 75 as the comfort target for body text and Lc 60 for secondary text. The Accessibility Color Pair Library lists pairs already scored both ways.
  3. Look hardest where the methods disagree: grays on near-black in dark themes, thin or small type, text on saturated mid-bright colors, and very large display type.
  4. Fix by moving lightness, not hue. Walking a color's lightness away from its background raises both scores at once. How to make your brand color accessible shows the method step by step.
  5. Write both numbers down next to each color token, so the next person knows which pairing each value was tested against.

The orange from earlier shows how little it can take. Walk #FF6600 darker in OKLCH, keeping its hue, and the first shade where white text reaches 4.5:1 is #CB4F00. The same shade gives white text Lc −75.8, so it clears WCAG AA for body text and APCA's Lc 75 for 18px text at once. The demo below runs that search for any pair, size and weight.

Interactive 04 · Find a pair that passes both

Nudge one color until both methods agree

Start from a failing pair, choose the size and weight it will be used at, and pick which color is allowed to move. The search walks that color's OKLCH lightness away from the other, one step of 0.005 at a time with the hue kept, and stops at the first shade that meets WCAG's ratio for that text class and APCA's Lc for that size.

18 px
Weight
Color to adjust
Before
After
Requirement
WCAG 2 needs
APCA needs
Before: ratio
Before: Lc
Result
New color
After: ratio
After: Lc
OKLCH lightness
Moved by (ΔE2000)
For compliance
WCAG 2 AA. It is what audits, contracts and regulations measure against.
For dark themes
Add APCA. It flags light grays on near-black that the ratio passes.
For thin or small type
Add APCA. WCAG gives weight 300 at 16px the same target as weight 700.
For big headlines
Both allow less contrast. Keep WCAG's 3:1 as the floor even where APCA's Lc 45 would allow a lighter pair.
For controls and icons
WCAG 1.4.11's 3:1 for boundaries, focus indicators and meaningful graphics.
For color meaning
Neither. Contrast does not replace a second cue; WCAG 1.4.1 asks that color is never the only signal.
09

The terms, defined

Relative luminance
WCAG's measure of how much light a color emits, from 0 for black to 1 for white, computed from linearized sRGB.
Contrast ratio
(Llighter + 0.05) / (Ldarker + 0.05). Symmetric, from 1:1 to 21:1.
Lc (lightness contrast)
APCA's signed output, about −108 to +106. Guidance reads its magnitude.
Polarity
Which color is on top: dark text on a lighter background (positive Lc) or light text on a darker one (negative Lc).
Soft clamp
APCA's lift for luminances below 0.022, standing in for flare near black.
Spot text
Text that only needs to be found, not read at length: placeholders, disabled labels, fine print. APCA's floor for it is Lc 30.
Large text
WCAG's second class: at least 18pt, or 14pt bold (about 24px, or 18.66px bold).
Working Draft
A W3C document still being written. WCAG 3 is one; none of it is normative.
10

Test your understanding

Six questions on the two methods. Instant feedback, no scores recorded; a wrong answer comes with a short explanation.

Quick check

Loading…
 
Question 1 of 6
11

Continue your journey

Contrast is where color meets reading. These pick up the threads this comparison left loose: the WCAG foundations, brand colors, dark themes and the vision science underneath.