Articles

What is APCA? The contrast method proposed for WCAG 3

APCA stands for Accessible Perceptual Contrast Algorithm. It’s a newer way to check if text is easy to read on its background. It gives you a score called Lc, short for lightness contrast. A bigger number means more contrast.

APCA was put forward for WCAG 3, but the latest draft (10 September 2026) hasn’t picked a contrast method. No standard asks for APCA today. WCAG 2 AA is still the standard, so meet its contrast requirements and use APCA as a second check.

  • The score depends on which colour is the text. Dark text on a light background gets a positive score. Light text on a dark background gets a negative one. Swap the two colours and the score changes.

  • Size, weight and x-height set the score you need. Small, thin text needs more contrast. Aim for Lc 75 for body text like paragraphs, and Lc 60 for shorter text like labels.

  • Bronze, Silver and Gold are APCA’s own levels. They come from APCA’s own readability standard. The WCAG 3 draft uses the same names for something else.

  • APCA and WCAG 2 don’t always agree. Some colours pass one and fail the other, both ways round.

You’ve probably had a colour pair pass WCAG 2’s contrast check and still squinted at it. Andrew Somers, who built APCA, wrote in 2021 that WCAG 2’s contrast is “literally a coinflip”. APCA is his attempt at a better test.

What does APCA stand for?

APCA stands for Accessible Perceptual Contrast Algorithm. You’ll also see it called the Advanced Perceptual Contrast Algorithm, the older name that’s still in the header of the reference code. Myndex Research and Andrew Somers hold the trademarks on both names.

Somers spent more than 35 years on colour, imaging and visual effects in Hollywood film and TV, according to his Myndex biography. Then early-onset cataracts severely impaired his own eyesight, and he turned that colour science to visual accessibility.

Somers signs the Easy Intro to APCA as Myndex’s Director of Research and APCA Research Lead. He tuned APCA for screens that give off their own light.

What an APCA score (Lc) means

APCA gives you one number, the Lc score, and Lc stands for lightness contrast. A bigger number means more contrast between the text and its background. In APCA’s own FAQ, the score runs from about Lc -108 to Lc 106.

The scale is meant to look even to your eye. APCA in a Nutshell says Lc 60 gives the same perceived readability whether the two colours are pale or dark. If you halve the score, you roughly halve the contrast people see.

Positive and negative scores (polarity)

Dark text on a light background gets a positive score, and light text on a dark background gets a negative one. So Lc 60 means dark text and Lc -60 means light text. That’s polarity, and it’s why the order you enter the colours matters. APCA’s own test guide tells testers never to swap the text and background colours in a tool. The levels below are written as positive numbers, and they apply to the size of the score whichever way round the colours are.

The six levels: Lc 90, 75, 60, 45, 30 and 15

APCA’s basic guidance has six levels:

  • Lc 90 is preferred for body text.

  • Lc 75 is the minimum for body text.

  • Lc 60 is the minimum for other text you want people to read, like labels and buttons.

  • Lc 45 is the minimum for larger, heavier text, like headlines, and for icons with fine detail.

  • Lc 30 is the absolute minimum for any other text, including placeholder and disabled text.

  • Lc 15 is the point where many people can’t see something at all, and the minimum for a solid shape that only needs to be noticed.

These are roughly the same as WCAG 2’s AA level, and says to add Lc 15 to each one for something close to AAA. For comparison, WCAG 2’s AAA level asks for 7:1 on body text. For icons and shapes, WCAG 2 uses one number, 3:1, under non-text contrast.

APCA also sets a ceiling: keep very large, bold text under about Lc 90.

APCA’s six levels.

How APCA differs from WCAG 2’s contrast requirements

WCAG 2 gives you one number, the contrast ratio, and two size bands. At level AA, text needs 4.5:1 and large text needs 3:1. Large text means at least 18pt, or 14pt bold.

The ratio only asks which colour is lighter, so swapping the text and background gives you the same ratio. The full rule is in WCAG 2.2, and our WCAG 1.4.3 Contrast (Minimum) page walks through it.

WCAG 2

What you get
a contrast ratio, 1:1 to 21:1
Swap text and background
same ratio
Font size and weight
two bands, normal and large
Standing, September 2026
W3C Recommendation (WCAG 2.2)

APCA

What you get
an Lc score, about -108 to 106
Swap text and background
different score
Font size and weight
a level for each size and weight
Standing, September 2026
not part of any standard

Where 4.5:1 came from

The 3:1 starting point comes from two older display standards, ISO-9241-3 and ANSI-HFES-100-1988. The W3C multiplied it by 1.5 to allow for 20/40 vision, which gives 4.5:1. W3C’s own explanation says 20/40 is typical eyesight for people at roughly age 80.

How WCAG 2 got to 4.5:1.

What APCA’s guidelines account for that WCAG 2 doesn’t

APCA asks which colour is the text, so the score changes when you swap them. Its guidelines ask how big and how heavy the text is, and want more contrast as text gets smaller and thinner.

In Somers’s view, WCAG 2 overstates contrast for dark colours so much that 4.5:1 can be unreadable when one colour is near black. An independent introduction to APCA answers that WCAG 2’s formula is based on human perception too.

Font size, weight and x-height

APCA’s fuller guidance asks for more contrast as text gets smaller and thinner. The lookup table in APCA’s reference code puts a number on each size and weight. Here it is for common sizes and weights:

Minimum Lc for text people need to read, by font size and weight
Font weight
Font size300 light400 regular500 medium600 semibold700 bold
12pxNot allowedNo colour pairNo colour pairNo colour pairLc 105
14pxNot allowedNo colour pairLc 105Lc 95Lc 75
16pxNo colour pairLc 90Lc 75Lc 70Lc 60
18pxLc 105Lc 75Lc 70Lc 60Lc 55
24pxLc 75Lc 60Lc 55Lc 50Lc 45
32pxLc 65Lc 50Lc 45Lc 45Lc 40
48pxLc 55Lc 45Lc 40Lc 40Lc 35

From the font lookup table in APCA's reference code, apca-w3 0.1.9. “No colour pair” means the size needs more than Lc 106, the most any two colours can score. Sizes are CSS px and assume an x-height of 0.52.

Minimum Lc for text people need to read, by font size and weight
Font weight
Font size300 light400 regular500 medium600 semibold700 bold
12pxNot allowedNo colour pairNo colour pairNo colour pairLc 105
14pxNot allowedNo colour pairLc 105Lc 95Lc 75
16pxNo colour pairLc 90Lc 75Lc 70Lc 60
18pxLc 105Lc 75Lc 70Lc 60Lc 55
24pxLc 75Lc 60Lc 55Lc 50Lc 45
32pxLc 65Lc 50Lc 45Lc 45Lc 40
48pxLc 55Lc 45Lc 40Lc 40Lc 35

From the font lookup table in APCA's reference code, apca-w3 0.1.9. “No colour pair” means the size needs more than Lc 106, the most any two colours can score. Sizes are CSS px and assume an x-height of 0.52.

Minimum Lc for text people need to read, by font size and weight
Font weight
Font size300 light400 regular500 medium600 semibold700 bold
12pxNot allowedNo colour pairNo colour pairNo colour pairLc 105
14pxNot allowedNo colour pairLc 105Lc 95Lc 75
16pxNo colour pairLc 90Lc 75Lc 70Lc 60
18pxLc 105Lc 75Lc 70Lc 60Lc 55
24pxLc 75Lc 60Lc 55Lc 50Lc 45
32pxLc 65Lc 50Lc 45Lc 45Lc 40
48pxLc 55Lc 45Lc 40Lc 40Lc 35

From the font lookup table in APCA's reference code, apca-w3 0.1.9. “No colour pair” means the size needs more than Lc 106, the most any two colours can score. Sizes are CSS px and assume an x-height of 0.52.

These are the minimums for text people need to read, and long body text needs more. So 16px regular text needs Lc 90, well above the Lc 75 body-text level. For the WCAG side of type size, see our page on text size.

On a real type scale, that rules out a lot of small text. We checked IBM’s Carbon design system (v11, white theme) against the same table. Its headings pass, but Body 01 at 14px needs Lc 110 and the 12px label and helper text need Lc 120, and no colour pair scores above about Lc 106.

Carbon v11’s text styles on APCA’s size table.

The sizes are CSS px, and they assume an x-height of 0.52, like Helvetica or Arial. X-height is how tall the lowercase letters are compared with the font size. A font with smaller lowercase letters needs to go bigger. APCA in a Nutshell says Times New Roman, at 0.45, needs to be about 16% larger. Gold, below, goes further and adjusts for your actual font.

Two APCA checkers can give different answers for the same pair, because some use the flat levels above and others use this size table. We’ll cover why in a follow-up.

APCA’s Bronze, Silver and Gold levels (not WCAG 3’s)

APCA’s guidance comes in three levels of its own, set out in the APCA Readability Criterion, a separate standard that Inclusive Reading Technologies hosts.

  • Bronze is the entry level. It covers your main text with flat levels: Lc 75 for body text, Lc 60 for other text and Lc 45 for large text.

  • Silver covers all text, and uses the size and weight table.

  • Gold goes further, with separate rules for each use of text and an adjustment for your actual font.

APCA’s Bronze, Silver and Gold levels.

Myndex labels all of it beta guidance, so expect it to change.

The WCAG 3 draft uses the same three names for its own reporting tiers, which are something else. So if a tool or an article only says “Silver”, check which one it means.

Three examples where WCAG 2 and APCA disagree

You might have heard that APCA is a looser test than 4.5:1, or a stricter one. It’s both, depending on the text and the colours. These three pairs show where the difference lands in real design work. We scored each one with apca-w3 0.1.9, APCA’s reference code, and the unrounded WCAG 2.2 formula.

1. The same grey, swapped

A mid grey, #767676, on white scores 4.54:1 in WCAG 2. White on #767676 scores the same 4.54:1.

APCA scores the grey text Lc 71.6, under the Lc 75 it asks for body text. It scores the white text Lc -77.0, which passes.

A design system often uses the same grey token for secondary text and as a button fill behind white text. WCAG 2 signs off both uses with one number, so nothing in your checks says the grey paragraphs fall short. APCA passes the button, and flags the grey as fine for a label but too light for a paragraph.

One grey token, two APCA results.

2. Dark mode: a comfortable pass that APCA fails

A light grey, Tailwind v3‘s gray-400 (#9CA3AF), on a near-black blue-grey, gray-900 (#111827), scores 6.99:1. That’s well over AA’s 4.5:1 and a hair under AAA’s 7:1.

APCA scores it Lc -51.0, which is under Lc 60 for labels and Lc 75 for body text. It only clears Lc 45, the level for large headlines.

Dark themes often reuse greys that were only checked against 4.5:1, so captions and secondary text go out with a WCAG 2 score close to AAA, while APCA rates the same grey good enough only for a headline. Lighter text fixes it: gray-300 (#D1D5DB) on the same background passes both, at 12.04:1 and Lc -79.7.

A dark-mode grey, and the fix.

One pair can’t settle which method is right about dark colours, because APCA did the scoring. Settling that takes reading tests with people.

3. The orange button

Black text on a bright orange, Tailwind v3’s orange-500 (#F97316), scores 7.49:1. That’s enough to pass even AAA’s 7:1, so WCAG 2 tells you black is the right choice. APCA scores the same pair Lc 50.9.

White text on that orange fails WCAG 2 at 2.80:1, but it scores higher in APCA, at Lc -58.4. So the two methods point opposite ways. Follow either one and the other rejects your button.

Bright brand colours are where designers pick black or white text by the ratio, and on this orange the ratio picks the colour APCA likes least. Both text colours fall short of Lc 60 here, so APCA rejects both as a button label. The fix is a darker orange: white on orange-700 (#C2410C), a burnt orange, passes both at 5.18:1 and Lc -79.9.

Black text on bright orange, and the fix.

Three pairs show the gap, but not how often it turns up in a real palette. We’re testing the default colours of popular design systems (for example Material Design 3) against both methods, and we’ll share the results when they’re ready.

Common APCA misconceptions

You’ve probably heard at least one of these. Each is wrong, or only half right, as of September 2026.

  • “APCA is WCAG 3’s contrast method.” It isn’t, yet. The WCAG 3 section below has the dates.

  • “This design is WCAG 3 compliant.” There’s no such thing until WCAG 3 is a finished W3C standard, and Myndex’s own rules for tools say so.

  • “Lc 60 is the minimum for body text.” Lc 60 is for other content text. Body text needs Lc 75, and Lc 90 is preferred.

  • “APCA font sizes are in points.” They’re in CSS px, and they assume a typical x-height.

  • “APCA always lets you use lower contrast.” Only for some text. White on a mid blue, Tailwind v3’s blue-500, fails WCAG 2 at 3.68:1 but clears APCA’s Lc 60 for a button label, at Lc -69.4. For body text and dark mode, APCA is often the stricter test.

  • “APCA’s Bronze, Silver and Gold are WCAG 3’s levels.” APCA’s levels come from its own readability standard, and the WCAG 3 draft uses the same names for its reporting tiers.

  • “APCA takes saturation and room lighting into account.” APCA scores lightness contrast. Its author says hue and saturation play little part in how readable text is.

Is APCA part of WCAG 3? Where it stands in September 2026

No. The latest WCAG 3 Working Draft is dated 10 September 2026. It says the contrast method WCAG 3 will use is “yet to be determined”. The draft does assume that whatever method it picks will take font size and weight into account.

APCA was in the first three drafts, all published in 2021. The January 2021, June 2021 and December 2021 drafts all rated text contrast against the APCA lookup table.

In October 2022 a pull request on the W3C’s WCAG 3 repository proposed removing the visual contrast guideline from the drafts, and Somers lodged a formal objection. The working group merged it on 30 January 2023. W3C staff contact Michael Cooper explained on the pull request that exploratory content without the working group’s support is removed after 6 months. He added that the group still hoped the contrast work would mature for later inclusion. In 2025 Somers added a note to the same page saying the versions removed were “early versions that were very obsolete”.

The July 2023 draft then removed the previous draft guidance across the board, contrast included, as the W3C’s WCAG 3 introduction of July 2023 records.

Andrew Somers agrees about the label. Writing on Adrian Roselli’s blog in April 2026, he said APCA is draft guidance and “no one should be calling it ‘WCAG 3’”. Myndex’s own compliance page, last updated in March 2023, still calls APCA “the candidate contrast method for WCAG 3”, which is out of date now the draft names no method.

APCA in the WCAG 3 drafts, 2021 to 2026.

The W3C’s current WCAG 3 introduction says WCAG 3 won’t be a finished standard for a few more years. It says the final requirements will be different from the draft. And when WCAG 3 is finished, it won’t supersede WCAG 2.

Should you use APCA today?

Yes, as a second check alongside WCAG 2 AA, which is still the standard. APCA isn’t required by any standard. Somers agrees, in the same April 2026 thread, that nobody should drop WCAG 2 conformance because of a draft. The evidence behind APCA is disputed. Somers says it’s backed by independent validation and peer-reviewed papers. The independent introduction to APCA says a rigorous scientific evaluation isn’t available yet.

APCA is most useful where the two methods disagree most, in dark mode and on small or thin text. If you want one method that does both jobs, look at BridgePCA, a variant of APCA from Myndex. Somers says it’s designed to pass WCAG 2 automatically while using APCA-style guidance.

A checklist for today:

  1. Check every text pair against WCAG 2 AA: 4.5:1 for body text, and 3:1 for large text (18pt, or 14pt bold, which is about 24px, or 18.7px bold).

  2. Run the same pairs through APCA with the text and background the right way round. Don’t swap them.

  3. Aim for Lc 75 or more on body text (Lc 90 preferred), Lc 60 on other content text and Lc 45 on headlines over 36px.

  4. Keep disabled text at Lc 30 or above. Placeholder text still needs 4.5:1 under WCAG 2.

  5. Check dark mode as a separate set. A light-on-dark pair on a near-black background can pass 4.5:1 and still score under Lc 60.

  6. Keep very large, bold text under about Lc 90.

  7. If two APCA tools disagree, check the pair in apcacontrast.com, Myndex’s own checker.

Check both numbers

For compliance, WCAG 2 AA and its 4.5:1 are the numbers that count. Check the second number anyway. The two methods can disagree in both directions, depending on what the text is for and which way round the colours are.

Try #767676 both ways round in apcacontrast.com, then your dark-mode text and your brightest button, with the font size and weight you actually ship.

Meet 4.5:1 for compliance, and use APCA to find the pairs where the two methods disagree.

APCA contrast checkers and tools

apcacontrast.com is Myndex’s canonical APCA contrast checker, and it’s the one to trust when other tools give you odd results. Myndex also keeps a list of third-party tools, and says that not all of them have been checked for accuracy yet. If you’re building a check into code, APCA’s reference implementation is the apca-w3 package on npm.

Stark is on that list. So are Polypane Color Contrast, Leonardo, Huetone, Atmos and Color.js, and two Figma plugins, Zebra and Caravage. Myndex sets rules for any tool that uses the APCA name, such as showing “Lc” with the score and showing polarity.

Frequently asked questions

What is the Advanced Perceptual contrast Algorithm (APCA)?

Advanced Perceptual Contrast Algorithm is the older name for APCA, which is now called the Accessible Perceptual Contrast Algorithm. APCA predicts how readable text is against its background. It gives a lightness contrast (Lc) score that changes when you swap the colours, and font size and weight set the score you need.

Is there an app that can check colour contrast against WCAG and APCA guidelines?

Yes. apcacontrast.com is Myndex's canonical APCA contrast checker. Myndex's list of third-party tools includes Stark, Polypane and two Figma plugins. Not all of them have been checked for accuracy, so compare any odd result with apcacontrast.com.

What is a good colour contrast score?

Under WCAG 2, body text needs at least 4.5:1 at level AA and 7:1 at level AAA. Under APCA, body text needs at least Lc 75, and Lc 90 is preferred. Larger, bolder text can go lower under both methods.

What does 4.5 to 1 contrast ratio mean?

A 4.5 to 1 ratio means the lighter colour's relative luminance, plus 0.05, is 4.5 times the darker colour's, plus 0.05. It's WCAG 2's AA minimum for body text. The W3C got it by taking 3:1 from older display standards and multiplying by 1.5 for 20/40 vision.

What is the minimum contrast ratio required for accessibility?

Under WCAG 2 AA, text needs 4.5:1, and large text, meaning at least 18pt or 14pt bold, needs 3:1. UI components and graphics need 3:1 against the colours next to them. Don't round the number, because 4.499:1 fails.

What is an acceptable contrast ratio?

For body text, an acceptable ratio is at least 4.5:1 under WCAG 2 AA. If you check APCA as well, aim for Lc 75 or more. Small or thin text needs more, and 16px regular text needs Lc 90 under APCA's size table.

What is the formula for calculating contrast?

WCAG 2 uses (L1 + 0.05) / (L2 + 0.05). L1 is the lighter colour's relative luminance and L2 the darker colour's. APCA turns each colour into an estimated screen luminance. It then treats the text and background differently depending on which one is lighter, so the score changes when you swap them. The full formula is in APCA's reference code, apca-w3.

What are the key differences between WCAG 2 and WCAG 3?

On contrast, WCAG 2 sets fixed ratios of 4.5:1 and 3:1. The WCAG 3 Working Draft of 10 September 2026 hasn't chosen a contrast method, but it assumes the method will account for font size and weight. The draft also sorts results into six reporting tiers. The third equals conformance, and the three above it are called Bronze, Silver and Gold.

Has WCAG 3.0 been released?

No. The latest version is a Working Draft dated 10 September 2026. The W3C says WCAG 3 won't be a finished standard for a few more years, and it won't supersede WCAG 2 when it is.

What are the new WCAG standards for 2026?

WCAG 2.2 is the latest finished version. It became a W3C Recommendation on 5 October 2023, and its current edition is dated 12 December 2024. WCAG 3 is still a draft, and its latest Working Draft is dated 10 September 2026.

Sources

Primary sources, checked on 26 September 2026.

Figures

  • APCA’s six levels. Levels from Myndex, APCA in a Nutshell.

  • How WCAG 2 got to 4.5:1. W3C, Understanding Success Criterion 1.4.3 Contrast (Minimum).

  • Carbon v11’s text styles on APCA’s size table. Styles from @carbon/type 11.68.0 in the white theme. The Lc each style needs comes from the font lookup table in apca-w3 0.1.9. Rendered in Chrome and scored by us with apca-w3 0.1.9 and the unrounded WCAG 2.2 formula, 28 September 2026.

  • APCA’s Bronze, Silver and Gold levels. APCA Readability Criterion (beta), Inclusive Reading Technologies.

  • One grey token, two APCA results. Rendered in Chrome and scored by us with apca-w3 0.1.9 and the unrounded WCAG 2.2 formula, 28 September 2026.

  • A dark-mode grey, and the fix. Colours: Tailwind v3.4.17. Rendered in Chrome and scored by us with apca-w3 0.1.9 and the unrounded WCAG 2.2 formula, 28 September 2026.

  • Black text on bright orange, and the fix. Colours: Tailwind v3.4.17. Rendered in Chrome and scored by us with apca-w3 0.1.9 and the unrounded WCAG 2.2 formula, 28 September 2026.

  • APCA in the WCAG 3 drafts, 2021 to 2026. W3C WCAG 3 Working Drafts, W3C silver repository pull request #663 and the W3C WCAG 3 introduction.

Join 126 other insiders who still care about design

Becoming an insider means you'll be the first to hear about new tools, products, and features. Have your say on our product roadmap, and get exclusive discounts.

By subscribing you agree to our privacy policy

© Darkside Design Ltd. All rights reserved

Made with 🧡 on 🌍 Earth

Join 126 other insiders who still care about design

Becoming an insider means you'll be the first to hear about new tools, products, and features. Have your say on our product roadmap, and get exclusive discounts.

By subscribing you agree to our privacy policy

© Darkside Design Ltd. All rights reserved

Made with 🧡 on 🌍 Earth

Join 126 other insiders who still care about design

Becoming an insider means you'll be the first to hear about new tools, products, and features. Have your say on our product roadmap, and get exclusive discounts.

By subscribing you agree to our privacy policy

© Darkside Design Ltd. All rights reserved

Made with 🧡 on 🌍 Earth