CaddoraHome

Measured · Cameleon

Cameleon's contrast, measured

Every text colour Cameleon draws is re-lit to at least 4.5:1 against the hardest background its skin can produce, the WCAG AA bar for body text. On 15 popular sites, 411 of 6,827 pieces of text fail that bar in the sites' own colours. Under Cameleon's five skins, 51 do, all on DEV Community, under Midnight, Dusk and Legacy. Measured 3 November 2026.

Each skin's colours

A skin's colours were each designed against one background. Cameleon holds them to the hardest one in the skin instead: the furthest surface, at the strongest tint a coloured header or callout can be given. A colour that does not clear 4.5:1 there is lightened or darkened until it does, keeping its hue, so the colour on the page can differ a little from the one in the skin. Both are below, with their contrast.

Midnight dark

Surfaces, from the page outward: #05070f#080b1e#0b1230#121a42

ColourIn the skinOn the pageAs drawnHardest background
Text#e8ecf5 14.17:117.00:1Unchanged12.70:1
Secondary text#b8c0d2 9.19:111.03:1Unchanged8.24:1
Muted text#9aa3b5 6.61:17.93:1Unchanged5.93:1
Accent and links#2bd5ff 9.63:111.56:1Unchanged8.63:1

Dusk dark

Surfaces, from the page outward: #0f0b24#141032#1a1440#231b55

ColourIn the skinOn the pageAs drawnHardest background
Text#fffdf8 15.20:118.89:1Unchanged13.24:1
Secondary text#d6cde9 10.13:112.59:1Unchanged8.83:1
Muted text#a99fc4 6.21:17.72:1Unchanged5.41:1
Accent and links#ff8a6b 6.69:18.32:1Unchanged5.83:1

Legacy dark

Surfaces, from the page outward: #0d1b3d#112046#16264f#1d3160

ColourIn the skinOn the pageAs drawnHardest background
Text#eef0f5 11.09:114.84:1Unchanged9.80:1
Secondary text#c3cad8 7.68:110.28:1Unchanged6.79:1
Muted text#9aa3b5 4.99:16.83:1rgb(156, 165, 183)4.51:1
Accent and links#f2c14e 7.54:110.08:1Unchanged6.66:1

Sunset light

Surfaces, from the page outward: #fff6ec#f4ebe2#eae1d7#dfd7cd

ColourIn the skinOn the pageAs drawnHardest background
Text#2a2350 10.13:113.50:1Unchanged8.98:1
Secondary text#3a2f6b 8.19:110.92:1Unchanged7.27:1
Muted text#5a3f8c 5.84:17.78:1Unchanged5.18:1
Accent and links#c2452a 3.53:16.81:1rgb(164, 40, 8)4.53:1

Yardage Book light

Surfaces, from the page outward: #f7f8f3#e6e9df#d6d9cf#c7cac0

ColourIn the skinOn the pageAs drawnHardest background
Text#1d2b4f 8.37:113.02:1Unchanged7.72:1
Secondary text#445273 4.68:17.61:1rgb(66, 79, 112)4.51:1
Muted text#65718e 2.93:17.64:1rgb(68, 79, 107)4.53:1
Accent and links#4f7a45 3.01:17.62:1rgb(48, 89, 38)4.52:1

In the skin is the colour as the skin defines it, with its contrast against the skin's furthest surface. On the page and Hardest background are the colour Cameleon draws, against the page background and against the hardest background the skin can produce.

On 15 popular sites

Pieces of text under WCAG AA contrast (4.5:1, or 3:1 for large text), out of all the text measured on the page. Each site's page is linked, with captures in every skin.

SiteText measuredIts own coloursMidnightDuskLegacySunsetYardage Book
Wikipedia1,6621800000
BBC News235000000
Hacker News31526600000
GitHub110000000
CNN2972900000
The Guardian5222300000
The Verge347700000
Ars Technica221000000
RTÉ News204700000
W3Schools4044500000
Python documentation200000000
DEV Community336317171700
NASA1171200000
MDN Web Docs1,521000000
Daring Fireball336100000

How it was measured

  • Each page is the real one, fetched 3 November 2026, with its own stylesheets. Cameleon's engine, the code the extension runs, recoloured it; nothing was adjusted by hand.
  • One skin per page load. Applying several skins to one loaded page gives a different answer depending on the order, so every skin got a fresh page.
  • Each page was left to settle for four seconds before it was skinned and again before it was measured, so text a site adds after loading is counted. An early test that skipped this scored a page too kindly.
  • Every element with text of its own was measured, against the background a reader actually sees: through every see-through layer down to the first solid one.
  • Except where that background is a picture or a gradient rather than a colour. An image is painted over the colour beneath it, so the colour is not the one on screen and a figure taken from it would be invented. 53 pieces of text (CNN 1, The Guardian 18, RTÉ News 22, NASA 12) sit on one and are counted as not measurable rather than scored either way.
  • Measured in Chrome 156 rather than Safari, running the same engine files the extension ships. The colours are the same in both, because they are the site's own CSS; how a page is laid out can differ.
  • The pages are public ones read without signing in, with nothing personal on them. The address of each is on its own page.
  • Where a site opened with a cookie-consent dialog (CNN, The Guardian, The Verge, Ars Technica, RTÉ News), the dialog was taken off before anything was measured, as it is once a reader answers it. Nothing else on the page was changed.

What it cannot fix

  • Pictures, video and canvas. Colours inside an image are the image's own. Under a dark skin they are dimmed a little; text drawn into a picture is never re-lit.
  • Background images. A photograph or gradient set as a background is left alone, so pale text a skin puts over a bright one can be hard to read. Where a whole page is grounded that way the skin is defeated outright, and the measurement above says so rather than scoring it.
  • Sites built of web components. A page drawn entirely inside shadow DOM, which an extension cannot reach, is not recoloured at all.
  • A site that changes its own theme while open. Whether a page is already dark is judged once, as it loads.
  • Unusual colour spaces. A colour given in a wide-gamut space Cameleon does not read is left as it is rather than guessed at.

Cameleon · Dark mode for the sites you read · Changelog