File audited: template/app.css (399 lines, 60 top-level rule blocks, 68 effective rules counting nested @media).
Audit method: Python brace-scanner that walks every top-level rule and every rule nested inside @media/@supports. Each selector is split on commas; every comma-part must either contain #polisci-root or be in the allowed bare set (html, body, *, :root). At-rules (@media, @keyframes, @font-face, @supports, @import, @charset, @page) are allowed at the top level.
| Metric | Count |
|---|---|
| Top-level rule blocks | 60 |
Scoped under #polisci-root |
68 |
Allowed at-rules (@media) |
1 |
| Violations (unscoped) | 0 |
No fixes required. The stylesheet is fully namespaced under #polisci-root, including the comparison styles appended by Phase 5 and the responsive @media (max-width: 768px) block whose inner rules are all prefixed.
template/app.css — passes (0 unscoped rules)template/app.js line 37 — state.BASE = root.dataset.base || './data/' honors host-provided base pathtemplate/compare.js line 30 — same pattern honoredresults/119/_embed_test.html — smoke-test host page written for manual visual inspection