All free tools

Color contrast checker for WCAG 2.2 and APCA

Enter a text colour and a background colour to see the WCAG 2.2 contrast ratio, the AA and AAA results and the APCA score. If a pair fails, the tool finds the nearest passing colour in the same hue, and it can check every pair of a whole palette at once.

Hex (#RGB or #RRGGBB), rgb() or hsl(). Alpha is ignored.

Hex (#RGB or #RRGGBB), rgb() or hsl(). Alpha is ignored.

Contrast ratio (WCAG 2.2)

2.5 : 1Fails AA

WCAG 2.2 contrast checks for this pair
CheckMinimumResult
Normal text, AABody copy under 24 px · SC 1.4.34.5 : 1Fail
Normal text, AAAEnhanced level · SC 1.4.67 : 1Fail
Large text, AA24 px, or 18.66 px bold · SC 1.4.33 : 1Fail
Large text, AAAEnhanced level · SC 1.4.64.5 : 1Fail
UI components and graphicsBorders, icons, focus rings · SC 1.4.113 : 1Fail

APCA (WCAG 3 candidate)

Lc 49.8Dark text on light

Large headings and bold labels only.

Lc 75+ body text, 60+ larger text, 45+ large headings, 30+ non-text. APCA is the candidate method for WCAG 3. It is not a standard yet, so WCAG 2.2 above is what audits check.

Live preview

New release

Ship your reports before the coffee cools

Connect your data once. Northwind writes the weekly update and sends it to the team, every Monday at nine.

Start freeSee a demo

Free for small teams. No card needed.

Nearest passing colour

Same hue and saturation, only the lightness moves, so the colour stays on brand.

  • Text colour, AA 4.5 : 1#6E7788 · 4.5 : 1
  • Text colour, AAA 7 : 1#525966 · 7.0 : 1
  • Background, AA 4.5 : 1#393939 · 4.5 : 1
  • Background, AAA 7 : 1#171717 · 7.0 : 1

Check a whole palette

Paste a list of colours, CSS custom properties (--name: #hex) or a Tailwind v4 @theme block. Hex, rgb() and hsl() values are read; oklch() is skipped. Up to 16 colours. Click a cell to load the pair above.

7 colours, 42 pairs, 28 below AA for normal text.

Contrast of each text colour (rows) on each background (columns)
Text ↓ / Background →canvassurfaceinkmutedsubtlebrandaccent
canvasSame colour
surfaceSame colour
inkSame colour
mutedSame colour
subtleSame colour
brandSame colour
accentSame colour

How to use it

  1. 01Type or pick the text colour and the background colour. Hex, rgb() and hsl() all work.
  2. 02Read the ratio and the pass or fail result for normal text, large text and UI components.
  3. 03If the pair fails, apply the nearest passing text colour or background from the suggestions.
  4. 04Paste your palette or Tailwind @theme block to see every pair in one matrix.
  5. 05Click a failing cell to load that pair and fix it.

What is a good colour contrast ratio?

Under WCAG 2.2 level AA, text needs a contrast ratio of at least 4.5:1 against its background, and large text and UI components need at least 3:1. Level AAA raises normal text to 7:1 and large text to 4.5:1.

The ratio runs from 1:1 (the same colour twice) to 21:1 (black on white). It compares the relative luminance of the two colours, so hue alone does not count: a red and a green of the same lightness can fail even though they look very different.

WCAG 2.2 contrast thresholds
WhatLevel AALevel AAASuccess criterion
Normal text4.5 : 17 : 11.4.3, 1.4.6
Large text (24 px, or 18.66 px bold)3 : 14.5 : 11.4.3, 1.4.6
UI components and graphical objects3 : 1No AAA level1.4.11

As of October 2026 · Source: W3C WCAG 2.2, success criteria 1.4.3, 1.4.6 and 1.4.11

What counts as large text?

Large text is at least 18 point regular or 14 point bold. On the web that is about 24 px regular or 18.66 px bold.

Large text may use the lower 3:1 ratio because thicker, bigger letters stay readable at lower contrast. Most body copy, captions and form labels are below this size, so they need 4.5:1.

WCAG 2 vs APCA

APCA (Accessible Perceptual Contrast Algorithm) is the candidate contrast method for WCAG 3. It is not part of any published standard yet, so audits and laws still use the WCAG 2 ratio.

APCA gives a lightness contrast value, Lc, instead of a ratio. It treats dark text on light and light text on dark differently, because they do not read the same, and its guidance ties the needed Lc to font size and weight. As a rough guide, Lc 75 suits body text, Lc 60 larger text, Lc 45 large headings and Lc 30 non-text elements.

WCAG 2 can overrate light text on dark colours and underrate some mid-tone pairs. Checking both is a good habit: pass WCAG 2.2 AA to meet today's rules, and use APCA to catch pairs that pass on paper but read poorly.

How to fix low contrast without changing your brand

Keep the hue and change only the lightness. A darker shade of the same colour usually passes and still looks on brand, which is what the nearest passing colour above does.

Keep a light or vivid brand colour for large elements, such as headings, illustrations and backgrounds, and use a darker shade for small text and links.

Check every state, not only the default one: hover, focus, visited links and error messages. Placeholder text and muted captions are the most common failures on landing pages.

Disabled controls are exempt from the text contrast rule, but they must still look clearly disabled and not like a low-contrast active button.

Questions

What is the minimum contrast ratio for text?
WCAG 2.2 level AA asks for 4.5:1 for normal text and 3:1 for large text, which is 24 px regular or 18.66 px bold. Level AAA asks for 7:1 and 4.5:1.
Does contrast apply to buttons and icons?
Yes. Success criterion 1.4.11 asks for 3:1 for the parts of a UI component you need to see to use it, such as a button border or an input outline, and for icons and charts that carry meaning. The text on a button follows the normal text rule.
Is 4.5:1 contrast required by law?
Many accessibility rules point to WCAG level AA, which includes 4.5:1 for text. Examples are Section 508 in the US, the EN 301 549 standard in the EU and the European Accessibility Act, which applies from June 2025. US courts often refer to WCAG in ADA cases. Which rules apply to your site depends on where and how you operate, so check with a legal adviser.
What is APCA?
APCA, the Accessible Perceptual Contrast Algorithm, is the candidate contrast method for WCAG 3. It reports a lightness contrast value (Lc) that accounts for text polarity and font size and weight. It is not a standard yet.
How do I check contrast for a whole palette?
Paste your colours, CSS custom properties or Tailwind v4 @theme block into the palette box. The tool reads every colour with its name and shows a matrix of every text and background pair, with failing pairs marked.
Does contrast apply to placeholder text and disabled buttons?
Disabled controls are exempt from success criterion 1.4.3. Placeholder text is not exempt when it carries information people need, so it should meet 4.5:1 like other text.

Landing pages with contrast checked for you

BlockSnap themes are checked for AA contrast, so every heading, button and caption on your SaaS landing page is readable from the start.

Get early access