mirror of
https://github.com/pbakaus/impeccable.git
synced 2026-09-14 15:16:35 +03:00
The engine no longer lives in a separate repo. `crates/` is a snapshot of the
open crates (foundation, core, common, context, live, hook, skills, comp,
comp-verbs, html, browser, detect, cli) plus `Cargo.lock`, taken as a git
archive of the engine repo at the commit that finished the boundary split.
None of that repo's history comes with it, and none of it should: the closed
half stays private.
The closed half is the rule engine. It ships as a prebuilt native archive per
target, `libimpeccable_detector.a`, published as a `detector-v<X>` GitHub
Release on this repo. `crates/core/build.rs` resolves and links it three ways:
`IMPECCABLE_DETECTOR_LIB=<dir>` for a local detector build, else the
`~/.impeccable/detector/<version>/<target>/` cache, else a download verified
against its `.sha256` sidecar. `crates/core` is a thin shim over a three-symbol
C ABI; nothing above it knows the boundary exists.
What changed versus the engine repo copy:
- Every crate manifest moves from `license-file.workspace` to
`license.workspace` (this workspace declares Apache-2.0), and the workspace
gains the `postcard` dependency the boundary encoding needs.
- The launcher contract test reads `skill/scripts/impeccable{,.cmd}` instead of
a sibling `launcher/` dir, and `engine_binary` downloads from
`github.com/pbakaus/impeccable/releases/download/engine-v<version>/` instead
of the retired dist repo. No oracle golden carried the old URL, so no
re-recording was owed.
- The tests that hunted for a public repo through `IMPECCABLE_PUBLIC_REPO`,
`../impeccable-second` or a hardcoded home directory now resolve the root as
`CARGO_MANIFEST_DIR/../..`, because they are in it. The env var stays as an
override for an out-of-tree checkout.
- The in-page bundle (`detect-antipatterns-browser.js`, 2 MB of generated wasm
glue) is no longer tracked. `crates/core/build.rs` resolves it beside the
archive, hands the path to `impeccable_core::browser::IN_PAGE_BUNDLE_JS`, and
live mode serves that. `scripts/check-detector-release.mjs` now requires it
and its `.sha256` in a detector release.
- The live crate embeds `skill/scripts/live-browser*.js` and
`modern-screenshot.umd.js` directly rather than through vendored copies, so
the binary and the installed skill cannot drift.
- `crates/browser/assets/` (an unused second copy of the bundle) is gone.
- `tests/lib/engine-bin.mjs` also accepts `target/release/impeccable`, so a
plain `cargo build --release -p impeccable` is enough to run `bun run test`.
Verified with the archive from a local detector build: `cargo test --workspace`
267 pass, oracle 795 pass / 0 fail / 0 missing, `bun run build` clean, the
default suite green, and the launcher's `engine-probe` handshake answering
through `skill/scripts/impeccable`.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vau2X53xGTjjTCXWMVBoNY
1 line
682 KiB
JSON
1 line
682 KiB
JSON
[{"name":"synthetic","css":"@media (max-width:600px){ .a{color:red} @supports (display:grid){ .b{color:blue}}}","rules":[{"selector":".a","declarations":[{"prop":"color","value":"red","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null},{"selector":".b","declarations":[{"prop":"color","value":"blue","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null}],"unwrapped":"@media (max-width:600px){ .a{color:red} @supports (display:grid){ .b{color:blue}}}"},{"name":"synthetic","css":"@media screen { @media (min-width:1px) { .a{color:red} } }","rules":[{"selector":".a","declarations":[{"prop":"color","value":"red","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null}],"unwrapped":"@media screen { @media (min-width:1px) { .a{color:red} } }"},{"name":"synthetic","css":"@supports (display:grid) and (not (display:inline-grid)) { .grid{display:grid} }","rules":[{"selector":".grid","declarations":[{"prop":"display","value":"grid","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null}],"unwrapped":"@supports (display:grid) and (not (display:inline-grid)) { .grid{display:grid} }"},{"name":"synthetic","css":"@layer base { .a{color:red} } @layer{ .b{color:red} } @layer a, b; @layer x.y { .c{color:green} }","rules":[{"selector":".a","declarations":[{"prop":"color","value":"red","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null},{"selector":".b","declarations":[{"prop":"color","value":"red","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null},{"selector":".c","declarations":[{"prop":"color","value":"green","important":false}],"specificity":[0,1,0],"order":2,"isHover":false,"matchSelector":null}],"unwrapped":" .a{color:red} .b{color:red} @layer a, b; .c{color:green} "},{"name":"synthetic","css":"@layer utilities { @media (min-width: 640px) { .sm\\:flex { display: flex } } }","rules":[{"selector":".sm\\:flex","declarations":[{"prop":"display","value":"flex","important":false}],"specificity":[0,2,0],"order":0,"isHover":false,"matchSelector":null}],"unwrapped":" @media (min-width: 640px) { .sm\\:flex { display: flex } } "},{"name":"synthetic","css":"@media print { @layer foo { .p{margin:0} } }","rules":[{"selector":".p","declarations":[{"prop":"margin","value":"0","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null}],"unwrapped":"@media print { .p{margin:0} }"},{"name":"synthetic","css":"@layer a { @layer b { @layer c { .deep{x:y} } } }","rules":[{"selector":".deep","declarations":[{"prop":"x","value":"y","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null}],"unwrapped":" @layer b { @layer c { .deep{x:y} } } "},{"name":"synthetic","css":"@layer reset, base; @layer base { html{margin:0} } @layer reset { *{box-sizing:border-box} }","rules":[{"selector":"html","declarations":[{"prop":"margin","value":"0","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":"*","declarations":[{"prop":"box-sizing","value":"border-box","important":false}],"specificity":[0,0,0],"order":1,"isHover":false,"matchSelector":null}],"unwrapped":"@layer reset, base; html{margin:0} *{box-sizing:border-box} "},{"name":"synthetic","css":"@supports not (display:grid) { @media (max-width: 400px) { @layer x { .m{n:o} } } }","rules":[{"selector":".m","declarations":[{"prop":"n","value":"o","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null}],"unwrapped":"@supports not (display:grid) { @media (max-width: 400px) { .m{n:o} } }"},{"name":"synthetic","css":"@media (min-width: 640px) { .container { max-width: 640px } } @media (min-width: 768px) { .container { max-width: 768px } }","rules":[{"selector":".container","declarations":[{"prop":"max-width","value":"640px","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null},{"selector":".container","declarations":[{"prop":"max-width","value":"768px","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null}],"unwrapped":"@media (min-width: 640px) { .container { max-width: 640px } } @media (min-width: 768px) { .container { max-width: 768px } }"},{"name":"synthetic","css":"@media (prefers-reduced-motion: reduce) { *, ::before, ::after { animation-duration: 0.01ms !important; transition-duration: 0.01ms !important } }","rules":[{"selector":"*","declarations":[{"prop":"animation-duration","value":"0.01ms","important":true},{"prop":"transition-duration","value":"0.01ms","important":true}],"specificity":[0,0,0],"order":0,"isHover":false,"matchSelector":null},{"selector":"::before","declarations":[{"prop":"animation-duration","value":"0.01ms","important":true},{"prop":"transition-duration","value":"0.01ms","important":true}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null},{"selector":"::after","declarations":[{"prop":"animation-duration","value":"0.01ms","important":true},{"prop":"transition-duration","value":"0.01ms","important":true}],"specificity":[0,1,0],"order":2,"isHover":false,"matchSelector":null}],"unwrapped":"@media (prefers-reduced-motion: reduce) { *, ::before, ::after { animation-duration: 0.01ms !important; transition-duration: 0.01ms !important } }"},{"name":"synthetic","css":"@supports (backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px)) { .glass { backdrop-filter: blur(12px) } }","rules":[{"selector":".glass","declarations":[{"prop":"backdrop-filter","value":"blur(12px)","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null}],"unwrapped":"@supports (backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px)) { .glass { backdrop-filter: blur(12px) } }"},{"name":"synthetic","css":"@media (a{b) { .x{c:d} } .y{e:f}","rules":[],"unwrapped":"@media (a{b) { .x{c:d} } .y{e:f}"},{"name":"synthetic","css":"@media (a; b) { .x{c:d} } .y{e:f}","rules":[{"selector":".x","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null},{"selector":".y","declarations":[{"prop":"e","value":"f","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null}],"unwrapped":"@media (a; b) { .x{c:d} } .y{e:f}"},{"name":"synthetic","css":"@media (a; b { .x{c:d} } .y{e:f}","rules":[],"unwrapped":"@media (a; b { .x{c:d} } .y{e:f}"},{"name":"synthetic","css":"@media (a) foo { .x{c:d} } .y{e:f}","rules":[{"selector":".x","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null},{"selector":".y","declarations":[{"prop":"e","value":"f","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null}],"unwrapped":"@media (a) foo { .x{c:d} } .y{e:f}"},{"name":"synthetic","css":"@media { .x{c:d} } @media; .y{e:f} @media","rules":[{"selector":".x","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null},{"selector":".y","declarations":[{"prop":"e","value":"f","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null}],"unwrapped":"@media { .x{c:d} } @media; .y{e:f} @media"},{"name":"synthetic","css":"@media{}.b{c:d} @MEDIA (x){a{b:c}} @Layer X{a{b:c}} @supports(x:y){a{b:c}}","rules":[{"selector":".b","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null},{"selector":"a","declarations":[{"prop":"b","value":"c","important":false}],"specificity":[0,0,1],"order":1,"isHover":false,"matchSelector":null},{"selector":"a","declarations":[{"prop":"b","value":"c","important":false}],"specificity":[0,0,1],"order":2,"isHover":false,"matchSelector":null},{"selector":"a","declarations":[{"prop":"b","value":"c","important":false}],"specificity":[0,0,1],"order":3,"isHover":false,"matchSelector":null}],"unwrapped":"@media{}.b{c:d} @MEDIA (x){a{b:c}} @Layer X{a{b:c}} @supports(x:y){a{b:c}}"},{"name":"synthetic","css":"@media (x){ .b {c:d} .c{ }} ","rules":[{"selector":".b","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null},{"selector":".c","declarations":[],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null}],"unwrapped":"@media (x){ .b {c:d} .c{ }} "},{"name":"synthetic","css":"a{b:x;@media (y){c:d}} e{f:g}","rules":[{"selector":"a","declarations":[{"prop":"b","value":"x","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":"e","declarations":[{"prop":"f","value":"g","important":false}],"specificity":[0,0,1],"order":1,"isHover":false,"matchSelector":null}],"unwrapped":"a{b:x;@media (y){c:d}} e{f:g}"},{"name":"synthetic","css":".a:hover, .b:hover > .c, .d:hover.e, .f:hover ~ , .g:hover{color:red}","rules":[{"selector":".a:hover","declarations":[{"prop":"color","value":"red","important":false}],"specificity":[0,2,0],"order":0,"isHover":true,"matchSelector":".a"},{"selector":".b:hover>.c","declarations":[{"prop":"color","value":"red","important":false}],"specificity":[0,3,0],"order":1,"isHover":true,"matchSelector":".b>.c"},{"selector":".d:hover.e","declarations":[{"prop":"color","value":"red","important":false}],"specificity":[0,3,0],"order":2,"isHover":true,"matchSelector":".d.e"},{"selector":".f:hover~","declarations":[{"prop":"color","value":"red","important":false}],"specificity":[0,2,0],"order":3,"isHover":true,"matchSelector":null},{"selector":".g:hover","declarations":[{"prop":"color","value":"red","important":false}],"specificity":[0,2,0],"order":4,"isHover":true,"matchSelector":".g"}],"unwrapped":".a:hover, .b:hover > .c, .d:hover.e, .f:hover ~ , .g:hover{color:red}"},{"name":"synthetic","css":"a:hover>b{c:d} a:hover+b{c:d} a:hover b{c:d} a:hover >{c:d} a:hover b:hover{c:d} :hover{c:d} a:not(:hover){c:d} a:hover:focus{c:d}","rules":[{"selector":"a:hover>b","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,1,2],"order":0,"isHover":true,"matchSelector":"a>b"},{"selector":"a:hover+b","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,1,2],"order":1,"isHover":true,"matchSelector":"a+b"},{"selector":"a:hover b","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,1,2],"order":2,"isHover":true,"matchSelector":"a b"},{"selector":"a:hover>","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,1,1],"order":3,"isHover":true,"matchSelector":null},{"selector":"a:hover b:hover","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,2,2],"order":4,"isHover":true,"matchSelector":"a b"},{"selector":":hover","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,1,0],"order":5,"isHover":true,"matchSelector":null},{"selector":"a:not(:hover)","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,1,1],"order":6,"isHover":true,"matchSelector":"a:not()"},{"selector":"a:hover:focus","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,2,1],"order":7,"isHover":true,"matchSelector":"a:focus"}],"unwrapped":"a:hover>b{c:d} a:hover+b{c:d} a:hover b{c:d} a:hover >{c:d} a:hover b:hover{c:d} :hover{c:d} a:not(:hover){c:d} a:hover:focus{c:d}"},{"name":"synthetic","css":"a:hover, :hover.b, .b :hover .c, > a:hover{c:d}","rules":[{"selector":"a:hover","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,1,1],"order":0,"isHover":true,"matchSelector":"a"},{"selector":":hover.b","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,2,0],"order":1,"isHover":true,"matchSelector":".b"},{"selector":".b :hover .c","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,3,0],"order":2,"isHover":true,"matchSelector":".b * .c"},{"selector":">a:hover","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,1,1],"order":3,"isHover":true,"matchSelector":"*>a"}],"unwrapped":"a:hover, :hover.b, .b :hover .c, > a:hover{c:d}"},{"name":"synthetic","css":".a:HOVER{color:red} .a:hover-x{c:d} .hover{m:n} a:hovering{o:p} a\\:hover{c:d} a[data-x=\":hover\"]{c:d}","rules":[{"selector":".a:HOVER","declarations":[{"prop":"color","value":"red","important":false}],"specificity":[0,2,0],"order":0,"isHover":true,"matchSelector":".a"},{"selector":".a:hover-x","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,2,0],"order":1,"isHover":true,"matchSelector":".a-x"},{"selector":".hover","declarations":[{"prop":"m","value":"n","important":false}],"specificity":[0,1,0],"order":2,"isHover":false,"matchSelector":null},{"selector":"a:hovering","declarations":[{"prop":"o","value":"p","important":false}],"specificity":[0,1,1],"order":3,"isHover":false,"matchSelector":null},{"selector":"a\\:hover","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,1,1],"order":4,"isHover":true,"matchSelector":"a\\"},{"selector":"a[data-x=\":hover\"]","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,1,1],"order":5,"isHover":true,"matchSelector":"a[data-x=\"\"]"}],"unwrapped":".a:HOVER{color:red} .a:hover-x{c:d} .hover{m:n} a:hovering{o:p} a\\:hover{c:d} a[data-x=\":hover\"]{c:d}"},{"name":"synthetic","css":".a :hover .b{c:d} .a :hover .b{c:d} :hover > .b{c:d} .a > :hover{c:d} .a ~ :hover ~ .b{c:d}","rules":[{"selector":".a :hover .b","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,3,0],"order":0,"isHover":true,"matchSelector":".a * .b"},{"selector":".a :hover .b","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,3,0],"order":1,"isHover":true,"matchSelector":".a * .b"},{"selector":":hover>.b","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,2,0],"order":2,"isHover":true,"matchSelector":"*>.b"},{"selector":".a>:hover","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,2,0],"order":3,"isHover":true,"matchSelector":null},{"selector":".a~:hover~.b","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,3,0],"order":4,"isHover":true,"matchSelector":".a~*~.b"}],"unwrapped":".a :hover .b{c:d} .a :hover .b{c:d} :hover > .b{c:d} .a > :hover{c:d} .a ~ :hover ~ .b{c:d}"},{"name":"synthetic","css":".a:hover::before{content:\"\"} .btn:hover:not(:disabled){color:red}","rules":[{"selector":".a:hover::before","declarations":[{"prop":"content","value":"\"\"","important":false}],"specificity":[0,3,0],"order":0,"isHover":true,"matchSelector":".a::before"},{"selector":".btn:hover:not(:disabled)","declarations":[{"prop":"color","value":"red","important":false}],"specificity":[0,3,0],"order":1,"isHover":true,"matchSelector":".btn:not(:disabled)"}],"unwrapped":".a:hover::before{content:\"\"} .btn:hover:not(:disabled){color:red}"},{"name":"synthetic","css":"a, b, c , d{color:red}","rules":[{"selector":"a","declarations":[{"prop":"color","value":"red","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":"b","declarations":[{"prop":"color","value":"red","important":false}],"specificity":[0,0,1],"order":1,"isHover":false,"matchSelector":null},{"selector":"c","declarations":[{"prop":"color","value":"red","important":false}],"specificity":[0,0,1],"order":2,"isHover":false,"matchSelector":null},{"selector":"d","declarations":[{"prop":"color","value":"red","important":false}],"specificity":[0,0,1],"order":3,"isHover":false,"matchSelector":null}],"unwrapped":"a, b, c , d{color:red}"},{"name":"synthetic","css":".a[data-x=\"a,b\"], .b:is(.x, .y){color:red}","rules":[{"selector":".a[data-x=\"a,b\"]","declarations":[{"prop":"color","value":"red","important":false}],"specificity":[0,2,0],"order":0,"isHover":false,"matchSelector":null},{"selector":".b:is(.x,.y)","declarations":[{"prop":"color","value":"red","important":false}],"specificity":[0,2,0],"order":1,"isHover":false,"matchSelector":null}],"unwrapped":".a[data-x=\"a,b\"], .b:is(.x, .y){color:red}"},{"name":"synthetic","css":".a{color:red !important; b: c ! important ; d: e!IMPORTANT; f: g !ie; h: i!important !important}","rules":[{"selector":".a","declarations":[{"prop":"color","value":"red","important":true},{"prop":"b","value":"c","important":true},{"prop":"d","value":"e","important":true},{"prop":"f","value":"g","important":true}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null}],"unwrapped":".a{color:red !important; b: c ! important ; d: e!IMPORTANT; f: g !ie; h: i!important !important}"},{"name":"synthetic","css":"a{b:c!important !important} a{b:c !important d} a{b:c!importantx} a{b:!important} a{ b : c ; } a{b: c!important} a{b:c ! important}","rules":[{"selector":"a","declarations":[],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":"a","declarations":[],"specificity":[0,0,1],"order":1,"isHover":false,"matchSelector":null},{"selector":"a","declarations":[{"prop":"b","value":"c","important":true}],"specificity":[0,0,1],"order":2,"isHover":false,"matchSelector":null},{"selector":"a","declarations":[{"prop":"b","value":"","important":true}],"specificity":[0,0,1],"order":3,"isHover":false,"matchSelector":null},{"selector":"a","declarations":[{"prop":"b","value":"c","important":false}],"specificity":[0,0,1],"order":4,"isHover":false,"matchSelector":null},{"selector":"a","declarations":[{"prop":"b","value":"c","important":true}],"specificity":[0,0,1],"order":5,"isHover":false,"matchSelector":null},{"selector":"a","declarations":[{"prop":"b","value":"c","important":true}],"specificity":[0,0,1],"order":6,"isHover":false,"matchSelector":null}],"unwrapped":"a{b:c!important !important} a{b:c !important d} a{b:c!importantx} a{b:!important} a{ b : c ; } a{b: c!important} a{b:c ! important}"},{"name":"synthetic","css":".a{b: 1px !important; c: 2px ! important; d: 3px !important ; e:4px!important;}","rules":[{"selector":".a","declarations":[{"prop":"b","value":"1px","important":true},{"prop":"c","value":"2px","important":true},{"prop":"d","value":"3px","important":true},{"prop":"e","value":"4px","important":true}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null}],"unwrapped":".a{b: 1px !important; c: 2px ! important; d: 3px !important ; e:4px!important;}"},{"name":"synthetic","css":".a { --x: red ; color: var(--x); --y: { a: b } ; --z:; --w: ; --empty: ;}","rules":[{"selector":".a","declarations":[{"prop":"--x","value":"red","important":false},{"prop":"color","value":"var(--x)","important":false},{"prop":"--y","value":"{ a: b }","important":false},{"prop":"--z","value":"","important":false},{"prop":"--w","value":"","important":false},{"prop":"--empty","value":"","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null}],"unwrapped":".a { --x: red ; color: var(--x); --y: { a: b } ; --z:; --w: ; --empty: ;}"},{"name":"synthetic","css":":root{--brand: #87a8ff; --pad: 4px 8px } .card{border-left: 5px solid var(--brand); padding: var(--pad, 1px)}","rules":[{"selector":":root","declarations":[{"prop":"--brand","value":"#87a8ff","important":false},{"prop":"--pad","value":"4px 8px","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null},{"selector":".card","declarations":[{"prop":"border-left","value":"5px solid var(--brand)","important":false},{"prop":"padding","value":"var(--pad, 1px)","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null}],"unwrapped":":root{--brand: #87a8ff; --pad: 4px 8px } .card{border-left: 5px solid var(--brand); padding: var(--pad, 1px)}"},{"name":"synthetic","css":".a{ color : var( --x , red ) ; width: var(--w); z: var(--a,var(--b, 1px))}","rules":[{"selector":".a","declarations":[{"prop":"color","value":"var(--x, red )","important":false},{"prop":"width","value":"var(--w)","important":false},{"prop":"z","value":"var(--a,var(--b, 1px))","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null}],"unwrapped":".a{ color : var( --x , red ) ; width: var(--w); z: var(--a,var(--b, 1px))}"},{"name":"synthetic","css":".a{color:red;;;} .b{color:red","rules":[{"selector":".a","declarations":[{"prop":"color","value":"red","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null},{"selector":".b","declarations":[{"prop":"color","value":"red","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null}],"unwrapped":".a{color:red;;;} .b{color:red"},{"name":"synthetic","css":".a{color:red} } .b{color:blue}","rules":[{"selector":".a","declarations":[{"prop":"color","value":"red","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null},{"selector":"} .b","declarations":[{"prop":"color","value":"blue","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null}],"unwrapped":".a{color:red} } .b{color:blue}"},{"name":"synthetic","css":".a{color:red;}}}.b{color:blue}","rules":[{"selector":".a","declarations":[{"prop":"color","value":"red","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null},{"selector":"}}.b","declarations":[{"prop":"color","value":"blue","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null}],"unwrapped":".a{color:red;}}}.b{color:blue}"},{"name":"synthetic","css":".a{color:red}@media (a){.b{color:blue}","rules":[{"selector":".a","declarations":[{"prop":"color","value":"red","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null},{"selector":".b","declarations":[{"prop":"color","value":"blue","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null}],"unwrapped":".a{color:red}@media (a){.b{color:blue}"},{"name":"synthetic","css":".a { color: red } .b { color: blue","rules":[{"selector":".a","declarations":[{"prop":"color","value":"red","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null},{"selector":".b","declarations":[{"prop":"color","value":"blue","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null}],"unwrapped":".a { color: red } .b { color: blue"},{"name":"synthetic","css":"a{b:c;d","rules":[{"selector":"a","declarations":[{"prop":"b","value":"c","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null}],"unwrapped":"a{b:c;d"},{"name":"synthetic","css":"a{b}","rules":[{"selector":"a","declarations":[],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null}],"unwrapped":"a{b}"},{"name":"synthetic","css":"a{color:}","rules":[{"selector":"a","declarations":[{"prop":"color","value":"","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null}],"unwrapped":"a{color:}"},{"name":"synthetic","css":"{a:b}","rules":[],"unwrapped":"{a:b}"},{"name":"synthetic","css":"}","rules":[],"unwrapped":"}"},{"name":"synthetic","css":"{","rules":[],"unwrapped":"{"},{"name":"synthetic","css":"a{","rules":[{"selector":"a","declarations":[],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null}],"unwrapped":"a{"},{"name":"synthetic","css":"a{}","rules":[{"selector":"a","declarations":[],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null}],"unwrapped":"a{}"},{"name":"synthetic","css":"","rules":[],"unwrapped":""},{"name":"synthetic","css":" ","rules":[],"unwrapped":" "},{"name":"synthetic","css":"a","rules":[],"unwrapped":"a"},{"name":"synthetic","css":".a{color:red}\"str}\"{}.b{color:blue}","rules":[{"selector":".a","declarations":[{"prop":"color","value":"red","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null},{"selector":"\"str}\"","declarations":[],"specificity":[0,0,1],"order":1,"isHover":false,"matchSelector":null},{"selector":".b","declarations":[{"prop":"color","value":"blue","important":false}],"specificity":[0,1,0],"order":2,"isHover":false,"matchSelector":null}],"unwrapped":".a{color:red}\"str}\"{}.b{color:blue}"},{"name":"synthetic","css":"a{color:red;background:blue{}} a{color:red;background:blue{c:d} e:f;g:h;} i{j:k}} l{m:n}","rules":[{"selector":"a","declarations":[{"prop":"color","value":"red","important":false},{"prop":"background","value":"blue{}","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":"a","declarations":[{"prop":"color","value":"red","important":false},{"prop":"background","value":"blue{c:d} e:f","important":false},{"prop":"g","value":"h","important":false}],"specificity":[0,0,1],"order":1,"isHover":false,"matchSelector":null},{"selector":"i","declarations":[{"prop":"j","value":"k","important":false}],"specificity":[0,0,1],"order":2,"isHover":false,"matchSelector":null},{"selector":"} l","declarations":[{"prop":"m","value":"n","important":false}],"specificity":[0,0,1],"order":3,"isHover":false,"matchSelector":null}],"unwrapped":"a{color:red;background:blue{}} a{color:red;background:blue{c:d} e:f;g:h;} i{j:k}} l{m:n}"},{"name":"synthetic","css":"a{b:x;c:d{e:f}} a{b:x;c:hover{d:e}} a{b:x;c{d:e}} a{color:red;--y} a{;b:c} a{b:c;;d:e}","rules":[{"selector":"a","declarations":[{"prop":"b","value":"x","important":false},{"prop":"c","value":"d{e:f}","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":"a","declarations":[{"prop":"b","value":"x","important":false},{"prop":"c","value":"hover{d:e}","important":false}],"specificity":[0,0,1],"order":1,"isHover":false,"matchSelector":null},{"selector":"a","declarations":[{"prop":"b","value":"x","important":false}],"specificity":[0,0,1],"order":2,"isHover":false,"matchSelector":null},{"selector":"a","declarations":[{"prop":"color","value":"red","important":false}],"specificity":[0,0,1],"order":3,"isHover":false,"matchSelector":null},{"selector":"a","declarations":[{"prop":"b","value":"c","important":false}],"specificity":[0,0,1],"order":4,"isHover":false,"matchSelector":null},{"selector":"a","declarations":[{"prop":"b","value":"c","important":false},{"prop":"d","value":"e","important":false}],"specificity":[0,0,1],"order":5,"isHover":false,"matchSelector":null}],"unwrapped":"a{b:x;c:d{e:f}} a{b:x;c:hover{d:e}} a{b:x;c{d:e}} a{color:red;--y} a{;b:c} a{b:c;;d:e}"},{"name":"synthetic","css":"a{b:x;&:hover{c:d}} a{&:hover{c:d}} a{b:x;> c{d:e}} a{b:x;.c{d:e}}","rules":[{"selector":"a","declarations":[{"prop":"b","value":"x","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":"a","declarations":[],"specificity":[0,0,1],"order":1,"isHover":false,"matchSelector":null},{"selector":"a","declarations":[{"prop":"b","value":"x","important":false}],"specificity":[0,0,1],"order":2,"isHover":false,"matchSelector":null},{"selector":"a","declarations":[{"prop":"b","value":"x","important":false}],"specificity":[0,0,1],"order":3,"isHover":false,"matchSelector":null}],"unwrapped":"a{b:x;&:hover{c:d}} a{&:hover{c:d}} a{b:x;> c{d:e}} a{b:x;.c{d:e}}"},{"name":"synthetic","css":".a{content:\"\\\n\"} .b{content:\"multi\\\nline\"} .c{content:\"bad\nstring\"; color:red}","rules":[{"selector":".a","declarations":[{"prop":"content","value":"\"\"","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null},{"selector":".b","declarations":[{"prop":"content","value":"\"multiline\"","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null},{"selector":".c","declarations":[{"prop":"content","value":"\"bad\nstring\"; color:red}","important":false}],"specificity":[0,1,0],"order":2,"isHover":false,"matchSelector":null}],"unwrapped":".a{content:\"\\\n\"} .b{content:\"multi\\\nline\"} .c{content:\"bad\nstring\"; color:red}"},{"name":"synthetic","css":".a{c:\"unterminated} .b{color:red}","rules":[{"selector":".a","declarations":[{"prop":"c","value":"\"unterminated} .b{color:red}\"","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null}],"unwrapped":".a{c:\"unterminated} .b{color:red}"},{"name":"synthetic","css":".a{c:url(unterminated} .b{color:red}","rules":[{"selector":".a","declarations":[{"prop":"c","value":"url(unterminated} .b{color:red}","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null}],"unwrapped":".a{c:url(unterminated} .b{color:red}"},{"name":"synthetic","css":".a{c:url(\"unterminated} .b{color:red}","rules":[{"selector":".a","declarations":[{"prop":"c","value":"url(unterminated}\\ .b{color:red})","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null}],"unwrapped":".a{c:url(\"unterminated} .b{color:red}"},{"name":"synthetic","css":".a{c:calc(1px + } .b{color:red}","rules":[{"selector":".a","declarations":[{"prop":"c","value":"calc(1px + } .b{color:red}","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null}],"unwrapped":".a{c:calc(1px + } .b{color:red}"},{"name":"synthetic","css":".a{c:[ } .b{color:red}","rules":[{"selector":".a","declarations":[{"prop":"c","value":"[ } .b{color:red}","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null}],"unwrapped":".a{c:[ } .b{color:red}"},{"name":"synthetic","css":".a{width:50%} 50%{c:d} 5{c:d} .5{c:d} 5px{c:d} +a{c:d} .a + {c:d} .a > {c:d} > .a{c:d} ~{c:d}","rules":[{"selector":".a","declarations":[{"prop":"width","value":"50%","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null},{"selector":"50%","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,0,0],"order":1,"isHover":false,"matchSelector":null},{"selector":"5","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,0,0],"order":2,"isHover":false,"matchSelector":null},{"selector":".5","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,1,0],"order":3,"isHover":false,"matchSelector":null},{"selector":"5px","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,0,0],"order":4,"isHover":false,"matchSelector":null},{"selector":"+a","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,0,1],"order":5,"isHover":false,"matchSelector":null},{"selector":".a+","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,1,0],"order":6,"isHover":false,"matchSelector":null},{"selector":".a>","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,1,0],"order":7,"isHover":false,"matchSelector":null},{"selector":">.a","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,1,0],"order":8,"isHover":false,"matchSelector":null},{"selector":"~","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,0,0],"order":9,"isHover":false,"matchSelector":null}],"unwrapped":".a{width:50%} 50%{c:d} 5{c:d} .5{c:d} 5px{c:d} +a{c:d} .a + {c:d} .a > {c:d} > .a{c:d} ~{c:d}"},{"name":"synthetic","css":"/* only */","rules":[],"unwrapped":"/* only */"},{"name":"synthetic","css":".a{color: /* comment */ red; /*c*/ background:blue} /* between */ .b{c:d}","rules":[{"selector":".a","declarations":[{"prop":"color","value":"red","important":false},{"prop":"background","value":"blue","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null},{"selector":".b","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null}],"unwrapped":".a{color: /* comment */ red; /*c*/ background:blue} /* between */ .b{c:d}"},{"name":"synthetic","css":".a{color:red}/*}*/.b{color:blue}","rules":[{"selector":".a","declarations":[{"prop":"color","value":"red","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null},{"selector":".b","declarations":[{"prop":"color","value":"blue","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null}],"unwrapped":".a{color:red}/*}*/.b{color:blue}"},{"name":"synthetic","css":".a{color:red}\n/* trailing","rules":[{"selector":".a","declarations":[{"prop":"color","value":"red","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null}],"unwrapped":".a{color:red}\n/* trailing"},{"name":"synthetic","css":"/*! bang */ .a{color:red}","rules":[{"selector":".a","declarations":[{"prop":"color","value":"red","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null}],"unwrapped":"/*! bang */ .a{color:red}"},{"name":"synthetic","css":"a::after{content:\"}\"} b{c:d} c{d:\"}\"} e{f:g} h{i:c /* } */} d{e:f} j{b:url(}) } k{e:f}","rules":[{"selector":"a::after","declarations":[{"prop":"content","value":"\"}\"","important":false}],"specificity":[0,1,1],"order":0,"isHover":false,"matchSelector":null},{"selector":"b","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,0,1],"order":1,"isHover":false,"matchSelector":null},{"selector":"c","declarations":[{"prop":"d","value":"\"}\"","important":false}],"specificity":[0,0,1],"order":2,"isHover":false,"matchSelector":null},{"selector":"e","declarations":[{"prop":"f","value":"g","important":false}],"specificity":[0,0,1],"order":3,"isHover":false,"matchSelector":null},{"selector":"h","declarations":[{"prop":"i","value":"c","important":false}],"specificity":[0,0,1],"order":4,"isHover":false,"matchSelector":null},{"selector":"d","declarations":[{"prop":"e","value":"f","important":false}],"specificity":[0,0,1],"order":5,"isHover":false,"matchSelector":null},{"selector":"j","declarations":[{"prop":"b","value":"url(})","important":false}],"specificity":[0,0,1],"order":6,"isHover":false,"matchSelector":null},{"selector":"k","declarations":[{"prop":"e","value":"f","important":false}],"specificity":[0,0,1],"order":7,"isHover":false,"matchSelector":null}],"unwrapped":"a::after{content:\"}\"} b{c:d} c{d:\"}\"} e{f:g} h{i:c /* } */} d{e:f} j{b:url(}) } k{e:f}"},{"name":"synthetic","css":"a{b:red /* x */ blue; c: red\n blue\t green; d:(1+2); e:[a b]; f:{a:b}; g:foo(bar(baz)); h:a,b,,c; i:a , , b; j:foo( , ); k:foo(1 2)}","rules":[{"selector":"a","declarations":[{"prop":"b","value":"red blue","important":false},{"prop":"c","value":"red blue green","important":false},{"prop":"d","value":"(1+2)","important":false},{"prop":"e","value":"[a b]","important":false},{"prop":"f","value":"{a:b}","important":false},{"prop":"g","value":"foo(bar(baz))","important":false},{"prop":"h","value":"a,b,,c","important":false},{"prop":"i","value":"a,,b","important":false},{"prop":"j","value":"foo(,)","important":false},{"prop":"k","value":"foo(1 2)","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null}],"unwrapped":"a{b:red /* x */ blue; c: red\n blue\t green; d:(1+2); e:[a b]; f:{a:b}; g:foo(bar(baz)); h:a,b,,c; i:a , , b; j:foo( , ); k:foo(1 2)}"},{"name":"synthetic","css":"a{b:1px !important;} a{b: x } a{b:x\n} a{b:x;\n} a{b:x /**/} a{b:x/**/y} a{b:x/**/} a{b:/**/x}","rules":[{"selector":"a","declarations":[{"prop":"b","value":"1px","important":true}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":"a","declarations":[{"prop":"b","value":"x","important":false}],"specificity":[0,0,1],"order":1,"isHover":false,"matchSelector":null},{"selector":"a","declarations":[{"prop":"b","value":"x","important":false}],"specificity":[0,0,1],"order":2,"isHover":false,"matchSelector":null},{"selector":"a","declarations":[{"prop":"b","value":"x","important":false}],"specificity":[0,0,1],"order":3,"isHover":false,"matchSelector":null},{"selector":"a","declarations":[{"prop":"b","value":"x","important":false}],"specificity":[0,0,1],"order":4,"isHover":false,"matchSelector":null},{"selector":"a","declarations":[{"prop":"b","value":"x y","important":false}],"specificity":[0,0,1],"order":5,"isHover":false,"matchSelector":null},{"selector":"a","declarations":[{"prop":"b","value":"x","important":false}],"specificity":[0,0,1],"order":6,"isHover":false,"matchSelector":null},{"selector":"a","declarations":[{"prop":"b","value":"x","important":false}],"specificity":[0,0,1],"order":7,"isHover":false,"matchSelector":null}],"unwrapped":"a{b:1px !important;} a{b: x } a{b:x\n} a{b:x;\n} a{b:x /**/} a{b:x/**/y} a{b:x/**/} a{b:/**/x}"},{"name":"synthetic","css":".a{color:red}<!-- .b{color:blue} -->","rules":[{"selector":".a","declarations":[{"prop":"color","value":"red","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null},{"selector":".b","declarations":[{"prop":"color","value":"blue","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null}],"unwrapped":".a{color:red}<!-- .b{color:blue} -->"},{"name":"synthetic","css":"@import url(x.css); @import 'y.css' layer(base) supports(display:grid) screen; .z{color:red}","rules":[{"selector":".z","declarations":[{"prop":"color","value":"red","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null}],"unwrapped":"@import url(x.css); @import 'y.css' layer(base) supports(display:grid) screen; .z{color:red}"},{"name":"synthetic","css":"@font-face{font-family:x; src: url(x.woff2) format(\"woff2\")} a{b:c}","rules":[{"selector":"a","declarations":[{"prop":"b","value":"c","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null}],"unwrapped":"@font-face{font-family:x; src: url(x.woff2) format(\"woff2\")} a{b:c}"},{"name":"synthetic","css":"@keyframes x { from{opacity:0} to{opacity:1} } @-webkit-keyframes k2{from{a:b}} @media(x){@keyframes k3{from{a:b}} a{b:c}} .z{color:red}","rules":[{"selector":"a","declarations":[{"prop":"b","value":"c","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":".z","declarations":[{"prop":"color","value":"red","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null}],"unwrapped":"@keyframes x { from{opacity:0} to{opacity:1} } @-webkit-keyframes k2{from{a:b}} @media(x){@keyframes k3{from{a:b}} a{b:c}} .z{color:red}"},{"name":"synthetic","css":"@page{margin:0} @page :first{margin:1px} @container (min-width: 1px){ .a{color:red}} @scope (.x){ .y{c:d}} @starting-style{ .z{opacity:0}}","rules":[],"unwrapped":"@page{margin:0} @page :first{margin:1px} @container (min-width: 1px){ .a{color:red}} @scope (.x){ .y{c:d}} @starting-style{ .z{opacity:0}}"},{"name":"synthetic","css":"@charset \"utf-8\"; @namespace svg url(http://www.w3.org/2000/svg); a{b:c}","rules":[{"selector":"a","declarations":[{"prop":"b","value":"c","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null}],"unwrapped":"@charset \"utf-8\"; @namespace svg url(http://www.w3.org/2000/svg); a{b:c}"},{"name":"synthetic","css":"@font-face{font-family:x} @media (x){ @font-face{font-family:y} .z{c:d} }","rules":[{"selector":".z","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null}],"unwrapped":"@font-face{font-family:x} @media (x){ @font-face{font-family:y} .z{c:d} }"},{"name":"synthetic","css":"a{b:c}@font-face{d:e}f{g:h}","rules":[{"selector":"a","declarations":[{"prop":"b","value":"c","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":"f","declarations":[{"prop":"g","value":"h","important":false}],"specificity":[0,0,1],"order":1,"isHover":false,"matchSelector":null}],"unwrapped":"a{b:c}@font-face{d:e}f{g:h}"},{"name":"synthetic","css":".a{color:red}@media{}.b{c:d}","rules":[{"selector":".a","declarations":[{"prop":"color","value":"red","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null},{"selector":".b","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null}],"unwrapped":".a{color:red}@media{}.b{c:d}"},{"name":"synthetic","css":".A > .B{COLOR:Red} html{-webkit-text-size-adjust:100%} a{width:100PX;color:Rgb(1,2,3)}","rules":[{"selector":".A>.B","declarations":[{"prop":"COLOR","value":"Red","important":false}],"specificity":[0,2,0],"order":0,"isHover":false,"matchSelector":null},{"selector":"html","declarations":[{"prop":"-webkit-text-size-adjust","value":"100%","important":false}],"specificity":[0,0,1],"order":1,"isHover":false,"matchSelector":null},{"selector":"a","declarations":[{"prop":"width","value":"100PX","important":false},{"prop":"color","value":"Rgb(1,2,3)","important":false}],"specificity":[0,0,1],"order":2,"isHover":false,"matchSelector":null}],"unwrapped":".A > .B{COLOR:Red} html{-webkit-text-size-adjust:100%} a{width:100PX;color:Rgb(1,2,3)}"},{"name":"synthetic","css":".a{background: url( foo.png ) no-repeat , linear-gradient( 90deg , red 0% , blue 100% )}","rules":[{"selector":".a","declarations":[{"prop":"background","value":"url(foo.png)no-repeat,linear-gradient(90deg,red 0%,blue 100%)","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null}],"unwrapped":".a{background: url( foo.png ) no-repeat , linear-gradient( 90deg , red 0% , blue 100% )}"},{"name":"synthetic","css":".a{transition: all .3s ease-in-out,color 1s; animation: spin 1s linear infinite}","rules":[{"selector":".a","declarations":[{"prop":"transition","value":"all .3s ease-in-out,color 1s","important":false},{"prop":"animation","value":"spin 1s linear infinite","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null}],"unwrapped":".a{transition: all .3s ease-in-out,color 1s; animation: spin 1s linear infinite}"},{"name":"synthetic","css":".a{font: italic bold 12px/30px Georgia, serif; font: 12px / 1.5 x}","rules":[{"selector":".a","declarations":[{"prop":"font","value":"italic bold 12px/30px Georgia,serif","important":false},{"prop":"font","value":"12px/1.5 x","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null}],"unwrapped":".a{font: italic bold 12px/30px Georgia, serif; font: 12px / 1.5 x}"},{"name":"synthetic","css":".a{width: calc( 100% - 2px ); height: calc(1px + 2px*3); x: calc( (1 + 2) * 3 )}","rules":[{"selector":".a","declarations":[{"prop":"width","value":"calc(100% - 2px)","important":false},{"prop":"height","value":"calc(1px + 2px*3)","important":false},{"prop":"x","value":"calc((1 + 2)*3)","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null}],"unwrapped":".a{width: calc( 100% - 2px ); height: calc(1px + 2px*3); x: calc( (1 + 2) * 3 )}"},{"name":"synthetic","css":".a{margin:-1px +2px .5em 1.50px 010px; b:1 -2; c:1 - 2; d:1-2; e: 1px+2px; f: a+b; g:1*2}","rules":[{"selector":".a","declarations":[{"prop":"margin","value":"-1px+2px .5em 1.50px 010px","important":false},{"prop":"b","value":"1-2","important":false},{"prop":"c","value":"1 - 2","important":false},{"prop":"d","value":"1-2","important":false},{"prop":"e","value":"1px+2px","important":false},{"prop":"f","value":"a+b","important":false},{"prop":"g","value":"1*2","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null}],"unwrapped":".a{margin:-1px +2px .5em 1.50px 010px; b:1 -2; c:1 - 2; d:1-2; e: 1px+2px; f: a+b; g:1*2}"},{"name":"synthetic","css":".a{transform: translate(10px,20px) rotate(45deg); filter: blur( 2px ); grid-template-columns: repeat( auto-fill , minmax( 100px , 1fr ) )}","rules":[{"selector":".a","declarations":[{"prop":"transform","value":"translate(10px,20px) rotate(45deg)","important":false},{"prop":"filter","value":"blur(2px)","important":false},{"prop":"grid-template-columns","value":"repeat(auto-fill,minmax(100px,1fr))","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null}],"unwrapped":".a{transform: translate(10px,20px) rotate(45deg); filter: blur( 2px ); grid-template-columns: repeat( auto-fill , minmax( 100px , 1fr ) )}"},{"name":"synthetic","css":".a{color:#FFF; background:#abcdef80; content:\"a b\"; font-family: \"Foo Bar\" , sans-serif; x: 'single'; y: \"esc\\\"aped\"}","rules":[{"selector":".a","declarations":[{"prop":"color","value":"#FFF","important":false},{"prop":"background","value":"#abcdef80","important":false},{"prop":"content","value":"\"a b\"","important":false},{"prop":"font-family","value":"\"Foo Bar\",sans-serif","important":false},{"prop":"x","value":"\"single\"","important":false},{"prop":"y","value":"\"esc\\\"aped\"","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null}],"unwrapped":".a{color:#FFF; background:#abcdef80; content:\"a b\"; font-family: \"Foo Bar\" , sans-serif; x: 'single'; y: \"esc\\\"aped\"}"},{"name":"synthetic","css":".a::before{content:\"\\201C\"} .b::after{content:\"\\\"}\"} .c{content:'}'}","rules":[{"selector":".a::before","declarations":[{"prop":"content","value":"\"“\"","important":false}],"specificity":[0,2,0],"order":0,"isHover":false,"matchSelector":null},{"selector":".b::after","declarations":[{"prop":"content","value":"\"\\\"}\"","important":false}],"specificity":[0,2,0],"order":1,"isHover":false,"matchSelector":null},{"selector":".c","declarations":[{"prop":"content","value":"\"}\"","important":false}],"specificity":[0,1,0],"order":2,"isHover":false,"matchSelector":null}],"unwrapped":".a::before{content:\"\\201C\"} .b::after{content:\"\\\"}\"} .c{content:'}'}"},{"name":"synthetic","css":".a{background:URL(x.png); b:url( \"x\" ); c:url(\"x y.png\"); d:url(x y.png); e:url(x)y; f:image-set(url(x) 1x)}","rules":[{"selector":".a","declarations":[{"prop":"background","value":"url(x.png)","important":false},{"prop":"b","value":"url(x)","important":false},{"prop":"c","value":"url(x\\ y.png)","important":false},{"prop":"d","value":"url(x y.png)","important":false},{"prop":"e","value":"url(x)y","important":false},{"prop":"f","value":"image-set(url(x)1x)","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null}],"unwrapped":".a{background:URL(x.png); b:url( \"x\" ); c:url(\"x y.png\"); d:url(x y.png); e:url(x)y; f:image-set(url(x) 1x)}"},{"name":"synthetic","css":".a{color:rgb(0 0 0 / 50%); b: rgb( 1 , 2 , 3 ); c: hsl(120deg 100% 50%)}","rules":[{"selector":".a","declarations":[{"prop":"color","value":"rgb(0 0 0/50%)","important":false},{"prop":"b","value":"rgb(1,2,3)","important":false},{"prop":"c","value":"hsl(120deg 100% 50%)","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null}],"unwrapped":".a{color:rgb(0 0 0 / 50%); b: rgb( 1 , 2 , 3 ); c: hsl(120deg 100% 50%)}"},{"name":"synthetic","css":".a{unicode-range: U+0025-00FF, u+4??; x: 1/2 ; y: a/b; aspect-ratio: 16 / 9}","rules":[{"selector":".a","declarations":[{"prop":"unicode-range","value":"U+0025-00FF,u+4??","important":false},{"prop":"x","value":"1/2","important":false},{"prop":"y","value":"a/b","important":false},{"prop":"aspect-ratio","value":"16/9","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null}],"unwrapped":".a{unicode-range: U+0025-00FF, u+4??; x: 1/2 ; y: a/b; aspect-ratio: 16 / 9}"},{"name":"synthetic","css":"a{b:1E3;c:1e-3px;d:.5;e:0.50;f:+.5;g:1.2.3;h:1..2;i:.;j:-;k:--;l:--x;m:@x;n:$x;o:x$;p:x @y;q:#;r:#ggg}","rules":[{"selector":"a","declarations":[{"prop":"b","value":"1E3","important":false},{"prop":"c","value":"1e-3px","important":false},{"prop":"d","value":".5","important":false},{"prop":"e","value":"0.50","important":false},{"prop":"f","value":"+.5","important":false},{"prop":"g","value":"1.2 .3","important":false},{"prop":"h","value":"1..2","important":false},{"prop":"i","value":".","important":false},{"prop":"j","value":"-","important":false},{"prop":"k","value":"--","important":false},{"prop":"l","value":"--x","important":false},{"prop":"m","value":"@x","important":false},{"prop":"n","value":"$x","important":false},{"prop":"o","value":"x$","important":false},{"prop":"p","value":"x @y","important":false},{"prop":"q","value":"#","important":false},{"prop":"r","value":"#ggg","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null}],"unwrapped":"a{b:1E3;c:1e-3px;d:.5;e:0.50;f:+.5;g:1.2.3;h:1..2;i:.;j:-;k:--;l:--x;m:@x;n:$x;o:x$;p:x @y;q:#;r:#ggg}"},{"name":"synthetic","css":"a{*b:c;_d:e;b:1\\9;c:expression(1);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#80000000,endColorstr=#80000000)}","rules":[{"selector":"a","declarations":[{"prop":"*b","value":"c","important":false},{"prop":"_d","value":"e","important":false},{"prop":"b","value":"1\\9","important":false},{"prop":"c","value":"expression(1)","important":false},{"prop":"filter","value":"progid:DXImageTransform.Microsoft.gradient(startColorstr=#80000000,endColorstr=#80000000)","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null}],"unwrapped":"a{*b:c;_d:e;b:1\\9;c:expression(1);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#80000000,endColorstr=#80000000)}"},{"name":"synthetic","css":"a{b:c;}\r\nd{e:f} g{h:i;}\f j{k:l} m{n:o;}\u000b p{q:r}","rules":[{"selector":"a","declarations":[{"prop":"b","value":"c","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":"d","declarations":[{"prop":"e","value":"f","important":false}],"specificity":[0,0,1],"order":1,"isHover":false,"matchSelector":null},{"selector":"g","declarations":[{"prop":"h","value":"i","important":false}],"specificity":[0,0,1],"order":2,"isHover":false,"matchSelector":null},{"selector":"j","declarations":[{"prop":"k","value":"l","important":false}],"specificity":[0,0,1],"order":3,"isHover":false,"matchSelector":null},{"selector":"m","declarations":[{"prop":"n","value":"o","important":false}],"specificity":[0,0,1],"order":4,"isHover":false,"matchSelector":null},{"selector":"p","declarations":[{"prop":"q","value":"r","important":false}],"specificity":[0,0,1],"order":5,"isHover":false,"matchSelector":null}],"unwrapped":"a{b:c;}\r\nd{e:f} g{h:i;}\f j{k:l} m{n:o;}\u000b p{q:r}"},{"name":"synthetic","css":".a{margin: 0 0 0 0} .b{margin: 0 auto 0px 1e3px} .c{padding: 1px 2px 3px}","rules":[{"selector":".a","declarations":[{"prop":"margin","value":"0 0 0 0","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null},{"selector":".b","declarations":[{"prop":"margin","value":"0 auto 0px 1e3px","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null},{"selector":".c","declarations":[{"prop":"padding","value":"1px 2px 3px","important":false}],"specificity":[0,1,0],"order":2,"isHover":false,"matchSelector":null}],"unwrapped":".a{margin: 0 0 0 0} .b{margin: 0 auto 0px 1e3px} .c{padding: 1px 2px 3px}"},{"name":"synthetic","css":".a{b:1px 2px} .a{b:1px2px} .a{b:1e3 1e-3} .a{b:#fff #000} .a{b:x#fff} .a{b:#fff x} .a{b:1px#fff} .a{b:x -y} .a{b:x --y} .a{b:x -1} .a{b:) x} .a{b:x ) y}","rules":[{"selector":".a","declarations":[{"prop":"b","value":"1px 2px","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null},{"selector":".a","declarations":[{"prop":"b","value":"1px2px","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null},{"selector":".a","declarations":[{"prop":"b","value":"1e3 1e-3","important":false}],"specificity":[0,1,0],"order":2,"isHover":false,"matchSelector":null},{"selector":".a","declarations":[{"prop":"b","value":"#fff #000","important":false}],"specificity":[0,1,0],"order":3,"isHover":false,"matchSelector":null},{"selector":".a","declarations":[{"prop":"b","value":"x #fff","important":false}],"specificity":[0,1,0],"order":4,"isHover":false,"matchSelector":null},{"selector":".a","declarations":[{"prop":"b","value":"#fff x","important":false}],"specificity":[0,1,0],"order":5,"isHover":false,"matchSelector":null},{"selector":".a","declarations":[{"prop":"b","value":"1px #fff","important":false}],"specificity":[0,1,0],"order":6,"isHover":false,"matchSelector":null},{"selector":".a","declarations":[{"prop":"b","value":"x -y","important":false}],"specificity":[0,1,0],"order":7,"isHover":false,"matchSelector":null},{"selector":".a","declarations":[{"prop":"b","value":"x --y","important":false}],"specificity":[0,1,0],"order":8,"isHover":false,"matchSelector":null},{"selector":".a","declarations":[{"prop":"b","value":"x -1","important":false}],"specificity":[0,1,0],"order":9,"isHover":false,"matchSelector":null},{"selector":".a","declarations":[{"prop":"b","value":") x","important":false}],"specificity":[0,1,0],"order":10,"isHover":false,"matchSelector":null},{"selector":".a","declarations":[{"prop":"b","value":"x ) y","important":false}],"specificity":[0,1,0],"order":11,"isHover":false,"matchSelector":null}],"unwrapped":".a{b:1px 2px} .a{b:1px2px} .a{b:1e3 1e-3} .a{b:#fff #000} .a{b:x#fff} .a{b:#fff x} .a{b:1px#fff} .a{b:x -y} .a{b:x --y} .a{b:x -1} .a{b:) x} .a{b:x ) y}"},{"name":"synthetic","css":"*{a:b} :root{c:d} ::selection{e:f} :root:hover{g:h}","rules":[{"selector":"*","declarations":[{"prop":"a","value":"b","important":false}],"specificity":[0,0,0],"order":0,"isHover":false,"matchSelector":null},{"selector":":root","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null},{"selector":"::selection","declarations":[{"prop":"e","value":"f","important":false}],"specificity":[0,1,0],"order":2,"isHover":false,"matchSelector":null},{"selector":":root:hover","declarations":[{"prop":"g","value":"h","important":false}],"specificity":[0,2,0],"order":3,"isHover":true,"matchSelector":":root"}],"unwrapped":"*{a:b} :root{c:d} ::selection{e:f} :root:hover{g:h}"},{"name":"synthetic","css":"a:is(.x,.y):where(#z){c:d} a:not( .x , .y ){c:d} :where(.a .b, .c) > d{e:f} :has(> img){c:d}","rules":[{"selector":"a:is(.x,.y):where(#z)","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,1,1],"order":0,"isHover":false,"matchSelector":null},{"selector":"a:not(.x,.y)","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,1,1],"order":1,"isHover":false,"matchSelector":null},{"selector":":where(.a .b,.c)>d","declarations":[{"prop":"e","value":"f","important":false}],"specificity":[0,0,1],"order":2,"isHover":false,"matchSelector":null},{"selector":":has(>img)","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,1,0],"order":3,"isHover":false,"matchSelector":null}],"unwrapped":"a:is(.x,.y):where(#z){c:d} a:not( .x , .y ){c:d} :where(.a .b, .c) > d{e:f} :has(> img){c:d}"},{"name":"synthetic","css":"li:nth-child(2n+1){c:d} li:nth-child( 2n + 1 ){c:d} li:nth-child(odd){c:d} li:nth-child(-n+3){c:d} li:nth-child(n){c:d} li:nth-of-type(3){c:d} li:nth-child(2 of .x){c:d} li:nth-last-child(+2n-1){c:d}","rules":[{"selector":"li:nth-child(2n+1)","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,1,1],"order":0,"isHover":false,"matchSelector":null},{"selector":"li:nth-child(2n+1)","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,1,1],"order":1,"isHover":false,"matchSelector":null},{"selector":"li:nth-child(odd)","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,1,1],"order":2,"isHover":false,"matchSelector":null},{"selector":"li:nth-child(-n+3)","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,1,1],"order":3,"isHover":false,"matchSelector":null},{"selector":"li:nth-child(n)","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,1,1],"order":4,"isHover":false,"matchSelector":null},{"selector":"li:nth-of-type(3)","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,1,1],"order":5,"isHover":false,"matchSelector":null},{"selector":"li:nth-child(2 of.x)","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,1,1],"order":6,"isHover":false,"matchSelector":null},{"selector":"li:nth-last-child(2n-1)","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,1,1],"order":7,"isHover":false,"matchSelector":null}],"unwrapped":"li:nth-child(2n+1){c:d} li:nth-child( 2n + 1 ){c:d} li:nth-child(odd){c:d} li:nth-child(-n+3){c:d} li:nth-child(n){c:d} li:nth-of-type(3){c:d} li:nth-child(2 of .x){c:d} li:nth-last-child(+2n-1){c:d}"},{"name":"synthetic","css":"p:lang(en, \"fr\"){c:d} ::slotted(span){c:d} :host(.x){c:d} :host-context(body.dark){c:d} :dir(rtl){c:d} a:foo( bar baz ){c:d} a:foo(){c:d} a::part(x){c:d}","rules":[{"selector":"p:lang(en,\"fr\")","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,1,1],"order":0,"isHover":false,"matchSelector":null},{"selector":"::slotted(span)","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null},{"selector":":host(.x)","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,1,0],"order":2,"isHover":false,"matchSelector":null},{"selector":":host-context(body.dark)","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,1,0],"order":3,"isHover":false,"matchSelector":null},{"selector":":dir(rtl)","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,1,0],"order":4,"isHover":false,"matchSelector":null},{"selector":"a:foo( bar baz )","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,1,1],"order":5,"isHover":false,"matchSelector":null},{"selector":"a:foo()","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,1,1],"order":6,"isHover":false,"matchSelector":null},{"selector":"a::part(x)","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,1,1],"order":7,"isHover":false,"matchSelector":null}],"unwrapped":"p:lang(en, \"fr\"){c:d} ::slotted(span){c:d} :host(.x){c:d} :host-context(body.dark){c:d} :dir(rtl){c:d} a:foo( bar baz ){c:d} a:foo(){c:d} a::part(x){c:d}"},{"name":"synthetic","css":"a > b , c+d ~ e f{color:red} g > h{i:j} k\n>\nl{m:n} a /deep/ b{c:d} *|* {c:d} |a{c:d} svg|circle{c:d}","rules":[{"selector":"a>b","declarations":[{"prop":"color","value":"red","important":false}],"specificity":[0,0,2],"order":0,"isHover":false,"matchSelector":null},{"selector":"c+d~e f","declarations":[{"prop":"color","value":"red","important":false}],"specificity":[0,0,4],"order":1,"isHover":false,"matchSelector":null},{"selector":"g>h","declarations":[{"prop":"i","value":"j","important":false}],"specificity":[0,0,2],"order":2,"isHover":false,"matchSelector":null},{"selector":"k>l","declarations":[{"prop":"m","value":"n","important":false}],"specificity":[0,0,2],"order":3,"isHover":false,"matchSelector":null},{"selector":"a/deep/b","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,0,3],"order":4,"isHover":false,"matchSelector":null},{"selector":"*|*","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,0,0],"order":5,"isHover":false,"matchSelector":null},{"selector":"|a","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,0,1],"order":6,"isHover":false,"matchSelector":null},{"selector":"svg|circle","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,0,2],"order":7,"isHover":false,"matchSelector":null}],"unwrapped":"a > b , c+d ~ e f{color:red} g > h{i:j} k\n>\nl{m:n} a /deep/ b{c:d} *|* {c:d} |a{c:d} svg|circle{c:d}"},{"name":"synthetic","css":"#id{c:d} a#id{c:d} #id.cls{c:d} .cls#id{c:d} #a#b{c:d} a#b c{d:e} #\\31 23{c:d}","rules":[{"selector":"#id","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[1,0,0],"order":0,"isHover":false,"matchSelector":null},{"selector":"a#id","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[1,0,1],"order":1,"isHover":false,"matchSelector":null},{"selector":"#id.cls","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[1,1,0],"order":2,"isHover":false,"matchSelector":null},{"selector":".cls#id","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[1,1,0],"order":3,"isHover":false,"matchSelector":null},{"selector":"#a#b","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[2,0,0],"order":4,"isHover":false,"matchSelector":null},{"selector":"a#b c","declarations":[{"prop":"d","value":"e","important":false}],"specificity":[1,0,2],"order":5,"isHover":false,"matchSelector":null},{"selector":"#\\31 23","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,0,0],"order":6,"isHover":false,"matchSelector":null}],"unwrapped":"#id{c:d} a#id{c:d} #id.cls{c:d} .cls#id{c:d} #a#b{c:d} a#b c{d:e} #\\31 23{c:d}"},{"name":"synthetic","css":"a[b]{c:d} a[b=c]{c:d} a[b=\"c\"]{c:d} a[b='c']{c:d} a[ b |= c ]{c:d} a[b=\"c\" i]{c:d} a[b=c s]{c:d} a[ data-x = \"y\" i ]{c:d} a[*|b]{c:d} a[|b]{c:d}","rules":[{"selector":"a[b]","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,1,1],"order":0,"isHover":false,"matchSelector":null},{"selector":"a[b=c]","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,1,1],"order":1,"isHover":false,"matchSelector":null},{"selector":"a[b=\"c\"]","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,1,1],"order":2,"isHover":false,"matchSelector":null},{"selector":"a[b=\"c\"]","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,1,1],"order":3,"isHover":false,"matchSelector":null},{"selector":"a[b|=c]","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,1,1],"order":4,"isHover":false,"matchSelector":null},{"selector":"a[b=\"c\"i]","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,1,1],"order":5,"isHover":false,"matchSelector":null},{"selector":"a[b=c s]","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,1,1],"order":6,"isHover":false,"matchSelector":null},{"selector":"a[data-x=\"y\"i]","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,1,1],"order":7,"isHover":false,"matchSelector":null},{"selector":"a[*|b]","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,1,1],"order":8,"isHover":false,"matchSelector":null},{"selector":"a[|b]","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,1,1],"order":9,"isHover":false,"matchSelector":null}],"unwrapped":"a[b]{c:d} a[b=c]{c:d} a[b=\"c\"]{c:d} a[b='c']{c:d} a[ b |= c ]{c:d} a[b=\"c\" i]{c:d} a[b=c s]{c:d} a[ data-x = \"y\" i ]{c:d} a[*|b]{c:d} a[|b]{c:d}"},{"name":"synthetic","css":".a{color:red}","rules":[{"selector":".a","declarations":[{"prop":"color","value":"red","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null}],"unwrapped":".a{color:red}"},{"name":"synthetic","css":".é{color:red} .日本{color:blue} a[data-x=\"ünïcode\"]{c:d} .a{content:\"emoji 😀\"} .b{font-family:\"Nöto\"}","rules":[{"selector":".é","declarations":[{"prop":"color","value":"red","important":false}],"specificity":[0,0,0],"order":0,"isHover":false,"matchSelector":null},{"selector":".日本","declarations":[{"prop":"color","value":"blue","important":false}],"specificity":[0,0,0],"order":1,"isHover":false,"matchSelector":null},{"selector":"a[data-x=\"ünïcode\"]","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,1,1],"order":2,"isHover":false,"matchSelector":null},{"selector":".a","declarations":[{"prop":"content","value":"\"emoji 😀\"","important":false}],"specificity":[0,1,0],"order":3,"isHover":false,"matchSelector":null},{"selector":".b","declarations":[{"prop":"font-family","value":"\"Nöto\"","important":false}],"specificity":[0,1,0],"order":4,"isHover":false,"matchSelector":null}],"unwrapped":".é{color:red} .日本{color:blue} a[data-x=\"ünïcode\"]{c:d} .a{content:\"emoji 😀\"} .b{font-family:\"Nöto\"}"},{"name":"synthetic","css":".a{c:\\26 B; d: \\000026x; e:\\26x} .\\31 0{c:d} .a\\ b{c:d}","rules":[{"selector":".a","declarations":[{"prop":"c","value":"\\26 B","important":false},{"prop":"d","value":"\\000026x","important":false},{"prop":"e","value":"\\26x","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null},{"selector":".\\31 0","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,0,0],"order":1,"isHover":false,"matchSelector":null},{"selector":".a\\ b","declarations":[{"prop":"c","value":"d","important":false}],"specificity":[0,1,1],"order":2,"isHover":false,"matchSelector":null}],"unwrapped":".a{c:\\26 B; d: \\000026x; e:\\26x} .\\31 0{c:d} .a\\ b{c:d}"},{"name":"synthetic","css":".a{b:c} d{e:f}","rules":[{"selector":".a","declarations":[{"prop":"b","value":"c","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null},{"selector":"d","declarations":[{"prop":"e","value":"f","important":false}],"specificity":[0,0,1],"order":1,"isHover":false,"matchSelector":null}],"unwrapped":".a{b:c} d{e:f}"},{"name":"synthetic","css":".a{b:c}
d{e:f}","rules":[{"selector":".a","declarations":[{"prop":"b","value":"c","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null},{"selector":"d","declarations":[{"prop":"e","value":"f","important":false}],"specificity":[0,0,1],"order":1,"isHover":false,"matchSelector":null}],"unwrapped":".a{b:c}
d{e:f}"},{"name":"tests/fixtures/antipatterns/blinking-cursor.html","css":"\n * { margin: 0; padding: 0; box-sizing: border-box; }\n body { font-family: monospace, monospace; font-size: 16px; }\n .hero { padding: 40px; }\n .terminal { background: #111; color: #eee; padding: 24px; width: 600px; }\n\n @keyframes blink-anim { 50% { opacity: 0; } }\n @keyframes flicker { 0%, 49% { opacity: 1; } 50%, 100% { opacity: 0; } }\n @keyframes caret-blink { 0%, 50% { opacity: 1; } 51%, 100% { opacity: 0; } }\n @keyframes spin { to { transform: rotate(360deg); } }\n\n /* FLAG: solid block cursor in the hero terminal */\n .flag-block-cursor {\n display: inline-block; width: 10px; height: 18px;\n background: #33d17a; vertical-align: text-bottom;\n animation: blink-anim 1.1s steps(1) infinite;\n }\n\n /* FLAG: glyph cursor, animation name says nothing but keyframes toggle opacity */\n .flag-glyph-cursor { animation: flicker 1s steps(2) infinite; }\n\n /* FLAG: underscore bar cursor */\n .flag-underscore-cursor {\n display: inline-block; width: 12px; height: 3px;\n background: #eee; vertical-align: baseline;\n animation: caret-blink 0.9s steps(1) infinite;\n }\n\n /* PASS: same block cursor shape, but deep below the landing region */\n .pass-below-fold-cursor {\n display: inline-block; width: 10px; height: 18px;\n background: #33d17a;\n animation: blink-anim 1.1s steps(1) infinite;\n }\n\n /* PASS: cursor inside real editable surfaces */\n .pass-editable-cursor, .pass-textbox-cursor {\n display: inline-block; width: 10px; height: 18px;\n background: #444;\n animation: blink-anim 1s steps(1) infinite;\n }\n\n /* PASS: round pulsing dot stays with the pulsing-dot rule */\n .pass-round-dot {\n display: inline-block; width: 8px; height: 8px;\n background: #33d17a; border-radius: 50%;\n animation: blink-anim 2s steps(1) infinite;\n }\n\n /* PASS: spinner animates transform, not visibility */\n .pass-spinner {\n display: inline-block; width: 16px; height: 16px;\n border: 2px solid #999; border-top-color: #333; border-radius: 50%;\n animation: spin 1s linear infinite;\n }\n\n /* PASS: a blinking word is not a cursor shape */\n .pass-blinking-word { animation: flicker 1s steps(2) infinite; }\n\n /* PASS: large blinking panel fails the caret-size gates */\n .pass-blinking-panel {\n display: inline-block; width: 200px; height: 90px;\n background: #222;\n animation: blink-anim 2s steps(1) infinite;\n }\n\n .spacer { height: 1400px; }\n","rules":[{"selector":"*","declarations":[{"prop":"margin","value":"0","important":false},{"prop":"padding","value":"0","important":false},{"prop":"box-sizing","value":"border-box","important":false}],"specificity":[0,0,0],"order":0,"isHover":false,"matchSelector":null},{"selector":"body","declarations":[{"prop":"font-family","value":"monospace,monospace","important":false},{"prop":"font-size","value":"16px","important":false}],"specificity":[0,0,1],"order":1,"isHover":false,"matchSelector":null},{"selector":".hero","declarations":[{"prop":"padding","value":"40px","important":false}],"specificity":[0,1,0],"order":2,"isHover":false,"matchSelector":null},{"selector":".terminal","declarations":[{"prop":"background","value":"#111","important":false},{"prop":"color","value":"#eee","important":false},{"prop":"padding","value":"24px","important":false},{"prop":"width","value":"600px","important":false}],"specificity":[0,1,0],"order":3,"isHover":false,"matchSelector":null},{"selector":".flag-block-cursor","declarations":[{"prop":"display","value":"inline-block","important":false},{"prop":"width","value":"10px","important":false},{"prop":"height","value":"18px","important":false},{"prop":"background","value":"#33d17a","important":false},{"prop":"vertical-align","value":"text-bottom","important":false},{"prop":"animation","value":"blink-anim 1.1s steps(1) infinite","important":false}],"specificity":[0,1,0],"order":4,"isHover":false,"matchSelector":null},{"selector":".flag-glyph-cursor","declarations":[{"prop":"animation","value":"flicker 1s steps(2) infinite","important":false}],"specificity":[0,1,0],"order":5,"isHover":false,"matchSelector":null},{"selector":".flag-underscore-cursor","declarations":[{"prop":"display","value":"inline-block","important":false},{"prop":"width","value":"12px","important":false},{"prop":"height","value":"3px","important":false},{"prop":"background","value":"#eee","important":false},{"prop":"vertical-align","value":"baseline","important":false},{"prop":"animation","value":"caret-blink 0.9s steps(1) infinite","important":false}],"specificity":[0,1,0],"order":6,"isHover":false,"matchSelector":null},{"selector":".pass-below-fold-cursor","declarations":[{"prop":"display","value":"inline-block","important":false},{"prop":"width","value":"10px","important":false},{"prop":"height","value":"18px","important":false},{"prop":"background","value":"#33d17a","important":false},{"prop":"animation","value":"blink-anim 1.1s steps(1) infinite","important":false}],"specificity":[0,1,0],"order":7,"isHover":false,"matchSelector":null},{"selector":".pass-editable-cursor","declarations":[{"prop":"display","value":"inline-block","important":false},{"prop":"width","value":"10px","important":false},{"prop":"height","value":"18px","important":false},{"prop":"background","value":"#444","important":false},{"prop":"animation","value":"blink-anim 1s steps(1) infinite","important":false}],"specificity":[0,1,0],"order":8,"isHover":false,"matchSelector":null},{"selector":".pass-textbox-cursor","declarations":[{"prop":"display","value":"inline-block","important":false},{"prop":"width","value":"10px","important":false},{"prop":"height","value":"18px","important":false},{"prop":"background","value":"#444","important":false},{"prop":"animation","value":"blink-anim 1s steps(1) infinite","important":false}],"specificity":[0,1,0],"order":9,"isHover":false,"matchSelector":null},{"selector":".pass-round-dot","declarations":[{"prop":"display","value":"inline-block","important":false},{"prop":"width","value":"8px","important":false},{"prop":"height","value":"8px","important":false},{"prop":"background","value":"#33d17a","important":false},{"prop":"border-radius","value":"50%","important":false},{"prop":"animation","value":"blink-anim 2s steps(1) infinite","important":false}],"specificity":[0,1,0],"order":10,"isHover":false,"matchSelector":null},{"selector":".pass-spinner","declarations":[{"prop":"display","value":"inline-block","important":false},{"prop":"width","value":"16px","important":false},{"prop":"height","value":"16px","important":false},{"prop":"border","value":"2px solid #999","important":false},{"prop":"border-top-color","value":"#333","important":false},{"prop":"border-radius","value":"50%","important":false},{"prop":"animation","value":"spin 1s linear infinite","important":false}],"specificity":[0,1,0],"order":11,"isHover":false,"matchSelector":null},{"selector":".pass-blinking-word","declarations":[{"prop":"animation","value":"flicker 1s steps(2) infinite","important":false}],"specificity":[0,1,0],"order":12,"isHover":false,"matchSelector":null},{"selector":".pass-blinking-panel","declarations":[{"prop":"display","value":"inline-block","important":false},{"prop":"width","value":"200px","important":false},{"prop":"height","value":"90px","important":false},{"prop":"background","value":"#222","important":false},{"prop":"animation","value":"blink-anim 2s steps(1) infinite","important":false}],"specificity":[0,1,0],"order":13,"isHover":false,"matchSelector":null},{"selector":".spacer","declarations":[{"prop":"height","value":"1400px","important":false}],"specificity":[0,1,0],"order":14,"isHover":false,"matchSelector":null}],"unwrapped":"\n * { margin: 0; padding: 0; box-sizing: border-box; }\n body { font-family: monospace, monospace; font-size: 16px; }\n .hero { padding: 40px; }\n .terminal { background: #111; color: #eee; padding: 24px; width: 600px; }\n\n @keyframes blink-anim { 50% { opacity: 0; } }\n @keyframes flicker { 0%, 49% { opacity: 1; } 50%, 100% { opacity: 0; } }\n @keyframes caret-blink { 0%, 50% { opacity: 1; } 51%, 100% { opacity: 0; } }\n @keyframes spin { to { transform: rotate(360deg); } }\n\n /* FLAG: solid block cursor in the hero terminal */\n .flag-block-cursor {\n display: inline-block; width: 10px; height: 18px;\n background: #33d17a; vertical-align: text-bottom;\n animation: blink-anim 1.1s steps(1) infinite;\n }\n\n /* FLAG: glyph cursor, animation name says nothing but keyframes toggle opacity */\n .flag-glyph-cursor { animation: flicker 1s steps(2) infinite; }\n\n /* FLAG: underscore bar cursor */\n .flag-underscore-cursor {\n display: inline-block; width: 12px; height: 3px;\n background: #eee; vertical-align: baseline;\n animation: caret-blink 0.9s steps(1) infinite;\n }\n\n /* PASS: same block cursor shape, but deep below the landing region */\n .pass-below-fold-cursor {\n display: inline-block; width: 10px; height: 18px;\n background: #33d17a;\n animation: blink-anim 1.1s steps(1) infinite;\n }\n\n /* PASS: cursor inside real editable surfaces */\n .pass-editable-cursor, .pass-textbox-cursor {\n display: inline-block; width: 10px; height: 18px;\n background: #444;\n animation: blink-anim 1s steps(1) infinite;\n }\n\n /* PASS: round pulsing dot stays with the pulsing-dot rule */\n .pass-round-dot {\n display: inline-block; width: 8px; height: 8px;\n background: #33d17a; border-radius: 50%;\n animation: blink-anim 2s steps(1) infinite;\n }\n\n /* PASS: spinner animates transform, not visibility */\n .pass-spinner {\n display: inline-block; width: 16px; height: 16px;\n border: 2px solid #999; border-top-color: #333; border-radius: 50%;\n animation: spin 1s linear infinite;\n }\n\n /* PASS: a blinking word is not a cursor shape */\n .pass-blinking-word { animation: flicker 1s steps(2) infinite; }\n\n /* PASS: large blinking panel fails the caret-size gates */\n .pass-blinking-panel {\n display: inline-block; width: 200px; height: 90px;\n background: #222;\n animation: blink-anim 2s steps(1) infinite;\n }\n\n .spacer { height: 1400px; }\n"},{"name":"tests/fixtures/antipatterns/body-text-viewport-edge.html","css":"\n /* Fixture for the body-text-viewport-edge rule. The rule fires\n when a <p> or <li> with substantial text content has rect.left\n within 16px of the viewport edge (or rect.right within 16px\n of viewport.width) AND the element has no own background-color\n AND is not inside <nav>/<header> AND is in normal flow. */\n body { font: 14px/1.5 system-ui, sans-serif; margin: 0; color: #111; background: #fff; }\n .grid { display: grid; grid-template-columns: 1fr 1fr; gap: 32px; padding: 24px; max-width: 1400px; margin: 0 auto; }\n .col h2 { font: 600 14px/1 system-ui; text-transform: uppercase; letter-spacing: 0.05em; margin: 0 0 16px; color: #475569; }\n .case-label { display: block; font-size: 12px; color: #64748b; margin: 16px 0 4px; font-style: italic; }\n .container-good { max-width: 720px; margin: 0 auto; padding: 16px 32px; }\n .container-tight { padding: 16px 32px; }\n .full-bleed-section { background: #fef3c7; padding: 24px 16px; }\n nav.site-nav { padding: 12px 24px; background: #f5f5f5; }\n header.banner { padding: 12px 24px; background: #e5e7eb; }\n\n /* Override the grid container's own padding so we can demonstrate\n a paragraph that genuinely bleeds to the viewport edge inside\n the flag column — the col itself shouldn't reset its padding. */\n .flag-fullwidth-p { /* no container; placed directly in body via .escape */ }\n .escape { position: relative; left: 50%; right: 50%; margin-left: -50vw; margin-right: -50vw; width: 100vw; padding: 0; }\n .edge-list { margin: 0; padding: 0; list-style-position: inside; }\n .edge-list li { margin: 0; }\n ","rules":[{"selector":"body","declarations":[{"prop":"font","value":"14px/1.5 system-ui,sans-serif","important":false},{"prop":"margin","value":"0","important":false},{"prop":"color","value":"#111","important":false},{"prop":"background","value":"#fff","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":".grid","declarations":[{"prop":"display","value":"grid","important":false},{"prop":"grid-template-columns","value":"1fr 1fr","important":false},{"prop":"gap","value":"32px","important":false},{"prop":"padding","value":"24px","important":false},{"prop":"max-width","value":"1400px","important":false},{"prop":"margin","value":"0 auto","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null},{"selector":".col h2","declarations":[{"prop":"font","value":"600 14px/1 system-ui","important":false},{"prop":"text-transform","value":"uppercase","important":false},{"prop":"letter-spacing","value":"0.05em","important":false},{"prop":"margin","value":"0 0 16px","important":false},{"prop":"color","value":"#475569","important":false}],"specificity":[0,1,1],"order":2,"isHover":false,"matchSelector":null},{"selector":".case-label","declarations":[{"prop":"display","value":"block","important":false},{"prop":"font-size","value":"12px","important":false},{"prop":"color","value":"#64748b","important":false},{"prop":"margin","value":"16px 0 4px","important":false},{"prop":"font-style","value":"italic","important":false}],"specificity":[0,1,0],"order":3,"isHover":false,"matchSelector":null},{"selector":".container-good","declarations":[{"prop":"max-width","value":"720px","important":false},{"prop":"margin","value":"0 auto","important":false},{"prop":"padding","value":"16px 32px","important":false}],"specificity":[0,1,0],"order":4,"isHover":false,"matchSelector":null},{"selector":".container-tight","declarations":[{"prop":"padding","value":"16px 32px","important":false}],"specificity":[0,1,0],"order":5,"isHover":false,"matchSelector":null},{"selector":".full-bleed-section","declarations":[{"prop":"background","value":"#fef3c7","important":false},{"prop":"padding","value":"24px 16px","important":false}],"specificity":[0,1,0],"order":6,"isHover":false,"matchSelector":null},{"selector":"nav.site-nav","declarations":[{"prop":"padding","value":"12px 24px","important":false},{"prop":"background","value":"#f5f5f5","important":false}],"specificity":[0,1,1],"order":7,"isHover":false,"matchSelector":null},{"selector":"header.banner","declarations":[{"prop":"padding","value":"12px 24px","important":false},{"prop":"background","value":"#e5e7eb","important":false}],"specificity":[0,1,1],"order":8,"isHover":false,"matchSelector":null},{"selector":".flag-fullwidth-p","declarations":[],"specificity":[0,1,0],"order":9,"isHover":false,"matchSelector":null},{"selector":".escape","declarations":[{"prop":"position","value":"relative","important":false},{"prop":"left","value":"50%","important":false},{"prop":"right","value":"50%","important":false},{"prop":"margin-left","value":"-50vw","important":false},{"prop":"margin-right","value":"-50vw","important":false},{"prop":"width","value":"100vw","important":false},{"prop":"padding","value":"0","important":false}],"specificity":[0,1,0],"order":10,"isHover":false,"matchSelector":null},{"selector":".edge-list","declarations":[{"prop":"margin","value":"0","important":false},{"prop":"padding","value":"0","important":false},{"prop":"list-style-position","value":"inside","important":false}],"specificity":[0,1,0],"order":11,"isHover":false,"matchSelector":null},{"selector":".edge-list li","declarations":[{"prop":"margin","value":"0","important":false}],"specificity":[0,1,1],"order":12,"isHover":false,"matchSelector":null}],"unwrapped":"\n /* Fixture for the body-text-viewport-edge rule. The rule fires\n when a <p> or <li> with substantial text content has rect.left\n within 16px of the viewport edge (or rect.right within 16px\n of viewport.width) AND the element has no own background-color\n AND is not inside <nav>/<header> AND is in normal flow. */\n body { font: 14px/1.5 system-ui, sans-serif; margin: 0; color: #111; background: #fff; }\n .grid { display: grid; grid-template-columns: 1fr 1fr; gap: 32px; padding: 24px; max-width: 1400px; margin: 0 auto; }\n .col h2 { font: 600 14px/1 system-ui; text-transform: uppercase; letter-spacing: 0.05em; margin: 0 0 16px; color: #475569; }\n .case-label { display: block; font-size: 12px; color: #64748b; margin: 16px 0 4px; font-style: italic; }\n .container-good { max-width: 720px; margin: 0 auto; padding: 16px 32px; }\n .container-tight { padding: 16px 32px; }\n .full-bleed-section { background: #fef3c7; padding: 24px 16px; }\n nav.site-nav { padding: 12px 24px; background: #f5f5f5; }\n header.banner { padding: 12px 24px; background: #e5e7eb; }\n\n /* Override the grid container's own padding so we can demonstrate\n a paragraph that genuinely bleeds to the viewport edge inside\n the flag column — the col itself shouldn't reset its padding. */\n .flag-fullwidth-p { /* no container; placed directly in body via .escape */ }\n .escape { position: relative; left: 50%; right: 50%; margin-left: -50vw; margin-right: -50vw; width: 100vw; padding: 0; }\n .edge-list { margin: 0; padding: 0; list-style-position: inside; }\n .edge-list li { margin: 0; }\n "},{"name":"tests/fixtures/antipatterns/border-baseline.html","css":"\n body {\n margin: 0;\n padding: 24px;\n background: #f8fafc;\n color: #111827;\n font: 14px/1.5 system-ui, sans-serif;\n }\n\n h1 {\n max-width: 1180px;\n margin: 0 auto 8px;\n font-size: 34px;\n line-height: 1.05;\n font-weight: 720;\n }\n\n .intro {\n max-width: 1180px;\n margin: 0 auto 24px;\n color: #4b5563;\n }\n\n .grid {\n display: grid;\n grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);\n gap: 32px;\n max-width: 1180px;\n margin: 0 auto;\n }\n\n .col h2 {\n margin: 0 0 14px;\n color: #475569;\n font-size: 13px;\n font-weight: 760;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n }\n\n .case {\n margin: 0 0 14px;\n padding: 16px;\n background: #fdfdfd;\n box-shadow: 0 1px 2px rgba(15, 23, 42, 0.06);\n }\n\n .case h3 {\n margin: 0 0 4px;\n font-size: 15px;\n line-height: 1.25;\n }\n\n .case p {\n margin: 0;\n color: #475569;\n }\n\n .flag-left {\n border-left: 4px solid #2563eb;\n border-radius: 10px;\n }\n\n .flag-right {\n border-right: 5px solid #dc2626;\n border-radius: 10px;\n }\n\n .flag-left-plain {\n border-left: 4px solid #0f766e;\n }\n\n .flag-top {\n border-top: 4px solid #7c3aed;\n border-radius: 10px;\n }\n\n .flag-bottom {\n border-bottom: 3px solid #ea580c;\n border-radius: 10px;\n }\n\n .flag-dark {\n background: #141820;\n color: #f4f7fb;\n border-left: 4px solid #38bdf8;\n border-radius: 10px;\n }\n\n .flag-dark p {\n color: #cbd5e1;\n }\n\n .pass-full-border {\n border: 1px solid #cbd5e1;\n border-radius: 10px;\n }\n\n .pass-neutral-side {\n border-left: 4px solid #d1d5db;\n border-radius: 10px;\n }\n\n .pass-thin-side {\n border-left: 1px solid #2563eb;\n border-radius: 10px;\n }\n\n .pass-status-alert {\n border-left: 4px solid #2563eb;\n }\n\n .flag-square-top {\n border-top: 4px solid #7c3aed;\n border-radius: 0;\n }\n\n .flag-square-bottom {\n border-bottom: 3px solid #ea580c;\n border-radius: 0;\n }\n\n .pass-tab-underline {\n border-bottom: 3px solid #2563eb;\n border-radius: 0;\n }\n\n .pass-thick-band {\n border-top: 16px solid #7c3aed;\n border-radius: 0;\n }\n\n .pass-dark-uniform {\n background: #161a22;\n color: #f4f7fb;\n border: 1px solid #334155;\n border-radius: 10px;\n }\n\n .pass-dark-uniform p {\n color: #cbd5e1;\n }\n ","rules":[{"selector":"body","declarations":[{"prop":"margin","value":"0","important":false},{"prop":"padding","value":"24px","important":false},{"prop":"background","value":"#f8fafc","important":false},{"prop":"color","value":"#111827","important":false},{"prop":"font","value":"14px/1.5 system-ui,sans-serif","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":"h1","declarations":[{"prop":"max-width","value":"1180px","important":false},{"prop":"margin","value":"0 auto 8px","important":false},{"prop":"font-size","value":"34px","important":false},{"prop":"line-height","value":"1.05","important":false},{"prop":"font-weight","value":"720","important":false}],"specificity":[0,0,1],"order":1,"isHover":false,"matchSelector":null},{"selector":".intro","declarations":[{"prop":"max-width","value":"1180px","important":false},{"prop":"margin","value":"0 auto 24px","important":false},{"prop":"color","value":"#4b5563","important":false}],"specificity":[0,1,0],"order":2,"isHover":false,"matchSelector":null},{"selector":".grid","declarations":[{"prop":"display","value":"grid","important":false},{"prop":"grid-template-columns","value":"minmax(0,1fr) minmax(0,1fr)","important":false},{"prop":"gap","value":"32px","important":false},{"prop":"max-width","value":"1180px","important":false},{"prop":"margin","value":"0 auto","important":false}],"specificity":[0,1,0],"order":3,"isHover":false,"matchSelector":null},{"selector":".col h2","declarations":[{"prop":"margin","value":"0 0 14px","important":false},{"prop":"color","value":"#475569","important":false},{"prop":"font-size","value":"13px","important":false},{"prop":"font-weight","value":"760","important":false},{"prop":"letter-spacing","value":"0.08em","important":false},{"prop":"text-transform","value":"uppercase","important":false}],"specificity":[0,1,1],"order":4,"isHover":false,"matchSelector":null},{"selector":".case","declarations":[{"prop":"margin","value":"0 0 14px","important":false},{"prop":"padding","value":"16px","important":false},{"prop":"background","value":"#fdfdfd","important":false},{"prop":"box-shadow","value":"0 1px 2px rgba(15,23,42,0.06)","important":false}],"specificity":[0,1,0],"order":5,"isHover":false,"matchSelector":null},{"selector":".case h3","declarations":[{"prop":"margin","value":"0 0 4px","important":false},{"prop":"font-size","value":"15px","important":false},{"prop":"line-height","value":"1.25","important":false}],"specificity":[0,1,1],"order":6,"isHover":false,"matchSelector":null},{"selector":".case p","declarations":[{"prop":"margin","value":"0","important":false},{"prop":"color","value":"#475569","important":false}],"specificity":[0,1,1],"order":7,"isHover":false,"matchSelector":null},{"selector":".flag-left","declarations":[{"prop":"border-left","value":"4px solid #2563eb","important":false},{"prop":"border-radius","value":"10px","important":false}],"specificity":[0,1,0],"order":8,"isHover":false,"matchSelector":null},{"selector":".flag-right","declarations":[{"prop":"border-right","value":"5px solid #dc2626","important":false},{"prop":"border-radius","value":"10px","important":false}],"specificity":[0,1,0],"order":9,"isHover":false,"matchSelector":null},{"selector":".flag-left-plain","declarations":[{"prop":"border-left","value":"4px solid #0f766e","important":false}],"specificity":[0,1,0],"order":10,"isHover":false,"matchSelector":null},{"selector":".flag-top","declarations":[{"prop":"border-top","value":"4px solid #7c3aed","important":false},{"prop":"border-radius","value":"10px","important":false}],"specificity":[0,1,0],"order":11,"isHover":false,"matchSelector":null},{"selector":".flag-bottom","declarations":[{"prop":"border-bottom","value":"3px solid #ea580c","important":false},{"prop":"border-radius","value":"10px","important":false}],"specificity":[0,1,0],"order":12,"isHover":false,"matchSelector":null},{"selector":".flag-dark","declarations":[{"prop":"background","value":"#141820","important":false},{"prop":"color","value":"#f4f7fb","important":false},{"prop":"border-left","value":"4px solid #38bdf8","important":false},{"prop":"border-radius","value":"10px","important":false}],"specificity":[0,1,0],"order":13,"isHover":false,"matchSelector":null},{"selector":".flag-dark p","declarations":[{"prop":"color","value":"#cbd5e1","important":false}],"specificity":[0,1,1],"order":14,"isHover":false,"matchSelector":null},{"selector":".pass-full-border","declarations":[{"prop":"border","value":"1px solid #cbd5e1","important":false},{"prop":"border-radius","value":"10px","important":false}],"specificity":[0,1,0],"order":15,"isHover":false,"matchSelector":null},{"selector":".pass-neutral-side","declarations":[{"prop":"border-left","value":"4px solid #d1d5db","important":false},{"prop":"border-radius","value":"10px","important":false}],"specificity":[0,1,0],"order":16,"isHover":false,"matchSelector":null},{"selector":".pass-thin-side","declarations":[{"prop":"border-left","value":"1px solid #2563eb","important":false},{"prop":"border-radius","value":"10px","important":false}],"specificity":[0,1,0],"order":17,"isHover":false,"matchSelector":null},{"selector":".pass-status-alert","declarations":[{"prop":"border-left","value":"4px solid #2563eb","important":false}],"specificity":[0,1,0],"order":18,"isHover":false,"matchSelector":null},{"selector":".flag-square-top","declarations":[{"prop":"border-top","value":"4px solid #7c3aed","important":false},{"prop":"border-radius","value":"0","important":false}],"specificity":[0,1,0],"order":19,"isHover":false,"matchSelector":null},{"selector":".flag-square-bottom","declarations":[{"prop":"border-bottom","value":"3px solid #ea580c","important":false},{"prop":"border-radius","value":"0","important":false}],"specificity":[0,1,0],"order":20,"isHover":false,"matchSelector":null},{"selector":".pass-tab-underline","declarations":[{"prop":"border-bottom","value":"3px solid #2563eb","important":false},{"prop":"border-radius","value":"0","important":false}],"specificity":[0,1,0],"order":21,"isHover":false,"matchSelector":null},{"selector":".pass-thick-band","declarations":[{"prop":"border-top","value":"16px solid #7c3aed","important":false},{"prop":"border-radius","value":"0","important":false}],"specificity":[0,1,0],"order":22,"isHover":false,"matchSelector":null},{"selector":".pass-dark-uniform","declarations":[{"prop":"background","value":"#161a22","important":false},{"prop":"color","value":"#f4f7fb","important":false},{"prop":"border","value":"1px solid #334155","important":false},{"prop":"border-radius","value":"10px","important":false}],"specificity":[0,1,0],"order":23,"isHover":false,"matchSelector":null},{"selector":".pass-dark-uniform p","declarations":[{"prop":"color","value":"#cbd5e1","important":false}],"specificity":[0,1,1],"order":24,"isHover":false,"matchSelector":null}],"unwrapped":"\n body {\n margin: 0;\n padding: 24px;\n background: #f8fafc;\n color: #111827;\n font: 14px/1.5 system-ui, sans-serif;\n }\n\n h1 {\n max-width: 1180px;\n margin: 0 auto 8px;\n font-size: 34px;\n line-height: 1.05;\n font-weight: 720;\n }\n\n .intro {\n max-width: 1180px;\n margin: 0 auto 24px;\n color: #4b5563;\n }\n\n .grid {\n display: grid;\n grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);\n gap: 32px;\n max-width: 1180px;\n margin: 0 auto;\n }\n\n .col h2 {\n margin: 0 0 14px;\n color: #475569;\n font-size: 13px;\n font-weight: 760;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n }\n\n .case {\n margin: 0 0 14px;\n padding: 16px;\n background: #fdfdfd;\n box-shadow: 0 1px 2px rgba(15, 23, 42, 0.06);\n }\n\n .case h3 {\n margin: 0 0 4px;\n font-size: 15px;\n line-height: 1.25;\n }\n\n .case p {\n margin: 0;\n color: #475569;\n }\n\n .flag-left {\n border-left: 4px solid #2563eb;\n border-radius: 10px;\n }\n\n .flag-right {\n border-right: 5px solid #dc2626;\n border-radius: 10px;\n }\n\n .flag-left-plain {\n border-left: 4px solid #0f766e;\n }\n\n .flag-top {\n border-top: 4px solid #7c3aed;\n border-radius: 10px;\n }\n\n .flag-bottom {\n border-bottom: 3px solid #ea580c;\n border-radius: 10px;\n }\n\n .flag-dark {\n background: #141820;\n color: #f4f7fb;\n border-left: 4px solid #38bdf8;\n border-radius: 10px;\n }\n\n .flag-dark p {\n color: #cbd5e1;\n }\n\n .pass-full-border {\n border: 1px solid #cbd5e1;\n border-radius: 10px;\n }\n\n .pass-neutral-side {\n border-left: 4px solid #d1d5db;\n border-radius: 10px;\n }\n\n .pass-thin-side {\n border-left: 1px solid #2563eb;\n border-radius: 10px;\n }\n\n .pass-status-alert {\n border-left: 4px solid #2563eb;\n }\n\n .flag-square-top {\n border-top: 4px solid #7c3aed;\n border-radius: 0;\n }\n\n .flag-square-bottom {\n border-bottom: 3px solid #ea580c;\n border-radius: 0;\n }\n\n .pass-tab-underline {\n border-bottom: 3px solid #2563eb;\n border-radius: 0;\n }\n\n .pass-thick-band {\n border-top: 16px solid #7c3aed;\n border-radius: 0;\n }\n\n .pass-dark-uniform {\n background: #161a22;\n color: #f4f7fb;\n border: 1px solid #334155;\n border-radius: 10px;\n }\n\n .pass-dark-uniform p {\n color: #cbd5e1;\n }\n "},{"name":"tests/fixtures/antipatterns/clipped-overflow-container.html","css":"\n body { font-family: system-ui, sans-serif; margin: 0; color: #1a1a1a; background: #fff; }\n .cols { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; padding: 24px; }\n .col { padding: 16px; }\n .box { position: relative; width: 200px; height: 120px; margin: 0 0 24px; padding: 16px; border: 1px solid #ddd; }\n .pop { position: absolute; top: 100%; left: 0; width: 220px; background: #222; color: #fff; padding: 8px; }\n .tip-negative { position: absolute; top: -34px; left: 16px; width: 160px; background: #222; color: #fff; padding: 8px; }\n .flyout { position: absolute; top: 28px; left: 100%; width: 180px; background: #222; color: #fff; padding: 8px; }\n .contained-badge { position: absolute; top: 10px; right: 10px; width: 36px; height: 24px; background: #e5f0ff; }\n .button-shine { position: absolute; inset: 0; background: linear-gradient(90deg, transparent, rgba(255,255,255,.6), transparent); }\n .crop-photo { position: absolute; inset: -18px; background: linear-gradient(135deg, #b7d7ff, #486aa3); }\n .inside-overlay { position: absolute; left: 12px; right: 12px; bottom: 12px; min-height: 28px; background: rgba(255,255,255,.86); }\n .pass-hidden-button { position: relative; overflow: hidden; width: 160px; height: 52px; border: 1px solid #ddd; background: #111; color: #fff; }\n .pass-carousel-viewport,\n .pass-fisheye-list,\n .pass-split-container {\n position: relative;\n overflow: hidden;\n width: 200px;\n height: 120px;\n margin: 0 0 24px;\n border: 1px solid #ddd;\n }\n .carousel-slide-next { position: absolute; top: 100%; left: 0; width: 100%; height: 100%; padding: 16px; background: #f5f5f5; }\n .fisheye-next-item { position: absolute; top: 100%; left: 0; width: 100%; padding: 8px; background: none; border: 0; text-align: left; }\n .split-after-panel { position: absolute; top: 0; left: 50%; width: 100%; height: 100%; background: #f5f5f5; }\n ","rules":[{"selector":"body","declarations":[{"prop":"font-family","value":"system-ui,sans-serif","important":false},{"prop":"margin","value":"0","important":false},{"prop":"color","value":"#1a1a1a","important":false},{"prop":"background","value":"#fff","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":".cols","declarations":[{"prop":"display","value":"grid","important":false},{"prop":"grid-template-columns","value":"1fr 1fr","important":false},{"prop":"gap","value":"24px","important":false},{"prop":"padding","value":"24px","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null},{"selector":".col","declarations":[{"prop":"padding","value":"16px","important":false}],"specificity":[0,1,0],"order":2,"isHover":false,"matchSelector":null},{"selector":".box","declarations":[{"prop":"position","value":"relative","important":false},{"prop":"width","value":"200px","important":false},{"prop":"height","value":"120px","important":false},{"prop":"margin","value":"0 0 24px","important":false},{"prop":"padding","value":"16px","important":false},{"prop":"border","value":"1px solid #ddd","important":false}],"specificity":[0,1,0],"order":3,"isHover":false,"matchSelector":null},{"selector":".pop","declarations":[{"prop":"position","value":"absolute","important":false},{"prop":"top","value":"100%","important":false},{"prop":"left","value":"0","important":false},{"prop":"width","value":"220px","important":false},{"prop":"background","value":"#222","important":false},{"prop":"color","value":"#fff","important":false},{"prop":"padding","value":"8px","important":false}],"specificity":[0,1,0],"order":4,"isHover":false,"matchSelector":null},{"selector":".tip-negative","declarations":[{"prop":"position","value":"absolute","important":false},{"prop":"top","value":"-34px","important":false},{"prop":"left","value":"16px","important":false},{"prop":"width","value":"160px","important":false},{"prop":"background","value":"#222","important":false},{"prop":"color","value":"#fff","important":false},{"prop":"padding","value":"8px","important":false}],"specificity":[0,1,0],"order":5,"isHover":false,"matchSelector":null},{"selector":".flyout","declarations":[{"prop":"position","value":"absolute","important":false},{"prop":"top","value":"28px","important":false},{"prop":"left","value":"100%","important":false},{"prop":"width","value":"180px","important":false},{"prop":"background","value":"#222","important":false},{"prop":"color","value":"#fff","important":false},{"prop":"padding","value":"8px","important":false}],"specificity":[0,1,0],"order":6,"isHover":false,"matchSelector":null},{"selector":".contained-badge","declarations":[{"prop":"position","value":"absolute","important":false},{"prop":"top","value":"10px","important":false},{"prop":"right","value":"10px","important":false},{"prop":"width","value":"36px","important":false},{"prop":"height","value":"24px","important":false},{"prop":"background","value":"#e5f0ff","important":false}],"specificity":[0,1,0],"order":7,"isHover":false,"matchSelector":null},{"selector":".button-shine","declarations":[{"prop":"position","value":"absolute","important":false},{"prop":"inset","value":"0","important":false},{"prop":"background","value":"linear-gradient(90deg,transparent,rgba(255,255,255,.6),transparent)","important":false}],"specificity":[0,1,0],"order":8,"isHover":false,"matchSelector":null},{"selector":".crop-photo","declarations":[{"prop":"position","value":"absolute","important":false},{"prop":"inset","value":"-18px","important":false},{"prop":"background","value":"linear-gradient(135deg,#b7d7ff,#486aa3)","important":false}],"specificity":[0,1,0],"order":9,"isHover":false,"matchSelector":null},{"selector":".inside-overlay","declarations":[{"prop":"position","value":"absolute","important":false},{"prop":"left","value":"12px","important":false},{"prop":"right","value":"12px","important":false},{"prop":"bottom","value":"12px","important":false},{"prop":"min-height","value":"28px","important":false},{"prop":"background","value":"rgba(255,255,255,.86)","important":false}],"specificity":[0,1,0],"order":10,"isHover":false,"matchSelector":null},{"selector":".pass-hidden-button","declarations":[{"prop":"position","value":"relative","important":false},{"prop":"overflow","value":"hidden","important":false},{"prop":"width","value":"160px","important":false},{"prop":"height","value":"52px","important":false},{"prop":"border","value":"1px solid #ddd","important":false},{"prop":"background","value":"#111","important":false},{"prop":"color","value":"#fff","important":false}],"specificity":[0,1,0],"order":11,"isHover":false,"matchSelector":null},{"selector":".pass-carousel-viewport","declarations":[{"prop":"position","value":"relative","important":false},{"prop":"overflow","value":"hidden","important":false},{"prop":"width","value":"200px","important":false},{"prop":"height","value":"120px","important":false},{"prop":"margin","value":"0 0 24px","important":false},{"prop":"border","value":"1px solid #ddd","important":false}],"specificity":[0,1,0],"order":12,"isHover":false,"matchSelector":null},{"selector":".pass-fisheye-list","declarations":[{"prop":"position","value":"relative","important":false},{"prop":"overflow","value":"hidden","important":false},{"prop":"width","value":"200px","important":false},{"prop":"height","value":"120px","important":false},{"prop":"margin","value":"0 0 24px","important":false},{"prop":"border","value":"1px solid #ddd","important":false}],"specificity":[0,1,0],"order":13,"isHover":false,"matchSelector":null},{"selector":".pass-split-container","declarations":[{"prop":"position","value":"relative","important":false},{"prop":"overflow","value":"hidden","important":false},{"prop":"width","value":"200px","important":false},{"prop":"height","value":"120px","important":false},{"prop":"margin","value":"0 0 24px","important":false},{"prop":"border","value":"1px solid #ddd","important":false}],"specificity":[0,1,0],"order":14,"isHover":false,"matchSelector":null},{"selector":".carousel-slide-next","declarations":[{"prop":"position","value":"absolute","important":false},{"prop":"top","value":"100%","important":false},{"prop":"left","value":"0","important":false},{"prop":"width","value":"100%","important":false},{"prop":"height","value":"100%","important":false},{"prop":"padding","value":"16px","important":false},{"prop":"background","value":"#f5f5f5","important":false}],"specificity":[0,1,0],"order":15,"isHover":false,"matchSelector":null},{"selector":".fisheye-next-item","declarations":[{"prop":"position","value":"absolute","important":false},{"prop":"top","value":"100%","important":false},{"prop":"left","value":"0","important":false},{"prop":"width","value":"100%","important":false},{"prop":"padding","value":"8px","important":false},{"prop":"background","value":"none","important":false},{"prop":"border","value":"0","important":false},{"prop":"text-align","value":"left","important":false}],"specificity":[0,1,0],"order":16,"isHover":false,"matchSelector":null},{"selector":".split-after-panel","declarations":[{"prop":"position","value":"absolute","important":false},{"prop":"top","value":"0","important":false},{"prop":"left","value":"50%","important":false},{"prop":"width","value":"100%","important":false},{"prop":"height","value":"100%","important":false},{"prop":"background","value":"#f5f5f5","important":false}],"specificity":[0,1,0],"order":17,"isHover":false,"matchSelector":null}],"unwrapped":"\n body { font-family: system-ui, sans-serif; margin: 0; color: #1a1a1a; background: #fff; }\n .cols { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; padding: 24px; }\n .col { padding: 16px; }\n .box { position: relative; width: 200px; height: 120px; margin: 0 0 24px; padding: 16px; border: 1px solid #ddd; }\n .pop { position: absolute; top: 100%; left: 0; width: 220px; background: #222; color: #fff; padding: 8px; }\n .tip-negative { position: absolute; top: -34px; left: 16px; width: 160px; background: #222; color: #fff; padding: 8px; }\n .flyout { position: absolute; top: 28px; left: 100%; width: 180px; background: #222; color: #fff; padding: 8px; }\n .contained-badge { position: absolute; top: 10px; right: 10px; width: 36px; height: 24px; background: #e5f0ff; }\n .button-shine { position: absolute; inset: 0; background: linear-gradient(90deg, transparent, rgba(255,255,255,.6), transparent); }\n .crop-photo { position: absolute; inset: -18px; background: linear-gradient(135deg, #b7d7ff, #486aa3); }\n .inside-overlay { position: absolute; left: 12px; right: 12px; bottom: 12px; min-height: 28px; background: rgba(255,255,255,.86); }\n .pass-hidden-button { position: relative; overflow: hidden; width: 160px; height: 52px; border: 1px solid #ddd; background: #111; color: #fff; }\n .pass-carousel-viewport,\n .pass-fisheye-list,\n .pass-split-container {\n position: relative;\n overflow: hidden;\n width: 200px;\n height: 120px;\n margin: 0 0 24px;\n border: 1px solid #ddd;\n }\n .carousel-slide-next { position: absolute; top: 100%; left: 0; width: 100%; height: 100%; padding: 16px; background: #f5f5f5; }\n .fisheye-next-item { position: absolute; top: 100%; left: 0; width: 100%; padding: 8px; background: none; border: 0; text-align: left; }\n .split-after-panel { position: absolute; top: 0; left: 50%; width: 100%; height: 100%; background: #f5f5f5; }\n "},{"name":"tests/fixtures/antipatterns/color.html","css":"\n body { font-family: system-ui, sans-serif; background: #fafafa; padding: 24px; margin: 0; color: #1a1a1a; }\n .grid { display: grid; grid-template-columns: 1fr 1fr; gap: 32px; max-width: 1200px; margin: 0 auto; }\n .col h2 { font-size: 14px; text-transform: uppercase; letter-spacing: 0.05em; margin: 0 0 16px; color: #475569; }\n .col h3 { font-size: 11px; text-transform: uppercase; letter-spacing: 0.05em; margin: 24px 0 8px; color: #64748b; }\n .card { padding: 14px 16px; border-radius: 10px; margin-bottom: 10px; }\n /* Styled button color cases (declared via stylesheet so jsdom resolves them\n reliably — inline color doesn't always win over user-agent rules in jsdom\n for <a> and <button>). */\n .styled-pill-low { background-color: rgb(31, 26, 21); color: rgb(91, 79, 68); display: inline-block; padding: 9px 18px; border-radius: 999px; font-weight: 500; font-size: 14px; text-decoration: none; }\n .low-contrast-button { background-color: rgb(55, 65, 81); color: rgb(108, 114, 128); display: inline-block; padding: 10px 20px; border-radius: 8px; border: 0; font-size: 14px; }\n .good-pill-high { background-color: rgb(20, 20, 25); color: rgb(245, 240, 232); display: inline-block; padding: 9px 18px; border-radius: 999px; font-weight: 500; font-size: 14px; text-decoration: none; }\n .inline-link-low { color: rgb(170, 170, 170); }\n /* Chip / badge cases: text-bearing spans painting their own background. */\n .chip-sev-low { display: inline-block; background-color: rgb(182, 50, 45); color: rgb(92, 84, 73); font-size: 11px; font-weight: 700; padding: 2px 8px; border-radius: 2px; }\n .chip-ok-high { display: inline-block; background-color: rgb(20, 20, 25); color: rgb(245, 240, 232); font-size: 11px; font-weight: 700; padding: 2px 8px; border-radius: 2px; }\n .chip-sub9-low { display: inline-block; background-color: rgb(182, 50, 45); color: rgb(150, 60, 55); font-size: 8px; padding: 1px 4px; }\n .panel-reset { background: rgb(28, 30, 38); color: rgb(230, 232, 237); padding: 12px; }\n .panel-reset code { background: rgb(246, 242, 244); border-radius: 3px; padding: 1px 4px; }\n .panel-reset pre code { background: none; }\n /* issue #409 Case A: gradient-clipped text. The gradient IS the glyph fill\n (text-fill-color: transparent), not a backdrop. The inherited `color`\n (#e8e6e3) is never painted, so measuring it against the element's own\n gradient stops (#6d8cff / #a78bfa) is a false positive. */\n .ox-grad-text { background: linear-gradient(135deg, #6d8cff 0%, #a78bfa 50%, #6d8cff 100%); -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; color: #e8e6e3; font-size: 40px; font-weight: 800; }\n /* issue #409 Case B: a 9%-alpha accent glow stop over a dark surface. The\n stop composites to ~#121f1f, not the full-opacity #34c0a8, so text stays\n high-contrast. The dark wrapper supplies the surface beneath the glow. */\n .ox-dark-wrap { background: #0f0f11; padding: 16px; }\n .ox-glow { background: linear-gradient(160deg, rgba(52,192,168,0.09) 0%, #141419 65%); padding: 20px; }\n .ox-glow p { color: #e8e6e3; font-size: 18px; }\n .ox-glow .muted { color: #8e8c89; font-size: 16px; }\n /* Gradient stop written as color-mix with a bright nested ingredient.\n The stop paints as a 16% wash of the light oklch color (composited\n over the dark wrap it is near-black); the nested oklch(90% ...) is an\n INGREDIENT, never painted. A parser that re-extracts nested tokens\n appends it as a phantom opaque light stop and the worst-case ratio\n then flags the light text at ~1:1 against a color nobody sees. */\n .mix-dark-wrap { background: #0f0f11; padding: 16px; }\n .mix-glow { background: linear-gradient(160deg, color-mix(in oklab, oklch(90% 0.02 95) 16%, transparent) 0%, #141419 65%); padding: 20px; }\n .mix-glow p { color: #ded9cf; font-size: 16px; }\n /* currentcolor surface: background-color paints with the element's own\n text color, which is itself a var() token here. jsdom hands both\n through verbatim, so the walk must resolve the token via the\n custom-prop map instead of abstaining on a knowable surface. */\n :root { --fixture-bone: #e8e2d6; }\n .currentcolor-surface { background-color: currentcolor; color: var(--fixture-bone); padding: 14px 16px; border-radius: 10px; margin-bottom: 10px; }\n .currentcolor-low-text { color: #cfc9bd; font-size: 14px; }\n .currentcolor-good-text { color: #3a352c; font-size: 14px; }\n /* Same shape but the token does not exist: the surface truly cannot be\n read, so the walk must abstain rather than guess. */\n .currentcolor-unknown { background-color: currentcolor; color: var(--fixture-undefined-token); padding: 14px 16px; border-radius: 10px; }\n .currentcolor-unknown p { color: #efe9dd; font-size: 14px; }\n ","rules":[{"selector":"body","declarations":[{"prop":"font-family","value":"system-ui,sans-serif","important":false},{"prop":"background","value":"#fafafa","important":false},{"prop":"padding","value":"24px","important":false},{"prop":"margin","value":"0","important":false},{"prop":"color","value":"#1a1a1a","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":".grid","declarations":[{"prop":"display","value":"grid","important":false},{"prop":"grid-template-columns","value":"1fr 1fr","important":false},{"prop":"gap","value":"32px","important":false},{"prop":"max-width","value":"1200px","important":false},{"prop":"margin","value":"0 auto","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null},{"selector":".col h2","declarations":[{"prop":"font-size","value":"14px","important":false},{"prop":"text-transform","value":"uppercase","important":false},{"prop":"letter-spacing","value":"0.05em","important":false},{"prop":"margin","value":"0 0 16px","important":false},{"prop":"color","value":"#475569","important":false}],"specificity":[0,1,1],"order":2,"isHover":false,"matchSelector":null},{"selector":".col h3","declarations":[{"prop":"font-size","value":"11px","important":false},{"prop":"text-transform","value":"uppercase","important":false},{"prop":"letter-spacing","value":"0.05em","important":false},{"prop":"margin","value":"24px 0 8px","important":false},{"prop":"color","value":"#64748b","important":false}],"specificity":[0,1,1],"order":3,"isHover":false,"matchSelector":null},{"selector":".card","declarations":[{"prop":"padding","value":"14px 16px","important":false},{"prop":"border-radius","value":"10px","important":false},{"prop":"margin-bottom","value":"10px","important":false}],"specificity":[0,1,0],"order":4,"isHover":false,"matchSelector":null},{"selector":".styled-pill-low","declarations":[{"prop":"background-color","value":"rgb(31,26,21)","important":false},{"prop":"color","value":"rgb(91,79,68)","important":false},{"prop":"display","value":"inline-block","important":false},{"prop":"padding","value":"9px 18px","important":false},{"prop":"border-radius","value":"999px","important":false},{"prop":"font-weight","value":"500","important":false},{"prop":"font-size","value":"14px","important":false},{"prop":"text-decoration","value":"none","important":false}],"specificity":[0,1,0],"order":5,"isHover":false,"matchSelector":null},{"selector":".low-contrast-button","declarations":[{"prop":"background-color","value":"rgb(55,65,81)","important":false},{"prop":"color","value":"rgb(108,114,128)","important":false},{"prop":"display","value":"inline-block","important":false},{"prop":"padding","value":"10px 20px","important":false},{"prop":"border-radius","value":"8px","important":false},{"prop":"border","value":"0","important":false},{"prop":"font-size","value":"14px","important":false}],"specificity":[0,1,0],"order":6,"isHover":false,"matchSelector":null},{"selector":".good-pill-high","declarations":[{"prop":"background-color","value":"rgb(20,20,25)","important":false},{"prop":"color","value":"rgb(245,240,232)","important":false},{"prop":"display","value":"inline-block","important":false},{"prop":"padding","value":"9px 18px","important":false},{"prop":"border-radius","value":"999px","important":false},{"prop":"font-weight","value":"500","important":false},{"prop":"font-size","value":"14px","important":false},{"prop":"text-decoration","value":"none","important":false}],"specificity":[0,1,0],"order":7,"isHover":false,"matchSelector":null},{"selector":".inline-link-low","declarations":[{"prop":"color","value":"rgb(170,170,170)","important":false}],"specificity":[0,1,0],"order":8,"isHover":false,"matchSelector":null},{"selector":".chip-sev-low","declarations":[{"prop":"display","value":"inline-block","important":false},{"prop":"background-color","value":"rgb(182,50,45)","important":false},{"prop":"color","value":"rgb(92,84,73)","important":false},{"prop":"font-size","value":"11px","important":false},{"prop":"font-weight","value":"700","important":false},{"prop":"padding","value":"2px 8px","important":false},{"prop":"border-radius","value":"2px","important":false}],"specificity":[0,1,0],"order":9,"isHover":false,"matchSelector":null},{"selector":".chip-ok-high","declarations":[{"prop":"display","value":"inline-block","important":false},{"prop":"background-color","value":"rgb(20,20,25)","important":false},{"prop":"color","value":"rgb(245,240,232)","important":false},{"prop":"font-size","value":"11px","important":false},{"prop":"font-weight","value":"700","important":false},{"prop":"padding","value":"2px 8px","important":false},{"prop":"border-radius","value":"2px","important":false}],"specificity":[0,1,0],"order":10,"isHover":false,"matchSelector":null},{"selector":".chip-sub9-low","declarations":[{"prop":"display","value":"inline-block","important":false},{"prop":"background-color","value":"rgb(182,50,45)","important":false},{"prop":"color","value":"rgb(150,60,55)","important":false},{"prop":"font-size","value":"8px","important":false},{"prop":"padding","value":"1px 4px","important":false}],"specificity":[0,1,0],"order":11,"isHover":false,"matchSelector":null},{"selector":".panel-reset","declarations":[{"prop":"background","value":"rgb(28,30,38)","important":false},{"prop":"color","value":"rgb(230,232,237)","important":false},{"prop":"padding","value":"12px","important":false}],"specificity":[0,1,0],"order":12,"isHover":false,"matchSelector":null},{"selector":".panel-reset code","declarations":[{"prop":"background","value":"rgb(246,242,244)","important":false},{"prop":"border-radius","value":"3px","important":false},{"prop":"padding","value":"1px 4px","important":false}],"specificity":[0,1,1],"order":13,"isHover":false,"matchSelector":null},{"selector":".panel-reset pre code","declarations":[{"prop":"background","value":"none","important":false}],"specificity":[0,1,2],"order":14,"isHover":false,"matchSelector":null},{"selector":".ox-grad-text","declarations":[{"prop":"background","value":"linear-gradient(135deg,#6d8cff 0%,#a78bfa 50%,#6d8cff 100%)","important":false},{"prop":"-webkit-background-clip","value":"text","important":false},{"prop":"background-clip","value":"text","important":false},{"prop":"-webkit-text-fill-color","value":"transparent","important":false},{"prop":"color","value":"#e8e6e3","important":false},{"prop":"font-size","value":"40px","important":false},{"prop":"font-weight","value":"800","important":false}],"specificity":[0,1,0],"order":15,"isHover":false,"matchSelector":null},{"selector":".ox-dark-wrap","declarations":[{"prop":"background","value":"#0f0f11","important":false},{"prop":"padding","value":"16px","important":false}],"specificity":[0,1,0],"order":16,"isHover":false,"matchSelector":null},{"selector":".ox-glow","declarations":[{"prop":"background","value":"linear-gradient(160deg,rgba(52,192,168,0.09) 0%,#141419 65%)","important":false},{"prop":"padding","value":"20px","important":false}],"specificity":[0,1,0],"order":17,"isHover":false,"matchSelector":null},{"selector":".ox-glow p","declarations":[{"prop":"color","value":"#e8e6e3","important":false},{"prop":"font-size","value":"18px","important":false}],"specificity":[0,1,1],"order":18,"isHover":false,"matchSelector":null},{"selector":".ox-glow .muted","declarations":[{"prop":"color","value":"#8e8c89","important":false},{"prop":"font-size","value":"16px","important":false}],"specificity":[0,2,0],"order":19,"isHover":false,"matchSelector":null},{"selector":".mix-dark-wrap","declarations":[{"prop":"background","value":"#0f0f11","important":false},{"prop":"padding","value":"16px","important":false}],"specificity":[0,1,0],"order":20,"isHover":false,"matchSelector":null},{"selector":".mix-glow","declarations":[{"prop":"background","value":"linear-gradient(160deg,color-mix(in oklab,oklch(90%0.02 95) 16%,transparent) 0%,#141419 65%)","important":false},{"prop":"padding","value":"20px","important":false}],"specificity":[0,1,0],"order":21,"isHover":false,"matchSelector":null},{"selector":".mix-glow p","declarations":[{"prop":"color","value":"#ded9cf","important":false},{"prop":"font-size","value":"16px","important":false}],"specificity":[0,1,1],"order":22,"isHover":false,"matchSelector":null},{"selector":":root","declarations":[{"prop":"--fixture-bone","value":"#e8e2d6","important":false}],"specificity":[0,1,0],"order":23,"isHover":false,"matchSelector":null},{"selector":".currentcolor-surface","declarations":[{"prop":"background-color","value":"currentcolor","important":false},{"prop":"color","value":"var(--fixture-bone)","important":false},{"prop":"padding","value":"14px 16px","important":false},{"prop":"border-radius","value":"10px","important":false},{"prop":"margin-bottom","value":"10px","important":false}],"specificity":[0,1,0],"order":24,"isHover":false,"matchSelector":null},{"selector":".currentcolor-low-text","declarations":[{"prop":"color","value":"#cfc9bd","important":false},{"prop":"font-size","value":"14px","important":false}],"specificity":[0,1,0],"order":25,"isHover":false,"matchSelector":null},{"selector":".currentcolor-good-text","declarations":[{"prop":"color","value":"#3a352c","important":false},{"prop":"font-size","value":"14px","important":false}],"specificity":[0,1,0],"order":26,"isHover":false,"matchSelector":null},{"selector":".currentcolor-unknown","declarations":[{"prop":"background-color","value":"currentcolor","important":false},{"prop":"color","value":"var(--fixture-undefined-token)","important":false},{"prop":"padding","value":"14px 16px","important":false},{"prop":"border-radius","value":"10px","important":false}],"specificity":[0,1,0],"order":27,"isHover":false,"matchSelector":null},{"selector":".currentcolor-unknown p","declarations":[{"prop":"color","value":"#efe9dd","important":false},{"prop":"font-size","value":"14px","important":false}],"specificity":[0,1,1],"order":28,"isHover":false,"matchSelector":null}],"unwrapped":"\n body { font-family: system-ui, sans-serif; background: #fafafa; padding: 24px; margin: 0; color: #1a1a1a; }\n .grid { display: grid; grid-template-columns: 1fr 1fr; gap: 32px; max-width: 1200px; margin: 0 auto; }\n .col h2 { font-size: 14px; text-transform: uppercase; letter-spacing: 0.05em; margin: 0 0 16px; color: #475569; }\n .col h3 { font-size: 11px; text-transform: uppercase; letter-spacing: 0.05em; margin: 24px 0 8px; color: #64748b; }\n .card { padding: 14px 16px; border-radius: 10px; margin-bottom: 10px; }\n /* Styled button color cases (declared via stylesheet so jsdom resolves them\n reliably — inline color doesn't always win over user-agent rules in jsdom\n for <a> and <button>). */\n .styled-pill-low { background-color: rgb(31, 26, 21); color: rgb(91, 79, 68); display: inline-block; padding: 9px 18px; border-radius: 999px; font-weight: 500; font-size: 14px; text-decoration: none; }\n .low-contrast-button { background-color: rgb(55, 65, 81); color: rgb(108, 114, 128); display: inline-block; padding: 10px 20px; border-radius: 8px; border: 0; font-size: 14px; }\n .good-pill-high { background-color: rgb(20, 20, 25); color: rgb(245, 240, 232); display: inline-block; padding: 9px 18px; border-radius: 999px; font-weight: 500; font-size: 14px; text-decoration: none; }\n .inline-link-low { color: rgb(170, 170, 170); }\n /* Chip / badge cases: text-bearing spans painting their own background. */\n .chip-sev-low { display: inline-block; background-color: rgb(182, 50, 45); color: rgb(92, 84, 73); font-size: 11px; font-weight: 700; padding: 2px 8px; border-radius: 2px; }\n .chip-ok-high { display: inline-block; background-color: rgb(20, 20, 25); color: rgb(245, 240, 232); font-size: 11px; font-weight: 700; padding: 2px 8px; border-radius: 2px; }\n .chip-sub9-low { display: inline-block; background-color: rgb(182, 50, 45); color: rgb(150, 60, 55); font-size: 8px; padding: 1px 4px; }\n .panel-reset { background: rgb(28, 30, 38); color: rgb(230, 232, 237); padding: 12px; }\n .panel-reset code { background: rgb(246, 242, 244); border-radius: 3px; padding: 1px 4px; }\n .panel-reset pre code { background: none; }\n /* issue #409 Case A: gradient-clipped text. The gradient IS the glyph fill\n (text-fill-color: transparent), not a backdrop. The inherited `color`\n (#e8e6e3) is never painted, so measuring it against the element's own\n gradient stops (#6d8cff / #a78bfa) is a false positive. */\n .ox-grad-text { background: linear-gradient(135deg, #6d8cff 0%, #a78bfa 50%, #6d8cff 100%); -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; color: #e8e6e3; font-size: 40px; font-weight: 800; }\n /* issue #409 Case B: a 9%-alpha accent glow stop over a dark surface. The\n stop composites to ~#121f1f, not the full-opacity #34c0a8, so text stays\n high-contrast. The dark wrapper supplies the surface beneath the glow. */\n .ox-dark-wrap { background: #0f0f11; padding: 16px; }\n .ox-glow { background: linear-gradient(160deg, rgba(52,192,168,0.09) 0%, #141419 65%); padding: 20px; }\n .ox-glow p { color: #e8e6e3; font-size: 18px; }\n .ox-glow .muted { color: #8e8c89; font-size: 16px; }\n /* Gradient stop written as color-mix with a bright nested ingredient.\n The stop paints as a 16% wash of the light oklch color (composited\n over the dark wrap it is near-black); the nested oklch(90% ...) is an\n INGREDIENT, never painted. A parser that re-extracts nested tokens\n appends it as a phantom opaque light stop and the worst-case ratio\n then flags the light text at ~1:1 against a color nobody sees. */\n .mix-dark-wrap { background: #0f0f11; padding: 16px; }\n .mix-glow { background: linear-gradient(160deg, color-mix(in oklab, oklch(90% 0.02 95) 16%, transparent) 0%, #141419 65%); padding: 20px; }\n .mix-glow p { color: #ded9cf; font-size: 16px; }\n /* currentcolor surface: background-color paints with the element's own\n text color, which is itself a var() token here. jsdom hands both\n through verbatim, so the walk must resolve the token via the\n custom-prop map instead of abstaining on a knowable surface. */\n :root { --fixture-bone: #e8e2d6; }\n .currentcolor-surface { background-color: currentcolor; color: var(--fixture-bone); padding: 14px 16px; border-radius: 10px; margin-bottom: 10px; }\n .currentcolor-low-text { color: #cfc9bd; font-size: 14px; }\n .currentcolor-good-text { color: #3a352c; font-size: 14px; }\n /* Same shape but the token does not exist: the surface truly cannot be\n read, so the walk must abstain rather than guess. */\n .currentcolor-unknown { background-color: currentcolor; color: var(--fixture-undefined-token); padding: 14px 16px; border-radius: 10px; }\n .currentcolor-unknown p { color: #efe9dd; font-size: 14px; }\n "},{"name":"tests/fixtures/antipatterns/cramped-padding.html","css":"\n /* Comprehensive fixture for the cramped-padding rule.\n Both columns include a wide variety of cases so we can verify the\n rule scales sensibly with font-size and treats the two axes\n independently (vertical can be tighter because line-height already\n provides built-in breathing room; horizontal has no equivalent). */\n body { font-family: system-ui, sans-serif; background: #fafafa; padding: 24px; margin: 0; color: #0f172a; line-height: 1.5; }\n .grid { display: grid; grid-template-columns: 1fr 1fr; gap: 32px; max-width: 1400px; margin: 0 auto; }\n .col h2 { font-size: 14px; text-transform: uppercase; letter-spacing: 0.05em; margin: 0 0 16px; color: #475569; }\n .col h3 { font-size: 12px; text-transform: uppercase; letter-spacing: 0.05em; margin: 28px 0 10px; color: #64748b; }\n .case { margin-bottom: 14px; padding: 14px 16px; background: white; border: 1px solid #e2e8f0; border-radius: 10px; }\n .case-label { display: block; font-size: 12px; color: #64748b; margin-bottom: 8px; font-style: italic; }\n\n /* ── FLAG: cramped body in cards ── */\n .flag-card-4 { padding: 4px; border: 1px solid #d1d5db; border-radius: 6px; font-size: 14px; }\n .flag-card-2 { padding: 2px; background: #f1f5f9; border-radius: 6px; font-size: 14px; }\n .flag-card-bg4 { padding: 4px; background: #fef3c7; border-radius: 6px; font-size: 16px; }\n\n /* ── FLAG: asymmetric cramping ── */\n .flag-asym-v { padding: 1px 16px; background: #f1f5f9; border-radius: 6px; font-size: 14px; }\n .flag-asym-h { padding: 12px 4px; background: #f1f5f9; border-radius: 6px; font-size: 14px; }\n\n /* ── FLAG: cramped large text (currently MISSED by the 8px floor) ── */\n .flag-heading-tight { padding: 8px; background: #f1f5f9; border-radius: 6px; font-size: 24px; font-weight: 600; line-height: 1.2; }\n .flag-hero-tight { padding: 6px 16px; background: #f1f5f9; border-radius: 6px; font-size: 32px; font-weight: 700; line-height: 1.2; }\n\n /* ── FLAG: cramped multi-line code block ── */\n .flag-pre-tight { padding: 2px; background: #1e293b; color: #e2e8f0; border-radius: 6px; font-family: ui-monospace, monospace; font-size: 14px; line-height: 1.5; }\n\n /* ── PASS: small inline pills (the .detection-cmd category) ── */\n .pass-cmd {\n display: inline-block;\n font-family: ui-monospace, SFMono-Regular, monospace;\n font-size: 13px;\n line-height: 1.625;\n color: #0f172a;\n background: #f5f5f7;\n padding: 6px 14px;\n border-radius: 6px;\n white-space: nowrap;\n }\n .pass-cmd::before { content: '➜ '; color: #ec4899; }\n .pass-badge {\n display: inline-block;\n font-size: 11px;\n line-height: 1.6;\n padding: 4px 8px;\n background: #dbeafe;\n color: #1e40af;\n border-radius: 999px;\n font-weight: 600;\n }\n .pass-chip {\n display: inline-block;\n font-size: 12px;\n line-height: 1.6;\n padding: 4px 10px;\n background: #fef3c7;\n color: #92400e;\n border-radius: 4px;\n font-weight: 500;\n }\n .pass-inline-code-chip {\n display: inline-block;\n font-family: ui-monospace, SFMono-Regular, monospace;\n font-size: 12px;\n line-height: 2;\n padding: 0.3em 0.5em;\n background: #eef2f7;\n color: #0f172a;\n border-radius: 4px;\n }\n\n /* ── PASS: cards at current standards ── */\n .pass-card-min { padding: 8px; background: #f1f5f9; border-radius: 6px; font-size: 16px; line-height: 1.6; }\n .pass-card-good { padding: 16px; background: #f1f5f9; border-radius: 8px; font-size: 14px; line-height: 1.6; }\n .pass-card-large { padding: 12px; background: #f1f5f9; border-radius: 8px; font-size: 18px; line-height: 1.6; }\n\n /* ── PASS: comfortable code blocks ── */\n .pass-pre-min { padding: 8px; background: #1e293b; color: #e2e8f0; border-radius: 6px; font-family: ui-monospace, monospace; font-size: 14px; line-height: 1.5; }\n .pass-pre-good { padding: 12px; background: #1e293b; color: #e2e8f0; border-radius: 6px; font-family: ui-monospace, monospace; font-size: 14px; line-height: 1.5; }\n\n /* ── PASS: interactive elements ── */\n .pass-button-std { padding: 8px 16px; background: #3b82f6; color: white; border: 0; border-radius: 6px; font-size: 14px; cursor: pointer; }\n .pass-input-std { padding: 8px 12px; border: 1px solid #cbd5e1; border-radius: 4px; font-size: 16px; width: 100%; box-sizing: border-box; }\n\n /* ── PASS: big text with proportional padding ── */\n .pass-heading-good { padding: 16px; background: #f1f5f9; border-radius: 8px; font-size: 24px; font-weight: 600; line-height: 1.2; }\n .pass-hero-good { padding: 20px 32px; background: #f1f5f9; border-radius: 8px; font-size: 32px; font-weight: 700; line-height: 1.2; }\n ","rules":[{"selector":"body","declarations":[{"prop":"font-family","value":"system-ui,sans-serif","important":false},{"prop":"background","value":"#fafafa","important":false},{"prop":"padding","value":"24px","important":false},{"prop":"margin","value":"0","important":false},{"prop":"color","value":"#0f172a","important":false},{"prop":"line-height","value":"1.5","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":".grid","declarations":[{"prop":"display","value":"grid","important":false},{"prop":"grid-template-columns","value":"1fr 1fr","important":false},{"prop":"gap","value":"32px","important":false},{"prop":"max-width","value":"1400px","important":false},{"prop":"margin","value":"0 auto","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null},{"selector":".col h2","declarations":[{"prop":"font-size","value":"14px","important":false},{"prop":"text-transform","value":"uppercase","important":false},{"prop":"letter-spacing","value":"0.05em","important":false},{"prop":"margin","value":"0 0 16px","important":false},{"prop":"color","value":"#475569","important":false}],"specificity":[0,1,1],"order":2,"isHover":false,"matchSelector":null},{"selector":".col h3","declarations":[{"prop":"font-size","value":"12px","important":false},{"prop":"text-transform","value":"uppercase","important":false},{"prop":"letter-spacing","value":"0.05em","important":false},{"prop":"margin","value":"28px 0 10px","important":false},{"prop":"color","value":"#64748b","important":false}],"specificity":[0,1,1],"order":3,"isHover":false,"matchSelector":null},{"selector":".case","declarations":[{"prop":"margin-bottom","value":"14px","important":false},{"prop":"padding","value":"14px 16px","important":false},{"prop":"background","value":"white","important":false},{"prop":"border","value":"1px solid #e2e8f0","important":false},{"prop":"border-radius","value":"10px","important":false}],"specificity":[0,1,0],"order":4,"isHover":false,"matchSelector":null},{"selector":".case-label","declarations":[{"prop":"display","value":"block","important":false},{"prop":"font-size","value":"12px","important":false},{"prop":"color","value":"#64748b","important":false},{"prop":"margin-bottom","value":"8px","important":false},{"prop":"font-style","value":"italic","important":false}],"specificity":[0,1,0],"order":5,"isHover":false,"matchSelector":null},{"selector":".flag-card-4","declarations":[{"prop":"padding","value":"4px","important":false},{"prop":"border","value":"1px solid #d1d5db","important":false},{"prop":"border-radius","value":"6px","important":false},{"prop":"font-size","value":"14px","important":false}],"specificity":[0,1,0],"order":6,"isHover":false,"matchSelector":null},{"selector":".flag-card-2","declarations":[{"prop":"padding","value":"2px","important":false},{"prop":"background","value":"#f1f5f9","important":false},{"prop":"border-radius","value":"6px","important":false},{"prop":"font-size","value":"14px","important":false}],"specificity":[0,1,0],"order":7,"isHover":false,"matchSelector":null},{"selector":".flag-card-bg4","declarations":[{"prop":"padding","value":"4px","important":false},{"prop":"background","value":"#fef3c7","important":false},{"prop":"border-radius","value":"6px","important":false},{"prop":"font-size","value":"16px","important":false}],"specificity":[0,1,0],"order":8,"isHover":false,"matchSelector":null},{"selector":".flag-asym-v","declarations":[{"prop":"padding","value":"1px 16px","important":false},{"prop":"background","value":"#f1f5f9","important":false},{"prop":"border-radius","value":"6px","important":false},{"prop":"font-size","value":"14px","important":false}],"specificity":[0,1,0],"order":9,"isHover":false,"matchSelector":null},{"selector":".flag-asym-h","declarations":[{"prop":"padding","value":"12px 4px","important":false},{"prop":"background","value":"#f1f5f9","important":false},{"prop":"border-radius","value":"6px","important":false},{"prop":"font-size","value":"14px","important":false}],"specificity":[0,1,0],"order":10,"isHover":false,"matchSelector":null},{"selector":".flag-heading-tight","declarations":[{"prop":"padding","value":"8px","important":false},{"prop":"background","value":"#f1f5f9","important":false},{"prop":"border-radius","value":"6px","important":false},{"prop":"font-size","value":"24px","important":false},{"prop":"font-weight","value":"600","important":false},{"prop":"line-height","value":"1.2","important":false}],"specificity":[0,1,0],"order":11,"isHover":false,"matchSelector":null},{"selector":".flag-hero-tight","declarations":[{"prop":"padding","value":"6px 16px","important":false},{"prop":"background","value":"#f1f5f9","important":false},{"prop":"border-radius","value":"6px","important":false},{"prop":"font-size","value":"32px","important":false},{"prop":"font-weight","value":"700","important":false},{"prop":"line-height","value":"1.2","important":false}],"specificity":[0,1,0],"order":12,"isHover":false,"matchSelector":null},{"selector":".flag-pre-tight","declarations":[{"prop":"padding","value":"2px","important":false},{"prop":"background","value":"#1e293b","important":false},{"prop":"color","value":"#e2e8f0","important":false},{"prop":"border-radius","value":"6px","important":false},{"prop":"font-family","value":"ui-monospace,monospace","important":false},{"prop":"font-size","value":"14px","important":false},{"prop":"line-height","value":"1.5","important":false}],"specificity":[0,1,0],"order":13,"isHover":false,"matchSelector":null},{"selector":".pass-cmd","declarations":[{"prop":"display","value":"inline-block","important":false},{"prop":"font-family","value":"ui-monospace,SFMono-Regular,monospace","important":false},{"prop":"font-size","value":"13px","important":false},{"prop":"line-height","value":"1.625","important":false},{"prop":"color","value":"#0f172a","important":false},{"prop":"background","value":"#f5f5f7","important":false},{"prop":"padding","value":"6px 14px","important":false},{"prop":"border-radius","value":"6px","important":false},{"prop":"white-space","value":"nowrap","important":false}],"specificity":[0,1,0],"order":14,"isHover":false,"matchSelector":null},{"selector":".pass-cmd::before","declarations":[{"prop":"content","value":"\"➜ \"","important":false},{"prop":"color","value":"#ec4899","important":false}],"specificity":[0,2,0],"order":15,"isHover":false,"matchSelector":null},{"selector":".pass-badge","declarations":[{"prop":"display","value":"inline-block","important":false},{"prop":"font-size","value":"11px","important":false},{"prop":"line-height","value":"1.6","important":false},{"prop":"padding","value":"4px 8px","important":false},{"prop":"background","value":"#dbeafe","important":false},{"prop":"color","value":"#1e40af","important":false},{"prop":"border-radius","value":"999px","important":false},{"prop":"font-weight","value":"600","important":false}],"specificity":[0,1,0],"order":16,"isHover":false,"matchSelector":null},{"selector":".pass-chip","declarations":[{"prop":"display","value":"inline-block","important":false},{"prop":"font-size","value":"12px","important":false},{"prop":"line-height","value":"1.6","important":false},{"prop":"padding","value":"4px 10px","important":false},{"prop":"background","value":"#fef3c7","important":false},{"prop":"color","value":"#92400e","important":false},{"prop":"border-radius","value":"4px","important":false},{"prop":"font-weight","value":"500","important":false}],"specificity":[0,1,0],"order":17,"isHover":false,"matchSelector":null},{"selector":".pass-inline-code-chip","declarations":[{"prop":"display","value":"inline-block","important":false},{"prop":"font-family","value":"ui-monospace,SFMono-Regular,monospace","important":false},{"prop":"font-size","value":"12px","important":false},{"prop":"line-height","value":"2","important":false},{"prop":"padding","value":"0.3em 0.5em","important":false},{"prop":"background","value":"#eef2f7","important":false},{"prop":"color","value":"#0f172a","important":false},{"prop":"border-radius","value":"4px","important":false}],"specificity":[0,1,0],"order":18,"isHover":false,"matchSelector":null},{"selector":".pass-card-min","declarations":[{"prop":"padding","value":"8px","important":false},{"prop":"background","value":"#f1f5f9","important":false},{"prop":"border-radius","value":"6px","important":false},{"prop":"font-size","value":"16px","important":false},{"prop":"line-height","value":"1.6","important":false}],"specificity":[0,1,0],"order":19,"isHover":false,"matchSelector":null},{"selector":".pass-card-good","declarations":[{"prop":"padding","value":"16px","important":false},{"prop":"background","value":"#f1f5f9","important":false},{"prop":"border-radius","value":"8px","important":false},{"prop":"font-size","value":"14px","important":false},{"prop":"line-height","value":"1.6","important":false}],"specificity":[0,1,0],"order":20,"isHover":false,"matchSelector":null},{"selector":".pass-card-large","declarations":[{"prop":"padding","value":"12px","important":false},{"prop":"background","value":"#f1f5f9","important":false},{"prop":"border-radius","value":"8px","important":false},{"prop":"font-size","value":"18px","important":false},{"prop":"line-height","value":"1.6","important":false}],"specificity":[0,1,0],"order":21,"isHover":false,"matchSelector":null},{"selector":".pass-pre-min","declarations":[{"prop":"padding","value":"8px","important":false},{"prop":"background","value":"#1e293b","important":false},{"prop":"color","value":"#e2e8f0","important":false},{"prop":"border-radius","value":"6px","important":false},{"prop":"font-family","value":"ui-monospace,monospace","important":false},{"prop":"font-size","value":"14px","important":false},{"prop":"line-height","value":"1.5","important":false}],"specificity":[0,1,0],"order":22,"isHover":false,"matchSelector":null},{"selector":".pass-pre-good","declarations":[{"prop":"padding","value":"12px","important":false},{"prop":"background","value":"#1e293b","important":false},{"prop":"color","value":"#e2e8f0","important":false},{"prop":"border-radius","value":"6px","important":false},{"prop":"font-family","value":"ui-monospace,monospace","important":false},{"prop":"font-size","value":"14px","important":false},{"prop":"line-height","value":"1.5","important":false}],"specificity":[0,1,0],"order":23,"isHover":false,"matchSelector":null},{"selector":".pass-button-std","declarations":[{"prop":"padding","value":"8px 16px","important":false},{"prop":"background","value":"#3b82f6","important":false},{"prop":"color","value":"white","important":false},{"prop":"border","value":"0","important":false},{"prop":"border-radius","value":"6px","important":false},{"prop":"font-size","value":"14px","important":false},{"prop":"cursor","value":"pointer","important":false}],"specificity":[0,1,0],"order":24,"isHover":false,"matchSelector":null},{"selector":".pass-input-std","declarations":[{"prop":"padding","value":"8px 12px","important":false},{"prop":"border","value":"1px solid #cbd5e1","important":false},{"prop":"border-radius","value":"4px","important":false},{"prop":"font-size","value":"16px","important":false},{"prop":"width","value":"100%","important":false},{"prop":"box-sizing","value":"border-box","important":false}],"specificity":[0,1,0],"order":25,"isHover":false,"matchSelector":null},{"selector":".pass-heading-good","declarations":[{"prop":"padding","value":"16px","important":false},{"prop":"background","value":"#f1f5f9","important":false},{"prop":"border-radius","value":"8px","important":false},{"prop":"font-size","value":"24px","important":false},{"prop":"font-weight","value":"600","important":false},{"prop":"line-height","value":"1.2","important":false}],"specificity":[0,1,0],"order":26,"isHover":false,"matchSelector":null},{"selector":".pass-hero-good","declarations":[{"prop":"padding","value":"20px 32px","important":false},{"prop":"background","value":"#f1f5f9","important":false},{"prop":"border-radius","value":"8px","important":false},{"prop":"font-size","value":"32px","important":false},{"prop":"font-weight","value":"700","important":false},{"prop":"line-height","value":"1.2","important":false}],"specificity":[0,1,0],"order":27,"isHover":false,"matchSelector":null}],"unwrapped":"\n /* Comprehensive fixture for the cramped-padding rule.\n Both columns include a wide variety of cases so we can verify the\n rule scales sensibly with font-size and treats the two axes\n independently (vertical can be tighter because line-height already\n provides built-in breathing room; horizontal has no equivalent). */\n body { font-family: system-ui, sans-serif; background: #fafafa; padding: 24px; margin: 0; color: #0f172a; line-height: 1.5; }\n .grid { display: grid; grid-template-columns: 1fr 1fr; gap: 32px; max-width: 1400px; margin: 0 auto; }\n .col h2 { font-size: 14px; text-transform: uppercase; letter-spacing: 0.05em; margin: 0 0 16px; color: #475569; }\n .col h3 { font-size: 12px; text-transform: uppercase; letter-spacing: 0.05em; margin: 28px 0 10px; color: #64748b; }\n .case { margin-bottom: 14px; padding: 14px 16px; background: white; border: 1px solid #e2e8f0; border-radius: 10px; }\n .case-label { display: block; font-size: 12px; color: #64748b; margin-bottom: 8px; font-style: italic; }\n\n /* ── FLAG: cramped body in cards ── */\n .flag-card-4 { padding: 4px; border: 1px solid #d1d5db; border-radius: 6px; font-size: 14px; }\n .flag-card-2 { padding: 2px; background: #f1f5f9; border-radius: 6px; font-size: 14px; }\n .flag-card-bg4 { padding: 4px; background: #fef3c7; border-radius: 6px; font-size: 16px; }\n\n /* ── FLAG: asymmetric cramping ── */\n .flag-asym-v { padding: 1px 16px; background: #f1f5f9; border-radius: 6px; font-size: 14px; }\n .flag-asym-h { padding: 12px 4px; background: #f1f5f9; border-radius: 6px; font-size: 14px; }\n\n /* ── FLAG: cramped large text (currently MISSED by the 8px floor) ── */\n .flag-heading-tight { padding: 8px; background: #f1f5f9; border-radius: 6px; font-size: 24px; font-weight: 600; line-height: 1.2; }\n .flag-hero-tight { padding: 6px 16px; background: #f1f5f9; border-radius: 6px; font-size: 32px; font-weight: 700; line-height: 1.2; }\n\n /* ── FLAG: cramped multi-line code block ── */\n .flag-pre-tight { padding: 2px; background: #1e293b; color: #e2e8f0; border-radius: 6px; font-family: ui-monospace, monospace; font-size: 14px; line-height: 1.5; }\n\n /* ── PASS: small inline pills (the .detection-cmd category) ── */\n .pass-cmd {\n display: inline-block;\n font-family: ui-monospace, SFMono-Regular, monospace;\n font-size: 13px;\n line-height: 1.625;\n color: #0f172a;\n background: #f5f5f7;\n padding: 6px 14px;\n border-radius: 6px;\n white-space: nowrap;\n }\n .pass-cmd::before { content: '➜ '; color: #ec4899; }\n .pass-badge {\n display: inline-block;\n font-size: 11px;\n line-height: 1.6;\n padding: 4px 8px;\n background: #dbeafe;\n color: #1e40af;\n border-radius: 999px;\n font-weight: 600;\n }\n .pass-chip {\n display: inline-block;\n font-size: 12px;\n line-height: 1.6;\n padding: 4px 10px;\n background: #fef3c7;\n color: #92400e;\n border-radius: 4px;\n font-weight: 500;\n }\n .pass-inline-code-chip {\n display: inline-block;\n font-family: ui-monospace, SFMono-Regular, monospace;\n font-size: 12px;\n line-height: 2;\n padding: 0.3em 0.5em;\n background: #eef2f7;\n color: #0f172a;\n border-radius: 4px;\n }\n\n /* ── PASS: cards at current standards ── */\n .pass-card-min { padding: 8px; background: #f1f5f9; border-radius: 6px; font-size: 16px; line-height: 1.6; }\n .pass-card-good { padding: 16px; background: #f1f5f9; border-radius: 8px; font-size: 14px; line-height: 1.6; }\n .pass-card-large { padding: 12px; background: #f1f5f9; border-radius: 8px; font-size: 18px; line-height: 1.6; }\n\n /* ── PASS: comfortable code blocks ── */\n .pass-pre-min { padding: 8px; background: #1e293b; color: #e2e8f0; border-radius: 6px; font-family: ui-monospace, monospace; font-size: 14px; line-height: 1.5; }\n .pass-pre-good { padding: 12px; background: #1e293b; color: #e2e8f0; border-radius: 6px; font-family: ui-monospace, monospace; font-size: 14px; line-height: 1.5; }\n\n /* ── PASS: interactive elements ── */\n .pass-button-std { padding: 8px 16px; background: #3b82f6; color: white; border: 0; border-radius: 6px; font-size: 14px; cursor: pointer; }\n .pass-input-std { padding: 8px 12px; border: 1px solid #cbd5e1; border-radius: 4px; font-size: 16px; width: 100%; box-sizing: border-box; }\n\n /* ── PASS: big text with proportional padding ── */\n .pass-heading-good { padding: 16px; background: #f1f5f9; border-radius: 8px; font-size: 24px; font-weight: 600; line-height: 1.2; }\n .pass-hero-good { padding: 20px 32px; background: #f1f5f9; border-radius: 8px; font-size: 32px; font-weight: 700; line-height: 1.2; }\n "},{"name":"tests/fixtures/antipatterns/cream-palette.html","css":"\n body { background: #f5efe2; color: #2a2622; font-family: Georgia, serif; margin: 0; padding: 40px; }\n h1 { font-size: 40px; margin: 0 0 16px; }\n p { max-width: 60ch; line-height: 1.6; }\n ","rules":[{"selector":"body","declarations":[{"prop":"background","value":"#f5efe2","important":false},{"prop":"color","value":"#2a2622","important":false},{"prop":"font-family","value":"Georgia,serif","important":false},{"prop":"margin","value":"0","important":false},{"prop":"padding","value":"40px","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":"h1","declarations":[{"prop":"font-size","value":"40px","important":false},{"prop":"margin","value":"0 0 16px","important":false}],"specificity":[0,0,1],"order":1,"isHover":false,"matchSelector":null},{"selector":"p","declarations":[{"prop":"max-width","value":"60ch","important":false},{"prop":"line-height","value":"1.6","important":false}],"specificity":[0,0,1],"order":2,"isHover":false,"matchSelector":null}],"unwrapped":"\n body { background: #f5efe2; color: #2a2622; font-family: Georgia, serif; margin: 0; padding: 40px; }\n h1 { font-size: 40px; margin: 0 0 16px; }\n p { max-width: 60ch; line-height: 1.6; }\n "},{"name":"tests/fixtures/antipatterns/css-in-prose-should-flag.html","css":" rule, an inline style=\"\" attribute, and\n Tailwind utility classes.\n-->\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\">\n<title>Real gradient-text styling</title>\n<style>\n body { font-family: Georgia, serif; margin: 0; padding: 40px 24px; background: #fdfcf9; color: #1f2933; }\n /* SHOULD FLAG (gradient-text + ai-color-palette): a real style rule. */\n .gradient-heading {\n background: linear-gradient(135deg, #7c3aed, #a855f7);\n -webkit-background-clip: text;\n background-clip: text;\n -webkit-text-fill-color: transparent;\n font-size: 44px;\n }\n","rules":[{"selector":"rule","declarations":[{"prop":"font-family","value":"Georgia,serif","important":false},{"prop":"margin","value":"0","important":false},{"prop":"padding","value":"40px 24px","important":false},{"prop":"background","value":"#fdfcf9","important":false},{"prop":"color","value":"#1f2933","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":"an inline style=\"\" attribute","declarations":[{"prop":"font-family","value":"Georgia,serif","important":false},{"prop":"margin","value":"0","important":false},{"prop":"padding","value":"40px 24px","important":false},{"prop":"background","value":"#fdfcf9","important":false},{"prop":"color","value":"#1f2933","important":false}],"specificity":[0,0,4],"order":1,"isHover":false,"matchSelector":null},{"selector":"and\n Tailwind utility classes.\n-->\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\">\n<title>Real gradient-text styling</title>\n<style>\n body","declarations":[{"prop":"font-family","value":"Georgia,serif","important":false},{"prop":"margin","value":"0","important":false},{"prop":"padding","value":"40px 24px","important":false},{"prop":"background","value":"#fdfcf9","important":false},{"prop":"color","value":"#1f2933","important":false}],"specificity":[0,0,18],"order":2,"isHover":false,"matchSelector":null},{"selector":".gradient-heading","declarations":[{"prop":"background","value":"linear-gradient(135deg,#7c3aed,#a855f7)","important":false},{"prop":"-webkit-background-clip","value":"text","important":false},{"prop":"background-clip","value":"text","important":false},{"prop":"-webkit-text-fill-color","value":"transparent","important":false},{"prop":"font-size","value":"44px","important":false}],"specificity":[0,1,0],"order":3,"isHover":false,"matchSelector":null}],"unwrapped":" rule, an inline style=\"\" attribute, and\n Tailwind utility classes.\n-->\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\">\n<title>Real gradient-text styling</title>\n<style>\n body { font-family: Georgia, serif; margin: 0; padding: 40px 24px; background: #fdfcf9; color: #1f2933; }\n /* SHOULD FLAG (gradient-text + ai-color-palette): a real style rule. */\n .gradient-heading {\n background: linear-gradient(135deg, #7c3aed, #a855f7);\n -webkit-background-clip: text;\n background-clip: text;\n -webkit-text-fill-color: transparent;\n font-size: 44px;\n }\n"},{"name":"tests/fixtures/antipatterns/css-in-prose-should-pass.html","css":" blocks, style=\"\"\n attribute values, linked stylesheets, class=\"\" attribute values), never\n rendered text. Live false positive that motivated this fixture: the\n impeccable.style changelog line\n \"<code>background-clip: text</code> gradients stop tripping contrast\"\n tripped gradient-text on the raw-source scan, and the purple hex codes in\n its rule documentation shared the same exposure via ai-color-palette.\n\n Every case in this file SHOULD PASS: nothing here styles the page with the\n documented patterns.\n-->\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\">\n<title>Docs about CSS anti-patterns</title>\n<style>\n body { font-family: Georgia, 'Iowan Old Style', serif; margin: 0; padding: 32px 24px 40px; color: #1f2933; background: #fdfcf9; }\n h1 { font-size: 34px; margin: 0 0 12px; }\n h2 { font-size: 20px; margin: 28px 0 8px; }\n p { font-size: 16px; max-width: 640px; }\n pre { background: #f1efe9; padding: 16px; overflow-x: auto; font-size: 13px; }\n code { font-family: 'SF Mono', ui-monospace, monospace; }\n","rules":[{"selector":"blocks","declarations":[{"prop":"font-family","value":"Georgia,\"Iowan Old Style\",serif","important":false},{"prop":"margin","value":"0","important":false},{"prop":"padding","value":"32px 24px 40px","important":false},{"prop":"color","value":"#1f2933","important":false},{"prop":"background","value":"#fdfcf9","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":"style=\"\"\n attribute values","declarations":[{"prop":"font-family","value":"Georgia,\"Iowan Old Style\",serif","important":false},{"prop":"margin","value":"0","important":false},{"prop":"padding","value":"32px 24px 40px","important":false},{"prop":"color","value":"#1f2933","important":false},{"prop":"background","value":"#fdfcf9","important":false}],"specificity":[0,0,3],"order":1,"isHover":false,"matchSelector":null},{"selector":"linked stylesheets","declarations":[{"prop":"font-family","value":"Georgia,\"Iowan Old Style\",serif","important":false},{"prop":"margin","value":"0","important":false},{"prop":"padding","value":"32px 24px 40px","important":false},{"prop":"color","value":"#1f2933","important":false},{"prop":"background","value":"#fdfcf9","important":false}],"specificity":[0,0,2],"order":2,"isHover":false,"matchSelector":null},{"selector":"class=\"\" attribute values)","declarations":[{"prop":"font-family","value":"Georgia,\"Iowan Old Style\",serif","important":false},{"prop":"margin","value":"0","important":false},{"prop":"padding","value":"32px 24px 40px","important":false},{"prop":"color","value":"#1f2933","important":false},{"prop":"background","value":"#fdfcf9","important":false}],"specificity":[0,0,3],"order":3,"isHover":false,"matchSelector":null},{"selector":"never\n rendered text. Live false positive that motivated this fixture: the\n impeccable.style changelog line\n \"<code>background-clip: text</code> gradients stop tripping contrast\"\n tripped gradient-text on the raw-source scan","declarations":[{"prop":"font-family","value":"Georgia,\"Iowan Old Style\",serif","important":false},{"prop":"margin","value":"0","important":false},{"prop":"padding","value":"32px 24px 40px","important":false},{"prop":"color","value":"#1f2933","important":false},{"prop":"background","value":"#fdfcf9","important":false}],"specificity":[0,1,28],"order":4,"isHover":false,"matchSelector":null},{"selector":"and the purple hex codes in\n its rule documentation shared the same exposure via ai-color-palette.\n\n Every case in this file SHOULD PASS: nothing here styles the page with the\n documented patterns.\n-->\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\">\n<title>Docs about CSS anti-patterns</title>\n<style>\n body","declarations":[{"prop":"font-family","value":"Georgia,\"Iowan Old Style\",serif","important":false},{"prop":"margin","value":"0","important":false},{"prop":"padding","value":"32px 24px 40px","important":false},{"prop":"color","value":"#1f2933","important":false},{"prop":"background","value":"#fdfcf9","important":false}],"specificity":[0,0,46],"order":5,"isHover":false,"matchSelector":null},{"selector":"h1","declarations":[{"prop":"font-size","value":"34px","important":false},{"prop":"margin","value":"0 0 12px","important":false}],"specificity":[0,0,1],"order":6,"isHover":false,"matchSelector":null},{"selector":"h2","declarations":[{"prop":"font-size","value":"20px","important":false},{"prop":"margin","value":"28px 0 8px","important":false}],"specificity":[0,0,1],"order":7,"isHover":false,"matchSelector":null},{"selector":"p","declarations":[{"prop":"font-size","value":"16px","important":false},{"prop":"max-width","value":"640px","important":false}],"specificity":[0,0,1],"order":8,"isHover":false,"matchSelector":null},{"selector":"pre","declarations":[{"prop":"background","value":"#f1efe9","important":false},{"prop":"padding","value":"16px","important":false},{"prop":"overflow-x","value":"auto","important":false},{"prop":"font-size","value":"13px","important":false}],"specificity":[0,0,1],"order":9,"isHover":false,"matchSelector":null},{"selector":"code","declarations":[{"prop":"font-family","value":"\"SF Mono\",ui-monospace,monospace","important":false}],"specificity":[0,0,1],"order":10,"isHover":false,"matchSelector":null}],"unwrapped":" blocks, style=\"\"\n attribute values, linked stylesheets, class=\"\" attribute values), never\n rendered text. Live false positive that motivated this fixture: the\n impeccable.style changelog line\n \"<code>background-clip: text</code> gradients stop tripping contrast\"\n tripped gradient-text on the raw-source scan, and the purple hex codes in\n its rule documentation shared the same exposure via ai-color-palette.\n\n Every case in this file SHOULD PASS: nothing here styles the page with the\n documented patterns.\n-->\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\">\n<title>Docs about CSS anti-patterns</title>\n<style>\n body { font-family: Georgia, 'Iowan Old Style', serif; margin: 0; padding: 32px 24px 40px; color: #1f2933; background: #fdfcf9; }\n h1 { font-size: 34px; margin: 0 0 12px; }\n h2 { font-size: 20px; margin: 28px 0 8px; }\n p { font-size: 16px; max-width: 640px; }\n pre { background: #f1efe9; padding: 16px; overflow-x: auto; font-size: 13px; }\n code { font-family: 'SF Mono', ui-monospace, monospace; }\n"},{"name":"tests/fixtures/antipatterns/dark-gradient-ground.html","css":"\n /* The impeccable.style false-positive class: the page ground is a gradient\n set via `background:` shorthand, so the body's computed backgroundColor\n is transparent and the ground exists only as a backgroundImage whose\n stops serialize in oklch. The detector must measure text against those\n stops (composited under any translucent layers), never against an\n assumed white body. */\n body {\n margin: 0;\n padding: 48px;\n background: linear-gradient(180deg, oklch(7% 0.006 95), oklch(4% 0.004 95));\n font-family: Arial, sans-serif;\n }\n body > * { margin: 0 0 32px; }\n\n /* ── Should flag ─────────────────────────────────────────────────── */\n .flag-muted-direct {\n width: 560px;\n color: oklch(30% 0 0);\n font-size: 16px;\n line-height: 1.7;\n }\n .flag-muted-nested-wrapper { width: 560px; }\n .flag-muted-nested {\n color: oklch(32% 0 0);\n font-size: 16px;\n line-height: 1.7;\n margin: 0;\n }\n .frosted-light {\n width: 480px;\n padding: 24px;\n background: rgba(250, 249, 246, 0.88);\n border-radius: 4px;\n }\n .flag-light-on-frosted {\n color: oklch(88% 0 0);\n font-size: 15px;\n line-height: 1.6;\n margin: 0;\n }\n\n /* ── Should pass ─────────────────────────────────────────────────── */\n .pass-hero-title {\n width: 640px;\n color: oklch(91% 0 0);\n font-size: 48px;\n }\n .pass-hero-body {\n width: 560px;\n color: oklch(88% 0 0);\n font-size: 16px;\n line-height: 1.7;\n }\n .pass-on-raised {\n width: 420px;\n padding: 24px;\n background: oklch(11% 0.006 95);\n color: oklch(88% 0 0);\n font-size: 15px;\n }\n .pass-dark-on-frosted {\n color: oklch(15% 0.01 95);\n font-size: 15px;\n line-height: 1.6;\n margin: 0 0 12px;\n }\n .pass-hex-gradient {\n width: 520px;\n padding: 24px;\n background-image: linear-gradient(180deg, #14120f, #0a0908);\n color: oklch(90% 0 0);\n font-size: 15px;\n line-height: 1.6;\n }\n .pass-image-backed {\n width: 460px;\n padding: 18px 22px;\n background: linear-gradient(180deg, rgba(255, 255, 255, 0.3), rgba(255, 255, 255, 0.2)), url(\"/fixtures/antipatterns/no-such-texture.png\") center / cover;\n color: oklch(15% 0.01 95);\n font-size: 15px;\n line-height: 1.6;\n }\n .pass-photo-panel {\n width: 460px;\n padding: 18px 22px;\n background-image: url(\"/fixtures/antipatterns/no-such-photo.jpg\");\n color: oklch(20% 0 0);\n font-size: 15px;\n line-height: 1.6;\n }\n .pass-hidden-scene {\n opacity: 0;\n width: 560px;\n }\n .pass-hidden-scene p {\n color: oklch(30% 0 0);\n font-size: 16px;\n line-height: 1.7;\n margin: 0;\n }\n","rules":[{"selector":"body","declarations":[{"prop":"margin","value":"0","important":false},{"prop":"padding","value":"48px","important":false},{"prop":"background","value":"linear-gradient(180deg,oklch(7%0.006 95),oklch(4%0.004 95))","important":false},{"prop":"font-family","value":"Arial,sans-serif","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":"body>*","declarations":[{"prop":"margin","value":"0 0 32px","important":false}],"specificity":[0,0,1],"order":1,"isHover":false,"matchSelector":null},{"selector":".flag-muted-direct","declarations":[{"prop":"width","value":"560px","important":false},{"prop":"color","value":"oklch(30%0 0)","important":false},{"prop":"font-size","value":"16px","important":false},{"prop":"line-height","value":"1.7","important":false}],"specificity":[0,1,0],"order":2,"isHover":false,"matchSelector":null},{"selector":".flag-muted-nested-wrapper","declarations":[{"prop":"width","value":"560px","important":false}],"specificity":[0,1,0],"order":3,"isHover":false,"matchSelector":null},{"selector":".flag-muted-nested","declarations":[{"prop":"color","value":"oklch(32%0 0)","important":false},{"prop":"font-size","value":"16px","important":false},{"prop":"line-height","value":"1.7","important":false},{"prop":"margin","value":"0","important":false}],"specificity":[0,1,0],"order":4,"isHover":false,"matchSelector":null},{"selector":".frosted-light","declarations":[{"prop":"width","value":"480px","important":false},{"prop":"padding","value":"24px","important":false},{"prop":"background","value":"rgba(250,249,246,0.88)","important":false},{"prop":"border-radius","value":"4px","important":false}],"specificity":[0,1,0],"order":5,"isHover":false,"matchSelector":null},{"selector":".flag-light-on-frosted","declarations":[{"prop":"color","value":"oklch(88%0 0)","important":false},{"prop":"font-size","value":"15px","important":false},{"prop":"line-height","value":"1.6","important":false},{"prop":"margin","value":"0","important":false}],"specificity":[0,1,0],"order":6,"isHover":false,"matchSelector":null},{"selector":".pass-hero-title","declarations":[{"prop":"width","value":"640px","important":false},{"prop":"color","value":"oklch(91%0 0)","important":false},{"prop":"font-size","value":"48px","important":false}],"specificity":[0,1,0],"order":7,"isHover":false,"matchSelector":null},{"selector":".pass-hero-body","declarations":[{"prop":"width","value":"560px","important":false},{"prop":"color","value":"oklch(88%0 0)","important":false},{"prop":"font-size","value":"16px","important":false},{"prop":"line-height","value":"1.7","important":false}],"specificity":[0,1,0],"order":8,"isHover":false,"matchSelector":null},{"selector":".pass-on-raised","declarations":[{"prop":"width","value":"420px","important":false},{"prop":"padding","value":"24px","important":false},{"prop":"background","value":"oklch(11%0.006 95)","important":false},{"prop":"color","value":"oklch(88%0 0)","important":false},{"prop":"font-size","value":"15px","important":false}],"specificity":[0,1,0],"order":9,"isHover":false,"matchSelector":null},{"selector":".pass-dark-on-frosted","declarations":[{"prop":"color","value":"oklch(15%0.01 95)","important":false},{"prop":"font-size","value":"15px","important":false},{"prop":"line-height","value":"1.6","important":false},{"prop":"margin","value":"0 0 12px","important":false}],"specificity":[0,1,0],"order":10,"isHover":false,"matchSelector":null},{"selector":".pass-hex-gradient","declarations":[{"prop":"width","value":"520px","important":false},{"prop":"padding","value":"24px","important":false},{"prop":"background-image","value":"linear-gradient(180deg,#14120f,#0a0908)","important":false},{"prop":"color","value":"oklch(90%0 0)","important":false},{"prop":"font-size","value":"15px","important":false},{"prop":"line-height","value":"1.6","important":false}],"specificity":[0,1,0],"order":11,"isHover":false,"matchSelector":null},{"selector":".pass-image-backed","declarations":[{"prop":"width","value":"460px","important":false},{"prop":"padding","value":"18px 22px","important":false},{"prop":"background","value":"linear-gradient(180deg,rgba(255,255,255,0.3),rgba(255,255,255,0.2)),url(/fixtures/antipatterns/no-such-texture.png)center/cover","important":false},{"prop":"color","value":"oklch(15%0.01 95)","important":false},{"prop":"font-size","value":"15px","important":false},{"prop":"line-height","value":"1.6","important":false}],"specificity":[0,1,0],"order":12,"isHover":false,"matchSelector":null},{"selector":".pass-photo-panel","declarations":[{"prop":"width","value":"460px","important":false},{"prop":"padding","value":"18px 22px","important":false},{"prop":"background-image","value":"url(/fixtures/antipatterns/no-such-photo.jpg)","important":false},{"prop":"color","value":"oklch(20%0 0)","important":false},{"prop":"font-size","value":"15px","important":false},{"prop":"line-height","value":"1.6","important":false}],"specificity":[0,1,0],"order":13,"isHover":false,"matchSelector":null},{"selector":".pass-hidden-scene","declarations":[{"prop":"opacity","value":"0","important":false},{"prop":"width","value":"560px","important":false}],"specificity":[0,1,0],"order":14,"isHover":false,"matchSelector":null},{"selector":".pass-hidden-scene p","declarations":[{"prop":"color","value":"oklch(30%0 0)","important":false},{"prop":"font-size","value":"16px","important":false},{"prop":"line-height","value":"1.7","important":false},{"prop":"margin","value":"0","important":false}],"specificity":[0,1,1],"order":15,"isHover":false,"matchSelector":null}],"unwrapped":"\n /* The impeccable.style false-positive class: the page ground is a gradient\n set via `background:` shorthand, so the body's computed backgroundColor\n is transparent and the ground exists only as a backgroundImage whose\n stops serialize in oklch. The detector must measure text against those\n stops (composited under any translucent layers), never against an\n assumed white body. */\n body {\n margin: 0;\n padding: 48px;\n background: linear-gradient(180deg, oklch(7% 0.006 95), oklch(4% 0.004 95));\n font-family: Arial, sans-serif;\n }\n body > * { margin: 0 0 32px; }\n\n /* ── Should flag ─────────────────────────────────────────────────── */\n .flag-muted-direct {\n width: 560px;\n color: oklch(30% 0 0);\n font-size: 16px;\n line-height: 1.7;\n }\n .flag-muted-nested-wrapper { width: 560px; }\n .flag-muted-nested {\n color: oklch(32% 0 0);\n font-size: 16px;\n line-height: 1.7;\n margin: 0;\n }\n .frosted-light {\n width: 480px;\n padding: 24px;\n background: rgba(250, 249, 246, 0.88);\n border-radius: 4px;\n }\n .flag-light-on-frosted {\n color: oklch(88% 0 0);\n font-size: 15px;\n line-height: 1.6;\n margin: 0;\n }\n\n /* ── Should pass ─────────────────────────────────────────────────── */\n .pass-hero-title {\n width: 640px;\n color: oklch(91% 0 0);\n font-size: 48px;\n }\n .pass-hero-body {\n width: 560px;\n color: oklch(88% 0 0);\n font-size: 16px;\n line-height: 1.7;\n }\n .pass-on-raised {\n width: 420px;\n padding: 24px;\n background: oklch(11% 0.006 95);\n color: oklch(88% 0 0);\n font-size: 15px;\n }\n .pass-dark-on-frosted {\n color: oklch(15% 0.01 95);\n font-size: 15px;\n line-height: 1.6;\n margin: 0 0 12px;\n }\n .pass-hex-gradient {\n width: 520px;\n padding: 24px;\n background-image: linear-gradient(180deg, #14120f, #0a0908);\n color: oklch(90% 0 0);\n font-size: 15px;\n line-height: 1.6;\n }\n .pass-image-backed {\n width: 460px;\n padding: 18px 22px;\n background: linear-gradient(180deg, rgba(255, 255, 255, 0.3), rgba(255, 255, 255, 0.2)), url(\"/fixtures/antipatterns/no-such-texture.png\") center / cover;\n color: oklch(15% 0.01 95);\n font-size: 15px;\n line-height: 1.6;\n }\n .pass-photo-panel {\n width: 460px;\n padding: 18px 22px;\n background-image: url(\"/fixtures/antipatterns/no-such-photo.jpg\");\n color: oklch(20% 0 0);\n font-size: 15px;\n line-height: 1.6;\n }\n .pass-hidden-scene {\n opacity: 0;\n width: 560px;\n }\n .pass-hidden-scene p {\n color: oklch(30% 0 0);\n font-size: 16px;\n line-height: 1.7;\n margin: 0;\n }\n"},{"name":"tests/fixtures/antipatterns/dark-theme-modern-color.html","css":"\n /* A lacquer-black ground painted as a gradient in oklch, the shape that\n floods dark themes with \"on #ffffff\" low-contrast false positives when\n the detector cannot read the ground and assumes white. */\n body {\n margin: 0;\n padding: 24px;\n background: linear-gradient(oklch(0.07 0.006 95), oklch(0.11 0.008 95));\n font-family: Georgia, serif;\n font-size: 15px;\n line-height: 1.6;\n }\n\n section {\n padding: 24px;\n margin-bottom: 24px;\n width: 640px;\n }\n\n p { margin: 0 0 12px; font-size: 15px; }\n\n /* Readable grounds, each written in a color syntax a real browser keeps\n verbatim in getComputedStyle output. */\n .panel-srgb { background-color: color(srgb 0.1 0.11 0.12); }\n .panel-mix { background-color: color-mix(in srgb, white 6%, #0b0b0d); }\n .panel-p3 { background-color: color(display-p3 0.07 0.07 0.08); }\n .panel-lch { background-color: lch(18 4 60); }\n .panel-light { background-color: color(srgb 0.98 0.97 0.95); }\n\n /* A color space the detector does not model. Nested inside the light\n panel so a detector that walks PAST the unreadable layer would measure\n light text against the light section and invent a finding. */\n .panel-unreadable { background-color: color(rec2020 0.05 0.05 0.05); padding: 20px; }\n\n /* An image layer stacked ABOVE a loud gradient. The image is the visible\n surface and its pixels are unreadable; a detector that falls back to\n gradient stops here measures a layer the visitor never sees. */\n .panel-image-over-gradient { background-image: url(\"opaque-panel.png\"), linear-gradient(#ff0000, #0000ff); }\n\n /* Keywords a real browser resolves before getComputedStyle output but a\n partial cascade hands through verbatim: inherit takes the parent's\n ground, currentcolor paints with the element's own text color. Both are\n knowable surfaces; abstaining on them would hide real findings. */\n .panel-inherit { background-color: inherit; padding: 20px; }\n .panel-current { background-color: currentcolor; color: color(srgb 0.94 0.93 0.91); }\n .text-pale-2 { color: color(srgb 0.78 0.77 0.75); }\n\n .text-light { color: oklch(0.92 0.01 90); }\n .text-dark { color: color(srgb 0.1 0.11 0.12); }\n\n .text-muted-ground { color: oklch(0.32 0.01 90); }\n .text-dim-srgb { color: color(srgb 0.28 0.28 0.3); }\n .text-dim-p3 { color: color(display-p3 0.35 0.35 0.36); }\n .text-dim-lch { color: lch(35 3 60); }\n .text-pale-light { color: color(srgb 0.75 0.74 0.72); }\n","rules":[{"selector":"body","declarations":[{"prop":"margin","value":"0","important":false},{"prop":"padding","value":"24px","important":false},{"prop":"background","value":"linear-gradient(oklch(0.07 0.006 95),oklch(0.11 0.008 95))","important":false},{"prop":"font-family","value":"Georgia,serif","important":false},{"prop":"font-size","value":"15px","important":false},{"prop":"line-height","value":"1.6","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":"section","declarations":[{"prop":"padding","value":"24px","important":false},{"prop":"margin-bottom","value":"24px","important":false},{"prop":"width","value":"640px","important":false}],"specificity":[0,0,1],"order":1,"isHover":false,"matchSelector":null},{"selector":"p","declarations":[{"prop":"margin","value":"0 0 12px","important":false},{"prop":"font-size","value":"15px","important":false}],"specificity":[0,0,1],"order":2,"isHover":false,"matchSelector":null},{"selector":".panel-srgb","declarations":[{"prop":"background-color","value":"color(srgb 0.1 0.11 0.12)","important":false}],"specificity":[0,1,0],"order":3,"isHover":false,"matchSelector":null},{"selector":".panel-mix","declarations":[{"prop":"background-color","value":"color-mix(in srgb,white 6%,#0b0b0d)","important":false}],"specificity":[0,1,0],"order":4,"isHover":false,"matchSelector":null},{"selector":".panel-p3","declarations":[{"prop":"background-color","value":"color(display-p3 0.07 0.07 0.08)","important":false}],"specificity":[0,1,0],"order":5,"isHover":false,"matchSelector":null},{"selector":".panel-lch","declarations":[{"prop":"background-color","value":"lch(18 4 60)","important":false}],"specificity":[0,1,0],"order":6,"isHover":false,"matchSelector":null},{"selector":".panel-light","declarations":[{"prop":"background-color","value":"color(srgb 0.98 0.97 0.95)","important":false}],"specificity":[0,1,0],"order":7,"isHover":false,"matchSelector":null},{"selector":".panel-unreadable","declarations":[{"prop":"background-color","value":"color(rec2020 0.05 0.05 0.05)","important":false},{"prop":"padding","value":"20px","important":false}],"specificity":[0,1,0],"order":8,"isHover":false,"matchSelector":null},{"selector":".panel-image-over-gradient","declarations":[{"prop":"background-image","value":"url(opaque-panel.png),linear-gradient(#ff0000,#0000ff)","important":false}],"specificity":[0,1,0],"order":9,"isHover":false,"matchSelector":null},{"selector":".panel-inherit","declarations":[{"prop":"background-color","value":"inherit","important":false},{"prop":"padding","value":"20px","important":false}],"specificity":[0,1,0],"order":10,"isHover":false,"matchSelector":null},{"selector":".panel-current","declarations":[{"prop":"background-color","value":"currentcolor","important":false},{"prop":"color","value":"color(srgb 0.94 0.93 0.91)","important":false}],"specificity":[0,1,0],"order":11,"isHover":false,"matchSelector":null},{"selector":".text-pale-2","declarations":[{"prop":"color","value":"color(srgb 0.78 0.77 0.75)","important":false}],"specificity":[0,1,0],"order":12,"isHover":false,"matchSelector":null},{"selector":".text-light","declarations":[{"prop":"color","value":"oklch(0.92 0.01 90)","important":false}],"specificity":[0,1,0],"order":13,"isHover":false,"matchSelector":null},{"selector":".text-dark","declarations":[{"prop":"color","value":"color(srgb 0.1 0.11 0.12)","important":false}],"specificity":[0,1,0],"order":14,"isHover":false,"matchSelector":null},{"selector":".text-muted-ground","declarations":[{"prop":"color","value":"oklch(0.32 0.01 90)","important":false}],"specificity":[0,1,0],"order":15,"isHover":false,"matchSelector":null},{"selector":".text-dim-srgb","declarations":[{"prop":"color","value":"color(srgb 0.28 0.28 0.3)","important":false}],"specificity":[0,1,0],"order":16,"isHover":false,"matchSelector":null},{"selector":".text-dim-p3","declarations":[{"prop":"color","value":"color(display-p3 0.35 0.35 0.36)","important":false}],"specificity":[0,1,0],"order":17,"isHover":false,"matchSelector":null},{"selector":".text-dim-lch","declarations":[{"prop":"color","value":"lch(35 3 60)","important":false}],"specificity":[0,1,0],"order":18,"isHover":false,"matchSelector":null},{"selector":".text-pale-light","declarations":[{"prop":"color","value":"color(srgb 0.75 0.74 0.72)","important":false}],"specificity":[0,1,0],"order":19,"isHover":false,"matchSelector":null}],"unwrapped":"\n /* A lacquer-black ground painted as a gradient in oklch, the shape that\n floods dark themes with \"on #ffffff\" low-contrast false positives when\n the detector cannot read the ground and assumes white. */\n body {\n margin: 0;\n padding: 24px;\n background: linear-gradient(oklch(0.07 0.006 95), oklch(0.11 0.008 95));\n font-family: Georgia, serif;\n font-size: 15px;\n line-height: 1.6;\n }\n\n section {\n padding: 24px;\n margin-bottom: 24px;\n width: 640px;\n }\n\n p { margin: 0 0 12px; font-size: 15px; }\n\n /* Readable grounds, each written in a color syntax a real browser keeps\n verbatim in getComputedStyle output. */\n .panel-srgb { background-color: color(srgb 0.1 0.11 0.12); }\n .panel-mix { background-color: color-mix(in srgb, white 6%, #0b0b0d); }\n .panel-p3 { background-color: color(display-p3 0.07 0.07 0.08); }\n .panel-lch { background-color: lch(18 4 60); }\n .panel-light { background-color: color(srgb 0.98 0.97 0.95); }\n\n /* A color space the detector does not model. Nested inside the light\n panel so a detector that walks PAST the unreadable layer would measure\n light text against the light section and invent a finding. */\n .panel-unreadable { background-color: color(rec2020 0.05 0.05 0.05); padding: 20px; }\n\n /* An image layer stacked ABOVE a loud gradient. The image is the visible\n surface and its pixels are unreadable; a detector that falls back to\n gradient stops here measures a layer the visitor never sees. */\n .panel-image-over-gradient { background-image: url(\"opaque-panel.png\"), linear-gradient(#ff0000, #0000ff); }\n\n /* Keywords a real browser resolves before getComputedStyle output but a\n partial cascade hands through verbatim: inherit takes the parent's\n ground, currentcolor paints with the element's own text color. Both are\n knowable surfaces; abstaining on them would hide real findings. */\n .panel-inherit { background-color: inherit; padding: 20px; }\n .panel-current { background-color: currentcolor; color: color(srgb 0.94 0.93 0.91); }\n .text-pale-2 { color: color(srgb 0.78 0.77 0.75); }\n\n .text-light { color: oklch(0.92 0.01 90); }\n .text-dark { color: color(srgb 0.1 0.11 0.12); }\n\n .text-muted-ground { color: oklch(0.32 0.01 90); }\n .text-dim-srgb { color: color(srgb 0.28 0.28 0.3); }\n .text-dim-p3 { color: color(display-p3 0.35 0.35 0.36); }\n .text-dim-lch { color: lch(35 3 60); }\n .text-pale-light { color: color(srgb 0.75 0.74 0.72); }\n"},{"name":"tests/fixtures/antipatterns/design-system.html","css":"\n .design-system-fixture {\n --brand-accent: #b8422e;\n background: #f7f4ee;\n color: #241f1a;\n font-family: \"IBM Plex Sans\", Arial, sans-serif;\n padding: 24px;\n }\n\n .case {\n margin: 0 0 12px;\n padding: 14px 16px;\n border-radius: 8px;\n border: 1px solid #d4c7b9;\n background: #ffffff;\n color: #241f1a;\n font-size: 16px;\n }\n\n .fixture-note {\n margin: 0 0 16px;\n padding: 12px 14px;\n border-radius: 8px;\n border: 1px solid #d4c7b9;\n background: #f7f4ee;\n color: #241f1a;\n font-size: 14px;\n line-height: 1.45;\n }\n\n .fixture-note strong {\n font-weight: 700;\n }\n\n .flag-font { font-family: \"Poppins\", sans-serif; }\n .flag-color { color: #ff00aa; }\n .flag-background { background-color: rgb(20, 180, 220); }\n .flag-border { border-color: #00a982; }\n .flag-radius { border-radius: 18px; }\n .flag-font-size { font-size: 12.5px; }\n\n .pass-display-font { font-family: \"Avenir Next\", Georgia, serif; }\n .pass-rem-font-size { font-size: 1rem; }\n .pass-relative-font-size { font-size: 1.2em; }\n .pass-generic-font { font-family: ui-sans-serif, system-ui, sans-serif; }\n .pass-token-color { color: var(--brand-accent); }\n .pass-alpha-color { color: rgba(184, 66, 46, 0.45); }\n .pass-close-color { color: #bb442f; }\n .pass-ramp-color { color: #d55a42; }\n .pass-zero-radius { border-radius: 0; }\n .pass-percent-radius { border-radius: 50%; }\n .pass-scale-radius { border-radius: 32px; }\n .pass-mid-pill-radius { border-radius: 100px; }\n .pass-pill-radius { border-radius: 999px; }\n ","rules":[{"selector":".design-system-fixture","declarations":[{"prop":"--brand-accent","value":"#b8422e","important":false},{"prop":"background","value":"#f7f4ee","important":false},{"prop":"color","value":"#241f1a","important":false},{"prop":"font-family","value":"\"IBM Plex Sans\",Arial,sans-serif","important":false},{"prop":"padding","value":"24px","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null},{"selector":".case","declarations":[{"prop":"margin","value":"0 0 12px","important":false},{"prop":"padding","value":"14px 16px","important":false},{"prop":"border-radius","value":"8px","important":false},{"prop":"border","value":"1px solid #d4c7b9","important":false},{"prop":"background","value":"#ffffff","important":false},{"prop":"color","value":"#241f1a","important":false},{"prop":"font-size","value":"16px","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null},{"selector":".fixture-note","declarations":[{"prop":"margin","value":"0 0 16px","important":false},{"prop":"padding","value":"12px 14px","important":false},{"prop":"border-radius","value":"8px","important":false},{"prop":"border","value":"1px solid #d4c7b9","important":false},{"prop":"background","value":"#f7f4ee","important":false},{"prop":"color","value":"#241f1a","important":false},{"prop":"font-size","value":"14px","important":false},{"prop":"line-height","value":"1.45","important":false}],"specificity":[0,1,0],"order":2,"isHover":false,"matchSelector":null},{"selector":".fixture-note strong","declarations":[{"prop":"font-weight","value":"700","important":false}],"specificity":[0,1,1],"order":3,"isHover":false,"matchSelector":null},{"selector":".flag-font","declarations":[{"prop":"font-family","value":"\"Poppins\",sans-serif","important":false}],"specificity":[0,1,0],"order":4,"isHover":false,"matchSelector":null},{"selector":".flag-color","declarations":[{"prop":"color","value":"#ff00aa","important":false}],"specificity":[0,1,0],"order":5,"isHover":false,"matchSelector":null},{"selector":".flag-background","declarations":[{"prop":"background-color","value":"rgb(20,180,220)","important":false}],"specificity":[0,1,0],"order":6,"isHover":false,"matchSelector":null},{"selector":".flag-border","declarations":[{"prop":"border-color","value":"#00a982","important":false}],"specificity":[0,1,0],"order":7,"isHover":false,"matchSelector":null},{"selector":".flag-radius","declarations":[{"prop":"border-radius","value":"18px","important":false}],"specificity":[0,1,0],"order":8,"isHover":false,"matchSelector":null},{"selector":".flag-font-size","declarations":[{"prop":"font-size","value":"12.5px","important":false}],"specificity":[0,1,0],"order":9,"isHover":false,"matchSelector":null},{"selector":".pass-display-font","declarations":[{"prop":"font-family","value":"\"Avenir Next\",Georgia,serif","important":false}],"specificity":[0,1,0],"order":10,"isHover":false,"matchSelector":null},{"selector":".pass-rem-font-size","declarations":[{"prop":"font-size","value":"1rem","important":false}],"specificity":[0,1,0],"order":11,"isHover":false,"matchSelector":null},{"selector":".pass-relative-font-size","declarations":[{"prop":"font-size","value":"1.2em","important":false}],"specificity":[0,1,0],"order":12,"isHover":false,"matchSelector":null},{"selector":".pass-generic-font","declarations":[{"prop":"font-family","value":"ui-sans-serif,system-ui,sans-serif","important":false}],"specificity":[0,1,0],"order":13,"isHover":false,"matchSelector":null},{"selector":".pass-token-color","declarations":[{"prop":"color","value":"var(--brand-accent)","important":false}],"specificity":[0,1,0],"order":14,"isHover":false,"matchSelector":null},{"selector":".pass-alpha-color","declarations":[{"prop":"color","value":"rgba(184,66,46,0.45)","important":false}],"specificity":[0,1,0],"order":15,"isHover":false,"matchSelector":null},{"selector":".pass-close-color","declarations":[{"prop":"color","value":"#bb442f","important":false}],"specificity":[0,1,0],"order":16,"isHover":false,"matchSelector":null},{"selector":".pass-ramp-color","declarations":[{"prop":"color","value":"#d55a42","important":false}],"specificity":[0,1,0],"order":17,"isHover":false,"matchSelector":null},{"selector":".pass-zero-radius","declarations":[{"prop":"border-radius","value":"0","important":false}],"specificity":[0,1,0],"order":18,"isHover":false,"matchSelector":null},{"selector":".pass-percent-radius","declarations":[{"prop":"border-radius","value":"50%","important":false}],"specificity":[0,1,0],"order":19,"isHover":false,"matchSelector":null},{"selector":".pass-scale-radius","declarations":[{"prop":"border-radius","value":"32px","important":false}],"specificity":[0,1,0],"order":20,"isHover":false,"matchSelector":null},{"selector":".pass-mid-pill-radius","declarations":[{"prop":"border-radius","value":"100px","important":false}],"specificity":[0,1,0],"order":21,"isHover":false,"matchSelector":null},{"selector":".pass-pill-radius","declarations":[{"prop":"border-radius","value":"999px","important":false}],"specificity":[0,1,0],"order":22,"isHover":false,"matchSelector":null}],"unwrapped":"\n .design-system-fixture {\n --brand-accent: #b8422e;\n background: #f7f4ee;\n color: #241f1a;\n font-family: \"IBM Plex Sans\", Arial, sans-serif;\n padding: 24px;\n }\n\n .case {\n margin: 0 0 12px;\n padding: 14px 16px;\n border-radius: 8px;\n border: 1px solid #d4c7b9;\n background: #ffffff;\n color: #241f1a;\n font-size: 16px;\n }\n\n .fixture-note {\n margin: 0 0 16px;\n padding: 12px 14px;\n border-radius: 8px;\n border: 1px solid #d4c7b9;\n background: #f7f4ee;\n color: #241f1a;\n font-size: 14px;\n line-height: 1.45;\n }\n\n .fixture-note strong {\n font-weight: 700;\n }\n\n .flag-font { font-family: \"Poppins\", sans-serif; }\n .flag-color { color: #ff00aa; }\n .flag-background { background-color: rgb(20, 180, 220); }\n .flag-border { border-color: #00a982; }\n .flag-radius { border-radius: 18px; }\n .flag-font-size { font-size: 12.5px; }\n\n .pass-display-font { font-family: \"Avenir Next\", Georgia, serif; }\n .pass-rem-font-size { font-size: 1rem; }\n .pass-relative-font-size { font-size: 1.2em; }\n .pass-generic-font { font-family: ui-sans-serif, system-ui, sans-serif; }\n .pass-token-color { color: var(--brand-accent); }\n .pass-alpha-color { color: rgba(184, 66, 46, 0.45); }\n .pass-close-color { color: #bb442f; }\n .pass-ramp-color { color: #d55a42; }\n .pass-zero-radius { border-radius: 0; }\n .pass-percent-radius { border-radius: 50%; }\n .pass-scale-radius { border-radius: 32px; }\n .pass-mid-pill-radius { border-radius: 100px; }\n .pass-pill-radius { border-radius: 999px; }\n "},{"name":"tests/fixtures/antipatterns/edge-flush-cards.html","css":"\n body { font-family: system-ui, sans-serif; margin: 0; color: #1a1a1a; background: #f2f2f4; }\n h2 { padding: 16px 24px 0; font-size: 16px; }\n .scroller { width: 600px; margin: 8px 24px 24px; overflow-x: auto; display: flex; scroll-snap-type: x mandatory; background: #e4e4e8; }\n .panel { flex: 0 0 auto; scroll-snap-align: start; }\n .card { background: #fff; border-radius: 10px; height: 90px; padding: 12px; box-sizing: border-box; margin-bottom: 12px; }\n .plain { height: 90px; padding: 12px; box-sizing: border-box; }\n\n /* FLAG: first panel is wider than the scroller's clip box, so its cards\n keep a 16px left gutter but end 4px past the right clip edge. */\n .flag-pager .panel-wide { width: 620px; }\n .flag-pager .panel-wide .card { margin-left: 16px; width: 588px; }\n .flag-pager .panel-ok { width: 600px; }\n .flag-pager .panel-ok .card { margin-left: 16px; width: 568px; }\n\n /* PASS: every panel keeps a symmetric inset. */\n .pass-even .panel { width: 600px; }\n .pass-even .card { margin-left: 16px; width: 568px; }\n\n /* PASS: deliberate peek carousel; the third card is cut mid-card, far\n past the clip edge, which reads as an affordance rather than a bug. */\n .pass-peek { gap: 12px; padding: 12px 0 12px 16px; }\n .pass-peek .card { flex: 0 0 auto; width: 260px; margin: 0; }\n\n /* PASS: flush children without card styling are plain content, not cards. */\n .pass-plain .panel { width: 620px; }\n .pass-plain .plain { margin-left: 16px; width: 588px; }\n ","rules":[{"selector":"body","declarations":[{"prop":"font-family","value":"system-ui,sans-serif","important":false},{"prop":"margin","value":"0","important":false},{"prop":"color","value":"#1a1a1a","important":false},{"prop":"background","value":"#f2f2f4","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":"h2","declarations":[{"prop":"padding","value":"16px 24px 0","important":false},{"prop":"font-size","value":"16px","important":false}],"specificity":[0,0,1],"order":1,"isHover":false,"matchSelector":null},{"selector":".scroller","declarations":[{"prop":"width","value":"600px","important":false},{"prop":"margin","value":"8px 24px 24px","important":false},{"prop":"overflow-x","value":"auto","important":false},{"prop":"display","value":"flex","important":false},{"prop":"scroll-snap-type","value":"x mandatory","important":false},{"prop":"background","value":"#e4e4e8","important":false}],"specificity":[0,1,0],"order":2,"isHover":false,"matchSelector":null},{"selector":".panel","declarations":[{"prop":"flex","value":"0 0 auto","important":false},{"prop":"scroll-snap-align","value":"start","important":false}],"specificity":[0,1,0],"order":3,"isHover":false,"matchSelector":null},{"selector":".card","declarations":[{"prop":"background","value":"#fff","important":false},{"prop":"border-radius","value":"10px","important":false},{"prop":"height","value":"90px","important":false},{"prop":"padding","value":"12px","important":false},{"prop":"box-sizing","value":"border-box","important":false},{"prop":"margin-bottom","value":"12px","important":false}],"specificity":[0,1,0],"order":4,"isHover":false,"matchSelector":null},{"selector":".plain","declarations":[{"prop":"height","value":"90px","important":false},{"prop":"padding","value":"12px","important":false},{"prop":"box-sizing","value":"border-box","important":false}],"specificity":[0,1,0],"order":5,"isHover":false,"matchSelector":null},{"selector":".flag-pager .panel-wide","declarations":[{"prop":"width","value":"620px","important":false}],"specificity":[0,2,0],"order":6,"isHover":false,"matchSelector":null},{"selector":".flag-pager .panel-wide .card","declarations":[{"prop":"margin-left","value":"16px","important":false},{"prop":"width","value":"588px","important":false}],"specificity":[0,3,0],"order":7,"isHover":false,"matchSelector":null},{"selector":".flag-pager .panel-ok","declarations":[{"prop":"width","value":"600px","important":false}],"specificity":[0,2,0],"order":8,"isHover":false,"matchSelector":null},{"selector":".flag-pager .panel-ok .card","declarations":[{"prop":"margin-left","value":"16px","important":false},{"prop":"width","value":"568px","important":false}],"specificity":[0,3,0],"order":9,"isHover":false,"matchSelector":null},{"selector":".pass-even .panel","declarations":[{"prop":"width","value":"600px","important":false}],"specificity":[0,2,0],"order":10,"isHover":false,"matchSelector":null},{"selector":".pass-even .card","declarations":[{"prop":"margin-left","value":"16px","important":false},{"prop":"width","value":"568px","important":false}],"specificity":[0,2,0],"order":11,"isHover":false,"matchSelector":null},{"selector":".pass-peek","declarations":[{"prop":"gap","value":"12px","important":false},{"prop":"padding","value":"12px 0 12px 16px","important":false}],"specificity":[0,1,0],"order":12,"isHover":false,"matchSelector":null},{"selector":".pass-peek .card","declarations":[{"prop":"flex","value":"0 0 auto","important":false},{"prop":"width","value":"260px","important":false},{"prop":"margin","value":"0","important":false}],"specificity":[0,2,0],"order":13,"isHover":false,"matchSelector":null},{"selector":".pass-plain .panel","declarations":[{"prop":"width","value":"620px","important":false}],"specificity":[0,2,0],"order":14,"isHover":false,"matchSelector":null},{"selector":".pass-plain .plain","declarations":[{"prop":"margin-left","value":"16px","important":false},{"prop":"width","value":"588px","important":false}],"specificity":[0,2,0],"order":15,"isHover":false,"matchSelector":null}],"unwrapped":"\n body { font-family: system-ui, sans-serif; margin: 0; color: #1a1a1a; background: #f2f2f4; }\n h2 { padding: 16px 24px 0; font-size: 16px; }\n .scroller { width: 600px; margin: 8px 24px 24px; overflow-x: auto; display: flex; scroll-snap-type: x mandatory; background: #e4e4e8; }\n .panel { flex: 0 0 auto; scroll-snap-align: start; }\n .card { background: #fff; border-radius: 10px; height: 90px; padding: 12px; box-sizing: border-box; margin-bottom: 12px; }\n .plain { height: 90px; padding: 12px; box-sizing: border-box; }\n\n /* FLAG: first panel is wider than the scroller's clip box, so its cards\n keep a 16px left gutter but end 4px past the right clip edge. */\n .flag-pager .panel-wide { width: 620px; }\n .flag-pager .panel-wide .card { margin-left: 16px; width: 588px; }\n .flag-pager .panel-ok { width: 600px; }\n .flag-pager .panel-ok .card { margin-left: 16px; width: 568px; }\n\n /* PASS: every panel keeps a symmetric inset. */\n .pass-even .panel { width: 600px; }\n .pass-even .card { margin-left: 16px; width: 568px; }\n\n /* PASS: deliberate peek carousel; the third card is cut mid-card, far\n past the clip edge, which reads as an affordance rather than a bug. */\n .pass-peek { gap: 12px; padding: 12px 0 12px 16px; }\n .pass-peek .card { flex: 0 0 auto; width: 260px; margin: 0; }\n\n /* PASS: flush children without card styling are plain content, not cards. */\n .pass-plain .panel { width: 620px; }\n .pass-plain .plain { margin-left: 16px; width: 588px; }\n "},{"name":"tests/fixtures/antipatterns/external-styles.css","css":"/* External stylesheet that applies anti-pattern styles */\n\n/* Side-tab via external class */\n.external-side-tab {\n background: white;\n padding: 1rem;\n border-radius: 12px;\n border-left: 4px solid #3b82f6;\n box-shadow: 0 1px 3px rgba(0,0,0,0.1);\n}\n\n/* Top border accent via external class */\n.external-top-accent {\n background: white;\n padding: 1rem;\n border-radius: 12px;\n border-top: 3px solid #8b5cf6;\n box-shadow: 0 1px 3px rgba(0,0,0,0.1);\n}\n\n/* Overused font from external stylesheet */\n.external-inter {\n font-family: 'Inter', sans-serif;\n}\n\n/* Clean card — should NOT flag */\n.external-clean {\n background: white;\n padding: 1rem;\n border-radius: 12px;\n border: 1px solid #e5e7eb;\n box-shadow: 0 1px 3px rgba(0,0,0,0.1);\n}\n\n/* Neutral side rule — should NOT flag */\n.external-neutral-side {\n background: white;\n padding: 1rem;\n border-radius: 12px;\n border-left: 4px solid #d1d5db;\n box-shadow: 0 1px 3px rgba(0,0,0,0.1);\n}\n\n/* Top rule without rounded card corners — should NOT flag */\n.external-square-top {\n background: white;\n padding: 1rem;\n border-radius: 0;\n border-top: 4px solid #8b5cf6;\n box-shadow: 0 1px 3px rgba(0,0,0,0.1);\n}\n","rules":[{"selector":".external-side-tab","declarations":[{"prop":"background","value":"white","important":false},{"prop":"padding","value":"1rem","important":false},{"prop":"border-radius","value":"12px","important":false},{"prop":"border-left","value":"4px solid #3b82f6","important":false},{"prop":"box-shadow","value":"0 1px 3px rgba(0,0,0,0.1)","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null},{"selector":".external-top-accent","declarations":[{"prop":"background","value":"white","important":false},{"prop":"padding","value":"1rem","important":false},{"prop":"border-radius","value":"12px","important":false},{"prop":"border-top","value":"3px solid #8b5cf6","important":false},{"prop":"box-shadow","value":"0 1px 3px rgba(0,0,0,0.1)","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null},{"selector":".external-inter","declarations":[{"prop":"font-family","value":"\"Inter\",sans-serif","important":false}],"specificity":[0,1,0],"order":2,"isHover":false,"matchSelector":null},{"selector":".external-clean","declarations":[{"prop":"background","value":"white","important":false},{"prop":"padding","value":"1rem","important":false},{"prop":"border-radius","value":"12px","important":false},{"prop":"border","value":"1px solid #e5e7eb","important":false},{"prop":"box-shadow","value":"0 1px 3px rgba(0,0,0,0.1)","important":false}],"specificity":[0,1,0],"order":3,"isHover":false,"matchSelector":null},{"selector":".external-neutral-side","declarations":[{"prop":"background","value":"white","important":false},{"prop":"padding","value":"1rem","important":false},{"prop":"border-radius","value":"12px","important":false},{"prop":"border-left","value":"4px solid #d1d5db","important":false},{"prop":"box-shadow","value":"0 1px 3px rgba(0,0,0,0.1)","important":false}],"specificity":[0,1,0],"order":4,"isHover":false,"matchSelector":null},{"selector":".external-square-top","declarations":[{"prop":"background","value":"white","important":false},{"prop":"padding","value":"1rem","important":false},{"prop":"border-radius","value":"0","important":false},{"prop":"border-top","value":"4px solid #8b5cf6","important":false},{"prop":"box-shadow","value":"0 1px 3px rgba(0,0,0,0.1)","important":false}],"specificity":[0,1,0],"order":5,"isHover":false,"matchSelector":null}],"unwrapped":"/* External stylesheet that applies anti-pattern styles */\n\n/* Side-tab via external class */\n.external-side-tab {\n background: white;\n padding: 1rem;\n border-radius: 12px;\n border-left: 4px solid #3b82f6;\n box-shadow: 0 1px 3px rgba(0,0,0,0.1);\n}\n\n/* Top border accent via external class */\n.external-top-accent {\n background: white;\n padding: 1rem;\n border-radius: 12px;\n border-top: 3px solid #8b5cf6;\n box-shadow: 0 1px 3px rgba(0,0,0,0.1);\n}\n\n/* Overused font from external stylesheet */\n.external-inter {\n font-family: 'Inter', sans-serif;\n}\n\n/* Clean card — should NOT flag */\n.external-clean {\n background: white;\n padding: 1rem;\n border-radius: 12px;\n border: 1px solid #e5e7eb;\n box-shadow: 0 1px 3px rgba(0,0,0,0.1);\n}\n\n/* Neutral side rule — should NOT flag */\n.external-neutral-side {\n background: white;\n padding: 1rem;\n border-radius: 12px;\n border-left: 4px solid #d1d5db;\n box-shadow: 0 1px 3px rgba(0,0,0,0.1);\n}\n\n/* Top rule without rounded card corners — should NOT flag */\n.external-square-top {\n background: white;\n padding: 1rem;\n border-radius: 0;\n border-top: 4px solid #8b5cf6;\n box-shadow: 0 1px 3px rgba(0,0,0,0.1);\n}\n"},{"name":"tests/fixtures/antipatterns/extreme-negative-tracking.html","css":"\n body { font-family: Georgia, serif; margin: 0; color: #1a1a1a; background: #fff; }\n .cols { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; padding: 24px; }\n .col { padding: 16px; }\n p, h2 { margin: 0 0 20px; }\n ","rules":[{"selector":"body","declarations":[{"prop":"font-family","value":"Georgia,serif","important":false},{"prop":"margin","value":"0","important":false},{"prop":"color","value":"#1a1a1a","important":false},{"prop":"background","value":"#fff","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":".cols","declarations":[{"prop":"display","value":"grid","important":false},{"prop":"grid-template-columns","value":"1fr 1fr","important":false},{"prop":"gap","value":"24px","important":false},{"prop":"padding","value":"24px","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null},{"selector":".col","declarations":[{"prop":"padding","value":"16px","important":false}],"specificity":[0,1,0],"order":2,"isHover":false,"matchSelector":null},{"selector":"p","declarations":[{"prop":"margin","value":"0 0 20px","important":false}],"specificity":[0,0,1],"order":3,"isHover":false,"matchSelector":null},{"selector":"h2","declarations":[{"prop":"margin","value":"0 0 20px","important":false}],"specificity":[0,0,1],"order":4,"isHover":false,"matchSelector":null}],"unwrapped":"\n body { font-family: Georgia, serif; margin: 0; color: #1a1a1a; background: #fff; }\n .cols { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; padding: 24px; }\n .col { padding: 16px; }\n p, h2 { margin: 0 0 20px; }\n "},{"name":"tests/fixtures/antipatterns/first-viewport-column-overflow.html","css":"\n * { margin: 0; box-sizing: border-box; }\n body { font-family: system-ui, sans-serif; color: #111; background: #fff; }\n p { margin: 0 0 14px; line-height: 1.6; }\n\n /* ── FLAG: two-column opening section, right column runs far past the fold\n while the left column fits inside one viewport ── */\n .flag { display: grid; grid-template-columns: 1.4fr 1fr; gap: 40px; padding: 40px; }\n .flag .short { }\n .flag .short h1 { font-size: 40px; margin-bottom: 16px; }\n .flag .tall .filler { height: 1600px; background: #eee; border-radius: 8px; padding: 16px; }\n\n /* ── PASS: balanced two-column section, both fit ── */\n .pass-balanced { display: grid; grid-template-columns: 1fr 1fr; gap: 40px; padding: 40px; }\n .pass-balanced .col { }\n\n /* ── PASS: single full-page hero (no sibling column) ── */\n .pass-hero { padding: 40px; }\n .pass-hero .art { height: 1400px; background: #f3f3f3; }\n","rules":[{"selector":"*","declarations":[{"prop":"margin","value":"0","important":false},{"prop":"box-sizing","value":"border-box","important":false}],"specificity":[0,0,0],"order":0,"isHover":false,"matchSelector":null},{"selector":"body","declarations":[{"prop":"font-family","value":"system-ui,sans-serif","important":false},{"prop":"color","value":"#111","important":false},{"prop":"background","value":"#fff","important":false}],"specificity":[0,0,1],"order":1,"isHover":false,"matchSelector":null},{"selector":"p","declarations":[{"prop":"margin","value":"0 0 14px","important":false},{"prop":"line-height","value":"1.6","important":false}],"specificity":[0,0,1],"order":2,"isHover":false,"matchSelector":null},{"selector":".flag","declarations":[{"prop":"display","value":"grid","important":false},{"prop":"grid-template-columns","value":"1.4fr 1fr","important":false},{"prop":"gap","value":"40px","important":false},{"prop":"padding","value":"40px","important":false}],"specificity":[0,1,0],"order":3,"isHover":false,"matchSelector":null},{"selector":".flag .short","declarations":[],"specificity":[0,2,0],"order":4,"isHover":false,"matchSelector":null},{"selector":".flag .short h1","declarations":[{"prop":"font-size","value":"40px","important":false},{"prop":"margin-bottom","value":"16px","important":false}],"specificity":[0,2,1],"order":5,"isHover":false,"matchSelector":null},{"selector":".flag .tall .filler","declarations":[{"prop":"height","value":"1600px","important":false},{"prop":"background","value":"#eee","important":false},{"prop":"border-radius","value":"8px","important":false},{"prop":"padding","value":"16px","important":false}],"specificity":[0,3,0],"order":6,"isHover":false,"matchSelector":null},{"selector":".pass-balanced","declarations":[{"prop":"display","value":"grid","important":false},{"prop":"grid-template-columns","value":"1fr 1fr","important":false},{"prop":"gap","value":"40px","important":false},{"prop":"padding","value":"40px","important":false}],"specificity":[0,1,0],"order":7,"isHover":false,"matchSelector":null},{"selector":".pass-balanced .col","declarations":[],"specificity":[0,2,0],"order":8,"isHover":false,"matchSelector":null},{"selector":".pass-hero","declarations":[{"prop":"padding","value":"40px","important":false}],"specificity":[0,1,0],"order":9,"isHover":false,"matchSelector":null},{"selector":".pass-hero .art","declarations":[{"prop":"height","value":"1400px","important":false},{"prop":"background","value":"#f3f3f3","important":false}],"specificity":[0,2,0],"order":10,"isHover":false,"matchSelector":null}],"unwrapped":"\n * { margin: 0; box-sizing: border-box; }\n body { font-family: system-ui, sans-serif; color: #111; background: #fff; }\n p { margin: 0 0 14px; line-height: 1.6; }\n\n /* ── FLAG: two-column opening section, right column runs far past the fold\n while the left column fits inside one viewport ── */\n .flag { display: grid; grid-template-columns: 1.4fr 1fr; gap: 40px; padding: 40px; }\n .flag .short { }\n .flag .short h1 { font-size: 40px; margin-bottom: 16px; }\n .flag .tall .filler { height: 1600px; background: #eee; border-radius: 8px; padding: 16px; }\n\n /* ── PASS: balanced two-column section, both fit ── */\n .pass-balanced { display: grid; grid-template-columns: 1fr 1fr; gap: 40px; padding: 40px; }\n .pass-balanced .col { }\n\n /* ── PASS: single full-page hero (no sibling column) ── */\n .pass-hero { padding: 40px; }\n .pass-hero .art { height: 1400px; background: #f3f3f3; }\n"},{"name":"tests/fixtures/antipatterns/flush-against-border.html","css":"\n /* Fixture for the flush-against-border rule.\n\n The rule is more general than its name suggests: it fires when a\n container has any visible boundary (border, outline, OR a\n non-transparent background) AND zero inline padding on the\n bounded side, AND text-bearing children land flush against that\n boundary.\n\n Distinct from cramped-padding (which fires when an element has\n its OWN direct text and the padding/font-size ratio is wrong).\n Here the container has NO direct text; only children; so\n cramped-padding gives it a pass. */\n\n body { font-family: system-ui, sans-serif; background: #fafafa; padding: 24px; margin: 0; color: #0f172a; line-height: 1.5; }\n .grid { display: grid; grid-template-columns: 1fr 1fr; gap: 32px; max-width: 1400px; margin: 0 auto; }\n .col h2 { font-size: 22px; font-weight: 700; margin: 0 0 16px; color: #0f172a; line-height: 1.2; }\n .col h3 { font-size: 13px; font-weight: 500; text-transform: uppercase; letter-spacing: 0.06em; margin: 28px 0 10px; color: #64748b; }\n .case { margin-bottom: 14px; }\n .case-label { display: block; font-size: 12px; color: #64748b; margin-bottom: 8px; font-style: italic; max-width: 60ch; }\n\n /* ────────────────────────────────────────────────────────────\n SHOULD FLAG\n ──────────────────────────────────────────────────────────── */\n\n /* ── FLAG: the /live-mode-frameworks bug; border + zero side-padding ── */\n .flag-frameworks {\n padding: 28px 0 0;\n background: #fffbe6;\n border: 1px solid #d4a017;\n border-radius: 8px;\n display: flex;\n flex-direction: column;\n gap: 10px;\n }\n .flag-frameworks-label {\n font-family: ui-monospace, monospace;\n font-size: 11px;\n letter-spacing: 0.18em;\n text-transform: uppercase;\n color: #8b6914;\n }\n .flag-frameworks-list {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n list-style: none;\n padding: 0;\n margin: 0;\n }\n .flag-frameworks-list li {\n font-family: ui-monospace, monospace;\n font-size: 13px;\n padding: 6px 12px;\n background: #fef3c7;\n border: 1px solid #d4a017;\n border-radius: 4px;\n color: #78350f;\n }\n\n /* ── FLAG: child text flush against the four borders of a card ── */\n .flag-card-borders {\n padding: 0;\n background: white;\n border: 1px solid #cbd5e1;\n border-radius: 8px;\n }\n .flag-card-borders h4 { margin: 0; font-size: 14px; color: #0f172a; }\n .flag-card-borders p { margin: 4px 0 0; font-size: 13px; color: #475569; }\n\n /* ── FLAG: non-transparent background, zero padding ── */\n .flag-bg-only {\n padding: 0;\n background: #fde68a;\n border-radius: 6px;\n border: 0;\n }\n .flag-bg-only h4 { margin: 0; font-size: 14px; color: #78350f; }\n .flag-bg-only p { margin: 4px 0 0; font-size: 13px; color: #78350f; }\n\n /* ── FLAG: outline (no border), zero padding ── */\n .flag-outline-only {\n padding: 0;\n background: transparent;\n border: 0;\n outline: 2px solid #94a3b8;\n outline-offset: 0;\n }\n .flag-outline-only h4 { margin: 0; font-size: 14px; color: #0f172a; }\n .flag-outline-only p { margin: 4px 0 0; font-size: 13px; color: #475569; }\n\n /* ── FLAG: border-left + zero left-padding, other sides fine ── */\n .flag-asym-leftflush {\n padding: 12px 16px 12px 0;\n background: white;\n border: 1px solid #cbd5e1;\n border-radius: 4px;\n }\n .flag-asym-leftflush h4 { margin: 0; font-size: 14px; color: #0f172a; }\n .flag-asym-leftflush p { margin: 4px 0 0; font-size: 13px; color: #475569; }\n\n /* ────────────────────────────────────────────────────────────\n SHOULD PASS\n ──────────────────────────────────────────────────────────── */\n\n /* ── PASS: no boundary at all (no bg, no border, no outline) ── */\n .pass-no-boundary {\n padding: 0;\n background: transparent;\n border: 0;\n outline: 0;\n }\n .pass-no-boundary-label {\n font-family: ui-monospace, monospace;\n font-size: 11px;\n letter-spacing: 0.18em;\n text-transform: uppercase;\n color: #475569;\n margin-bottom: 10px;\n }\n .pass-no-boundary-list {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n list-style: none;\n padding: 0;\n margin: 0;\n }\n .pass-no-boundary-list li {\n font-size: 13px;\n padding: 6px 12px;\n background: #f5f5f7;\n border: 1px solid #e2e8f0;\n border-radius: 4px;\n color: #0f172a;\n }\n\n /* ── PASS: top-only border, no left/right border, padding-top fine ── */\n .pass-top-rule {\n padding: 24px 0 0;\n background: transparent;\n border: 0;\n border-top: 1px solid #cbd5e1;\n }\n .pass-top-rule-label {\n font-family: ui-monospace, monospace;\n font-size: 11px;\n letter-spacing: 0.18em;\n text-transform: uppercase;\n color: #475569;\n margin-bottom: 10px;\n }\n .pass-top-rule-list {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n list-style: none;\n padding: 0;\n margin: 0;\n }\n .pass-top-rule-list li {\n font-size: 13px;\n padding: 6px 12px;\n background: #f5f5f7;\n border: 1px solid #e2e8f0;\n border-radius: 4px;\n color: #0f172a;\n }\n\n /* ── PASS: bordered card with comfortable inset on all sides ── */\n .pass-bordered-padded {\n padding: 18px 20px;\n background: white;\n border: 1px solid #cbd5e1;\n border-radius: 8px;\n }\n .pass-bordered-padded h4 { margin: 0; font-size: 14px; color: #0f172a; }\n .pass-bordered-padded p { margin: 4px 0 0; font-size: 13px; color: #475569; }\n\n /* ── PASS: background card with comfortable inset ── */\n .pass-bg-padded {\n padding: 14px 18px;\n background: #fde68a;\n border-radius: 6px;\n border: 0;\n }\n .pass-bg-padded h4 { margin: 0; font-size: 14px; color: #78350f; }\n .pass-bg-padded p { margin: 4px 0 0; font-size: 13px; color: #78350f; }\n\n /* ── PASS: outline with comfortable inset ── */\n .pass-outline-padded {\n padding: 14px 18px;\n outline: 2px solid #94a3b8;\n outline-offset: 0;\n border: 0;\n background: transparent;\n }\n .pass-outline-padded h4 { margin: 0; font-size: 14px; color: #0f172a; }\n .pass-outline-padded p { margin: 4px 0 0; font-size: 13px; color: #475569; }\n\n /* ── PASS: image-only container, no text means no flush issue ── */\n .pass-image-only {\n padding: 0;\n background: white;\n border: 1px solid #cbd5e1;\n border-radius: 8px;\n width: 200px;\n overflow: hidden;\n }\n .pass-image-only .placeholder-img {\n width: 100%;\n height: 80px;\n background: linear-gradient(135deg, #cbd5e1, #94a3b8);\n }\n\n /* ── PASS: parent has zero padding, but child margins create the visible inset ── */\n .pass-margin-inset {\n padding: 0;\n background: white;\n border: 1px solid #cbd5e1;\n border-radius: 8px;\n }\n .pass-margin-inset h4 { margin: 16px 18px 4px; font-size: 14px; color: #0f172a; }\n .pass-margin-inset p { margin: 0 18px 16px; font-size: 13px; color: #475569; }\n\n /* ── PASS: an inner shell, not the parent, owns the inset spacing ── */\n .pass-inner-shell {\n padding: 0;\n background: white;\n border: 1px solid #cbd5e1;\n border-radius: 8px;\n }\n .pass-inner-shell .inner-shell {\n margin: 18px;\n }\n .pass-inner-shell h4 { margin: 0 0 4px; font-size: 14px; color: #0f172a; }\n .pass-inner-shell p { margin: 0; font-size: 13px; color: #475569; }\n\n /* ── PASS: same background as parent, so the child draws no visible boundary ── */\n .pass-same-bg-parent {\n padding: 16px;\n background: #eef2f7;\n border-radius: 8px;\n }\n .pass-same-bg-child {\n padding: 0;\n background: #eef2f7;\n border: 0;\n border-radius: 8px;\n }\n .pass-same-bg-child h4 { margin: 0; font-size: 14px; color: #0f172a; }\n .pass-same-bg-child p { margin: 4px 0 0; font-size: 13px; color: #475569; }\n\n /* ── PASS: full-bleed marquee/surface, not a text card missing padding ── */\n .pass-marquee-shell {\n padding: 0;\n background: #172033;\n color: white;\n overflow: hidden;\n border: 0;\n }\n .pass-marquee-track {\n display: flex;\n gap: 12px;\n width: max-content;\n }\n .pass-marquee-card {\n width: 220px;\n padding: 14px;\n background: #23304a;\n border: 1px solid rgba(255, 255, 255, 0.16);\n }\n .pass-marquee-card p { margin: 0; font-size: 13px; }\n\n /* ── PASS: outer scene owns background; inner text surface owns padding ── */\n .pass-inner-text-surface {\n padding: 0;\n background: #0f172a;\n color: white;\n overflow: hidden;\n border: 0;\n }\n .pass-inner-text-surface-window {\n display: grid;\n gap: 6px;\n min-height: 92px;\n padding: 14px;\n background: #111827;\n border: 1px solid rgba(255, 255, 255, 0.16);\n }\n .pass-inner-text-surface-window p { margin: 0; font-size: 13px; }\n ","rules":[{"selector":"body","declarations":[{"prop":"font-family","value":"system-ui,sans-serif","important":false},{"prop":"background","value":"#fafafa","important":false},{"prop":"padding","value":"24px","important":false},{"prop":"margin","value":"0","important":false},{"prop":"color","value":"#0f172a","important":false},{"prop":"line-height","value":"1.5","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":".grid","declarations":[{"prop":"display","value":"grid","important":false},{"prop":"grid-template-columns","value":"1fr 1fr","important":false},{"prop":"gap","value":"32px","important":false},{"prop":"max-width","value":"1400px","important":false},{"prop":"margin","value":"0 auto","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null},{"selector":".col h2","declarations":[{"prop":"font-size","value":"22px","important":false},{"prop":"font-weight","value":"700","important":false},{"prop":"margin","value":"0 0 16px","important":false},{"prop":"color","value":"#0f172a","important":false},{"prop":"line-height","value":"1.2","important":false}],"specificity":[0,1,1],"order":2,"isHover":false,"matchSelector":null},{"selector":".col h3","declarations":[{"prop":"font-size","value":"13px","important":false},{"prop":"font-weight","value":"500","important":false},{"prop":"text-transform","value":"uppercase","important":false},{"prop":"letter-spacing","value":"0.06em","important":false},{"prop":"margin","value":"28px 0 10px","important":false},{"prop":"color","value":"#64748b","important":false}],"specificity":[0,1,1],"order":3,"isHover":false,"matchSelector":null},{"selector":".case","declarations":[{"prop":"margin-bottom","value":"14px","important":false}],"specificity":[0,1,0],"order":4,"isHover":false,"matchSelector":null},{"selector":".case-label","declarations":[{"prop":"display","value":"block","important":false},{"prop":"font-size","value":"12px","important":false},{"prop":"color","value":"#64748b","important":false},{"prop":"margin-bottom","value":"8px","important":false},{"prop":"font-style","value":"italic","important":false},{"prop":"max-width","value":"60ch","important":false}],"specificity":[0,1,0],"order":5,"isHover":false,"matchSelector":null},{"selector":".flag-frameworks","declarations":[{"prop":"padding","value":"28px 0 0","important":false},{"prop":"background","value":"#fffbe6","important":false},{"prop":"border","value":"1px solid #d4a017","important":false},{"prop":"border-radius","value":"8px","important":false},{"prop":"display","value":"flex","important":false},{"prop":"flex-direction","value":"column","important":false},{"prop":"gap","value":"10px","important":false}],"specificity":[0,1,0],"order":6,"isHover":false,"matchSelector":null},{"selector":".flag-frameworks-label","declarations":[{"prop":"font-family","value":"ui-monospace,monospace","important":false},{"prop":"font-size","value":"11px","important":false},{"prop":"letter-spacing","value":"0.18em","important":false},{"prop":"text-transform","value":"uppercase","important":false},{"prop":"color","value":"#8b6914","important":false}],"specificity":[0,1,0],"order":7,"isHover":false,"matchSelector":null},{"selector":".flag-frameworks-list","declarations":[{"prop":"display","value":"flex","important":false},{"prop":"flex-wrap","value":"wrap","important":false},{"prop":"gap","value":"8px","important":false},{"prop":"list-style","value":"none","important":false},{"prop":"padding","value":"0","important":false},{"prop":"margin","value":"0","important":false}],"specificity":[0,1,0],"order":8,"isHover":false,"matchSelector":null},{"selector":".flag-frameworks-list li","declarations":[{"prop":"font-family","value":"ui-monospace,monospace","important":false},{"prop":"font-size","value":"13px","important":false},{"prop":"padding","value":"6px 12px","important":false},{"prop":"background","value":"#fef3c7","important":false},{"prop":"border","value":"1px solid #d4a017","important":false},{"prop":"border-radius","value":"4px","important":false},{"prop":"color","value":"#78350f","important":false}],"specificity":[0,1,1],"order":9,"isHover":false,"matchSelector":null},{"selector":".flag-card-borders","declarations":[{"prop":"padding","value":"0","important":false},{"prop":"background","value":"white","important":false},{"prop":"border","value":"1px solid #cbd5e1","important":false},{"prop":"border-radius","value":"8px","important":false}],"specificity":[0,1,0],"order":10,"isHover":false,"matchSelector":null},{"selector":".flag-card-borders h4","declarations":[{"prop":"margin","value":"0","important":false},{"prop":"font-size","value":"14px","important":false},{"prop":"color","value":"#0f172a","important":false}],"specificity":[0,1,1],"order":11,"isHover":false,"matchSelector":null},{"selector":".flag-card-borders p","declarations":[{"prop":"margin","value":"4px 0 0","important":false},{"prop":"font-size","value":"13px","important":false},{"prop":"color","value":"#475569","important":false}],"specificity":[0,1,1],"order":12,"isHover":false,"matchSelector":null},{"selector":".flag-bg-only","declarations":[{"prop":"padding","value":"0","important":false},{"prop":"background","value":"#fde68a","important":false},{"prop":"border-radius","value":"6px","important":false},{"prop":"border","value":"0","important":false}],"specificity":[0,1,0],"order":13,"isHover":false,"matchSelector":null},{"selector":".flag-bg-only h4","declarations":[{"prop":"margin","value":"0","important":false},{"prop":"font-size","value":"14px","important":false},{"prop":"color","value":"#78350f","important":false}],"specificity":[0,1,1],"order":14,"isHover":false,"matchSelector":null},{"selector":".flag-bg-only p","declarations":[{"prop":"margin","value":"4px 0 0","important":false},{"prop":"font-size","value":"13px","important":false},{"prop":"color","value":"#78350f","important":false}],"specificity":[0,1,1],"order":15,"isHover":false,"matchSelector":null},{"selector":".flag-outline-only","declarations":[{"prop":"padding","value":"0","important":false},{"prop":"background","value":"transparent","important":false},{"prop":"border","value":"0","important":false},{"prop":"outline","value":"2px solid #94a3b8","important":false},{"prop":"outline-offset","value":"0","important":false}],"specificity":[0,1,0],"order":16,"isHover":false,"matchSelector":null},{"selector":".flag-outline-only h4","declarations":[{"prop":"margin","value":"0","important":false},{"prop":"font-size","value":"14px","important":false},{"prop":"color","value":"#0f172a","important":false}],"specificity":[0,1,1],"order":17,"isHover":false,"matchSelector":null},{"selector":".flag-outline-only p","declarations":[{"prop":"margin","value":"4px 0 0","important":false},{"prop":"font-size","value":"13px","important":false},{"prop":"color","value":"#475569","important":false}],"specificity":[0,1,1],"order":18,"isHover":false,"matchSelector":null},{"selector":".flag-asym-leftflush","declarations":[{"prop":"padding","value":"12px 16px 12px 0","important":false},{"prop":"background","value":"white","important":false},{"prop":"border","value":"1px solid #cbd5e1","important":false},{"prop":"border-radius","value":"4px","important":false}],"specificity":[0,1,0],"order":19,"isHover":false,"matchSelector":null},{"selector":".flag-asym-leftflush h4","declarations":[{"prop":"margin","value":"0","important":false},{"prop":"font-size","value":"14px","important":false},{"prop":"color","value":"#0f172a","important":false}],"specificity":[0,1,1],"order":20,"isHover":false,"matchSelector":null},{"selector":".flag-asym-leftflush p","declarations":[{"prop":"margin","value":"4px 0 0","important":false},{"prop":"font-size","value":"13px","important":false},{"prop":"color","value":"#475569","important":false}],"specificity":[0,1,1],"order":21,"isHover":false,"matchSelector":null},{"selector":".pass-no-boundary","declarations":[{"prop":"padding","value":"0","important":false},{"prop":"background","value":"transparent","important":false},{"prop":"border","value":"0","important":false},{"prop":"outline","value":"0","important":false}],"specificity":[0,1,0],"order":22,"isHover":false,"matchSelector":null},{"selector":".pass-no-boundary-label","declarations":[{"prop":"font-family","value":"ui-monospace,monospace","important":false},{"prop":"font-size","value":"11px","important":false},{"prop":"letter-spacing","value":"0.18em","important":false},{"prop":"text-transform","value":"uppercase","important":false},{"prop":"color","value":"#475569","important":false},{"prop":"margin-bottom","value":"10px","important":false}],"specificity":[0,1,0],"order":23,"isHover":false,"matchSelector":null},{"selector":".pass-no-boundary-list","declarations":[{"prop":"display","value":"flex","important":false},{"prop":"flex-wrap","value":"wrap","important":false},{"prop":"gap","value":"8px","important":false},{"prop":"list-style","value":"none","important":false},{"prop":"padding","value":"0","important":false},{"prop":"margin","value":"0","important":false}],"specificity":[0,1,0],"order":24,"isHover":false,"matchSelector":null},{"selector":".pass-no-boundary-list li","declarations":[{"prop":"font-size","value":"13px","important":false},{"prop":"padding","value":"6px 12px","important":false},{"prop":"background","value":"#f5f5f7","important":false},{"prop":"border","value":"1px solid #e2e8f0","important":false},{"prop":"border-radius","value":"4px","important":false},{"prop":"color","value":"#0f172a","important":false}],"specificity":[0,1,1],"order":25,"isHover":false,"matchSelector":null},{"selector":".pass-top-rule","declarations":[{"prop":"padding","value":"24px 0 0","important":false},{"prop":"background","value":"transparent","important":false},{"prop":"border","value":"0","important":false},{"prop":"border-top","value":"1px solid #cbd5e1","important":false}],"specificity":[0,1,0],"order":26,"isHover":false,"matchSelector":null},{"selector":".pass-top-rule-label","declarations":[{"prop":"font-family","value":"ui-monospace,monospace","important":false},{"prop":"font-size","value":"11px","important":false},{"prop":"letter-spacing","value":"0.18em","important":false},{"prop":"text-transform","value":"uppercase","important":false},{"prop":"color","value":"#475569","important":false},{"prop":"margin-bottom","value":"10px","important":false}],"specificity":[0,1,0],"order":27,"isHover":false,"matchSelector":null},{"selector":".pass-top-rule-list","declarations":[{"prop":"display","value":"flex","important":false},{"prop":"flex-wrap","value":"wrap","important":false},{"prop":"gap","value":"8px","important":false},{"prop":"list-style","value":"none","important":false},{"prop":"padding","value":"0","important":false},{"prop":"margin","value":"0","important":false}],"specificity":[0,1,0],"order":28,"isHover":false,"matchSelector":null},{"selector":".pass-top-rule-list li","declarations":[{"prop":"font-size","value":"13px","important":false},{"prop":"padding","value":"6px 12px","important":false},{"prop":"background","value":"#f5f5f7","important":false},{"prop":"border","value":"1px solid #e2e8f0","important":false},{"prop":"border-radius","value":"4px","important":false},{"prop":"color","value":"#0f172a","important":false}],"specificity":[0,1,1],"order":29,"isHover":false,"matchSelector":null},{"selector":".pass-bordered-padded","declarations":[{"prop":"padding","value":"18px 20px","important":false},{"prop":"background","value":"white","important":false},{"prop":"border","value":"1px solid #cbd5e1","important":false},{"prop":"border-radius","value":"8px","important":false}],"specificity":[0,1,0],"order":30,"isHover":false,"matchSelector":null},{"selector":".pass-bordered-padded h4","declarations":[{"prop":"margin","value":"0","important":false},{"prop":"font-size","value":"14px","important":false},{"prop":"color","value":"#0f172a","important":false}],"specificity":[0,1,1],"order":31,"isHover":false,"matchSelector":null},{"selector":".pass-bordered-padded p","declarations":[{"prop":"margin","value":"4px 0 0","important":false},{"prop":"font-size","value":"13px","important":false},{"prop":"color","value":"#475569","important":false}],"specificity":[0,1,1],"order":32,"isHover":false,"matchSelector":null},{"selector":".pass-bg-padded","declarations":[{"prop":"padding","value":"14px 18px","important":false},{"prop":"background","value":"#fde68a","important":false},{"prop":"border-radius","value":"6px","important":false},{"prop":"border","value":"0","important":false}],"specificity":[0,1,0],"order":33,"isHover":false,"matchSelector":null},{"selector":".pass-bg-padded h4","declarations":[{"prop":"margin","value":"0","important":false},{"prop":"font-size","value":"14px","important":false},{"prop":"color","value":"#78350f","important":false}],"specificity":[0,1,1],"order":34,"isHover":false,"matchSelector":null},{"selector":".pass-bg-padded p","declarations":[{"prop":"margin","value":"4px 0 0","important":false},{"prop":"font-size","value":"13px","important":false},{"prop":"color","value":"#78350f","important":false}],"specificity":[0,1,1],"order":35,"isHover":false,"matchSelector":null},{"selector":".pass-outline-padded","declarations":[{"prop":"padding","value":"14px 18px","important":false},{"prop":"outline","value":"2px solid #94a3b8","important":false},{"prop":"outline-offset","value":"0","important":false},{"prop":"border","value":"0","important":false},{"prop":"background","value":"transparent","important":false}],"specificity":[0,1,0],"order":36,"isHover":false,"matchSelector":null},{"selector":".pass-outline-padded h4","declarations":[{"prop":"margin","value":"0","important":false},{"prop":"font-size","value":"14px","important":false},{"prop":"color","value":"#0f172a","important":false}],"specificity":[0,1,1],"order":37,"isHover":false,"matchSelector":null},{"selector":".pass-outline-padded p","declarations":[{"prop":"margin","value":"4px 0 0","important":false},{"prop":"font-size","value":"13px","important":false},{"prop":"color","value":"#475569","important":false}],"specificity":[0,1,1],"order":38,"isHover":false,"matchSelector":null},{"selector":".pass-image-only","declarations":[{"prop":"padding","value":"0","important":false},{"prop":"background","value":"white","important":false},{"prop":"border","value":"1px solid #cbd5e1","important":false},{"prop":"border-radius","value":"8px","important":false},{"prop":"width","value":"200px","important":false},{"prop":"overflow","value":"hidden","important":false}],"specificity":[0,1,0],"order":39,"isHover":false,"matchSelector":null},{"selector":".pass-image-only .placeholder-img","declarations":[{"prop":"width","value":"100%","important":false},{"prop":"height","value":"80px","important":false},{"prop":"background","value":"linear-gradient(135deg,#cbd5e1,#94a3b8)","important":false}],"specificity":[0,2,0],"order":40,"isHover":false,"matchSelector":null},{"selector":".pass-margin-inset","declarations":[{"prop":"padding","value":"0","important":false},{"prop":"background","value":"white","important":false},{"prop":"border","value":"1px solid #cbd5e1","important":false},{"prop":"border-radius","value":"8px","important":false}],"specificity":[0,1,0],"order":41,"isHover":false,"matchSelector":null},{"selector":".pass-margin-inset h4","declarations":[{"prop":"margin","value":"16px 18px 4px","important":false},{"prop":"font-size","value":"14px","important":false},{"prop":"color","value":"#0f172a","important":false}],"specificity":[0,1,1],"order":42,"isHover":false,"matchSelector":null},{"selector":".pass-margin-inset p","declarations":[{"prop":"margin","value":"0 18px 16px","important":false},{"prop":"font-size","value":"13px","important":false},{"prop":"color","value":"#475569","important":false}],"specificity":[0,1,1],"order":43,"isHover":false,"matchSelector":null},{"selector":".pass-inner-shell","declarations":[{"prop":"padding","value":"0","important":false},{"prop":"background","value":"white","important":false},{"prop":"border","value":"1px solid #cbd5e1","important":false},{"prop":"border-radius","value":"8px","important":false}],"specificity":[0,1,0],"order":44,"isHover":false,"matchSelector":null},{"selector":".pass-inner-shell .inner-shell","declarations":[{"prop":"margin","value":"18px","important":false}],"specificity":[0,2,0],"order":45,"isHover":false,"matchSelector":null},{"selector":".pass-inner-shell h4","declarations":[{"prop":"margin","value":"0 0 4px","important":false},{"prop":"font-size","value":"14px","important":false},{"prop":"color","value":"#0f172a","important":false}],"specificity":[0,1,1],"order":46,"isHover":false,"matchSelector":null},{"selector":".pass-inner-shell p","declarations":[{"prop":"margin","value":"0","important":false},{"prop":"font-size","value":"13px","important":false},{"prop":"color","value":"#475569","important":false}],"specificity":[0,1,1],"order":47,"isHover":false,"matchSelector":null},{"selector":".pass-same-bg-parent","declarations":[{"prop":"padding","value":"16px","important":false},{"prop":"background","value":"#eef2f7","important":false},{"prop":"border-radius","value":"8px","important":false}],"specificity":[0,1,0],"order":48,"isHover":false,"matchSelector":null},{"selector":".pass-same-bg-child","declarations":[{"prop":"padding","value":"0","important":false},{"prop":"background","value":"#eef2f7","important":false},{"prop":"border","value":"0","important":false},{"prop":"border-radius","value":"8px","important":false}],"specificity":[0,1,0],"order":49,"isHover":false,"matchSelector":null},{"selector":".pass-same-bg-child h4","declarations":[{"prop":"margin","value":"0","important":false},{"prop":"font-size","value":"14px","important":false},{"prop":"color","value":"#0f172a","important":false}],"specificity":[0,1,1],"order":50,"isHover":false,"matchSelector":null},{"selector":".pass-same-bg-child p","declarations":[{"prop":"margin","value":"4px 0 0","important":false},{"prop":"font-size","value":"13px","important":false},{"prop":"color","value":"#475569","important":false}],"specificity":[0,1,1],"order":51,"isHover":false,"matchSelector":null},{"selector":".pass-marquee-shell","declarations":[{"prop":"padding","value":"0","important":false},{"prop":"background","value":"#172033","important":false},{"prop":"color","value":"white","important":false},{"prop":"overflow","value":"hidden","important":false},{"prop":"border","value":"0","important":false}],"specificity":[0,1,0],"order":52,"isHover":false,"matchSelector":null},{"selector":".pass-marquee-track","declarations":[{"prop":"display","value":"flex","important":false},{"prop":"gap","value":"12px","important":false},{"prop":"width","value":"max-content","important":false}],"specificity":[0,1,0],"order":53,"isHover":false,"matchSelector":null},{"selector":".pass-marquee-card","declarations":[{"prop":"width","value":"220px","important":false},{"prop":"padding","value":"14px","important":false},{"prop":"background","value":"#23304a","important":false},{"prop":"border","value":"1px solid rgba(255,255,255,0.16)","important":false}],"specificity":[0,1,0],"order":54,"isHover":false,"matchSelector":null},{"selector":".pass-marquee-card p","declarations":[{"prop":"margin","value":"0","important":false},{"prop":"font-size","value":"13px","important":false}],"specificity":[0,1,1],"order":55,"isHover":false,"matchSelector":null},{"selector":".pass-inner-text-surface","declarations":[{"prop":"padding","value":"0","important":false},{"prop":"background","value":"#0f172a","important":false},{"prop":"color","value":"white","important":false},{"prop":"overflow","value":"hidden","important":false},{"prop":"border","value":"0","important":false}],"specificity":[0,1,0],"order":56,"isHover":false,"matchSelector":null},{"selector":".pass-inner-text-surface-window","declarations":[{"prop":"display","value":"grid","important":false},{"prop":"gap","value":"6px","important":false},{"prop":"min-height","value":"92px","important":false},{"prop":"padding","value":"14px","important":false},{"prop":"background","value":"#111827","important":false},{"prop":"border","value":"1px solid rgba(255,255,255,0.16)","important":false}],"specificity":[0,1,0],"order":57,"isHover":false,"matchSelector":null},{"selector":".pass-inner-text-surface-window p","declarations":[{"prop":"margin","value":"0","important":false},{"prop":"font-size","value":"13px","important":false}],"specificity":[0,1,1],"order":58,"isHover":false,"matchSelector":null}],"unwrapped":"\n /* Fixture for the flush-against-border rule.\n\n The rule is more general than its name suggests: it fires when a\n container has any visible boundary (border, outline, OR a\n non-transparent background) AND zero inline padding on the\n bounded side, AND text-bearing children land flush against that\n boundary.\n\n Distinct from cramped-padding (which fires when an element has\n its OWN direct text and the padding/font-size ratio is wrong).\n Here the container has NO direct text; only children; so\n cramped-padding gives it a pass. */\n\n body { font-family: system-ui, sans-serif; background: #fafafa; padding: 24px; margin: 0; color: #0f172a; line-height: 1.5; }\n .grid { display: grid; grid-template-columns: 1fr 1fr; gap: 32px; max-width: 1400px; margin: 0 auto; }\n .col h2 { font-size: 22px; font-weight: 700; margin: 0 0 16px; color: #0f172a; line-height: 1.2; }\n .col h3 { font-size: 13px; font-weight: 500; text-transform: uppercase; letter-spacing: 0.06em; margin: 28px 0 10px; color: #64748b; }\n .case { margin-bottom: 14px; }\n .case-label { display: block; font-size: 12px; color: #64748b; margin-bottom: 8px; font-style: italic; max-width: 60ch; }\n\n /* ────────────────────────────────────────────────────────────\n SHOULD FLAG\n ──────────────────────────────────────────────────────────── */\n\n /* ── FLAG: the /live-mode-frameworks bug; border + zero side-padding ── */\n .flag-frameworks {\n padding: 28px 0 0;\n background: #fffbe6;\n border: 1px solid #d4a017;\n border-radius: 8px;\n display: flex;\n flex-direction: column;\n gap: 10px;\n }\n .flag-frameworks-label {\n font-family: ui-monospace, monospace;\n font-size: 11px;\n letter-spacing: 0.18em;\n text-transform: uppercase;\n color: #8b6914;\n }\n .flag-frameworks-list {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n list-style: none;\n padding: 0;\n margin: 0;\n }\n .flag-frameworks-list li {\n font-family: ui-monospace, monospace;\n font-size: 13px;\n padding: 6px 12px;\n background: #fef3c7;\n border: 1px solid #d4a017;\n border-radius: 4px;\n color: #78350f;\n }\n\n /* ── FLAG: child text flush against the four borders of a card ── */\n .flag-card-borders {\n padding: 0;\n background: white;\n border: 1px solid #cbd5e1;\n border-radius: 8px;\n }\n .flag-card-borders h4 { margin: 0; font-size: 14px; color: #0f172a; }\n .flag-card-borders p { margin: 4px 0 0; font-size: 13px; color: #475569; }\n\n /* ── FLAG: non-transparent background, zero padding ── */\n .flag-bg-only {\n padding: 0;\n background: #fde68a;\n border-radius: 6px;\n border: 0;\n }\n .flag-bg-only h4 { margin: 0; font-size: 14px; color: #78350f; }\n .flag-bg-only p { margin: 4px 0 0; font-size: 13px; color: #78350f; }\n\n /* ── FLAG: outline (no border), zero padding ── */\n .flag-outline-only {\n padding: 0;\n background: transparent;\n border: 0;\n outline: 2px solid #94a3b8;\n outline-offset: 0;\n }\n .flag-outline-only h4 { margin: 0; font-size: 14px; color: #0f172a; }\n .flag-outline-only p { margin: 4px 0 0; font-size: 13px; color: #475569; }\n\n /* ── FLAG: border-left + zero left-padding, other sides fine ── */\n .flag-asym-leftflush {\n padding: 12px 16px 12px 0;\n background: white;\n border: 1px solid #cbd5e1;\n border-radius: 4px;\n }\n .flag-asym-leftflush h4 { margin: 0; font-size: 14px; color: #0f172a; }\n .flag-asym-leftflush p { margin: 4px 0 0; font-size: 13px; color: #475569; }\n\n /* ────────────────────────────────────────────────────────────\n SHOULD PASS\n ──────────────────────────────────────────────────────────── */\n\n /* ── PASS: no boundary at all (no bg, no border, no outline) ── */\n .pass-no-boundary {\n padding: 0;\n background: transparent;\n border: 0;\n outline: 0;\n }\n .pass-no-boundary-label {\n font-family: ui-monospace, monospace;\n font-size: 11px;\n letter-spacing: 0.18em;\n text-transform: uppercase;\n color: #475569;\n margin-bottom: 10px;\n }\n .pass-no-boundary-list {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n list-style: none;\n padding: 0;\n margin: 0;\n }\n .pass-no-boundary-list li {\n font-size: 13px;\n padding: 6px 12px;\n background: #f5f5f7;\n border: 1px solid #e2e8f0;\n border-radius: 4px;\n color: #0f172a;\n }\n\n /* ── PASS: top-only border, no left/right border, padding-top fine ── */\n .pass-top-rule {\n padding: 24px 0 0;\n background: transparent;\n border: 0;\n border-top: 1px solid #cbd5e1;\n }\n .pass-top-rule-label {\n font-family: ui-monospace, monospace;\n font-size: 11px;\n letter-spacing: 0.18em;\n text-transform: uppercase;\n color: #475569;\n margin-bottom: 10px;\n }\n .pass-top-rule-list {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n list-style: none;\n padding: 0;\n margin: 0;\n }\n .pass-top-rule-list li {\n font-size: 13px;\n padding: 6px 12px;\n background: #f5f5f7;\n border: 1px solid #e2e8f0;\n border-radius: 4px;\n color: #0f172a;\n }\n\n /* ── PASS: bordered card with comfortable inset on all sides ── */\n .pass-bordered-padded {\n padding: 18px 20px;\n background: white;\n border: 1px solid #cbd5e1;\n border-radius: 8px;\n }\n .pass-bordered-padded h4 { margin: 0; font-size: 14px; color: #0f172a; }\n .pass-bordered-padded p { margin: 4px 0 0; font-size: 13px; color: #475569; }\n\n /* ── PASS: background card with comfortable inset ── */\n .pass-bg-padded {\n padding: 14px 18px;\n background: #fde68a;\n border-radius: 6px;\n border: 0;\n }\n .pass-bg-padded h4 { margin: 0; font-size: 14px; color: #78350f; }\n .pass-bg-padded p { margin: 4px 0 0; font-size: 13px; color: #78350f; }\n\n /* ── PASS: outline with comfortable inset ── */\n .pass-outline-padded {\n padding: 14px 18px;\n outline: 2px solid #94a3b8;\n outline-offset: 0;\n border: 0;\n background: transparent;\n }\n .pass-outline-padded h4 { margin: 0; font-size: 14px; color: #0f172a; }\n .pass-outline-padded p { margin: 4px 0 0; font-size: 13px; color: #475569; }\n\n /* ── PASS: image-only container, no text means no flush issue ── */\n .pass-image-only {\n padding: 0;\n background: white;\n border: 1px solid #cbd5e1;\n border-radius: 8px;\n width: 200px;\n overflow: hidden;\n }\n .pass-image-only .placeholder-img {\n width: 100%;\n height: 80px;\n background: linear-gradient(135deg, #cbd5e1, #94a3b8);\n }\n\n /* ── PASS: parent has zero padding, but child margins create the visible inset ── */\n .pass-margin-inset {\n padding: 0;\n background: white;\n border: 1px solid #cbd5e1;\n border-radius: 8px;\n }\n .pass-margin-inset h4 { margin: 16px 18px 4px; font-size: 14px; color: #0f172a; }\n .pass-margin-inset p { margin: 0 18px 16px; font-size: 13px; color: #475569; }\n\n /* ── PASS: an inner shell, not the parent, owns the inset spacing ── */\n .pass-inner-shell {\n padding: 0;\n background: white;\n border: 1px solid #cbd5e1;\n border-radius: 8px;\n }\n .pass-inner-shell .inner-shell {\n margin: 18px;\n }\n .pass-inner-shell h4 { margin: 0 0 4px; font-size: 14px; color: #0f172a; }\n .pass-inner-shell p { margin: 0; font-size: 13px; color: #475569; }\n\n /* ── PASS: same background as parent, so the child draws no visible boundary ── */\n .pass-same-bg-parent {\n padding: 16px;\n background: #eef2f7;\n border-radius: 8px;\n }\n .pass-same-bg-child {\n padding: 0;\n background: #eef2f7;\n border: 0;\n border-radius: 8px;\n }\n .pass-same-bg-child h4 { margin: 0; font-size: 14px; color: #0f172a; }\n .pass-same-bg-child p { margin: 4px 0 0; font-size: 13px; color: #475569; }\n\n /* ── PASS: full-bleed marquee/surface, not a text card missing padding ── */\n .pass-marquee-shell {\n padding: 0;\n background: #172033;\n color: white;\n overflow: hidden;\n border: 0;\n }\n .pass-marquee-track {\n display: flex;\n gap: 12px;\n width: max-content;\n }\n .pass-marquee-card {\n width: 220px;\n padding: 14px;\n background: #23304a;\n border: 1px solid rgba(255, 255, 255, 0.16);\n }\n .pass-marquee-card p { margin: 0; font-size: 13px; }\n\n /* ── PASS: outer scene owns background; inner text surface owns padding ── */\n .pass-inner-text-surface {\n padding: 0;\n background: #0f172a;\n color: white;\n overflow: hidden;\n border: 0;\n }\n .pass-inner-text-surface-window {\n display: grid;\n gap: 6px;\n min-height: 92px;\n padding: 14px;\n background: #111827;\n border: 1px solid rgba(255, 255, 255, 0.16);\n }\n .pass-inner-text-surface-window p { margin: 0; font-size: 13px; }\n "},{"name":"tests/fixtures/antipatterns/framework-next-modules/app/globals.css","css":"*,\n*::before,\n*::after {\n box-sizing: border-box;\n padding: 0;\n margin: 0;\n}\n\nbody {\n font-family: 'Roboto', sans-serif;\n background-color: #000000;\n color: #fff;\n}\n\na {\n color: inherit;\n text-decoration: none;\n}\n","rules":[{"selector":"*","declarations":[{"prop":"box-sizing","value":"border-box","important":false},{"prop":"padding","value":"0","important":false},{"prop":"margin","value":"0","important":false}],"specificity":[0,0,0],"order":0,"isHover":false,"matchSelector":null},{"selector":"*::before","declarations":[{"prop":"box-sizing","value":"border-box","important":false},{"prop":"padding","value":"0","important":false},{"prop":"margin","value":"0","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null},{"selector":"*::after","declarations":[{"prop":"box-sizing","value":"border-box","important":false},{"prop":"padding","value":"0","important":false},{"prop":"margin","value":"0","important":false}],"specificity":[0,1,0],"order":2,"isHover":false,"matchSelector":null},{"selector":"body","declarations":[{"prop":"font-family","value":"\"Roboto\",sans-serif","important":false},{"prop":"background-color","value":"#000000","important":false},{"prop":"color","value":"#fff","important":false}],"specificity":[0,0,1],"order":3,"isHover":false,"matchSelector":null},{"selector":"a","declarations":[{"prop":"color","value":"inherit","important":false},{"prop":"text-decoration","value":"none","important":false}],"specificity":[0,0,1],"order":4,"isHover":false,"matchSelector":null}],"unwrapped":"*,\n*::before,\n*::after {\n box-sizing: border-box;\n padding: 0;\n margin: 0;\n}\n\nbody {\n font-family: 'Roboto', sans-serif;\n background-color: #000000;\n color: #fff;\n}\n\na {\n color: inherit;\n text-decoration: none;\n}\n"},{"name":"tests/fixtures/antipatterns/framework-next-modules/app/page.module.css","css":".container {\n display: flex;\n min-height: 100vh;\n}\n\n.main {\n flex: 1;\n padding: 32px;\n}\n\n.title {\n font-size: 28px;\n font-weight: 700;\n margin-bottom: 32px;\n background: linear-gradient(to right, #a855f7, #06b6d4);\n -webkit-background-clip: text;\n background-clip: text;\n color: transparent;\n}\n\n.grid {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 24px;\n}\n","rules":[{"selector":".container","declarations":[{"prop":"display","value":"flex","important":false},{"prop":"min-height","value":"100vh","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null},{"selector":".main","declarations":[{"prop":"flex","value":"1","important":false},{"prop":"padding","value":"32px","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null},{"selector":".title","declarations":[{"prop":"font-size","value":"28px","important":false},{"prop":"font-weight","value":"700","important":false},{"prop":"margin-bottom","value":"32px","important":false},{"prop":"background","value":"linear-gradient(to right,#a855f7,#06b6d4)","important":false},{"prop":"-webkit-background-clip","value":"text","important":false},{"prop":"background-clip","value":"text","important":false},{"prop":"color","value":"transparent","important":false}],"specificity":[0,1,0],"order":2,"isHover":false,"matchSelector":null},{"selector":".grid","declarations":[{"prop":"display","value":"grid","important":false},{"prop":"grid-template-columns","value":"repeat(3,1fr)","important":false},{"prop":"gap","value":"24px","important":false}],"specificity":[0,1,0],"order":3,"isHover":false,"matchSelector":null}],"unwrapped":".container {\n display: flex;\n min-height: 100vh;\n}\n\n.main {\n flex: 1;\n padding: 32px;\n}\n\n.title {\n font-size: 28px;\n font-weight: 700;\n margin-bottom: 32px;\n background: linear-gradient(to right, #a855f7, #06b6d4);\n -webkit-background-clip: text;\n background-clip: text;\n color: transparent;\n}\n\n.grid {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 24px;\n}\n"},{"name":"tests/fixtures/antipatterns/framework-next-modules/components/Sidebar.module.css","css":".sidebar {\n width: 240px;\n background: #111827;\n border-right: 3px solid #4f46e5;\n padding: 24px 16px;\n display: flex;\n flex-direction: column;\n gap: 32px;\n}\n\n.logo {\n font-size: 20px;\n font-weight: 700;\n color: #fff;\n padding: 0 8px;\n}\n\n.nav {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.navItem {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 12px;\n border-radius: 8px;\n color: #9ca3af;\n font-size: 14px;\n transition: background 0.2s ease;\n}\n\n.navItem:hover {\n background: rgba(255, 255, 255, 0.05);\n color: #fff;\n}\n","rules":[{"selector":".sidebar","declarations":[{"prop":"width","value":"240px","important":false},{"prop":"background","value":"#111827","important":false},{"prop":"border-right","value":"3px solid #4f46e5","important":false},{"prop":"padding","value":"24px 16px","important":false},{"prop":"display","value":"flex","important":false},{"prop":"flex-direction","value":"column","important":false},{"prop":"gap","value":"32px","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null},{"selector":".logo","declarations":[{"prop":"font-size","value":"20px","important":false},{"prop":"font-weight","value":"700","important":false},{"prop":"color","value":"#fff","important":false},{"prop":"padding","value":"0 8px","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null},{"selector":".nav","declarations":[{"prop":"display","value":"flex","important":false},{"prop":"flex-direction","value":"column","important":false},{"prop":"gap","value":"4px","important":false}],"specificity":[0,1,0],"order":2,"isHover":false,"matchSelector":null},{"selector":".navItem","declarations":[{"prop":"display","value":"flex","important":false},{"prop":"align-items","value":"center","important":false},{"prop":"gap","value":"12px","important":false},{"prop":"padding","value":"10px 12px","important":false},{"prop":"border-radius","value":"8px","important":false},{"prop":"color","value":"#9ca3af","important":false},{"prop":"font-size","value":"14px","important":false},{"prop":"transition","value":"background 0.2s ease","important":false}],"specificity":[0,1,0],"order":3,"isHover":false,"matchSelector":null},{"selector":".navItem:hover","declarations":[{"prop":"background","value":"rgba(255,255,255,0.05)","important":false},{"prop":"color","value":"#fff","important":false}],"specificity":[0,2,0],"order":4,"isHover":true,"matchSelector":".navItem"}],"unwrapped":".sidebar {\n width: 240px;\n background: #111827;\n border-right: 3px solid #4f46e5;\n padding: 24px 16px;\n display: flex;\n flex-direction: column;\n gap: 32px;\n}\n\n.logo {\n font-size: 20px;\n font-weight: 700;\n color: #fff;\n padding: 0 8px;\n}\n\n.nav {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.navItem {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 12px;\n border-radius: 8px;\n color: #9ca3af;\n font-size: 14px;\n transition: background 0.2s ease;\n}\n\n.navItem:hover {\n background: rgba(255, 255, 255, 0.05);\n color: #fff;\n}\n"},{"name":"tests/fixtures/antipatterns/framework-next-modules/components/StatsCard.module.css","css":".card {\n border-left: 4px solid #6366f1;\n border-radius: 12px;\n background: #1e1e2e;\n padding: 24px;\n display: flex;\n flex-direction: column;\n gap: 8px;\n box-shadow: 0 0 30px rgba(99, 102, 241, 0.3);\n transition: width 0.3s ease;\n}\n\n.label {\n font-size: 13px;\n color: #9ca3af;\n text-transform: uppercase;\n letter-spacing: 0.08em;\n}\n\n.value {\n font-size: 32px;\n font-weight: 700;\n font-family: 'Inter', sans-serif;\n}\n\n.changeUp {\n color: #22c55e;\n font-size: 14px;\n}\n\n.changeDown {\n color: #ef4444;\n font-size: 14px;\n}\n","rules":[{"selector":".card","declarations":[{"prop":"border-left","value":"4px solid #6366f1","important":false},{"prop":"border-radius","value":"12px","important":false},{"prop":"background","value":"#1e1e2e","important":false},{"prop":"padding","value":"24px","important":false},{"prop":"display","value":"flex","important":false},{"prop":"flex-direction","value":"column","important":false},{"prop":"gap","value":"8px","important":false},{"prop":"box-shadow","value":"0 0 30px rgba(99,102,241,0.3)","important":false},{"prop":"transition","value":"width 0.3s ease","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null},{"selector":".label","declarations":[{"prop":"font-size","value":"13px","important":false},{"prop":"color","value":"#9ca3af","important":false},{"prop":"text-transform","value":"uppercase","important":false},{"prop":"letter-spacing","value":"0.08em","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null},{"selector":".value","declarations":[{"prop":"font-size","value":"32px","important":false},{"prop":"font-weight","value":"700","important":false},{"prop":"font-family","value":"\"Inter\",sans-serif","important":false}],"specificity":[0,1,0],"order":2,"isHover":false,"matchSelector":null},{"selector":".changeUp","declarations":[{"prop":"color","value":"#22c55e","important":false},{"prop":"font-size","value":"14px","important":false}],"specificity":[0,1,0],"order":3,"isHover":false,"matchSelector":null},{"selector":".changeDown","declarations":[{"prop":"color","value":"#ef4444","important":false},{"prop":"font-size","value":"14px","important":false}],"specificity":[0,1,0],"order":4,"isHover":false,"matchSelector":null}],"unwrapped":".card {\n border-left: 4px solid #6366f1;\n border-radius: 12px;\n background: #1e1e2e;\n padding: 24px;\n display: flex;\n flex-direction: column;\n gap: 8px;\n box-shadow: 0 0 30px rgba(99, 102, 241, 0.3);\n transition: width 0.3s ease;\n}\n\n.label {\n font-size: 13px;\n color: #9ca3af;\n text-transform: uppercase;\n letter-spacing: 0.08em;\n}\n\n.value {\n font-size: 32px;\n font-weight: 700;\n font-family: 'Inter', sans-serif;\n}\n\n.changeUp {\n color: #22c55e;\n font-size: 14px;\n}\n\n.changeDown {\n color: #ef4444;\n font-size: 14px;\n}\n"},{"name":"tests/fixtures/antipatterns/framework-next-tailwind/app/globals.css","css":"@tailwind base;\n@tailwind components;\n@tailwind utilities;\n\n:root {\n --foreground-rgb: 0, 0, 0;\n --background-start-rgb: 214, 219, 220;\n --background-end-rgb: 255, 255, 255;\n}\n\nbody {\n color: rgb(var(--foreground-rgb));\n background: linear-gradient(\n to bottom,\n transparent,\n rgb(var(--background-end-rgb))\n )\n rgb(var(--background-start-rgb));\n font-family: 'Inter', sans-serif;\n}\n","rules":[{"selector":":root","declarations":[{"prop":"--foreground-rgb","value":"0, 0, 0","important":false},{"prop":"--background-start-rgb","value":"214, 219, 220","important":false},{"prop":"--background-end-rgb","value":"255, 255, 255","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null},{"selector":"body","declarations":[{"prop":"color","value":"rgb(var(--foreground-rgb))","important":false},{"prop":"background","value":"linear-gradient(to bottom,transparent,rgb(var(--background-end-rgb))) rgb(var(--background-start-rgb))","important":false},{"prop":"font-family","value":"\"Inter\",sans-serif","important":false}],"specificity":[0,0,1],"order":1,"isHover":false,"matchSelector":null}],"unwrapped":"@tailwind base;\n@tailwind components;\n@tailwind utilities;\n\n:root {\n --foreground-rgb: 0, 0, 0;\n --background-start-rgb: 214, 219, 220;\n --background-end-rgb: 255, 255, 255;\n}\n\nbody {\n color: rgb(var(--foreground-rgb));\n background: linear-gradient(\n to bottom,\n transparent,\n rgb(var(--background-end-rgb))\n )\n rgb(var(--background-start-rgb));\n font-family: 'Inter', sans-serif;\n}\n"},{"name":"tests/fixtures/antipatterns/gemini-tells.html","css":"\n body { font-family: system-ui, sans-serif; margin: 0; color: #1a1a1a; background: #fff; }\n .cols { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; padding: 24px; }\n .col { padding: 16px; }\n img { display: block; width: 160px; height: 120px; margin: 0 0 24px; background: #ddd; }\n .flag-css-hover img { transition: transform 0.3s; }\n .flag-css-hover img:hover { transform: scale(1.05); }\n .card:hover { transform: translateY(-4px); }\n ","rules":[{"selector":"body","declarations":[{"prop":"font-family","value":"system-ui,sans-serif","important":false},{"prop":"margin","value":"0","important":false},{"prop":"color","value":"#1a1a1a","important":false},{"prop":"background","value":"#fff","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":".cols","declarations":[{"prop":"display","value":"grid","important":false},{"prop":"grid-template-columns","value":"1fr 1fr","important":false},{"prop":"gap","value":"24px","important":false},{"prop":"padding","value":"24px","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null},{"selector":".col","declarations":[{"prop":"padding","value":"16px","important":false}],"specificity":[0,1,0],"order":2,"isHover":false,"matchSelector":null},{"selector":"img","declarations":[{"prop":"display","value":"block","important":false},{"prop":"width","value":"160px","important":false},{"prop":"height","value":"120px","important":false},{"prop":"margin","value":"0 0 24px","important":false},{"prop":"background","value":"#ddd","important":false}],"specificity":[0,0,1],"order":3,"isHover":false,"matchSelector":null},{"selector":".flag-css-hover img","declarations":[{"prop":"transition","value":"transform 0.3s","important":false}],"specificity":[0,1,1],"order":4,"isHover":false,"matchSelector":null},{"selector":".flag-css-hover img:hover","declarations":[{"prop":"transform","value":"scale(1.05)","important":false}],"specificity":[0,2,1],"order":5,"isHover":true,"matchSelector":".flag-css-hover img"},{"selector":".card:hover","declarations":[{"prop":"transform","value":"translateY(-4px)","important":false}],"specificity":[0,2,0],"order":6,"isHover":true,"matchSelector":".card"}],"unwrapped":"\n body { font-family: system-ui, sans-serif; margin: 0; color: #1a1a1a; background: #fff; }\n .cols { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; padding: 24px; }\n .col { padding: 16px; }\n img { display: block; width: 160px; height: 120px; margin: 0 0 24px; background: #ddd; }\n .flag-css-hover img { transition: transform 0.3s; }\n .flag-css-hover img:hover { transform: scale(1.05); }\n .card:hover { transform: translateY(-4px); }\n "},{"name":"tests/fixtures/antipatterns/glow.html","css":"\n /* Two-column fixture: left = should flag, right = should pass.\n The dark-glow rule fires when a colored box-shadow appears on a\n child whose ancestor has a dark background. Each column wraps\n its dark-context cases in its own .dark-context section so the\n parent-bg lookup behaves predictably regardless of layout. */\n body { font-family: system-ui, sans-serif; background: #f9fafb; padding: 24px; margin: 0; }\n .grid { display: grid; grid-template-columns: 1fr 1fr; gap: 32px; max-width: 1200px; margin: 0 auto; }\n .col h2 { font-size: 14px; text-transform: uppercase; letter-spacing: 0.05em; margin: 0 0 16px; color: #475569; }\n .col h3 { font-size: 11px; text-transform: uppercase; letter-spacing: 0.05em; margin: 24px 0 8px; color: #64748b; }\n .dark-context { background: #111827; padding: 16px; border-radius: 12px; }\n .dark-context + .dark-context { margin-top: 12px; }\n /* Card variants: explicit dark vs light pairings, both WCAG AA compliant */\n .card { padding: 14px 16px; border-radius: 10px; margin-bottom: 10px; }\n .card h4 { font-weight: 600; font-size: 13px; margin: 0; }\n .card p { font-size: 12px; margin: 4px 0 0; }\n .card-dark { background: #1f2937; }\n .card-dark h4 { color: #f9fafb; }\n .card-dark p { color: #cbd5e1; }\n .card-light { background: white; }\n .card-light h4 { color: #0f172a; }\n .card-light p { color: #475569; }\n\n /* ── FLAG: dark background + colored glow ── */\n .glow-blue { box-shadow: 0 0 20px rgba(59, 130, 246, 0.4); }\n .glow-purple { box-shadow: 0 0 25px rgba(139, 92, 246, 0.35); }\n .glow-cyan { box-shadow: 0 0 15px rgba(6, 182, 212, 0.5); }\n .glow-multi { box-shadow: 0 4px 6px rgba(0, 0, 0, 0.3), 0 0 30px rgba(168, 85, 247, 0.3); }\n\n /* ── FLAG: modern color formats, var() refs, text-shadow ── */\n :root { --fixture-glow: oklch(0.78 0.14 155); }\n .glow-oklch { box-shadow: 0 0 18px oklch(0.72 0.15 195 / 0.5); }\n .glow-hex { box-shadow: 0 0 16px #3b82f6; }\n .glow-hsl { box-shadow: 0 0 22px hsl(280, 80%, 60%); }\n .glow-var { box-shadow: 0 0 10px var(--fixture-glow); }\n .glow-text h4 { text-shadow: 0 0 12px #22d3ee; }\n /* Zero-offset chromatic halo is slop on light backgrounds too */\n .glow-light-oklch { box-shadow: 0 0 20px oklch(0.65 0.2 300 / 0.45); }\n /* Unreadable surface: url() image ancestor. The zero-offset halo tell\n holds on ANY background, so an unknown surface must not suppress it.\n Both element loops must agree here (the browser adapter once returned\n [] for the whole element on an unresolved surface). */\n .photo-context { background-image: url('/fixtures/antipatterns/missing-photo.png'); padding: 16px; border-radius: 12px; }\n .glow-photo-halo { box-shadow: 0 0 26px rgba(217, 70, 239, 0.5); }\n /* Opaque gradient atop a url() layer: every stop is opaque, so the\n gradient provably covers the image — the surface IS the dark\n gradient, and the dark-background glow tell may score against it\n (browser hunt; the static loop has no gradient hunt). */\n .photo-opaque-grad { background: linear-gradient(#111827, #0b1220), url('/fixtures/antipatterns/missing-photo.png'); padding: 16px; border-radius: 12px; }\n .glow-photo-opaque { box-shadow: 0 6px 22px rgba(249, 115, 22, 0.5); }\n\n /* ── PASS: same dark/light backgrounds, but neutral or no glow ── */\n .light-colored-shadow { box-shadow: 0 2px 4px rgba(59, 130, 246, 0.15); }\n .dark-normal-shadow { box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4); }\n .dark-focus-ring { box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.5); }\n .dark-subtle-shadow { box-shadow: 0 1px 3px rgba(59, 130, 246, 0.2); }\n .dark-elevated-sm { box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3); }\n .dark-elevated-md { box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.4); }\n .dark-elevated-lg { box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.5); }\n .dark-elevated-inset { box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.3); }\n .dark-elevated-multi { box-shadow: 0 4px 6px rgba(0, 0, 0, 0.3), 0 1px 3px rgba(0, 0, 0, 0.2); }\n .elevated-sm-light { box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); }\n .elevated-md-light { box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1); }\n .elevated-warm-light { box-shadow: 0 10px 30px -5px rgba(0, 0, 0, 0.15); }\n /* Medium-gray card: lighter than dark mode, used to demonstrate \"not dark enough\" for glow detection. White text for AA contrast. */\n .card-medium { background: #6b7280; }\n .card-medium h4 { color: #ffffff; }\n .card-medium p { color: #ffffff; }\n .medium-gray-shadow { box-shadow: 0 2px 4px rgba(59, 130, 246, 0.3); }\n /* Offset chromatic drop shadow on a light background: a real drop\n shadow, not a halo — must NOT flag under the zero-offset rule.\n (Element path; the page-level text scan caps at one finding.) */\n .light-offset-colored { box-shadow: 0 8px 20px rgba(59, 130, 246, 0.25); }\n /* Achromatic zero-offset shadow: soft ambient elevation, stays legal */\n .light-soft-neutral { box-shadow: 0 0 24px rgba(0, 0, 0, 0.15); }\n /* Offset chromatic shadow under the same unreadable url() surface:\n the dark-background glow tell needs a surface we can read — abstain. */\n .photo-offset-colored { box-shadow: 0 6px 20px rgba(16, 185, 129, 0.35); }\n /* Translucent gradient atop a url() layer: the image shows through the\n 20% wash, so the real surface is a blend with unknowable pixels (a\n white photo composites to ~#cccccc, not black). Averaging the wash\n stops as if they were the surface scored this \"dark\" — abstain. */\n .photo-translucent-grad { background: linear-gradient(rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0.2)), url('/fixtures/antipatterns/missing-photo.png'); padding: 16px; border-radius: 12px; }\n .photo-translucent-offset { box-shadow: 0 6px 22px rgba(244, 63, 94, 0.45); }\n /* Offset neutral text-shadow on dark card: legibility aid, not a glow */\n .dark-text-offset h4 { text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); }\n ","rules":[{"selector":"body","declarations":[{"prop":"font-family","value":"system-ui,sans-serif","important":false},{"prop":"background","value":"#f9fafb","important":false},{"prop":"padding","value":"24px","important":false},{"prop":"margin","value":"0","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":".grid","declarations":[{"prop":"display","value":"grid","important":false},{"prop":"grid-template-columns","value":"1fr 1fr","important":false},{"prop":"gap","value":"32px","important":false},{"prop":"max-width","value":"1200px","important":false},{"prop":"margin","value":"0 auto","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null},{"selector":".col h2","declarations":[{"prop":"font-size","value":"14px","important":false},{"prop":"text-transform","value":"uppercase","important":false},{"prop":"letter-spacing","value":"0.05em","important":false},{"prop":"margin","value":"0 0 16px","important":false},{"prop":"color","value":"#475569","important":false}],"specificity":[0,1,1],"order":2,"isHover":false,"matchSelector":null},{"selector":".col h3","declarations":[{"prop":"font-size","value":"11px","important":false},{"prop":"text-transform","value":"uppercase","important":false},{"prop":"letter-spacing","value":"0.05em","important":false},{"prop":"margin","value":"24px 0 8px","important":false},{"prop":"color","value":"#64748b","important":false}],"specificity":[0,1,1],"order":3,"isHover":false,"matchSelector":null},{"selector":".dark-context","declarations":[{"prop":"background","value":"#111827","important":false},{"prop":"padding","value":"16px","important":false},{"prop":"border-radius","value":"12px","important":false}],"specificity":[0,1,0],"order":4,"isHover":false,"matchSelector":null},{"selector":".dark-context+.dark-context","declarations":[{"prop":"margin-top","value":"12px","important":false}],"specificity":[0,2,0],"order":5,"isHover":false,"matchSelector":null},{"selector":".card","declarations":[{"prop":"padding","value":"14px 16px","important":false},{"prop":"border-radius","value":"10px","important":false},{"prop":"margin-bottom","value":"10px","important":false}],"specificity":[0,1,0],"order":6,"isHover":false,"matchSelector":null},{"selector":".card h4","declarations":[{"prop":"font-weight","value":"600","important":false},{"prop":"font-size","value":"13px","important":false},{"prop":"margin","value":"0","important":false}],"specificity":[0,1,1],"order":7,"isHover":false,"matchSelector":null},{"selector":".card p","declarations":[{"prop":"font-size","value":"12px","important":false},{"prop":"margin","value":"4px 0 0","important":false}],"specificity":[0,1,1],"order":8,"isHover":false,"matchSelector":null},{"selector":".card-dark","declarations":[{"prop":"background","value":"#1f2937","important":false}],"specificity":[0,1,0],"order":9,"isHover":false,"matchSelector":null},{"selector":".card-dark h4","declarations":[{"prop":"color","value":"#f9fafb","important":false}],"specificity":[0,1,1],"order":10,"isHover":false,"matchSelector":null},{"selector":".card-dark p","declarations":[{"prop":"color","value":"#cbd5e1","important":false}],"specificity":[0,1,1],"order":11,"isHover":false,"matchSelector":null},{"selector":".card-light","declarations":[{"prop":"background","value":"white","important":false}],"specificity":[0,1,0],"order":12,"isHover":false,"matchSelector":null},{"selector":".card-light h4","declarations":[{"prop":"color","value":"#0f172a","important":false}],"specificity":[0,1,1],"order":13,"isHover":false,"matchSelector":null},{"selector":".card-light p","declarations":[{"prop":"color","value":"#475569","important":false}],"specificity":[0,1,1],"order":14,"isHover":false,"matchSelector":null},{"selector":".glow-blue","declarations":[{"prop":"box-shadow","value":"0 0 20px rgba(59,130,246,0.4)","important":false}],"specificity":[0,1,0],"order":15,"isHover":false,"matchSelector":null},{"selector":".glow-purple","declarations":[{"prop":"box-shadow","value":"0 0 25px rgba(139,92,246,0.35)","important":false}],"specificity":[0,1,0],"order":16,"isHover":false,"matchSelector":null},{"selector":".glow-cyan","declarations":[{"prop":"box-shadow","value":"0 0 15px rgba(6,182,212,0.5)","important":false}],"specificity":[0,1,0],"order":17,"isHover":false,"matchSelector":null},{"selector":".glow-multi","declarations":[{"prop":"box-shadow","value":"0 4px 6px rgba(0,0,0,0.3),0 0 30px rgba(168,85,247,0.3)","important":false}],"specificity":[0,1,0],"order":18,"isHover":false,"matchSelector":null},{"selector":":root","declarations":[{"prop":"--fixture-glow","value":"oklch(0.78 0.14 155)","important":false}],"specificity":[0,1,0],"order":19,"isHover":false,"matchSelector":null},{"selector":".glow-oklch","declarations":[{"prop":"box-shadow","value":"0 0 18px oklch(0.72 0.15 195/0.5)","important":false}],"specificity":[0,1,0],"order":20,"isHover":false,"matchSelector":null},{"selector":".glow-hex","declarations":[{"prop":"box-shadow","value":"0 0 16px #3b82f6","important":false}],"specificity":[0,1,0],"order":21,"isHover":false,"matchSelector":null},{"selector":".glow-hsl","declarations":[{"prop":"box-shadow","value":"0 0 22px hsl(280,80%,60%)","important":false}],"specificity":[0,1,0],"order":22,"isHover":false,"matchSelector":null},{"selector":".glow-var","declarations":[{"prop":"box-shadow","value":"0 0 10px var(--fixture-glow)","important":false}],"specificity":[0,1,0],"order":23,"isHover":false,"matchSelector":null},{"selector":".glow-text h4","declarations":[{"prop":"text-shadow","value":"0 0 12px #22d3ee","important":false}],"specificity":[0,1,1],"order":24,"isHover":false,"matchSelector":null},{"selector":".glow-light-oklch","declarations":[{"prop":"box-shadow","value":"0 0 20px oklch(0.65 0.2 300/0.45)","important":false}],"specificity":[0,1,0],"order":25,"isHover":false,"matchSelector":null},{"selector":".photo-context","declarations":[{"prop":"background-image","value":"url(/fixtures/antipatterns/missing-photo.png)","important":false},{"prop":"padding","value":"16px","important":false},{"prop":"border-radius","value":"12px","important":false}],"specificity":[0,1,0],"order":26,"isHover":false,"matchSelector":null},{"selector":".glow-photo-halo","declarations":[{"prop":"box-shadow","value":"0 0 26px rgba(217,70,239,0.5)","important":false}],"specificity":[0,1,0],"order":27,"isHover":false,"matchSelector":null},{"selector":".photo-opaque-grad","declarations":[{"prop":"background","value":"linear-gradient(#111827,#0b1220),url(/fixtures/antipatterns/missing-photo.png)","important":false},{"prop":"padding","value":"16px","important":false},{"prop":"border-radius","value":"12px","important":false}],"specificity":[0,1,0],"order":28,"isHover":false,"matchSelector":null},{"selector":".glow-photo-opaque","declarations":[{"prop":"box-shadow","value":"0 6px 22px rgba(249,115,22,0.5)","important":false}],"specificity":[0,1,0],"order":29,"isHover":false,"matchSelector":null},{"selector":".light-colored-shadow","declarations":[{"prop":"box-shadow","value":"0 2px 4px rgba(59,130,246,0.15)","important":false}],"specificity":[0,1,0],"order":30,"isHover":false,"matchSelector":null},{"selector":".dark-normal-shadow","declarations":[{"prop":"box-shadow","value":"0 4px 12px rgba(0,0,0,0.4)","important":false}],"specificity":[0,1,0],"order":31,"isHover":false,"matchSelector":null},{"selector":".dark-focus-ring","declarations":[{"prop":"box-shadow","value":"0 0 0 3px rgba(59,130,246,0.5)","important":false}],"specificity":[0,1,0],"order":32,"isHover":false,"matchSelector":null},{"selector":".dark-subtle-shadow","declarations":[{"prop":"box-shadow","value":"0 1px 3px rgba(59,130,246,0.2)","important":false}],"specificity":[0,1,0],"order":33,"isHover":false,"matchSelector":null},{"selector":".dark-elevated-sm","declarations":[{"prop":"box-shadow","value":"0 1px 3px rgba(0,0,0,0.3)","important":false}],"specificity":[0,1,0],"order":34,"isHover":false,"matchSelector":null},{"selector":".dark-elevated-md","declarations":[{"prop":"box-shadow","value":"0 4px 6px -1px rgba(0,0,0,0.4)","important":false}],"specificity":[0,1,0],"order":35,"isHover":false,"matchSelector":null},{"selector":".dark-elevated-lg","declarations":[{"prop":"box-shadow","value":"0 10px 25px -5px rgba(0,0,0,0.5)","important":false}],"specificity":[0,1,0],"order":36,"isHover":false,"matchSelector":null},{"selector":".dark-elevated-inset","declarations":[{"prop":"box-shadow","value":"inset 0 2px 4px rgba(0,0,0,0.3)","important":false}],"specificity":[0,1,0],"order":37,"isHover":false,"matchSelector":null},{"selector":".dark-elevated-multi","declarations":[{"prop":"box-shadow","value":"0 4px 6px rgba(0,0,0,0.3),0 1px 3px rgba(0,0,0,0.2)","important":false}],"specificity":[0,1,0],"order":38,"isHover":false,"matchSelector":null},{"selector":".elevated-sm-light","declarations":[{"prop":"box-shadow","value":"0 1px 3px rgba(0,0,0,0.1)","important":false}],"specificity":[0,1,0],"order":39,"isHover":false,"matchSelector":null},{"selector":".elevated-md-light","declarations":[{"prop":"box-shadow","value":"0 4px 6px -1px rgba(0,0,0,0.1)","important":false}],"specificity":[0,1,0],"order":40,"isHover":false,"matchSelector":null},{"selector":".elevated-warm-light","declarations":[{"prop":"box-shadow","value":"0 10px 30px -5px rgba(0,0,0,0.15)","important":false}],"specificity":[0,1,0],"order":41,"isHover":false,"matchSelector":null},{"selector":".card-medium","declarations":[{"prop":"background","value":"#6b7280","important":false}],"specificity":[0,1,0],"order":42,"isHover":false,"matchSelector":null},{"selector":".card-medium h4","declarations":[{"prop":"color","value":"#ffffff","important":false}],"specificity":[0,1,1],"order":43,"isHover":false,"matchSelector":null},{"selector":".card-medium p","declarations":[{"prop":"color","value":"#ffffff","important":false}],"specificity":[0,1,1],"order":44,"isHover":false,"matchSelector":null},{"selector":".medium-gray-shadow","declarations":[{"prop":"box-shadow","value":"0 2px 4px rgba(59,130,246,0.3)","important":false}],"specificity":[0,1,0],"order":45,"isHover":false,"matchSelector":null},{"selector":".light-offset-colored","declarations":[{"prop":"box-shadow","value":"0 8px 20px rgba(59,130,246,0.25)","important":false}],"specificity":[0,1,0],"order":46,"isHover":false,"matchSelector":null},{"selector":".light-soft-neutral","declarations":[{"prop":"box-shadow","value":"0 0 24px rgba(0,0,0,0.15)","important":false}],"specificity":[0,1,0],"order":47,"isHover":false,"matchSelector":null},{"selector":".photo-offset-colored","declarations":[{"prop":"box-shadow","value":"0 6px 20px rgba(16,185,129,0.35)","important":false}],"specificity":[0,1,0],"order":48,"isHover":false,"matchSelector":null},{"selector":".photo-translucent-grad","declarations":[{"prop":"background","value":"linear-gradient(rgba(0,0,0,0.2),rgba(0,0,0,0.2)),url(/fixtures/antipatterns/missing-photo.png)","important":false},{"prop":"padding","value":"16px","important":false},{"prop":"border-radius","value":"12px","important":false}],"specificity":[0,1,0],"order":49,"isHover":false,"matchSelector":null},{"selector":".photo-translucent-offset","declarations":[{"prop":"box-shadow","value":"0 6px 22px rgba(244,63,94,0.45)","important":false}],"specificity":[0,1,0],"order":50,"isHover":false,"matchSelector":null},{"selector":".dark-text-offset h4","declarations":[{"prop":"text-shadow","value":"0 1px 2px rgba(0,0,0,0.6)","important":false}],"specificity":[0,1,1],"order":51,"isHover":false,"matchSelector":null}],"unwrapped":"\n /* Two-column fixture: left = should flag, right = should pass.\n The dark-glow rule fires when a colored box-shadow appears on a\n child whose ancestor has a dark background. Each column wraps\n its dark-context cases in its own .dark-context section so the\n parent-bg lookup behaves predictably regardless of layout. */\n body { font-family: system-ui, sans-serif; background: #f9fafb; padding: 24px; margin: 0; }\n .grid { display: grid; grid-template-columns: 1fr 1fr; gap: 32px; max-width: 1200px; margin: 0 auto; }\n .col h2 { font-size: 14px; text-transform: uppercase; letter-spacing: 0.05em; margin: 0 0 16px; color: #475569; }\n .col h3 { font-size: 11px; text-transform: uppercase; letter-spacing: 0.05em; margin: 24px 0 8px; color: #64748b; }\n .dark-context { background: #111827; padding: 16px; border-radius: 12px; }\n .dark-context + .dark-context { margin-top: 12px; }\n /* Card variants: explicit dark vs light pairings, both WCAG AA compliant */\n .card { padding: 14px 16px; border-radius: 10px; margin-bottom: 10px; }\n .card h4 { font-weight: 600; font-size: 13px; margin: 0; }\n .card p { font-size: 12px; margin: 4px 0 0; }\n .card-dark { background: #1f2937; }\n .card-dark h4 { color: #f9fafb; }\n .card-dark p { color: #cbd5e1; }\n .card-light { background: white; }\n .card-light h4 { color: #0f172a; }\n .card-light p { color: #475569; }\n\n /* ── FLAG: dark background + colored glow ── */\n .glow-blue { box-shadow: 0 0 20px rgba(59, 130, 246, 0.4); }\n .glow-purple { box-shadow: 0 0 25px rgba(139, 92, 246, 0.35); }\n .glow-cyan { box-shadow: 0 0 15px rgba(6, 182, 212, 0.5); }\n .glow-multi { box-shadow: 0 4px 6px rgba(0, 0, 0, 0.3), 0 0 30px rgba(168, 85, 247, 0.3); }\n\n /* ── FLAG: modern color formats, var() refs, text-shadow ── */\n :root { --fixture-glow: oklch(0.78 0.14 155); }\n .glow-oklch { box-shadow: 0 0 18px oklch(0.72 0.15 195 / 0.5); }\n .glow-hex { box-shadow: 0 0 16px #3b82f6; }\n .glow-hsl { box-shadow: 0 0 22px hsl(280, 80%, 60%); }\n .glow-var { box-shadow: 0 0 10px var(--fixture-glow); }\n .glow-text h4 { text-shadow: 0 0 12px #22d3ee; }\n /* Zero-offset chromatic halo is slop on light backgrounds too */\n .glow-light-oklch { box-shadow: 0 0 20px oklch(0.65 0.2 300 / 0.45); }\n /* Unreadable surface: url() image ancestor. The zero-offset halo tell\n holds on ANY background, so an unknown surface must not suppress it.\n Both element loops must agree here (the browser adapter once returned\n [] for the whole element on an unresolved surface). */\n .photo-context { background-image: url('/fixtures/antipatterns/missing-photo.png'); padding: 16px; border-radius: 12px; }\n .glow-photo-halo { box-shadow: 0 0 26px rgba(217, 70, 239, 0.5); }\n /* Opaque gradient atop a url() layer: every stop is opaque, so the\n gradient provably covers the image — the surface IS the dark\n gradient, and the dark-background glow tell may score against it\n (browser hunt; the static loop has no gradient hunt). */\n .photo-opaque-grad { background: linear-gradient(#111827, #0b1220), url('/fixtures/antipatterns/missing-photo.png'); padding: 16px; border-radius: 12px; }\n .glow-photo-opaque { box-shadow: 0 6px 22px rgba(249, 115, 22, 0.5); }\n\n /* ── PASS: same dark/light backgrounds, but neutral or no glow ── */\n .light-colored-shadow { box-shadow: 0 2px 4px rgba(59, 130, 246, 0.15); }\n .dark-normal-shadow { box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4); }\n .dark-focus-ring { box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.5); }\n .dark-subtle-shadow { box-shadow: 0 1px 3px rgba(59, 130, 246, 0.2); }\n .dark-elevated-sm { box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3); }\n .dark-elevated-md { box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.4); }\n .dark-elevated-lg { box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.5); }\n .dark-elevated-inset { box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.3); }\n .dark-elevated-multi { box-shadow: 0 4px 6px rgba(0, 0, 0, 0.3), 0 1px 3px rgba(0, 0, 0, 0.2); }\n .elevated-sm-light { box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); }\n .elevated-md-light { box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1); }\n .elevated-warm-light { box-shadow: 0 10px 30px -5px rgba(0, 0, 0, 0.15); }\n /* Medium-gray card: lighter than dark mode, used to demonstrate \"not dark enough\" for glow detection. White text for AA contrast. */\n .card-medium { background: #6b7280; }\n .card-medium h4 { color: #ffffff; }\n .card-medium p { color: #ffffff; }\n .medium-gray-shadow { box-shadow: 0 2px 4px rgba(59, 130, 246, 0.3); }\n /* Offset chromatic drop shadow on a light background: a real drop\n shadow, not a halo — must NOT flag under the zero-offset rule.\n (Element path; the page-level text scan caps at one finding.) */\n .light-offset-colored { box-shadow: 0 8px 20px rgba(59, 130, 246, 0.25); }\n /* Achromatic zero-offset shadow: soft ambient elevation, stays legal */\n .light-soft-neutral { box-shadow: 0 0 24px rgba(0, 0, 0, 0.15); }\n /* Offset chromatic shadow under the same unreadable url() surface:\n the dark-background glow tell needs a surface we can read — abstain. */\n .photo-offset-colored { box-shadow: 0 6px 20px rgba(16, 185, 129, 0.35); }\n /* Translucent gradient atop a url() layer: the image shows through the\n 20% wash, so the real surface is a blend with unknowable pixels (a\n white photo composites to ~#cccccc, not black). Averaging the wash\n stops as if they were the surface scored this \"dark\" — abstain. */\n .photo-translucent-grad { background: linear-gradient(rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0.2)), url('/fixtures/antipatterns/missing-photo.png'); padding: 16px; border-radius: 12px; }\n .photo-translucent-offset { box-shadow: 0 6px 22px rgba(244, 63, 94, 0.45); }\n /* Offset neutral text-shadow on dark card: legibility aid, not a glow */\n .dark-text-offset h4 { text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); }\n "},{"name":"tests/fixtures/antipatterns/gpt-tells.html","css":"\n body { font-family: system-ui, sans-serif; margin: 0; color: #1a1a1a; background: #fff; }\n .cols { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; padding: 24px; }\n .col { padding: 16px; }\n .card { padding: 24px; margin: 0 0 24px; border-radius: 12px; }\n .stripes { height: 80px; margin: 0 0 24px; border-radius: 12px; }\n .grid { height: 80px; margin: 0 0 24px; border-radius: 12px; }\n ","rules":[{"selector":"body","declarations":[{"prop":"font-family","value":"system-ui,sans-serif","important":false},{"prop":"margin","value":"0","important":false},{"prop":"color","value":"#1a1a1a","important":false},{"prop":"background","value":"#fff","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":".cols","declarations":[{"prop":"display","value":"grid","important":false},{"prop":"grid-template-columns","value":"1fr 1fr","important":false},{"prop":"gap","value":"24px","important":false},{"prop":"padding","value":"24px","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null},{"selector":".col","declarations":[{"prop":"padding","value":"16px","important":false}],"specificity":[0,1,0],"order":2,"isHover":false,"matchSelector":null},{"selector":".card","declarations":[{"prop":"padding","value":"24px","important":false},{"prop":"margin","value":"0 0 24px","important":false},{"prop":"border-radius","value":"12px","important":false}],"specificity":[0,1,0],"order":3,"isHover":false,"matchSelector":null},{"selector":".stripes","declarations":[{"prop":"height","value":"80px","important":false},{"prop":"margin","value":"0 0 24px","important":false},{"prop":"border-radius","value":"12px","important":false}],"specificity":[0,1,0],"order":4,"isHover":false,"matchSelector":null},{"selector":".grid","declarations":[{"prop":"height","value":"80px","important":false},{"prop":"margin","value":"0 0 24px","important":false},{"prop":"border-radius","value":"12px","important":false}],"specificity":[0,1,0],"order":5,"isHover":false,"matchSelector":null}],"unwrapped":"\n body { font-family: system-ui, sans-serif; margin: 0; color: #1a1a1a; background: #fff; }\n .cols { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; padding: 24px; }\n .col { padding: 16px; }\n .card { padding: 24px; margin: 0 0 24px; border-radius: 12px; }\n .stripes { height: 80px; margin: 0 0 24px; border-radius: 12px; }\n .grid { height: 80px; margin: 0 0 24px; border-radius: 12px; }\n "},{"name":"tests/fixtures/antipatterns/heading-rhythm.html","css":"\n * { margin: 0; padding: 0; box-sizing: border-box; }\n body { font-family: Georgia, serif; font-size: 16px; line-height: 1.5; width: 720px; }\n h2 { font-size: 28px; line-height: 1.2; }\n h3 { font-size: 20px; line-height: 1.2; }\n p { max-width: 60ch; }\n\n /* FLAG: zero space above the heading, clear space below it */\n .flag-crowded { margin: 0 0 40px; }\n .flag-crowded + p { margin: 0 0 24px; }\n\n /* PASS: generous space above, tight below */\n .pass-generous { margin: 64px 0 16px; }\n\n /* PASS: near-equal spacing is ambiguous, not inverted */\n .pass-near-equal { margin: 20px 0 24px; }\n\n /* PASS: eyebrow label bound to the heading; real space sits above the cluster */\n .pass-eyebrow-label { font-size: 12px; letter-spacing: 0.1em; text-transform: uppercase; margin: 72px 0 8px; }\n .pass-eyebrow-heading { margin: 0 0 24px; }\n\n /* PASS: small card, its boundary provides the separation */\n .pass-card { box-shadow: 0 1px 4px rgba(0,0,0,0.2); background: #f4f4f4; padding: 16px; margin: 48px 0; width: 320px; }\n .pass-card h3 { margin: 0 0 20px; }\n\n /* PASS: heading first inside a banded section; the band edge separates */\n .pass-band { background: #ececec; padding: 8px 0 32px; margin-top: 8px; }\n .pass-band h2 { margin: 0 0 24px; }\n","rules":[{"selector":"*","declarations":[{"prop":"margin","value":"0","important":false},{"prop":"padding","value":"0","important":false},{"prop":"box-sizing","value":"border-box","important":false}],"specificity":[0,0,0],"order":0,"isHover":false,"matchSelector":null},{"selector":"body","declarations":[{"prop":"font-family","value":"Georgia,serif","important":false},{"prop":"font-size","value":"16px","important":false},{"prop":"line-height","value":"1.5","important":false},{"prop":"width","value":"720px","important":false}],"specificity":[0,0,1],"order":1,"isHover":false,"matchSelector":null},{"selector":"h2","declarations":[{"prop":"font-size","value":"28px","important":false},{"prop":"line-height","value":"1.2","important":false}],"specificity":[0,0,1],"order":2,"isHover":false,"matchSelector":null},{"selector":"h3","declarations":[{"prop":"font-size","value":"20px","important":false},{"prop":"line-height","value":"1.2","important":false}],"specificity":[0,0,1],"order":3,"isHover":false,"matchSelector":null},{"selector":"p","declarations":[{"prop":"max-width","value":"60ch","important":false}],"specificity":[0,0,1],"order":4,"isHover":false,"matchSelector":null},{"selector":".flag-crowded","declarations":[{"prop":"margin","value":"0 0 40px","important":false}],"specificity":[0,1,0],"order":5,"isHover":false,"matchSelector":null},{"selector":".flag-crowded+p","declarations":[{"prop":"margin","value":"0 0 24px","important":false}],"specificity":[0,1,1],"order":6,"isHover":false,"matchSelector":null},{"selector":".pass-generous","declarations":[{"prop":"margin","value":"64px 0 16px","important":false}],"specificity":[0,1,0],"order":7,"isHover":false,"matchSelector":null},{"selector":".pass-near-equal","declarations":[{"prop":"margin","value":"20px 0 24px","important":false}],"specificity":[0,1,0],"order":8,"isHover":false,"matchSelector":null},{"selector":".pass-eyebrow-label","declarations":[{"prop":"font-size","value":"12px","important":false},{"prop":"letter-spacing","value":"0.1em","important":false},{"prop":"text-transform","value":"uppercase","important":false},{"prop":"margin","value":"72px 0 8px","important":false}],"specificity":[0,1,0],"order":9,"isHover":false,"matchSelector":null},{"selector":".pass-eyebrow-heading","declarations":[{"prop":"margin","value":"0 0 24px","important":false}],"specificity":[0,1,0],"order":10,"isHover":false,"matchSelector":null},{"selector":".pass-card","declarations":[{"prop":"box-shadow","value":"0 1px 4px rgba(0,0,0,0.2)","important":false},{"prop":"background","value":"#f4f4f4","important":false},{"prop":"padding","value":"16px","important":false},{"prop":"margin","value":"48px 0","important":false},{"prop":"width","value":"320px","important":false}],"specificity":[0,1,0],"order":11,"isHover":false,"matchSelector":null},{"selector":".pass-card h3","declarations":[{"prop":"margin","value":"0 0 20px","important":false}],"specificity":[0,1,1],"order":12,"isHover":false,"matchSelector":null},{"selector":".pass-band","declarations":[{"prop":"background","value":"#ececec","important":false},{"prop":"padding","value":"8px 0 32px","important":false},{"prop":"margin-top","value":"8px","important":false}],"specificity":[0,1,0],"order":13,"isHover":false,"matchSelector":null},{"selector":".pass-band h2","declarations":[{"prop":"margin","value":"0 0 24px","important":false}],"specificity":[0,1,1],"order":14,"isHover":false,"matchSelector":null}],"unwrapped":"\n * { margin: 0; padding: 0; box-sizing: border-box; }\n body { font-family: Georgia, serif; font-size: 16px; line-height: 1.5; width: 720px; }\n h2 { font-size: 28px; line-height: 1.2; }\n h3 { font-size: 20px; line-height: 1.2; }\n p { max-width: 60ch; }\n\n /* FLAG: zero space above the heading, clear space below it */\n .flag-crowded { margin: 0 0 40px; }\n .flag-crowded + p { margin: 0 0 24px; }\n\n /* PASS: generous space above, tight below */\n .pass-generous { margin: 64px 0 16px; }\n\n /* PASS: near-equal spacing is ambiguous, not inverted */\n .pass-near-equal { margin: 20px 0 24px; }\n\n /* PASS: eyebrow label bound to the heading; real space sits above the cluster */\n .pass-eyebrow-label { font-size: 12px; letter-spacing: 0.1em; text-transform: uppercase; margin: 72px 0 8px; }\n .pass-eyebrow-heading { margin: 0 0 24px; }\n\n /* PASS: small card, its boundary provides the separation */\n .pass-card { box-shadow: 0 1px 4px rgba(0,0,0,0.2); background: #f4f4f4; padding: 16px; margin: 48px 0; width: 320px; }\n .pass-card h3 { margin: 0 0 20px; }\n\n /* PASS: heading first inside a banded section; the band edge separates */\n .pass-band { background: #ececec; padding: 8px 0 32px; margin-top: 8px; }\n .pass-band h2 { margin: 0 0 24px; }\n"},{"name":"tests/fixtures/antipatterns/hero-eyebrow-chip.html","css":"\n /* ─── Layout convention: two-column fixture ─────────────────────────\n Left column = patterns the rule SHOULD flag.\n Right column = legitimate patterns the rule should NOT flag.\n Each test case is annotated with a unique <h1> text so the test\n can match snippets back to expectations.\n ──────────────────────────────────────────────────────────────── */\n body { font-family: system-ui, sans-serif; margin: 0; padding: 24px; }\n .grid { display: grid; grid-template-columns: 1fr 1fr; gap: 32px; max-width: 1200px; margin: 0 auto; }\n .col h2.col-label { font-size: 14px; text-transform: uppercase; letter-spacing: 0.05em; margin: 0 0 16px; color: #475569; }\n .case { margin-bottom: 32px; padding: 24px; border: 1px solid #e2e8f0; border-radius: 12px; background: #fff; }\n .case p { font-size: 14px; margin: 12px 0 0; color: #64748b; }\n .case h1 { margin: 0; font-family: 'Inter', sans-serif; line-height: 1.05; }\n\n /* Hero size used by most cases */\n .hero { font-size: 88px; font-weight: 600; }\n\n /* ── FLAG cases ── */\n\n .eyebrow-classic {\n text-transform: uppercase;\n letter-spacing: 0.15em;\n font-size: 12px;\n color: #64748b;\n font-weight: 600;\n margin: 0 0 16px;\n }\n\n .eyebrow-span {\n display: inline-block;\n text-transform: uppercase;\n letter-spacing: 0.16em;\n font-size: 11px;\n color: #475569;\n font-weight: 600;\n margin: 0 0 16px;\n }\n\n .eyebrow-pill {\n display: inline-block;\n text-transform: uppercase;\n letter-spacing: 0.14em;\n font-size: 12px;\n background: #f1f5f9;\n color: #334155;\n border-radius: 999px;\n padding: 4px 12px;\n font-weight: 600;\n margin: 0 0 16px;\n }\n\n .eyebrow-already-uppercase {\n letter-spacing: 0.18em;\n font-size: 11px;\n color: #b45309;\n font-weight: 700;\n margin: 0 0 16px;\n }\n\n /* ── PASS cases ── */\n\n .pass-eyebrow-no-tracking {\n text-transform: uppercase;\n letter-spacing: normal;\n font-size: 12px;\n color: #64748b;\n font-weight: 600;\n margin: 0 0 16px;\n }\n\n .pass-body-heading {\n font-size: 24px;\n font-weight: 600;\n font-family: 'Inter', sans-serif;\n margin: 0;\n }\n\n .pass-card-caption {\n text-transform: uppercase;\n letter-spacing: 0.18em;\n font-size: 11px;\n color: #94a3b8;\n font-weight: 600;\n margin: 0 0 8px;\n }\n\n .pass-bare-hero {\n font-size: 64px;\n }\n\n .pass-h2-above-h1 {\n font-size: 14px;\n text-transform: uppercase;\n letter-spacing: 0.18em;\n font-weight: 700;\n color: #475569;\n margin: 0 0 16px;\n font-family: 'Inter', sans-serif;\n }\n\n .pass-long-uppercase {\n text-transform: uppercase;\n letter-spacing: 0.14em;\n font-size: 12px;\n color: #475569;\n font-weight: 600;\n margin: 0 0 16px;\n }\n ","rules":[{"selector":"body","declarations":[{"prop":"font-family","value":"system-ui,sans-serif","important":false},{"prop":"margin","value":"0","important":false},{"prop":"padding","value":"24px","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":".grid","declarations":[{"prop":"display","value":"grid","important":false},{"prop":"grid-template-columns","value":"1fr 1fr","important":false},{"prop":"gap","value":"32px","important":false},{"prop":"max-width","value":"1200px","important":false},{"prop":"margin","value":"0 auto","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null},{"selector":".col h2.col-label","declarations":[{"prop":"font-size","value":"14px","important":false},{"prop":"text-transform","value":"uppercase","important":false},{"prop":"letter-spacing","value":"0.05em","important":false},{"prop":"margin","value":"0 0 16px","important":false},{"prop":"color","value":"#475569","important":false}],"specificity":[0,2,1],"order":2,"isHover":false,"matchSelector":null},{"selector":".case","declarations":[{"prop":"margin-bottom","value":"32px","important":false},{"prop":"padding","value":"24px","important":false},{"prop":"border","value":"1px solid #e2e8f0","important":false},{"prop":"border-radius","value":"12px","important":false},{"prop":"background","value":"#fff","important":false}],"specificity":[0,1,0],"order":3,"isHover":false,"matchSelector":null},{"selector":".case p","declarations":[{"prop":"font-size","value":"14px","important":false},{"prop":"margin","value":"12px 0 0","important":false},{"prop":"color","value":"#64748b","important":false}],"specificity":[0,1,1],"order":4,"isHover":false,"matchSelector":null},{"selector":".case h1","declarations":[{"prop":"margin","value":"0","important":false},{"prop":"font-family","value":"\"Inter\",sans-serif","important":false},{"prop":"line-height","value":"1.05","important":false}],"specificity":[0,1,1],"order":5,"isHover":false,"matchSelector":null},{"selector":".hero","declarations":[{"prop":"font-size","value":"88px","important":false},{"prop":"font-weight","value":"600","important":false}],"specificity":[0,1,0],"order":6,"isHover":false,"matchSelector":null},{"selector":".eyebrow-classic","declarations":[{"prop":"text-transform","value":"uppercase","important":false},{"prop":"letter-spacing","value":"0.15em","important":false},{"prop":"font-size","value":"12px","important":false},{"prop":"color","value":"#64748b","important":false},{"prop":"font-weight","value":"600","important":false},{"prop":"margin","value":"0 0 16px","important":false}],"specificity":[0,1,0],"order":7,"isHover":false,"matchSelector":null},{"selector":".eyebrow-span","declarations":[{"prop":"display","value":"inline-block","important":false},{"prop":"text-transform","value":"uppercase","important":false},{"prop":"letter-spacing","value":"0.16em","important":false},{"prop":"font-size","value":"11px","important":false},{"prop":"color","value":"#475569","important":false},{"prop":"font-weight","value":"600","important":false},{"prop":"margin","value":"0 0 16px","important":false}],"specificity":[0,1,0],"order":8,"isHover":false,"matchSelector":null},{"selector":".eyebrow-pill","declarations":[{"prop":"display","value":"inline-block","important":false},{"prop":"text-transform","value":"uppercase","important":false},{"prop":"letter-spacing","value":"0.14em","important":false},{"prop":"font-size","value":"12px","important":false},{"prop":"background","value":"#f1f5f9","important":false},{"prop":"color","value":"#334155","important":false},{"prop":"border-radius","value":"999px","important":false},{"prop":"padding","value":"4px 12px","important":false},{"prop":"font-weight","value":"600","important":false},{"prop":"margin","value":"0 0 16px","important":false}],"specificity":[0,1,0],"order":9,"isHover":false,"matchSelector":null},{"selector":".eyebrow-already-uppercase","declarations":[{"prop":"letter-spacing","value":"0.18em","important":false},{"prop":"font-size","value":"11px","important":false},{"prop":"color","value":"#b45309","important":false},{"prop":"font-weight","value":"700","important":false},{"prop":"margin","value":"0 0 16px","important":false}],"specificity":[0,1,0],"order":10,"isHover":false,"matchSelector":null},{"selector":".pass-eyebrow-no-tracking","declarations":[{"prop":"text-transform","value":"uppercase","important":false},{"prop":"letter-spacing","value":"normal","important":false},{"prop":"font-size","value":"12px","important":false},{"prop":"color","value":"#64748b","important":false},{"prop":"font-weight","value":"600","important":false},{"prop":"margin","value":"0 0 16px","important":false}],"specificity":[0,1,0],"order":11,"isHover":false,"matchSelector":null},{"selector":".pass-body-heading","declarations":[{"prop":"font-size","value":"24px","important":false},{"prop":"font-weight","value":"600","important":false},{"prop":"font-family","value":"\"Inter\",sans-serif","important":false},{"prop":"margin","value":"0","important":false}],"specificity":[0,1,0],"order":12,"isHover":false,"matchSelector":null},{"selector":".pass-card-caption","declarations":[{"prop":"text-transform","value":"uppercase","important":false},{"prop":"letter-spacing","value":"0.18em","important":false},{"prop":"font-size","value":"11px","important":false},{"prop":"color","value":"#94a3b8","important":false},{"prop":"font-weight","value":"600","important":false},{"prop":"margin","value":"0 0 8px","important":false}],"specificity":[0,1,0],"order":13,"isHover":false,"matchSelector":null},{"selector":".pass-bare-hero","declarations":[{"prop":"font-size","value":"64px","important":false}],"specificity":[0,1,0],"order":14,"isHover":false,"matchSelector":null},{"selector":".pass-h2-above-h1","declarations":[{"prop":"font-size","value":"14px","important":false},{"prop":"text-transform","value":"uppercase","important":false},{"prop":"letter-spacing","value":"0.18em","important":false},{"prop":"font-weight","value":"700","important":false},{"prop":"color","value":"#475569","important":false},{"prop":"margin","value":"0 0 16px","important":false},{"prop":"font-family","value":"\"Inter\",sans-serif","important":false}],"specificity":[0,1,0],"order":15,"isHover":false,"matchSelector":null},{"selector":".pass-long-uppercase","declarations":[{"prop":"text-transform","value":"uppercase","important":false},{"prop":"letter-spacing","value":"0.14em","important":false},{"prop":"font-size","value":"12px","important":false},{"prop":"color","value":"#475569","important":false},{"prop":"font-weight","value":"600","important":false},{"prop":"margin","value":"0 0 16px","important":false}],"specificity":[0,1,0],"order":16,"isHover":false,"matchSelector":null}],"unwrapped":"\n /* ─── Layout convention: two-column fixture ─────────────────────────\n Left column = patterns the rule SHOULD flag.\n Right column = legitimate patterns the rule should NOT flag.\n Each test case is annotated with a unique <h1> text so the test\n can match snippets back to expectations.\n ──────────────────────────────────────────────────────────────── */\n body { font-family: system-ui, sans-serif; margin: 0; padding: 24px; }\n .grid { display: grid; grid-template-columns: 1fr 1fr; gap: 32px; max-width: 1200px; margin: 0 auto; }\n .col h2.col-label { font-size: 14px; text-transform: uppercase; letter-spacing: 0.05em; margin: 0 0 16px; color: #475569; }\n .case { margin-bottom: 32px; padding: 24px; border: 1px solid #e2e8f0; border-radius: 12px; background: #fff; }\n .case p { font-size: 14px; margin: 12px 0 0; color: #64748b; }\n .case h1 { margin: 0; font-family: 'Inter', sans-serif; line-height: 1.05; }\n\n /* Hero size used by most cases */\n .hero { font-size: 88px; font-weight: 600; }\n\n /* ── FLAG cases ── */\n\n .eyebrow-classic {\n text-transform: uppercase;\n letter-spacing: 0.15em;\n font-size: 12px;\n color: #64748b;\n font-weight: 600;\n margin: 0 0 16px;\n }\n\n .eyebrow-span {\n display: inline-block;\n text-transform: uppercase;\n letter-spacing: 0.16em;\n font-size: 11px;\n color: #475569;\n font-weight: 600;\n margin: 0 0 16px;\n }\n\n .eyebrow-pill {\n display: inline-block;\n text-transform: uppercase;\n letter-spacing: 0.14em;\n font-size: 12px;\n background: #f1f5f9;\n color: #334155;\n border-radius: 999px;\n padding: 4px 12px;\n font-weight: 600;\n margin: 0 0 16px;\n }\n\n .eyebrow-already-uppercase {\n letter-spacing: 0.18em;\n font-size: 11px;\n color: #b45309;\n font-weight: 700;\n margin: 0 0 16px;\n }\n\n /* ── PASS cases ── */\n\n .pass-eyebrow-no-tracking {\n text-transform: uppercase;\n letter-spacing: normal;\n font-size: 12px;\n color: #64748b;\n font-weight: 600;\n margin: 0 0 16px;\n }\n\n .pass-body-heading {\n font-size: 24px;\n font-weight: 600;\n font-family: 'Inter', sans-serif;\n margin: 0;\n }\n\n .pass-card-caption {\n text-transform: uppercase;\n letter-spacing: 0.18em;\n font-size: 11px;\n color: #94a3b8;\n font-weight: 600;\n margin: 0 0 8px;\n }\n\n .pass-bare-hero {\n font-size: 64px;\n }\n\n .pass-h2-above-h1 {\n font-size: 14px;\n text-transform: uppercase;\n letter-spacing: 0.18em;\n font-weight: 700;\n color: #475569;\n margin: 0 0 16px;\n font-family: 'Inter', sans-serif;\n }\n\n .pass-long-uppercase {\n text-transform: uppercase;\n letter-spacing: 0.14em;\n font-size: 12px;\n color: #475569;\n font-weight: 600;\n margin: 0 0 16px;\n }\n "},{"name":"tests/fixtures/antipatterns/hook-inline-ignore.html","css":"\n /* impeccable: ignore overused-font */\n body {\n font-family: \"Roboto\", ui-sans-serif, system-ui, sans-serif;\n margin: 0;\n padding: 48px;\n }\n\n main {\n max-width: 62ch;\n }\n ","rules":[{"selector":"body","declarations":[{"prop":"font-family","value":"\"Roboto\",ui-sans-serif,system-ui,sans-serif","important":false},{"prop":"margin","value":"0","important":false},{"prop":"padding","value":"48px","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":"main","declarations":[{"prop":"max-width","value":"62ch","important":false}],"specificity":[0,0,1],"order":1,"isHover":false,"matchSelector":null}],"unwrapped":"\n /* impeccable: ignore overused-font */\n body {\n font-family: \"Roboto\", ui-sans-serif, system-ui, sans-serif;\n margin: 0;\n padding: 48px;\n }\n\n main {\n max-width: 62ch;\n }\n "},{"name":"tests/fixtures/antipatterns/icon-tile-stack.html","css":"\n /* ─── Layout convention: two-column fixture ─────────────────────────\n Left column = patterns the rule SHOULD flag.\n Right column = legitimate patterns the rule should NOT flag.\n Each test case is annotated with a unique <h3> text so the test\n can match snippets back to expectations.\n ──────────────────────────────────────────────────────────────── */\n body { font-family: system-ui, sans-serif; margin: 0; padding: 24px; }\n .grid { display: grid; grid-template-columns: 1fr 1fr; gap: 32px; max-width: 960px; margin: 0 auto; }\n .col h2 { font-size: 14px; text-transform: uppercase; letter-spacing: 0.05em; margin: 0 0 16px; color: #475569; }\n .case { margin-bottom: 24px; padding: 16px; border: 1px solid #e2e8f0; border-radius: 12px; background: #fff; }\n .case h3 { font-size: 18px; margin: 0 0 4px; color: #0f172a; }\n .case p { font-size: 14px; margin: 0; color: #64748b; }\n\n /* ── FLAG cases ── */\n\n /* 1: pastel-gradient icon-tile (the canonical massive-icons.html shape) */\n .icon-pastel {\n width: 80px; height: 80px;\n border-radius: 20px;\n background: linear-gradient(135deg, #eff6ff 0%, #dbeafe 100%);\n display: flex; align-items: center; justify-content: center;\n margin-bottom: 16px;\n }\n\n /* 2: solid-color icon-tile, white svg inside (no gradient) */\n .icon-solid {\n width: 64px; height: 64px;\n border-radius: 16px;\n background: #3b82f6;\n display: flex; align-items: center; justify-content: center;\n margin-bottom: 16px;\n }\n\n /* 3: white-bg outlined icon-tile (no chromatic background at all) */\n .icon-white {\n width: 72px; height: 72px;\n border-radius: 18px;\n background: #ffffff;\n border: 1px solid #e2e8f0;\n display: flex; align-items: center; justify-content: center;\n margin-bottom: 16px;\n }\n\n /* 4: larger square (still inside the 32–128 range) */\n .icon-large {\n width: 96px; height: 96px;\n border-radius: 24px;\n background: #f1f5f9;\n display: flex; align-items: center; justify-content: center;\n margin-bottom: 16px;\n }\n\n /* 5: inline emoji icon — tile contains an emoji/symbol character directly,\n not an <svg> or <i> child. This is the \"card-icon\" pattern from many\n generated demos. */\n .icon-emoji {\n width: 48px; height: 48px;\n border-radius: 12px;\n background: linear-gradient(135deg, #8b5cf6, #a855f7);\n display: flex; align-items: center; justify-content: center;\n font-size: 24px;\n margin-bottom: 16px;\n }\n\n /* ── PASS cases ── */\n\n /* a: round avatar above name (border-radius: 50% — circle, not rounded square) */\n .avatar-round {\n width: 64px; height: 64px;\n border-radius: 50%;\n background: #f59e0b;\n display: flex; align-items: center; justify-content: center;\n margin-bottom: 16px;\n }\n\n /* b: wide thumbnail above article title (16:9, much wider than tall) */\n .thumb-wide {\n width: 200px; height: 112px;\n border-radius: 8px;\n background: #cbd5e1;\n margin-bottom: 16px;\n }\n\n /* c: inline icon next to heading (icon and h3 on the same row, NOT stacked) */\n .inline-row { display: flex; align-items: center; gap: 12px; }\n .inline-row .icon-inline {\n width: 80px; height: 80px;\n border-radius: 20px;\n background: #ddd6fe;\n display: flex; align-items: center; justify-content: center;\n flex-shrink: 0;\n }\n\n /* d: nothing above the heading at all */\n .no-icon h3 { margin-top: 0; }\n\n /* e: icon-tile that's too small (under 32px) — out of size range */\n .icon-tiny {\n width: 24px; height: 24px;\n border-radius: 6px;\n background: #93c5fd;\n display: flex; align-items: center; justify-content: center;\n margin-bottom: 16px;\n }\n\n /* f: oversized image card / hero image (over 128px) — out of size range */\n .img-huge {\n width: 200px; height: 200px;\n border-radius: 16px;\n background: #cbd5e1;\n margin-bottom: 16px;\n }\n ","rules":[{"selector":"body","declarations":[{"prop":"font-family","value":"system-ui,sans-serif","important":false},{"prop":"margin","value":"0","important":false},{"prop":"padding","value":"24px","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":".grid","declarations":[{"prop":"display","value":"grid","important":false},{"prop":"grid-template-columns","value":"1fr 1fr","important":false},{"prop":"gap","value":"32px","important":false},{"prop":"max-width","value":"960px","important":false},{"prop":"margin","value":"0 auto","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null},{"selector":".col h2","declarations":[{"prop":"font-size","value":"14px","important":false},{"prop":"text-transform","value":"uppercase","important":false},{"prop":"letter-spacing","value":"0.05em","important":false},{"prop":"margin","value":"0 0 16px","important":false},{"prop":"color","value":"#475569","important":false}],"specificity":[0,1,1],"order":2,"isHover":false,"matchSelector":null},{"selector":".case","declarations":[{"prop":"margin-bottom","value":"24px","important":false},{"prop":"padding","value":"16px","important":false},{"prop":"border","value":"1px solid #e2e8f0","important":false},{"prop":"border-radius","value":"12px","important":false},{"prop":"background","value":"#fff","important":false}],"specificity":[0,1,0],"order":3,"isHover":false,"matchSelector":null},{"selector":".case h3","declarations":[{"prop":"font-size","value":"18px","important":false},{"prop":"margin","value":"0 0 4px","important":false},{"prop":"color","value":"#0f172a","important":false}],"specificity":[0,1,1],"order":4,"isHover":false,"matchSelector":null},{"selector":".case p","declarations":[{"prop":"font-size","value":"14px","important":false},{"prop":"margin","value":"0","important":false},{"prop":"color","value":"#64748b","important":false}],"specificity":[0,1,1],"order":5,"isHover":false,"matchSelector":null},{"selector":".icon-pastel","declarations":[{"prop":"width","value":"80px","important":false},{"prop":"height","value":"80px","important":false},{"prop":"border-radius","value":"20px","important":false},{"prop":"background","value":"linear-gradient(135deg,#eff6ff 0%,#dbeafe 100%)","important":false},{"prop":"display","value":"flex","important":false},{"prop":"align-items","value":"center","important":false},{"prop":"justify-content","value":"center","important":false},{"prop":"margin-bottom","value":"16px","important":false}],"specificity":[0,1,0],"order":6,"isHover":false,"matchSelector":null},{"selector":".icon-solid","declarations":[{"prop":"width","value":"64px","important":false},{"prop":"height","value":"64px","important":false},{"prop":"border-radius","value":"16px","important":false},{"prop":"background","value":"#3b82f6","important":false},{"prop":"display","value":"flex","important":false},{"prop":"align-items","value":"center","important":false},{"prop":"justify-content","value":"center","important":false},{"prop":"margin-bottom","value":"16px","important":false}],"specificity":[0,1,0],"order":7,"isHover":false,"matchSelector":null},{"selector":".icon-white","declarations":[{"prop":"width","value":"72px","important":false},{"prop":"height","value":"72px","important":false},{"prop":"border-radius","value":"18px","important":false},{"prop":"background","value":"#ffffff","important":false},{"prop":"border","value":"1px solid #e2e8f0","important":false},{"prop":"display","value":"flex","important":false},{"prop":"align-items","value":"center","important":false},{"prop":"justify-content","value":"center","important":false},{"prop":"margin-bottom","value":"16px","important":false}],"specificity":[0,1,0],"order":8,"isHover":false,"matchSelector":null},{"selector":".icon-large","declarations":[{"prop":"width","value":"96px","important":false},{"prop":"height","value":"96px","important":false},{"prop":"border-radius","value":"24px","important":false},{"prop":"background","value":"#f1f5f9","important":false},{"prop":"display","value":"flex","important":false},{"prop":"align-items","value":"center","important":false},{"prop":"justify-content","value":"center","important":false},{"prop":"margin-bottom","value":"16px","important":false}],"specificity":[0,1,0],"order":9,"isHover":false,"matchSelector":null},{"selector":".icon-emoji","declarations":[{"prop":"width","value":"48px","important":false},{"prop":"height","value":"48px","important":false},{"prop":"border-radius","value":"12px","important":false},{"prop":"background","value":"linear-gradient(135deg,#8b5cf6,#a855f7)","important":false},{"prop":"display","value":"flex","important":false},{"prop":"align-items","value":"center","important":false},{"prop":"justify-content","value":"center","important":false},{"prop":"font-size","value":"24px","important":false},{"prop":"margin-bottom","value":"16px","important":false}],"specificity":[0,1,0],"order":10,"isHover":false,"matchSelector":null},{"selector":".avatar-round","declarations":[{"prop":"width","value":"64px","important":false},{"prop":"height","value":"64px","important":false},{"prop":"border-radius","value":"50%","important":false},{"prop":"background","value":"#f59e0b","important":false},{"prop":"display","value":"flex","important":false},{"prop":"align-items","value":"center","important":false},{"prop":"justify-content","value":"center","important":false},{"prop":"margin-bottom","value":"16px","important":false}],"specificity":[0,1,0],"order":11,"isHover":false,"matchSelector":null},{"selector":".thumb-wide","declarations":[{"prop":"width","value":"200px","important":false},{"prop":"height","value":"112px","important":false},{"prop":"border-radius","value":"8px","important":false},{"prop":"background","value":"#cbd5e1","important":false},{"prop":"margin-bottom","value":"16px","important":false}],"specificity":[0,1,0],"order":12,"isHover":false,"matchSelector":null},{"selector":".inline-row","declarations":[{"prop":"display","value":"flex","important":false},{"prop":"align-items","value":"center","important":false},{"prop":"gap","value":"12px","important":false}],"specificity":[0,1,0],"order":13,"isHover":false,"matchSelector":null},{"selector":".inline-row .icon-inline","declarations":[{"prop":"width","value":"80px","important":false},{"prop":"height","value":"80px","important":false},{"prop":"border-radius","value":"20px","important":false},{"prop":"background","value":"#ddd6fe","important":false},{"prop":"display","value":"flex","important":false},{"prop":"align-items","value":"center","important":false},{"prop":"justify-content","value":"center","important":false},{"prop":"flex-shrink","value":"0","important":false}],"specificity":[0,2,0],"order":14,"isHover":false,"matchSelector":null},{"selector":".no-icon h3","declarations":[{"prop":"margin-top","value":"0","important":false}],"specificity":[0,1,1],"order":15,"isHover":false,"matchSelector":null},{"selector":".icon-tiny","declarations":[{"prop":"width","value":"24px","important":false},{"prop":"height","value":"24px","important":false},{"prop":"border-radius","value":"6px","important":false},{"prop":"background","value":"#93c5fd","important":false},{"prop":"display","value":"flex","important":false},{"prop":"align-items","value":"center","important":false},{"prop":"justify-content","value":"center","important":false},{"prop":"margin-bottom","value":"16px","important":false}],"specificity":[0,1,0],"order":16,"isHover":false,"matchSelector":null},{"selector":".img-huge","declarations":[{"prop":"width","value":"200px","important":false},{"prop":"height","value":"200px","important":false},{"prop":"border-radius","value":"16px","important":false},{"prop":"background","value":"#cbd5e1","important":false},{"prop":"margin-bottom","value":"16px","important":false}],"specificity":[0,1,0],"order":17,"isHover":false,"matchSelector":null}],"unwrapped":"\n /* ─── Layout convention: two-column fixture ─────────────────────────\n Left column = patterns the rule SHOULD flag.\n Right column = legitimate patterns the rule should NOT flag.\n Each test case is annotated with a unique <h3> text so the test\n can match snippets back to expectations.\n ──────────────────────────────────────────────────────────────── */\n body { font-family: system-ui, sans-serif; margin: 0; padding: 24px; }\n .grid { display: grid; grid-template-columns: 1fr 1fr; gap: 32px; max-width: 960px; margin: 0 auto; }\n .col h2 { font-size: 14px; text-transform: uppercase; letter-spacing: 0.05em; margin: 0 0 16px; color: #475569; }\n .case { margin-bottom: 24px; padding: 16px; border: 1px solid #e2e8f0; border-radius: 12px; background: #fff; }\n .case h3 { font-size: 18px; margin: 0 0 4px; color: #0f172a; }\n .case p { font-size: 14px; margin: 0; color: #64748b; }\n\n /* ── FLAG cases ── */\n\n /* 1: pastel-gradient icon-tile (the canonical massive-icons.html shape) */\n .icon-pastel {\n width: 80px; height: 80px;\n border-radius: 20px;\n background: linear-gradient(135deg, #eff6ff 0%, #dbeafe 100%);\n display: flex; align-items: center; justify-content: center;\n margin-bottom: 16px;\n }\n\n /* 2: solid-color icon-tile, white svg inside (no gradient) */\n .icon-solid {\n width: 64px; height: 64px;\n border-radius: 16px;\n background: #3b82f6;\n display: flex; align-items: center; justify-content: center;\n margin-bottom: 16px;\n }\n\n /* 3: white-bg outlined icon-tile (no chromatic background at all) */\n .icon-white {\n width: 72px; height: 72px;\n border-radius: 18px;\n background: #ffffff;\n border: 1px solid #e2e8f0;\n display: flex; align-items: center; justify-content: center;\n margin-bottom: 16px;\n }\n\n /* 4: larger square (still inside the 32–128 range) */\n .icon-large {\n width: 96px; height: 96px;\n border-radius: 24px;\n background: #f1f5f9;\n display: flex; align-items: center; justify-content: center;\n margin-bottom: 16px;\n }\n\n /* 5: inline emoji icon — tile contains an emoji/symbol character directly,\n not an <svg> or <i> child. This is the \"card-icon\" pattern from many\n generated demos. */\n .icon-emoji {\n width: 48px; height: 48px;\n border-radius: 12px;\n background: linear-gradient(135deg, #8b5cf6, #a855f7);\n display: flex; align-items: center; justify-content: center;\n font-size: 24px;\n margin-bottom: 16px;\n }\n\n /* ── PASS cases ── */\n\n /* a: round avatar above name (border-radius: 50% — circle, not rounded square) */\n .avatar-round {\n width: 64px; height: 64px;\n border-radius: 50%;\n background: #f59e0b;\n display: flex; align-items: center; justify-content: center;\n margin-bottom: 16px;\n }\n\n /* b: wide thumbnail above article title (16:9, much wider than tall) */\n .thumb-wide {\n width: 200px; height: 112px;\n border-radius: 8px;\n background: #cbd5e1;\n margin-bottom: 16px;\n }\n\n /* c: inline icon next to heading (icon and h3 on the same row, NOT stacked) */\n .inline-row { display: flex; align-items: center; gap: 12px; }\n .inline-row .icon-inline {\n width: 80px; height: 80px;\n border-radius: 20px;\n background: #ddd6fe;\n display: flex; align-items: center; justify-content: center;\n flex-shrink: 0;\n }\n\n /* d: nothing above the heading at all */\n .no-icon h3 { margin-top: 0; }\n\n /* e: icon-tile that's too small (under 32px) — out of size range */\n .icon-tiny {\n width: 24px; height: 24px;\n border-radius: 6px;\n background: #93c5fd;\n display: flex; align-items: center; justify-content: center;\n margin-bottom: 16px;\n }\n\n /* f: oversized image card / hero image (over 128px) — out of size range */\n .img-huge {\n width: 200px; height: 200px;\n border-radius: 16px;\n background: #cbd5e1;\n margin-bottom: 16px;\n }\n "},{"name":"tests/fixtures/antipatterns/image-backed-contrast.html","css":"\n body { margin: 0; padding: 40px; background: #17150f; font-family: Arial, sans-serif; }\n /* A same-origin (data-URI) near-white image background. The analytic walk\n cannot know its pixels, so the default overlay pass must sample the image\n itself: white text on it fails, dark ink on it passes. */\n .photo-panel {\n width: 420px;\n padding: 24px;\n margin: 0 0 24px;\n background: url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='100' height='100'><rect width='100' height='100' fill='%23f5f2ea'/></svg>\") center / cover no-repeat;\n }\n .flag-white-on-light { color: #fdfdfd; font-size: 16px; line-height: 1.6; margin: 0; }\n .pass-ink-on-light { color: #262421; font-size: 16px; line-height: 1.6; margin: 0; }\n /* Fourteen gradient-backed decoys sit BEFORE the photo panels in DOM\n order. They are visual-contrast candidates (gradient background) but not\n image-backed; with the default 12-candidate cap they would starve the\n image-only pass to zero unless the mode filters inside the collector.\n Their ink is dark on a light gradient, so no analytic finding fires. */\n .decoy { display: inline-block; padding: 4px 8px; margin: 0 4px 6px 0; background: linear-gradient(180deg, #f2efe6, #e8e4d8); color: #24211c; font-size: 12px; }\n","rules":[{"selector":"body","declarations":[{"prop":"margin","value":"0","important":false},{"prop":"padding","value":"40px","important":false},{"prop":"background","value":"#17150f","important":false},{"prop":"font-family","value":"Arial,sans-serif","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":".photo-panel","declarations":[{"prop":"width","value":"420px","important":false},{"prop":"padding","value":"24px","important":false},{"prop":"margin","value":"0 0 24px","important":false},{"prop":"background","value":"url(data:image/svg+xml;utf8,<svg\\ xmlns=\\'http://www.w3.org/2000/svg\\'\\ width=\\'100\\'\\ height=\\'100\\'><rect\\ width=\\'100\\'\\ height=\\'100\\'\\ fill=\\'%23f5f2ea\\'/></svg>)center/cover no-repeat","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null},{"selector":".flag-white-on-light","declarations":[{"prop":"color","value":"#fdfdfd","important":false},{"prop":"font-size","value":"16px","important":false},{"prop":"line-height","value":"1.6","important":false},{"prop":"margin","value":"0","important":false}],"specificity":[0,1,0],"order":2,"isHover":false,"matchSelector":null},{"selector":".pass-ink-on-light","declarations":[{"prop":"color","value":"#262421","important":false},{"prop":"font-size","value":"16px","important":false},{"prop":"line-height","value":"1.6","important":false},{"prop":"margin","value":"0","important":false}],"specificity":[0,1,0],"order":3,"isHover":false,"matchSelector":null},{"selector":".decoy","declarations":[{"prop":"display","value":"inline-block","important":false},{"prop":"padding","value":"4px 8px","important":false},{"prop":"margin","value":"0 4px 6px 0","important":false},{"prop":"background","value":"linear-gradient(180deg,#f2efe6,#e8e4d8)","important":false},{"prop":"color","value":"#24211c","important":false},{"prop":"font-size","value":"12px","important":false}],"specificity":[0,1,0],"order":4,"isHover":false,"matchSelector":null}],"unwrapped":"\n body { margin: 0; padding: 40px; background: #17150f; font-family: Arial, sans-serif; }\n /* A same-origin (data-URI) near-white image background. The analytic walk\n cannot know its pixels, so the default overlay pass must sample the image\n itself: white text on it fails, dark ink on it passes. */\n .photo-panel {\n width: 420px;\n padding: 24px;\n margin: 0 0 24px;\n background: url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='100' height='100'><rect width='100' height='100' fill='%23f5f2ea'/></svg>\") center / cover no-repeat;\n }\n .flag-white-on-light { color: #fdfdfd; font-size: 16px; line-height: 1.6; margin: 0; }\n .pass-ink-on-light { color: #262421; font-size: 16px; line-height: 1.6; margin: 0; }\n /* Fourteen gradient-backed decoys sit BEFORE the photo panels in DOM\n order. They are visual-contrast candidates (gradient background) but not\n image-backed; with the default 12-candidate cap they would starve the\n image-only pass to zero unless the mode filters inside the collector.\n Their ink is dark on a light gradient, so no analytic finding fires. */\n .decoy { display: inline-block; padding: 4px 8px; margin: 0 4px 6px 0; background: linear-gradient(180deg, #f2efe6, #e8e4d8); color: #24211c; font-size: 12px; }\n"},{"name":"tests/fixtures/antipatterns/italic-serif-display.html","css":"\n /* ─── Layout convention: two-column fixture ─────────────────────────\n Left column = patterns the rule SHOULD flag.\n Right column = legitimate patterns the rule should NOT flag.\n Each test case is annotated with a unique <h1>/<h2>/<blockquote>\n text so the test can match snippets back to expectations.\n ──────────────────────────────────────────────────────────────── */\n body { font-family: system-ui, sans-serif; margin: 0; padding: 24px; }\n .grid { display: grid; grid-template-columns: 1fr 1fr; gap: 32px; max-width: 1200px; margin: 0 auto; }\n .col h2.col-label { font-size: 14px; text-transform: uppercase; letter-spacing: 0.05em; margin: 0 0 16px; color: #475569; }\n .case { margin-bottom: 32px; padding: 24px; border: 1px solid #e2e8f0; border-radius: 12px; background: #fff; }\n .case p { font-size: 14px; margin: 12px 0 0; color: #64748b; }\n\n /* ── FLAG cases ── */\n\n /* 1: Fraunces 88px italic — the Lumina hero pattern */\n .hero-fraunces {\n font-family: 'Fraunces', Georgia, serif;\n font-style: italic;\n font-size: 88px;\n font-weight: 400;\n line-height: 1.05;\n margin: 0;\n }\n\n /* 2: Recoleta 64px italic */\n .hero-recoleta {\n font-family: 'Recoleta', serif;\n font-style: italic;\n font-size: 64px;\n font-weight: 400;\n margin: 0;\n }\n\n /* 3: Playfair Display 72px italic */\n .hero-playfair {\n font-family: 'Playfair Display', serif;\n font-style: italic;\n font-size: 72px;\n font-weight: 500;\n margin: 0;\n }\n\n /* 4: Unknown serif primary, but generic `serif` fallback in stack */\n .hero-unknown-serif {\n font-family: 'CustomSerifFace', serif;\n font-style: italic;\n font-size: 56px;\n font-weight: 400;\n margin: 0;\n }\n\n /* ── PASS cases ── */\n\n /* a: italic, but sans-serif primary (Karla) — italic display in a sans is rare and usually intentional */\n .pass-sans-italic {\n font-family: 'Karla', sans-serif;\n font-style: italic;\n font-size: 64px;\n font-weight: 600;\n margin: 0;\n }\n\n /* b: serif at 88px, but font-style: normal */\n .pass-roman-serif {\n font-family: 'Fraunces', Georgia, serif;\n font-style: normal;\n font-size: 88px;\n font-weight: 600;\n margin: 0;\n }\n\n /* c: italic serif blockquote at 24px (genuine pull quote, not a hero) */\n .pass-pull-quote {\n font-family: 'Fraunces', Georgia, serif;\n font-style: italic;\n font-size: 24px;\n font-weight: 400;\n margin: 0;\n color: #334155;\n }\n\n /* d: roman h1 with an italic <em> inside — v1 explicitly does NOT flag this */\n .pass-roman-h1-em-italic {\n font-family: 'Inter', sans-serif;\n font-style: normal;\n font-size: 72px;\n font-weight: 600;\n margin: 0;\n }\n .pass-roman-h1-em-italic em {\n font-family: 'Fraunces', Georgia, serif;\n font-style: italic;\n font-weight: 400;\n }\n\n /* e: italic serif h2 at 32px — under the 48px hero threshold */\n .pass-italic-serif-32 {\n font-family: 'Fraunces', Georgia, serif;\n font-style: italic;\n font-size: 32px;\n font-weight: 400;\n margin: 0;\n }\n\n /* f: baseline-clean h1 — sans-serif roman */\n .pass-h1-sans-roman {\n font-family: 'Inter', sans-serif;\n font-style: normal;\n font-size: 64px;\n font-weight: 700;\n margin: 0;\n }\n ","rules":[{"selector":"body","declarations":[{"prop":"font-family","value":"system-ui,sans-serif","important":false},{"prop":"margin","value":"0","important":false},{"prop":"padding","value":"24px","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":".grid","declarations":[{"prop":"display","value":"grid","important":false},{"prop":"grid-template-columns","value":"1fr 1fr","important":false},{"prop":"gap","value":"32px","important":false},{"prop":"max-width","value":"1200px","important":false},{"prop":"margin","value":"0 auto","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null},{"selector":".col h2.col-label","declarations":[{"prop":"font-size","value":"14px","important":false},{"prop":"text-transform","value":"uppercase","important":false},{"prop":"letter-spacing","value":"0.05em","important":false},{"prop":"margin","value":"0 0 16px","important":false},{"prop":"color","value":"#475569","important":false}],"specificity":[0,2,1],"order":2,"isHover":false,"matchSelector":null},{"selector":".case","declarations":[{"prop":"margin-bottom","value":"32px","important":false},{"prop":"padding","value":"24px","important":false},{"prop":"border","value":"1px solid #e2e8f0","important":false},{"prop":"border-radius","value":"12px","important":false},{"prop":"background","value":"#fff","important":false}],"specificity":[0,1,0],"order":3,"isHover":false,"matchSelector":null},{"selector":".case p","declarations":[{"prop":"font-size","value":"14px","important":false},{"prop":"margin","value":"12px 0 0","important":false},{"prop":"color","value":"#64748b","important":false}],"specificity":[0,1,1],"order":4,"isHover":false,"matchSelector":null},{"selector":".hero-fraunces","declarations":[{"prop":"font-family","value":"\"Fraunces\",Georgia,serif","important":false},{"prop":"font-style","value":"italic","important":false},{"prop":"font-size","value":"88px","important":false},{"prop":"font-weight","value":"400","important":false},{"prop":"line-height","value":"1.05","important":false},{"prop":"margin","value":"0","important":false}],"specificity":[0,1,0],"order":5,"isHover":false,"matchSelector":null},{"selector":".hero-recoleta","declarations":[{"prop":"font-family","value":"\"Recoleta\",serif","important":false},{"prop":"font-style","value":"italic","important":false},{"prop":"font-size","value":"64px","important":false},{"prop":"font-weight","value":"400","important":false},{"prop":"margin","value":"0","important":false}],"specificity":[0,1,0],"order":6,"isHover":false,"matchSelector":null},{"selector":".hero-playfair","declarations":[{"prop":"font-family","value":"\"Playfair Display\",serif","important":false},{"prop":"font-style","value":"italic","important":false},{"prop":"font-size","value":"72px","important":false},{"prop":"font-weight","value":"500","important":false},{"prop":"margin","value":"0","important":false}],"specificity":[0,1,0],"order":7,"isHover":false,"matchSelector":null},{"selector":".hero-unknown-serif","declarations":[{"prop":"font-family","value":"\"CustomSerifFace\",serif","important":false},{"prop":"font-style","value":"italic","important":false},{"prop":"font-size","value":"56px","important":false},{"prop":"font-weight","value":"400","important":false},{"prop":"margin","value":"0","important":false}],"specificity":[0,1,0],"order":8,"isHover":false,"matchSelector":null},{"selector":".pass-sans-italic","declarations":[{"prop":"font-family","value":"\"Karla\",sans-serif","important":false},{"prop":"font-style","value":"italic","important":false},{"prop":"font-size","value":"64px","important":false},{"prop":"font-weight","value":"600","important":false},{"prop":"margin","value":"0","important":false}],"specificity":[0,1,0],"order":9,"isHover":false,"matchSelector":null},{"selector":".pass-roman-serif","declarations":[{"prop":"font-family","value":"\"Fraunces\",Georgia,serif","important":false},{"prop":"font-style","value":"normal","important":false},{"prop":"font-size","value":"88px","important":false},{"prop":"font-weight","value":"600","important":false},{"prop":"margin","value":"0","important":false}],"specificity":[0,1,0],"order":10,"isHover":false,"matchSelector":null},{"selector":".pass-pull-quote","declarations":[{"prop":"font-family","value":"\"Fraunces\",Georgia,serif","important":false},{"prop":"font-style","value":"italic","important":false},{"prop":"font-size","value":"24px","important":false},{"prop":"font-weight","value":"400","important":false},{"prop":"margin","value":"0","important":false},{"prop":"color","value":"#334155","important":false}],"specificity":[0,1,0],"order":11,"isHover":false,"matchSelector":null},{"selector":".pass-roman-h1-em-italic","declarations":[{"prop":"font-family","value":"\"Inter\",sans-serif","important":false},{"prop":"font-style","value":"normal","important":false},{"prop":"font-size","value":"72px","important":false},{"prop":"font-weight","value":"600","important":false},{"prop":"margin","value":"0","important":false}],"specificity":[0,1,0],"order":12,"isHover":false,"matchSelector":null},{"selector":".pass-roman-h1-em-italic em","declarations":[{"prop":"font-family","value":"\"Fraunces\",Georgia,serif","important":false},{"prop":"font-style","value":"italic","important":false},{"prop":"font-weight","value":"400","important":false}],"specificity":[0,1,1],"order":13,"isHover":false,"matchSelector":null},{"selector":".pass-italic-serif-32","declarations":[{"prop":"font-family","value":"\"Fraunces\",Georgia,serif","important":false},{"prop":"font-style","value":"italic","important":false},{"prop":"font-size","value":"32px","important":false},{"prop":"font-weight","value":"400","important":false},{"prop":"margin","value":"0","important":false}],"specificity":[0,1,0],"order":14,"isHover":false,"matchSelector":null},{"selector":".pass-h1-sans-roman","declarations":[{"prop":"font-family","value":"\"Inter\",sans-serif","important":false},{"prop":"font-style","value":"normal","important":false},{"prop":"font-size","value":"64px","important":false},{"prop":"font-weight","value":"700","important":false},{"prop":"margin","value":"0","important":false}],"specificity":[0,1,0],"order":15,"isHover":false,"matchSelector":null}],"unwrapped":"\n /* ─── Layout convention: two-column fixture ─────────────────────────\n Left column = patterns the rule SHOULD flag.\n Right column = legitimate patterns the rule should NOT flag.\n Each test case is annotated with a unique <h1>/<h2>/<blockquote>\n text so the test can match snippets back to expectations.\n ──────────────────────────────────────────────────────────────── */\n body { font-family: system-ui, sans-serif; margin: 0; padding: 24px; }\n .grid { display: grid; grid-template-columns: 1fr 1fr; gap: 32px; max-width: 1200px; margin: 0 auto; }\n .col h2.col-label { font-size: 14px; text-transform: uppercase; letter-spacing: 0.05em; margin: 0 0 16px; color: #475569; }\n .case { margin-bottom: 32px; padding: 24px; border: 1px solid #e2e8f0; border-radius: 12px; background: #fff; }\n .case p { font-size: 14px; margin: 12px 0 0; color: #64748b; }\n\n /* ── FLAG cases ── */\n\n /* 1: Fraunces 88px italic — the Lumina hero pattern */\n .hero-fraunces {\n font-family: 'Fraunces', Georgia, serif;\n font-style: italic;\n font-size: 88px;\n font-weight: 400;\n line-height: 1.05;\n margin: 0;\n }\n\n /* 2: Recoleta 64px italic */\n .hero-recoleta {\n font-family: 'Recoleta', serif;\n font-style: italic;\n font-size: 64px;\n font-weight: 400;\n margin: 0;\n }\n\n /* 3: Playfair Display 72px italic */\n .hero-playfair {\n font-family: 'Playfair Display', serif;\n font-style: italic;\n font-size: 72px;\n font-weight: 500;\n margin: 0;\n }\n\n /* 4: Unknown serif primary, but generic `serif` fallback in stack */\n .hero-unknown-serif {\n font-family: 'CustomSerifFace', serif;\n font-style: italic;\n font-size: 56px;\n font-weight: 400;\n margin: 0;\n }\n\n /* ── PASS cases ── */\n\n /* a: italic, but sans-serif primary (Karla) — italic display in a sans is rare and usually intentional */\n .pass-sans-italic {\n font-family: 'Karla', sans-serif;\n font-style: italic;\n font-size: 64px;\n font-weight: 600;\n margin: 0;\n }\n\n /* b: serif at 88px, but font-style: normal */\n .pass-roman-serif {\n font-family: 'Fraunces', Georgia, serif;\n font-style: normal;\n font-size: 88px;\n font-weight: 600;\n margin: 0;\n }\n\n /* c: italic serif blockquote at 24px (genuine pull quote, not a hero) */\n .pass-pull-quote {\n font-family: 'Fraunces', Georgia, serif;\n font-style: italic;\n font-size: 24px;\n font-weight: 400;\n margin: 0;\n color: #334155;\n }\n\n /* d: roman h1 with an italic <em> inside — v1 explicitly does NOT flag this */\n .pass-roman-h1-em-italic {\n font-family: 'Inter', sans-serif;\n font-style: normal;\n font-size: 72px;\n font-weight: 600;\n margin: 0;\n }\n .pass-roman-h1-em-italic em {\n font-family: 'Fraunces', Georgia, serif;\n font-style: italic;\n font-weight: 400;\n }\n\n /* e: italic serif h2 at 32px — under the 48px hero threshold */\n .pass-italic-serif-32 {\n font-family: 'Fraunces', Georgia, serif;\n font-style: italic;\n font-size: 32px;\n font-weight: 400;\n margin: 0;\n }\n\n /* f: baseline-clean h1 — sans-serif roman */\n .pass-h1-sans-roman {\n font-family: 'Inter', sans-serif;\n font-style: normal;\n font-size: 64px;\n font-weight: 700;\n margin: 0;\n }\n "},{"name":"tests/fixtures/antipatterns/kicker-above-heading.html","css":"\n body {\n margin: 0;\n font-family: Arial, sans-serif;\n background: #f6f2ec;\n color: #171411;\n }\n main {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 32px;\n padding: 32px;\n }\n .col {\n min-width: 0;\n border: 1px solid #c9bfb2;\n padding: 24px;\n }\n .case {\n min-height: 120px;\n margin: 0 0 24px;\n padding: 16px;\n background: #fffaf3;\n }\n .kicker,\n .pass-kicker,\n .pass-kicker-caps {\n display: block;\n width: 240px;\n min-height: 16px;\n margin: 0 0 8px;\n font-size: 12px;\n line-height: 16px;\n letter-spacing: 0.11em;\n color: #5b5046;\n }\n .kicker,\n .pass-kicker-caps {\n text-transform: uppercase;\n }\n /* The wild's most common kicker recipe: 0.08em tracking at a sub-13px\n size computes to under 1px, which the old absolute floor excluded. */\n .tight-tracked-kicker {\n display: block;\n width: 240px;\n min-height: 16px;\n margin: 0 0 8px;\n font-size: 12px;\n line-height: 16px;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n color: #5b5046;\n }\n .smallcaps-kicker {\n display: block;\n width: 240px;\n min-height: 16px;\n margin: 0 0 8px;\n font-size: 12px;\n line-height: 16px;\n letter-spacing: 0.12em;\n font-variant: small-caps;\n color: #5b5046;\n }\n .untracked-caps {\n display: block;\n width: 240px;\n min-height: 16px;\n margin: 0 0 8px;\n font-size: 12px;\n line-height: 16px;\n letter-spacing: normal;\n text-transform: uppercase;\n color: #5b5046;\n }\n h1,\n h2 {\n margin: 0 0 12px;\n font-size: 32px;\n line-height: 38px;\n font-weight: 700;\n }\n h3 {\n margin: 0 0 12px;\n font-size: 24px;\n line-height: 30px;\n font-weight: 700;\n }\n h4 {\n margin: 0 0 12px;\n font-size: 20px;\n line-height: 26px;\n font-weight: 700;\n }\n .role-heading {\n margin: 0 0 12px;\n font-size: 28px;\n line-height: 34px;\n font-weight: 700;\n }\n .hero-h1 {\n margin: 0 0 12px;\n font-size: 64px;\n line-height: 70px;\n font-weight: 700;\n }\n .hero-eyebrow {\n display: block;\n width: 240px;\n min-height: 16px;\n margin: 0 0 8px;\n font-size: 12px;\n line-height: 16px;\n letter-spacing: 2px;\n text-transform: uppercase;\n color: #5b5046;\n }\n p,\n label,\n figcaption,\n a,\n li {\n font-size: 16px;\n line-height: 24px;\n }\n nav,\n form,\n figure,\n ol {\n margin: 0 0 24px;\n padding: 16px;\n border: 1px solid #d8cec0;\n min-height: 80px;\n }\n .card-grid {\n display: grid;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 12px;\n margin: 0 0 24px;\n }\n .suite-card {\n display: block;\n min-height: 120px;\n padding: 16px;\n border: 1px solid #d8cec0;\n background: #fff;\n }\n .taxonomy-label {\n display: block;\n margin: 0 0 8px;\n font-size: 12px;\n line-height: 16px;\n letter-spacing: 0.11em;\n text-transform: uppercase;\n color: #5b5046;\n }\n .suite-card h3 {\n font-size: 24px;\n line-height: 30px;\n }\n .stat {\n min-height: 100px;\n padding: 16px;\n background: #fffaf3;\n }\n .stat h3 {\n font-size: 40px;\n line-height: 46px;\n }\n .hidden-mockup {\n display: grid;\n gap: 12px;\n margin: 0 0 24px;\n }\n .mockup-hero {\n min-height: 120px;\n padding: 16px;\n border: 1px solid #d8cec0;\n background: #fff;\n }\n .mockup-hero h2 {\n font-size: 24px;\n line-height: 30px;\n }\n ","rules":[{"selector":"body","declarations":[{"prop":"margin","value":"0","important":false},{"prop":"font-family","value":"Arial,sans-serif","important":false},{"prop":"background","value":"#f6f2ec","important":false},{"prop":"color","value":"#171411","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":"main","declarations":[{"prop":"display","value":"grid","important":false},{"prop":"grid-template-columns","value":"1fr 1fr","important":false},{"prop":"gap","value":"32px","important":false},{"prop":"padding","value":"32px","important":false}],"specificity":[0,0,1],"order":1,"isHover":false,"matchSelector":null},{"selector":".col","declarations":[{"prop":"min-width","value":"0","important":false},{"prop":"border","value":"1px solid #c9bfb2","important":false},{"prop":"padding","value":"24px","important":false}],"specificity":[0,1,0],"order":2,"isHover":false,"matchSelector":null},{"selector":".case","declarations":[{"prop":"min-height","value":"120px","important":false},{"prop":"margin","value":"0 0 24px","important":false},{"prop":"padding","value":"16px","important":false},{"prop":"background","value":"#fffaf3","important":false}],"specificity":[0,1,0],"order":3,"isHover":false,"matchSelector":null},{"selector":".kicker","declarations":[{"prop":"display","value":"block","important":false},{"prop":"width","value":"240px","important":false},{"prop":"min-height","value":"16px","important":false},{"prop":"margin","value":"0 0 8px","important":false},{"prop":"font-size","value":"12px","important":false},{"prop":"line-height","value":"16px","important":false},{"prop":"letter-spacing","value":"0.11em","important":false},{"prop":"color","value":"#5b5046","important":false}],"specificity":[0,1,0],"order":4,"isHover":false,"matchSelector":null},{"selector":".pass-kicker","declarations":[{"prop":"display","value":"block","important":false},{"prop":"width","value":"240px","important":false},{"prop":"min-height","value":"16px","important":false},{"prop":"margin","value":"0 0 8px","important":false},{"prop":"font-size","value":"12px","important":false},{"prop":"line-height","value":"16px","important":false},{"prop":"letter-spacing","value":"0.11em","important":false},{"prop":"color","value":"#5b5046","important":false}],"specificity":[0,1,0],"order":5,"isHover":false,"matchSelector":null},{"selector":".pass-kicker-caps","declarations":[{"prop":"display","value":"block","important":false},{"prop":"width","value":"240px","important":false},{"prop":"min-height","value":"16px","important":false},{"prop":"margin","value":"0 0 8px","important":false},{"prop":"font-size","value":"12px","important":false},{"prop":"line-height","value":"16px","important":false},{"prop":"letter-spacing","value":"0.11em","important":false},{"prop":"color","value":"#5b5046","important":false}],"specificity":[0,1,0],"order":6,"isHover":false,"matchSelector":null},{"selector":".kicker","declarations":[{"prop":"text-transform","value":"uppercase","important":false}],"specificity":[0,1,0],"order":7,"isHover":false,"matchSelector":null},{"selector":".pass-kicker-caps","declarations":[{"prop":"text-transform","value":"uppercase","important":false}],"specificity":[0,1,0],"order":8,"isHover":false,"matchSelector":null},{"selector":".tight-tracked-kicker","declarations":[{"prop":"display","value":"block","important":false},{"prop":"width","value":"240px","important":false},{"prop":"min-height","value":"16px","important":false},{"prop":"margin","value":"0 0 8px","important":false},{"prop":"font-size","value":"12px","important":false},{"prop":"line-height","value":"16px","important":false},{"prop":"letter-spacing","value":"0.08em","important":false},{"prop":"text-transform","value":"uppercase","important":false},{"prop":"color","value":"#5b5046","important":false}],"specificity":[0,1,0],"order":9,"isHover":false,"matchSelector":null},{"selector":".smallcaps-kicker","declarations":[{"prop":"display","value":"block","important":false},{"prop":"width","value":"240px","important":false},{"prop":"min-height","value":"16px","important":false},{"prop":"margin","value":"0 0 8px","important":false},{"prop":"font-size","value":"12px","important":false},{"prop":"line-height","value":"16px","important":false},{"prop":"letter-spacing","value":"0.12em","important":false},{"prop":"font-variant","value":"small-caps","important":false},{"prop":"color","value":"#5b5046","important":false}],"specificity":[0,1,0],"order":10,"isHover":false,"matchSelector":null},{"selector":".untracked-caps","declarations":[{"prop":"display","value":"block","important":false},{"prop":"width","value":"240px","important":false},{"prop":"min-height","value":"16px","important":false},{"prop":"margin","value":"0 0 8px","important":false},{"prop":"font-size","value":"12px","important":false},{"prop":"line-height","value":"16px","important":false},{"prop":"letter-spacing","value":"normal","important":false},{"prop":"text-transform","value":"uppercase","important":false},{"prop":"color","value":"#5b5046","important":false}],"specificity":[0,1,0],"order":11,"isHover":false,"matchSelector":null},{"selector":"h1","declarations":[{"prop":"margin","value":"0 0 12px","important":false},{"prop":"font-size","value":"32px","important":false},{"prop":"line-height","value":"38px","important":false},{"prop":"font-weight","value":"700","important":false}],"specificity":[0,0,1],"order":12,"isHover":false,"matchSelector":null},{"selector":"h2","declarations":[{"prop":"margin","value":"0 0 12px","important":false},{"prop":"font-size","value":"32px","important":false},{"prop":"line-height","value":"38px","important":false},{"prop":"font-weight","value":"700","important":false}],"specificity":[0,0,1],"order":13,"isHover":false,"matchSelector":null},{"selector":"h3","declarations":[{"prop":"margin","value":"0 0 12px","important":false},{"prop":"font-size","value":"24px","important":false},{"prop":"line-height","value":"30px","important":false},{"prop":"font-weight","value":"700","important":false}],"specificity":[0,0,1],"order":14,"isHover":false,"matchSelector":null},{"selector":"h4","declarations":[{"prop":"margin","value":"0 0 12px","important":false},{"prop":"font-size","value":"20px","important":false},{"prop":"line-height","value":"26px","important":false},{"prop":"font-weight","value":"700","important":false}],"specificity":[0,0,1],"order":15,"isHover":false,"matchSelector":null},{"selector":".role-heading","declarations":[{"prop":"margin","value":"0 0 12px","important":false},{"prop":"font-size","value":"28px","important":false},{"prop":"line-height","value":"34px","important":false},{"prop":"font-weight","value":"700","important":false}],"specificity":[0,1,0],"order":16,"isHover":false,"matchSelector":null},{"selector":".hero-h1","declarations":[{"prop":"margin","value":"0 0 12px","important":false},{"prop":"font-size","value":"64px","important":false},{"prop":"line-height","value":"70px","important":false},{"prop":"font-weight","value":"700","important":false}],"specificity":[0,1,0],"order":17,"isHover":false,"matchSelector":null},{"selector":".hero-eyebrow","declarations":[{"prop":"display","value":"block","important":false},{"prop":"width","value":"240px","important":false},{"prop":"min-height","value":"16px","important":false},{"prop":"margin","value":"0 0 8px","important":false},{"prop":"font-size","value":"12px","important":false},{"prop":"line-height","value":"16px","important":false},{"prop":"letter-spacing","value":"2px","important":false},{"prop":"text-transform","value":"uppercase","important":false},{"prop":"color","value":"#5b5046","important":false}],"specificity":[0,1,0],"order":18,"isHover":false,"matchSelector":null},{"selector":"p","declarations":[{"prop":"font-size","value":"16px","important":false},{"prop":"line-height","value":"24px","important":false}],"specificity":[0,0,1],"order":19,"isHover":false,"matchSelector":null},{"selector":"label","declarations":[{"prop":"font-size","value":"16px","important":false},{"prop":"line-height","value":"24px","important":false}],"specificity":[0,0,1],"order":20,"isHover":false,"matchSelector":null},{"selector":"figcaption","declarations":[{"prop":"font-size","value":"16px","important":false},{"prop":"line-height","value":"24px","important":false}],"specificity":[0,0,1],"order":21,"isHover":false,"matchSelector":null},{"selector":"a","declarations":[{"prop":"font-size","value":"16px","important":false},{"prop":"line-height","value":"24px","important":false}],"specificity":[0,0,1],"order":22,"isHover":false,"matchSelector":null},{"selector":"li","declarations":[{"prop":"font-size","value":"16px","important":false},{"prop":"line-height","value":"24px","important":false}],"specificity":[0,0,1],"order":23,"isHover":false,"matchSelector":null},{"selector":"nav","declarations":[{"prop":"margin","value":"0 0 24px","important":false},{"prop":"padding","value":"16px","important":false},{"prop":"border","value":"1px solid #d8cec0","important":false},{"prop":"min-height","value":"80px","important":false}],"specificity":[0,0,1],"order":24,"isHover":false,"matchSelector":null},{"selector":"form","declarations":[{"prop":"margin","value":"0 0 24px","important":false},{"prop":"padding","value":"16px","important":false},{"prop":"border","value":"1px solid #d8cec0","important":false},{"prop":"min-height","value":"80px","important":false}],"specificity":[0,0,1],"order":25,"isHover":false,"matchSelector":null},{"selector":"figure","declarations":[{"prop":"margin","value":"0 0 24px","important":false},{"prop":"padding","value":"16px","important":false},{"prop":"border","value":"1px solid #d8cec0","important":false},{"prop":"min-height","value":"80px","important":false}],"specificity":[0,0,1],"order":26,"isHover":false,"matchSelector":null},{"selector":"ol","declarations":[{"prop":"margin","value":"0 0 24px","important":false},{"prop":"padding","value":"16px","important":false},{"prop":"border","value":"1px solid #d8cec0","important":false},{"prop":"min-height","value":"80px","important":false}],"specificity":[0,0,1],"order":27,"isHover":false,"matchSelector":null},{"selector":".card-grid","declarations":[{"prop":"display","value":"grid","important":false},{"prop":"grid-template-columns","value":"repeat(2,minmax(0,1fr))","important":false},{"prop":"gap","value":"12px","important":false},{"prop":"margin","value":"0 0 24px","important":false}],"specificity":[0,1,0],"order":28,"isHover":false,"matchSelector":null},{"selector":".suite-card","declarations":[{"prop":"display","value":"block","important":false},{"prop":"min-height","value":"120px","important":false},{"prop":"padding","value":"16px","important":false},{"prop":"border","value":"1px solid #d8cec0","important":false},{"prop":"background","value":"#fff","important":false}],"specificity":[0,1,0],"order":29,"isHover":false,"matchSelector":null},{"selector":".taxonomy-label","declarations":[{"prop":"display","value":"block","important":false},{"prop":"margin","value":"0 0 8px","important":false},{"prop":"font-size","value":"12px","important":false},{"prop":"line-height","value":"16px","important":false},{"prop":"letter-spacing","value":"0.11em","important":false},{"prop":"text-transform","value":"uppercase","important":false},{"prop":"color","value":"#5b5046","important":false}],"specificity":[0,1,0],"order":30,"isHover":false,"matchSelector":null},{"selector":".suite-card h3","declarations":[{"prop":"font-size","value":"24px","important":false},{"prop":"line-height","value":"30px","important":false}],"specificity":[0,1,1],"order":31,"isHover":false,"matchSelector":null},{"selector":".stat","declarations":[{"prop":"min-height","value":"100px","important":false},{"prop":"padding","value":"16px","important":false},{"prop":"background","value":"#fffaf3","important":false}],"specificity":[0,1,0],"order":32,"isHover":false,"matchSelector":null},{"selector":".stat h3","declarations":[{"prop":"font-size","value":"40px","important":false},{"prop":"line-height","value":"46px","important":false}],"specificity":[0,1,1],"order":33,"isHover":false,"matchSelector":null},{"selector":".hidden-mockup","declarations":[{"prop":"display","value":"grid","important":false},{"prop":"gap","value":"12px","important":false},{"prop":"margin","value":"0 0 24px","important":false}],"specificity":[0,1,0],"order":34,"isHover":false,"matchSelector":null},{"selector":".mockup-hero","declarations":[{"prop":"min-height","value":"120px","important":false},{"prop":"padding","value":"16px","important":false},{"prop":"border","value":"1px solid #d8cec0","important":false},{"prop":"background","value":"#fff","important":false}],"specificity":[0,1,0],"order":35,"isHover":false,"matchSelector":null},{"selector":".mockup-hero h2","declarations":[{"prop":"font-size","value":"24px","important":false},{"prop":"line-height","value":"30px","important":false}],"specificity":[0,1,1],"order":36,"isHover":false,"matchSelector":null}],"unwrapped":"\n body {\n margin: 0;\n font-family: Arial, sans-serif;\n background: #f6f2ec;\n color: #171411;\n }\n main {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 32px;\n padding: 32px;\n }\n .col {\n min-width: 0;\n border: 1px solid #c9bfb2;\n padding: 24px;\n }\n .case {\n min-height: 120px;\n margin: 0 0 24px;\n padding: 16px;\n background: #fffaf3;\n }\n .kicker,\n .pass-kicker,\n .pass-kicker-caps {\n display: block;\n width: 240px;\n min-height: 16px;\n margin: 0 0 8px;\n font-size: 12px;\n line-height: 16px;\n letter-spacing: 0.11em;\n color: #5b5046;\n }\n .kicker,\n .pass-kicker-caps {\n text-transform: uppercase;\n }\n /* The wild's most common kicker recipe: 0.08em tracking at a sub-13px\n size computes to under 1px, which the old absolute floor excluded. */\n .tight-tracked-kicker {\n display: block;\n width: 240px;\n min-height: 16px;\n margin: 0 0 8px;\n font-size: 12px;\n line-height: 16px;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n color: #5b5046;\n }\n .smallcaps-kicker {\n display: block;\n width: 240px;\n min-height: 16px;\n margin: 0 0 8px;\n font-size: 12px;\n line-height: 16px;\n letter-spacing: 0.12em;\n font-variant: small-caps;\n color: #5b5046;\n }\n .untracked-caps {\n display: block;\n width: 240px;\n min-height: 16px;\n margin: 0 0 8px;\n font-size: 12px;\n line-height: 16px;\n letter-spacing: normal;\n text-transform: uppercase;\n color: #5b5046;\n }\n h1,\n h2 {\n margin: 0 0 12px;\n font-size: 32px;\n line-height: 38px;\n font-weight: 700;\n }\n h3 {\n margin: 0 0 12px;\n font-size: 24px;\n line-height: 30px;\n font-weight: 700;\n }\n h4 {\n margin: 0 0 12px;\n font-size: 20px;\n line-height: 26px;\n font-weight: 700;\n }\n .role-heading {\n margin: 0 0 12px;\n font-size: 28px;\n line-height: 34px;\n font-weight: 700;\n }\n .hero-h1 {\n margin: 0 0 12px;\n font-size: 64px;\n line-height: 70px;\n font-weight: 700;\n }\n .hero-eyebrow {\n display: block;\n width: 240px;\n min-height: 16px;\n margin: 0 0 8px;\n font-size: 12px;\n line-height: 16px;\n letter-spacing: 2px;\n text-transform: uppercase;\n color: #5b5046;\n }\n p,\n label,\n figcaption,\n a,\n li {\n font-size: 16px;\n line-height: 24px;\n }\n nav,\n form,\n figure,\n ol {\n margin: 0 0 24px;\n padding: 16px;\n border: 1px solid #d8cec0;\n min-height: 80px;\n }\n .card-grid {\n display: grid;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 12px;\n margin: 0 0 24px;\n }\n .suite-card {\n display: block;\n min-height: 120px;\n padding: 16px;\n border: 1px solid #d8cec0;\n background: #fff;\n }\n .taxonomy-label {\n display: block;\n margin: 0 0 8px;\n font-size: 12px;\n line-height: 16px;\n letter-spacing: 0.11em;\n text-transform: uppercase;\n color: #5b5046;\n }\n .suite-card h3 {\n font-size: 24px;\n line-height: 30px;\n }\n .stat {\n min-height: 100px;\n padding: 16px;\n background: #fffaf3;\n }\n .stat h3 {\n font-size: 40px;\n line-height: 46px;\n }\n .hidden-mockup {\n display: grid;\n gap: 12px;\n margin: 0 0 24px;\n }\n .mockup-hero {\n min-height: 120px;\n padding: 16px;\n border: 1px solid #d8cec0;\n background: #fff;\n }\n .mockup-hero h2 {\n font-size: 24px;\n line-height: 30px;\n }\n "},{"name":"tests/fixtures/antipatterns/layout.html","css":"\n body { font-family: system-ui, sans-serif; background: #f9fafb; padding: 24px; margin: 0; color: #111827; }\n .grid { display: grid; grid-template-columns: 1fr 1fr; gap: 32px; max-width: 1280px; margin: 0 auto; }\n .col h2 { font-size: 14px; text-transform: uppercase; letter-spacing: 0.05em; margin: 0 0 16px; color: #475569; }\n .col h3 { font-size: 11px; text-transform: uppercase; letter-spacing: 0.05em; margin: 24px 0 8px; color: #64748b; }\n ","rules":[{"selector":"body","declarations":[{"prop":"font-family","value":"system-ui,sans-serif","important":false},{"prop":"background","value":"#f9fafb","important":false},{"prop":"padding","value":"24px","important":false},{"prop":"margin","value":"0","important":false},{"prop":"color","value":"#111827","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":".grid","declarations":[{"prop":"display","value":"grid","important":false},{"prop":"grid-template-columns","value":"1fr 1fr","important":false},{"prop":"gap","value":"32px","important":false},{"prop":"max-width","value":"1280px","important":false},{"prop":"margin","value":"0 auto","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null},{"selector":".col h2","declarations":[{"prop":"font-size","value":"14px","important":false},{"prop":"text-transform","value":"uppercase","important":false},{"prop":"letter-spacing","value":"0.05em","important":false},{"prop":"margin","value":"0 0 16px","important":false},{"prop":"color","value":"#475569","important":false}],"specificity":[0,1,1],"order":2,"isHover":false,"matchSelector":null},{"selector":".col h3","declarations":[{"prop":"font-size","value":"11px","important":false},{"prop":"text-transform","value":"uppercase","important":false},{"prop":"letter-spacing","value":"0.05em","important":false},{"prop":"margin","value":"24px 0 8px","important":false},{"prop":"color","value":"#64748b","important":false}],"specificity":[0,1,1],"order":3,"isHover":false,"matchSelector":null}],"unwrapped":"\n body { font-family: system-ui, sans-serif; background: #f9fafb; padding: 24px; margin: 0; color: #111827; }\n .grid { display: grid; grid-template-columns: 1fr 1fr; gap: 32px; max-width: 1280px; margin: 0 auto; }\n .col h2 { font-size: 14px; text-transform: uppercase; letter-spacing: 0.05em; margin: 0 0 16px; color: #475569; }\n .col h3 { font-size: 11px; text-transform: uppercase; letter-spacing: 0.05em; margin: 24px 0 8px; color: #64748b; }\n "},{"name":"tests/fixtures/antipatterns/legitimate-borders.html","css":"\n body { font-family: system-ui, sans-serif; background: #f9fafb; padding: 2rem; color: #111827; }\n h1 { font-size: 1.5rem; margin-bottom: 0.5rem; }\n h2 { font-size: 1.125rem; margin: 2rem 0 0.75rem; color: #6b7280; }\n .demo { max-width: 36rem; margin-bottom: 1.5rem; }\n ","rules":[{"selector":"body","declarations":[{"prop":"font-family","value":"system-ui,sans-serif","important":false},{"prop":"background","value":"#f9fafb","important":false},{"prop":"padding","value":"2rem","important":false},{"prop":"color","value":"#111827","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":"h1","declarations":[{"prop":"font-size","value":"1.5rem","important":false},{"prop":"margin-bottom","value":"0.5rem","important":false}],"specificity":[0,0,1],"order":1,"isHover":false,"matchSelector":null},{"selector":"h2","declarations":[{"prop":"font-size","value":"1.125rem","important":false},{"prop":"margin","value":"2rem 0 0.75rem","important":false},{"prop":"color","value":"#6b7280","important":false}],"specificity":[0,0,1],"order":2,"isHover":false,"matchSelector":null},{"selector":".demo","declarations":[{"prop":"max-width","value":"36rem","important":false},{"prop":"margin-bottom","value":"1.5rem","important":false}],"specificity":[0,1,0],"order":3,"isHover":false,"matchSelector":null}],"unwrapped":"\n body { font-family: system-ui, sans-serif; background: #f9fafb; padding: 2rem; color: #111827; }\n h1 { font-size: 1.5rem; margin-bottom: 0.5rem; }\n h2 { font-size: 1.125rem; margin: 2rem 0 0.75rem; color: #6b7280; }\n .demo { max-width: 36rem; margin-bottom: 1.5rem; }\n "},{"name":"tests/fixtures/antipatterns/linked-stylesheet.html","css":"\n body {\n margin: 0;\n padding: 24px;\n background: #f9fafb;\n color: #111827;\n font: 14px/1.5 system-ui, sans-serif;\n }\n\n h1 {\n max-width: 1080px;\n margin: 0 auto 8px;\n font-size: 34px;\n line-height: 1.05;\n }\n\n p.intro {\n max-width: 1080px;\n margin: 0 auto 24px;\n color: #4b5563;\n }\n\n .grid {\n display: grid;\n grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);\n gap: 32px;\n max-width: 1080px;\n margin: 0 auto;\n }\n\n .col h2 {\n margin: 0 0 14px;\n color: #475569;\n font-size: 13px;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n }\n\n .cards {\n display: grid;\n gap: 14px;\n }\n\n h3 {\n margin: 0 0 4px;\n font-size: 15px;\n line-height: 1.25;\n }\n\n .cards p {\n margin: 0;\n color: #4b5563;\n }\n ","rules":[{"selector":"body","declarations":[{"prop":"margin","value":"0","important":false},{"prop":"padding","value":"24px","important":false},{"prop":"background","value":"#f9fafb","important":false},{"prop":"color","value":"#111827","important":false},{"prop":"font","value":"14px/1.5 system-ui,sans-serif","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":"h1","declarations":[{"prop":"max-width","value":"1080px","important":false},{"prop":"margin","value":"0 auto 8px","important":false},{"prop":"font-size","value":"34px","important":false},{"prop":"line-height","value":"1.05","important":false}],"specificity":[0,0,1],"order":1,"isHover":false,"matchSelector":null},{"selector":"p.intro","declarations":[{"prop":"max-width","value":"1080px","important":false},{"prop":"margin","value":"0 auto 24px","important":false},{"prop":"color","value":"#4b5563","important":false}],"specificity":[0,1,1],"order":2,"isHover":false,"matchSelector":null},{"selector":".grid","declarations":[{"prop":"display","value":"grid","important":false},{"prop":"grid-template-columns","value":"minmax(0,1fr) minmax(0,1fr)","important":false},{"prop":"gap","value":"32px","important":false},{"prop":"max-width","value":"1080px","important":false},{"prop":"margin","value":"0 auto","important":false}],"specificity":[0,1,0],"order":3,"isHover":false,"matchSelector":null},{"selector":".col h2","declarations":[{"prop":"margin","value":"0 0 14px","important":false},{"prop":"color","value":"#475569","important":false},{"prop":"font-size","value":"13px","important":false},{"prop":"letter-spacing","value":"0.08em","important":false},{"prop":"text-transform","value":"uppercase","important":false}],"specificity":[0,1,1],"order":4,"isHover":false,"matchSelector":null},{"selector":".cards","declarations":[{"prop":"display","value":"grid","important":false},{"prop":"gap","value":"14px","important":false}],"specificity":[0,1,0],"order":5,"isHover":false,"matchSelector":null},{"selector":"h3","declarations":[{"prop":"margin","value":"0 0 4px","important":false},{"prop":"font-size","value":"15px","important":false},{"prop":"line-height","value":"1.25","important":false}],"specificity":[0,0,1],"order":6,"isHover":false,"matchSelector":null},{"selector":".cards p","declarations":[{"prop":"margin","value":"0","important":false},{"prop":"color","value":"#4b5563","important":false}],"specificity":[0,1,1],"order":7,"isHover":false,"matchSelector":null}],"unwrapped":"\n body {\n margin: 0;\n padding: 24px;\n background: #f9fafb;\n color: #111827;\n font: 14px/1.5 system-ui, sans-serif;\n }\n\n h1 {\n max-width: 1080px;\n margin: 0 auto 8px;\n font-size: 34px;\n line-height: 1.05;\n }\n\n p.intro {\n max-width: 1080px;\n margin: 0 auto 24px;\n color: #4b5563;\n }\n\n .grid {\n display: grid;\n grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);\n gap: 32px;\n max-width: 1080px;\n margin: 0 auto;\n }\n\n .col h2 {\n margin: 0 0 14px;\n color: #475569;\n font-size: 13px;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n }\n\n .cards {\n display: grid;\n gap: 14px;\n }\n\n h3 {\n margin: 0 0 4px;\n font-size: 15px;\n line-height: 1.25;\n }\n\n .cards p {\n margin: 0;\n color: #4b5563;\n }\n "},{"name":"tests/fixtures/antipatterns/modern-color-borders.html","css":"\n /* Two-column fixture: left col = should-flag, right col = should-pass.\n The side-tab snippet doesn't embed identifying text, so the test\n asserts finding counts against the structural ids (#flag-N / #pass-N)\n by reading the element via data attributes in the check path. Since\n that isn't available to the Node fixture runner, we instead place a\n unique number of FLAG elements (each a distinct side-tab) and verify\n the side-tab count. */\n\n /* CSS custom properties — variables used by the var()-case fixtures.\n jsdom's CSSOM drops any border shorthand containing var(), which used\n to make every side-tab built with CSS variables invisible to the\n detector. These cases regression-test the fallback pass that parses\n border shorthands directly off the rule (not the computed style). */\n :root {\n --brand: #87a8ff;\n --warn: #8a6a2f;\n --terracotta: #aa674d;\n --line: #e5e7eb; /* neutral gray — must NOT trigger */\n --rule: #f3f4f6; /* near-white — must NOT trigger */\n }\n\n body { font-family: system-ui, sans-serif; margin: 0; padding: 24px; background: #fafafa; }\n .grid { display: grid; grid-template-columns: 1fr 1fr; gap: 32px; max-width: 1120px; margin: 0 auto; }\n .col h2 { font-size: 14px; text-transform: uppercase; letter-spacing: 0.05em; margin: 0 0 16px; color: #475569; }\n .case { padding: 12px 16px; margin-bottom: 16px; }\n .case h3 { font-size: 14px; margin: 0 0 4px; }\n .case p { font-size: 13px; margin: 0; color: #64748b; }\n\n /* ── FLAG cases: colored side-tab borders using modern color formats ── */\n\n /* 1: oklch border-left + border-radius (the canonical real-page bug) */\n #flag-oklch-1 {\n width: 400px;\n background: oklch(100% 0 0);\n border-radius: 4px;\n border-left: 3px solid oklch(65% 0.12 250);\n }\n\n /* 2: oklch mixed — neutral 1px border all around + colored 4px left +\n border-radius (mirrors .medication-card from the reproducer) */\n #flag-oklch-2 {\n width: 400px;\n background: oklch(100% 0 0);\n border: 1px solid oklch(80% 0.05 250);\n border-left: 4px solid oklch(75% 0.15 45);\n border-radius: 4px;\n }\n\n /* 3: oklch alert pattern — colored 4px border-left + border-radius */\n #flag-oklch-3 {\n width: 400px;\n background: oklch(98% 0.01 60);\n border-left: 4px solid oklch(75% 0.18 45);\n border-radius: 4px;\n }\n\n /* 4: oklab border-left + border-radius */\n #flag-oklab-1 {\n width: 400px;\n background: #ffffff;\n border-radius: 6px;\n border-left: 4px solid oklab(60% 0.1 0.15);\n }\n\n /* 5: lch border-left + border-radius */\n #flag-lch-1 {\n width: 400px;\n background: #ffffff;\n border-radius: 6px;\n border-left: 4px solid lch(55% 60 250);\n }\n\n /* 6: lab border-left + border-radius */\n #flag-lab-1 {\n width: 400px;\n background: #ffffff;\n border-radius: 6px;\n border-left: 4px solid lab(50% 40 -30);\n }\n\n /* 7: card-shaped <label> with colored oklch side border + radius\n (the checklist-item pattern from preop-portal reproducer) */\n label#flag-label-oklch {\n display: grid;\n grid-template-columns: auto 1fr;\n width: 400px;\n padding: 16px;\n background: oklch(100% 0 0);\n border-radius: 4px;\n border-left: 3px solid oklch(65% 0.12 250);\n cursor: pointer;\n }\n\n /* 8: card-shaped <label> with colored rgb side border + radius —\n proves the fix is not oklch-specific */\n label#flag-label-rgb {\n display: block;\n width: 400px;\n padding: 16px;\n background: #ffffff;\n border-radius: 6px;\n border-left: 4px solid #3b82f6;\n cursor: pointer;\n }\n\n /* 9: CSS variable in shorthand — the canonical real-page pattern from\n evals (e.g. 09-physics-study: border-left:8px solid var(--brand-2)).\n jsdom silently drops this entire declaration, so the computed-style\n path used to miss it. */\n #flag-var-shorthand {\n width: 400px;\n background: #ffffff;\n border-radius: 4px;\n border-left: 5px solid var(--brand);\n }\n\n /* 10: CSS variable + neutral 1px all-around border — mirrors the\n medication-card pattern with a colored accent on the left. */\n #flag-var-mixed {\n width: 400px;\n background: #ffffff;\n border: 1px solid var(--line);\n border-left: 4px solid var(--warn);\n border-radius: 4px;\n }\n\n /* 11: CSS variable shorthand, right side. Ensures the fallback works\n for both inline axes, not just border-left. */\n #flag-var-right {\n width: 400px;\n background: #ffffff;\n border-radius: 4px;\n border-right: 4px solid var(--terracotta);\n }\n\n /* 12: card-shaped <label> with var() side border + radius —\n the checklist-row shape, built with tokens. */\n label#flag-label-var {\n display: block;\n width: 400px;\n padding: 16px;\n background: #ffffff;\n border-radius: 6px;\n border-left: 4px solid var(--brand);\n cursor: pointer;\n }\n\n /* ── PASS cases: legitimate or neutral borders, must NOT fire ── */\n\n /* 1: oklch chroma ~0 — true neutral gray border should not fire */\n #pass-oklch-neutral {\n width: 400px;\n background: #ffffff;\n border-radius: 4px;\n border-left: 3px solid oklch(80% 0 0);\n }\n\n /* 2: oklch low chroma (0.01) — still perceptually neutral */\n #pass-oklch-nearneutral {\n width: 400px;\n background: #ffffff;\n border-radius: 4px;\n border-left: 3px solid oklch(75% 0.01 250);\n }\n\n /* 3: oklch colored border all around (not one-sided) — no side-tab */\n #pass-oklch-allsides {\n width: 400px;\n background: #ffffff;\n border: 3px solid oklch(65% 0.12 250);\n border-radius: 4px;\n }\n\n /* 4: oklch colored 1px border-left (too thin to qualify) */\n #pass-oklch-thin {\n width: 400px;\n background: #ffffff;\n border-radius: 4px;\n border-left: 1px solid oklch(65% 0.12 250);\n }\n\n /* 5: lab neutral (chroma near zero) — must not fire */\n #pass-lab-neutral {\n width: 400px;\n background: #ffffff;\n border-radius: 4px;\n border-left: 3px solid lab(50% 0 0);\n }\n\n /* 6: lch neutral (chroma 0) */\n #pass-lch-neutral {\n width: 400px;\n background: #ffffff;\n border-radius: 4px;\n border-left: 3px solid lch(50% 0 0);\n }\n\n /* 7: plain inline form label — no border, no padding, no radius.\n Must NOT be flagged for anything. */\n label#pass-label-plain {\n font-size: 14px;\n font-weight: 500;\n color: #374151;\n }\n\n /* 8: form label with a small neutral gray left border — neutral color\n should not fire the colored side-tab rule. */\n label#pass-label-neutral-border {\n display: block;\n width: 400px;\n padding: 8px;\n background: #ffffff;\n border-radius: 4px;\n border-left: 3px solid #e5e7eb;\n }\n\n /* 9: inline label inside a form row — default inline layout,\n no borders, must not fire. */\n label#pass-label-inline {\n font-size: 13px;\n color: #6b7280;\n margin-right: 8px;\n }\n\n /* 10: label with 1px colored left border — too thin to qualify\n (matches the existing 1px thin rule for divs). */\n label#pass-label-thin {\n display: block;\n width: 400px;\n padding: 8px;\n background: #ffffff;\n border-radius: 4px;\n border-left: 1px solid #3b82f6;\n }\n\n /* 11: CSS variable resolving to a neutral gray — must NOT fire,\n even though the border shorthand contains var(). */\n #pass-var-neutral {\n width: 400px;\n background: #ffffff;\n border-radius: 4px;\n border-left: 3px solid var(--line);\n }\n\n /* 12: thin (1px) var-based left border — under the side-tab width\n threshold even when resolved. */\n #pass-var-thin {\n width: 400px;\n background: #ffffff;\n border-radius: 4px;\n border-left: 1px solid var(--brand);\n }\n\n /* 13: var-based uniform border on all four sides. Not a side-tab. */\n #pass-var-allsides {\n width: 400px;\n background: #ffffff;\n border: 3px solid var(--brand);\n border-radius: 4px;\n }\n\n /* 14: neutral 1px oklch right divider — context-bar hairline, not a side-tab. */\n #pass-oklch-neutral-right-divider {\n width: 400px;\n background: #ffffff;\n border-radius: 4px;\n border-right: 1px solid oklch(92% 0 0 / 0.12);\n }\n ","rules":[{"selector":":root","declarations":[{"prop":"--brand","value":"#87a8ff","important":false},{"prop":"--warn","value":"#8a6a2f","important":false},{"prop":"--terracotta","value":"#aa674d","important":false},{"prop":"--line","value":"#e5e7eb","important":false},{"prop":"--rule","value":"#f3f4f6","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null},{"selector":"body","declarations":[{"prop":"font-family","value":"system-ui,sans-serif","important":false},{"prop":"margin","value":"0","important":false},{"prop":"padding","value":"24px","important":false},{"prop":"background","value":"#fafafa","important":false}],"specificity":[0,0,1],"order":1,"isHover":false,"matchSelector":null},{"selector":".grid","declarations":[{"prop":"display","value":"grid","important":false},{"prop":"grid-template-columns","value":"1fr 1fr","important":false},{"prop":"gap","value":"32px","important":false},{"prop":"max-width","value":"1120px","important":false},{"prop":"margin","value":"0 auto","important":false}],"specificity":[0,1,0],"order":2,"isHover":false,"matchSelector":null},{"selector":".col h2","declarations":[{"prop":"font-size","value":"14px","important":false},{"prop":"text-transform","value":"uppercase","important":false},{"prop":"letter-spacing","value":"0.05em","important":false},{"prop":"margin","value":"0 0 16px","important":false},{"prop":"color","value":"#475569","important":false}],"specificity":[0,1,1],"order":3,"isHover":false,"matchSelector":null},{"selector":".case","declarations":[{"prop":"padding","value":"12px 16px","important":false},{"prop":"margin-bottom","value":"16px","important":false}],"specificity":[0,1,0],"order":4,"isHover":false,"matchSelector":null},{"selector":".case h3","declarations":[{"prop":"font-size","value":"14px","important":false},{"prop":"margin","value":"0 0 4px","important":false}],"specificity":[0,1,1],"order":5,"isHover":false,"matchSelector":null},{"selector":".case p","declarations":[{"prop":"font-size","value":"13px","important":false},{"prop":"margin","value":"0","important":false},{"prop":"color","value":"#64748b","important":false}],"specificity":[0,1,1],"order":6,"isHover":false,"matchSelector":null},{"selector":"#flag-oklch-1","declarations":[{"prop":"width","value":"400px","important":false},{"prop":"background","value":"oklch(100%0 0)","important":false},{"prop":"border-radius","value":"4px","important":false},{"prop":"border-left","value":"3px solid oklch(65%0.12 250)","important":false}],"specificity":[1,0,0],"order":7,"isHover":false,"matchSelector":null},{"selector":"#flag-oklch-2","declarations":[{"prop":"width","value":"400px","important":false},{"prop":"background","value":"oklch(100%0 0)","important":false},{"prop":"border","value":"1px solid oklch(80%0.05 250)","important":false},{"prop":"border-left","value":"4px solid oklch(75%0.15 45)","important":false},{"prop":"border-radius","value":"4px","important":false}],"specificity":[1,0,0],"order":8,"isHover":false,"matchSelector":null},{"selector":"#flag-oklch-3","declarations":[{"prop":"width","value":"400px","important":false},{"prop":"background","value":"oklch(98%0.01 60)","important":false},{"prop":"border-left","value":"4px solid oklch(75%0.18 45)","important":false},{"prop":"border-radius","value":"4px","important":false}],"specificity":[1,0,0],"order":9,"isHover":false,"matchSelector":null},{"selector":"#flag-oklab-1","declarations":[{"prop":"width","value":"400px","important":false},{"prop":"background","value":"#ffffff","important":false},{"prop":"border-radius","value":"6px","important":false},{"prop":"border-left","value":"4px solid oklab(60%0.1 0.15)","important":false}],"specificity":[1,0,0],"order":10,"isHover":false,"matchSelector":null},{"selector":"#flag-lch-1","declarations":[{"prop":"width","value":"400px","important":false},{"prop":"background","value":"#ffffff","important":false},{"prop":"border-radius","value":"6px","important":false},{"prop":"border-left","value":"4px solid lch(55%60 250)","important":false}],"specificity":[1,0,0],"order":11,"isHover":false,"matchSelector":null},{"selector":"#flag-lab-1","declarations":[{"prop":"width","value":"400px","important":false},{"prop":"background","value":"#ffffff","important":false},{"prop":"border-radius","value":"6px","important":false},{"prop":"border-left","value":"4px solid lab(50%40-30)","important":false}],"specificity":[1,0,0],"order":12,"isHover":false,"matchSelector":null},{"selector":"label#flag-label-oklch","declarations":[{"prop":"display","value":"grid","important":false},{"prop":"grid-template-columns","value":"auto 1fr","important":false},{"prop":"width","value":"400px","important":false},{"prop":"padding","value":"16px","important":false},{"prop":"background","value":"oklch(100%0 0)","important":false},{"prop":"border-radius","value":"4px","important":false},{"prop":"border-left","value":"3px solid oklch(65%0.12 250)","important":false},{"prop":"cursor","value":"pointer","important":false}],"specificity":[1,0,1],"order":13,"isHover":false,"matchSelector":null},{"selector":"label#flag-label-rgb","declarations":[{"prop":"display","value":"block","important":false},{"prop":"width","value":"400px","important":false},{"prop":"padding","value":"16px","important":false},{"prop":"background","value":"#ffffff","important":false},{"prop":"border-radius","value":"6px","important":false},{"prop":"border-left","value":"4px solid #3b82f6","important":false},{"prop":"cursor","value":"pointer","important":false}],"specificity":[1,0,1],"order":14,"isHover":false,"matchSelector":null},{"selector":"#flag-var-shorthand","declarations":[{"prop":"width","value":"400px","important":false},{"prop":"background","value":"#ffffff","important":false},{"prop":"border-radius","value":"4px","important":false},{"prop":"border-left","value":"5px solid var(--brand)","important":false}],"specificity":[1,0,0],"order":15,"isHover":false,"matchSelector":null},{"selector":"#flag-var-mixed","declarations":[{"prop":"width","value":"400px","important":false},{"prop":"background","value":"#ffffff","important":false},{"prop":"border","value":"1px solid var(--line)","important":false},{"prop":"border-left","value":"4px solid var(--warn)","important":false},{"prop":"border-radius","value":"4px","important":false}],"specificity":[1,0,0],"order":16,"isHover":false,"matchSelector":null},{"selector":"#flag-var-right","declarations":[{"prop":"width","value":"400px","important":false},{"prop":"background","value":"#ffffff","important":false},{"prop":"border-radius","value":"4px","important":false},{"prop":"border-right","value":"4px solid var(--terracotta)","important":false}],"specificity":[1,0,0],"order":17,"isHover":false,"matchSelector":null},{"selector":"label#flag-label-var","declarations":[{"prop":"display","value":"block","important":false},{"prop":"width","value":"400px","important":false},{"prop":"padding","value":"16px","important":false},{"prop":"background","value":"#ffffff","important":false},{"prop":"border-radius","value":"6px","important":false},{"prop":"border-left","value":"4px solid var(--brand)","important":false},{"prop":"cursor","value":"pointer","important":false}],"specificity":[1,0,1],"order":18,"isHover":false,"matchSelector":null},{"selector":"#pass-oklch-neutral","declarations":[{"prop":"width","value":"400px","important":false},{"prop":"background","value":"#ffffff","important":false},{"prop":"border-radius","value":"4px","important":false},{"prop":"border-left","value":"3px solid oklch(80%0 0)","important":false}],"specificity":[1,0,0],"order":19,"isHover":false,"matchSelector":null},{"selector":"#pass-oklch-nearneutral","declarations":[{"prop":"width","value":"400px","important":false},{"prop":"background","value":"#ffffff","important":false},{"prop":"border-radius","value":"4px","important":false},{"prop":"border-left","value":"3px solid oklch(75%0.01 250)","important":false}],"specificity":[1,0,0],"order":20,"isHover":false,"matchSelector":null},{"selector":"#pass-oklch-allsides","declarations":[{"prop":"width","value":"400px","important":false},{"prop":"background","value":"#ffffff","important":false},{"prop":"border","value":"3px solid oklch(65%0.12 250)","important":false},{"prop":"border-radius","value":"4px","important":false}],"specificity":[1,0,0],"order":21,"isHover":false,"matchSelector":null},{"selector":"#pass-oklch-thin","declarations":[{"prop":"width","value":"400px","important":false},{"prop":"background","value":"#ffffff","important":false},{"prop":"border-radius","value":"4px","important":false},{"prop":"border-left","value":"1px solid oklch(65%0.12 250)","important":false}],"specificity":[1,0,0],"order":22,"isHover":false,"matchSelector":null},{"selector":"#pass-lab-neutral","declarations":[{"prop":"width","value":"400px","important":false},{"prop":"background","value":"#ffffff","important":false},{"prop":"border-radius","value":"4px","important":false},{"prop":"border-left","value":"3px solid lab(50%0 0)","important":false}],"specificity":[1,0,0],"order":23,"isHover":false,"matchSelector":null},{"selector":"#pass-lch-neutral","declarations":[{"prop":"width","value":"400px","important":false},{"prop":"background","value":"#ffffff","important":false},{"prop":"border-radius","value":"4px","important":false},{"prop":"border-left","value":"3px solid lch(50%0 0)","important":false}],"specificity":[1,0,0],"order":24,"isHover":false,"matchSelector":null},{"selector":"label#pass-label-plain","declarations":[{"prop":"font-size","value":"14px","important":false},{"prop":"font-weight","value":"500","important":false},{"prop":"color","value":"#374151","important":false}],"specificity":[1,0,1],"order":25,"isHover":false,"matchSelector":null},{"selector":"label#pass-label-neutral-border","declarations":[{"prop":"display","value":"block","important":false},{"prop":"width","value":"400px","important":false},{"prop":"padding","value":"8px","important":false},{"prop":"background","value":"#ffffff","important":false},{"prop":"border-radius","value":"4px","important":false},{"prop":"border-left","value":"3px solid #e5e7eb","important":false}],"specificity":[1,0,1],"order":26,"isHover":false,"matchSelector":null},{"selector":"label#pass-label-inline","declarations":[{"prop":"font-size","value":"13px","important":false},{"prop":"color","value":"#6b7280","important":false},{"prop":"margin-right","value":"8px","important":false}],"specificity":[1,0,1],"order":27,"isHover":false,"matchSelector":null},{"selector":"label#pass-label-thin","declarations":[{"prop":"display","value":"block","important":false},{"prop":"width","value":"400px","important":false},{"prop":"padding","value":"8px","important":false},{"prop":"background","value":"#ffffff","important":false},{"prop":"border-radius","value":"4px","important":false},{"prop":"border-left","value":"1px solid #3b82f6","important":false}],"specificity":[1,0,1],"order":28,"isHover":false,"matchSelector":null},{"selector":"#pass-var-neutral","declarations":[{"prop":"width","value":"400px","important":false},{"prop":"background","value":"#ffffff","important":false},{"prop":"border-radius","value":"4px","important":false},{"prop":"border-left","value":"3px solid var(--line)","important":false}],"specificity":[1,0,0],"order":29,"isHover":false,"matchSelector":null},{"selector":"#pass-var-thin","declarations":[{"prop":"width","value":"400px","important":false},{"prop":"background","value":"#ffffff","important":false},{"prop":"border-radius","value":"4px","important":false},{"prop":"border-left","value":"1px solid var(--brand)","important":false}],"specificity":[1,0,0],"order":30,"isHover":false,"matchSelector":null},{"selector":"#pass-var-allsides","declarations":[{"prop":"width","value":"400px","important":false},{"prop":"background","value":"#ffffff","important":false},{"prop":"border","value":"3px solid var(--brand)","important":false},{"prop":"border-radius","value":"4px","important":false}],"specificity":[1,0,0],"order":31,"isHover":false,"matchSelector":null},{"selector":"#pass-oklch-neutral-right-divider","declarations":[{"prop":"width","value":"400px","important":false},{"prop":"background","value":"#ffffff","important":false},{"prop":"border-radius","value":"4px","important":false},{"prop":"border-right","value":"1px solid oklch(92%0 0/0.12)","important":false}],"specificity":[1,0,0],"order":32,"isHover":false,"matchSelector":null}],"unwrapped":"\n /* Two-column fixture: left col = should-flag, right col = should-pass.\n The side-tab snippet doesn't embed identifying text, so the test\n asserts finding counts against the structural ids (#flag-N / #pass-N)\n by reading the element via data attributes in the check path. Since\n that isn't available to the Node fixture runner, we instead place a\n unique number of FLAG elements (each a distinct side-tab) and verify\n the side-tab count. */\n\n /* CSS custom properties — variables used by the var()-case fixtures.\n jsdom's CSSOM drops any border shorthand containing var(), which used\n to make every side-tab built with CSS variables invisible to the\n detector. These cases regression-test the fallback pass that parses\n border shorthands directly off the rule (not the computed style). */\n :root {\n --brand: #87a8ff;\n --warn: #8a6a2f;\n --terracotta: #aa674d;\n --line: #e5e7eb; /* neutral gray — must NOT trigger */\n --rule: #f3f4f6; /* near-white — must NOT trigger */\n }\n\n body { font-family: system-ui, sans-serif; margin: 0; padding: 24px; background: #fafafa; }\n .grid { display: grid; grid-template-columns: 1fr 1fr; gap: 32px; max-width: 1120px; margin: 0 auto; }\n .col h2 { font-size: 14px; text-transform: uppercase; letter-spacing: 0.05em; margin: 0 0 16px; color: #475569; }\n .case { padding: 12px 16px; margin-bottom: 16px; }\n .case h3 { font-size: 14px; margin: 0 0 4px; }\n .case p { font-size: 13px; margin: 0; color: #64748b; }\n\n /* ── FLAG cases: colored side-tab borders using modern color formats ── */\n\n /* 1: oklch border-left + border-radius (the canonical real-page bug) */\n #flag-oklch-1 {\n width: 400px;\n background: oklch(100% 0 0);\n border-radius: 4px;\n border-left: 3px solid oklch(65% 0.12 250);\n }\n\n /* 2: oklch mixed — neutral 1px border all around + colored 4px left +\n border-radius (mirrors .medication-card from the reproducer) */\n #flag-oklch-2 {\n width: 400px;\n background: oklch(100% 0 0);\n border: 1px solid oklch(80% 0.05 250);\n border-left: 4px solid oklch(75% 0.15 45);\n border-radius: 4px;\n }\n\n /* 3: oklch alert pattern — colored 4px border-left + border-radius */\n #flag-oklch-3 {\n width: 400px;\n background: oklch(98% 0.01 60);\n border-left: 4px solid oklch(75% 0.18 45);\n border-radius: 4px;\n }\n\n /* 4: oklab border-left + border-radius */\n #flag-oklab-1 {\n width: 400px;\n background: #ffffff;\n border-radius: 6px;\n border-left: 4px solid oklab(60% 0.1 0.15);\n }\n\n /* 5: lch border-left + border-radius */\n #flag-lch-1 {\n width: 400px;\n background: #ffffff;\n border-radius: 6px;\n border-left: 4px solid lch(55% 60 250);\n }\n\n /* 6: lab border-left + border-radius */\n #flag-lab-1 {\n width: 400px;\n background: #ffffff;\n border-radius: 6px;\n border-left: 4px solid lab(50% 40 -30);\n }\n\n /* 7: card-shaped <label> with colored oklch side border + radius\n (the checklist-item pattern from preop-portal reproducer) */\n label#flag-label-oklch {\n display: grid;\n grid-template-columns: auto 1fr;\n width: 400px;\n padding: 16px;\n background: oklch(100% 0 0);\n border-radius: 4px;\n border-left: 3px solid oklch(65% 0.12 250);\n cursor: pointer;\n }\n\n /* 8: card-shaped <label> with colored rgb side border + radius —\n proves the fix is not oklch-specific */\n label#flag-label-rgb {\n display: block;\n width: 400px;\n padding: 16px;\n background: #ffffff;\n border-radius: 6px;\n border-left: 4px solid #3b82f6;\n cursor: pointer;\n }\n\n /* 9: CSS variable in shorthand — the canonical real-page pattern from\n evals (e.g. 09-physics-study: border-left:8px solid var(--brand-2)).\n jsdom silently drops this entire declaration, so the computed-style\n path used to miss it. */\n #flag-var-shorthand {\n width: 400px;\n background: #ffffff;\n border-radius: 4px;\n border-left: 5px solid var(--brand);\n }\n\n /* 10: CSS variable + neutral 1px all-around border — mirrors the\n medication-card pattern with a colored accent on the left. */\n #flag-var-mixed {\n width: 400px;\n background: #ffffff;\n border: 1px solid var(--line);\n border-left: 4px solid var(--warn);\n border-radius: 4px;\n }\n\n /* 11: CSS variable shorthand, right side. Ensures the fallback works\n for both inline axes, not just border-left. */\n #flag-var-right {\n width: 400px;\n background: #ffffff;\n border-radius: 4px;\n border-right: 4px solid var(--terracotta);\n }\n\n /* 12: card-shaped <label> with var() side border + radius —\n the checklist-row shape, built with tokens. */\n label#flag-label-var {\n display: block;\n width: 400px;\n padding: 16px;\n background: #ffffff;\n border-radius: 6px;\n border-left: 4px solid var(--brand);\n cursor: pointer;\n }\n\n /* ── PASS cases: legitimate or neutral borders, must NOT fire ── */\n\n /* 1: oklch chroma ~0 — true neutral gray border should not fire */\n #pass-oklch-neutral {\n width: 400px;\n background: #ffffff;\n border-radius: 4px;\n border-left: 3px solid oklch(80% 0 0);\n }\n\n /* 2: oklch low chroma (0.01) — still perceptually neutral */\n #pass-oklch-nearneutral {\n width: 400px;\n background: #ffffff;\n border-radius: 4px;\n border-left: 3px solid oklch(75% 0.01 250);\n }\n\n /* 3: oklch colored border all around (not one-sided) — no side-tab */\n #pass-oklch-allsides {\n width: 400px;\n background: #ffffff;\n border: 3px solid oklch(65% 0.12 250);\n border-radius: 4px;\n }\n\n /* 4: oklch colored 1px border-left (too thin to qualify) */\n #pass-oklch-thin {\n width: 400px;\n background: #ffffff;\n border-radius: 4px;\n border-left: 1px solid oklch(65% 0.12 250);\n }\n\n /* 5: lab neutral (chroma near zero) — must not fire */\n #pass-lab-neutral {\n width: 400px;\n background: #ffffff;\n border-radius: 4px;\n border-left: 3px solid lab(50% 0 0);\n }\n\n /* 6: lch neutral (chroma 0) */\n #pass-lch-neutral {\n width: 400px;\n background: #ffffff;\n border-radius: 4px;\n border-left: 3px solid lch(50% 0 0);\n }\n\n /* 7: plain inline form label — no border, no padding, no radius.\n Must NOT be flagged for anything. */\n label#pass-label-plain {\n font-size: 14px;\n font-weight: 500;\n color: #374151;\n }\n\n /* 8: form label with a small neutral gray left border — neutral color\n should not fire the colored side-tab rule. */\n label#pass-label-neutral-border {\n display: block;\n width: 400px;\n padding: 8px;\n background: #ffffff;\n border-radius: 4px;\n border-left: 3px solid #e5e7eb;\n }\n\n /* 9: inline label inside a form row — default inline layout,\n no borders, must not fire. */\n label#pass-label-inline {\n font-size: 13px;\n color: #6b7280;\n margin-right: 8px;\n }\n\n /* 10: label with 1px colored left border — too thin to qualify\n (matches the existing 1px thin rule for divs). */\n label#pass-label-thin {\n display: block;\n width: 400px;\n padding: 8px;\n background: #ffffff;\n border-radius: 4px;\n border-left: 1px solid #3b82f6;\n }\n\n /* 11: CSS variable resolving to a neutral gray — must NOT fire,\n even though the border shorthand contains var(). */\n #pass-var-neutral {\n width: 400px;\n background: #ffffff;\n border-radius: 4px;\n border-left: 3px solid var(--line);\n }\n\n /* 12: thin (1px) var-based left border — under the side-tab width\n threshold even when resolved. */\n #pass-var-thin {\n width: 400px;\n background: #ffffff;\n border-radius: 4px;\n border-left: 1px solid var(--brand);\n }\n\n /* 13: var-based uniform border on all four sides. Not a side-tab. */\n #pass-var-allsides {\n width: 400px;\n background: #ffffff;\n border: 3px solid var(--brand);\n border-radius: 4px;\n }\n\n /* 14: neutral 1px oklch right divider — context-bar hairline, not a side-tab. */\n #pass-oklch-neutral-right-divider {\n width: 400px;\n background: #ffffff;\n border-radius: 4px;\n border-right: 1px solid oklch(92% 0 0 / 0.12);\n }\n "},{"name":"tests/fixtures/antipatterns/motion.html","css":"\n /* ─── Two-column fixture convention ─────────────────────────────\n Left column = should flag. Right column = should pass.\n Tests assert (a) every flag-column rule fires and (b) the total\n finding count matches the number of flag cases (no false\n positives leaking from the pass column).\n ──────────────────────────────────────────────────────────── */\n body { font-family: system-ui, sans-serif; background: #f9fafb; padding: 24px; margin: 0; }\n .grid { display: grid; grid-template-columns: 1fr 1fr; gap: 32px; max-width: 1200px; margin: 0 auto; }\n .col h2 { font-size: 14px; text-transform: uppercase; letter-spacing: 0.05em; margin: 0 0 16px; color: #475569; }\n .col h3 { font-size: 11px; text-transform: uppercase; letter-spacing: 0.05em; margin: 24px 0 8px; color: #64748b; }\n .demo { padding: 14px 16px; background: white; border-radius: 8px; box-shadow: 0 1px 3px rgba(0,0,0,0.08); margin-bottom: 10px; }\n .demo h4 { font-weight: 600; font-size: 13px; margin: 0; }\n .demo p { font-size: 12px; color: #6b7280; margin: 4px 0 0; }\n\n /* ── FLAG: bounce / elastic easing ── */\n @keyframes bounce-keyframe {\n 0%, 100% { transform: translateY(0); }\n 50% { transform: translateY(-10px); }\n }\n .bounce-animation { animation: bounce-keyframe 1s infinite; }\n .elastic-transition { transition: transform 0.5s cubic-bezier(0.68, -0.55, 0.265, 1.55); }\n\n /* ── FLAG: layout property transitions ── */\n .width-transition { transition: width 0.3s ease; }\n .height-transition { transition: height 0.4s ease-out; }\n .padding-transition { transition: padding 0.2s linear; }\n .margin-transition { transition: margin 0.3s ease-in; }\n .max-height-transition { transition: max-height 0.5s ease; }\n .multi-layout-transition { transition: width 0.3s ease, height 0.3s ease; }\n .mixed-transition { transition: width 0.3s ease, opacity 0.3s ease; }\n .transition-property-width { transition-property: width; transition-duration: 0.3s; }\n\n /* ── PASS: good easing ── */\n @keyframes fade-in-keyframe {\n from { opacity: 0; transform: translateY(8px); }\n to { opacity: 1; transform: translateY(0); }\n }\n .fade-in-good { animation: fade-in-keyframe 0.4s cubic-bezier(0.16, 1, 0.3, 1); }\n .ease-out-quart { transition: transform 0.4s cubic-bezier(0.25, 1, 0.5, 1); }\n .ease-out-expo { transition: transform 0.5s cubic-bezier(0.16, 1, 0.3, 1); }\n\n /* ── PASS: safe transitions ── */\n .transform-transition { transition: transform 0.3s ease-out; }\n .opacity-transition { transition: opacity 0.2s ease; }\n .color-transition { transition: color 0.15s ease, background-color 0.15s ease; }\n .shadow-transition { transition: box-shadow 0.2s ease; }\n .all-transition { transition: all 0.3s ease; }\n .multi-safe-transition { transition: transform 0.3s ease, opacity 0.3s ease, box-shadow 0.2s ease; }\n ","rules":[{"selector":"body","declarations":[{"prop":"font-family","value":"system-ui,sans-serif","important":false},{"prop":"background","value":"#f9fafb","important":false},{"prop":"padding","value":"24px","important":false},{"prop":"margin","value":"0","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":".grid","declarations":[{"prop":"display","value":"grid","important":false},{"prop":"grid-template-columns","value":"1fr 1fr","important":false},{"prop":"gap","value":"32px","important":false},{"prop":"max-width","value":"1200px","important":false},{"prop":"margin","value":"0 auto","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null},{"selector":".col h2","declarations":[{"prop":"font-size","value":"14px","important":false},{"prop":"text-transform","value":"uppercase","important":false},{"prop":"letter-spacing","value":"0.05em","important":false},{"prop":"margin","value":"0 0 16px","important":false},{"prop":"color","value":"#475569","important":false}],"specificity":[0,1,1],"order":2,"isHover":false,"matchSelector":null},{"selector":".col h3","declarations":[{"prop":"font-size","value":"11px","important":false},{"prop":"text-transform","value":"uppercase","important":false},{"prop":"letter-spacing","value":"0.05em","important":false},{"prop":"margin","value":"24px 0 8px","important":false},{"prop":"color","value":"#64748b","important":false}],"specificity":[0,1,1],"order":3,"isHover":false,"matchSelector":null},{"selector":".demo","declarations":[{"prop":"padding","value":"14px 16px","important":false},{"prop":"background","value":"white","important":false},{"prop":"border-radius","value":"8px","important":false},{"prop":"box-shadow","value":"0 1px 3px rgba(0,0,0,0.08)","important":false},{"prop":"margin-bottom","value":"10px","important":false}],"specificity":[0,1,0],"order":4,"isHover":false,"matchSelector":null},{"selector":".demo h4","declarations":[{"prop":"font-weight","value":"600","important":false},{"prop":"font-size","value":"13px","important":false},{"prop":"margin","value":"0","important":false}],"specificity":[0,1,1],"order":5,"isHover":false,"matchSelector":null},{"selector":".demo p","declarations":[{"prop":"font-size","value":"12px","important":false},{"prop":"color","value":"#6b7280","important":false},{"prop":"margin","value":"4px 0 0","important":false}],"specificity":[0,1,1],"order":6,"isHover":false,"matchSelector":null},{"selector":".bounce-animation","declarations":[{"prop":"animation","value":"bounce-keyframe 1s infinite","important":false}],"specificity":[0,1,0],"order":7,"isHover":false,"matchSelector":null},{"selector":".elastic-transition","declarations":[{"prop":"transition","value":"transform 0.5s cubic-bezier(0.68,-0.55,0.265,1.55)","important":false}],"specificity":[0,1,0],"order":8,"isHover":false,"matchSelector":null},{"selector":".width-transition","declarations":[{"prop":"transition","value":"width 0.3s ease","important":false}],"specificity":[0,1,0],"order":9,"isHover":false,"matchSelector":null},{"selector":".height-transition","declarations":[{"prop":"transition","value":"height 0.4s ease-out","important":false}],"specificity":[0,1,0],"order":10,"isHover":false,"matchSelector":null},{"selector":".padding-transition","declarations":[{"prop":"transition","value":"padding 0.2s linear","important":false}],"specificity":[0,1,0],"order":11,"isHover":false,"matchSelector":null},{"selector":".margin-transition","declarations":[{"prop":"transition","value":"margin 0.3s ease-in","important":false}],"specificity":[0,1,0],"order":12,"isHover":false,"matchSelector":null},{"selector":".max-height-transition","declarations":[{"prop":"transition","value":"max-height 0.5s ease","important":false}],"specificity":[0,1,0],"order":13,"isHover":false,"matchSelector":null},{"selector":".multi-layout-transition","declarations":[{"prop":"transition","value":"width 0.3s ease,height 0.3s ease","important":false}],"specificity":[0,1,0],"order":14,"isHover":false,"matchSelector":null},{"selector":".mixed-transition","declarations":[{"prop":"transition","value":"width 0.3s ease,opacity 0.3s ease","important":false}],"specificity":[0,1,0],"order":15,"isHover":false,"matchSelector":null},{"selector":".transition-property-width","declarations":[{"prop":"transition-property","value":"width","important":false},{"prop":"transition-duration","value":"0.3s","important":false}],"specificity":[0,1,0],"order":16,"isHover":false,"matchSelector":null},{"selector":".fade-in-good","declarations":[{"prop":"animation","value":"fade-in-keyframe 0.4s cubic-bezier(0.16,1,0.3,1)","important":false}],"specificity":[0,1,0],"order":17,"isHover":false,"matchSelector":null},{"selector":".ease-out-quart","declarations":[{"prop":"transition","value":"transform 0.4s cubic-bezier(0.25,1,0.5,1)","important":false}],"specificity":[0,1,0],"order":18,"isHover":false,"matchSelector":null},{"selector":".ease-out-expo","declarations":[{"prop":"transition","value":"transform 0.5s cubic-bezier(0.16,1,0.3,1)","important":false}],"specificity":[0,1,0],"order":19,"isHover":false,"matchSelector":null},{"selector":".transform-transition","declarations":[{"prop":"transition","value":"transform 0.3s ease-out","important":false}],"specificity":[0,1,0],"order":20,"isHover":false,"matchSelector":null},{"selector":".opacity-transition","declarations":[{"prop":"transition","value":"opacity 0.2s ease","important":false}],"specificity":[0,1,0],"order":21,"isHover":false,"matchSelector":null},{"selector":".color-transition","declarations":[{"prop":"transition","value":"color 0.15s ease,background-color 0.15s ease","important":false}],"specificity":[0,1,0],"order":22,"isHover":false,"matchSelector":null},{"selector":".shadow-transition","declarations":[{"prop":"transition","value":"box-shadow 0.2s ease","important":false}],"specificity":[0,1,0],"order":23,"isHover":false,"matchSelector":null},{"selector":".all-transition","declarations":[{"prop":"transition","value":"all 0.3s ease","important":false}],"specificity":[0,1,0],"order":24,"isHover":false,"matchSelector":null},{"selector":".multi-safe-transition","declarations":[{"prop":"transition","value":"transform 0.3s ease,opacity 0.3s ease,box-shadow 0.2s ease","important":false}],"specificity":[0,1,0],"order":25,"isHover":false,"matchSelector":null}],"unwrapped":"\n /* ─── Two-column fixture convention ─────────────────────────────\n Left column = should flag. Right column = should pass.\n Tests assert (a) every flag-column rule fires and (b) the total\n finding count matches the number of flag cases (no false\n positives leaking from the pass column).\n ──────────────────────────────────────────────────────────── */\n body { font-family: system-ui, sans-serif; background: #f9fafb; padding: 24px; margin: 0; }\n .grid { display: grid; grid-template-columns: 1fr 1fr; gap: 32px; max-width: 1200px; margin: 0 auto; }\n .col h2 { font-size: 14px; text-transform: uppercase; letter-spacing: 0.05em; margin: 0 0 16px; color: #475569; }\n .col h3 { font-size: 11px; text-transform: uppercase; letter-spacing: 0.05em; margin: 24px 0 8px; color: #64748b; }\n .demo { padding: 14px 16px; background: white; border-radius: 8px; box-shadow: 0 1px 3px rgba(0,0,0,0.08); margin-bottom: 10px; }\n .demo h4 { font-weight: 600; font-size: 13px; margin: 0; }\n .demo p { font-size: 12px; color: #6b7280; margin: 4px 0 0; }\n\n /* ── FLAG: bounce / elastic easing ── */\n @keyframes bounce-keyframe {\n 0%, 100% { transform: translateY(0); }\n 50% { transform: translateY(-10px); }\n }\n .bounce-animation { animation: bounce-keyframe 1s infinite; }\n .elastic-transition { transition: transform 0.5s cubic-bezier(0.68, -0.55, 0.265, 1.55); }\n\n /* ── FLAG: layout property transitions ── */\n .width-transition { transition: width 0.3s ease; }\n .height-transition { transition: height 0.4s ease-out; }\n .padding-transition { transition: padding 0.2s linear; }\n .margin-transition { transition: margin 0.3s ease-in; }\n .max-height-transition { transition: max-height 0.5s ease; }\n .multi-layout-transition { transition: width 0.3s ease, height 0.3s ease; }\n .mixed-transition { transition: width 0.3s ease, opacity 0.3s ease; }\n .transition-property-width { transition-property: width; transition-duration: 0.3s; }\n\n /* ── PASS: good easing ── */\n @keyframes fade-in-keyframe {\n from { opacity: 0; transform: translateY(8px); }\n to { opacity: 1; transform: translateY(0); }\n }\n .fade-in-good { animation: fade-in-keyframe 0.4s cubic-bezier(0.16, 1, 0.3, 1); }\n .ease-out-quart { transition: transform 0.4s cubic-bezier(0.25, 1, 0.5, 1); }\n .ease-out-expo { transition: transform 0.5s cubic-bezier(0.16, 1, 0.3, 1); }\n\n /* ── PASS: safe transitions ── */\n .transform-transition { transition: transform 0.3s ease-out; }\n .opacity-transition { transition: opacity 0.2s ease; }\n .color-transition { transition: color 0.15s ease, background-color 0.15s ease; }\n .shadow-transition { transition: box-shadow 0.2s ease; }\n .all-transition { transition: all 0.3s ease; }\n .multi-safe-transition { transition: transform 0.3s ease, opacity 0.3s ease, box-shadow 0.2s ease; }\n "},{"name":"tests/fixtures/antipatterns/multifile/styles.css","css":"/* Global styles with anti-patterns */\nbody {\n font-family: 'Inter', sans-serif;\n background-color: #000000;\n}\n\n.highlight {\n animation: bounce 0.5s ease-in-out;\n}\n","rules":[{"selector":"body","declarations":[{"prop":"font-family","value":"\"Inter\",sans-serif","important":false},{"prop":"background-color","value":"#000000","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":".highlight","declarations":[{"prop":"animation","value":"bounce 0.5s ease-in-out","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null}],"unwrapped":"/* Global styles with anti-patterns */\nbody {\n font-family: 'Inter', sans-serif;\n background-color: #000000;\n}\n\n.highlight {\n animation: bounce 0.5s ease-in-out;\n}\n"},{"name":"tests/fixtures/antipatterns/named-color-borders.html","css":"\n /* Two-column fixture: left col = should-flag, right col = should-pass.\n Regression for issue #359: `border-left: 4px solid purple` in a .html\n file never fired side-tab because the static cascade's shorthand color\n extraction only recognized 9 named colors — every other spec name\n (purple, rebeccapurple, crimson, teal, ...) was dropped from the\n shorthand, leaving the side at the default black, which reads as\n neutral and silently skips the check. The same declaration in a .css\n file was flagged by the regex engine, so the two engines disagreed. */\n\n :root {\n --accent: orange; /* named color behind a var() — must resolve and flag */\n }\n\n body { font-family: system-ui, sans-serif; margin: 0; padding: 24px; background: #fafafa; }\n .grid { display: grid; grid-template-columns: 1fr 1fr; gap: 32px; max-width: 1120px; margin: 0 auto; }\n .col h2 { font-size: 14px; text-transform: uppercase; letter-spacing: 0.05em; margin: 0 0 16px; color: #475569; }\n .case { padding: 12px 16px; margin-bottom: 16px; }\n .case h3 { font-size: 14px; margin: 0 0 4px; }\n .case p { font-size: 13px; margin: 0; color: #64748b; }\n\n /* ── FLAG cases: colored side-tab borders using CSS named colors ── */\n\n /* 1: the exact reproducer from issue #359 — named purple in a <style>\n rule with background + padding + radius */\n #flag-named-purple {\n width: 400px;\n background: #f6f6f6;\n padding: 16px;\n border-left: 4px solid purple;\n border-radius: 8px;\n }\n\n /* 2: rebeccapurple — a longer name that contains another color name\n (\"purple\") as a substring; must match whole-token. Width 5px so the\n finding snippet is unique to this case. */\n #flag-named-rebecca {\n width: 400px;\n background: #ffffff;\n border-radius: 4px;\n border-left: 5px solid rebeccapurple;\n }\n\n /* 3: horizontal stripe variant — named crimson riding the top edge */\n #flag-named-crimson-top {\n width: 400px;\n background: #ffffff;\n border-top: 4px solid crimson;\n }\n\n /* 4: named teal, 3px, no radius — the bare w >= 3 arm */\n #flag-named-teal {\n width: 400px;\n background: #ffffff;\n border-left: 3px solid teal;\n }\n\n /* 5: named color behind a var() in the shorthand. Width 6px so the\n finding snippet is unique to this case. */\n #flag-named-var {\n width: 400px;\n background: #ffffff;\n border-radius: 4px;\n border-left: 6px solid var(--accent);\n }\n\n /* ── PASS cases: neutral named colors and non-side-tab shapes ── */\n\n /* 1: dimgray — chromatic-looking name, neutral value; must NOT fire */\n #pass-named-dimgray {\n width: 400px;\n background: #ffffff;\n border-radius: 4px;\n border-left: 4px solid dimgray;\n }\n\n /* 2: gainsboro — light neutral named color */\n #pass-named-gainsboro {\n width: 400px;\n background: #ffffff;\n border-radius: 4px;\n border-left: 3px solid gainsboro;\n }\n\n /* 3: named black side border — neutral, not a colored stripe */\n #pass-named-black {\n width: 400px;\n background: #ffffff;\n border-radius: 4px;\n border-left: 4px solid black;\n }\n\n /* 4: 1px named purple — too thin to qualify */\n #pass-named-thin {\n width: 400px;\n background: #ffffff;\n border-radius: 4px;\n border-left: 1px solid purple;\n }\n\n /* 5: uniform named purple border on all four sides — not a side-tab */\n #pass-named-allsides {\n width: 400px;\n background: #ffffff;\n border: 3px solid purple;\n border-radius: 4px;\n }\n ","rules":[{"selector":":root","declarations":[{"prop":"--accent","value":"orange","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null},{"selector":"body","declarations":[{"prop":"font-family","value":"system-ui,sans-serif","important":false},{"prop":"margin","value":"0","important":false},{"prop":"padding","value":"24px","important":false},{"prop":"background","value":"#fafafa","important":false}],"specificity":[0,0,1],"order":1,"isHover":false,"matchSelector":null},{"selector":".grid","declarations":[{"prop":"display","value":"grid","important":false},{"prop":"grid-template-columns","value":"1fr 1fr","important":false},{"prop":"gap","value":"32px","important":false},{"prop":"max-width","value":"1120px","important":false},{"prop":"margin","value":"0 auto","important":false}],"specificity":[0,1,0],"order":2,"isHover":false,"matchSelector":null},{"selector":".col h2","declarations":[{"prop":"font-size","value":"14px","important":false},{"prop":"text-transform","value":"uppercase","important":false},{"prop":"letter-spacing","value":"0.05em","important":false},{"prop":"margin","value":"0 0 16px","important":false},{"prop":"color","value":"#475569","important":false}],"specificity":[0,1,1],"order":3,"isHover":false,"matchSelector":null},{"selector":".case","declarations":[{"prop":"padding","value":"12px 16px","important":false},{"prop":"margin-bottom","value":"16px","important":false}],"specificity":[0,1,0],"order":4,"isHover":false,"matchSelector":null},{"selector":".case h3","declarations":[{"prop":"font-size","value":"14px","important":false},{"prop":"margin","value":"0 0 4px","important":false}],"specificity":[0,1,1],"order":5,"isHover":false,"matchSelector":null},{"selector":".case p","declarations":[{"prop":"font-size","value":"13px","important":false},{"prop":"margin","value":"0","important":false},{"prop":"color","value":"#64748b","important":false}],"specificity":[0,1,1],"order":6,"isHover":false,"matchSelector":null},{"selector":"#flag-named-purple","declarations":[{"prop":"width","value":"400px","important":false},{"prop":"background","value":"#f6f6f6","important":false},{"prop":"padding","value":"16px","important":false},{"prop":"border-left","value":"4px solid purple","important":false},{"prop":"border-radius","value":"8px","important":false}],"specificity":[1,0,0],"order":7,"isHover":false,"matchSelector":null},{"selector":"#flag-named-rebecca","declarations":[{"prop":"width","value":"400px","important":false},{"prop":"background","value":"#ffffff","important":false},{"prop":"border-radius","value":"4px","important":false},{"prop":"border-left","value":"5px solid rebeccapurple","important":false}],"specificity":[1,0,0],"order":8,"isHover":false,"matchSelector":null},{"selector":"#flag-named-crimson-top","declarations":[{"prop":"width","value":"400px","important":false},{"prop":"background","value":"#ffffff","important":false},{"prop":"border-top","value":"4px solid crimson","important":false}],"specificity":[1,0,0],"order":9,"isHover":false,"matchSelector":null},{"selector":"#flag-named-teal","declarations":[{"prop":"width","value":"400px","important":false},{"prop":"background","value":"#ffffff","important":false},{"prop":"border-left","value":"3px solid teal","important":false}],"specificity":[1,0,0],"order":10,"isHover":false,"matchSelector":null},{"selector":"#flag-named-var","declarations":[{"prop":"width","value":"400px","important":false},{"prop":"background","value":"#ffffff","important":false},{"prop":"border-radius","value":"4px","important":false},{"prop":"border-left","value":"6px solid var(--accent)","important":false}],"specificity":[1,0,0],"order":11,"isHover":false,"matchSelector":null},{"selector":"#pass-named-dimgray","declarations":[{"prop":"width","value":"400px","important":false},{"prop":"background","value":"#ffffff","important":false},{"prop":"border-radius","value":"4px","important":false},{"prop":"border-left","value":"4px solid dimgray","important":false}],"specificity":[1,0,0],"order":12,"isHover":false,"matchSelector":null},{"selector":"#pass-named-gainsboro","declarations":[{"prop":"width","value":"400px","important":false},{"prop":"background","value":"#ffffff","important":false},{"prop":"border-radius","value":"4px","important":false},{"prop":"border-left","value":"3px solid gainsboro","important":false}],"specificity":[1,0,0],"order":13,"isHover":false,"matchSelector":null},{"selector":"#pass-named-black","declarations":[{"prop":"width","value":"400px","important":false},{"prop":"background","value":"#ffffff","important":false},{"prop":"border-radius","value":"4px","important":false},{"prop":"border-left","value":"4px solid black","important":false}],"specificity":[1,0,0],"order":14,"isHover":false,"matchSelector":null},{"selector":"#pass-named-thin","declarations":[{"prop":"width","value":"400px","important":false},{"prop":"background","value":"#ffffff","important":false},{"prop":"border-radius","value":"4px","important":false},{"prop":"border-left","value":"1px solid purple","important":false}],"specificity":[1,0,0],"order":15,"isHover":false,"matchSelector":null},{"selector":"#pass-named-allsides","declarations":[{"prop":"width","value":"400px","important":false},{"prop":"background","value":"#ffffff","important":false},{"prop":"border","value":"3px solid purple","important":false},{"prop":"border-radius","value":"4px","important":false}],"specificity":[1,0,0],"order":16,"isHover":false,"matchSelector":null}],"unwrapped":"\n /* Two-column fixture: left col = should-flag, right col = should-pass.\n Regression for issue #359: `border-left: 4px solid purple` in a .html\n file never fired side-tab because the static cascade's shorthand color\n extraction only recognized 9 named colors — every other spec name\n (purple, rebeccapurple, crimson, teal, ...) was dropped from the\n shorthand, leaving the side at the default black, which reads as\n neutral and silently skips the check. The same declaration in a .css\n file was flagged by the regex engine, so the two engines disagreed. */\n\n :root {\n --accent: orange; /* named color behind a var() — must resolve and flag */\n }\n\n body { font-family: system-ui, sans-serif; margin: 0; padding: 24px; background: #fafafa; }\n .grid { display: grid; grid-template-columns: 1fr 1fr; gap: 32px; max-width: 1120px; margin: 0 auto; }\n .col h2 { font-size: 14px; text-transform: uppercase; letter-spacing: 0.05em; margin: 0 0 16px; color: #475569; }\n .case { padding: 12px 16px; margin-bottom: 16px; }\n .case h3 { font-size: 14px; margin: 0 0 4px; }\n .case p { font-size: 13px; margin: 0; color: #64748b; }\n\n /* ── FLAG cases: colored side-tab borders using CSS named colors ── */\n\n /* 1: the exact reproducer from issue #359 — named purple in a <style>\n rule with background + padding + radius */\n #flag-named-purple {\n width: 400px;\n background: #f6f6f6;\n padding: 16px;\n border-left: 4px solid purple;\n border-radius: 8px;\n }\n\n /* 2: rebeccapurple — a longer name that contains another color name\n (\"purple\") as a substring; must match whole-token. Width 5px so the\n finding snippet is unique to this case. */\n #flag-named-rebecca {\n width: 400px;\n background: #ffffff;\n border-radius: 4px;\n border-left: 5px solid rebeccapurple;\n }\n\n /* 3: horizontal stripe variant — named crimson riding the top edge */\n #flag-named-crimson-top {\n width: 400px;\n background: #ffffff;\n border-top: 4px solid crimson;\n }\n\n /* 4: named teal, 3px, no radius — the bare w >= 3 arm */\n #flag-named-teal {\n width: 400px;\n background: #ffffff;\n border-left: 3px solid teal;\n }\n\n /* 5: named color behind a var() in the shorthand. Width 6px so the\n finding snippet is unique to this case. */\n #flag-named-var {\n width: 400px;\n background: #ffffff;\n border-radius: 4px;\n border-left: 6px solid var(--accent);\n }\n\n /* ── PASS cases: neutral named colors and non-side-tab shapes ── */\n\n /* 1: dimgray — chromatic-looking name, neutral value; must NOT fire */\n #pass-named-dimgray {\n width: 400px;\n background: #ffffff;\n border-radius: 4px;\n border-left: 4px solid dimgray;\n }\n\n /* 2: gainsboro — light neutral named color */\n #pass-named-gainsboro {\n width: 400px;\n background: #ffffff;\n border-radius: 4px;\n border-left: 3px solid gainsboro;\n }\n\n /* 3: named black side border — neutral, not a colored stripe */\n #pass-named-black {\n width: 400px;\n background: #ffffff;\n border-radius: 4px;\n border-left: 4px solid black;\n }\n\n /* 4: 1px named purple — too thin to qualify */\n #pass-named-thin {\n width: 400px;\n background: #ffffff;\n border-radius: 4px;\n border-left: 1px solid purple;\n }\n\n /* 5: uniform named purple border on all four sides — not a side-tab */\n #pass-named-allsides {\n width: 400px;\n background: #ffffff;\n border: 3px solid purple;\n border-radius: 4px;\n }\n "},{"name":"tests/fixtures/antipatterns/nav-cta-constructions.html","css":"\n :root{\n --v3bg: #f0b64e;\n --v3fg: #cfd9e9;\n }\n body{ margin:0; font-family: Georgia, serif; color:#1c2430; background:#ffffff; }\n header{ display:flex; align-items:center; gap:2rem; padding:1rem 2rem; background:#12213a; }\n .nav{ display:flex; gap:1.5rem; align-items:center; }\n .nav a{ font-size:0.9rem; text-decoration:none; }\n .cta{ display:inline-block; padding:0.6em 1.1em; border-radius:6px; font-weight:600; }\n\n /* v1: solid bg + own low-contrast color, both on the button class */\n a.cta.v1{ background:#e8b84b; color:#c9d6ea; }\n\n /* v2: specificity cascade — .nav a (0,1,1) beats .v2 (0,1,0) for color */\n .nav a{ color:#b7c6de; }\n .v2{ background:#e5a93f; color:#26313f; }\n\n /* v3: var() indirection for both colors */\n a.cta.v3{ background:var(--v3bg); color:var(--v3fg); }\n\n /* v4: gradient background, low-contrast text against every stop */\n a.cta.v4{ background:linear-gradient(90deg,#f2b854,#e8a83e); color:#d3dcec; }\n\n /* v5: pseudo-element paints the surface; button itself transparent */\n a.cta.v5{ position:relative; background:transparent; color:#d0daea; }\n .v5::before{ content:\"\"; position:absolute; inset:0; border-radius:6px; background:#efb352; z-index:-1; }\n\n /* v6: color inherited from header, button only sets bg */\n header{ color:#ccd8ea; }\n .v6{ background:#eab04a; }\n\n /* v7: alpha-composited own bg over the dark header */\n a.cta.v7{ background:rgb(240 178 74 / 0.85); color:#d2dcec; }\n\n /* v8: oklch serialization for both sides */\n a.cta.v8{ background:oklch(0.82 0.15 75); color:oklch(0.80 0.05 258); }\n\n /* v9: background-image url only (no computable color) + low contrast vs header */\n a.cta.v9{ background-image:url(\"data:image/gif;base64,R0lGODlhAQABAIAAAP7uSwAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==\"); color:#d5deed; }\n","rules":[{"selector":":root","declarations":[{"prop":"--v3bg","value":"#f0b64e","important":false},{"prop":"--v3fg","value":"#cfd9e9","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null},{"selector":"body","declarations":[{"prop":"margin","value":"0","important":false},{"prop":"font-family","value":"Georgia,serif","important":false},{"prop":"color","value":"#1c2430","important":false},{"prop":"background","value":"#ffffff","important":false}],"specificity":[0,0,1],"order":1,"isHover":false,"matchSelector":null},{"selector":"header","declarations":[{"prop":"display","value":"flex","important":false},{"prop":"align-items","value":"center","important":false},{"prop":"gap","value":"2rem","important":false},{"prop":"padding","value":"1rem 2rem","important":false},{"prop":"background","value":"#12213a","important":false}],"specificity":[0,0,1],"order":2,"isHover":false,"matchSelector":null},{"selector":".nav","declarations":[{"prop":"display","value":"flex","important":false},{"prop":"gap","value":"1.5rem","important":false},{"prop":"align-items","value":"center","important":false}],"specificity":[0,1,0],"order":3,"isHover":false,"matchSelector":null},{"selector":".nav a","declarations":[{"prop":"font-size","value":"0.9rem","important":false},{"prop":"text-decoration","value":"none","important":false}],"specificity":[0,1,1],"order":4,"isHover":false,"matchSelector":null},{"selector":".cta","declarations":[{"prop":"display","value":"inline-block","important":false},{"prop":"padding","value":"0.6em 1.1em","important":false},{"prop":"border-radius","value":"6px","important":false},{"prop":"font-weight","value":"600","important":false}],"specificity":[0,1,0],"order":5,"isHover":false,"matchSelector":null},{"selector":"a.cta.v1","declarations":[{"prop":"background","value":"#e8b84b","important":false},{"prop":"color","value":"#c9d6ea","important":false}],"specificity":[0,2,1],"order":6,"isHover":false,"matchSelector":null},{"selector":".nav a","declarations":[{"prop":"color","value":"#b7c6de","important":false}],"specificity":[0,1,1],"order":7,"isHover":false,"matchSelector":null},{"selector":".v2","declarations":[{"prop":"background","value":"#e5a93f","important":false},{"prop":"color","value":"#26313f","important":false}],"specificity":[0,1,0],"order":8,"isHover":false,"matchSelector":null},{"selector":"a.cta.v3","declarations":[{"prop":"background","value":"var(--v3bg)","important":false},{"prop":"color","value":"var(--v3fg)","important":false}],"specificity":[0,2,1],"order":9,"isHover":false,"matchSelector":null},{"selector":"a.cta.v4","declarations":[{"prop":"background","value":"linear-gradient(90deg,#f2b854,#e8a83e)","important":false},{"prop":"color","value":"#d3dcec","important":false}],"specificity":[0,2,1],"order":10,"isHover":false,"matchSelector":null},{"selector":"a.cta.v5","declarations":[{"prop":"position","value":"relative","important":false},{"prop":"background","value":"transparent","important":false},{"prop":"color","value":"#d0daea","important":false}],"specificity":[0,2,1],"order":11,"isHover":false,"matchSelector":null},{"selector":".v5::before","declarations":[{"prop":"content","value":"\"\"","important":false},{"prop":"position","value":"absolute","important":false},{"prop":"inset","value":"0","important":false},{"prop":"border-radius","value":"6px","important":false},{"prop":"background","value":"#efb352","important":false},{"prop":"z-index","value":"-1","important":false}],"specificity":[0,2,0],"order":12,"isHover":false,"matchSelector":null},{"selector":"header","declarations":[{"prop":"color","value":"#ccd8ea","important":false}],"specificity":[0,0,1],"order":13,"isHover":false,"matchSelector":null},{"selector":".v6","declarations":[{"prop":"background","value":"#eab04a","important":false}],"specificity":[0,1,0],"order":14,"isHover":false,"matchSelector":null},{"selector":"a.cta.v7","declarations":[{"prop":"background","value":"rgb(240 178 74/0.85)","important":false},{"prop":"color","value":"#d2dcec","important":false}],"specificity":[0,2,1],"order":15,"isHover":false,"matchSelector":null},{"selector":"a.cta.v8","declarations":[{"prop":"background","value":"oklch(0.82 0.15 75)","important":false},{"prop":"color","value":"oklch(0.80 0.05 258)","important":false}],"specificity":[0,2,1],"order":16,"isHover":false,"matchSelector":null},{"selector":"a.cta.v9","declarations":[{"prop":"background-image","value":"url(data:image/gif;base64,R0lGODlhAQABAIAAAP7uSwAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==)","important":false},{"prop":"color","value":"#d5deed","important":false}],"specificity":[0,2,1],"order":17,"isHover":false,"matchSelector":null}],"unwrapped":"\n :root{\n --v3bg: #f0b64e;\n --v3fg: #cfd9e9;\n }\n body{ margin:0; font-family: Georgia, serif; color:#1c2430; background:#ffffff; }\n header{ display:flex; align-items:center; gap:2rem; padding:1rem 2rem; background:#12213a; }\n .nav{ display:flex; gap:1.5rem; align-items:center; }\n .nav a{ font-size:0.9rem; text-decoration:none; }\n .cta{ display:inline-block; padding:0.6em 1.1em; border-radius:6px; font-weight:600; }\n\n /* v1: solid bg + own low-contrast color, both on the button class */\n a.cta.v1{ background:#e8b84b; color:#c9d6ea; }\n\n /* v2: specificity cascade — .nav a (0,1,1) beats .v2 (0,1,0) for color */\n .nav a{ color:#b7c6de; }\n .v2{ background:#e5a93f; color:#26313f; }\n\n /* v3: var() indirection for both colors */\n a.cta.v3{ background:var(--v3bg); color:var(--v3fg); }\n\n /* v4: gradient background, low-contrast text against every stop */\n a.cta.v4{ background:linear-gradient(90deg,#f2b854,#e8a83e); color:#d3dcec; }\n\n /* v5: pseudo-element paints the surface; button itself transparent */\n a.cta.v5{ position:relative; background:transparent; color:#d0daea; }\n .v5::before{ content:\"\"; position:absolute; inset:0; border-radius:6px; background:#efb352; z-index:-1; }\n\n /* v6: color inherited from header, button only sets bg */\n header{ color:#ccd8ea; }\n .v6{ background:#eab04a; }\n\n /* v7: alpha-composited own bg over the dark header */\n a.cta.v7{ background:rgb(240 178 74 / 0.85); color:#d2dcec; }\n\n /* v8: oklch serialization for both sides */\n a.cta.v8{ background:oklch(0.82 0.15 75); color:oklch(0.80 0.05 258); }\n\n /* v9: background-image url only (no computable color) + low contrast vs header */\n a.cta.v9{ background-image:url(\"data:image/gif;base64,R0lGODlhAQABAIAAAP7uSwAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==\"); color:#d5deed; }\n"},{"name":"tests/fixtures/antipatterns/nonrendered-text.html","css":", <title>, <noscript>, and display:none /\n visibility:hidden blocks — reports a 10px computed size. Their JS / CSS /\n JSON-LD text satisfies hasDirectText, so before the fix they produced dozens\n of phantom \"10px body text\" findings on every Shopify page.\n\n Explicit pixel sizes throughout because jsdom does no layout.\n-->\n<html style=\"font-size: 10px\">\n<head>\n<meta charset=\"utf-8\">\n<!-- SHOULD PASS: a long <title> inherits the 10px root, but nothing renders it. -->\n<title>This is a fairly long document title that easily exceeds twenty characters</title>\n<!-- SHOULD PASS: stylesheet text is never painted. -->\n<style>\n /* This CSS comment is deliberately longer than twenty characters so the style\n element's text node clears the hasDirectText / textLen > 20 gate. */\n body { font-size: 10px; font-family: system-ui, sans-serif; }\n .rendered-body { font-size: 10px; }\n .rendered-nav-link { font-size: 9px; }\n .none-block { display: none; font-size: 10px; }\n .hidden-block { visibility: hidden; font-size: 10px; }\n","rules":[{"selector":"<title>","declarations":[{"prop":"font-size","value":"10px","important":false},{"prop":"font-family","value":"system-ui,sans-serif","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":"<noscript>","declarations":[{"prop":"font-size","value":"10px","important":false},{"prop":"font-family","value":"system-ui,sans-serif","important":false}],"specificity":[0,0,1],"order":1,"isHover":false,"matchSelector":null},{"selector":"and display:none /\n visibility:hidden blocks — reports a 10px computed size. Their JS / CSS /\n JSON-LD text satisfies hasDirectText","declarations":[{"prop":"font-size","value":"10px","important":false},{"prop":"font-family","value":"system-ui,sans-serif","important":false}],"specificity":[0,2,15],"order":2,"isHover":false,"matchSelector":null},{"selector":"so before the fix they produced dozens\n of phantom \"10px body text\" findings on every Shopify page.\n\n Explicit pixel sizes throughout because jsdom does no layout.\n-->\n<html style=\"font-size: 10px\">\n<head>\n<meta charset=\"utf-8\">\n<!-- SHOULD PASS: a long <title> inherits the 10px root","declarations":[{"prop":"font-size","value":"10px","important":false},{"prop":"font-family","value":"system-ui,sans-serif","important":false}],"specificity":[0,0,40],"order":3,"isHover":false,"matchSelector":null},{"selector":"but nothing renders it. -->\n<title>This is a fairly long document title that easily exceeds twenty characters</title>\n<!-- SHOULD PASS: stylesheet text is never painted. -->\n<style>\n /* This CSS comment is deliberately longer than twenty characters so the style\n element's text node clears the hasDirectText / textLen > 20 gate. */\n body","declarations":[{"prop":"font-size","value":"10px","important":false},{"prop":"font-family","value":"system-ui,sans-serif","important":false}],"specificity":[0,0,48],"order":4,"isHover":false,"matchSelector":null},{"selector":".rendered-body","declarations":[{"prop":"font-size","value":"10px","important":false}],"specificity":[0,1,0],"order":5,"isHover":false,"matchSelector":null},{"selector":".rendered-nav-link","declarations":[{"prop":"font-size","value":"9px","important":false}],"specificity":[0,1,0],"order":6,"isHover":false,"matchSelector":null},{"selector":".none-block","declarations":[{"prop":"display","value":"none","important":false},{"prop":"font-size","value":"10px","important":false}],"specificity":[0,1,0],"order":7,"isHover":false,"matchSelector":null},{"selector":".hidden-block","declarations":[{"prop":"visibility","value":"hidden","important":false},{"prop":"font-size","value":"10px","important":false}],"specificity":[0,1,0],"order":8,"isHover":false,"matchSelector":null}],"unwrapped":", <title>, <noscript>, and display:none /\n visibility:hidden blocks — reports a 10px computed size. Their JS / CSS /\n JSON-LD text satisfies hasDirectText, so before the fix they produced dozens\n of phantom \"10px body text\" findings on every Shopify page.\n\n Explicit pixel sizes throughout because jsdom does no layout.\n-->\n<html style=\"font-size: 10px\">\n<head>\n<meta charset=\"utf-8\">\n<!-- SHOULD PASS: a long <title> inherits the 10px root, but nothing renders it. -->\n<title>This is a fairly long document title that easily exceeds twenty characters</title>\n<!-- SHOULD PASS: stylesheet text is never painted. -->\n<style>\n /* This CSS comment is deliberately longer than twenty characters so the style\n element's text node clears the hasDirectText / textLen > 20 gate. */\n body { font-size: 10px; font-family: system-ui, sans-serif; }\n .rendered-body { font-size: 10px; }\n .rendered-nav-link { font-size: 9px; }\n .none-block { display: none; font-size: 10px; }\n .hidden-block { visibility: hidden; font-size: 10px; }\n"},{"name":"tests/fixtures/antipatterns/numbered-section-labels.html","css":"\n body {\n font-family: Georgia, serif;\n font-size: 16px;\n margin: 0;\n padding: 40px;\n background: #ffffff;\n color: #222222;\n }\n .column { width: 520px; padding: 20px; }\n h2 { font-size: 28px; margin: 0 0 12px; }\n h3 { font-size: 22px; margin: 0 0 10px; }\n section { margin-bottom: 48px; }\n\n /* ── flag column styles ── */\n .sec-index {\n font-family: monospace;\n font-size: 11px;\n font-weight: 700;\n color: #b45309;\n display: block;\n margin-bottom: 8px;\n }\n .sec-index-micro {\n font-family: monospace;\n font-size: 12px;\n font-weight: 700;\n letter-spacing: 2px;\n color: #b45309;\n display: block;\n margin-bottom: 8px;\n }\n\n /* ── pass column styles ── */\n .big-index {\n font-size: 16px;\n font-weight: 700;\n font-family: monospace;\n display: block;\n }\n .plain-note {\n font-size: 12px;\n font-weight: 400;\n letter-spacing: 0;\n color: #666666;\n display: block;\n }\n .step-label {\n font-family: monospace;\n font-size: 11px;\n font-weight: 700;\n display: block;\n }\n .card {\n border: 1px solid #d4d4d4;\n border-radius: 8px;\n padding: 16px;\n }\n ","rules":[{"selector":"body","declarations":[{"prop":"font-family","value":"Georgia,serif","important":false},{"prop":"font-size","value":"16px","important":false},{"prop":"margin","value":"0","important":false},{"prop":"padding","value":"40px","important":false},{"prop":"background","value":"#ffffff","important":false},{"prop":"color","value":"#222222","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":".column","declarations":[{"prop":"width","value":"520px","important":false},{"prop":"padding","value":"20px","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null},{"selector":"h2","declarations":[{"prop":"font-size","value":"28px","important":false},{"prop":"margin","value":"0 0 12px","important":false}],"specificity":[0,0,1],"order":2,"isHover":false,"matchSelector":null},{"selector":"h3","declarations":[{"prop":"font-size","value":"22px","important":false},{"prop":"margin","value":"0 0 10px","important":false}],"specificity":[0,0,1],"order":3,"isHover":false,"matchSelector":null},{"selector":"section","declarations":[{"prop":"margin-bottom","value":"48px","important":false}],"specificity":[0,0,1],"order":4,"isHover":false,"matchSelector":null},{"selector":".sec-index","declarations":[{"prop":"font-family","value":"monospace","important":false},{"prop":"font-size","value":"11px","important":false},{"prop":"font-weight","value":"700","important":false},{"prop":"color","value":"#b45309","important":false},{"prop":"display","value":"block","important":false},{"prop":"margin-bottom","value":"8px","important":false}],"specificity":[0,1,0],"order":5,"isHover":false,"matchSelector":null},{"selector":".sec-index-micro","declarations":[{"prop":"font-family","value":"monospace","important":false},{"prop":"font-size","value":"12px","important":false},{"prop":"font-weight","value":"700","important":false},{"prop":"letter-spacing","value":"2px","important":false},{"prop":"color","value":"#b45309","important":false},{"prop":"display","value":"block","important":false},{"prop":"margin-bottom","value":"8px","important":false}],"specificity":[0,1,0],"order":6,"isHover":false,"matchSelector":null},{"selector":".big-index","declarations":[{"prop":"font-size","value":"16px","important":false},{"prop":"font-weight","value":"700","important":false},{"prop":"font-family","value":"monospace","important":false},{"prop":"display","value":"block","important":false}],"specificity":[0,1,0],"order":7,"isHover":false,"matchSelector":null},{"selector":".plain-note","declarations":[{"prop":"font-size","value":"12px","important":false},{"prop":"font-weight","value":"400","important":false},{"prop":"letter-spacing","value":"0","important":false},{"prop":"color","value":"#666666","important":false},{"prop":"display","value":"block","important":false}],"specificity":[0,1,0],"order":8,"isHover":false,"matchSelector":null},{"selector":".step-label","declarations":[{"prop":"font-family","value":"monospace","important":false},{"prop":"font-size","value":"11px","important":false},{"prop":"font-weight","value":"700","important":false},{"prop":"display","value":"block","important":false}],"specificity":[0,1,0],"order":9,"isHover":false,"matchSelector":null},{"selector":".card","declarations":[{"prop":"border","value":"1px solid #d4d4d4","important":false},{"prop":"border-radius","value":"8px","important":false},{"prop":"padding","value":"16px","important":false}],"specificity":[0,1,0],"order":10,"isHover":false,"matchSelector":null}],"unwrapped":"\n body {\n font-family: Georgia, serif;\n font-size: 16px;\n margin: 0;\n padding: 40px;\n background: #ffffff;\n color: #222222;\n }\n .column { width: 520px; padding: 20px; }\n h2 { font-size: 28px; margin: 0 0 12px; }\n h3 { font-size: 22px; margin: 0 0 10px; }\n section { margin-bottom: 48px; }\n\n /* ── flag column styles ── */\n .sec-index {\n font-family: monospace;\n font-size: 11px;\n font-weight: 700;\n color: #b45309;\n display: block;\n margin-bottom: 8px;\n }\n .sec-index-micro {\n font-family: monospace;\n font-size: 12px;\n font-weight: 700;\n letter-spacing: 2px;\n color: #b45309;\n display: block;\n margin-bottom: 8px;\n }\n\n /* ── pass column styles ── */\n .big-index {\n font-size: 16px;\n font-weight: 700;\n font-family: monospace;\n display: block;\n }\n .plain-note {\n font-size: 12px;\n font-weight: 400;\n letter-spacing: 0;\n color: #666666;\n display: block;\n }\n .step-label {\n font-family: monospace;\n font-size: 11px;\n font-weight: 700;\n display: block;\n }\n .card {\n border: 1px solid #d4d4d4;\n border-radius: 8px;\n padding: 16px;\n }\n "},{"name":"tests/fixtures/antipatterns/numbered-section-markers.html","css":"\n .fixture-grid {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 32px;\n }\n .case {\n margin: 0 0 18px;\n padding: 16px;\n border: 1px solid #d7d0c2;\n border-radius: 8px;\n }\n .marker {\n display: block;\n font: 700 12px/1.1 ui-monospace, SFMono-Regular, Menlo, monospace;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n color: #7c5c00;\n }\n .code-like::before {\n content: \"01 02 03\";\n }\n ","rules":[{"selector":".fixture-grid","declarations":[{"prop":"display","value":"grid","important":false},{"prop":"grid-template-columns","value":"1fr 1fr","important":false},{"prop":"gap","value":"32px","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null},{"selector":".case","declarations":[{"prop":"margin","value":"0 0 18px","important":false},{"prop":"padding","value":"16px","important":false},{"prop":"border","value":"1px solid #d7d0c2","important":false},{"prop":"border-radius","value":"8px","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null},{"selector":".marker","declarations":[{"prop":"display","value":"block","important":false},{"prop":"font","value":"700 12px/1.1 ui-monospace,SFMono-Regular,Menlo,monospace","important":false},{"prop":"letter-spacing","value":"0.08em","important":false},{"prop":"text-transform","value":"uppercase","important":false},{"prop":"color","value":"#7c5c00","important":false}],"specificity":[0,1,0],"order":2,"isHover":false,"matchSelector":null},{"selector":".code-like::before","declarations":[{"prop":"content","value":"\"01 02 03\"","important":false}],"specificity":[0,2,0],"order":3,"isHover":false,"matchSelector":null}],"unwrapped":"\n .fixture-grid {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 32px;\n }\n .case {\n margin: 0 0 18px;\n padding: 16px;\n border: 1px solid #d7d0c2;\n border-radius: 8px;\n }\n .marker {\n display: block;\n font: 700 12px/1.1 ui-monospace, SFMono-Regular, Menlo, monospace;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n color: #7c5c00;\n }\n .code-like::before {\n content: \"01 02 03\";\n }\n "},{"name":"tests/fixtures/antipatterns/overlay-positioning.html","css":"\n body {\n font-family: system-ui, sans-serif;\n background: #f9fafb;\n padding: 2rem;\n max-width: 900px;\n margin: 0 auto;\n }\n h1 { font-size: 2rem; margin-bottom: 0.5rem; }\n h2 { font-size: 1.125rem; margin: 2.5rem 0 0.75rem; color: #6b7280; border-bottom: 1px solid #e5e7eb; padding-bottom: 0.5rem; }\n .scenario { margin-bottom: 2rem; padding: 1rem; border: 1px dashed #d1d5db; border-radius: 8px; }\n .scenario-label { font-size: 0.75rem; color: #6b7280; margin-bottom: 0.5rem; text-transform: uppercase; letter-spacing: 0.05em; }\n\n /* ============================================\n 1. TRANSFORM ANCESTOR\n position:absolute overlays on body use document coords,\n but getBoundingClientRect is viewport-relative.\n Transforms on ancestors create new stacking contexts.\n ============================================ */\n .transform-container {\n transform: translateY(0);\n padding: 1rem;\n background: #f3f4f6;\n border-radius: 8px;\n }\n .transform-rotate {\n transform: rotate(0deg);\n padding: 1rem;\n background: #f3f4f6;\n border-radius: 8px;\n }\n .transform-scale {\n transform: scale(1);\n padding: 1rem;\n background: #f3f4f6;\n border-radius: 8px;\n }\n .transform-nested-outer {\n transform: translateX(0);\n padding: 1rem;\n background: #e5e7eb;\n border-radius: 8px;\n }\n .transform-nested-inner {\n transform: translateY(0);\n padding: 1rem;\n background: #d1d5db;\n border-radius: 8px;\n }\n\n /* ============================================\n 2. CLOSED <details>\n Elements inside collapsed details may report\n a bounding rect but aren't visually present.\n ============================================ */\n details { margin-bottom: 1rem; }\n summary { cursor: pointer; font-weight: 600; }\n\n /* ============================================\n 3. STICKY / FIXED POSITIONING\n Sticky elements change their containing block\n behavior during scroll.\n ============================================ */\n .sticky-container {\n height: 200px;\n overflow-y: auto;\n border: 1px solid #d1d5db;\n border-radius: 8px;\n }\n .sticky-header {\n position: sticky;\n top: 0;\n background: #1f2937;\n color: white;\n padding: 0.5rem 1rem;\n z-index: 10;\n }\n .sticky-content {\n padding: 1rem;\n }\n\n /* ============================================\n 4. OVERFLOW HIDDEN\n Elements that extend beyond an overflow:hidden\n parent are visually clipped but still in the DOM.\n ============================================ */\n .overflow-hidden-container {\n overflow: hidden;\n height: 60px;\n border: 1px solid #d1d5db;\n border-radius: 8px;\n padding: 0.5rem 1rem;\n }\n\n /* ============================================\n 5. ABSOLUTE / RELATIVE POSITIONING\n Elements that are offset from their normal flow\n position via top/left.\n ============================================ */\n .relative-offset {\n position: relative;\n top: 20px;\n left: 40px;\n padding: 1rem;\n background: #f3f4f6;\n border-radius: 8px;\n }\n .absolute-container {\n position: relative;\n height: 120px;\n background: #f3f4f6;\n border-radius: 8px;\n }\n .absolute-child {\n position: absolute;\n bottom: 10px;\n right: 10px;\n }\n\n /* ============================================\n 6. FLEXBOX / GRID CENTERING\n Elements centered via flex/grid may have\n unexpected positions vs. document flow.\n ============================================ */\n .flex-center {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 120px;\n background: #f3f4f6;\n border-radius: 8px;\n }\n .grid-center {\n display: grid;\n place-items: center;\n height: 120px;\n background: #f3f4f6;\n border-radius: 8px;\n }\n\n /* ============================================\n 7. WILL-CHANGE / CONTAIN / FILTER\n These CSS properties create new containing\n blocks, similar to transforms.\n ============================================ */\n .will-change-container {\n will-change: transform;\n padding: 1rem;\n background: #f3f4f6;\n border-radius: 8px;\n }\n .contain-container {\n contain: layout;\n padding: 1rem;\n background: #f3f4f6;\n border-radius: 8px;\n }\n .filter-container {\n filter: brightness(1);\n padding: 1rem;\n background: #f3f4f6;\n border-radius: 8px;\n }\n .backdrop-filter-container {\n backdrop-filter: blur(0px);\n padding: 1rem;\n background: #f3f4f6;\n border-radius: 8px;\n }\n\n /* ============================================\n 8. MARGIN COLLAPSE / NEGATIVE MARGINS\n Elements with collapsed or negative margins\n can shift from expected position.\n ============================================ */\n .negative-margin-container {\n padding: 2rem;\n background: #f3f4f6;\n border-radius: 8px;\n }\n .negative-margin-child {\n margin-top: -1rem;\n margin-left: -1rem;\n }\n\n /* ============================================\n Anti-pattern triggers (tiny-text, cramped, ai-color)\n used across scenarios.\n ============================================ */\n .tiny { font-size: 10px; color: #374151; line-height: 1.4; }\n .cramped-box { border: 1px solid #d1d5db; padding: 3px; font-size: 14px; border-radius: 4px; }\n .ai-btn { background: linear-gradient(135deg, #8b5cf6, #6366f1); color: white; padding: 8px 16px; border: none; border-radius: 6px; font-size: 14px; cursor: pointer; }\n .side-tab-card { border-left: 4px solid #8b5cf6; padding: 1rem; background: white; border-radius: 0 8px 8px 0; }\n ","rules":[{"selector":"body","declarations":[{"prop":"font-family","value":"system-ui,sans-serif","important":false},{"prop":"background","value":"#f9fafb","important":false},{"prop":"padding","value":"2rem","important":false},{"prop":"max-width","value":"900px","important":false},{"prop":"margin","value":"0 auto","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":"h1","declarations":[{"prop":"font-size","value":"2rem","important":false},{"prop":"margin-bottom","value":"0.5rem","important":false}],"specificity":[0,0,1],"order":1,"isHover":false,"matchSelector":null},{"selector":"h2","declarations":[{"prop":"font-size","value":"1.125rem","important":false},{"prop":"margin","value":"2.5rem 0 0.75rem","important":false},{"prop":"color","value":"#6b7280","important":false},{"prop":"border-bottom","value":"1px solid #e5e7eb","important":false},{"prop":"padding-bottom","value":"0.5rem","important":false}],"specificity":[0,0,1],"order":2,"isHover":false,"matchSelector":null},{"selector":".scenario","declarations":[{"prop":"margin-bottom","value":"2rem","important":false},{"prop":"padding","value":"1rem","important":false},{"prop":"border","value":"1px dashed #d1d5db","important":false},{"prop":"border-radius","value":"8px","important":false}],"specificity":[0,1,0],"order":3,"isHover":false,"matchSelector":null},{"selector":".scenario-label","declarations":[{"prop":"font-size","value":"0.75rem","important":false},{"prop":"color","value":"#6b7280","important":false},{"prop":"margin-bottom","value":"0.5rem","important":false},{"prop":"text-transform","value":"uppercase","important":false},{"prop":"letter-spacing","value":"0.05em","important":false}],"specificity":[0,1,0],"order":4,"isHover":false,"matchSelector":null},{"selector":".transform-container","declarations":[{"prop":"transform","value":"translateY(0)","important":false},{"prop":"padding","value":"1rem","important":false},{"prop":"background","value":"#f3f4f6","important":false},{"prop":"border-radius","value":"8px","important":false}],"specificity":[0,1,0],"order":5,"isHover":false,"matchSelector":null},{"selector":".transform-rotate","declarations":[{"prop":"transform","value":"rotate(0deg)","important":false},{"prop":"padding","value":"1rem","important":false},{"prop":"background","value":"#f3f4f6","important":false},{"prop":"border-radius","value":"8px","important":false}],"specificity":[0,1,0],"order":6,"isHover":false,"matchSelector":null},{"selector":".transform-scale","declarations":[{"prop":"transform","value":"scale(1)","important":false},{"prop":"padding","value":"1rem","important":false},{"prop":"background","value":"#f3f4f6","important":false},{"prop":"border-radius","value":"8px","important":false}],"specificity":[0,1,0],"order":7,"isHover":false,"matchSelector":null},{"selector":".transform-nested-outer","declarations":[{"prop":"transform","value":"translateX(0)","important":false},{"prop":"padding","value":"1rem","important":false},{"prop":"background","value":"#e5e7eb","important":false},{"prop":"border-radius","value":"8px","important":false}],"specificity":[0,1,0],"order":8,"isHover":false,"matchSelector":null},{"selector":".transform-nested-inner","declarations":[{"prop":"transform","value":"translateY(0)","important":false},{"prop":"padding","value":"1rem","important":false},{"prop":"background","value":"#d1d5db","important":false},{"prop":"border-radius","value":"8px","important":false}],"specificity":[0,1,0],"order":9,"isHover":false,"matchSelector":null},{"selector":"details","declarations":[{"prop":"margin-bottom","value":"1rem","important":false}],"specificity":[0,0,1],"order":10,"isHover":false,"matchSelector":null},{"selector":"summary","declarations":[{"prop":"cursor","value":"pointer","important":false},{"prop":"font-weight","value":"600","important":false}],"specificity":[0,0,1],"order":11,"isHover":false,"matchSelector":null},{"selector":".sticky-container","declarations":[{"prop":"height","value":"200px","important":false},{"prop":"overflow-y","value":"auto","important":false},{"prop":"border","value":"1px solid #d1d5db","important":false},{"prop":"border-radius","value":"8px","important":false}],"specificity":[0,1,0],"order":12,"isHover":false,"matchSelector":null},{"selector":".sticky-header","declarations":[{"prop":"position","value":"sticky","important":false},{"prop":"top","value":"0","important":false},{"prop":"background","value":"#1f2937","important":false},{"prop":"color","value":"white","important":false},{"prop":"padding","value":"0.5rem 1rem","important":false},{"prop":"z-index","value":"10","important":false}],"specificity":[0,1,0],"order":13,"isHover":false,"matchSelector":null},{"selector":".sticky-content","declarations":[{"prop":"padding","value":"1rem","important":false}],"specificity":[0,1,0],"order":14,"isHover":false,"matchSelector":null},{"selector":".overflow-hidden-container","declarations":[{"prop":"overflow","value":"hidden","important":false},{"prop":"height","value":"60px","important":false},{"prop":"border","value":"1px solid #d1d5db","important":false},{"prop":"border-radius","value":"8px","important":false},{"prop":"padding","value":"0.5rem 1rem","important":false}],"specificity":[0,1,0],"order":15,"isHover":false,"matchSelector":null},{"selector":".relative-offset","declarations":[{"prop":"position","value":"relative","important":false},{"prop":"top","value":"20px","important":false},{"prop":"left","value":"40px","important":false},{"prop":"padding","value":"1rem","important":false},{"prop":"background","value":"#f3f4f6","important":false},{"prop":"border-radius","value":"8px","important":false}],"specificity":[0,1,0],"order":16,"isHover":false,"matchSelector":null},{"selector":".absolute-container","declarations":[{"prop":"position","value":"relative","important":false},{"prop":"height","value":"120px","important":false},{"prop":"background","value":"#f3f4f6","important":false},{"prop":"border-radius","value":"8px","important":false}],"specificity":[0,1,0],"order":17,"isHover":false,"matchSelector":null},{"selector":".absolute-child","declarations":[{"prop":"position","value":"absolute","important":false},{"prop":"bottom","value":"10px","important":false},{"prop":"right","value":"10px","important":false}],"specificity":[0,1,0],"order":18,"isHover":false,"matchSelector":null},{"selector":".flex-center","declarations":[{"prop":"display","value":"flex","important":false},{"prop":"justify-content","value":"center","important":false},{"prop":"align-items","value":"center","important":false},{"prop":"height","value":"120px","important":false},{"prop":"background","value":"#f3f4f6","important":false},{"prop":"border-radius","value":"8px","important":false}],"specificity":[0,1,0],"order":19,"isHover":false,"matchSelector":null},{"selector":".grid-center","declarations":[{"prop":"display","value":"grid","important":false},{"prop":"place-items","value":"center","important":false},{"prop":"height","value":"120px","important":false},{"prop":"background","value":"#f3f4f6","important":false},{"prop":"border-radius","value":"8px","important":false}],"specificity":[0,1,0],"order":20,"isHover":false,"matchSelector":null},{"selector":".will-change-container","declarations":[{"prop":"will-change","value":"transform","important":false},{"prop":"padding","value":"1rem","important":false},{"prop":"background","value":"#f3f4f6","important":false},{"prop":"border-radius","value":"8px","important":false}],"specificity":[0,1,0],"order":21,"isHover":false,"matchSelector":null},{"selector":".contain-container","declarations":[{"prop":"contain","value":"layout","important":false},{"prop":"padding","value":"1rem","important":false},{"prop":"background","value":"#f3f4f6","important":false},{"prop":"border-radius","value":"8px","important":false}],"specificity":[0,1,0],"order":22,"isHover":false,"matchSelector":null},{"selector":".filter-container","declarations":[{"prop":"filter","value":"brightness(1)","important":false},{"prop":"padding","value":"1rem","important":false},{"prop":"background","value":"#f3f4f6","important":false},{"prop":"border-radius","value":"8px","important":false}],"specificity":[0,1,0],"order":23,"isHover":false,"matchSelector":null},{"selector":".backdrop-filter-container","declarations":[{"prop":"backdrop-filter","value":"blur(0px)","important":false},{"prop":"padding","value":"1rem","important":false},{"prop":"background","value":"#f3f4f6","important":false},{"prop":"border-radius","value":"8px","important":false}],"specificity":[0,1,0],"order":24,"isHover":false,"matchSelector":null},{"selector":".negative-margin-container","declarations":[{"prop":"padding","value":"2rem","important":false},{"prop":"background","value":"#f3f4f6","important":false},{"prop":"border-radius","value":"8px","important":false}],"specificity":[0,1,0],"order":25,"isHover":false,"matchSelector":null},{"selector":".negative-margin-child","declarations":[{"prop":"margin-top","value":"-1rem","important":false},{"prop":"margin-left","value":"-1rem","important":false}],"specificity":[0,1,0],"order":26,"isHover":false,"matchSelector":null},{"selector":".tiny","declarations":[{"prop":"font-size","value":"10px","important":false},{"prop":"color","value":"#374151","important":false},{"prop":"line-height","value":"1.4","important":false}],"specificity":[0,1,0],"order":27,"isHover":false,"matchSelector":null},{"selector":".cramped-box","declarations":[{"prop":"border","value":"1px solid #d1d5db","important":false},{"prop":"padding","value":"3px","important":false},{"prop":"font-size","value":"14px","important":false},{"prop":"border-radius","value":"4px","important":false}],"specificity":[0,1,0],"order":28,"isHover":false,"matchSelector":null},{"selector":".ai-btn","declarations":[{"prop":"background","value":"linear-gradient(135deg,#8b5cf6,#6366f1)","important":false},{"prop":"color","value":"white","important":false},{"prop":"padding","value":"8px 16px","important":false},{"prop":"border","value":"none","important":false},{"prop":"border-radius","value":"6px","important":false},{"prop":"font-size","value":"14px","important":false},{"prop":"cursor","value":"pointer","important":false}],"specificity":[0,1,0],"order":29,"isHover":false,"matchSelector":null},{"selector":".side-tab-card","declarations":[{"prop":"border-left","value":"4px solid #8b5cf6","important":false},{"prop":"padding","value":"1rem","important":false},{"prop":"background","value":"white","important":false},{"prop":"border-radius","value":"0 8px 8px 0","important":false}],"specificity":[0,1,0],"order":30,"isHover":false,"matchSelector":null}],"unwrapped":"\n body {\n font-family: system-ui, sans-serif;\n background: #f9fafb;\n padding: 2rem;\n max-width: 900px;\n margin: 0 auto;\n }\n h1 { font-size: 2rem; margin-bottom: 0.5rem; }\n h2 { font-size: 1.125rem; margin: 2.5rem 0 0.75rem; color: #6b7280; border-bottom: 1px solid #e5e7eb; padding-bottom: 0.5rem; }\n .scenario { margin-bottom: 2rem; padding: 1rem; border: 1px dashed #d1d5db; border-radius: 8px; }\n .scenario-label { font-size: 0.75rem; color: #6b7280; margin-bottom: 0.5rem; text-transform: uppercase; letter-spacing: 0.05em; }\n\n /* ============================================\n 1. TRANSFORM ANCESTOR\n position:absolute overlays on body use document coords,\n but getBoundingClientRect is viewport-relative.\n Transforms on ancestors create new stacking contexts.\n ============================================ */\n .transform-container {\n transform: translateY(0);\n padding: 1rem;\n background: #f3f4f6;\n border-radius: 8px;\n }\n .transform-rotate {\n transform: rotate(0deg);\n padding: 1rem;\n background: #f3f4f6;\n border-radius: 8px;\n }\n .transform-scale {\n transform: scale(1);\n padding: 1rem;\n background: #f3f4f6;\n border-radius: 8px;\n }\n .transform-nested-outer {\n transform: translateX(0);\n padding: 1rem;\n background: #e5e7eb;\n border-radius: 8px;\n }\n .transform-nested-inner {\n transform: translateY(0);\n padding: 1rem;\n background: #d1d5db;\n border-radius: 8px;\n }\n\n /* ============================================\n 2. CLOSED <details>\n Elements inside collapsed details may report\n a bounding rect but aren't visually present.\n ============================================ */\n details { margin-bottom: 1rem; }\n summary { cursor: pointer; font-weight: 600; }\n\n /* ============================================\n 3. STICKY / FIXED POSITIONING\n Sticky elements change their containing block\n behavior during scroll.\n ============================================ */\n .sticky-container {\n height: 200px;\n overflow-y: auto;\n border: 1px solid #d1d5db;\n border-radius: 8px;\n }\n .sticky-header {\n position: sticky;\n top: 0;\n background: #1f2937;\n color: white;\n padding: 0.5rem 1rem;\n z-index: 10;\n }\n .sticky-content {\n padding: 1rem;\n }\n\n /* ============================================\n 4. OVERFLOW HIDDEN\n Elements that extend beyond an overflow:hidden\n parent are visually clipped but still in the DOM.\n ============================================ */\n .overflow-hidden-container {\n overflow: hidden;\n height: 60px;\n border: 1px solid #d1d5db;\n border-radius: 8px;\n padding: 0.5rem 1rem;\n }\n\n /* ============================================\n 5. ABSOLUTE / RELATIVE POSITIONING\n Elements that are offset from their normal flow\n position via top/left.\n ============================================ */\n .relative-offset {\n position: relative;\n top: 20px;\n left: 40px;\n padding: 1rem;\n background: #f3f4f6;\n border-radius: 8px;\n }\n .absolute-container {\n position: relative;\n height: 120px;\n background: #f3f4f6;\n border-radius: 8px;\n }\n .absolute-child {\n position: absolute;\n bottom: 10px;\n right: 10px;\n }\n\n /* ============================================\n 6. FLEXBOX / GRID CENTERING\n Elements centered via flex/grid may have\n unexpected positions vs. document flow.\n ============================================ */\n .flex-center {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 120px;\n background: #f3f4f6;\n border-radius: 8px;\n }\n .grid-center {\n display: grid;\n place-items: center;\n height: 120px;\n background: #f3f4f6;\n border-radius: 8px;\n }\n\n /* ============================================\n 7. WILL-CHANGE / CONTAIN / FILTER\n These CSS properties create new containing\n blocks, similar to transforms.\n ============================================ */\n .will-change-container {\n will-change: transform;\n padding: 1rem;\n background: #f3f4f6;\n border-radius: 8px;\n }\n .contain-container {\n contain: layout;\n padding: 1rem;\n background: #f3f4f6;\n border-radius: 8px;\n }\n .filter-container {\n filter: brightness(1);\n padding: 1rem;\n background: #f3f4f6;\n border-radius: 8px;\n }\n .backdrop-filter-container {\n backdrop-filter: blur(0px);\n padding: 1rem;\n background: #f3f4f6;\n border-radius: 8px;\n }\n\n /* ============================================\n 8. MARGIN COLLAPSE / NEGATIVE MARGINS\n Elements with collapsed or negative margins\n can shift from expected position.\n ============================================ */\n .negative-margin-container {\n padding: 2rem;\n background: #f3f4f6;\n border-radius: 8px;\n }\n .negative-margin-child {\n margin-top: -1rem;\n margin-left: -1rem;\n }\n\n /* ============================================\n Anti-pattern triggers (tiny-text, cramped, ai-color)\n used across scenarios.\n ============================================ */\n .tiny { font-size: 10px; color: #374151; line-height: 1.4; }\n .cramped-box { border: 1px solid #d1d5db; padding: 3px; font-size: 14px; border-radius: 4px; }\n .ai-btn { background: linear-gradient(135deg, #8b5cf6, #6366f1); color: white; padding: 8px 16px; border: none; border-radius: 6px; font-size: 14px; cursor: pointer; }\n .side-tab-card { border-left: 4px solid #8b5cf6; padding: 1rem; background: white; border-radius: 0 8px 8px 0; }\n "},{"name":"tests/fixtures/antipatterns/oversized-h1-browser.html","css":"\n body { font-family: Georgia, serif; margin: 0; color: #1a1a1a; background: #fff; }\n main { display: grid; gap: 48px; padding: 32px; }\n h1 { margin: 0; line-height: 1.04; }\n .flag-dominating-h1 {\n max-width: 1040px;\n font-size: 104px;\n }\n .pass-contained-large-h1 {\n max-width: 1120px;\n font-size: 83px;\n }\n ","rules":[{"selector":"body","declarations":[{"prop":"font-family","value":"Georgia,serif","important":false},{"prop":"margin","value":"0","important":false},{"prop":"color","value":"#1a1a1a","important":false},{"prop":"background","value":"#fff","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":"main","declarations":[{"prop":"display","value":"grid","important":false},{"prop":"gap","value":"48px","important":false},{"prop":"padding","value":"32px","important":false}],"specificity":[0,0,1],"order":1,"isHover":false,"matchSelector":null},{"selector":"h1","declarations":[{"prop":"margin","value":"0","important":false},{"prop":"line-height","value":"1.04","important":false}],"specificity":[0,0,1],"order":2,"isHover":false,"matchSelector":null},{"selector":".flag-dominating-h1","declarations":[{"prop":"max-width","value":"1040px","important":false},{"prop":"font-size","value":"104px","important":false}],"specificity":[0,1,0],"order":3,"isHover":false,"matchSelector":null},{"selector":".pass-contained-large-h1","declarations":[{"prop":"max-width","value":"1120px","important":false},{"prop":"font-size","value":"83px","important":false}],"specificity":[0,1,0],"order":4,"isHover":false,"matchSelector":null}],"unwrapped":"\n body { font-family: Georgia, serif; margin: 0; color: #1a1a1a; background: #fff; }\n main { display: grid; gap: 48px; padding: 32px; }\n h1 { margin: 0; line-height: 1.04; }\n .flag-dominating-h1 {\n max-width: 1040px;\n font-size: 104px;\n }\n .pass-contained-large-h1 {\n max-width: 1120px;\n font-size: 83px;\n }\n "},{"name":"tests/fixtures/antipatterns/oversized-h1.html","css":"\n body { font-family: Georgia, serif; margin: 0; color: #1a1a1a; background: #fff; }\n .cols { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; padding: 24px; }\n .col { padding: 16px; }\n h1 { margin: 0 0 24px; line-height: 1.05; }\n ","rules":[{"selector":"body","declarations":[{"prop":"font-family","value":"Georgia,serif","important":false},{"prop":"margin","value":"0","important":false},{"prop":"color","value":"#1a1a1a","important":false},{"prop":"background","value":"#fff","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":".cols","declarations":[{"prop":"display","value":"grid","important":false},{"prop":"grid-template-columns","value":"1fr 1fr","important":false},{"prop":"gap","value":"24px","important":false},{"prop":"padding","value":"24px","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null},{"selector":".col","declarations":[{"prop":"padding","value":"16px","important":false}],"specificity":[0,1,0],"order":2,"isHover":false,"matchSelector":null},{"selector":"h1","declarations":[{"prop":"margin","value":"0 0 24px","important":false},{"prop":"line-height","value":"1.05","important":false}],"specificity":[0,0,1],"order":3,"isHover":false,"matchSelector":null}],"unwrapped":"\n body { font-family: Georgia, serif; margin: 0; color: #1a1a1a; background: #fff; }\n .cols { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; padding: 24px; }\n .col { padding: 16px; }\n h1 { margin: 0 0 24px; line-height: 1.05; }\n "},{"name":"tests/fixtures/antipatterns/pseudo-stripe.css","css":"/*\n * Pseudo-element stripe fixture for the regex engine (issue #394).\n *\n * The side-tab silhouette built as an absolutely-positioned ::before/::after\n * bar instead of a border. scanCssTextForPseudoStripe already caught these on\n * full HTML pages; this fixture pins the standalone-stylesheet path. The\n * data-case attribute in each selector lands in the finding snippet, so the\n * test can attribute every flag/pass case individually.\n */\n\n:root {\n --stripe-fixture-neutral: #e5e7eb;\n}\n\n/* ── FLAG: the issue reproducer — inset shorthand pin + 4px chromatic bar ── */\n.card[data-case=\"Inset Shorthand Left Edge\"]::before {\n content: \"\";\n position: absolute;\n inset: 0 auto 0 0;\n width: 4px;\n background: #7c3aed;\n}\n\n/* ── FLAG: longhand edge pins; unresolvable var() errs toward detection ── */\n.card[data-case=\"Longhand Left Edge\"]::before {\n content: \"\";\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 4px;\n background: var(--accent);\n}\n\n/* ── FLAG: horizontal variant riding the bottom edge ── */\n.card[data-case=\"Bottom Edge\"]::after {\n content: \"\";\n position: absolute;\n left: 0;\n right: 0;\n bottom: 0;\n height: 4px;\n background: #f43f5e;\n}\n\n/* ── FLAG: height:100% full-height stripe on the right edge ── */\n.card[data-case=\"Full Height Right Edge\"]::before {\n content: \"\";\n position: absolute;\n top: 0;\n right: 0;\n height: 100%;\n width: 3px;\n background: oklch(60% 0.2 300);\n}\n\n/* ── PASS: neutral gray divider is not an accent stripe ── */\n.card[data-case=\"Neutral Divider\"]::before {\n content: \"\";\n position: absolute;\n inset: 0 auto 0 0;\n width: 4px;\n background: var(--stripe-fixture-neutral);\n}\n\n/* ── PASS: 24px is a panel, not a stripe ── */\n.card[data-case=\"Wide Panel\"]::before {\n content: \"\";\n position: absolute;\n inset: 0 auto 0 0;\n width: 24px;\n background: #7c3aed;\n}\n\n/* ── PASS: no position: absolute — not an overlay stripe ── */\n.card[data-case=\"Static Underline\"]::before {\n content: \"\";\n width: 4px;\n background: #7c3aed;\n}\n\n/* ── PASS: 1px hairline is a divider ── */\n.card[data-case=\"Hairline Divider\"]::before {\n content: \"\";\n position: absolute;\n inset: 0 auto 0 0;\n width: 1px;\n background: #7c3aed;\n}\n\n/* ── PASS: hover-conditional underline is an affordance, not decoration ── */\n.link-row[data-case=\"Hover Underline\"]:hover::after {\n content: \"\";\n position: absolute;\n left: 0;\n right: 0;\n bottom: 0;\n height: 4px;\n background: #7c3aed;\n}\n\n/* ── PASS: pinned to one edge but not full-height — a badge, not a stripe ── */\n.card[data-case=\"Floating Badge\"]::before {\n content: \"\";\n position: absolute;\n left: 0;\n width: 4px;\n height: 12px;\n background: #7c3aed;\n}\n\n/* ── PASS: commented-out CSS is not a live rule ──\n.card[data-case=\"Commented Out Stripe\"]::before {\n content: \"\";\n position: absolute;\n inset: 0 auto 0 0;\n width: 4px;\n background: #7c3aed;\n}\n*/\n","rules":[{"selector":":root","declarations":[{"prop":"--stripe-fixture-neutral","value":"#e5e7eb","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null},{"selector":".card[data-case=\"Inset Shorthand Left Edge\"]::before","declarations":[{"prop":"content","value":"\"\"","important":false},{"prop":"position","value":"absolute","important":false},{"prop":"inset","value":"0 auto 0 0","important":false},{"prop":"width","value":"4px","important":false},{"prop":"background","value":"#7c3aed","important":false}],"specificity":[0,3,0],"order":1,"isHover":false,"matchSelector":null},{"selector":".card[data-case=\"Longhand Left Edge\"]::before","declarations":[{"prop":"content","value":"\"\"","important":false},{"prop":"position","value":"absolute","important":false},{"prop":"top","value":"0","important":false},{"prop":"bottom","value":"0","important":false},{"prop":"left","value":"0","important":false},{"prop":"width","value":"4px","important":false},{"prop":"background","value":"var(--accent)","important":false}],"specificity":[0,3,0],"order":2,"isHover":false,"matchSelector":null},{"selector":".card[data-case=\"Bottom Edge\"]::after","declarations":[{"prop":"content","value":"\"\"","important":false},{"prop":"position","value":"absolute","important":false},{"prop":"left","value":"0","important":false},{"prop":"right","value":"0","important":false},{"prop":"bottom","value":"0","important":false},{"prop":"height","value":"4px","important":false},{"prop":"background","value":"#f43f5e","important":false}],"specificity":[0,3,0],"order":3,"isHover":false,"matchSelector":null},{"selector":".card[data-case=\"Full Height Right Edge\"]::before","declarations":[{"prop":"content","value":"\"\"","important":false},{"prop":"position","value":"absolute","important":false},{"prop":"top","value":"0","important":false},{"prop":"right","value":"0","important":false},{"prop":"height","value":"100%","important":false},{"prop":"width","value":"3px","important":false},{"prop":"background","value":"oklch(60%0.2 300)","important":false}],"specificity":[0,3,0],"order":4,"isHover":false,"matchSelector":null},{"selector":".card[data-case=\"Neutral Divider\"]::before","declarations":[{"prop":"content","value":"\"\"","important":false},{"prop":"position","value":"absolute","important":false},{"prop":"inset","value":"0 auto 0 0","important":false},{"prop":"width","value":"4px","important":false},{"prop":"background","value":"var(--stripe-fixture-neutral)","important":false}],"specificity":[0,3,0],"order":5,"isHover":false,"matchSelector":null},{"selector":".card[data-case=\"Wide Panel\"]::before","declarations":[{"prop":"content","value":"\"\"","important":false},{"prop":"position","value":"absolute","important":false},{"prop":"inset","value":"0 auto 0 0","important":false},{"prop":"width","value":"24px","important":false},{"prop":"background","value":"#7c3aed","important":false}],"specificity":[0,3,0],"order":6,"isHover":false,"matchSelector":null},{"selector":".card[data-case=\"Static Underline\"]::before","declarations":[{"prop":"content","value":"\"\"","important":false},{"prop":"width","value":"4px","important":false},{"prop":"background","value":"#7c3aed","important":false}],"specificity":[0,3,0],"order":7,"isHover":false,"matchSelector":null},{"selector":".card[data-case=\"Hairline Divider\"]::before","declarations":[{"prop":"content","value":"\"\"","important":false},{"prop":"position","value":"absolute","important":false},{"prop":"inset","value":"0 auto 0 0","important":false},{"prop":"width","value":"1px","important":false},{"prop":"background","value":"#7c3aed","important":false}],"specificity":[0,3,0],"order":8,"isHover":false,"matchSelector":null},{"selector":".link-row[data-case=\"Hover Underline\"]:hover::after","declarations":[{"prop":"content","value":"\"\"","important":false},{"prop":"position","value":"absolute","important":false},{"prop":"left","value":"0","important":false},{"prop":"right","value":"0","important":false},{"prop":"bottom","value":"0","important":false},{"prop":"height","value":"4px","important":false},{"prop":"background","value":"#7c3aed","important":false}],"specificity":[0,4,0],"order":9,"isHover":true,"matchSelector":".link-row[data-case=\"Hover Underline\"]::after"},{"selector":".card[data-case=\"Floating Badge\"]::before","declarations":[{"prop":"content","value":"\"\"","important":false},{"prop":"position","value":"absolute","important":false},{"prop":"left","value":"0","important":false},{"prop":"width","value":"4px","important":false},{"prop":"height","value":"12px","important":false},{"prop":"background","value":"#7c3aed","important":false}],"specificity":[0,3,0],"order":10,"isHover":false,"matchSelector":null}],"unwrapped":"/*\n * Pseudo-element stripe fixture for the regex engine (issue #394).\n *\n * The side-tab silhouette built as an absolutely-positioned ::before/::after\n * bar instead of a border. scanCssTextForPseudoStripe already caught these on\n * full HTML pages; this fixture pins the standalone-stylesheet path. The\n * data-case attribute in each selector lands in the finding snippet, so the\n * test can attribute every flag/pass case individually.\n */\n\n:root {\n --stripe-fixture-neutral: #e5e7eb;\n}\n\n/* ── FLAG: the issue reproducer — inset shorthand pin + 4px chromatic bar ── */\n.card[data-case=\"Inset Shorthand Left Edge\"]::before {\n content: \"\";\n position: absolute;\n inset: 0 auto 0 0;\n width: 4px;\n background: #7c3aed;\n}\n\n/* ── FLAG: longhand edge pins; unresolvable var() errs toward detection ── */\n.card[data-case=\"Longhand Left Edge\"]::before {\n content: \"\";\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 4px;\n background: var(--accent);\n}\n\n/* ── FLAG: horizontal variant riding the bottom edge ── */\n.card[data-case=\"Bottom Edge\"]::after {\n content: \"\";\n position: absolute;\n left: 0;\n right: 0;\n bottom: 0;\n height: 4px;\n background: #f43f5e;\n}\n\n/* ── FLAG: height:100% full-height stripe on the right edge ── */\n.card[data-case=\"Full Height Right Edge\"]::before {\n content: \"\";\n position: absolute;\n top: 0;\n right: 0;\n height: 100%;\n width: 3px;\n background: oklch(60% 0.2 300);\n}\n\n/* ── PASS: neutral gray divider is not an accent stripe ── */\n.card[data-case=\"Neutral Divider\"]::before {\n content: \"\";\n position: absolute;\n inset: 0 auto 0 0;\n width: 4px;\n background: var(--stripe-fixture-neutral);\n}\n\n/* ── PASS: 24px is a panel, not a stripe ── */\n.card[data-case=\"Wide Panel\"]::before {\n content: \"\";\n position: absolute;\n inset: 0 auto 0 0;\n width: 24px;\n background: #7c3aed;\n}\n\n/* ── PASS: no position: absolute — not an overlay stripe ── */\n.card[data-case=\"Static Underline\"]::before {\n content: \"\";\n width: 4px;\n background: #7c3aed;\n}\n\n/* ── PASS: 1px hairline is a divider ── */\n.card[data-case=\"Hairline Divider\"]::before {\n content: \"\";\n position: absolute;\n inset: 0 auto 0 0;\n width: 1px;\n background: #7c3aed;\n}\n\n/* ── PASS: hover-conditional underline is an affordance, not decoration ── */\n.link-row[data-case=\"Hover Underline\"]:hover::after {\n content: \"\";\n position: absolute;\n left: 0;\n right: 0;\n bottom: 0;\n height: 4px;\n background: #7c3aed;\n}\n\n/* ── PASS: pinned to one edge but not full-height — a badge, not a stripe ── */\n.card[data-case=\"Floating Badge\"]::before {\n content: \"\";\n position: absolute;\n left: 0;\n width: 4px;\n height: 12px;\n background: #7c3aed;\n}\n\n/* ── PASS: commented-out CSS is not a live rule ──\n.card[data-case=\"Commented Out Stripe\"]::before {\n content: \"\";\n position: absolute;\n inset: 0 auto 0 0;\n width: 4px;\n background: #7c3aed;\n}\n*/\n"},{"name":"tests/fixtures/antipatterns/pseudo-stripe.html","css":"\n :root {\n --ok: oklch(0.78 0.145 155);\n --line: rgba(0, 0, 0, 0.08);\n }\n\n /* FLAG: classic ::before accent stripe — absolute, full height, left edge,\n chromatic background resolved through a custom property. */\n .card-stripe { position: relative; border-radius: 12px; }\n .card-stripe::before {\n content: \"\";\n position: absolute;\n left: 0; top: 0; bottom: 0;\n width: 5px;\n background: var(--ok);\n }\n\n /* FLAG: right-edge variant using inset shorthand + literal color. */\n .row-stripe { position: relative; }\n .row-stripe::after {\n content: \"\";\n position: absolute;\n inset: 0 0 0 auto;\n width: 4px;\n background-color: #3b82f6;\n }\n\n /* PASS: 1px neutral hairline divider (below width threshold + neutral). */\n .col + .col::before {\n content: \"\";\n position: absolute;\n left: 0; top: 0; bottom: 0;\n width: 1px;\n background: var(--line);\n }\n\n /* PASS: neutral 4px rail (timeline spine) — chromatic gate rejects it. */\n .timeline::before {\n content: \"\";\n position: absolute;\n left: 0; top: 0; bottom: 0;\n width: 4px;\n background: rgb(210, 210, 214);\n }\n\n /* PASS: blockquote decoration is exempt in prose contexts. */\n blockquote::before {\n content: \"\";\n position: absolute;\n left: 0; top: 0; bottom: 0;\n width: 4px;\n background: #d97706;\n }\n\n /* PASS: toggle knob — offset from the edge, not a stripe. */\n .switch::before {\n content: \"\";\n position: absolute;\n left: 2px; top: 2px;\n width: 10px; height: 10px;\n border-radius: 50%;\n background: #3b82f6;\n }\n\n /* PASS: wide decorative panel, not a stripe. */\n .panel::before {\n content: \"\";\n position: absolute;\n left: 0; top: 0; bottom: 0;\n width: 40px;\n background: #3b82f6;\n }\n\n /* PASS: horizontal underline accent (not full height, not edge-anchored\n vertically). */\n .heading::after {\n content: \"\";\n position: absolute;\n left: 0; bottom: 0;\n width: 6px; height: 3px;\n background: #3b82f6;\n }\n","rules":[{"selector":":root","declarations":[{"prop":"--ok","value":"oklch(0.78 0.145 155)","important":false},{"prop":"--line","value":"rgba(0, 0, 0, 0.08)","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null},{"selector":".card-stripe","declarations":[{"prop":"position","value":"relative","important":false},{"prop":"border-radius","value":"12px","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null},{"selector":".card-stripe::before","declarations":[{"prop":"content","value":"\"\"","important":false},{"prop":"position","value":"absolute","important":false},{"prop":"left","value":"0","important":false},{"prop":"top","value":"0","important":false},{"prop":"bottom","value":"0","important":false},{"prop":"width","value":"5px","important":false},{"prop":"background","value":"var(--ok)","important":false}],"specificity":[0,2,0],"order":2,"isHover":false,"matchSelector":null},{"selector":".row-stripe","declarations":[{"prop":"position","value":"relative","important":false}],"specificity":[0,1,0],"order":3,"isHover":false,"matchSelector":null},{"selector":".row-stripe::after","declarations":[{"prop":"content","value":"\"\"","important":false},{"prop":"position","value":"absolute","important":false},{"prop":"inset","value":"0 0 0 auto","important":false},{"prop":"width","value":"4px","important":false},{"prop":"background-color","value":"#3b82f6","important":false}],"specificity":[0,2,0],"order":4,"isHover":false,"matchSelector":null},{"selector":".col+.col::before","declarations":[{"prop":"content","value":"\"\"","important":false},{"prop":"position","value":"absolute","important":false},{"prop":"left","value":"0","important":false},{"prop":"top","value":"0","important":false},{"prop":"bottom","value":"0","important":false},{"prop":"width","value":"1px","important":false},{"prop":"background","value":"var(--line)","important":false}],"specificity":[0,3,0],"order":5,"isHover":false,"matchSelector":null},{"selector":".timeline::before","declarations":[{"prop":"content","value":"\"\"","important":false},{"prop":"position","value":"absolute","important":false},{"prop":"left","value":"0","important":false},{"prop":"top","value":"0","important":false},{"prop":"bottom","value":"0","important":false},{"prop":"width","value":"4px","important":false},{"prop":"background","value":"rgb(210,210,214)","important":false}],"specificity":[0,2,0],"order":6,"isHover":false,"matchSelector":null},{"selector":"blockquote::before","declarations":[{"prop":"content","value":"\"\"","important":false},{"prop":"position","value":"absolute","important":false},{"prop":"left","value":"0","important":false},{"prop":"top","value":"0","important":false},{"prop":"bottom","value":"0","important":false},{"prop":"width","value":"4px","important":false},{"prop":"background","value":"#d97706","important":false}],"specificity":[0,1,1],"order":7,"isHover":false,"matchSelector":null},{"selector":".switch::before","declarations":[{"prop":"content","value":"\"\"","important":false},{"prop":"position","value":"absolute","important":false},{"prop":"left","value":"2px","important":false},{"prop":"top","value":"2px","important":false},{"prop":"width","value":"10px","important":false},{"prop":"height","value":"10px","important":false},{"prop":"border-radius","value":"50%","important":false},{"prop":"background","value":"#3b82f6","important":false}],"specificity":[0,2,0],"order":8,"isHover":false,"matchSelector":null},{"selector":".panel::before","declarations":[{"prop":"content","value":"\"\"","important":false},{"prop":"position","value":"absolute","important":false},{"prop":"left","value":"0","important":false},{"prop":"top","value":"0","important":false},{"prop":"bottom","value":"0","important":false},{"prop":"width","value":"40px","important":false},{"prop":"background","value":"#3b82f6","important":false}],"specificity":[0,2,0],"order":9,"isHover":false,"matchSelector":null},{"selector":".heading::after","declarations":[{"prop":"content","value":"\"\"","important":false},{"prop":"position","value":"absolute","important":false},{"prop":"left","value":"0","important":false},{"prop":"bottom","value":"0","important":false},{"prop":"width","value":"6px","important":false},{"prop":"height","value":"3px","important":false},{"prop":"background","value":"#3b82f6","important":false}],"specificity":[0,2,0],"order":10,"isHover":false,"matchSelector":null}],"unwrapped":"\n :root {\n --ok: oklch(0.78 0.145 155);\n --line: rgba(0, 0, 0, 0.08);\n }\n\n /* FLAG: classic ::before accent stripe — absolute, full height, left edge,\n chromatic background resolved through a custom property. */\n .card-stripe { position: relative; border-radius: 12px; }\n .card-stripe::before {\n content: \"\";\n position: absolute;\n left: 0; top: 0; bottom: 0;\n width: 5px;\n background: var(--ok);\n }\n\n /* FLAG: right-edge variant using inset shorthand + literal color. */\n .row-stripe { position: relative; }\n .row-stripe::after {\n content: \"\";\n position: absolute;\n inset: 0 0 0 auto;\n width: 4px;\n background-color: #3b82f6;\n }\n\n /* PASS: 1px neutral hairline divider (below width threshold + neutral). */\n .col + .col::before {\n content: \"\";\n position: absolute;\n left: 0; top: 0; bottom: 0;\n width: 1px;\n background: var(--line);\n }\n\n /* PASS: neutral 4px rail (timeline spine) — chromatic gate rejects it. */\n .timeline::before {\n content: \"\";\n position: absolute;\n left: 0; top: 0; bottom: 0;\n width: 4px;\n background: rgb(210, 210, 214);\n }\n\n /* PASS: blockquote decoration is exempt in prose contexts. */\n blockquote::before {\n content: \"\";\n position: absolute;\n left: 0; top: 0; bottom: 0;\n width: 4px;\n background: #d97706;\n }\n\n /* PASS: toggle knob — offset from the edge, not a stripe. */\n .switch::before {\n content: \"\";\n position: absolute;\n left: 2px; top: 2px;\n width: 10px; height: 10px;\n border-radius: 50%;\n background: #3b82f6;\n }\n\n /* PASS: wide decorative panel, not a stripe. */\n .panel::before {\n content: \"\";\n position: absolute;\n left: 0; top: 0; bottom: 0;\n width: 40px;\n background: #3b82f6;\n }\n\n /* PASS: horizontal underline accent (not full height, not edge-anchored\n vertically). */\n .heading::after {\n content: \"\";\n position: absolute;\n left: 0; bottom: 0;\n width: 6px; height: 3px;\n background: #3b82f6;\n }\n"},{"name":"tests/fixtures/antipatterns/pulsing-dot.html","css":"\n :root { --dot: 8px; }\n\n /* FLAG: tiny circular live dot on an infinite opacity pulse. */\n .live-dot {\n width: 7px; height: 7px;\n border-radius: 50%;\n background: #22c55e;\n animation: pulse 2.4s ease-out infinite;\n }\n @keyframes pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.3; }\n }\n\n /* FLAG: box-shadow ripple variant, var-sized, pill radius. */\n .status .dot {\n width: var(--dot); height: var(--dot);\n border-radius: 999px;\n background: #ef4444;\n animation: ripple 1.8s linear infinite;\n }\n @keyframes ripple {\n 0% { box-shadow: 0 0 0 0 rgba(239, 68, 68, 0.4); }\n 100% { box-shadow: 0 0 0 6px rgba(239, 68, 68, 0); }\n }\n\n /* FLAG: longhand animation-name + iteration-count. */\n .beacon {\n width: 10px; height: 10px;\n border-radius: 50%;\n background: #f59e0b;\n animation-name: pulse;\n animation-duration: 2s;\n animation-iteration-count: infinite;\n }\n\n /* PASS: rotation-only spinner — same size class, must never flag. */\n .spinner {\n width: 14px; height: 14px;\n border-radius: 50%;\n border: 2px solid #e5e7eb;\n border-top-color: #3b82f6;\n animation: spin 0.8s linear infinite;\n }\n @keyframes spin { to { transform: rotate(360deg); } }\n\n /* PASS: named pulse but the local keyframes only rotate. */\n .fake-pulse {\n width: 8px; height: 8px;\n border-radius: 50%;\n animation: pulse-ring 1s linear infinite;\n }\n @keyframes pulse-ring { to { transform: rotate(180deg); } }\n\n /* PASS: large breathing card — not a dot. */\n .breathing-card {\n width: 240px; height: 120px;\n border-radius: 16px;\n animation: pulse 3s ease-in-out infinite;\n }\n\n /* PASS: finite attention pulse (no infinite). */\n .nudge {\n width: 8px; height: 8px;\n border-radius: 50%;\n animation: pulse 0.6s ease-out 3;\n }\n\n /* PASS: square badge, not circular. */\n .square-badge {\n width: 12px; height: 12px;\n border-radius: 2px;\n animation: pulse 2s infinite;\n }\n\n /* FLAG (error): header logo dot whose size and animation live in\n separate rule blocks, animation added inside a matching media query,\n with a reduced-motion reset that must not mask the default. */\n .rec-mark {\n width: 10px; height: 10px;\n border-radius: 50%;\n background: #dc2626;\n }\n @media (prefers-reduced-motion: no-preference) {\n .rec-mark { animation: pulse 2.4s ease-in-out infinite; }\n }\n @media (prefers-reduced-motion: reduce) {\n .rec-mark { animation: none; }\n }\n","rules":[{"selector":":root","declarations":[{"prop":"--dot","value":"8px","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null},{"selector":".live-dot","declarations":[{"prop":"width","value":"7px","important":false},{"prop":"height","value":"7px","important":false},{"prop":"border-radius","value":"50%","important":false},{"prop":"background","value":"#22c55e","important":false},{"prop":"animation","value":"pulse 2.4s ease-out infinite","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null},{"selector":".status .dot","declarations":[{"prop":"width","value":"var(--dot)","important":false},{"prop":"height","value":"var(--dot)","important":false},{"prop":"border-radius","value":"999px","important":false},{"prop":"background","value":"#ef4444","important":false},{"prop":"animation","value":"ripple 1.8s linear infinite","important":false}],"specificity":[0,2,0],"order":2,"isHover":false,"matchSelector":null},{"selector":".beacon","declarations":[{"prop":"width","value":"10px","important":false},{"prop":"height","value":"10px","important":false},{"prop":"border-radius","value":"50%","important":false},{"prop":"background","value":"#f59e0b","important":false},{"prop":"animation-name","value":"pulse","important":false},{"prop":"animation-duration","value":"2s","important":false},{"prop":"animation-iteration-count","value":"infinite","important":false}],"specificity":[0,1,0],"order":3,"isHover":false,"matchSelector":null},{"selector":".spinner","declarations":[{"prop":"width","value":"14px","important":false},{"prop":"height","value":"14px","important":false},{"prop":"border-radius","value":"50%","important":false},{"prop":"border","value":"2px solid #e5e7eb","important":false},{"prop":"border-top-color","value":"#3b82f6","important":false},{"prop":"animation","value":"spin 0.8s linear infinite","important":false}],"specificity":[0,1,0],"order":4,"isHover":false,"matchSelector":null},{"selector":".fake-pulse","declarations":[{"prop":"width","value":"8px","important":false},{"prop":"height","value":"8px","important":false},{"prop":"border-radius","value":"50%","important":false},{"prop":"animation","value":"pulse-ring 1s linear infinite","important":false}],"specificity":[0,1,0],"order":5,"isHover":false,"matchSelector":null},{"selector":".breathing-card","declarations":[{"prop":"width","value":"240px","important":false},{"prop":"height","value":"120px","important":false},{"prop":"border-radius","value":"16px","important":false},{"prop":"animation","value":"pulse 3s ease-in-out infinite","important":false}],"specificity":[0,1,0],"order":6,"isHover":false,"matchSelector":null},{"selector":".nudge","declarations":[{"prop":"width","value":"8px","important":false},{"prop":"height","value":"8px","important":false},{"prop":"border-radius","value":"50%","important":false},{"prop":"animation","value":"pulse 0.6s ease-out 3","important":false}],"specificity":[0,1,0],"order":7,"isHover":false,"matchSelector":null},{"selector":".square-badge","declarations":[{"prop":"width","value":"12px","important":false},{"prop":"height","value":"12px","important":false},{"prop":"border-radius","value":"2px","important":false},{"prop":"animation","value":"pulse 2s infinite","important":false}],"specificity":[0,1,0],"order":8,"isHover":false,"matchSelector":null},{"selector":".rec-mark","declarations":[{"prop":"width","value":"10px","important":false},{"prop":"height","value":"10px","important":false},{"prop":"border-radius","value":"50%","important":false},{"prop":"background","value":"#dc2626","important":false}],"specificity":[0,1,0],"order":9,"isHover":false,"matchSelector":null},{"selector":".rec-mark","declarations":[{"prop":"animation","value":"pulse 2.4s ease-in-out infinite","important":false}],"specificity":[0,1,0],"order":10,"isHover":false,"matchSelector":null},{"selector":".rec-mark","declarations":[{"prop":"animation","value":"none","important":false}],"specificity":[0,1,0],"order":11,"isHover":false,"matchSelector":null}],"unwrapped":"\n :root { --dot: 8px; }\n\n /* FLAG: tiny circular live dot on an infinite opacity pulse. */\n .live-dot {\n width: 7px; height: 7px;\n border-radius: 50%;\n background: #22c55e;\n animation: pulse 2.4s ease-out infinite;\n }\n @keyframes pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.3; }\n }\n\n /* FLAG: box-shadow ripple variant, var-sized, pill radius. */\n .status .dot {\n width: var(--dot); height: var(--dot);\n border-radius: 999px;\n background: #ef4444;\n animation: ripple 1.8s linear infinite;\n }\n @keyframes ripple {\n 0% { box-shadow: 0 0 0 0 rgba(239, 68, 68, 0.4); }\n 100% { box-shadow: 0 0 0 6px rgba(239, 68, 68, 0); }\n }\n\n /* FLAG: longhand animation-name + iteration-count. */\n .beacon {\n width: 10px; height: 10px;\n border-radius: 50%;\n background: #f59e0b;\n animation-name: pulse;\n animation-duration: 2s;\n animation-iteration-count: infinite;\n }\n\n /* PASS: rotation-only spinner — same size class, must never flag. */\n .spinner {\n width: 14px; height: 14px;\n border-radius: 50%;\n border: 2px solid #e5e7eb;\n border-top-color: #3b82f6;\n animation: spin 0.8s linear infinite;\n }\n @keyframes spin { to { transform: rotate(360deg); } }\n\n /* PASS: named pulse but the local keyframes only rotate. */\n .fake-pulse {\n width: 8px; height: 8px;\n border-radius: 50%;\n animation: pulse-ring 1s linear infinite;\n }\n @keyframes pulse-ring { to { transform: rotate(180deg); } }\n\n /* PASS: large breathing card — not a dot. */\n .breathing-card {\n width: 240px; height: 120px;\n border-radius: 16px;\n animation: pulse 3s ease-in-out infinite;\n }\n\n /* PASS: finite attention pulse (no infinite). */\n .nudge {\n width: 8px; height: 8px;\n border-radius: 50%;\n animation: pulse 0.6s ease-out 3;\n }\n\n /* PASS: square badge, not circular. */\n .square-badge {\n width: 12px; height: 12px;\n border-radius: 2px;\n animation: pulse 2s infinite;\n }\n\n /* FLAG (error): header logo dot whose size and animation live in\n separate rule blocks, animation added inside a matching media query,\n with a reduced-motion reset that must not mask the default. */\n .rec-mark {\n width: 10px; height: 10px;\n border-radius: 50%;\n background: #dc2626;\n }\n @media (prefers-reduced-motion: no-preference) {\n .rec-mark { animation: pulse 2.4s ease-in-out infinite; }\n }\n @media (prefers-reduced-motion: reduce) {\n .rec-mark { animation: none; }\n }\n"},{"name":"tests/fixtures/antipatterns/quality.html","css":"\n /* Two-column fixture: left = should flag, right = should pass.\n Covers the typography-quality rules that need real browser layout\n (line-length, tight-leading, tiny-text, justified-text, all-caps-body,\n wide-tracking, skipped-heading). All are browser-only — see\n tests/detect-antipatterns-browser.test.mjs for assertions. */\n body { font-family: system-ui, sans-serif; background: #fafafa; padding: 24px; margin: 0; color: #0f172a; line-height: 1.6; }\n .grid { display: grid; grid-template-columns: 1fr 1fr; gap: 32px; max-width: 1280px; margin: 0 auto; }\n .col h2 { font-size: 14px; text-transform: uppercase; letter-spacing: 0.05em; margin: 0 0 16px; color: #475569; }\n .col h3 { font-size: 11px; text-transform: uppercase; letter-spacing: 0.05em; margin: 24px 0 8px; color: #64748b; }\n .case { margin-bottom: 16px; padding: 16px; background: white; border: 1px solid #e2e8f0; border-radius: 8px; }\n .case-label { display: block; font-size: 12px; color: #64748b; margin-bottom: 6px; font-style: italic; }\n\n /* ── FLAG: typography quality issues ── */\n\n /* Line length: 12px body text fits >85 chars/line in a ~528px column.\n 12px is not below the tiny-text 12px floor (rule fires at <12px). */\n .long-lines {\n font-size: 12px;\n line-height: 1.6;\n }\n\n /* Tight leading */\n .tight-leading {\n font-size: 16px;\n line-height: 1.0;\n max-width: 40em;\n }\n\n /* Tiny body text */\n .tiny-text {\n font-size: 10px;\n line-height: 1.6;\n max-width: 40em;\n }\n .tiny-text-11 {\n font-size: 11px;\n line-height: 1.6;\n max-width: 40em;\n }\n\n /* Justified text without hyphens */\n .justified-no-hyphens {\n text-align: justify;\n max-width: 30em;\n font-size: 16px;\n line-height: 1.6;\n }\n\n /* All-caps long body */\n .all-caps-body {\n text-transform: uppercase;\n font-size: 16px;\n max-width: 40em;\n line-height: 1.6;\n }\n\n /* Wide letter spacing on body */\n .wide-tracking-body {\n letter-spacing: 0.15em;\n font-size: 16px;\n max-width: 40em;\n line-height: 1.6;\n }\n\n /* ── PASS: comfortable typography ── */\n\n .good-measure {\n max-width: 65ch;\n font-size: 16px;\n line-height: 1.6;\n }\n\n .good-leading {\n font-size: 16px;\n line-height: 1.6;\n max-width: 40em;\n }\n\n .good-text-size {\n font-size: 16px;\n line-height: 1.6;\n max-width: 40em;\n }\n\n /* Justified text WITH hyphens — fine */\n .justified-with-hyphens {\n text-align: justify;\n hyphens: auto;\n -webkit-hyphens: auto;\n max-width: 30em;\n font-size: 16px;\n line-height: 1.6;\n }\n\n /* Short label in all-caps (passes — under 30 chars) */\n .label-caps {\n text-transform: uppercase;\n font-size: 12px;\n font-weight: 600;\n letter-spacing: 0.1em;\n color: #475569;\n }\n\n /* Wide tracking on a short uppercase label (passes — both conditions excluded) */\n .label-tracking {\n letter-spacing: 0.15em;\n text-transform: uppercase;\n font-size: 12px;\n font-weight: 600;\n color: #475569;\n }\n\n .mock-terminal-title,\n .mock-terminal-meta,\n .mock-diff-line {\n font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\n color: #475569;\n line-height: 1.5;\n }\n .mock-terminal-title { font-size: 11px; }\n .mock-terminal-meta { font-size: 10.8px; }\n .mock-diff-line { font-size: 11.84px; }\n ","rules":[{"selector":"body","declarations":[{"prop":"font-family","value":"system-ui,sans-serif","important":false},{"prop":"background","value":"#fafafa","important":false},{"prop":"padding","value":"24px","important":false},{"prop":"margin","value":"0","important":false},{"prop":"color","value":"#0f172a","important":false},{"prop":"line-height","value":"1.6","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":".grid","declarations":[{"prop":"display","value":"grid","important":false},{"prop":"grid-template-columns","value":"1fr 1fr","important":false},{"prop":"gap","value":"32px","important":false},{"prop":"max-width","value":"1280px","important":false},{"prop":"margin","value":"0 auto","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null},{"selector":".col h2","declarations":[{"prop":"font-size","value":"14px","important":false},{"prop":"text-transform","value":"uppercase","important":false},{"prop":"letter-spacing","value":"0.05em","important":false},{"prop":"margin","value":"0 0 16px","important":false},{"prop":"color","value":"#475569","important":false}],"specificity":[0,1,1],"order":2,"isHover":false,"matchSelector":null},{"selector":".col h3","declarations":[{"prop":"font-size","value":"11px","important":false},{"prop":"text-transform","value":"uppercase","important":false},{"prop":"letter-spacing","value":"0.05em","important":false},{"prop":"margin","value":"24px 0 8px","important":false},{"prop":"color","value":"#64748b","important":false}],"specificity":[0,1,1],"order":3,"isHover":false,"matchSelector":null},{"selector":".case","declarations":[{"prop":"margin-bottom","value":"16px","important":false},{"prop":"padding","value":"16px","important":false},{"prop":"background","value":"white","important":false},{"prop":"border","value":"1px solid #e2e8f0","important":false},{"prop":"border-radius","value":"8px","important":false}],"specificity":[0,1,0],"order":4,"isHover":false,"matchSelector":null},{"selector":".case-label","declarations":[{"prop":"display","value":"block","important":false},{"prop":"font-size","value":"12px","important":false},{"prop":"color","value":"#64748b","important":false},{"prop":"margin-bottom","value":"6px","important":false},{"prop":"font-style","value":"italic","important":false}],"specificity":[0,1,0],"order":5,"isHover":false,"matchSelector":null},{"selector":".long-lines","declarations":[{"prop":"font-size","value":"12px","important":false},{"prop":"line-height","value":"1.6","important":false}],"specificity":[0,1,0],"order":6,"isHover":false,"matchSelector":null},{"selector":".tight-leading","declarations":[{"prop":"font-size","value":"16px","important":false},{"prop":"line-height","value":"1.0","important":false},{"prop":"max-width","value":"40em","important":false}],"specificity":[0,1,0],"order":7,"isHover":false,"matchSelector":null},{"selector":".tiny-text","declarations":[{"prop":"font-size","value":"10px","important":false},{"prop":"line-height","value":"1.6","important":false},{"prop":"max-width","value":"40em","important":false}],"specificity":[0,1,0],"order":8,"isHover":false,"matchSelector":null},{"selector":".tiny-text-11","declarations":[{"prop":"font-size","value":"11px","important":false},{"prop":"line-height","value":"1.6","important":false},{"prop":"max-width","value":"40em","important":false}],"specificity":[0,1,0],"order":9,"isHover":false,"matchSelector":null},{"selector":".justified-no-hyphens","declarations":[{"prop":"text-align","value":"justify","important":false},{"prop":"max-width","value":"30em","important":false},{"prop":"font-size","value":"16px","important":false},{"prop":"line-height","value":"1.6","important":false}],"specificity":[0,1,0],"order":10,"isHover":false,"matchSelector":null},{"selector":".all-caps-body","declarations":[{"prop":"text-transform","value":"uppercase","important":false},{"prop":"font-size","value":"16px","important":false},{"prop":"max-width","value":"40em","important":false},{"prop":"line-height","value":"1.6","important":false}],"specificity":[0,1,0],"order":11,"isHover":false,"matchSelector":null},{"selector":".wide-tracking-body","declarations":[{"prop":"letter-spacing","value":"0.15em","important":false},{"prop":"font-size","value":"16px","important":false},{"prop":"max-width","value":"40em","important":false},{"prop":"line-height","value":"1.6","important":false}],"specificity":[0,1,0],"order":12,"isHover":false,"matchSelector":null},{"selector":".good-measure","declarations":[{"prop":"max-width","value":"65ch","important":false},{"prop":"font-size","value":"16px","important":false},{"prop":"line-height","value":"1.6","important":false}],"specificity":[0,1,0],"order":13,"isHover":false,"matchSelector":null},{"selector":".good-leading","declarations":[{"prop":"font-size","value":"16px","important":false},{"prop":"line-height","value":"1.6","important":false},{"prop":"max-width","value":"40em","important":false}],"specificity":[0,1,0],"order":14,"isHover":false,"matchSelector":null},{"selector":".good-text-size","declarations":[{"prop":"font-size","value":"16px","important":false},{"prop":"line-height","value":"1.6","important":false},{"prop":"max-width","value":"40em","important":false}],"specificity":[0,1,0],"order":15,"isHover":false,"matchSelector":null},{"selector":".justified-with-hyphens","declarations":[{"prop":"text-align","value":"justify","important":false},{"prop":"hyphens","value":"auto","important":false},{"prop":"-webkit-hyphens","value":"auto","important":false},{"prop":"max-width","value":"30em","important":false},{"prop":"font-size","value":"16px","important":false},{"prop":"line-height","value":"1.6","important":false}],"specificity":[0,1,0],"order":16,"isHover":false,"matchSelector":null},{"selector":".label-caps","declarations":[{"prop":"text-transform","value":"uppercase","important":false},{"prop":"font-size","value":"12px","important":false},{"prop":"font-weight","value":"600","important":false},{"prop":"letter-spacing","value":"0.1em","important":false},{"prop":"color","value":"#475569","important":false}],"specificity":[0,1,0],"order":17,"isHover":false,"matchSelector":null},{"selector":".label-tracking","declarations":[{"prop":"letter-spacing","value":"0.15em","important":false},{"prop":"text-transform","value":"uppercase","important":false},{"prop":"font-size","value":"12px","important":false},{"prop":"font-weight","value":"600","important":false},{"prop":"color","value":"#475569","important":false}],"specificity":[0,1,0],"order":18,"isHover":false,"matchSelector":null},{"selector":".mock-terminal-title","declarations":[{"prop":"font-family","value":"ui-monospace,SFMono-Regular,Menlo,Consolas,monospace","important":false},{"prop":"color","value":"#475569","important":false},{"prop":"line-height","value":"1.5","important":false}],"specificity":[0,1,0],"order":19,"isHover":false,"matchSelector":null},{"selector":".mock-terminal-meta","declarations":[{"prop":"font-family","value":"ui-monospace,SFMono-Regular,Menlo,Consolas,monospace","important":false},{"prop":"color","value":"#475569","important":false},{"prop":"line-height","value":"1.5","important":false}],"specificity":[0,1,0],"order":20,"isHover":false,"matchSelector":null},{"selector":".mock-diff-line","declarations":[{"prop":"font-family","value":"ui-monospace,SFMono-Regular,Menlo,Consolas,monospace","important":false},{"prop":"color","value":"#475569","important":false},{"prop":"line-height","value":"1.5","important":false}],"specificity":[0,1,0],"order":21,"isHover":false,"matchSelector":null},{"selector":".mock-terminal-title","declarations":[{"prop":"font-size","value":"11px","important":false}],"specificity":[0,1,0],"order":22,"isHover":false,"matchSelector":null},{"selector":".mock-terminal-meta","declarations":[{"prop":"font-size","value":"10.8px","important":false}],"specificity":[0,1,0],"order":23,"isHover":false,"matchSelector":null},{"selector":".mock-diff-line","declarations":[{"prop":"font-size","value":"11.84px","important":false}],"specificity":[0,1,0],"order":24,"isHover":false,"matchSelector":null}],"unwrapped":"\n /* Two-column fixture: left = should flag, right = should pass.\n Covers the typography-quality rules that need real browser layout\n (line-length, tight-leading, tiny-text, justified-text, all-caps-body,\n wide-tracking, skipped-heading). All are browser-only — see\n tests/detect-antipatterns-browser.test.mjs for assertions. */\n body { font-family: system-ui, sans-serif; background: #fafafa; padding: 24px; margin: 0; color: #0f172a; line-height: 1.6; }\n .grid { display: grid; grid-template-columns: 1fr 1fr; gap: 32px; max-width: 1280px; margin: 0 auto; }\n .col h2 { font-size: 14px; text-transform: uppercase; letter-spacing: 0.05em; margin: 0 0 16px; color: #475569; }\n .col h3 { font-size: 11px; text-transform: uppercase; letter-spacing: 0.05em; margin: 24px 0 8px; color: #64748b; }\n .case { margin-bottom: 16px; padding: 16px; background: white; border: 1px solid #e2e8f0; border-radius: 8px; }\n .case-label { display: block; font-size: 12px; color: #64748b; margin-bottom: 6px; font-style: italic; }\n\n /* ── FLAG: typography quality issues ── */\n\n /* Line length: 12px body text fits >85 chars/line in a ~528px column.\n 12px is not below the tiny-text 12px floor (rule fires at <12px). */\n .long-lines {\n font-size: 12px;\n line-height: 1.6;\n }\n\n /* Tight leading */\n .tight-leading {\n font-size: 16px;\n line-height: 1.0;\n max-width: 40em;\n }\n\n /* Tiny body text */\n .tiny-text {\n font-size: 10px;\n line-height: 1.6;\n max-width: 40em;\n }\n .tiny-text-11 {\n font-size: 11px;\n line-height: 1.6;\n max-width: 40em;\n }\n\n /* Justified text without hyphens */\n .justified-no-hyphens {\n text-align: justify;\n max-width: 30em;\n font-size: 16px;\n line-height: 1.6;\n }\n\n /* All-caps long body */\n .all-caps-body {\n text-transform: uppercase;\n font-size: 16px;\n max-width: 40em;\n line-height: 1.6;\n }\n\n /* Wide letter spacing on body */\n .wide-tracking-body {\n letter-spacing: 0.15em;\n font-size: 16px;\n max-width: 40em;\n line-height: 1.6;\n }\n\n /* ── PASS: comfortable typography ── */\n\n .good-measure {\n max-width: 65ch;\n font-size: 16px;\n line-height: 1.6;\n }\n\n .good-leading {\n font-size: 16px;\n line-height: 1.6;\n max-width: 40em;\n }\n\n .good-text-size {\n font-size: 16px;\n line-height: 1.6;\n max-width: 40em;\n }\n\n /* Justified text WITH hyphens — fine */\n .justified-with-hyphens {\n text-align: justify;\n hyphens: auto;\n -webkit-hyphens: auto;\n max-width: 30em;\n font-size: 16px;\n line-height: 1.6;\n }\n\n /* Short label in all-caps (passes — under 30 chars) */\n .label-caps {\n text-transform: uppercase;\n font-size: 12px;\n font-weight: 600;\n letter-spacing: 0.1em;\n color: #475569;\n }\n\n /* Wide tracking on a short uppercase label (passes — both conditions excluded) */\n .label-tracking {\n letter-spacing: 0.15em;\n text-transform: uppercase;\n font-size: 12px;\n font-weight: 600;\n color: #475569;\n }\n\n .mock-terminal-title,\n .mock-terminal-meta,\n .mock-diff-line {\n font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\n color: #475569;\n line-height: 1.5;\n }\n .mock-terminal-title { font-size: 11px; }\n .mock-terminal-meta { font-size: 10.8px; }\n .mock-diff-line { font-size: 11.84px; }\n "},{"name":"tests/fixtures/antipatterns/radial-spotlight-glow.html","css":"\n /* jsdom / static-html engine does no layout: every case declares explicit\n pixel width + height so the size gate can read them. */\n body { margin: 0; background: #0b0d13; }\n .grid { display: flex; flex-wrap: wrap; gap: 24px; padding: 24px; }\n .case { color: #e6e6e6; }\n\n /* ───────── SHOULD FLAG: decorative low-opacity chromatic spotlights ───────── */\n\n /* The exact declaration that evaded the detector: soft blue spotlight fading\n to transparent, painted on a large mobile hero. */\n .flag-hero-blue {\n width: 360px; height: 560px;\n background: radial-gradient(circle at 52% 38%, rgba(80,111,255,0.26), transparent 44%);\n }\n /* Violet accent wash on a full section. */\n .flag-section-violet {\n width: 900px; height: 600px;\n background-image: radial-gradient(circle, rgba(139,92,246,0.30), transparent 60%);\n }\n /* Cyan overlay-style glow (the pseudo-element overlay div reflex). */\n .flag-overlay-cyan {\n width: 760px; height: 480px;\n background: radial-gradient(ellipse at top, rgba(34,211,238,0.22), transparent 70%);\n }\n /* Single glow drawn with two low-alpha stops of one hue fading out. */\n .flag-two-stop-rose {\n width: 640px; height: 400px;\n background: radial-gradient(circle, rgba(255,90,120,0.28) 0%, rgba(255,90,120,0.12) 45%, transparent 75%);\n }\n /* Same tell written as an 8-digit hex (#506fff at alpha 0x3d ≈ 0.24). */\n .flag-hex-alpha {\n width: 700px; height: 460px;\n background: radial-gradient(circle, #506fff3d, transparent 50%);\n }\n\n /* ───────── SHOULD PASS: real backgrounds, small elements, neutrals, rich art ───────── */\n\n /* Opaque radial background — a real surface, not a glow (no transparent end). */\n .pass-opaque-bg {\n width: 800px; height: 520px;\n background: radial-gradient(circle, #1e3a8a, #0f172a);\n }\n /* Small badge: chromatic low-alpha radial glow, but tiny. */\n .pass-badge {\n width: 40px; height: 40px;\n background: radial-gradient(circle, rgba(80,111,255,0.30), transparent);\n }\n /* Avatar-scale light: the subject IS a small light, exempt by size. */\n .pass-avatar-light {\n width: 72px; height: 72px;\n background: radial-gradient(circle, rgba(255,196,64,0.35), transparent 70%);\n }\n /* Neutral near-black vignette — grayscale, not the accent-glow tell. */\n .pass-neutral-vignette {\n width: 800px; height: 520px;\n background: radial-gradient(circle, rgba(0,0,0,0.40), transparent 80%);\n }\n /* Neutral near-white vignette — grayscale, exempt. */\n .pass-white-vignette {\n width: 820px; height: 540px;\n background: radial-gradient(ellipse, rgba(255,255,255,0.35), transparent 70%);\n }\n /* Rich three-color radial composition — real color structure, opaque, no fade. */\n .pass-rich-composition {\n width: 800px; height: 520px;\n background: radial-gradient(circle, #ff0080 0%, #7928ca 45%, #0070f3 100%);\n }\n /* Rich composition that does fade out, but its color stops are opaque. */\n .pass-rich-transparent {\n width: 780px; height: 500px;\n background: radial-gradient(circle, rgba(255,0,128,0.90) 0%, rgba(121,40,202,0.85) 50%, transparent);\n }\n /* Opaque center glow (the radial-halo case, alpha ≥ 0.45) — not this rule. */\n .pass-opaque-center {\n width: 800px; height: 520px;\n background: radial-gradient(circle, rgba(80,111,255,0.85), transparent);\n }\n /* Low-alpha chromatic wash, but LINEAR, not radial. */\n .pass-linear-wash {\n width: 800px; height: 520px;\n background: linear-gradient(120deg, rgba(80,111,255,0.28), transparent 60%);\n }\n","rules":[{"selector":"body","declarations":[{"prop":"margin","value":"0","important":false},{"prop":"background","value":"#0b0d13","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":".grid","declarations":[{"prop":"display","value":"flex","important":false},{"prop":"flex-wrap","value":"wrap","important":false},{"prop":"gap","value":"24px","important":false},{"prop":"padding","value":"24px","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null},{"selector":".case","declarations":[{"prop":"color","value":"#e6e6e6","important":false}],"specificity":[0,1,0],"order":2,"isHover":false,"matchSelector":null},{"selector":".flag-hero-blue","declarations":[{"prop":"width","value":"360px","important":false},{"prop":"height","value":"560px","important":false},{"prop":"background","value":"radial-gradient(circle at 52% 38%,rgba(80,111,255,0.26),transparent 44%)","important":false}],"specificity":[0,1,0],"order":3,"isHover":false,"matchSelector":null},{"selector":".flag-section-violet","declarations":[{"prop":"width","value":"900px","important":false},{"prop":"height","value":"600px","important":false},{"prop":"background-image","value":"radial-gradient(circle,rgba(139,92,246,0.30),transparent 60%)","important":false}],"specificity":[0,1,0],"order":4,"isHover":false,"matchSelector":null},{"selector":".flag-overlay-cyan","declarations":[{"prop":"width","value":"760px","important":false},{"prop":"height","value":"480px","important":false},{"prop":"background","value":"radial-gradient(ellipse at top,rgba(34,211,238,0.22),transparent 70%)","important":false}],"specificity":[0,1,0],"order":5,"isHover":false,"matchSelector":null},{"selector":".flag-two-stop-rose","declarations":[{"prop":"width","value":"640px","important":false},{"prop":"height","value":"400px","important":false},{"prop":"background","value":"radial-gradient(circle,rgba(255,90,120,0.28) 0%,rgba(255,90,120,0.12) 45%,transparent 75%)","important":false}],"specificity":[0,1,0],"order":6,"isHover":false,"matchSelector":null},{"selector":".flag-hex-alpha","declarations":[{"prop":"width","value":"700px","important":false},{"prop":"height","value":"460px","important":false},{"prop":"background","value":"radial-gradient(circle,#506fff3d,transparent 50%)","important":false}],"specificity":[0,1,0],"order":7,"isHover":false,"matchSelector":null},{"selector":".pass-opaque-bg","declarations":[{"prop":"width","value":"800px","important":false},{"prop":"height","value":"520px","important":false},{"prop":"background","value":"radial-gradient(circle,#1e3a8a,#0f172a)","important":false}],"specificity":[0,1,0],"order":8,"isHover":false,"matchSelector":null},{"selector":".pass-badge","declarations":[{"prop":"width","value":"40px","important":false},{"prop":"height","value":"40px","important":false},{"prop":"background","value":"radial-gradient(circle,rgba(80,111,255,0.30),transparent)","important":false}],"specificity":[0,1,0],"order":9,"isHover":false,"matchSelector":null},{"selector":".pass-avatar-light","declarations":[{"prop":"width","value":"72px","important":false},{"prop":"height","value":"72px","important":false},{"prop":"background","value":"radial-gradient(circle,rgba(255,196,64,0.35),transparent 70%)","important":false}],"specificity":[0,1,0],"order":10,"isHover":false,"matchSelector":null},{"selector":".pass-neutral-vignette","declarations":[{"prop":"width","value":"800px","important":false},{"prop":"height","value":"520px","important":false},{"prop":"background","value":"radial-gradient(circle,rgba(0,0,0,0.40),transparent 80%)","important":false}],"specificity":[0,1,0],"order":11,"isHover":false,"matchSelector":null},{"selector":".pass-white-vignette","declarations":[{"prop":"width","value":"820px","important":false},{"prop":"height","value":"540px","important":false},{"prop":"background","value":"radial-gradient(ellipse,rgba(255,255,255,0.35),transparent 70%)","important":false}],"specificity":[0,1,0],"order":12,"isHover":false,"matchSelector":null},{"selector":".pass-rich-composition","declarations":[{"prop":"width","value":"800px","important":false},{"prop":"height","value":"520px","important":false},{"prop":"background","value":"radial-gradient(circle,#ff0080 0%,#7928ca 45%,#0070f3 100%)","important":false}],"specificity":[0,1,0],"order":13,"isHover":false,"matchSelector":null},{"selector":".pass-rich-transparent","declarations":[{"prop":"width","value":"780px","important":false},{"prop":"height","value":"500px","important":false},{"prop":"background","value":"radial-gradient(circle,rgba(255,0,128,0.90) 0%,rgba(121,40,202,0.85) 50%,transparent)","important":false}],"specificity":[0,1,0],"order":14,"isHover":false,"matchSelector":null},{"selector":".pass-opaque-center","declarations":[{"prop":"width","value":"800px","important":false},{"prop":"height","value":"520px","important":false},{"prop":"background","value":"radial-gradient(circle,rgba(80,111,255,0.85),transparent)","important":false}],"specificity":[0,1,0],"order":15,"isHover":false,"matchSelector":null},{"selector":".pass-linear-wash","declarations":[{"prop":"width","value":"800px","important":false},{"prop":"height","value":"520px","important":false},{"prop":"background","value":"linear-gradient(120deg,rgba(80,111,255,0.28),transparent 60%)","important":false}],"specificity":[0,1,0],"order":16,"isHover":false,"matchSelector":null}],"unwrapped":"\n /* jsdom / static-html engine does no layout: every case declares explicit\n pixel width + height so the size gate can read them. */\n body { margin: 0; background: #0b0d13; }\n .grid { display: flex; flex-wrap: wrap; gap: 24px; padding: 24px; }\n .case { color: #e6e6e6; }\n\n /* ───────── SHOULD FLAG: decorative low-opacity chromatic spotlights ───────── */\n\n /* The exact declaration that evaded the detector: soft blue spotlight fading\n to transparent, painted on a large mobile hero. */\n .flag-hero-blue {\n width: 360px; height: 560px;\n background: radial-gradient(circle at 52% 38%, rgba(80,111,255,0.26), transparent 44%);\n }\n /* Violet accent wash on a full section. */\n .flag-section-violet {\n width: 900px; height: 600px;\n background-image: radial-gradient(circle, rgba(139,92,246,0.30), transparent 60%);\n }\n /* Cyan overlay-style glow (the pseudo-element overlay div reflex). */\n .flag-overlay-cyan {\n width: 760px; height: 480px;\n background: radial-gradient(ellipse at top, rgba(34,211,238,0.22), transparent 70%);\n }\n /* Single glow drawn with two low-alpha stops of one hue fading out. */\n .flag-two-stop-rose {\n width: 640px; height: 400px;\n background: radial-gradient(circle, rgba(255,90,120,0.28) 0%, rgba(255,90,120,0.12) 45%, transparent 75%);\n }\n /* Same tell written as an 8-digit hex (#506fff at alpha 0x3d ≈ 0.24). */\n .flag-hex-alpha {\n width: 700px; height: 460px;\n background: radial-gradient(circle, #506fff3d, transparent 50%);\n }\n\n /* ───────── SHOULD PASS: real backgrounds, small elements, neutrals, rich art ───────── */\n\n /* Opaque radial background — a real surface, not a glow (no transparent end). */\n .pass-opaque-bg {\n width: 800px; height: 520px;\n background: radial-gradient(circle, #1e3a8a, #0f172a);\n }\n /* Small badge: chromatic low-alpha radial glow, but tiny. */\n .pass-badge {\n width: 40px; height: 40px;\n background: radial-gradient(circle, rgba(80,111,255,0.30), transparent);\n }\n /* Avatar-scale light: the subject IS a small light, exempt by size. */\n .pass-avatar-light {\n width: 72px; height: 72px;\n background: radial-gradient(circle, rgba(255,196,64,0.35), transparent 70%);\n }\n /* Neutral near-black vignette — grayscale, not the accent-glow tell. */\n .pass-neutral-vignette {\n width: 800px; height: 520px;\n background: radial-gradient(circle, rgba(0,0,0,0.40), transparent 80%);\n }\n /* Neutral near-white vignette — grayscale, exempt. */\n .pass-white-vignette {\n width: 820px; height: 540px;\n background: radial-gradient(ellipse, rgba(255,255,255,0.35), transparent 70%);\n }\n /* Rich three-color radial composition — real color structure, opaque, no fade. */\n .pass-rich-composition {\n width: 800px; height: 520px;\n background: radial-gradient(circle, #ff0080 0%, #7928ca 45%, #0070f3 100%);\n }\n /* Rich composition that does fade out, but its color stops are opaque. */\n .pass-rich-transparent {\n width: 780px; height: 500px;\n background: radial-gradient(circle, rgba(255,0,128,0.90) 0%, rgba(121,40,202,0.85) 50%, transparent);\n }\n /* Opaque center glow (the radial-halo case, alpha ≥ 0.45) — not this rule. */\n .pass-opaque-center {\n width: 800px; height: 520px;\n background: radial-gradient(circle, rgba(80,111,255,0.85), transparent);\n }\n /* Low-alpha chromatic wash, but LINEAR, not radial. */\n .pass-linear-wash {\n width: 800px; height: 520px;\n background: linear-gradient(120deg, rgba(80,111,255,0.28), transparent 60%);\n }\n"},{"name":"tests/fixtures/antipatterns/repeated-container-text.html","css":"\n body {\n font-family: Georgia, serif;\n font-size: 16px;\n margin: 0;\n padding: 40px;\n background: #f5f5f4;\n color: #222222;\n }\n .card {\n background: #ffffff;\n border: 1px solid #d6d3d1;\n border-radius: 10px;\n padding: 20px;\n width: 360px;\n margin-bottom: 32px;\n }\n .shadow-card {\n background: #ffffff;\n border-radius: 10px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.12);\n padding: 20px;\n width: 360px;\n margin-bottom: 32px;\n }\n h2 { font-size: 22px; margin: 0 0 10px; }\n .big-word { font-size: 30px; font-weight: 700; color: #b91c1c; }\n .tag { font-size: 12px; text-transform: uppercase; color: #b91c1c; }\n .row { padding: 6px 0; border-bottom: 1px solid #eeeeee; }\n .status { font-size: 13px; color: #57534e; }\n td, th { padding: 6px 10px; font-size: 14px; }\n ","rules":[{"selector":"body","declarations":[{"prop":"font-family","value":"Georgia,serif","important":false},{"prop":"font-size","value":"16px","important":false},{"prop":"margin","value":"0","important":false},{"prop":"padding","value":"40px","important":false},{"prop":"background","value":"#f5f5f4","important":false},{"prop":"color","value":"#222222","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":".card","declarations":[{"prop":"background","value":"#ffffff","important":false},{"prop":"border","value":"1px solid #d6d3d1","important":false},{"prop":"border-radius","value":"10px","important":false},{"prop":"padding","value":"20px","important":false},{"prop":"width","value":"360px","important":false},{"prop":"margin-bottom","value":"32px","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null},{"selector":".shadow-card","declarations":[{"prop":"background","value":"#ffffff","important":false},{"prop":"border-radius","value":"10px","important":false},{"prop":"box-shadow","value":"0 2px 8px rgba(0,0,0,0.12)","important":false},{"prop":"padding","value":"20px","important":false},{"prop":"width","value":"360px","important":false},{"prop":"margin-bottom","value":"32px","important":false}],"specificity":[0,1,0],"order":2,"isHover":false,"matchSelector":null},{"selector":"h2","declarations":[{"prop":"font-size","value":"22px","important":false},{"prop":"margin","value":"0 0 10px","important":false}],"specificity":[0,0,1],"order":3,"isHover":false,"matchSelector":null},{"selector":".big-word","declarations":[{"prop":"font-size","value":"30px","important":false},{"prop":"font-weight","value":"700","important":false},{"prop":"color","value":"#b91c1c","important":false}],"specificity":[0,1,0],"order":4,"isHover":false,"matchSelector":null},{"selector":".tag","declarations":[{"prop":"font-size","value":"12px","important":false},{"prop":"text-transform","value":"uppercase","important":false},{"prop":"color","value":"#b91c1c","important":false}],"specificity":[0,1,0],"order":5,"isHover":false,"matchSelector":null},{"selector":".row","declarations":[{"prop":"padding","value":"6px 0","important":false},{"prop":"border-bottom","value":"1px solid #eeeeee","important":false}],"specificity":[0,1,0],"order":6,"isHover":false,"matchSelector":null},{"selector":".status","declarations":[{"prop":"font-size","value":"13px","important":false},{"prop":"color","value":"#57534e","important":false}],"specificity":[0,1,0],"order":7,"isHover":false,"matchSelector":null},{"selector":"td","declarations":[{"prop":"padding","value":"6px 10px","important":false},{"prop":"font-size","value":"14px","important":false}],"specificity":[0,0,1],"order":8,"isHover":false,"matchSelector":null},{"selector":"th","declarations":[{"prop":"padding","value":"6px 10px","important":false},{"prop":"font-size","value":"14px","important":false}],"specificity":[0,0,1],"order":9,"isHover":false,"matchSelector":null}],"unwrapped":"\n body {\n font-family: Georgia, serif;\n font-size: 16px;\n margin: 0;\n padding: 40px;\n background: #f5f5f4;\n color: #222222;\n }\n .card {\n background: #ffffff;\n border: 1px solid #d6d3d1;\n border-radius: 10px;\n padding: 20px;\n width: 360px;\n margin-bottom: 32px;\n }\n .shadow-card {\n background: #ffffff;\n border-radius: 10px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.12);\n padding: 20px;\n width: 360px;\n margin-bottom: 32px;\n }\n h2 { font-size: 22px; margin: 0 0 10px; }\n .big-word { font-size: 30px; font-weight: 700; color: #b91c1c; }\n .tag { font-size: 12px; text-transform: uppercase; color: #b91c1c; }\n .row { padding: 6px 0; border-bottom: 1px solid #eeeeee; }\n .status { font-size: 13px; color: #57534e; }\n td, th { padding: 6px 10px; font-size: 14px; }\n "},{"name":"tests/fixtures/antipatterns/reveal-working.html","css":"\n html { scroll-behavior: smooth; }\n body { font-family: system-ui, sans-serif; margin: 0; color: #1a1a1a; background: #fff; }\n main { max-width: 640px; margin: 0 auto; padding: 32px 24px; }\n section { margin: 0 0 480px; }\n .reveal { opacity: 0; transform: translateY(14px); transition: opacity 0.4s ease-out, transform 0.4s ease-out; }\n .reveal.in-view { opacity: 1; transform: none; }\n .menu { display: none; }\n ","rules":[{"selector":"html","declarations":[{"prop":"scroll-behavior","value":"smooth","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":"body","declarations":[{"prop":"font-family","value":"system-ui,sans-serif","important":false},{"prop":"margin","value":"0","important":false},{"prop":"color","value":"#1a1a1a","important":false},{"prop":"background","value":"#fff","important":false}],"specificity":[0,0,1],"order":1,"isHover":false,"matchSelector":null},{"selector":"main","declarations":[{"prop":"max-width","value":"640px","important":false},{"prop":"margin","value":"0 auto","important":false},{"prop":"padding","value":"32px 24px","important":false}],"specificity":[0,0,1],"order":2,"isHover":false,"matchSelector":null},{"selector":"section","declarations":[{"prop":"margin","value":"0 0 480px","important":false}],"specificity":[0,0,1],"order":3,"isHover":false,"matchSelector":null},{"selector":".reveal","declarations":[{"prop":"opacity","value":"0","important":false},{"prop":"transform","value":"translateY(14px)","important":false},{"prop":"transition","value":"opacity 0.4s ease-out,transform 0.4s ease-out","important":false}],"specificity":[0,1,0],"order":4,"isHover":false,"matchSelector":null},{"selector":".reveal.in-view","declarations":[{"prop":"opacity","value":"1","important":false},{"prop":"transform","value":"none","important":false}],"specificity":[0,2,0],"order":5,"isHover":false,"matchSelector":null},{"selector":".menu","declarations":[{"prop":"display","value":"none","important":false}],"specificity":[0,1,0],"order":6,"isHover":false,"matchSelector":null}],"unwrapped":"\n html { scroll-behavior: smooth; }\n body { font-family: system-ui, sans-serif; margin: 0; color: #1a1a1a; background: #fff; }\n main { max-width: 640px; margin: 0 auto; padding: 32px 24px; }\n section { margin: 0 0 480px; }\n .reveal { opacity: 0; transform: translateY(14px); transition: opacity 0.4s ease-out, transform 0.4s ease-out; }\n .reveal.in-view { opacity: 1; transform: none; }\n .menu { display: none; }\n "},{"name":"tests/fixtures/antipatterns/scoped-ignore.html","css":"\n body { margin: 0; padding: 40px; background: #faf8f4; font-family: Arial, sans-serif; color: #262421; }\n /* Every case carries a UNIQUE border-left width so each finding's snippet\n (`border-left: Npx`) attributes to exactly one case. Flag widths: 5, 6,\n 8, 12. Pass widths: 4, 7, 9, 10, 11. */\n .tabbed {\n width: 420px;\n padding: 16px 20px;\n margin: 0 0 24px;\n background: #ffffff;\n border: 1px solid #ddd8d0;\n border-left: 6px solid #b8422e;\n }\n .w4 { border-left-width: 4px; }\n .w5 { border-left-width: 5px; }\n .w7 { border-left-width: 7px; }\n .w8 { border-left-width: 8px; }\n .w9 { border-left-width: 9px; }\n .w10 { border-left-width: 10px; }\n .w11 { border-left-width: 11px; }\n .w12 { border-left-width: 12px; }\n /* Marquee specimen: keyframes + an infinite loop track. The section that\n hosts it carries a marquee waiver; the CSS-scan finding must resolve the\n selector to the live element and honor the ancestor attribute. */\n @keyframes ticker-loop { from { transform: translateX(0); } to { transform: translateX(-50%); } }\n .quote-track { display: flex; width: max-content; animation: ticker-loop 80s linear infinite; }\n .quote-track span { padding: 8px 16px; }\n /* Dead grid CSS: this two-axis hairline grid selector matches nothing on\n this page, so the browser pass must drop the codex-grid finding — the\n pattern never renders here. */\n .never-rendered-grid {\n background:\n linear-gradient(90deg, rgba(200,180,120,0.08) 1px, transparent 1px),\n linear-gradient(180deg, rgba(200,180,120,0.08) 1px, transparent 1px);\n background-size: 24px 24px;\n }\n /* Overshoot bezier inside a keyframe STEP: enclosingCssSelector must refuse\n `to` as a selector (it would match nothing and wrongly drop the finding),\n so this bounce-easing finding stays page-level and is retained. */\n @keyframes springy {\n from { transform: none; }\n to { transform: translateY(-4px); animation-timing-function: cubic-bezier(0.3, 1.8, 0.6, 1); }\n }\n","rules":[{"selector":"body","declarations":[{"prop":"margin","value":"0","important":false},{"prop":"padding","value":"40px","important":false},{"prop":"background","value":"#faf8f4","important":false},{"prop":"font-family","value":"Arial,sans-serif","important":false},{"prop":"color","value":"#262421","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":".tabbed","declarations":[{"prop":"width","value":"420px","important":false},{"prop":"padding","value":"16px 20px","important":false},{"prop":"margin","value":"0 0 24px","important":false},{"prop":"background","value":"#ffffff","important":false},{"prop":"border","value":"1px solid #ddd8d0","important":false},{"prop":"border-left","value":"6px solid #b8422e","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null},{"selector":".w4","declarations":[{"prop":"border-left-width","value":"4px","important":false}],"specificity":[0,1,0],"order":2,"isHover":false,"matchSelector":null},{"selector":".w5","declarations":[{"prop":"border-left-width","value":"5px","important":false}],"specificity":[0,1,0],"order":3,"isHover":false,"matchSelector":null},{"selector":".w7","declarations":[{"prop":"border-left-width","value":"7px","important":false}],"specificity":[0,1,0],"order":4,"isHover":false,"matchSelector":null},{"selector":".w8","declarations":[{"prop":"border-left-width","value":"8px","important":false}],"specificity":[0,1,0],"order":5,"isHover":false,"matchSelector":null},{"selector":".w9","declarations":[{"prop":"border-left-width","value":"9px","important":false}],"specificity":[0,1,0],"order":6,"isHover":false,"matchSelector":null},{"selector":".w10","declarations":[{"prop":"border-left-width","value":"10px","important":false}],"specificity":[0,1,0],"order":7,"isHover":false,"matchSelector":null},{"selector":".w11","declarations":[{"prop":"border-left-width","value":"11px","important":false}],"specificity":[0,1,0],"order":8,"isHover":false,"matchSelector":null},{"selector":".w12","declarations":[{"prop":"border-left-width","value":"12px","important":false}],"specificity":[0,1,0],"order":9,"isHover":false,"matchSelector":null},{"selector":".quote-track","declarations":[{"prop":"display","value":"flex","important":false},{"prop":"width","value":"max-content","important":false},{"prop":"animation","value":"ticker-loop 80s linear infinite","important":false}],"specificity":[0,1,0],"order":10,"isHover":false,"matchSelector":null},{"selector":".quote-track span","declarations":[{"prop":"padding","value":"8px 16px","important":false}],"specificity":[0,1,1],"order":11,"isHover":false,"matchSelector":null},{"selector":".never-rendered-grid","declarations":[{"prop":"background","value":"linear-gradient(90deg,rgba(200,180,120,0.08) 1px,transparent 1px),linear-gradient(180deg,rgba(200,180,120,0.08) 1px,transparent 1px)","important":false},{"prop":"background-size","value":"24px 24px","important":false}],"specificity":[0,1,0],"order":12,"isHover":false,"matchSelector":null}],"unwrapped":"\n body { margin: 0; padding: 40px; background: #faf8f4; font-family: Arial, sans-serif; color: #262421; }\n /* Every case carries a UNIQUE border-left width so each finding's snippet\n (`border-left: Npx`) attributes to exactly one case. Flag widths: 5, 6,\n 8, 12. Pass widths: 4, 7, 9, 10, 11. */\n .tabbed {\n width: 420px;\n padding: 16px 20px;\n margin: 0 0 24px;\n background: #ffffff;\n border: 1px solid #ddd8d0;\n border-left: 6px solid #b8422e;\n }\n .w4 { border-left-width: 4px; }\n .w5 { border-left-width: 5px; }\n .w7 { border-left-width: 7px; }\n .w8 { border-left-width: 8px; }\n .w9 { border-left-width: 9px; }\n .w10 { border-left-width: 10px; }\n .w11 { border-left-width: 11px; }\n .w12 { border-left-width: 12px; }\n /* Marquee specimen: keyframes + an infinite loop track. The section that\n hosts it carries a marquee waiver; the CSS-scan finding must resolve the\n selector to the live element and honor the ancestor attribute. */\n @keyframes ticker-loop { from { transform: translateX(0); } to { transform: translateX(-50%); } }\n .quote-track { display: flex; width: max-content; animation: ticker-loop 80s linear infinite; }\n .quote-track span { padding: 8px 16px; }\n /* Dead grid CSS: this two-axis hairline grid selector matches nothing on\n this page, so the browser pass must drop the codex-grid finding — the\n pattern never renders here. */\n .never-rendered-grid {\n background:\n linear-gradient(90deg, rgba(200,180,120,0.08) 1px, transparent 1px),\n linear-gradient(180deg, rgba(200,180,120,0.08) 1px, transparent 1px);\n background-size: 24px 24px;\n }\n /* Overshoot bezier inside a keyframe STEP: enclosingCssSelector must refuse\n `to` as a selector (it would match nothing and wrongly drop the finding),\n so this bounce-easing finding stays page-level and is retained. */\n @keyframes springy {\n from { transform: none; }\n to { transform: translateY(-4px); animation-timing-function: cubic-bezier(0.3, 1.8, 0.6, 1); }\n }\n"},{"name":"tests/fixtures/antipatterns/script-error.html","css":"\n html { scroll-behavior: smooth; }\n body { font-family: system-ui, sans-serif; margin: 0; color: #1a1a1a; background: #fff; }\n main { max-width: 640px; margin: 0 auto; padding: 32px 24px; }\n section { margin: 0 0 480px; }\n .reveal { opacity: 0; transform: translateY(14px); transition: opacity 0.4s ease-out, transform 0.4s ease-out; }\n .reveal.in-view { opacity: 1; transform: none; }\n ","rules":[{"selector":"html","declarations":[{"prop":"scroll-behavior","value":"smooth","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":"body","declarations":[{"prop":"font-family","value":"system-ui,sans-serif","important":false},{"prop":"margin","value":"0","important":false},{"prop":"color","value":"#1a1a1a","important":false},{"prop":"background","value":"#fff","important":false}],"specificity":[0,0,1],"order":1,"isHover":false,"matchSelector":null},{"selector":"main","declarations":[{"prop":"max-width","value":"640px","important":false},{"prop":"margin","value":"0 auto","important":false},{"prop":"padding","value":"32px 24px","important":false}],"specificity":[0,0,1],"order":2,"isHover":false,"matchSelector":null},{"selector":"section","declarations":[{"prop":"margin","value":"0 0 480px","important":false}],"specificity":[0,0,1],"order":3,"isHover":false,"matchSelector":null},{"selector":".reveal","declarations":[{"prop":"opacity","value":"0","important":false},{"prop":"transform","value":"translateY(14px)","important":false},{"prop":"transition","value":"opacity 0.4s ease-out,transform 0.4s ease-out","important":false}],"specificity":[0,1,0],"order":4,"isHover":false,"matchSelector":null},{"selector":".reveal.in-view","declarations":[{"prop":"opacity","value":"1","important":false},{"prop":"transform","value":"none","important":false}],"specificity":[0,2,0],"order":5,"isHover":false,"matchSelector":null}],"unwrapped":"\n html { scroll-behavior: smooth; }\n body { font-family: system-ui, sans-serif; margin: 0; color: #1a1a1a; background: #fff; }\n main { max-width: 640px; margin: 0 auto; padding: 32px 24px; }\n section { margin: 0 0 480px; }\n .reveal { opacity: 0; transform: translateY(14px); transition: opacity 0.4s ease-out, transform 0.4s ease-out; }\n .reveal.in-view { opacity: 1; transform: none; }\n "},{"name":"tests/fixtures/antipatterns/shadowed-form-id.html","css":"\n body { font-family: system-ui, sans-serif; background: #ffffff; color: #1a1a1a; margin: 0; padding: 24px; }\n .product { max-width: 640px; margin: 0 auto; }\n h1 { font-size: 28px; margin: 0 0 12px; }\n .price { font-size: 20px; font-weight: 600; }\n form { margin-top: 16px; }\n .add-to-cart { background: #1a1a1a; color: #ffffff; border: 0; padding: 12px 24px; border-radius: 6px; font-size: 16px; cursor: pointer; }\n label { display: block; margin: 8px 0 4px; font-size: 14px; }\n select, input[type=\"number\"] { padding: 8px; font-size: 14px; }\n","rules":[{"selector":"body","declarations":[{"prop":"font-family","value":"system-ui,sans-serif","important":false},{"prop":"background","value":"#ffffff","important":false},{"prop":"color","value":"#1a1a1a","important":false},{"prop":"margin","value":"0","important":false},{"prop":"padding","value":"24px","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":".product","declarations":[{"prop":"max-width","value":"640px","important":false},{"prop":"margin","value":"0 auto","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null},{"selector":"h1","declarations":[{"prop":"font-size","value":"28px","important":false},{"prop":"margin","value":"0 0 12px","important":false}],"specificity":[0,0,1],"order":2,"isHover":false,"matchSelector":null},{"selector":".price","declarations":[{"prop":"font-size","value":"20px","important":false},{"prop":"font-weight","value":"600","important":false}],"specificity":[0,1,0],"order":3,"isHover":false,"matchSelector":null},{"selector":"form","declarations":[{"prop":"margin-top","value":"16px","important":false}],"specificity":[0,0,1],"order":4,"isHover":false,"matchSelector":null},{"selector":".add-to-cart","declarations":[{"prop":"background","value":"#1a1a1a","important":false},{"prop":"color","value":"#ffffff","important":false},{"prop":"border","value":"0","important":false},{"prop":"padding","value":"12px 24px","important":false},{"prop":"border-radius","value":"6px","important":false},{"prop":"font-size","value":"16px","important":false},{"prop":"cursor","value":"pointer","important":false}],"specificity":[0,1,0],"order":5,"isHover":false,"matchSelector":null},{"selector":"label","declarations":[{"prop":"display","value":"block","important":false},{"prop":"margin","value":"8px 0 4px","important":false},{"prop":"font-size","value":"14px","important":false}],"specificity":[0,0,1],"order":6,"isHover":false,"matchSelector":null},{"selector":"select","declarations":[{"prop":"padding","value":"8px","important":false},{"prop":"font-size","value":"14px","important":false}],"specificity":[0,0,1],"order":7,"isHover":false,"matchSelector":null},{"selector":"input[type=\"number\"]","declarations":[{"prop":"padding","value":"8px","important":false},{"prop":"font-size","value":"14px","important":false}],"specificity":[0,1,1],"order":8,"isHover":false,"matchSelector":null}],"unwrapped":"\n body { font-family: system-ui, sans-serif; background: #ffffff; color: #1a1a1a; margin: 0; padding: 24px; }\n .product { max-width: 640px; margin: 0 auto; }\n h1 { font-size: 28px; margin: 0 0 12px; }\n .price { font-size: 20px; font-weight: 600; }\n form { margin-top: 16px; }\n .add-to-cart { background: #1a1a1a; color: #ffffff; border: 0; padding: 12px 24px; border-radius: 6px; font-size: 16px; cursor: pointer; }\n label { display: block; margin: 8px 0 4px; font-size: 14px; }\n select, input[type=\"number\"] { padding: 8px; font-size: 14px; }\n"},{"name":"tests/fixtures/antipatterns/should-flag.html","css":"\n body { font-family: system-ui, sans-serif; background: #f9fafb; padding: 2rem; }\n h1 { font-size: 2rem; margin-bottom: 0.5rem; }\n h2 { font-size: 0.875rem; margin: 2.5rem 0 0.75rem; color: #4b5563; border-bottom: 1px solid #e5e7eb; padding-bottom: 0.5rem; text-transform: uppercase; letter-spacing: 0.08em; }\n p.intro { color: #6b7280; margin-bottom: 2rem; max-width: 36rem; }\n .cards { display: grid; gap: 1rem; max-width: 28rem; }\n .card { background: white; padding: 1rem; border-radius: 0.375rem; box-shadow: 0 1px 3px rgba(0,0,0,0.1); }\n .card h3 { font-weight: 600; color: #111827; font-size: 0.875rem; }\n .card p { font-size: 0.8125rem; color: #6b7280; margin-top: 0.25rem; }\n\n /* CSS side-tab variants */\n .card-shorthand-left { border-left: 4px solid #3b82f6; }\n .card-shorthand-right { border-right: 5px solid #8b5cf6; }\n .card-longhand-left { border-left-width: 3px; border-left-style: solid; border-left-color: #10b981; }\n .card-longhand-right { border-right-width: 6px; border-right-style: solid; border-right-color: #ef4444; }\n\n /* CSS top/bottom + border-radius */\n .card-css-top { border-radius: 12px; border-top: 4px solid #3b82f6; }\n .card-css-bottom { border-radius: 12px; border-bottom: 3px solid #8b5cf6; }\n ","rules":[{"selector":"body","declarations":[{"prop":"font-family","value":"system-ui,sans-serif","important":false},{"prop":"background","value":"#f9fafb","important":false},{"prop":"padding","value":"2rem","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":"h1","declarations":[{"prop":"font-size","value":"2rem","important":false},{"prop":"margin-bottom","value":"0.5rem","important":false}],"specificity":[0,0,1],"order":1,"isHover":false,"matchSelector":null},{"selector":"h2","declarations":[{"prop":"font-size","value":"0.875rem","important":false},{"prop":"margin","value":"2.5rem 0 0.75rem","important":false},{"prop":"color","value":"#4b5563","important":false},{"prop":"border-bottom","value":"1px solid #e5e7eb","important":false},{"prop":"padding-bottom","value":"0.5rem","important":false},{"prop":"text-transform","value":"uppercase","important":false},{"prop":"letter-spacing","value":"0.08em","important":false}],"specificity":[0,0,1],"order":2,"isHover":false,"matchSelector":null},{"selector":"p.intro","declarations":[{"prop":"color","value":"#6b7280","important":false},{"prop":"margin-bottom","value":"2rem","important":false},{"prop":"max-width","value":"36rem","important":false}],"specificity":[0,1,1],"order":3,"isHover":false,"matchSelector":null},{"selector":".cards","declarations":[{"prop":"display","value":"grid","important":false},{"prop":"gap","value":"1rem","important":false},{"prop":"max-width","value":"28rem","important":false}],"specificity":[0,1,0],"order":4,"isHover":false,"matchSelector":null},{"selector":".card","declarations":[{"prop":"background","value":"white","important":false},{"prop":"padding","value":"1rem","important":false},{"prop":"border-radius","value":"0.375rem","important":false},{"prop":"box-shadow","value":"0 1px 3px rgba(0,0,0,0.1)","important":false}],"specificity":[0,1,0],"order":5,"isHover":false,"matchSelector":null},{"selector":".card h3","declarations":[{"prop":"font-weight","value":"600","important":false},{"prop":"color","value":"#111827","important":false},{"prop":"font-size","value":"0.875rem","important":false}],"specificity":[0,1,1],"order":6,"isHover":false,"matchSelector":null},{"selector":".card p","declarations":[{"prop":"font-size","value":"0.8125rem","important":false},{"prop":"color","value":"#6b7280","important":false},{"prop":"margin-top","value":"0.25rem","important":false}],"specificity":[0,1,1],"order":7,"isHover":false,"matchSelector":null},{"selector":".card-shorthand-left","declarations":[{"prop":"border-left","value":"4px solid #3b82f6","important":false}],"specificity":[0,1,0],"order":8,"isHover":false,"matchSelector":null},{"selector":".card-shorthand-right","declarations":[{"prop":"border-right","value":"5px solid #8b5cf6","important":false}],"specificity":[0,1,0],"order":9,"isHover":false,"matchSelector":null},{"selector":".card-longhand-left","declarations":[{"prop":"border-left-width","value":"3px","important":false},{"prop":"border-left-style","value":"solid","important":false},{"prop":"border-left-color","value":"#10b981","important":false}],"specificity":[0,1,0],"order":10,"isHover":false,"matchSelector":null},{"selector":".card-longhand-right","declarations":[{"prop":"border-right-width","value":"6px","important":false},{"prop":"border-right-style","value":"solid","important":false},{"prop":"border-right-color","value":"#ef4444","important":false}],"specificity":[0,1,0],"order":11,"isHover":false,"matchSelector":null},{"selector":".card-css-top","declarations":[{"prop":"border-radius","value":"12px","important":false},{"prop":"border-top","value":"4px solid #3b82f6","important":false}],"specificity":[0,1,0],"order":12,"isHover":false,"matchSelector":null},{"selector":".card-css-bottom","declarations":[{"prop":"border-radius","value":"12px","important":false},{"prop":"border-bottom","value":"3px solid #8b5cf6","important":false}],"specificity":[0,1,0],"order":13,"isHover":false,"matchSelector":null}],"unwrapped":"\n body { font-family: system-ui, sans-serif; background: #f9fafb; padding: 2rem; }\n h1 { font-size: 2rem; margin-bottom: 0.5rem; }\n h2 { font-size: 0.875rem; margin: 2.5rem 0 0.75rem; color: #4b5563; border-bottom: 1px solid #e5e7eb; padding-bottom: 0.5rem; text-transform: uppercase; letter-spacing: 0.08em; }\n p.intro { color: #6b7280; margin-bottom: 2rem; max-width: 36rem; }\n .cards { display: grid; gap: 1rem; max-width: 28rem; }\n .card { background: white; padding: 1rem; border-radius: 0.375rem; box-shadow: 0 1px 3px rgba(0,0,0,0.1); }\n .card h3 { font-weight: 600; color: #111827; font-size: 0.875rem; }\n .card p { font-size: 0.8125rem; color: #6b7280; margin-top: 0.25rem; }\n\n /* CSS side-tab variants */\n .card-shorthand-left { border-left: 4px solid #3b82f6; }\n .card-shorthand-right { border-right: 5px solid #8b5cf6; }\n .card-longhand-left { border-left-width: 3px; border-left-style: solid; border-left-color: #10b981; }\n .card-longhand-right { border-right-width: 6px; border-right-style: solid; border-right-color: #ef4444; }\n\n /* CSS top/bottom + border-radius */\n .card-css-top { border-radius: 12px; border-top: 4px solid #3b82f6; }\n .card-css-bottom { border-radius: 12px; border-bottom: 3px solid #8b5cf6; }\n "},{"name":"tests/fixtures/antipatterns/should-pass.html","css":"\n body { font-family: system-ui, sans-serif; background: #f9fafb; padding: 2rem; }\n h1 { font-size: 1.5rem; margin-bottom: 0.5rem; }\n h2 { font-size: 1.125rem; margin: 2.5rem 0 0.75rem; color: #6b7280; border-bottom: 1px solid #e5e7eb; padding-bottom: 0.5rem; }\n p.intro { color: #6b7280; margin-bottom: 2rem; max-width: 36rem; }\n .section { max-width: 28rem; }\n .card-rounded { background: white; padding: 1.5rem; border-radius: 0.5rem; box-shadow: 0 1px 3px rgba(0,0,0,0.1); max-width: 28rem; margin-bottom: 1rem; }\n .card-rounded h3 { font-weight: 600; color: #111827; }\n .card-rounded p { font-size: 0.875rem; color: #6b7280; margin-top: 0.25rem; }\n .card-flat { background: white; padding: 1rem; box-shadow: 0 1px 3px rgba(0,0,0,0.1); max-width: 28rem; margin-bottom: 1rem; }\n .badge { display: inline-block; font-size: 0.75rem; padding: 0.125rem 0.5rem; border-radius: 9999px; background: #dbeafe; color: #1d4ed8; }\n\n /* Below-threshold side borders without radius */\n .thin-left { border-left: 1px solid #3b82f6; }\n .thin-right { border-right: 2px solid #8b5cf6; }\n ","rules":[{"selector":"body","declarations":[{"prop":"font-family","value":"system-ui,sans-serif","important":false},{"prop":"background","value":"#f9fafb","important":false},{"prop":"padding","value":"2rem","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":"h1","declarations":[{"prop":"font-size","value":"1.5rem","important":false},{"prop":"margin-bottom","value":"0.5rem","important":false}],"specificity":[0,0,1],"order":1,"isHover":false,"matchSelector":null},{"selector":"h2","declarations":[{"prop":"font-size","value":"1.125rem","important":false},{"prop":"margin","value":"2.5rem 0 0.75rem","important":false},{"prop":"color","value":"#6b7280","important":false},{"prop":"border-bottom","value":"1px solid #e5e7eb","important":false},{"prop":"padding-bottom","value":"0.5rem","important":false}],"specificity":[0,0,1],"order":2,"isHover":false,"matchSelector":null},{"selector":"p.intro","declarations":[{"prop":"color","value":"#6b7280","important":false},{"prop":"margin-bottom","value":"2rem","important":false},{"prop":"max-width","value":"36rem","important":false}],"specificity":[0,1,1],"order":3,"isHover":false,"matchSelector":null},{"selector":".section","declarations":[{"prop":"max-width","value":"28rem","important":false}],"specificity":[0,1,0],"order":4,"isHover":false,"matchSelector":null},{"selector":".card-rounded","declarations":[{"prop":"background","value":"white","important":false},{"prop":"padding","value":"1.5rem","important":false},{"prop":"border-radius","value":"0.5rem","important":false},{"prop":"box-shadow","value":"0 1px 3px rgba(0,0,0,0.1)","important":false},{"prop":"max-width","value":"28rem","important":false},{"prop":"margin-bottom","value":"1rem","important":false}],"specificity":[0,1,0],"order":5,"isHover":false,"matchSelector":null},{"selector":".card-rounded h3","declarations":[{"prop":"font-weight","value":"600","important":false},{"prop":"color","value":"#111827","important":false}],"specificity":[0,1,1],"order":6,"isHover":false,"matchSelector":null},{"selector":".card-rounded p","declarations":[{"prop":"font-size","value":"0.875rem","important":false},{"prop":"color","value":"#6b7280","important":false},{"prop":"margin-top","value":"0.25rem","important":false}],"specificity":[0,1,1],"order":7,"isHover":false,"matchSelector":null},{"selector":".card-flat","declarations":[{"prop":"background","value":"white","important":false},{"prop":"padding","value":"1rem","important":false},{"prop":"box-shadow","value":"0 1px 3px rgba(0,0,0,0.1)","important":false},{"prop":"max-width","value":"28rem","important":false},{"prop":"margin-bottom","value":"1rem","important":false}],"specificity":[0,1,0],"order":8,"isHover":false,"matchSelector":null},{"selector":".badge","declarations":[{"prop":"display","value":"inline-block","important":false},{"prop":"font-size","value":"0.75rem","important":false},{"prop":"padding","value":"0.125rem 0.5rem","important":false},{"prop":"border-radius","value":"9999px","important":false},{"prop":"background","value":"#dbeafe","important":false},{"prop":"color","value":"#1d4ed8","important":false}],"specificity":[0,1,0],"order":9,"isHover":false,"matchSelector":null},{"selector":".thin-left","declarations":[{"prop":"border-left","value":"1px solid #3b82f6","important":false}],"specificity":[0,1,0],"order":10,"isHover":false,"matchSelector":null},{"selector":".thin-right","declarations":[{"prop":"border-right","value":"2px solid #8b5cf6","important":false}],"specificity":[0,1,0],"order":11,"isHover":false,"matchSelector":null}],"unwrapped":"\n body { font-family: system-ui, sans-serif; background: #f9fafb; padding: 2rem; }\n h1 { font-size: 1.5rem; margin-bottom: 0.5rem; }\n h2 { font-size: 1.125rem; margin: 2.5rem 0 0.75rem; color: #6b7280; border-bottom: 1px solid #e5e7eb; padding-bottom: 0.5rem; }\n p.intro { color: #6b7280; margin-bottom: 2rem; max-width: 36rem; }\n .section { max-width: 28rem; }\n .card-rounded { background: white; padding: 1.5rem; border-radius: 0.5rem; box-shadow: 0 1px 3px rgba(0,0,0,0.1); max-width: 28rem; margin-bottom: 1rem; }\n .card-rounded h3 { font-weight: 600; color: #111827; }\n .card-rounded p { font-size: 0.875rem; color: #6b7280; margin-top: 0.25rem; }\n .card-flat { background: white; padding: 1rem; box-shadow: 0 1px 3px rgba(0,0,0,0.1); max-width: 28rem; margin-bottom: 1rem; }\n .badge { display: inline-block; font-size: 0.75rem; padding: 0.125rem 0.5rem; border-radius: 9999px; background: #dbeafe; color: #1d4ed8; }\n\n /* Below-threshold side borders without radius */\n .thin-left { border-left: 1px solid #3b82f6; }\n .thin-right { border-right: 2px solid #8b5cf6; }\n "},{"name":"tests/fixtures/antipatterns/text-occlusion.html","css":"\n * { margin: 0; box-sizing: border-box; }\n body { font-family: system-ui, sans-serif; color: #111; background: #fff; }\n section { padding: 40px; position: relative; }\n\n /* ── FLAG 1: opaque box painted over text (>30%) ── */\n .flag-box-wrap { position: relative; height: 120px; }\n .flag-box-text { position: absolute; top: 40px; left: 40px; font-size: 20px; width: 300px; }\n .flag-box-cover { position: absolute; top: 30px; left: 30px; width: 240px; height: 60px;\n background: #1f7a3d; border-radius: 8px; z-index: 5; }\n\n /* ── FLAG 2: inline element with opaque fill + leaked vertical padding ── */\n .flag-leak-host { position: relative; margin-top: 30px; }\n .flag-leak { display: inline; background: #2f8543; padding: 36px; border-radius: 6px; }\n .flag-leak-card { background: #14202b; color: #fff; padding: 24px; border-radius: 6px; }\n\n /* ── FLAG 3: big headline overhanging an opaque card ── */\n .flag-hero { position: relative; height: 220px; }\n .flag-headline { position: absolute; top: 40px; left: 0; font-size: 64px; font-weight: 800;\n width: 760px; color: #b22; white-space: nowrap; }\n .flag-card { position: absolute; top: 20px; left: 700px; width: 360px; height: 180px;\n background: #f4f5f7; border: 1px solid #ddd; box-shadow: 0 2px 8px rgba(0,0,0,.08); border-radius: 8px; }\n\n /* ── PASS: stacked headline with tight leading (line-box bleed, no real overlap) ── */\n .pass-stack { margin-top: 40px; }\n .pass-eyebrow { font-size: 14px; letter-spacing: .1em; text-transform: uppercase; color: #a33; }\n .pass-title { font-size: 96px; line-height: .9; font-weight: 800; }\n\n /* ── PASS: text over image with a scrim, text on top (readable) ── */\n .pass-hero { position: relative; height: 200px; overflow: hidden; border-radius: 8px; }\n .pass-hero img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }\n .pass-hero .scrim { position: absolute; inset: 0; background: linear-gradient(transparent, rgba(0,0,0,.6)); }\n .pass-hero .cap { position: absolute; bottom: 16px; left: 16px; color: #fff; font-size: 24px; z-index: 2; }\n\n /* ── PASS: fixed status bar over content at the fold ── */\n .pass-under { margin-top: 20px; font-size: 16px; }\n /* Invisible interaction layer: an opacity-0 scrubber input stretched over\n text, like a before/after comparison handle. It paints nothing, so it must\n not read as an occluder despite its UA background-color. */\n .pass-scrubber-wrap { position: relative; margin-top: 30px; height: 80px; }\n .pass-scrubber-text { position: absolute; top: 20px; left: 10px; font-size: 20px; width: 320px; }\n .pass-scrubber-input { position: absolute; inset: 0; width: 100%; height: 100%; opacity: 0; z-index: 5; margin: 0; }\n .pass-fixedbar { position: fixed; left: 0; right: 0; bottom: 0; height: 40px; background: #b22;\n color: #fff; display: flex; align-items: center; padding: 0 16px; }\n","rules":[{"selector":"*","declarations":[{"prop":"margin","value":"0","important":false},{"prop":"box-sizing","value":"border-box","important":false}],"specificity":[0,0,0],"order":0,"isHover":false,"matchSelector":null},{"selector":"body","declarations":[{"prop":"font-family","value":"system-ui,sans-serif","important":false},{"prop":"color","value":"#111","important":false},{"prop":"background","value":"#fff","important":false}],"specificity":[0,0,1],"order":1,"isHover":false,"matchSelector":null},{"selector":"section","declarations":[{"prop":"padding","value":"40px","important":false},{"prop":"position","value":"relative","important":false}],"specificity":[0,0,1],"order":2,"isHover":false,"matchSelector":null},{"selector":".flag-box-wrap","declarations":[{"prop":"position","value":"relative","important":false},{"prop":"height","value":"120px","important":false}],"specificity":[0,1,0],"order":3,"isHover":false,"matchSelector":null},{"selector":".flag-box-text","declarations":[{"prop":"position","value":"absolute","important":false},{"prop":"top","value":"40px","important":false},{"prop":"left","value":"40px","important":false},{"prop":"font-size","value":"20px","important":false},{"prop":"width","value":"300px","important":false}],"specificity":[0,1,0],"order":4,"isHover":false,"matchSelector":null},{"selector":".flag-box-cover","declarations":[{"prop":"position","value":"absolute","important":false},{"prop":"top","value":"30px","important":false},{"prop":"left","value":"30px","important":false},{"prop":"width","value":"240px","important":false},{"prop":"height","value":"60px","important":false},{"prop":"background","value":"#1f7a3d","important":false},{"prop":"border-radius","value":"8px","important":false},{"prop":"z-index","value":"5","important":false}],"specificity":[0,1,0],"order":5,"isHover":false,"matchSelector":null},{"selector":".flag-leak-host","declarations":[{"prop":"position","value":"relative","important":false},{"prop":"margin-top","value":"30px","important":false}],"specificity":[0,1,0],"order":6,"isHover":false,"matchSelector":null},{"selector":".flag-leak","declarations":[{"prop":"display","value":"inline","important":false},{"prop":"background","value":"#2f8543","important":false},{"prop":"padding","value":"36px","important":false},{"prop":"border-radius","value":"6px","important":false}],"specificity":[0,1,0],"order":7,"isHover":false,"matchSelector":null},{"selector":".flag-leak-card","declarations":[{"prop":"background","value":"#14202b","important":false},{"prop":"color","value":"#fff","important":false},{"prop":"padding","value":"24px","important":false},{"prop":"border-radius","value":"6px","important":false}],"specificity":[0,1,0],"order":8,"isHover":false,"matchSelector":null},{"selector":".flag-hero","declarations":[{"prop":"position","value":"relative","important":false},{"prop":"height","value":"220px","important":false}],"specificity":[0,1,0],"order":9,"isHover":false,"matchSelector":null},{"selector":".flag-headline","declarations":[{"prop":"position","value":"absolute","important":false},{"prop":"top","value":"40px","important":false},{"prop":"left","value":"0","important":false},{"prop":"font-size","value":"64px","important":false},{"prop":"font-weight","value":"800","important":false},{"prop":"width","value":"760px","important":false},{"prop":"color","value":"#b22","important":false},{"prop":"white-space","value":"nowrap","important":false}],"specificity":[0,1,0],"order":10,"isHover":false,"matchSelector":null},{"selector":".flag-card","declarations":[{"prop":"position","value":"absolute","important":false},{"prop":"top","value":"20px","important":false},{"prop":"left","value":"700px","important":false},{"prop":"width","value":"360px","important":false},{"prop":"height","value":"180px","important":false},{"prop":"background","value":"#f4f5f7","important":false},{"prop":"border","value":"1px solid #ddd","important":false},{"prop":"box-shadow","value":"0 2px 8px rgba(0,0,0,.08)","important":false},{"prop":"border-radius","value":"8px","important":false}],"specificity":[0,1,0],"order":11,"isHover":false,"matchSelector":null},{"selector":".pass-stack","declarations":[{"prop":"margin-top","value":"40px","important":false}],"specificity":[0,1,0],"order":12,"isHover":false,"matchSelector":null},{"selector":".pass-eyebrow","declarations":[{"prop":"font-size","value":"14px","important":false},{"prop":"letter-spacing","value":".1em","important":false},{"prop":"text-transform","value":"uppercase","important":false},{"prop":"color","value":"#a33","important":false}],"specificity":[0,1,0],"order":13,"isHover":false,"matchSelector":null},{"selector":".pass-title","declarations":[{"prop":"font-size","value":"96px","important":false},{"prop":"line-height","value":".9","important":false},{"prop":"font-weight","value":"800","important":false}],"specificity":[0,1,0],"order":14,"isHover":false,"matchSelector":null},{"selector":".pass-hero","declarations":[{"prop":"position","value":"relative","important":false},{"prop":"height","value":"200px","important":false},{"prop":"overflow","value":"hidden","important":false},{"prop":"border-radius","value":"8px","important":false}],"specificity":[0,1,0],"order":15,"isHover":false,"matchSelector":null},{"selector":".pass-hero img","declarations":[{"prop":"position","value":"absolute","important":false},{"prop":"inset","value":"0","important":false},{"prop":"width","value":"100%","important":false},{"prop":"height","value":"100%","important":false},{"prop":"object-fit","value":"cover","important":false}],"specificity":[0,1,1],"order":16,"isHover":false,"matchSelector":null},{"selector":".pass-hero .scrim","declarations":[{"prop":"position","value":"absolute","important":false},{"prop":"inset","value":"0","important":false},{"prop":"background","value":"linear-gradient(transparent,rgba(0,0,0,.6))","important":false}],"specificity":[0,2,0],"order":17,"isHover":false,"matchSelector":null},{"selector":".pass-hero .cap","declarations":[{"prop":"position","value":"absolute","important":false},{"prop":"bottom","value":"16px","important":false},{"prop":"left","value":"16px","important":false},{"prop":"color","value":"#fff","important":false},{"prop":"font-size","value":"24px","important":false},{"prop":"z-index","value":"2","important":false}],"specificity":[0,2,0],"order":18,"isHover":false,"matchSelector":null},{"selector":".pass-under","declarations":[{"prop":"margin-top","value":"20px","important":false},{"prop":"font-size","value":"16px","important":false}],"specificity":[0,1,0],"order":19,"isHover":false,"matchSelector":null},{"selector":".pass-scrubber-wrap","declarations":[{"prop":"position","value":"relative","important":false},{"prop":"margin-top","value":"30px","important":false},{"prop":"height","value":"80px","important":false}],"specificity":[0,1,0],"order":20,"isHover":false,"matchSelector":null},{"selector":".pass-scrubber-text","declarations":[{"prop":"position","value":"absolute","important":false},{"prop":"top","value":"20px","important":false},{"prop":"left","value":"10px","important":false},{"prop":"font-size","value":"20px","important":false},{"prop":"width","value":"320px","important":false}],"specificity":[0,1,0],"order":21,"isHover":false,"matchSelector":null},{"selector":".pass-scrubber-input","declarations":[{"prop":"position","value":"absolute","important":false},{"prop":"inset","value":"0","important":false},{"prop":"width","value":"100%","important":false},{"prop":"height","value":"100%","important":false},{"prop":"opacity","value":"0","important":false},{"prop":"z-index","value":"5","important":false},{"prop":"margin","value":"0","important":false}],"specificity":[0,1,0],"order":22,"isHover":false,"matchSelector":null},{"selector":".pass-fixedbar","declarations":[{"prop":"position","value":"fixed","important":false},{"prop":"left","value":"0","important":false},{"prop":"right","value":"0","important":false},{"prop":"bottom","value":"0","important":false},{"prop":"height","value":"40px","important":false},{"prop":"background","value":"#b22","important":false},{"prop":"color","value":"#fff","important":false},{"prop":"display","value":"flex","important":false},{"prop":"align-items","value":"center","important":false},{"prop":"padding","value":"0 16px","important":false}],"specificity":[0,1,0],"order":23,"isHover":false,"matchSelector":null}],"unwrapped":"\n * { margin: 0; box-sizing: border-box; }\n body { font-family: system-ui, sans-serif; color: #111; background: #fff; }\n section { padding: 40px; position: relative; }\n\n /* ── FLAG 1: opaque box painted over text (>30%) ── */\n .flag-box-wrap { position: relative; height: 120px; }\n .flag-box-text { position: absolute; top: 40px; left: 40px; font-size: 20px; width: 300px; }\n .flag-box-cover { position: absolute; top: 30px; left: 30px; width: 240px; height: 60px;\n background: #1f7a3d; border-radius: 8px; z-index: 5; }\n\n /* ── FLAG 2: inline element with opaque fill + leaked vertical padding ── */\n .flag-leak-host { position: relative; margin-top: 30px; }\n .flag-leak { display: inline; background: #2f8543; padding: 36px; border-radius: 6px; }\n .flag-leak-card { background: #14202b; color: #fff; padding: 24px; border-radius: 6px; }\n\n /* ── FLAG 3: big headline overhanging an opaque card ── */\n .flag-hero { position: relative; height: 220px; }\n .flag-headline { position: absolute; top: 40px; left: 0; font-size: 64px; font-weight: 800;\n width: 760px; color: #b22; white-space: nowrap; }\n .flag-card { position: absolute; top: 20px; left: 700px; width: 360px; height: 180px;\n background: #f4f5f7; border: 1px solid #ddd; box-shadow: 0 2px 8px rgba(0,0,0,.08); border-radius: 8px; }\n\n /* ── PASS: stacked headline with tight leading (line-box bleed, no real overlap) ── */\n .pass-stack { margin-top: 40px; }\n .pass-eyebrow { font-size: 14px; letter-spacing: .1em; text-transform: uppercase; color: #a33; }\n .pass-title { font-size: 96px; line-height: .9; font-weight: 800; }\n\n /* ── PASS: text over image with a scrim, text on top (readable) ── */\n .pass-hero { position: relative; height: 200px; overflow: hidden; border-radius: 8px; }\n .pass-hero img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }\n .pass-hero .scrim { position: absolute; inset: 0; background: linear-gradient(transparent, rgba(0,0,0,.6)); }\n .pass-hero .cap { position: absolute; bottom: 16px; left: 16px; color: #fff; font-size: 24px; z-index: 2; }\n\n /* ── PASS: fixed status bar over content at the fold ── */\n .pass-under { margin-top: 20px; font-size: 16px; }\n /* Invisible interaction layer: an opacity-0 scrubber input stretched over\n text, like a before/after comparison handle. It paints nothing, so it must\n not read as an occluder despite its UA background-color. */\n .pass-scrubber-wrap { position: relative; margin-top: 30px; height: 80px; }\n .pass-scrubber-text { position: absolute; top: 20px; left: 10px; font-size: 20px; width: 320px; }\n .pass-scrubber-input { position: absolute; inset: 0; width: 100%; height: 100%; opacity: 0; z-index: 5; margin: 0; }\n .pass-fixedbar { position: fixed; left: 0; right: 0; bottom: 0; height: 40px; background: #b22;\n color: #fff; display: flex; align-items: center; padding: 0 16px; }\n"},{"name":"tests/fixtures/antipatterns/text-overflow.html","css":"\n body { font-family: system-ui, sans-serif; margin: 0; color: #1a1a1a; background: #fff; }\n .cols { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; padding: 24px; align-items: start; }\n .col { padding: 16px; }\n .box { width: 160px; border: 1px solid #ddd; margin: 0 0 24px; padding: 8px; }\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n white-space: nowrap;\n border-width: 0;\n }\n .sr-only-clip-path { clip-path: inset(50%); }\n .sr-only-legacy-clip { clip: rect(0, 0, 0, 0); }\n .sr-only-tiny-hidden { clip: auto; }\n .sr-only-clipped-wide {\n position: absolute;\n width: 160px;\n height: 20px;\n overflow: visible;\n white-space: nowrap;\n clip-path: inset(50%);\n }\n .hidden-slide {\n opacity: 0;\n pointer-events: none;\n }\n .hidden-slide .pass-hidden-slide-overflow {\n display: block;\n width: 120px;\n white-space: nowrap;\n }\n ","rules":[{"selector":"body","declarations":[{"prop":"font-family","value":"system-ui,sans-serif","important":false},{"prop":"margin","value":"0","important":false},{"prop":"color","value":"#1a1a1a","important":false},{"prop":"background","value":"#fff","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":".cols","declarations":[{"prop":"display","value":"grid","important":false},{"prop":"grid-template-columns","value":"1fr 1fr","important":false},{"prop":"gap","value":"24px","important":false},{"prop":"padding","value":"24px","important":false},{"prop":"align-items","value":"start","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null},{"selector":".col","declarations":[{"prop":"padding","value":"16px","important":false}],"specificity":[0,1,0],"order":2,"isHover":false,"matchSelector":null},{"selector":".box","declarations":[{"prop":"width","value":"160px","important":false},{"prop":"border","value":"1px solid #ddd","important":false},{"prop":"margin","value":"0 0 24px","important":false},{"prop":"padding","value":"8px","important":false}],"specificity":[0,1,0],"order":3,"isHover":false,"matchSelector":null},{"selector":".sr-only","declarations":[{"prop":"position","value":"absolute","important":false},{"prop":"width","value":"1px","important":false},{"prop":"height","value":"1px","important":false},{"prop":"padding","value":"0","important":false},{"prop":"margin","value":"-1px","important":false},{"prop":"overflow","value":"hidden","important":false},{"prop":"white-space","value":"nowrap","important":false},{"prop":"border-width","value":"0","important":false}],"specificity":[0,1,0],"order":4,"isHover":false,"matchSelector":null},{"selector":".sr-only-clip-path","declarations":[{"prop":"clip-path","value":"inset(50%)","important":false}],"specificity":[0,1,0],"order":5,"isHover":false,"matchSelector":null},{"selector":".sr-only-legacy-clip","declarations":[{"prop":"clip","value":"rect(0,0,0,0)","important":false}],"specificity":[0,1,0],"order":6,"isHover":false,"matchSelector":null},{"selector":".sr-only-tiny-hidden","declarations":[{"prop":"clip","value":"auto","important":false}],"specificity":[0,1,0],"order":7,"isHover":false,"matchSelector":null},{"selector":".sr-only-clipped-wide","declarations":[{"prop":"position","value":"absolute","important":false},{"prop":"width","value":"160px","important":false},{"prop":"height","value":"20px","important":false},{"prop":"overflow","value":"visible","important":false},{"prop":"white-space","value":"nowrap","important":false},{"prop":"clip-path","value":"inset(50%)","important":false}],"specificity":[0,1,0],"order":8,"isHover":false,"matchSelector":null},{"selector":".hidden-slide","declarations":[{"prop":"opacity","value":"0","important":false},{"prop":"pointer-events","value":"none","important":false}],"specificity":[0,1,0],"order":9,"isHover":false,"matchSelector":null},{"selector":".hidden-slide .pass-hidden-slide-overflow","declarations":[{"prop":"display","value":"block","important":false},{"prop":"width","value":"120px","important":false},{"prop":"white-space","value":"nowrap","important":false}],"specificity":[0,2,0],"order":10,"isHover":false,"matchSelector":null}],"unwrapped":"\n body { font-family: system-ui, sans-serif; margin: 0; color: #1a1a1a; background: #fff; }\n .cols { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; padding: 24px; align-items: start; }\n .col { padding: 16px; }\n .box { width: 160px; border: 1px solid #ddd; margin: 0 0 24px; padding: 8px; }\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n white-space: nowrap;\n border-width: 0;\n }\n .sr-only-clip-path { clip-path: inset(50%); }\n .sr-only-legacy-clip { clip: rect(0, 0, 0, 0); }\n .sr-only-tiny-hidden { clip: auto; }\n .sr-only-clipped-wide {\n position: absolute;\n width: 160px;\n height: 20px;\n overflow: visible;\n white-space: nowrap;\n clip-path: inset(50%);\n }\n .hidden-slide {\n opacity: 0;\n pointer-events: none;\n }\n .hidden-slide .pass-hidden-slide-overflow {\n display: block;\n width: 120px;\n white-space: nowrap;\n }\n "},{"name":"tests/fixtures/antipatterns/typography-should-flag.html","css":"\n body {\n font-family: 'Inter', sans-serif;\n background: #f9fafb;\n padding: 2rem;\n }\n h1 { font-size: 18px; font-weight: 700; margin-bottom: 0.5rem; }\n h2 { font-size: 16px; font-weight: 600; margin: 2rem 0 0.75rem; color: #6b7280; }\n h3 { font-size: 15px; font-weight: 600; }\n p { font-size: 14px; color: #6b7280; margin-top: 0.25rem; }\n .caption { font-size: 13px; color: #6b7280; }\n ","rules":[{"selector":"body","declarations":[{"prop":"font-family","value":"\"Inter\",sans-serif","important":false},{"prop":"background","value":"#f9fafb","important":false},{"prop":"padding","value":"2rem","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":"h1","declarations":[{"prop":"font-size","value":"18px","important":false},{"prop":"font-weight","value":"700","important":false},{"prop":"margin-bottom","value":"0.5rem","important":false}],"specificity":[0,0,1],"order":1,"isHover":false,"matchSelector":null},{"selector":"h2","declarations":[{"prop":"font-size","value":"16px","important":false},{"prop":"font-weight","value":"600","important":false},{"prop":"margin","value":"2rem 0 0.75rem","important":false},{"prop":"color","value":"#6b7280","important":false}],"specificity":[0,0,1],"order":2,"isHover":false,"matchSelector":null},{"selector":"h3","declarations":[{"prop":"font-size","value":"15px","important":false},{"prop":"font-weight","value":"600","important":false}],"specificity":[0,0,1],"order":3,"isHover":false,"matchSelector":null},{"selector":"p","declarations":[{"prop":"font-size","value":"14px","important":false},{"prop":"color","value":"#6b7280","important":false},{"prop":"margin-top","value":"0.25rem","important":false}],"specificity":[0,0,1],"order":4,"isHover":false,"matchSelector":null},{"selector":".caption","declarations":[{"prop":"font-size","value":"13px","important":false},{"prop":"color","value":"#6b7280","important":false}],"specificity":[0,1,0],"order":5,"isHover":false,"matchSelector":null}],"unwrapped":"\n body {\n font-family: 'Inter', sans-serif;\n background: #f9fafb;\n padding: 2rem;\n }\n h1 { font-size: 18px; font-weight: 700; margin-bottom: 0.5rem; }\n h2 { font-size: 16px; font-weight: 600; margin: 2rem 0 0.75rem; color: #6b7280; }\n h3 { font-size: 15px; font-weight: 600; }\n p { font-size: 14px; color: #6b7280; margin-top: 0.25rem; }\n .caption { font-size: 13px; color: #6b7280; }\n "},{"name":"tests/fixtures/antipatterns/typography-should-pass.html","css":"\n body {\n font-family: 'Karla', system-ui, sans-serif;\n background: #f9fafb;\n padding: 2rem;\n font-size: 16px;\n color: #111827;\n }\n h1 {\n font-family: 'Newsreader', Georgia, serif;\n font-size: 48px;\n font-weight: 700;\n margin-bottom: 0.5rem;\n }\n h2 {\n font-family: 'Newsreader', Georgia, serif;\n font-size: 32px;\n font-weight: 700;\n margin: 2rem 0 0.75rem;\n }\n h3 { font-size: 24px; font-weight: 600; }\n p { font-size: 16px; color: #6b7280; margin-top: 0.25rem; }\n .caption { font-size: 12px; color: #6b7280; }\n ","rules":[{"selector":"body","declarations":[{"prop":"font-family","value":"\"Karla\",system-ui,sans-serif","important":false},{"prop":"background","value":"#f9fafb","important":false},{"prop":"padding","value":"2rem","important":false},{"prop":"font-size","value":"16px","important":false},{"prop":"color","value":"#111827","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":"h1","declarations":[{"prop":"font-family","value":"\"Newsreader\",Georgia,serif","important":false},{"prop":"font-size","value":"48px","important":false},{"prop":"font-weight","value":"700","important":false},{"prop":"margin-bottom","value":"0.5rem","important":false}],"specificity":[0,0,1],"order":1,"isHover":false,"matchSelector":null},{"selector":"h2","declarations":[{"prop":"font-family","value":"\"Newsreader\",Georgia,serif","important":false},{"prop":"font-size","value":"32px","important":false},{"prop":"font-weight","value":"700","important":false},{"prop":"margin","value":"2rem 0 0.75rem","important":false}],"specificity":[0,0,1],"order":2,"isHover":false,"matchSelector":null},{"selector":"h3","declarations":[{"prop":"font-size","value":"24px","important":false},{"prop":"font-weight","value":"600","important":false}],"specificity":[0,0,1],"order":3,"isHover":false,"matchSelector":null},{"selector":"p","declarations":[{"prop":"font-size","value":"16px","important":false},{"prop":"color","value":"#6b7280","important":false},{"prop":"margin-top","value":"0.25rem","important":false}],"specificity":[0,0,1],"order":4,"isHover":false,"matchSelector":null},{"selector":".caption","declarations":[{"prop":"font-size","value":"12px","important":false},{"prop":"color","value":"#6b7280","important":false}],"specificity":[0,1,0],"order":5,"isHover":false,"matchSelector":null}],"unwrapped":"\n body {\n font-family: 'Karla', system-ui, sans-serif;\n background: #f9fafb;\n padding: 2rem;\n font-size: 16px;\n color: #111827;\n }\n h1 {\n font-family: 'Newsreader', Georgia, serif;\n font-size: 48px;\n font-weight: 700;\n margin-bottom: 0.5rem;\n }\n h2 {\n font-family: 'Newsreader', Georgia, serif;\n font-size: 32px;\n font-weight: 700;\n margin: 2rem 0 0.75rem;\n }\n h3 { font-size: 24px; font-weight: 600; }\n p { font-size: 16px; color: #6b7280; margin-top: 0.25rem; }\n .caption { font-size: 12px; color: #6b7280; }\n "},{"name":"tests/fixtures/antipatterns/typography.html","css":"\n body {\n margin: 0;\n padding: 24px;\n background: #f9fafb;\n color: #111827;\n font: 16px/1.5 system-ui, sans-serif;\n }\n\n .grid {\n display: grid;\n grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);\n gap: 32px;\n max-width: 1180px;\n margin: 0 auto;\n }\n\n .col {\n min-width: 0;\n }\n\n .col-label {\n margin: 0 0 14px;\n color: #475569;\n font-size: 13px;\n font-weight: 760;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n }\n\n .flag-type {\n font-family: 'Inter', sans-serif;\n background: #fdfdfd;\n padding: 22px;\n border: 1px solid #e5e7eb;\n }\n\n .flag-type h1 {\n margin: 0 0 8px;\n font-size: 18px;\n line-height: 1.2;\n }\n\n .flag-type h2 {\n margin: 24px 0 8px;\n color: #4b5563;\n font-size: 16px;\n line-height: 1.25;\n }\n\n .flag-type h3 {\n margin: 18px 0 4px;\n font-size: 15px;\n line-height: 1.25;\n }\n\n .flag-type p {\n margin: 0 0 10px;\n color: #4b5563;\n font-size: 14px;\n }\n\n .flag-type .caption {\n color: #6b7280;\n font-size: 13px;\n }\n\n .flag-type .tight-leading-demo {\n line-height: 1.05;\n }\n\n .flag-type .tiny-body-demo {\n color: #374151;\n font-size: 10px;\n line-height: 1.6;\n }\n\n .flag-type .caps-body-demo {\n text-transform: uppercase;\n }\n\n .flag-type .tracked-body-demo {\n letter-spacing: 0.08em;\n }\n\n .flag-type .justified-body-demo {\n text-align: justify;\n }\n\n .pass-type {\n background: #fdfdfd;\n padding: 22px;\n border: 1px solid #e5e7eb;\n }\n\n .pass-type h1,\n .pass-type h2 {\n font-family: 'Newsreader', Georgia, serif;\n }\n\n .pass-type h1 {\n margin: 0 0 10px;\n font-size: 48px;\n line-height: 0.98;\n font-weight: 700;\n }\n\n .pass-type h2 {\n margin: 32px 0 10px;\n font-size: 30px;\n line-height: 1.08;\n font-weight: 700;\n }\n\n .pass-type h3,\n .pass-type p,\n .pass-type .caption {\n font-family: 'Karla', system-ui, sans-serif;\n }\n\n .pass-type h3 {\n margin: 22px 0 6px;\n font-size: 22px;\n line-height: 1.15;\n }\n\n .pass-type p {\n margin: 0 0 12px;\n color: #374151;\n font-size: 16px;\n }\n\n .pass-type .caption {\n color: #4b5563;\n font-size: 12px;\n }\n ","rules":[{"selector":"body","declarations":[{"prop":"margin","value":"0","important":false},{"prop":"padding","value":"24px","important":false},{"prop":"background","value":"#f9fafb","important":false},{"prop":"color","value":"#111827","important":false},{"prop":"font","value":"16px/1.5 system-ui,sans-serif","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":".grid","declarations":[{"prop":"display","value":"grid","important":false},{"prop":"grid-template-columns","value":"minmax(0,1fr) minmax(0,1fr)","important":false},{"prop":"gap","value":"32px","important":false},{"prop":"max-width","value":"1180px","important":false},{"prop":"margin","value":"0 auto","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null},{"selector":".col","declarations":[{"prop":"min-width","value":"0","important":false}],"specificity":[0,1,0],"order":2,"isHover":false,"matchSelector":null},{"selector":".col-label","declarations":[{"prop":"margin","value":"0 0 14px","important":false},{"prop":"color","value":"#475569","important":false},{"prop":"font-size","value":"13px","important":false},{"prop":"font-weight","value":"760","important":false},{"prop":"letter-spacing","value":"0.08em","important":false},{"prop":"text-transform","value":"uppercase","important":false}],"specificity":[0,1,0],"order":3,"isHover":false,"matchSelector":null},{"selector":".flag-type","declarations":[{"prop":"font-family","value":"\"Inter\",sans-serif","important":false},{"prop":"background","value":"#fdfdfd","important":false},{"prop":"padding","value":"22px","important":false},{"prop":"border","value":"1px solid #e5e7eb","important":false}],"specificity":[0,1,0],"order":4,"isHover":false,"matchSelector":null},{"selector":".flag-type h1","declarations":[{"prop":"margin","value":"0 0 8px","important":false},{"prop":"font-size","value":"18px","important":false},{"prop":"line-height","value":"1.2","important":false}],"specificity":[0,1,1],"order":5,"isHover":false,"matchSelector":null},{"selector":".flag-type h2","declarations":[{"prop":"margin","value":"24px 0 8px","important":false},{"prop":"color","value":"#4b5563","important":false},{"prop":"font-size","value":"16px","important":false},{"prop":"line-height","value":"1.25","important":false}],"specificity":[0,1,1],"order":6,"isHover":false,"matchSelector":null},{"selector":".flag-type h3","declarations":[{"prop":"margin","value":"18px 0 4px","important":false},{"prop":"font-size","value":"15px","important":false},{"prop":"line-height","value":"1.25","important":false}],"specificity":[0,1,1],"order":7,"isHover":false,"matchSelector":null},{"selector":".flag-type p","declarations":[{"prop":"margin","value":"0 0 10px","important":false},{"prop":"color","value":"#4b5563","important":false},{"prop":"font-size","value":"14px","important":false}],"specificity":[0,1,1],"order":8,"isHover":false,"matchSelector":null},{"selector":".flag-type .caption","declarations":[{"prop":"color","value":"#6b7280","important":false},{"prop":"font-size","value":"13px","important":false}],"specificity":[0,2,0],"order":9,"isHover":false,"matchSelector":null},{"selector":".flag-type .tight-leading-demo","declarations":[{"prop":"line-height","value":"1.05","important":false}],"specificity":[0,2,0],"order":10,"isHover":false,"matchSelector":null},{"selector":".flag-type .tiny-body-demo","declarations":[{"prop":"color","value":"#374151","important":false},{"prop":"font-size","value":"10px","important":false},{"prop":"line-height","value":"1.6","important":false}],"specificity":[0,2,0],"order":11,"isHover":false,"matchSelector":null},{"selector":".flag-type .caps-body-demo","declarations":[{"prop":"text-transform","value":"uppercase","important":false}],"specificity":[0,2,0],"order":12,"isHover":false,"matchSelector":null},{"selector":".flag-type .tracked-body-demo","declarations":[{"prop":"letter-spacing","value":"0.08em","important":false}],"specificity":[0,2,0],"order":13,"isHover":false,"matchSelector":null},{"selector":".flag-type .justified-body-demo","declarations":[{"prop":"text-align","value":"justify","important":false}],"specificity":[0,2,0],"order":14,"isHover":false,"matchSelector":null},{"selector":".pass-type","declarations":[{"prop":"background","value":"#fdfdfd","important":false},{"prop":"padding","value":"22px","important":false},{"prop":"border","value":"1px solid #e5e7eb","important":false}],"specificity":[0,1,0],"order":15,"isHover":false,"matchSelector":null},{"selector":".pass-type h1","declarations":[{"prop":"font-family","value":"\"Newsreader\",Georgia,serif","important":false}],"specificity":[0,1,1],"order":16,"isHover":false,"matchSelector":null},{"selector":".pass-type h2","declarations":[{"prop":"font-family","value":"\"Newsreader\",Georgia,serif","important":false}],"specificity":[0,1,1],"order":17,"isHover":false,"matchSelector":null},{"selector":".pass-type h1","declarations":[{"prop":"margin","value":"0 0 10px","important":false},{"prop":"font-size","value":"48px","important":false},{"prop":"line-height","value":"0.98","important":false},{"prop":"font-weight","value":"700","important":false}],"specificity":[0,1,1],"order":18,"isHover":false,"matchSelector":null},{"selector":".pass-type h2","declarations":[{"prop":"margin","value":"32px 0 10px","important":false},{"prop":"font-size","value":"30px","important":false},{"prop":"line-height","value":"1.08","important":false},{"prop":"font-weight","value":"700","important":false}],"specificity":[0,1,1],"order":19,"isHover":false,"matchSelector":null},{"selector":".pass-type h3","declarations":[{"prop":"font-family","value":"\"Karla\",system-ui,sans-serif","important":false}],"specificity":[0,1,1],"order":20,"isHover":false,"matchSelector":null},{"selector":".pass-type p","declarations":[{"prop":"font-family","value":"\"Karla\",system-ui,sans-serif","important":false}],"specificity":[0,1,1],"order":21,"isHover":false,"matchSelector":null},{"selector":".pass-type .caption","declarations":[{"prop":"font-family","value":"\"Karla\",system-ui,sans-serif","important":false}],"specificity":[0,2,0],"order":22,"isHover":false,"matchSelector":null},{"selector":".pass-type h3","declarations":[{"prop":"margin","value":"22px 0 6px","important":false},{"prop":"font-size","value":"22px","important":false},{"prop":"line-height","value":"1.15","important":false}],"specificity":[0,1,1],"order":23,"isHover":false,"matchSelector":null},{"selector":".pass-type p","declarations":[{"prop":"margin","value":"0 0 12px","important":false},{"prop":"color","value":"#374151","important":false},{"prop":"font-size","value":"16px","important":false}],"specificity":[0,1,1],"order":24,"isHover":false,"matchSelector":null},{"selector":".pass-type .caption","declarations":[{"prop":"color","value":"#4b5563","important":false},{"prop":"font-size","value":"12px","important":false}],"specificity":[0,2,0],"order":25,"isHover":false,"matchSelector":null}],"unwrapped":"\n body {\n margin: 0;\n padding: 24px;\n background: #f9fafb;\n color: #111827;\n font: 16px/1.5 system-ui, sans-serif;\n }\n\n .grid {\n display: grid;\n grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);\n gap: 32px;\n max-width: 1180px;\n margin: 0 auto;\n }\n\n .col {\n min-width: 0;\n }\n\n .col-label {\n margin: 0 0 14px;\n color: #475569;\n font-size: 13px;\n font-weight: 760;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n }\n\n .flag-type {\n font-family: 'Inter', sans-serif;\n background: #fdfdfd;\n padding: 22px;\n border: 1px solid #e5e7eb;\n }\n\n .flag-type h1 {\n margin: 0 0 8px;\n font-size: 18px;\n line-height: 1.2;\n }\n\n .flag-type h2 {\n margin: 24px 0 8px;\n color: #4b5563;\n font-size: 16px;\n line-height: 1.25;\n }\n\n .flag-type h3 {\n margin: 18px 0 4px;\n font-size: 15px;\n line-height: 1.25;\n }\n\n .flag-type p {\n margin: 0 0 10px;\n color: #4b5563;\n font-size: 14px;\n }\n\n .flag-type .caption {\n color: #6b7280;\n font-size: 13px;\n }\n\n .flag-type .tight-leading-demo {\n line-height: 1.05;\n }\n\n .flag-type .tiny-body-demo {\n color: #374151;\n font-size: 10px;\n line-height: 1.6;\n }\n\n .flag-type .caps-body-demo {\n text-transform: uppercase;\n }\n\n .flag-type .tracked-body-demo {\n letter-spacing: 0.08em;\n }\n\n .flag-type .justified-body-demo {\n text-align: justify;\n }\n\n .pass-type {\n background: #fdfdfd;\n padding: 22px;\n border: 1px solid #e5e7eb;\n }\n\n .pass-type h1,\n .pass-type h2 {\n font-family: 'Newsreader', Georgia, serif;\n }\n\n .pass-type h1 {\n margin: 0 0 10px;\n font-size: 48px;\n line-height: 0.98;\n font-weight: 700;\n }\n\n .pass-type h2 {\n margin: 32px 0 10px;\n font-size: 30px;\n line-height: 1.08;\n font-weight: 700;\n }\n\n .pass-type h3,\n .pass-type p,\n .pass-type .caption {\n font-family: 'Karla', system-ui, sans-serif;\n }\n\n .pass-type h3 {\n margin: 22px 0 6px;\n font-size: 22px;\n line-height: 1.15;\n }\n\n .pass-type p {\n margin: 0 0 12px;\n color: #374151;\n font-size: 16px;\n }\n\n .pass-type .caption {\n color: #4b5563;\n font-size: 12px;\n }\n "},{"name":"tests/fixtures/antipatterns/undersized-ui-text.html","css":"\n /* Explicit pixel dimensions because jsdom does no layout. */\n body { font-family: system-ui, sans-serif; font-size: 16px; }\n .col { display: inline-block; width: 480px; vertical-align: top; }\n\n /* --- should-flag styles --- */\n .nav-link { font-size: 8px; }\n .category { font-size: 8px; }\n .meta { font-size: 9px; }\n .btn-small { font-size: 10px; width: 120px; height: 24px; }\n .cell-small { font-size: 9px; }\n .caps-label { font-size: 10px; text-transform: uppercase; letter-spacing: 0.12em; }\n .footer-link { font-size: 8px; }\n\n /* --- should-pass styles --- */\n .legal { font-size: 10px; line-height: 1.5; } /* non-interactive footer smallprint at 10px */\n .sr-only { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); font-size: 4px; }\n .sup-marker { font-size: 8px; }\n .sub-marker { font-size: 8px; }\n .em-parent { font-size: 20px; }\n .em-child { font-size: 0.6em; } /* resolves to 12px, above the floor */\n .mock-terminal { width: 400px; }\n .term-line { font-size: 9px; } /* legitimately small code/terminal text */\n .normal-link { font-size: 12px; } /* at the floor, allowed */\n","rules":[{"selector":"body","declarations":[{"prop":"font-family","value":"system-ui,sans-serif","important":false},{"prop":"font-size","value":"16px","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":".col","declarations":[{"prop":"display","value":"inline-block","important":false},{"prop":"width","value":"480px","important":false},{"prop":"vertical-align","value":"top","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null},{"selector":".nav-link","declarations":[{"prop":"font-size","value":"8px","important":false}],"specificity":[0,1,0],"order":2,"isHover":false,"matchSelector":null},{"selector":".category","declarations":[{"prop":"font-size","value":"8px","important":false}],"specificity":[0,1,0],"order":3,"isHover":false,"matchSelector":null},{"selector":".meta","declarations":[{"prop":"font-size","value":"9px","important":false}],"specificity":[0,1,0],"order":4,"isHover":false,"matchSelector":null},{"selector":".btn-small","declarations":[{"prop":"font-size","value":"10px","important":false},{"prop":"width","value":"120px","important":false},{"prop":"height","value":"24px","important":false}],"specificity":[0,1,0],"order":5,"isHover":false,"matchSelector":null},{"selector":".cell-small","declarations":[{"prop":"font-size","value":"9px","important":false}],"specificity":[0,1,0],"order":6,"isHover":false,"matchSelector":null},{"selector":".caps-label","declarations":[{"prop":"font-size","value":"10px","important":false},{"prop":"text-transform","value":"uppercase","important":false},{"prop":"letter-spacing","value":"0.12em","important":false}],"specificity":[0,1,0],"order":7,"isHover":false,"matchSelector":null},{"selector":".footer-link","declarations":[{"prop":"font-size","value":"8px","important":false}],"specificity":[0,1,0],"order":8,"isHover":false,"matchSelector":null},{"selector":".legal","declarations":[{"prop":"font-size","value":"10px","important":false},{"prop":"line-height","value":"1.5","important":false}],"specificity":[0,1,0],"order":9,"isHover":false,"matchSelector":null},{"selector":".sr-only","declarations":[{"prop":"position","value":"absolute","important":false},{"prop":"width","value":"1px","important":false},{"prop":"height","value":"1px","important":false},{"prop":"overflow","value":"hidden","important":false},{"prop":"clip","value":"rect(0 0 0 0)","important":false},{"prop":"font-size","value":"4px","important":false}],"specificity":[0,1,0],"order":10,"isHover":false,"matchSelector":null},{"selector":".sup-marker","declarations":[{"prop":"font-size","value":"8px","important":false}],"specificity":[0,1,0],"order":11,"isHover":false,"matchSelector":null},{"selector":".sub-marker","declarations":[{"prop":"font-size","value":"8px","important":false}],"specificity":[0,1,0],"order":12,"isHover":false,"matchSelector":null},{"selector":".em-parent","declarations":[{"prop":"font-size","value":"20px","important":false}],"specificity":[0,1,0],"order":13,"isHover":false,"matchSelector":null},{"selector":".em-child","declarations":[{"prop":"font-size","value":"0.6em","important":false}],"specificity":[0,1,0],"order":14,"isHover":false,"matchSelector":null},{"selector":".mock-terminal","declarations":[{"prop":"width","value":"400px","important":false}],"specificity":[0,1,0],"order":15,"isHover":false,"matchSelector":null},{"selector":".term-line","declarations":[{"prop":"font-size","value":"9px","important":false}],"specificity":[0,1,0],"order":16,"isHover":false,"matchSelector":null},{"selector":".normal-link","declarations":[{"prop":"font-size","value":"12px","important":false}],"specificity":[0,1,0],"order":17,"isHover":false,"matchSelector":null}],"unwrapped":"\n /* Explicit pixel dimensions because jsdom does no layout. */\n body { font-family: system-ui, sans-serif; font-size: 16px; }\n .col { display: inline-block; width: 480px; vertical-align: top; }\n\n /* --- should-flag styles --- */\n .nav-link { font-size: 8px; }\n .category { font-size: 8px; }\n .meta { font-size: 9px; }\n .btn-small { font-size: 10px; width: 120px; height: 24px; }\n .cell-small { font-size: 9px; }\n .caps-label { font-size: 10px; text-transform: uppercase; letter-spacing: 0.12em; }\n .footer-link { font-size: 8px; }\n\n /* --- should-pass styles --- */\n .legal { font-size: 10px; line-height: 1.5; } /* non-interactive footer smallprint at 10px */\n .sr-only { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); font-size: 4px; }\n .sup-marker { font-size: 8px; }\n .sub-marker { font-size: 8px; }\n .em-parent { font-size: 20px; }\n .em-child { font-size: 0.6em; } /* resolves to 12px, above the floor */\n .mock-terminal { width: 400px; }\n .term-line { font-size: 9px; } /* legitimately small code/terminal text */\n .normal-link { font-size: 12px; } /* at the floor, allowed */\n"},{"name":"tests/fixtures/antipatterns/visual-contrast.html","css":"\n :root {\n --paper: #f7f3ee;\n --ink: #171717;\n --muted: #566174;\n }\n\n body {\n margin: 0;\n padding: 32px;\n background: var(--paper);\n color: var(--ink);\n font-family: system-ui, sans-serif;\n }\n\n .grid {\n display: grid;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 24px;\n max-width: 980px;\n margin: 0 auto;\n }\n\n .column {\n display: grid;\n gap: 14px;\n }\n\n .column > h2 {\n margin: 0 0 2px;\n color: var(--muted);\n font-size: 13px;\n font-weight: 700;\n letter-spacing: 0.08em;\n line-height: 1.4;\n text-transform: uppercase;\n }\n\n .image-card {\n position: relative;\n display: grid;\n align-content: end;\n min-height: 180px;\n padding: 28px;\n border-radius: 8px;\n overflow: hidden;\n background-size: cover;\n background-position: center;\n }\n\n .image-card p {\n position: relative;\n z-index: 1;\n max-width: 28ch;\n margin: 0;\n font-size: 18px;\n font-weight: 700;\n line-height: 1.45;\n }\n\n .light-image {\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 420 240'%3E%3Crect width='420' height='240' fill='%23ece8df'/%3E%3Ccircle cx='308' cy='58' r='132' fill='%23faf7f0'/%3E%3Cpath d='M0 186c52-22 92-26 142-8s98 18 148-8 92-22 130 0v70H0z' fill='%23f5efe4'/%3E%3C/svg%3E\");\n }\n\n .pale-pattern {\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 420 240'%3E%3Crect width='420' height='240' fill='%23edf2f7'/%3E%3Cg fill='%23f8fafc'%3E%3Ccircle cx='60' cy='64' r='42'/%3E%3Ccircle cx='182' cy='142' r='58'/%3E%3Ccircle cx='336' cy='84' r='74'/%3E%3C/g%3E%3Cg stroke='%23dbe4ef' stroke-width='14' opacity='.55'%3E%3Cpath d='M-20 220C74 112 150 94 232 164s138 46 214-62' fill='none'/%3E%3C/g%3E%3C/svg%3E\");\n }\n\n .mist-image {\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 420 240'%3E%3Crect width='420' height='240' fill='%23b9c4cf'/%3E%3Cpath d='M0 52c74-28 138-22 194 18s124 38 226-28v198H0z' fill='%23cbd3dc'/%3E%3Ccircle cx='82' cy='176' r='68' fill='%23aeb8c4'/%3E%3C/svg%3E\");\n }\n\n .dark-image {\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 420 240'%3E%3Crect width='420' height='240' fill='%23191b20'/%3E%3Ccircle cx='316' cy='50' r='132' fill='%232d3440'/%3E%3Cpath d='M0 182c70-48 138-42 204-6s128 24 216-58v122H0z' fill='%23101318'/%3E%3C/svg%3E\");\n }\n\n .underlay {\n isolation: isolate;\n background: #1a1d24;\n }\n\n .underlay.light-shell {\n background: #f5f2ea;\n }\n\n .underlay img,\n .underlay svg {\n position: absolute;\n inset: 0;\n z-index: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n\n .underlay svg {\n display: block;\n }\n ","rules":[{"selector":":root","declarations":[{"prop":"--paper","value":"#f7f3ee","important":false},{"prop":"--ink","value":"#171717","important":false},{"prop":"--muted","value":"#566174","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null},{"selector":"body","declarations":[{"prop":"margin","value":"0","important":false},{"prop":"padding","value":"32px","important":false},{"prop":"background","value":"var(--paper)","important":false},{"prop":"color","value":"var(--ink)","important":false},{"prop":"font-family","value":"system-ui,sans-serif","important":false}],"specificity":[0,0,1],"order":1,"isHover":false,"matchSelector":null},{"selector":".grid","declarations":[{"prop":"display","value":"grid","important":false},{"prop":"grid-template-columns","value":"repeat(2,minmax(0,1fr))","important":false},{"prop":"gap","value":"24px","important":false},{"prop":"max-width","value":"980px","important":false},{"prop":"margin","value":"0 auto","important":false}],"specificity":[0,1,0],"order":2,"isHover":false,"matchSelector":null},{"selector":".column","declarations":[{"prop":"display","value":"grid","important":false},{"prop":"gap","value":"14px","important":false}],"specificity":[0,1,0],"order":3,"isHover":false,"matchSelector":null},{"selector":".column>h2","declarations":[{"prop":"margin","value":"0 0 2px","important":false},{"prop":"color","value":"var(--muted)","important":false},{"prop":"font-size","value":"13px","important":false},{"prop":"font-weight","value":"700","important":false},{"prop":"letter-spacing","value":"0.08em","important":false},{"prop":"line-height","value":"1.4","important":false},{"prop":"text-transform","value":"uppercase","important":false}],"specificity":[0,1,1],"order":4,"isHover":false,"matchSelector":null},{"selector":".image-card","declarations":[{"prop":"position","value":"relative","important":false},{"prop":"display","value":"grid","important":false},{"prop":"align-content","value":"end","important":false},{"prop":"min-height","value":"180px","important":false},{"prop":"padding","value":"28px","important":false},{"prop":"border-radius","value":"8px","important":false},{"prop":"overflow","value":"hidden","important":false},{"prop":"background-size","value":"cover","important":false},{"prop":"background-position","value":"center","important":false}],"specificity":[0,1,0],"order":5,"isHover":false,"matchSelector":null},{"selector":".image-card p","declarations":[{"prop":"position","value":"relative","important":false},{"prop":"z-index","value":"1","important":false},{"prop":"max-width","value":"28ch","important":false},{"prop":"margin","value":"0","important":false},{"prop":"font-size","value":"18px","important":false},{"prop":"font-weight","value":"700","important":false},{"prop":"line-height","value":"1.45","important":false}],"specificity":[0,1,1],"order":6,"isHover":false,"matchSelector":null},{"selector":".light-image","declarations":[{"prop":"background-image","value":"url(data:image/svg+xml,%3Csvg\\ xmlns=\\'http://www.w3.org/2000/svg\\'\\ viewBox=\\'0\\ 0\\ 420\\ 240\\'%3E%3Crect\\ width=\\'420\\'\\ height=\\'240\\'\\ fill=\\'%23ece8df\\'/%3E%3Ccircle\\ cx=\\'308\\'\\ cy=\\'58\\'\\ r=\\'132\\'\\ fill=\\'%23faf7f0\\'/%3E%3Cpath\\ d=\\'M0\\ 186c52-22\\ 92-26\\ 142-8s98\\ 18\\ 148-8\\ 92-22\\ 130\\ 0v70H0z\\'\\ fill=\\'%23f5efe4\\'/%3E%3C/svg%3E)","important":false}],"specificity":[0,1,0],"order":7,"isHover":false,"matchSelector":null},{"selector":".pale-pattern","declarations":[{"prop":"background-image","value":"url(data:image/svg+xml,%3Csvg\\ xmlns=\\'http://www.w3.org/2000/svg\\'\\ viewBox=\\'0\\ 0\\ 420\\ 240\\'%3E%3Crect\\ width=\\'420\\'\\ height=\\'240\\'\\ fill=\\'%23edf2f7\\'/%3E%3Cg\\ fill=\\'%23f8fafc\\'%3E%3Ccircle\\ cx=\\'60\\'\\ cy=\\'64\\'\\ r=\\'42\\'/%3E%3Ccircle\\ cx=\\'182\\'\\ cy=\\'142\\'\\ r=\\'58\\'/%3E%3Ccircle\\ cx=\\'336\\'\\ cy=\\'84\\'\\ r=\\'74\\'/%3E%3C/g%3E%3Cg\\ stroke=\\'%23dbe4ef\\'\\ stroke-width=\\'14\\'\\ opacity=\\'.55\\'%3E%3Cpath\\ d=\\'M-20\\ 220C74\\ 112\\ 150\\ 94\\ 232\\ 164s138\\ 46\\ 214-62\\'\\ fill=\\'none\\'/%3E%3C/g%3E%3C/svg%3E)","important":false}],"specificity":[0,1,0],"order":8,"isHover":false,"matchSelector":null},{"selector":".mist-image","declarations":[{"prop":"background-image","value":"url(data:image/svg+xml,%3Csvg\\ xmlns=\\'http://www.w3.org/2000/svg\\'\\ viewBox=\\'0\\ 0\\ 420\\ 240\\'%3E%3Crect\\ width=\\'420\\'\\ height=\\'240\\'\\ fill=\\'%23b9c4cf\\'/%3E%3Cpath\\ d=\\'M0\\ 52c74-28\\ 138-22\\ 194\\ 18s124\\ 38\\ 226-28v198H0z\\'\\ fill=\\'%23cbd3dc\\'/%3E%3Ccircle\\ cx=\\'82\\'\\ cy=\\'176\\'\\ r=\\'68\\'\\ fill=\\'%23aeb8c4\\'/%3E%3C/svg%3E)","important":false}],"specificity":[0,1,0],"order":9,"isHover":false,"matchSelector":null},{"selector":".dark-image","declarations":[{"prop":"background-image","value":"url(data:image/svg+xml,%3Csvg\\ xmlns=\\'http://www.w3.org/2000/svg\\'\\ viewBox=\\'0\\ 0\\ 420\\ 240\\'%3E%3Crect\\ width=\\'420\\'\\ height=\\'240\\'\\ fill=\\'%23191b20\\'/%3E%3Ccircle\\ cx=\\'316\\'\\ cy=\\'50\\'\\ r=\\'132\\'\\ fill=\\'%232d3440\\'/%3E%3Cpath\\ d=\\'M0\\ 182c70-48\\ 138-42\\ 204-6s128\\ 24\\ 216-58v122H0z\\'\\ fill=\\'%23101318\\'/%3E%3C/svg%3E)","important":false}],"specificity":[0,1,0],"order":10,"isHover":false,"matchSelector":null},{"selector":".underlay","declarations":[{"prop":"isolation","value":"isolate","important":false},{"prop":"background","value":"#1a1d24","important":false}],"specificity":[0,1,0],"order":11,"isHover":false,"matchSelector":null},{"selector":".underlay.light-shell","declarations":[{"prop":"background","value":"#f5f2ea","important":false}],"specificity":[0,2,0],"order":12,"isHover":false,"matchSelector":null},{"selector":".underlay img","declarations":[{"prop":"position","value":"absolute","important":false},{"prop":"inset","value":"0","important":false},{"prop":"z-index","value":"0","important":false},{"prop":"width","value":"100%","important":false},{"prop":"height","value":"100%","important":false},{"prop":"object-fit","value":"cover","important":false}],"specificity":[0,1,1],"order":13,"isHover":false,"matchSelector":null},{"selector":".underlay svg","declarations":[{"prop":"position","value":"absolute","important":false},{"prop":"inset","value":"0","important":false},{"prop":"z-index","value":"0","important":false},{"prop":"width","value":"100%","important":false},{"prop":"height","value":"100%","important":false},{"prop":"object-fit","value":"cover","important":false}],"specificity":[0,1,1],"order":14,"isHover":false,"matchSelector":null},{"selector":".underlay svg","declarations":[{"prop":"display","value":"block","important":false}],"specificity":[0,1,1],"order":15,"isHover":false,"matchSelector":null}],"unwrapped":"\n :root {\n --paper: #f7f3ee;\n --ink: #171717;\n --muted: #566174;\n }\n\n body {\n margin: 0;\n padding: 32px;\n background: var(--paper);\n color: var(--ink);\n font-family: system-ui, sans-serif;\n }\n\n .grid {\n display: grid;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 24px;\n max-width: 980px;\n margin: 0 auto;\n }\n\n .column {\n display: grid;\n gap: 14px;\n }\n\n .column > h2 {\n margin: 0 0 2px;\n color: var(--muted);\n font-size: 13px;\n font-weight: 700;\n letter-spacing: 0.08em;\n line-height: 1.4;\n text-transform: uppercase;\n }\n\n .image-card {\n position: relative;\n display: grid;\n align-content: end;\n min-height: 180px;\n padding: 28px;\n border-radius: 8px;\n overflow: hidden;\n background-size: cover;\n background-position: center;\n }\n\n .image-card p {\n position: relative;\n z-index: 1;\n max-width: 28ch;\n margin: 0;\n font-size: 18px;\n font-weight: 700;\n line-height: 1.45;\n }\n\n .light-image {\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 420 240'%3E%3Crect width='420' height='240' fill='%23ece8df'/%3E%3Ccircle cx='308' cy='58' r='132' fill='%23faf7f0'/%3E%3Cpath d='M0 186c52-22 92-26 142-8s98 18 148-8 92-22 130 0v70H0z' fill='%23f5efe4'/%3E%3C/svg%3E\");\n }\n\n .pale-pattern {\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 420 240'%3E%3Crect width='420' height='240' fill='%23edf2f7'/%3E%3Cg fill='%23f8fafc'%3E%3Ccircle cx='60' cy='64' r='42'/%3E%3Ccircle cx='182' cy='142' r='58'/%3E%3Ccircle cx='336' cy='84' r='74'/%3E%3C/g%3E%3Cg stroke='%23dbe4ef' stroke-width='14' opacity='.55'%3E%3Cpath d='M-20 220C74 112 150 94 232 164s138 46 214-62' fill='none'/%3E%3C/g%3E%3C/svg%3E\");\n }\n\n .mist-image {\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 420 240'%3E%3Crect width='420' height='240' fill='%23b9c4cf'/%3E%3Cpath d='M0 52c74-28 138-22 194 18s124 38 226-28v198H0z' fill='%23cbd3dc'/%3E%3Ccircle cx='82' cy='176' r='68' fill='%23aeb8c4'/%3E%3C/svg%3E\");\n }\n\n .dark-image {\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 420 240'%3E%3Crect width='420' height='240' fill='%23191b20'/%3E%3Ccircle cx='316' cy='50' r='132' fill='%232d3440'/%3E%3Cpath d='M0 182c70-48 138-42 204-6s128 24 216-58v122H0z' fill='%23101318'/%3E%3C/svg%3E\");\n }\n\n .underlay {\n isolation: isolate;\n background: #1a1d24;\n }\n\n .underlay.light-shell {\n background: #f5f2ea;\n }\n\n .underlay img,\n .underlay svg {\n position: absolute;\n inset: 0;\n z-index: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n\n .underlay svg {\n display: block;\n }\n "},{"name":"tests/framework-fixtures/monorepo-nested-vite/files/website/src/styles.css","css":"body { margin: 0; font-family: system-ui, sans-serif; }\n.page { padding: 2rem; }\n.hero-copy { padding: 0.75rem; margin: -0.75rem -0.75rem 1rem; }\n.hero-title { font-size: 2rem; }\n.hero-hook { color: #555; }\n.feature-grid { display: grid; gap: 1rem; grid-template-columns: repeat(2, 1fr); }\n.feature-card { padding: 1rem; border: 1px solid #ddd; border-radius: 0.5rem; }\n.foundation-grid { display: grid; gap: 0.75rem; grid-template-columns: repeat(3, minmax(0, 1fr)); margin-top: 1rem; }\n.foundation-card { padding: 0.75rem; border: 1px dashed #bbb; }\n.foundation-card-label { font-weight: 700; }\n.foundation-card-detail { margin: 0.25rem 0 0; color: #555; }\n.action-row { display: flex; gap: 0.75rem; margin-top: 1rem; }\n.action-row [role=\"button\"] { font: inherit; padding: 0.5rem 0.75rem; border: 1px solid #ddd; border-radius: 0.375rem; }\n","rules":[{"selector":"body","declarations":[{"prop":"margin","value":"0","important":false},{"prop":"font-family","value":"system-ui,sans-serif","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":".page","declarations":[{"prop":"padding","value":"2rem","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null},{"selector":".hero-copy","declarations":[{"prop":"padding","value":"0.75rem","important":false},{"prop":"margin","value":"-0.75rem -0.75rem 1rem","important":false}],"specificity":[0,1,0],"order":2,"isHover":false,"matchSelector":null},{"selector":".hero-title","declarations":[{"prop":"font-size","value":"2rem","important":false}],"specificity":[0,1,0],"order":3,"isHover":false,"matchSelector":null},{"selector":".hero-hook","declarations":[{"prop":"color","value":"#555","important":false}],"specificity":[0,1,0],"order":4,"isHover":false,"matchSelector":null},{"selector":".feature-grid","declarations":[{"prop":"display","value":"grid","important":false},{"prop":"gap","value":"1rem","important":false},{"prop":"grid-template-columns","value":"repeat(2,1fr)","important":false}],"specificity":[0,1,0],"order":5,"isHover":false,"matchSelector":null},{"selector":".feature-card","declarations":[{"prop":"padding","value":"1rem","important":false},{"prop":"border","value":"1px solid #ddd","important":false},{"prop":"border-radius","value":"0.5rem","important":false}],"specificity":[0,1,0],"order":6,"isHover":false,"matchSelector":null},{"selector":".foundation-grid","declarations":[{"prop":"display","value":"grid","important":false},{"prop":"gap","value":"0.75rem","important":false},{"prop":"grid-template-columns","value":"repeat(3,minmax(0,1fr))","important":false},{"prop":"margin-top","value":"1rem","important":false}],"specificity":[0,1,0],"order":7,"isHover":false,"matchSelector":null},{"selector":".foundation-card","declarations":[{"prop":"padding","value":"0.75rem","important":false},{"prop":"border","value":"1px dashed #bbb","important":false}],"specificity":[0,1,0],"order":8,"isHover":false,"matchSelector":null},{"selector":".foundation-card-label","declarations":[{"prop":"font-weight","value":"700","important":false}],"specificity":[0,1,0],"order":9,"isHover":false,"matchSelector":null},{"selector":".foundation-card-detail","declarations":[{"prop":"margin","value":"0.25rem 0 0","important":false},{"prop":"color","value":"#555","important":false}],"specificity":[0,1,0],"order":10,"isHover":false,"matchSelector":null},{"selector":".action-row","declarations":[{"prop":"display","value":"flex","important":false},{"prop":"gap","value":"0.75rem","important":false},{"prop":"margin-top","value":"1rem","important":false}],"specificity":[0,1,0],"order":11,"isHover":false,"matchSelector":null},{"selector":".action-row [role=\"button\"]","declarations":[{"prop":"font","value":"inherit","important":false},{"prop":"padding","value":"0.5rem 0.75rem","important":false},{"prop":"border","value":"1px solid #ddd","important":false},{"prop":"border-radius","value":"0.375rem","important":false}],"specificity":[0,2,0],"order":12,"isHover":false,"matchSelector":null}],"unwrapped":"body { margin: 0; font-family: system-ui, sans-serif; }\n.page { padding: 2rem; }\n.hero-copy { padding: 0.75rem; margin: -0.75rem -0.75rem 1rem; }\n.hero-title { font-size: 2rem; }\n.hero-hook { color: #555; }\n.feature-grid { display: grid; gap: 1rem; grid-template-columns: repeat(2, 1fr); }\n.feature-card { padding: 1rem; border: 1px solid #ddd; border-radius: 0.5rem; }\n.foundation-grid { display: grid; gap: 0.75rem; grid-template-columns: repeat(3, minmax(0, 1fr)); margin-top: 1rem; }\n.foundation-card { padding: 0.75rem; border: 1px dashed #bbb; }\n.foundation-card-label { font-weight: 700; }\n.foundation-card-detail { margin: 0.25rem 0 0; color: #555; }\n.action-row { display: flex; gap: 0.75rem; margin-top: 1rem; }\n.action-row [role=\"button\"] { font: inherit; padding: 0.5rem 0.75rem; border: 1px solid #ddd; border-radius: 0.375rem; }\n"},{"name":"tests/framework-fixtures/tanstack-router-vite/files/src/styles.css","css":"body { margin: 0; font-family: system-ui, sans-serif; }\n.nav { display: flex; gap: 1rem; padding: 1rem; border-bottom: 1px solid #eee; }\n.nav a { color: #111; text-decoration: none; }\n.page { padding: 2rem; }\n.hero-title { font-size: 2rem; margin: 0 0 0.5rem; }\n.hero-hook { color: #555; }\n","rules":[{"selector":"body","declarations":[{"prop":"margin","value":"0","important":false},{"prop":"font-family","value":"system-ui,sans-serif","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":".nav","declarations":[{"prop":"display","value":"flex","important":false},{"prop":"gap","value":"1rem","important":false},{"prop":"padding","value":"1rem","important":false},{"prop":"border-bottom","value":"1px solid #eee","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null},{"selector":".nav a","declarations":[{"prop":"color","value":"#111","important":false},{"prop":"text-decoration","value":"none","important":false}],"specificity":[0,1,1],"order":2,"isHover":false,"matchSelector":null},{"selector":".page","declarations":[{"prop":"padding","value":"2rem","important":false}],"specificity":[0,1,0],"order":3,"isHover":false,"matchSelector":null},{"selector":".hero-title","declarations":[{"prop":"font-size","value":"2rem","important":false},{"prop":"margin","value":"0 0 0.5rem","important":false}],"specificity":[0,1,0],"order":4,"isHover":false,"matchSelector":null},{"selector":".hero-hook","declarations":[{"prop":"color","value":"#555","important":false}],"specificity":[0,1,0],"order":5,"isHover":false,"matchSelector":null}],"unwrapped":"body { margin: 0; font-family: system-ui, sans-serif; }\n.nav { display: flex; gap: 1rem; padding: 1rem; border-bottom: 1px solid #eee; }\n.nav a { color: #111; text-decoration: none; }\n.page { padding: 2rem; }\n.hero-title { font-size: 2rem; margin: 0 0 0.5rem; }\n.hero-hook { color: #555; }\n"},{"name":"tests/framework-fixtures/vite8-https/files/src/styles.css","css":"body { margin: 0; font-family: system-ui, sans-serif; }\n.page { padding: 2rem; }\n.hero-title { font-size: 2rem; }\n.hero-hook { color: #555; }\n.feature-grid { display: grid; gap: 1rem; grid-template-columns: repeat(2, 1fr); }\n.feature-card { padding: 1rem; border: 1px solid #ddd; border-radius: 0.5rem; }\n","rules":[{"selector":"body","declarations":[{"prop":"margin","value":"0","important":false},{"prop":"font-family","value":"system-ui,sans-serif","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":".page","declarations":[{"prop":"padding","value":"2rem","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null},{"selector":".hero-title","declarations":[{"prop":"font-size","value":"2rem","important":false}],"specificity":[0,1,0],"order":2,"isHover":false,"matchSelector":null},{"selector":".hero-hook","declarations":[{"prop":"color","value":"#555","important":false}],"specificity":[0,1,0],"order":3,"isHover":false,"matchSelector":null},{"selector":".feature-grid","declarations":[{"prop":"display","value":"grid","important":false},{"prop":"gap","value":"1rem","important":false},{"prop":"grid-template-columns","value":"repeat(2,1fr)","important":false}],"specificity":[0,1,0],"order":4,"isHover":false,"matchSelector":null},{"selector":".feature-card","declarations":[{"prop":"padding","value":"1rem","important":false},{"prop":"border","value":"1px solid #ddd","important":false},{"prop":"border-radius","value":"0.5rem","important":false}],"specificity":[0,1,0],"order":5,"isHover":false,"matchSelector":null}],"unwrapped":"body { margin: 0; font-family: system-ui, sans-serif; }\n.page { padding: 2rem; }\n.hero-title { font-size: 2rem; }\n.hero-hook { color: #555; }\n.feature-grid { display: grid; gap: 1rem; grid-template-columns: repeat(2, 1fr); }\n.feature-card { padding: 1rem; border: 1px solid #ddd; border-radius: 0.5rem; }\n"},{"name":"tests/framework-fixtures/vite8-react-base-path/files/src/styles.css","css":"body { margin: 0; font-family: system-ui, sans-serif; }\n.page { padding: 2rem; }\n.hero-title { font-size: 2rem; }\n.hero-hook { color: #555; }\n","rules":[{"selector":"body","declarations":[{"prop":"margin","value":"0","important":false},{"prop":"font-family","value":"system-ui,sans-serif","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":".page","declarations":[{"prop":"padding","value":"2rem","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null},{"selector":".hero-title","declarations":[{"prop":"font-size","value":"2rem","important":false}],"specificity":[0,1,0],"order":2,"isHover":false,"matchSelector":null},{"selector":".hero-hook","declarations":[{"prop":"color","value":"#555","important":false}],"specificity":[0,1,0],"order":3,"isHover":false,"matchSelector":null}],"unwrapped":"body { margin: 0; font-family: system-ui, sans-serif; }\n.page { padding: 2rem; }\n.hero-title { font-size: 2rem; }\n.hero-hook { color: #555; }\n"},{"name":"tests/framework-fixtures/vite8-react-csp-meta/files/src/styles.css","css":"body { margin: 0; font-family: system-ui, sans-serif; }\n.page { padding: 2rem; }\n.hero-title { font-size: 2rem; }\n.hero-hook { color: #555; }\n.feature-grid { display: grid; gap: 1rem; grid-template-columns: repeat(2, 1fr); }\n.feature-card { padding: 1rem; border: 1px solid #ddd; border-radius: 0.5rem; }\n","rules":[{"selector":"body","declarations":[{"prop":"margin","value":"0","important":false},{"prop":"font-family","value":"system-ui,sans-serif","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":".page","declarations":[{"prop":"padding","value":"2rem","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null},{"selector":".hero-title","declarations":[{"prop":"font-size","value":"2rem","important":false}],"specificity":[0,1,0],"order":2,"isHover":false,"matchSelector":null},{"selector":".hero-hook","declarations":[{"prop":"color","value":"#555","important":false}],"specificity":[0,1,0],"order":3,"isHover":false,"matchSelector":null},{"selector":".feature-grid","declarations":[{"prop":"display","value":"grid","important":false},{"prop":"gap","value":"1rem","important":false},{"prop":"grid-template-columns","value":"repeat(2,1fr)","important":false}],"specificity":[0,1,0],"order":4,"isHover":false,"matchSelector":null},{"selector":".feature-card","declarations":[{"prop":"padding","value":"1rem","important":false},{"prop":"border","value":"1px solid #ddd","important":false},{"prop":"border-radius","value":"0.5rem","important":false}],"specificity":[0,1,0],"order":5,"isHover":false,"matchSelector":null}],"unwrapped":"body { margin: 0; font-family: system-ui, sans-serif; }\n.page { padding: 2rem; }\n.hero-title { font-size: 2rem; }\n.hero-hook { color: #555; }\n.feature-grid { display: grid; gap: 1rem; grid-template-columns: repeat(2, 1fr); }\n.feature-card { padding: 1rem; border: 1px solid #ddd; border-radius: 0.5rem; }\n"},{"name":"tests/framework-fixtures/vite8-react-css-modules/files/src/App.module.css","css":".page { padding: 2rem; font-family: system-ui, sans-serif; }\n.heroTitle { font-size: 2rem; }\n.heroHook { color: #555; }\n.featureGrid { display: grid; gap: 1rem; grid-template-columns: repeat(2, 1fr); margin-top: 1rem; }\n.featureCard { padding: 1rem; border: 1px solid #ddd; border-radius: 0.5rem; }\n","rules":[{"selector":".page","declarations":[{"prop":"padding","value":"2rem","important":false},{"prop":"font-family","value":"system-ui,sans-serif","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null},{"selector":".heroTitle","declarations":[{"prop":"font-size","value":"2rem","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null},{"selector":".heroHook","declarations":[{"prop":"color","value":"#555","important":false}],"specificity":[0,1,0],"order":2,"isHover":false,"matchSelector":null},{"selector":".featureGrid","declarations":[{"prop":"display","value":"grid","important":false},{"prop":"gap","value":"1rem","important":false},{"prop":"grid-template-columns","value":"repeat(2,1fr)","important":false},{"prop":"margin-top","value":"1rem","important":false}],"specificity":[0,1,0],"order":3,"isHover":false,"matchSelector":null},{"selector":".featureCard","declarations":[{"prop":"padding","value":"1rem","important":false},{"prop":"border","value":"1px solid #ddd","important":false},{"prop":"border-radius","value":"0.5rem","important":false}],"specificity":[0,1,0],"order":4,"isHover":false,"matchSelector":null}],"unwrapped":".page { padding: 2rem; font-family: system-ui, sans-serif; }\n.heroTitle { font-size: 2rem; }\n.heroHook { color: #555; }\n.featureGrid { display: grid; gap: 1rem; grid-template-columns: repeat(2, 1fr); margin-top: 1rem; }\n.featureCard { padding: 1rem; border: 1px solid #ddd; border-radius: 0.5rem; }\n"},{"name":"tests/framework-fixtures/vite8-react-insert/files/src/styles.css","css":"body { margin: 0; font-family: system-ui, sans-serif; }\n.page { padding: 2rem; }\n.hero-title { font-size: 2rem; }\n.hero-hook { color: #555; }\n.input-row { display: flex; gap: 1rem; margin: 1.5rem 0; }\n.demo-input {\n flex: 1;\n min-height: 44px;\n padding: 0.75rem 1rem;\n font-size: 1rem;\n border: 1px solid #ddd;\n border-radius: 0.5rem;\n}\n.feature-grid { display: grid; gap: 1rem; grid-template-columns: repeat(2, 1fr); }\n.feature-card { padding: 1rem; border: 1px solid #ddd; border-radius: 0.5rem; }\n","rules":[{"selector":"body","declarations":[{"prop":"margin","value":"0","important":false},{"prop":"font-family","value":"system-ui,sans-serif","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":".page","declarations":[{"prop":"padding","value":"2rem","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null},{"selector":".hero-title","declarations":[{"prop":"font-size","value":"2rem","important":false}],"specificity":[0,1,0],"order":2,"isHover":false,"matchSelector":null},{"selector":".hero-hook","declarations":[{"prop":"color","value":"#555","important":false}],"specificity":[0,1,0],"order":3,"isHover":false,"matchSelector":null},{"selector":".input-row","declarations":[{"prop":"display","value":"flex","important":false},{"prop":"gap","value":"1rem","important":false},{"prop":"margin","value":"1.5rem 0","important":false}],"specificity":[0,1,0],"order":4,"isHover":false,"matchSelector":null},{"selector":".demo-input","declarations":[{"prop":"flex","value":"1","important":false},{"prop":"min-height","value":"44px","important":false},{"prop":"padding","value":"0.75rem 1rem","important":false},{"prop":"font-size","value":"1rem","important":false},{"prop":"border","value":"1px solid #ddd","important":false},{"prop":"border-radius","value":"0.5rem","important":false}],"specificity":[0,1,0],"order":5,"isHover":false,"matchSelector":null},{"selector":".feature-grid","declarations":[{"prop":"display","value":"grid","important":false},{"prop":"gap","value":"1rem","important":false},{"prop":"grid-template-columns","value":"repeat(2,1fr)","important":false}],"specificity":[0,1,0],"order":6,"isHover":false,"matchSelector":null},{"selector":".feature-card","declarations":[{"prop":"padding","value":"1rem","important":false},{"prop":"border","value":"1px solid #ddd","important":false},{"prop":"border-radius","value":"0.5rem","important":false}],"specificity":[0,1,0],"order":7,"isHover":false,"matchSelector":null}],"unwrapped":"body { margin: 0; font-family: system-ui, sans-serif; }\n.page { padding: 2rem; }\n.hero-title { font-size: 2rem; }\n.hero-hook { color: #555; }\n.input-row { display: flex; gap: 1rem; margin: 1.5rem 0; }\n.demo-input {\n flex: 1;\n min-height: 44px;\n padding: 0.75rem 1rem;\n font-size: 1rem;\n border: 1px solid #ddd;\n border-radius: 0.5rem;\n}\n.feature-grid { display: grid; gap: 1rem; grid-template-columns: repeat(2, 1fr); }\n.feature-card { padding: 1rem; border: 1px solid #ddd; border-radius: 0.5rem; }\n"},{"name":"tests/framework-fixtures/vite8-react-mapped-list/files/src/styles.css","css":"body { margin: 0; font-family: system-ui, sans-serif; }\n.page { padding: 2rem; }\n.hero-hook { color: #555; }\n.grid { display: grid; gap: 1rem; grid-template-columns: repeat(3, 1fr); margin-top: 1rem; }\n.card { padding: 1rem; border: 1px solid #ddd; border-radius: 0.5rem; }\n.hero-title { font-size: 1.4rem; margin: 0 0 0.5rem; }\n","rules":[{"selector":"body","declarations":[{"prop":"margin","value":"0","important":false},{"prop":"font-family","value":"system-ui,sans-serif","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":".page","declarations":[{"prop":"padding","value":"2rem","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null},{"selector":".hero-hook","declarations":[{"prop":"color","value":"#555","important":false}],"specificity":[0,1,0],"order":2,"isHover":false,"matchSelector":null},{"selector":".grid","declarations":[{"prop":"display","value":"grid","important":false},{"prop":"gap","value":"1rem","important":false},{"prop":"grid-template-columns","value":"repeat(3,1fr)","important":false},{"prop":"margin-top","value":"1rem","important":false}],"specificity":[0,1,0],"order":3,"isHover":false,"matchSelector":null},{"selector":".card","declarations":[{"prop":"padding","value":"1rem","important":false},{"prop":"border","value":"1px solid #ddd","important":false},{"prop":"border-radius","value":"0.5rem","important":false}],"specificity":[0,1,0],"order":4,"isHover":false,"matchSelector":null},{"selector":".hero-title","declarations":[{"prop":"font-size","value":"1.4rem","important":false},{"prop":"margin","value":"0 0 0.5rem","important":false}],"specificity":[0,1,0],"order":5,"isHover":false,"matchSelector":null}],"unwrapped":"body { margin: 0; font-family: system-ui, sans-serif; }\n.page { padding: 2rem; }\n.hero-hook { color: #555; }\n.grid { display: grid; gap: 1rem; grid-template-columns: repeat(3, 1fr); margin-top: 1rem; }\n.card { padding: 1rem; border: 1px solid #ddd; border-radius: 0.5rem; }\n.hero-title { font-size: 1.4rem; margin: 0 0 0.5rem; }\n"},{"name":"tests/framework-fixtures/vite8-react-modal/files/src/styles.css","css":"body { margin: 0; font-family: system-ui, sans-serif; }\n.page { padding: 2rem; }\n.hero-title { font-size: 2rem; margin: 0; }\n.hero-hook { color: #555; }\n.modal-backdrop { position: fixed; inset: 0; background: rgba(0,0,0,.4); display: grid; place-items: center; }\n.modal { background: white; padding: 2rem; border-radius: 1rem; min-width: 320px; }\nbutton { padding: 0.5rem 1rem; border-radius: 0.5rem; cursor: pointer; }\n","rules":[{"selector":"body","declarations":[{"prop":"margin","value":"0","important":false},{"prop":"font-family","value":"system-ui,sans-serif","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":".page","declarations":[{"prop":"padding","value":"2rem","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null},{"selector":".hero-title","declarations":[{"prop":"font-size","value":"2rem","important":false},{"prop":"margin","value":"0","important":false}],"specificity":[0,1,0],"order":2,"isHover":false,"matchSelector":null},{"selector":".hero-hook","declarations":[{"prop":"color","value":"#555","important":false}],"specificity":[0,1,0],"order":3,"isHover":false,"matchSelector":null},{"selector":".modal-backdrop","declarations":[{"prop":"position","value":"fixed","important":false},{"prop":"inset","value":"0","important":false},{"prop":"background","value":"rgba(0,0,0,.4)","important":false},{"prop":"display","value":"grid","important":false},{"prop":"place-items","value":"center","important":false}],"specificity":[0,1,0],"order":4,"isHover":false,"matchSelector":null},{"selector":".modal","declarations":[{"prop":"background","value":"white","important":false},{"prop":"padding","value":"2rem","important":false},{"prop":"border-radius","value":"1rem","important":false},{"prop":"min-width","value":"320px","important":false}],"specificity":[0,1,0],"order":5,"isHover":false,"matchSelector":null},{"selector":"button","declarations":[{"prop":"padding","value":"0.5rem 1rem","important":false},{"prop":"border-radius","value":"0.5rem","important":false},{"prop":"cursor","value":"pointer","important":false}],"specificity":[0,0,1],"order":6,"isHover":false,"matchSelector":null}],"unwrapped":"body { margin: 0; font-family: system-ui, sans-serif; }\n.page { padding: 2rem; }\n.hero-title { font-size: 2rem; margin: 0; }\n.hero-hook { color: #555; }\n.modal-backdrop { position: fixed; inset: 0; background: rgba(0,0,0,.4); display: grid; place-items: center; }\n.modal { background: white; padding: 2rem; border-radius: 1rem; min-width: 320px; }\nbutton { padding: 0.5rem 1rem; border-radius: 0.5rem; cursor: pointer; }\n"},{"name":"tests/framework-fixtures/vite8-react-plain/files/src/styles.css","css":"body { margin: 0; font-family: system-ui, sans-serif; }\n.page { padding: 2rem; }\n.hero-copy { padding: 0.75rem; margin: -0.75rem -0.75rem 1rem; }\n.hero-title { font-size: 2rem; }\n.hero-hook { color: #555; }\n.capacity-panel { margin: 0 0 1rem; }\n.capacity-count { display: inline-block; min-width: 2rem; min-height: 1.5rem; }\n.feature-grid { display: grid; gap: 1rem; grid-template-columns: repeat(2, 1fr); }\n.feature-card { padding: 1rem; border: 1px solid #ddd; border-radius: 0.5rem; }\n.large-manual-grid { display: grid; gap: 0.25rem; grid-template-columns: repeat(4, max-content); margin-top: 1rem; }\n.large-manual-item { min-height: 1.25rem; }\n.hard-manual-grid { display: grid; gap: 0.75rem; grid-template-columns: repeat(2, minmax(0, 1fr)); margin-top: 1rem; }\n.hard-manual-card { padding: 0.75rem; border: 1px dashed #bbb; }\n.hard-manual-heading { display: flex; gap: 0.5rem; align-items: baseline; margin: 0 0 0.5rem; font-size: 1rem; }\n.hard-manual-code { font-style: normal; color: #666; }\n.hard-manual-count { display: inline-block; margin-top: 0.5rem; font-weight: 700; }\n.action-row { display: flex; gap: 0.75rem; margin-top: 1rem; }\n.action-row [role=\"button\"] { font: inherit; padding: 0.5rem 0.75rem; border: 1px solid #ddd; border-radius: 0.375rem; }\n","rules":[{"selector":"body","declarations":[{"prop":"margin","value":"0","important":false},{"prop":"font-family","value":"system-ui,sans-serif","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":".page","declarations":[{"prop":"padding","value":"2rem","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null},{"selector":".hero-copy","declarations":[{"prop":"padding","value":"0.75rem","important":false},{"prop":"margin","value":"-0.75rem -0.75rem 1rem","important":false}],"specificity":[0,1,0],"order":2,"isHover":false,"matchSelector":null},{"selector":".hero-title","declarations":[{"prop":"font-size","value":"2rem","important":false}],"specificity":[0,1,0],"order":3,"isHover":false,"matchSelector":null},{"selector":".hero-hook","declarations":[{"prop":"color","value":"#555","important":false}],"specificity":[0,1,0],"order":4,"isHover":false,"matchSelector":null},{"selector":".capacity-panel","declarations":[{"prop":"margin","value":"0 0 1rem","important":false}],"specificity":[0,1,0],"order":5,"isHover":false,"matchSelector":null},{"selector":".capacity-count","declarations":[{"prop":"display","value":"inline-block","important":false},{"prop":"min-width","value":"2rem","important":false},{"prop":"min-height","value":"1.5rem","important":false}],"specificity":[0,1,0],"order":6,"isHover":false,"matchSelector":null},{"selector":".feature-grid","declarations":[{"prop":"display","value":"grid","important":false},{"prop":"gap","value":"1rem","important":false},{"prop":"grid-template-columns","value":"repeat(2,1fr)","important":false}],"specificity":[0,1,0],"order":7,"isHover":false,"matchSelector":null},{"selector":".feature-card","declarations":[{"prop":"padding","value":"1rem","important":false},{"prop":"border","value":"1px solid #ddd","important":false},{"prop":"border-radius","value":"0.5rem","important":false}],"specificity":[0,1,0],"order":8,"isHover":false,"matchSelector":null},{"selector":".large-manual-grid","declarations":[{"prop":"display","value":"grid","important":false},{"prop":"gap","value":"0.25rem","important":false},{"prop":"grid-template-columns","value":"repeat(4,max-content)","important":false},{"prop":"margin-top","value":"1rem","important":false}],"specificity":[0,1,0],"order":9,"isHover":false,"matchSelector":null},{"selector":".large-manual-item","declarations":[{"prop":"min-height","value":"1.25rem","important":false}],"specificity":[0,1,0],"order":10,"isHover":false,"matchSelector":null},{"selector":".hard-manual-grid","declarations":[{"prop":"display","value":"grid","important":false},{"prop":"gap","value":"0.75rem","important":false},{"prop":"grid-template-columns","value":"repeat(2,minmax(0,1fr))","important":false},{"prop":"margin-top","value":"1rem","important":false}],"specificity":[0,1,0],"order":11,"isHover":false,"matchSelector":null},{"selector":".hard-manual-card","declarations":[{"prop":"padding","value":"0.75rem","important":false},{"prop":"border","value":"1px dashed #bbb","important":false}],"specificity":[0,1,0],"order":12,"isHover":false,"matchSelector":null},{"selector":".hard-manual-heading","declarations":[{"prop":"display","value":"flex","important":false},{"prop":"gap","value":"0.5rem","important":false},{"prop":"align-items","value":"baseline","important":false},{"prop":"margin","value":"0 0 0.5rem","important":false},{"prop":"font-size","value":"1rem","important":false}],"specificity":[0,1,0],"order":13,"isHover":false,"matchSelector":null},{"selector":".hard-manual-code","declarations":[{"prop":"font-style","value":"normal","important":false},{"prop":"color","value":"#666","important":false}],"specificity":[0,1,0],"order":14,"isHover":false,"matchSelector":null},{"selector":".hard-manual-count","declarations":[{"prop":"display","value":"inline-block","important":false},{"prop":"margin-top","value":"0.5rem","important":false},{"prop":"font-weight","value":"700","important":false}],"specificity":[0,1,0],"order":15,"isHover":false,"matchSelector":null},{"selector":".action-row","declarations":[{"prop":"display","value":"flex","important":false},{"prop":"gap","value":"0.75rem","important":false},{"prop":"margin-top","value":"1rem","important":false}],"specificity":[0,1,0],"order":16,"isHover":false,"matchSelector":null},{"selector":".action-row [role=\"button\"]","declarations":[{"prop":"font","value":"inherit","important":false},{"prop":"padding","value":"0.5rem 0.75rem","important":false},{"prop":"border","value":"1px solid #ddd","important":false},{"prop":"border-radius","value":"0.375rem","important":false}],"specificity":[0,2,0],"order":17,"isHover":false,"matchSelector":null}],"unwrapped":"body { margin: 0; font-family: system-ui, sans-serif; }\n.page { padding: 2rem; }\n.hero-copy { padding: 0.75rem; margin: -0.75rem -0.75rem 1rem; }\n.hero-title { font-size: 2rem; }\n.hero-hook { color: #555; }\n.capacity-panel { margin: 0 0 1rem; }\n.capacity-count { display: inline-block; min-width: 2rem; min-height: 1.5rem; }\n.feature-grid { display: grid; gap: 1rem; grid-template-columns: repeat(2, 1fr); }\n.feature-card { padding: 1rem; border: 1px solid #ddd; border-radius: 0.5rem; }\n.large-manual-grid { display: grid; gap: 0.25rem; grid-template-columns: repeat(4, max-content); margin-top: 1rem; }\n.large-manual-item { min-height: 1.25rem; }\n.hard-manual-grid { display: grid; gap: 0.75rem; grid-template-columns: repeat(2, minmax(0, 1fr)); margin-top: 1rem; }\n.hard-manual-card { padding: 0.75rem; border: 1px dashed #bbb; }\n.hard-manual-heading { display: flex; gap: 0.5rem; align-items: baseline; margin: 0 0 0.5rem; font-size: 1rem; }\n.hard-manual-code { font-style: normal; color: #666; }\n.hard-manual-count { display: inline-block; margin-top: 0.5rem; font-weight: 700; }\n.action-row { display: flex; gap: 0.75rem; margin-top: 1rem; }\n.action-row [role=\"button\"] { font: inherit; padding: 0.5rem 0.75rem; border: 1px solid #ddd; border-radius: 0.375rem; }\n"},{"name":"tests/framework-fixtures/vite8-react-radix-dialog/files/src/styles.css","css":"body { margin: 0; font-family: system-ui, sans-serif; }\n.page { padding: 2rem; }\nbutton { padding: 0.5rem 1rem; border-radius: 0.5rem; cursor: pointer; }\n\n.dialog-overlay {\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.55);\n z-index: 50;\n}\n\n.dialog-content {\n position: fixed;\n inset: 0;\n display: grid;\n place-items: center;\n z-index: 51;\n}\n\n.dialog-content[role=\"dialog\"] {\n outline: none;\n}\n\n.lightbox {\n display: flex;\n flex-direction: column;\n gap: 1rem;\n background: white;\n padding: 2rem;\n border-radius: 1rem;\n min-width: 360px;\n max-width: 80vw;\n}\n\n.hero-title { font-size: 2rem; margin: 0; }\n.hero-hook { color: #555; }\n","rules":[{"selector":"body","declarations":[{"prop":"margin","value":"0","important":false},{"prop":"font-family","value":"system-ui,sans-serif","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":".page","declarations":[{"prop":"padding","value":"2rem","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null},{"selector":"button","declarations":[{"prop":"padding","value":"0.5rem 1rem","important":false},{"prop":"border-radius","value":"0.5rem","important":false},{"prop":"cursor","value":"pointer","important":false}],"specificity":[0,0,1],"order":2,"isHover":false,"matchSelector":null},{"selector":".dialog-overlay","declarations":[{"prop":"position","value":"fixed","important":false},{"prop":"inset","value":"0","important":false},{"prop":"background","value":"rgba(0,0,0,0.55)","important":false},{"prop":"z-index","value":"50","important":false}],"specificity":[0,1,0],"order":3,"isHover":false,"matchSelector":null},{"selector":".dialog-content","declarations":[{"prop":"position","value":"fixed","important":false},{"prop":"inset","value":"0","important":false},{"prop":"display","value":"grid","important":false},{"prop":"place-items","value":"center","important":false},{"prop":"z-index","value":"51","important":false}],"specificity":[0,1,0],"order":4,"isHover":false,"matchSelector":null},{"selector":".dialog-content[role=\"dialog\"]","declarations":[{"prop":"outline","value":"none","important":false}],"specificity":[0,2,0],"order":5,"isHover":false,"matchSelector":null},{"selector":".lightbox","declarations":[{"prop":"display","value":"flex","important":false},{"prop":"flex-direction","value":"column","important":false},{"prop":"gap","value":"1rem","important":false},{"prop":"background","value":"white","important":false},{"prop":"padding","value":"2rem","important":false},{"prop":"border-radius","value":"1rem","important":false},{"prop":"min-width","value":"360px","important":false},{"prop":"max-width","value":"80vw","important":false}],"specificity":[0,1,0],"order":6,"isHover":false,"matchSelector":null},{"selector":".hero-title","declarations":[{"prop":"font-size","value":"2rem","important":false},{"prop":"margin","value":"0","important":false}],"specificity":[0,1,0],"order":7,"isHover":false,"matchSelector":null},{"selector":".hero-hook","declarations":[{"prop":"color","value":"#555","important":false}],"specificity":[0,1,0],"order":8,"isHover":false,"matchSelector":null}],"unwrapped":"body { margin: 0; font-family: system-ui, sans-serif; }\n.page { padding: 2rem; }\nbutton { padding: 0.5rem 1rem; border-radius: 0.5rem; cursor: pointer; }\n\n.dialog-overlay {\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.55);\n z-index: 50;\n}\n\n.dialog-content {\n position: fixed;\n inset: 0;\n display: grid;\n place-items: center;\n z-index: 51;\n}\n\n.dialog-content[role=\"dialog\"] {\n outline: none;\n}\n\n.lightbox {\n display: flex;\n flex-direction: column;\n gap: 1rem;\n background: white;\n padding: 2rem;\n border-radius: 1rem;\n min-width: 360px;\n max-width: 80vw;\n}\n\n.hero-title { font-size: 2rem; margin: 0; }\n.hero-hook { color: #555; }\n"},{"name":"tests/framework-fixtures/vite8-react-router-spa/files/src/styles.css","css":"body { margin: 0; font-family: system-ui, sans-serif; }\n.nav { display: flex; gap: 1rem; padding: 1rem; border-bottom: 1px solid #eee; }\n.nav a { color: #111; text-decoration: none; }\n.page { padding: 2rem; }\n.hero-title { font-size: 2rem; margin: 0 0 0.5rem; }\n.hero-hook { color: #555; }\n","rules":[{"selector":"body","declarations":[{"prop":"margin","value":"0","important":false},{"prop":"font-family","value":"system-ui,sans-serif","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":".nav","declarations":[{"prop":"display","value":"flex","important":false},{"prop":"gap","value":"1rem","important":false},{"prop":"padding","value":"1rem","important":false},{"prop":"border-bottom","value":"1px solid #eee","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null},{"selector":".nav a","declarations":[{"prop":"color","value":"#111","important":false},{"prop":"text-decoration","value":"none","important":false}],"specificity":[0,1,1],"order":2,"isHover":false,"matchSelector":null},{"selector":".page","declarations":[{"prop":"padding","value":"2rem","important":false}],"specificity":[0,1,0],"order":3,"isHover":false,"matchSelector":null},{"selector":".hero-title","declarations":[{"prop":"font-size","value":"2rem","important":false},{"prop":"margin","value":"0 0 0.5rem","important":false}],"specificity":[0,1,0],"order":4,"isHover":false,"matchSelector":null},{"selector":".hero-hook","declarations":[{"prop":"color","value":"#555","important":false}],"specificity":[0,1,0],"order":5,"isHover":false,"matchSelector":null}],"unwrapped":"body { margin: 0; font-family: system-ui, sans-serif; }\n.nav { display: flex; gap: 1rem; padding: 1rem; border-bottom: 1px solid #eee; }\n.nav a { color: #111; text-decoration: none; }\n.page { padding: 2rem; }\n.hero-title { font-size: 2rem; margin: 0 0 0.5rem; }\n.hero-hook { color: #555; }\n"},{"name":"tests/framework-fixtures/vite8-react-tabs/files/src/styles.css","css":"body { margin: 0; font-family: system-ui, sans-serif; }\n.page { padding: 2rem; }\n.tabs { display: flex; gap: 0.5rem; margin-bottom: 1rem; }\n.tabs button { padding: 0.5rem 1rem; cursor: pointer; }\n.tabs button[aria-selected='true'] { background: #111; color: #fff; }\n.tab-panel { padding: 1rem; border: 1px solid #ddd; border-radius: 0.5rem; }\n.hero-title { font-size: 2rem; margin: 0 0 0.5rem; }\n.hero-hook { color: #555; }\n","rules":[{"selector":"body","declarations":[{"prop":"margin","value":"0","important":false},{"prop":"font-family","value":"system-ui,sans-serif","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":".page","declarations":[{"prop":"padding","value":"2rem","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null},{"selector":".tabs","declarations":[{"prop":"display","value":"flex","important":false},{"prop":"gap","value":"0.5rem","important":false},{"prop":"margin-bottom","value":"1rem","important":false}],"specificity":[0,1,0],"order":2,"isHover":false,"matchSelector":null},{"selector":".tabs button","declarations":[{"prop":"padding","value":"0.5rem 1rem","important":false},{"prop":"cursor","value":"pointer","important":false}],"specificity":[0,1,1],"order":3,"isHover":false,"matchSelector":null},{"selector":".tabs button[aria-selected=\"true\"]","declarations":[{"prop":"background","value":"#111","important":false},{"prop":"color","value":"#fff","important":false}],"specificity":[0,2,1],"order":4,"isHover":false,"matchSelector":null},{"selector":".tab-panel","declarations":[{"prop":"padding","value":"1rem","important":false},{"prop":"border","value":"1px solid #ddd","important":false},{"prop":"border-radius","value":"0.5rem","important":false}],"specificity":[0,1,0],"order":5,"isHover":false,"matchSelector":null},{"selector":".hero-title","declarations":[{"prop":"font-size","value":"2rem","important":false},{"prop":"margin","value":"0 0 0.5rem","important":false}],"specificity":[0,1,0],"order":6,"isHover":false,"matchSelector":null},{"selector":".hero-hook","declarations":[{"prop":"color","value":"#555","important":false}],"specificity":[0,1,0],"order":7,"isHover":false,"matchSelector":null}],"unwrapped":"body { margin: 0; font-family: system-ui, sans-serif; }\n.page { padding: 2rem; }\n.tabs { display: flex; gap: 0.5rem; margin-bottom: 1rem; }\n.tabs button { padding: 0.5rem 1rem; cursor: pointer; }\n.tabs button[aria-selected='true'] { background: #111; color: #fff; }\n.tab-panel { padding: 1rem; border: 1px solid #ddd; border-radius: 0.5rem; }\n.hero-title { font-size: 2rem; margin: 0 0 0.5rem; }\n.hero-hook { color: #555; }\n"},{"name":"tests/framework-fixtures/vite8-react-tailwindv3/files/src/styles.css","css":"@tailwind base;\n@tailwind components;\n@tailwind utilities;\n","rules":[],"unwrapped":"@tailwind base;\n@tailwind components;\n@tailwind utilities;\n"},{"name":"tests/framework-fixtures/vite8-react-tailwindv4/files/src/styles.css","css":"@import \"tailwindcss\";\n","rules":[],"unwrapped":"@import \"tailwindcss\";\n"},{"name":"tests/framework-fixtures/vite8-react-ts/files/src/styles.css","css":"body { margin: 0; font-family: system-ui, sans-serif; }\n.page { padding: 2rem; }\n.hero-title { font-size: 2rem; }\n.hero-hook { color: #555; }\n.feature-grid { display: grid; gap: 1rem; grid-template-columns: repeat(2, 1fr); }\n.feature-card { padding: 1rem; border: 1px solid #ddd; border-radius: 0.5rem; }\n","rules":[{"selector":"body","declarations":[{"prop":"margin","value":"0","important":false},{"prop":"font-family","value":"system-ui,sans-serif","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":".page","declarations":[{"prop":"padding","value":"2rem","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null},{"selector":".hero-title","declarations":[{"prop":"font-size","value":"2rem","important":false}],"specificity":[0,1,0],"order":2,"isHover":false,"matchSelector":null},{"selector":".hero-hook","declarations":[{"prop":"color","value":"#555","important":false}],"specificity":[0,1,0],"order":3,"isHover":false,"matchSelector":null},{"selector":".feature-grid","declarations":[{"prop":"display","value":"grid","important":false},{"prop":"gap","value":"1rem","important":false},{"prop":"grid-template-columns","value":"repeat(2,1fr)","important":false}],"specificity":[0,1,0],"order":4,"isHover":false,"matchSelector":null},{"selector":".feature-card","declarations":[{"prop":"padding","value":"1rem","important":false},{"prop":"border","value":"1px solid #ddd","important":false},{"prop":"border-radius","value":"0.5rem","important":false}],"specificity":[0,1,0],"order":5,"isHover":false,"matchSelector":null}],"unwrapped":"body { margin: 0; font-family: system-ui, sans-serif; }\n.page { padding: 2rem; }\n.hero-title { font-size: 2rem; }\n.hero-hook { color: #555; }\n.feature-grid { display: grid; gap: 1rem; grid-template-columns: repeat(2, 1fr); }\n.feature-card { padding: 1rem; border: 1px solid #ddd; border-radius: 0.5rem; }\n"},{"name":"tests/framework-fixtures/vite8-react-tsx-repeated-aside/files/src/styles.css","css":"body { margin: 0; font-family: system-ui, sans-serif; }\n.page { padding: 2rem; display: grid; gap: 1rem; }\n.card { padding: 1rem; border: 1px solid #ddd; border-radius: 0.5rem; }\n.hero-title { font-size: 1.5rem; margin: 0 0 0.5rem; }\n.hero-hook { color: #555; margin: 0; }\n","rules":[{"selector":"body","declarations":[{"prop":"margin","value":"0","important":false},{"prop":"font-family","value":"system-ui,sans-serif","important":false}],"specificity":[0,0,1],"order":0,"isHover":false,"matchSelector":null},{"selector":".page","declarations":[{"prop":"padding","value":"2rem","important":false},{"prop":"display","value":"grid","important":false},{"prop":"gap","value":"1rem","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null},{"selector":".card","declarations":[{"prop":"padding","value":"1rem","important":false},{"prop":"border","value":"1px solid #ddd","important":false},{"prop":"border-radius","value":"0.5rem","important":false}],"specificity":[0,1,0],"order":2,"isHover":false,"matchSelector":null},{"selector":".hero-title","declarations":[{"prop":"font-size","value":"1.5rem","important":false},{"prop":"margin","value":"0 0 0.5rem","important":false}],"specificity":[0,1,0],"order":3,"isHover":false,"matchSelector":null},{"selector":".hero-hook","declarations":[{"prop":"color","value":"#555","important":false},{"prop":"margin","value":"0","important":false}],"specificity":[0,1,0],"order":4,"isHover":false,"matchSelector":null}],"unwrapped":"body { margin: 0; font-family: system-ui, sans-serif; }\n.page { padding: 2rem; display: grid; gap: 1rem; }\n.card { padding: 1rem; border: 1px solid #ddd; border-radius: 0.5rem; }\n.hero-title { font-size: 1.5rem; margin: 0 0 0.5rem; }\n.hero-hook { color: #555; margin: 0; }\n"},{"name":"tests/oracle/workspaces/ctx-full/src/styles/tokens.css","css":":root {\n --color-ink: #111111;\n --color-paper: #fbf7ef;\n --color-accent: #1a4d8f;\n --font-body: Palatino, Georgia, serif;\n --space-1: 4px;\n --space-2: 8px;\n}\nbody { color: var(--color-ink); background: var(--color-paper); font-family: var(--font-body); }\na { color: var(--color-accent); }\n","rules":[{"selector":":root","declarations":[{"prop":"--color-ink","value":"#111111","important":false},{"prop":"--color-paper","value":"#fbf7ef","important":false},{"prop":"--color-accent","value":"#1a4d8f","important":false},{"prop":"--font-body","value":"Palatino, Georgia, serif","important":false},{"prop":"--space-1","value":"4px","important":false},{"prop":"--space-2","value":"8px","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null},{"selector":"body","declarations":[{"prop":"color","value":"var(--color-ink)","important":false},{"prop":"background","value":"var(--color-paper)","important":false},{"prop":"font-family","value":"var(--font-body)","important":false}],"specificity":[0,0,1],"order":1,"isHover":false,"matchSelector":null},{"selector":"a","declarations":[{"prop":"color","value":"var(--color-accent)","important":false}],"specificity":[0,0,1],"order":2,"isHover":false,"matchSelector":null}],"unwrapped":":root {\n --color-ink: #111111;\n --color-paper: #fbf7ef;\n --color-accent: #1a4d8f;\n --font-body: Palatino, Georgia, serif;\n --space-1: 4px;\n --space-2: 8px;\n}\nbody { color: var(--color-ink); background: var(--color-paper); font-family: var(--font-body); }\na { color: var(--color-accent); }\n"},{"name":"tests/oracle/workspaces/ctx-legacy/src/styles.css","css":":root {\n --color-ink: #111111;\n --color-paper: #fbf7ef;\n --color-accent: #1a4d8f;\n --font-body: Palatino, Georgia, serif;\n --space-1: 4px;\n --space-2: 8px;\n}\nbody { color: var(--color-ink); background: var(--color-paper); font-family: var(--font-body); }\na { color: var(--color-accent); }\n","rules":[{"selector":":root","declarations":[{"prop":"--color-ink","value":"#111111","important":false},{"prop":"--color-paper","value":"#fbf7ef","important":false},{"prop":"--color-accent","value":"#1a4d8f","important":false},{"prop":"--font-body","value":"Palatino, Georgia, serif","important":false},{"prop":"--space-1","value":"4px","important":false},{"prop":"--space-2","value":"8px","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null},{"selector":"body","declarations":[{"prop":"color","value":"var(--color-ink)","important":false},{"prop":"background","value":"var(--color-paper)","important":false},{"prop":"font-family","value":"var(--font-body)","important":false}],"specificity":[0,0,1],"order":1,"isHover":false,"matchSelector":null},{"selector":"a","declarations":[{"prop":"color","value":"var(--color-accent)","important":false}],"specificity":[0,0,1],"order":2,"isHover":false,"matchSelector":null}],"unwrapped":":root {\n --color-ink: #111111;\n --color-paper: #fbf7ef;\n --color-accent: #1a4d8f;\n --font-body: Palatino, Georgia, serif;\n --space-1: 4px;\n --space-2: 8px;\n}\nbody { color: var(--color-ink); background: var(--color-paper); font-family: var(--font-body); }\na { color: var(--color-accent); }\n"},{"name":"tests/oracle/workspaces/ctx-monorepo/apps/a/src/styles.css","css":":root {\n --color-ink: #111111;\n --color-paper: #fbf7ef;\n --color-accent: #1a4d8f;\n --font-body: Palatino, Georgia, serif;\n --space-1: 4px;\n --space-2: 8px;\n}\nbody { color: var(--color-ink); background: var(--color-paper); font-family: var(--font-body); }\na { color: var(--color-accent); }\n","rules":[{"selector":":root","declarations":[{"prop":"--color-ink","value":"#111111","important":false},{"prop":"--color-paper","value":"#fbf7ef","important":false},{"prop":"--color-accent","value":"#1a4d8f","important":false},{"prop":"--font-body","value":"Palatino, Georgia, serif","important":false},{"prop":"--space-1","value":"4px","important":false},{"prop":"--space-2","value":"8px","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null},{"selector":"body","declarations":[{"prop":"color","value":"var(--color-ink)","important":false},{"prop":"background","value":"var(--color-paper)","important":false},{"prop":"font-family","value":"var(--font-body)","important":false}],"specificity":[0,0,1],"order":1,"isHover":false,"matchSelector":null},{"selector":"a","declarations":[{"prop":"color","value":"var(--color-accent)","important":false}],"specificity":[0,0,1],"order":2,"isHover":false,"matchSelector":null}],"unwrapped":":root {\n --color-ink: #111111;\n --color-paper: #fbf7ef;\n --color-accent: #1a4d8f;\n --font-body: Palatino, Georgia, serif;\n --space-1: 4px;\n --space-2: 8px;\n}\nbody { color: var(--color-ink); background: var(--color-paper); font-family: var(--font-body); }\na { color: var(--color-accent); }\n"},{"name":"tests/oracle/workspaces/ctx-monorepo/apps/b/src/styles.css","css":":root {\n --color-ink: #111111;\n --color-paper: #fbf7ef;\n --color-accent: #1a4d8f;\n --font-body: Palatino, Georgia, serif;\n --space-1: 4px;\n --space-2: 8px;\n}\nbody { color: var(--color-ink); background: var(--color-paper); font-family: var(--font-body); }\na { color: var(--color-accent); }\n","rules":[{"selector":":root","declarations":[{"prop":"--color-ink","value":"#111111","important":false},{"prop":"--color-paper","value":"#fbf7ef","important":false},{"prop":"--color-accent","value":"#1a4d8f","important":false},{"prop":"--font-body","value":"Palatino, Georgia, serif","important":false},{"prop":"--space-1","value":"4px","important":false},{"prop":"--space-2","value":"8px","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null},{"selector":"body","declarations":[{"prop":"color","value":"var(--color-ink)","important":false},{"prop":"background","value":"var(--color-paper)","important":false},{"prop":"font-family","value":"var(--font-body)","important":false}],"specificity":[0,0,1],"order":1,"isHover":false,"matchSelector":null},{"selector":"a","declarations":[{"prop":"color","value":"var(--color-accent)","important":false}],"specificity":[0,0,1],"order":2,"isHover":false,"matchSelector":null}],"unwrapped":":root {\n --color-ink: #111111;\n --color-paper: #fbf7ef;\n --color-accent: #1a4d8f;\n --font-body: Palatino, Georgia, serif;\n --space-1: 4px;\n --space-2: 8px;\n}\nbody { color: var(--color-ink); background: var(--color-paper); font-family: var(--font-body); }\na { color: var(--color-accent); }\n"},{"name":"tests/oracle/workspaces/ctx-product-only/src/styles.css","css":":root {\n --color-ink: #111111;\n --color-paper: #fbf7ef;\n --color-accent: #1a4d8f;\n --font-body: Palatino, Georgia, serif;\n --space-1: 4px;\n --space-2: 8px;\n}\nbody { color: var(--color-ink); background: var(--color-paper); font-family: var(--font-body); }\na { color: var(--color-accent); }\n","rules":[{"selector":":root","declarations":[{"prop":"--color-ink","value":"#111111","important":false},{"prop":"--color-paper","value":"#fbf7ef","important":false},{"prop":"--color-accent","value":"#1a4d8f","important":false},{"prop":"--font-body","value":"Palatino, Georgia, serif","important":false},{"prop":"--space-1","value":"4px","important":false},{"prop":"--space-2","value":"8px","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null},{"selector":"body","declarations":[{"prop":"color","value":"var(--color-ink)","important":false},{"prop":"background","value":"var(--color-paper)","important":false},{"prop":"font-family","value":"var(--font-body)","important":false}],"specificity":[0,0,1],"order":1,"isHover":false,"matchSelector":null},{"selector":"a","declarations":[{"prop":"color","value":"var(--color-accent)","important":false}],"specificity":[0,0,1],"order":2,"isHover":false,"matchSelector":null}],"unwrapped":":root {\n --color-ink: #111111;\n --color-paper: #fbf7ef;\n --color-accent: #1a4d8f;\n --font-body: Palatino, Georgia, serif;\n --space-1: 4px;\n --space-2: 8px;\n}\nbody { color: var(--color-ink); background: var(--color-paper); font-family: var(--font-body); }\na { color: var(--color-accent); }\n"},{"name":"tests/oracle/workspaces/ctx-signals/index.html","css":"\n :root { --ink: #111; --paper: #fbf7ef; --accent: #1a4d8f; }\n body { margin: 0; font-family: Palatino, Georgia, serif; color: var(--ink); background: var(--paper); }\n header { padding: 32px 24px; border-bottom: 1px solid #ddd; }\n h1 { font-size: 40px; line-height: 1.1; margin: 0 0 8px; }\n p { max-width: 60ch; line-height: 1.55; }\n .cta { display: inline-block; padding: 12px 20px; background: var(--accent); color: #fff; text-decoration: none; }\n footer { padding: 24px; font-size: 14px; color: #555; }\n","rules":[{"selector":":root","declarations":[{"prop":"--ink","value":"#111","important":false},{"prop":"--paper","value":"#fbf7ef","important":false},{"prop":"--accent","value":"#1a4d8f","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null},{"selector":"body","declarations":[{"prop":"margin","value":"0","important":false},{"prop":"font-family","value":"Palatino,Georgia,serif","important":false},{"prop":"color","value":"var(--ink)","important":false},{"prop":"background","value":"var(--paper)","important":false}],"specificity":[0,0,1],"order":1,"isHover":false,"matchSelector":null},{"selector":"header","declarations":[{"prop":"padding","value":"32px 24px","important":false},{"prop":"border-bottom","value":"1px solid #ddd","important":false}],"specificity":[0,0,1],"order":2,"isHover":false,"matchSelector":null},{"selector":"h1","declarations":[{"prop":"font-size","value":"40px","important":false},{"prop":"line-height","value":"1.1","important":false},{"prop":"margin","value":"0 0 8px","important":false}],"specificity":[0,0,1],"order":3,"isHover":false,"matchSelector":null},{"selector":"p","declarations":[{"prop":"max-width","value":"60ch","important":false},{"prop":"line-height","value":"1.55","important":false}],"specificity":[0,0,1],"order":4,"isHover":false,"matchSelector":null},{"selector":".cta","declarations":[{"prop":"display","value":"inline-block","important":false},{"prop":"padding","value":"12px 20px","important":false},{"prop":"background","value":"var(--accent)","important":false},{"prop":"color","value":"#fff","important":false},{"prop":"text-decoration","value":"none","important":false}],"specificity":[0,1,0],"order":5,"isHover":false,"matchSelector":null},{"selector":"footer","declarations":[{"prop":"padding","value":"24px","important":false},{"prop":"font-size","value":"14px","important":false},{"prop":"color","value":"#555","important":false}],"specificity":[0,0,1],"order":6,"isHover":false,"matchSelector":null}],"unwrapped":"\n :root { --ink: #111; --paper: #fbf7ef; --accent: #1a4d8f; }\n body { margin: 0; font-family: Palatino, Georgia, serif; color: var(--ink); background: var(--paper); }\n header { padding: 32px 24px; border-bottom: 1px solid #ddd; }\n h1 { font-size: 40px; line-height: 1.1; margin: 0 0 8px; }\n p { max-width: 60ch; line-height: 1.55; }\n .cta { display: inline-block; padding: 12px 20px; background: var(--accent); color: #fff; text-decoration: none; }\n footer { padding: 24px; font-size: 14px; color: #555; }\n"},{"name":"tests/oracle/workspaces/ctx-signals/src/styles.css","css":":root {\n --color-ink: #111111;\n --color-paper: #fbf7ef;\n --color-accent: #1a4d8f;\n --font-body: Palatino, Georgia, serif;\n --space-1: 4px;\n --space-2: 8px;\n}\nbody { color: var(--color-ink); background: var(--color-paper); font-family: var(--font-body); }\na { color: var(--color-accent); }\n","rules":[{"selector":":root","declarations":[{"prop":"--color-ink","value":"#111111","important":false},{"prop":"--color-paper","value":"#fbf7ef","important":false},{"prop":"--color-accent","value":"#1a4d8f","important":false},{"prop":"--font-body","value":"Palatino, Georgia, serif","important":false},{"prop":"--space-1","value":"4px","important":false},{"prop":"--space-2","value":"8px","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null},{"selector":"body","declarations":[{"prop":"color","value":"var(--color-ink)","important":false},{"prop":"background","value":"var(--color-paper)","important":false},{"prop":"font-family","value":"var(--font-body)","important":false}],"specificity":[0,0,1],"order":1,"isHover":false,"matchSelector":null},{"selector":"a","declarations":[{"prop":"color","value":"var(--color-accent)","important":false}],"specificity":[0,0,1],"order":2,"isHover":false,"matchSelector":null}],"unwrapped":":root {\n --color-ink: #111111;\n --color-paper: #fbf7ef;\n --color-accent: #1a4d8f;\n --font-body: Palatino, Georgia, serif;\n --space-1: 4px;\n --space-2: 8px;\n}\nbody { color: var(--color-ink); background: var(--color-paper); font-family: var(--font-body); }\na { color: var(--color-accent); }\n"},{"name":"tests/oracle/workspaces/ctx-visual-only/index.html","css":"\n :root { --ink: #111; --paper: #fbf7ef; --accent: #1a4d8f; }\n body { margin: 0; font-family: Palatino, Georgia, serif; color: var(--ink); background: var(--paper); }\n header { padding: 32px 24px; border-bottom: 1px solid #ddd; }\n h1 { font-size: 40px; line-height: 1.1; margin: 0 0 8px; }\n p { max-width: 60ch; line-height: 1.55; }\n .cta { display: inline-block; padding: 12px 20px; background: var(--accent); color: #fff; text-decoration: none; }\n footer { padding: 24px; font-size: 14px; color: #555; }\n","rules":[{"selector":":root","declarations":[{"prop":"--ink","value":"#111","important":false},{"prop":"--paper","value":"#fbf7ef","important":false},{"prop":"--accent","value":"#1a4d8f","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null},{"selector":"body","declarations":[{"prop":"margin","value":"0","important":false},{"prop":"font-family","value":"Palatino,Georgia,serif","important":false},{"prop":"color","value":"var(--ink)","important":false},{"prop":"background","value":"var(--paper)","important":false}],"specificity":[0,0,1],"order":1,"isHover":false,"matchSelector":null},{"selector":"header","declarations":[{"prop":"padding","value":"32px 24px","important":false},{"prop":"border-bottom","value":"1px solid #ddd","important":false}],"specificity":[0,0,1],"order":2,"isHover":false,"matchSelector":null},{"selector":"h1","declarations":[{"prop":"font-size","value":"40px","important":false},{"prop":"line-height","value":"1.1","important":false},{"prop":"margin","value":"0 0 8px","important":false}],"specificity":[0,0,1],"order":3,"isHover":false,"matchSelector":null},{"selector":"p","declarations":[{"prop":"max-width","value":"60ch","important":false},{"prop":"line-height","value":"1.55","important":false}],"specificity":[0,0,1],"order":4,"isHover":false,"matchSelector":null},{"selector":".cta","declarations":[{"prop":"display","value":"inline-block","important":false},{"prop":"padding","value":"12px 20px","important":false},{"prop":"background","value":"var(--accent)","important":false},{"prop":"color","value":"#fff","important":false},{"prop":"text-decoration","value":"none","important":false}],"specificity":[0,1,0],"order":5,"isHover":false,"matchSelector":null},{"selector":"footer","declarations":[{"prop":"padding","value":"24px","important":false},{"prop":"font-size","value":"14px","important":false},{"prop":"color","value":"#555","important":false}],"specificity":[0,0,1],"order":6,"isHover":false,"matchSelector":null}],"unwrapped":"\n :root { --ink: #111; --paper: #fbf7ef; --accent: #1a4d8f; }\n body { margin: 0; font-family: Palatino, Georgia, serif; color: var(--ink); background: var(--paper); }\n header { padding: 32px 24px; border-bottom: 1px solid #ddd; }\n h1 { font-size: 40px; line-height: 1.1; margin: 0 0 8px; }\n p { max-width: 60ch; line-height: 1.55; }\n .cta { display: inline-block; padding: 12px 20px; background: var(--accent); color: #fff; text-decoration: none; }\n footer { padding: 24px; font-size: 14px; color: #555; }\n"},{"name":"tests/oracle/workspaces/ctx-visual-only/src/styles.css","css":":root {\n --color-ink: #111111;\n --color-paper: #fbf7ef;\n --color-accent: #1a4d8f;\n --font-body: Palatino, Georgia, serif;\n --space-1: 4px;\n --space-2: 8px;\n}\nbody { color: var(--color-ink); background: var(--color-paper); font-family: var(--font-body); }\na { color: var(--color-accent); }\n","rules":[{"selector":":root","declarations":[{"prop":"--color-ink","value":"#111111","important":false},{"prop":"--color-paper","value":"#fbf7ef","important":false},{"prop":"--color-accent","value":"#1a4d8f","important":false},{"prop":"--font-body","value":"Palatino, Georgia, serif","important":false},{"prop":"--space-1","value":"4px","important":false},{"prop":"--space-2","value":"8px","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null},{"selector":"body","declarations":[{"prop":"color","value":"var(--color-ink)","important":false},{"prop":"background","value":"var(--color-paper)","important":false},{"prop":"font-family","value":"var(--font-body)","important":false}],"specificity":[0,0,1],"order":1,"isHover":false,"matchSelector":null},{"selector":"a","declarations":[{"prop":"color","value":"var(--color-accent)","important":false}],"specificity":[0,0,1],"order":2,"isHover":false,"matchSelector":null}],"unwrapped":":root {\n --color-ink: #111111;\n --color-paper: #fbf7ef;\n --color-accent: #1a4d8f;\n --font-body: Palatino, Georgia, serif;\n --space-1: 4px;\n --space-2: 8px;\n}\nbody { color: var(--color-ink); background: var(--color-paper); font-family: var(--font-body); }\na { color: var(--color-accent); }\n"},{"name":"tests/oracle/workspaces/detect-config/src/inline.html","css":"\n .faint { color: #ff00aa; }\n .brand { font-family: Verdana } /* impeccable-disable-line design-system-font */\n .also { font-family: Verdana }\n","rules":[{"selector":".faint","declarations":[{"prop":"color","value":"#ff00aa","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null},{"selector":".brand","declarations":[{"prop":"font-family","value":"Verdana","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null},{"selector":".also","declarations":[{"prop":"font-family","value":"Verdana","important":false}],"specificity":[0,1,0],"order":2,"isHover":false,"matchSelector":null}],"unwrapped":"\n .faint { color: #ff00aa; }\n .brand { font-family: Verdana } /* impeccable-disable-line design-system-font */\n .also { font-family: Verdana }\n"},{"name":"tests/oracle/workspaces/detect-config/src/page.html","css":"\n .card { font-family: Verdana, sans-serif; }\n .brand { font-family: Inter, sans-serif; }\n .dot { width: 8px; height: 8px; border-radius: 50%; animation: blink 1s infinite; }\n .off { color: #ff00aa; }\n","rules":[{"selector":".card","declarations":[{"prop":"font-family","value":"Verdana,sans-serif","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null},{"selector":".brand","declarations":[{"prop":"font-family","value":"Inter,sans-serif","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null},{"selector":".dot","declarations":[{"prop":"width","value":"8px","important":false},{"prop":"height","value":"8px","important":false},{"prop":"border-radius","value":"50%","important":false},{"prop":"animation","value":"blink 1s infinite","important":false}],"specificity":[0,1,0],"order":2,"isHover":false,"matchSelector":null},{"selector":".off","declarations":[{"prop":"color","value":"#ff00aa","important":false}],"specificity":[0,1,0],"order":3,"isHover":false,"matchSelector":null}],"unwrapped":"\n .card { font-family: Verdana, sans-serif; }\n .brand { font-family: Inter, sans-serif; }\n .dot { width: 8px; height: 8px; border-radius: 50%; animation: blink 1s infinite; }\n .off { color: #ff00aa; }\n"},{"name":"tests/oracle/workspaces/detect-config/src/styles.css","css":".hero { transition: all 0.3s cubic-bezier(0.68, -0.55, 0.265, 1.55); }\n.glow { box-shadow: 0 0 40px rgba(99, 102, 241, 0.6); }\n/* impeccable-disable-next-line bounce-easing: intentional bounce */\n.bounce { animation-timing-function: cubic-bezier(0.68, -0.55, 0.265, 1.55); }\n","rules":[{"selector":".hero","declarations":[{"prop":"transition","value":"all 0.3s cubic-bezier(0.68,-0.55,0.265,1.55)","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null},{"selector":".glow","declarations":[{"prop":"box-shadow","value":"0 0 40px rgba(99,102,241,0.6)","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null},{"selector":".bounce","declarations":[{"prop":"animation-timing-function","value":"cubic-bezier(0.68,-0.55,0.265,1.55)","important":false}],"specificity":[0,1,0],"order":2,"isHover":false,"matchSelector":null}],"unwrapped":".hero { transition: all 0.3s cubic-bezier(0.68, -0.55, 0.265, 1.55); }\n.glow { box-shadow: 0 0 40px rgba(99, 102, 241, 0.6); }\n/* impeccable-disable-next-line bounce-easing: intentional bounce */\n.bounce { animation-timing-function: cubic-bezier(0.68, -0.55, 0.265, 1.55); }\n"},{"name":"tests/oracle/workspaces/detect-config/src/vendor/ignored.html","css":"\n .card { font-family: Verdana, sans-serif; }\n .brand { font-family: Inter, sans-serif; }\n .dot { width: 8px; height: 8px; border-radius: 50%; animation: blink 1s infinite; }\n .off { color: #ff00aa; }\n","rules":[{"selector":".card","declarations":[{"prop":"font-family","value":"Verdana,sans-serif","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null},{"selector":".brand","declarations":[{"prop":"font-family","value":"Inter,sans-serif","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null},{"selector":".dot","declarations":[{"prop":"width","value":"8px","important":false},{"prop":"height","value":"8px","important":false},{"prop":"border-radius","value":"50%","important":false},{"prop":"animation","value":"blink 1s infinite","important":false}],"specificity":[0,1,0],"order":2,"isHover":false,"matchSelector":null},{"selector":".off","declarations":[{"prop":"color","value":"#ff00aa","important":false}],"specificity":[0,1,0],"order":3,"isHover":false,"matchSelector":null}],"unwrapped":"\n .card { font-family: Verdana, sans-serif; }\n .brand { font-family: Inter, sans-serif; }\n .dot { width: 8px; height: 8px; border-radius: 50%; animation: blink 1s infinite; }\n .off { color: #ff00aa; }\n"},{"name":"tests/oracle/workspaces/hook-project/src/components/Card.module.css","css":".card { border-left: 4px solid #6366f1; border-radius: 8px; }\n.title { background: linear-gradient(90deg, #f472b6, #a78bfa); -webkit-background-clip: text; color: transparent; }\n","rules":[{"selector":".card","declarations":[{"prop":"border-left","value":"4px solid #6366f1","important":false},{"prop":"border-radius","value":"8px","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null},{"selector":".title","declarations":[{"prop":"background","value":"linear-gradient(90deg,#f472b6,#a78bfa)","important":false},{"prop":"-webkit-background-clip","value":"text","important":false},{"prop":"color","value":"transparent","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null}],"unwrapped":".card { border-left: 4px solid #6366f1; border-radius: 8px; }\n.title { background: linear-gradient(90deg, #f472b6, #a78bfa); -webkit-background-clip: text; color: transparent; }\n"},{"name":"tests/oracle/workspaces/hook-project/src/page.html","css":".hero{ box-shadow: 0 0 60px rgba(139,92,246,.7); background:#111; } .k{ color:#666; background:#555 }","rules":[{"selector":".hero","declarations":[{"prop":"box-shadow","value":"0 0 60px rgba(139,92,246,.7)","important":false},{"prop":"background","value":"#111","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null},{"selector":".k","declarations":[{"prop":"color","value":"#666","important":false},{"prop":"background","value":"#555","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null}],"unwrapped":".hero{ box-shadow: 0 0 60px rgba(139,92,246,.7); background:#111; } .k{ color:#666; background:#555 }"},{"name":"tests/oracle/workspaces/live-html/index.html","css":"\n .hero-title { font-size: 2rem; }\n .hero-hook { color: #555; }\n ","rules":[{"selector":".hero-title","declarations":[{"prop":"font-size","value":"2rem","important":false}],"specificity":[0,1,0],"order":0,"isHover":false,"matchSelector":null},{"selector":".hero-hook","declarations":[{"prop":"color","value":"#555","important":false}],"specificity":[0,1,0],"order":1,"isHover":false,"matchSelector":null}],"unwrapped":"\n .hero-title { font-size: 2rem; }\n .hero-hook { color: #555; }\n "}] |