Files
pbakaus_impeccable/crates/live/assets
cb56ed6c19 Fix: detect placeholder contrast (#790) (#799)
* Fix: detect placeholder contrast (#790)

`detect` never read `::placeholder` color, so pale placeholders passed. Score them with the same WCAG math as body text, without host class/clip heuristics.

Prepared with AI assistance.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Fix: match descendant ::placeholder hosts (#790)

`.form ::placeholder` kept the ancestor as the host. Reuse the hover combinator star-fill so the color lands on the inputs inside.

Prepared with AI assistance.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Fix: placeholder-shown and gradient alpha (#790)

Browser scans skip when :placeholder-shown is false, so a live filled field does not keep the HTML value attribute's empty state. Translucent placeholders flatten over each gradient stop before scoring.

Prepared with AI assistance.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Fix: trailing combinator only for ::placeholder hosts (#790)

`star_empty_compounds` turned `.label + ::placeholder` into `.label *+*`. Fill only a trailing empty compound so adjacent-sibling hosts still match.

Prepared with AI assistance.

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-10 13:49:59 -07:00
..

Live browser assets

Two generated files, both tracked, both rewritten by cargo xtask bundle. Do not hand-edit either one.

detect-antipatterns-browser.js is the in-page detector bundle: the rule core (crates/core) compiled to WebAssembly by crates/wasm, concatenated with the page JS in browser-bundle/ and the module embedded as base64. crates/live/src/browser_assets.rs embeds it with include_str! and the live server hands it to the browser as /detect.js, so the binary has to carry it.

antipatterns.json is the rule registry (crates/foundation/src/registry.rs) as [{ id, name, category, description }], the same slice cargo xtask bundle vendors into the extension's extension/detector/. It is tracked because extension/detector/ is not: a consumer working from a source checkout or a repo tarball (impeccable.style counts and renders the rules from it) has no other way to read the registry without a Rust toolchain.

cargo xtask bundle          # rewrites both (and extension/detector/)
cargo xtask bundle --check  # fails when either is stale

The other browser scripts the live server serves (live-browser*.js, modern-screenshot.umd.js) are not copied here: they are embedded straight from skill/scripts/, the one copy the build also ships to every provider.