Elements removed from the layout
An element the page's own CSS takes out of the layout, with body text still inside it.
How the text is hidden
The parser resolves the CSS cascade over the document without rendering it, then asks why each run of text cannot be seen. display:none, visibility:hidden, visibility:collapse, a max-height/height/max-width/width that resolves to zero, the bare hidden attribute, content-visibility:hidden, a transform carrying a zero scale factor, and — inside an <svg> — a <defs>, <symbol> or <metadata> container whose content paints only where a <use> references it, all resolve to one invisible reason, hidden-attr. That reason is asked first, because display:none removes the box entirely and no descendant style can undo it. Inside an <svg> the same properties are also read as presentation attributes, which lose to any declaration.
Why a model still reads it
The element and its text stay in the DOM as ordinary text nodes. A text node carries no record of the style that suppressed it, so any DOM-walking extractor returns it as body copy — the repo's own probe audit names BeautifulSoup, readability and unstructured as the class of tool this applies to.
What we do about it
reasonFor assigns hidden-attr, and the rule fires when the run sits in a body block, is not claimed by the accessibility idiom or the page-furniture carve-out, and the document is not a whole-page text layer — the visible-text ratio floor and the container length cap are written into the rule's when expression in the rule pack, not into the parser. Severity is high and the action is flag: the finding is reported and the text is left in text.canonical, never stripped. containerVisibility is editing-only, because view-source and developer tools both show it.
How often it fires
18.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
A phishing campaign hid a block of text in an invoice email telling the recipient's AI summariser to add a fake priority action changing vendor payment details; Barracuda names four ways such instructions are hidden — HTML comments, CSS-invisible text, Base64 inside an image data string, and zero-width characters — but does not say which one this email used.
Ten prompt-injection payloads on live web pages, most hidden from readers in HTML comments, display:none, a visually-hidden aria-hidden element or 1px near-transparent text — one telling AI agents to make a $5,000 PayPal transaction, another to hand over an API key.
Twenty-two distinct payload techniques found on real malicious sites — zero font size, elements pushed 9,999 pixels off screen, display:none, attribute cloaking and prompts tucked inside SVG — aimed at everything from ad-review evasion to forced transactions. The SVG case reached us as `clean` until engine 0.263.0.
Check your own file
Three commands: a key, credit, a verdict.
Start with the API