- Shipped
- August 25, 2026 at 4:31 PM UTC
- Author
- Kamo
- Commit
- e04d2c9
A declaration scanner rather than a CSS grammar: the scan has three questions (custom properties, background images, colours) and none needs the cascade resolved -- it is looking for evidence of intent, not the computed value of any element. Three things it would be easy to get wrong and that the tests pin: @media/@supports/@layer are FLATTENED, not treated as declaration blocks, because responsive sites put most real styling including hero backgrounds behind a media query; declarations split on semicolons outside parens, so a url() data payload does not tear a value in half; and var() resolves exactly one hop, because --a:var(--b);--b:var(--a) is a real thing people write and chasing the chain needs a cycle guard. style="" attributes are collected too. Elementor, Webflow and Squarespace put the hero background on the element rather than in a stylesheet, so reading only <style> and <link> finds no hero on most small-business sites.