screen.colorDepth decomposes into the CSS color media feature
Check id color-depth-vs-media-color
What an ordinary browser yields
colorDepth is exactly three times the CSS color feature, or exactly four times it when alpha is packed alongside — 24 and 8, 32 and 8, and 30 and 10 all reconcile.
What a detector infers
screen.colorDepth and the CSS color media feature describe one display in two different units: total bits per pixel, and bits per colour COMPONENT. On an RGB display the first is exactly three times the second, and both answers come from the same compositor, so the relationship holds whatever the hardware actually is. Stock Chromium reports a depth of 24 with a color feature of 8, and 24 divided by 3 is 8. A genuine 10-bit HDR panel reports 30 with a color feature of 10, and the ratio still holds. That is what makes this the self-referential form of a colour-depth check and why it needs no table of permitted depths: it does not ask whether the depth is a normal value, it asks whether the two numbers describing one screen agree. The failure it catches is specific and common. Raising colorDepth to 32 is a long-standing habit in spoofing tools, inherited from an era when Windows reported 32-bit colour, but Blink has reported 24 on every platform for years. A tool that changes the JavaScript property and leaves the CSS engine alone lands on 32 divided by 3, which is 10.67 — not an integer, and not the 8 the media feature still reports. Measured exactly that way on a shipping stealth browser. Monochrome displays are excluded, because they report a color feature of 0 and their depth does not decompose into RGB components at all.
How to resolve it
colorDepth counts bits per pixel while the CSS color feature counts bits per component, and both are answered by the same compositor, so they cannot be set independently. Raising colorDepth on its own leaves the CSS engine still reporting the real component depth, and then it divides evenly by neither channel count. Change the display, not the number.
Nearby checks in Screen & display
- screen.width/height backed by the display (matchMedia)
screen-matchmediaThis check reads window.screen.width/height, then asks the CSS media-query engine the same question via matchMedia("(device-width: Npx) and… - devicePixelRatio matches matchMedia resolution
dpr-matchmediaThe check compares window.devicePixelRatio against the layout engine's own answer, querying matchMedia with a min-resolution/max-resolution… - screen dimensions are a plausible physical size
screen-plausibleA pure sanity range on screen.width and screen.height: both must be at least 200px and no more than 16384px. - the available screen area fits inside the screen
screen-avail-within-boundsThe available screen area is a subset of the screen by definition: availWidth and availHeight describe what is left of width and height… - screen has an OS chrome inset (avail < screen on either axis)
taskbar-presentscreen.availWidth/availHeight describe the area left over after the OS reserves space for its own chrome — a Windows taskbar, a macOS dock… - the outer window fits within the screen
window-boundsThe check asserts only the zoom-invariant bound: window.outerWidth/outerHeight must be non-zero and must fit within the screen. - a non-touch desktop has a fine pointer + hover
pointer-hover-desktopThis check applies only when the UA identifies a desktop platform (Windows, Macintosh, Mac OS X, X11, Linux, CrOS, and not Android/Mobile)… - maxTouchPoints coheres with pointer media
touch-pointer-coherenceA one-directional coherence test: if navigator.maxTouchPoints is greater than zero, matchMedia("(any-pointer: coarse)") is expected to…
Clearcote is a browser built for fingerprint coherence
It is a Chromium fork, maintained by the same people who wrote this reference. It ships as a compiled browser rather than as a stealth script injected into someone else's — which is a description of how it is built, and is not an argument about how it behaves on this check.
This audit takes no position on how Clearcote scores on Screen & display checks, on this one, or anywhere else. It has no baseline corpus of other people's fingerprints to rank you against and no vendor scoreboard — nearly every check is self-referential, asking one browser the same question through two independent APIs and reporting whether both answers can be true at once. It runs identically on any browser, including ours. Run it on yours and read the result yourself.
See the other checks in Screen & display — the family color-depth-vs-media-color belongs to.