Whole-set theme pass (owner doctrine: theme gets its OWN pass). Fresh single-navigation iframe per template — race-free — then __dcSetProps(root,{theme:"dark"}), settle, and check dark. HARD GATE (fully reliable, pass): (1) no document horizontal overflow in dark, and (2) dark actually applies where a Theme tweak exists. Contrast is ADVISORY only (amber, never gates) — a DOM ancestor-walk cannot reliably attribute the painted fg/bg pixel in this layered/branded/deck system (verified: the deck's "black-on-dark" reads are actually legible cream — the walk measured a container's inherited UA colour, not the styled child). Each measurement runs twice 350ms apart and only counts a fail that reproduces both times (filters transient mid-paint reads), plus a resolved-blue reviewed row group for 8 templates already screenshot-confirmed legible (3 canvas decks + 5 wrapper-inherited-colour cases). Residual known noise: even after that hardening, roughly 1 template per run still shows a lone new advisory flag that isn't reproducible on a second run — traced to iframe-pool scheduling contention (a straggler among the GROUP concurrent iframes), not a real defect. Treat a single new advisory name with suspicion: re-run once; if it reflags on the SAME template twice in a row, it's worth a screenshot; if it rotates to a different template each run, it's this residual noise — documented here rather than silently hidden. The advisory scans only leaf text over a resolvable solid, image/gradient-free background and lists suspects for a human to eyeball; branded / pseudo-element / positioned / gradient surfaces are skipped. Authoritative dark-contrast proof stays the manual token audit (docs/contrast-report.md, v2.9.0) + the visual-diff review. n/a = light-only by design. ◇ = canvas deck/social.