Text the colour of its background
Text whose resolved colour and resolved ground are too close in contrast for a reader to separate them.
How the text is hidden
The parser resolves the text colour from color, from -webkit-text-fill-color, and from the background-clip:text idiom where the paint becomes the glyph colour; it resolves the ground from the cascade, from the legacy bgcolor and background attributes that older and government HTML still use, and — inside an <svg> — from the filled shapes already painted under the text's own point, through the transform chain. The two are compared as a contrast ratio.
Why a model still reads it
The glyphs are painted, at full size, in the ordinary flow. Only the colour hides them, and colour is a rendering property: an extractor reads the characters and never computes the contrast.
What we do about it
reasonFor returns background-match when the computed contrast falls below limits.minVisibleContrastRatio, read from the rule pack. The rule fires at high with action flag — reported and retained, never stripped — guarded by the same container clause that stands the specific rules down on a whole-page text layer. containerVisibility is never: selecting the text is the only way a reader finds it.
How often it fires
10.3% of 400 real pages from 400 distinct hosts (Common Crawl) — pages, not documents, measured 2026-08-21.
This is an alert-volume number and nothing else. It says how often the alarm sounds on documents as found — not how often it is right, and not whether what it found was harmless. Documents as found may themselves carry concealment. Read it against the population named above rather than as a property of documents in general.
Seen in the wild
An email hid an instruction inside a zero-size white span, and Gemini's "summarise this email" obediently appended a fabricated Google security warning telling the reader to call an attacker's phone number.
Check your own file
Three commands: a key, credit, a verdict.
Start with the API