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
| Colour | In the skin | On the page | As drawn | Hardest background |
|---|---|---|---|---|
| Text | #e8ecf5 14.17:1 | 17.00:1 | Unchanged | 12.70:1 |
| Secondary text | #b8c0d2 9.19:1 | 11.03:1 | Unchanged | 8.24:1 |
| Muted text | #9aa3b5 6.61:1 | 7.93:1 | Unchanged | 5.93:1 |
| Accent and links | #2bd5ff 9.63:1 | 11.56:1 | Unchanged | 8.63:1 |
Dusk dark
Surfaces, from the page outward: #0f0b24#141032#1a1440#231b55
| Colour | In the skin | On the page | As drawn | Hardest background |
|---|---|---|---|---|
| Text | #fffdf8 15.20:1 | 18.89:1 | Unchanged | 13.24:1 |
| Secondary text | #d6cde9 10.13:1 | 12.59:1 | Unchanged | 8.83:1 |
| Muted text | #a99fc4 6.21:1 | 7.72:1 | Unchanged | 5.41:1 |
| Accent and links | #ff8a6b 6.69:1 | 8.32:1 | Unchanged | 5.83:1 |
Legacy dark
Surfaces, from the page outward: #0d1b3d#112046#16264f#1d3160
| Colour | In the skin | On the page | As drawn | Hardest background |
|---|---|---|---|---|
| Text | #eef0f5 11.09:1 | 14.84:1 | Unchanged | 9.80:1 |
| Secondary text | #c3cad8 7.68:1 | 10.28:1 | Unchanged | 6.79:1 |
| Muted text | #9aa3b5 4.99:1 | 6.83:1 | rgb(156, 165, 183) | 4.51:1 |
| Accent and links | #f2c14e 7.54:1 | 10.08:1 | Unchanged | 6.66:1 |
Sunset light
Surfaces, from the page outward: #fff6ec#f4ebe2#eae1d7#dfd7cd
| Colour | In the skin | On the page | As drawn | Hardest background |
|---|---|---|---|---|
| Text | #2a2350 10.13:1 | 13.50:1 | Unchanged | 8.98:1 |
| Secondary text | #3a2f6b 8.19:1 | 10.92:1 | Unchanged | 7.27:1 |
| Muted text | #5a3f8c 5.84:1 | 7.78:1 | Unchanged | 5.18:1 |
| Accent and links | #c2452a 3.53:1 | 6.81:1 | rgb(164, 40, 8) | 4.53:1 |
Yardage Book light
Surfaces, from the page outward: #f7f8f3#e6e9df#d6d9cf#c7cac0
| Colour | In the skin | On the page | As drawn | Hardest background |
|---|---|---|---|---|
| Text | #1d2b4f 8.37:1 | 13.02:1 | Unchanged | 7.72:1 |
| Secondary text | #445273 4.68:1 | 7.61:1 | rgb(66, 79, 112) | 4.51:1 |
| Muted text | #65718e 2.93:1 | 7.64:1 | rgb(68, 79, 107) | 4.53:1 |
| Accent and links | #4f7a45 3.01:1 | 7.62:1 | rgb(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.
| Site | Text measured | Its own colours | Midnight | Dusk | Legacy | Sunset | Yardage Book |
|---|---|---|---|---|---|---|---|
| Wikipedia | 1,662 | 18 | 0 | 0 | 0 | 0 | 0 |
| BBC News | 235 | 0 | 0 | 0 | 0 | 0 | 0 |
| Hacker News | 315 | 266 | 0 | 0 | 0 | 0 | 0 |
| GitHub | 110 | 0 | 0 | 0 | 0 | 0 | 0 |
| CNN | 297 | 29 | 0 | 0 | 0 | 0 | 0 |
| The Guardian | 522 | 23 | 0 | 0 | 0 | 0 | 0 |
| The Verge | 347 | 7 | 0 | 0 | 0 | 0 | 0 |
| Ars Technica | 221 | 0 | 0 | 0 | 0 | 0 | 0 |
| RTÉ News | 204 | 7 | 0 | 0 | 0 | 0 | 0 |
| W3Schools | 404 | 45 | 0 | 0 | 0 | 0 | 0 |
| Python documentation | 200 | 0 | 0 | 0 | 0 | 0 | 0 |
| DEV Community | 336 | 3 | 17 | 17 | 17 | 0 | 0 |
| NASA | 117 | 12 | 0 | 0 | 0 | 0 | 0 |
| MDN Web Docs | 1,521 | 0 | 0 | 0 | 0 | 0 | 0 |
| Daring Fireball | 336 | 1 | 0 | 0 | 0 | 0 | 0 |
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.