:root{
  --paper:#f2efe6; --paper-light:#faf8f1; --paper-deep:#e8e3d7;
  --ink:#11110f; --ink-soft:#393833; --muted:#716f66; --line:#c8c2b5;
  --signal:#f04421; --signal-dark:#bd2f14;
  --strong:#1d684d; --adequate:#8a6415; --weak:#a52b1b;
  --shell:1040px; --grid:#d9d3c5;
  --sans:-apple-system,BlinkMacSystemFont,"Helvetica Neue",Helvetica,Arial,sans-serif;
  --mono:"SFMono-Regular","Roboto Mono",Consolas,"Liberation Mono",monospace;
}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--sans);
  font-size:16px;line-height:1.55;-webkit-font-smoothing:antialiased}
.shell{max-width:var(--shell);margin:0 auto;padding:0 28px}
.rule{border-top:1px solid var(--line)}

/* mono metadata label, the site's signature device */
.tag{font-family:var(--mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;
  color:var(--muted)}
.tag .n{color:var(--signal);margin-right:14px}

/* masthead */
header{padding:26px 0;border-bottom:1px solid var(--line)}
.mast{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap}
.brand{display:flex;align-items:center;gap:11px}
.mark{width:26px;height:26px;background:var(--signal);color:#fff;display:grid;place-items:center;
  font-weight:800;font-size:15px;letter-spacing:-.02em}
.brandname{font-weight:800;letter-spacing:.16em;font-size:14px}

/* hero */
.hero{padding:56px 0 40px}
h1{font-size:clamp(38px,6vw,64px);line-height:.98;letter-spacing:-.035em;font-weight:800;
  margin:16px 0 0}
h1 .dim{color:var(--muted)}
.url{font-family:var(--mono);font-size:12.5px;color:var(--muted);margin:14px 0 0;word-break:break-all}

.verdictgrid{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:44px;align-items:start;
  margin-top:38px}
.verdict{font-size:20px;line-height:1.45;letter-spacing:-.012em;max-width:60ch}
.scorebox{border:1px solid var(--line);background:var(--paper-light);padding:22px 24px}
.scorenum{font-size:72px;line-height:.9;font-weight:800;letter-spacing:-.045em;
  font-variant-numeric:tabular-nums}
.band{font-family:var(--mono);font-size:12px;letter-spacing:.16em;text-transform:uppercase;
  font-weight:700;margin-top:10px}
.b-strong{color:var(--strong)} .b-adequate{color:var(--adequate)} .b-weak{color:var(--weak)}
.scorebox .of{font-family:var(--mono);font-size:11px;color:var(--muted);letter-spacing:.1em;
  text-transform:uppercase;margin-top:14px;padding-top:12px;border-top:1px solid var(--line)}

/* spec strip */
.specs{display:flex;flex-wrap:wrap;gap:0;border-top:1px solid var(--line);margin-top:44px}
.spec{flex:1 1 150px;padding:16px 20px 16px 0;border-right:1px solid var(--line)}
.spec:last-child{border-right:none}
.spec .k{display:block;font-family:var(--mono);font-size:10.5px;letter-spacing:.13em;
  text-transform:uppercase;color:var(--muted)}
.spec .v{display:block;font-size:15px;font-weight:600;margin-top:5px;letter-spacing:-.01em}

/* sections */
section{padding:52px 0;border-top:1px solid var(--line)}
h2{font-size:clamp(26px,3.4vw,36px);line-height:1.08;letter-spacing:-.028em;font-weight:800;
  margin:14px 0 0;max-width:22ch}
.lede{font-size:17px;color:var(--ink-soft);max-width:70ch;margin:18px 0 0}

/* withheld client name. NOTE: a CSS blur is COSMETIC, the text stays in the
   HTML source, so the generator scrubs the real identifiers from the DATA first
   and only ever blurs a placeholder. */
.withheld{display:inline-flex;flex-direction:column;gap:10px}
.redact{filter:blur(9px);opacity:.9;user-select:none;-webkit-user-select:none;
  display:inline-block;padding:0 .08em}
.redact-wrap{position:relative;display:inline-block}
.redact-wrap::after{content:"";position:absolute;left:0;right:0;bottom:.08em;height:3px;
  background:var(--signal)}
.withheld-tag{display:inline-flex;align-items:center;gap:9px;font-family:var(--mono);
  font-size:11px;letter-spacing:.15em;text-transform:uppercase;color:var(--muted)}
.withheld-tag b{color:var(--signal);font-weight:700;letter-spacing:.15em}
.withheld-tag .dot{width:6px;height:6px;background:var(--signal);flex:0 0 auto}
.scrub{font-family:var(--mono);font-size:.86em;letter-spacing:.06em;background:var(--paper-deep);
  color:var(--muted);padding:1px 6px;border-radius:2px;white-space:nowrap}
.specimen .scrub{background:#2a2925;color:#b9b5a9}

/* who we sent: the mystery client is the product, so it gets a block */
.who-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:0;margin-top:32px;
  border-top:1px solid var(--line)}
.who-col{padding:20px 24px 20px 0;border-right:1px solid var(--line)}
.who-col:last-child{border-right:none;padding-right:0}
.who-col .k{display:block;font-family:var(--mono);font-size:10.5px;letter-spacing:.13em;
  text-transform:uppercase;color:var(--muted)}
.who-col p{font-size:15px;line-height:1.5;margin:11px 0 0;color:var(--ink-soft)}

/* radar: the shape of a run at a glance, which rows cannot show */
.shape{display:grid;grid-template-columns:340px minmax(0,1fr);gap:40px;align-items:center;
  margin-top:34px;border:1px solid var(--line);background:var(--paper-light);padding:26px 28px}
.radarwrap{text-align:center}
.radar{width:100%;max-width:320px;height:auto;display:block;margin:0 auto}
.radar-label{fill:var(--muted);font-family:var(--mono);font-size:10px;letter-spacing:.13em;
  text-transform:uppercase}
.shapenote .k{font-family:var(--mono);font-size:10.5px;letter-spacing:.13em;text-transform:uppercase;
  color:var(--muted)}
.shapenote p{font-size:16px;line-height:1.5;margin:12px 0 0;max-width:46ch}
.shapenote .pull{color:var(--weak);font-weight:700}

/* dimension rows */
.dims{margin-top:34px;border-top:1px solid var(--line)}
.dim{padding:22px 0;border-bottom:1px solid var(--line)}
.dimhead{display:flex;align-items:baseline;justify-content:space-between;gap:18px}
.dimname{font-size:19px;font-weight:700;letter-spacing:-.018em}
.dimscore{font-family:var(--mono);font-size:19px;font-weight:700;font-variant-numeric:tabular-nums}
.track{height:3px;background:var(--paper-deep);margin:14px 0 0;position:relative}
.track i{position:absolute;left:0;top:0;bottom:0;display:block}
.dimnote{font-size:15px;color:var(--ink-soft);margin:14px 0 0;max-width:78ch}

/* the specimen panel: the site's strongest borrowed idea */
.specimen{background:var(--ink);color:#efece3;padding:0;margin:18px 0 0}
.specimen .shead{display:flex;justify-content:space-between;gap:14px;padding:11px 18px;
  border-bottom:1px solid #2a2925;font-family:var(--mono);font-size:10.5px;letter-spacing:.14em;
  text-transform:uppercase;color:#8d8a80}
.turn{padding:15px 18px;border-bottom:1px solid #1f1e1a}
.turn:last-child{border-bottom:none}
.turnmeta{display:flex;justify-content:space-between;gap:12px;font-family:var(--mono);
  font-size:10.5px;letter-spacing:.13em;text-transform:uppercase;color:#8d8a80}
.turnmeta .who.cust{color:var(--signal)}
.turntext{margin:9px 0 0;font-size:15px;line-height:1.5;color:#efece3}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin:11px 0 0}
.chip{font-family:var(--mono);font-size:10.5px;letter-spacing:.09em;text-transform:uppercase;
  border:1px solid #3a3833;color:#8d8a80;padding:4px 9px}
.chip.clicked{border-color:var(--signal);color:var(--signal)}
.clickedflag{font-family:var(--mono);font-size:10px;letter-spacing:.12em;text-transform:uppercase;
  color:var(--signal);margin:9px 0 0}

/* finding block */
.finding{border:1px solid var(--line);background:var(--paper-light);margin-top:26px}
.fbar{display:flex;flex-wrap:wrap;gap:0 18px;padding:11px 20px;border-bottom:1px solid var(--line);
  font-family:var(--mono);font-size:10.5px;letter-spacing:.14em;text-transform:uppercase}
.fbar .sev{color:var(--weak);font-weight:700}
.fbar .meta{color:var(--muted)}
.fbody{padding:20px}
.fclaim{font-size:22px;font-weight:800;letter-spacing:-.022em;line-height:1.2;max-width:30ch}
.fsub{font-size:15px;color:var(--ink-soft);margin:12px 0 0;max-width:74ch}
.frow{display:grid;grid-template-columns:170px minmax(0,1fr);gap:16px;padding:14px 0 0;
  margin-top:16px;border-top:1px solid var(--line)}
.frow .k{font-family:var(--mono);font-size:10.5px;letter-spacing:.13em;text-transform:uppercase;
  color:var(--muted)}
.frow .v{font-size:15px}

/* lists */
ol.recs{counter-reset:r;list-style:none;padding:0;margin:30px 0 0;border-top:1px solid var(--line)}
ol.recs li{counter-increment:r;display:grid;grid-template-columns:56px minmax(0,1fr);gap:18px;
  padding:18px 0;border-bottom:1px solid var(--line);align-items:start}
ol.recs li::before{content:counter(r,decimal-leading-zero);font-family:var(--mono);font-size:12px;
  letter-spacing:.1em;color:var(--signal);padding-top:3px}
ol.recs .txt{font-size:16px;line-height:1.5}

/* claim ledger */
.ledger{margin-top:30px;border-top:1px solid var(--line)}
.claim{display:grid;grid-template-columns:minmax(0,1fr) 150px;gap:18px;padding:16px 0;
  border-bottom:1px solid var(--line);align-items:center}
.claim .c{font-size:15.5px}
.claim .verdict-tag{font-family:var(--mono);font-size:10.5px;letter-spacing:.14em;
  text-transform:uppercase;font-weight:700;text-align:right}
.v-unver,.v-unverifiable{color:var(--adequate)}
.v-verified{color:var(--strong)}
.v-contradicted{color:var(--weak)}

/* executive summary: critical findings, business impact, priority actions */
.subhead{font-family:var(--mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;
  color:var(--muted);margin:40px 0 0}
.critlist{list-style:none;padding:0;margin:16px 0 0;border-top:1px solid var(--line)}
.critlist li{display:grid;grid-template-columns:112px minmax(0,1fr);gap:18px;padding:16px 0;
  border-bottom:1px solid var(--line);align-items:start}
.fid{font-family:var(--mono);font-size:11px;letter-spacing:.1em;color:var(--muted)}
.fid .sev{display:block;font-weight:700;text-transform:uppercase;letter-spacing:.1em;
  font-size:10.5px;margin-top:5px}
.sev-critical,.sev-high{color:var(--weak)}
.sev-medium{color:var(--adequate)}
.critlist .ctxt{font-size:16px;font-weight:700;letter-spacing:-.012em;display:block}
.critlist .cons{font-size:14.5px;color:var(--ink-soft);margin:6px 0 0;font-weight:400}

.impact{margin-top:18px;border:1px solid var(--line);background:var(--paper-light)}
.impact .irow{padding:14px 20px;border-bottom:1px solid var(--line)}
.impact .irow:last-child{border-bottom:none}
.impact .ik{font-family:var(--mono);font-size:10px;letter-spacing:.13em;text-transform:uppercase;
  color:var(--muted)}
.impact .iv{font-size:15px;margin:6px 0 0;color:var(--ink-soft)}
.impact .iv b{color:var(--ink);font-weight:700}

.prioractions{list-style:none;counter-reset:pa;padding:0;margin:20px 0 0;border-top:1px solid var(--line)}
.prioractions li{counter-increment:pa;display:grid;grid-template-columns:30px minmax(0,1fr);gap:14px;
  padding:14px 0;border-bottom:1px solid var(--line);align-items:start}
.prioractions li::before{content:counter(pa);font-family:var(--mono);font-size:13px;font-weight:700;
  color:#fff;background:var(--signal);width:22px;height:22px;border-radius:50%;display:flex;
  align-items:center;justify-content:center;margin-top:1px}
.prioractions .txt{font-size:15px;line-height:1.5;padding-top:1px}
.finding-xref{font-family:var(--mono);font-size:11px;color:var(--signal-dark);text-decoration:none;
  white-space:nowrap}
.finding-xref:hover{text-decoration:underline}

.scopenote{font-size:13.5px;color:var(--muted);margin:22px 0 0;padding-top:16px;
  border-top:1px solid var(--line)}

.matrix{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:0;margin-top:26px;
  border-top:1px solid var(--line);border-left:1px solid var(--line)}
.matrix .col{padding:16px 20px 4px;border-right:1px solid var(--line)}
.matrix .col h4{font-family:var(--mono);font-size:10.5px;letter-spacing:.13em;
  text-transform:uppercase;margin:0 0 12px}
.matrix .col.now h4{color:var(--weak)}
.matrix .col.next h4{color:var(--adequate)}
.matrix .col.monitor h4{color:var(--muted)}
.matrix ul{list-style:none;padding:0;margin:0}
.matrix li{font-size:14px;line-height:1.45;margin:0 0 12px;color:var(--ink-soft)}

footer{padding:40px 0 60px;border-top:1px solid var(--line)}
.foot{font-family:var(--mono);font-size:11px;letter-spacing:.1em;text-transform:uppercase;
  color:var(--muted);display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap}
.mockbar{background:var(--ink);color:var(--paper);font-family:var(--mono);font-size:11px;
  letter-spacing:.14em;text-transform:uppercase;padding:11px 0}
.mockbar .shell{display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap}
.mockbar b{color:var(--signal);font-weight:700}

/* anonymised public case: id, measured baseline, evidence status, disclosure */
.caseid{font-family:var(--mono);font-size:11.5px;letter-spacing:.15em;text-transform:uppercase;
  font-weight:700;color:var(--ink);margin:18px 0 0;padding:8px 12px;border:1px solid var(--ink);
  display:inline-block}
.caseid .sep{color:var(--signal);margin:0 6px}
.baseline{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));margin-top:16px;
  border-top:1px solid var(--line);border-left:1px solid var(--line)}
.bl{padding:16px 18px;border-right:1px solid var(--line);border-bottom:1px solid var(--line);
  background:var(--paper-light)}
.bl .num{font-size:30px;line-height:1;font-weight:800;letter-spacing:-.03em;
  font-variant-numeric:tabular-nums}
.bl .num small{font-size:15px;color:var(--muted);font-weight:700;letter-spacing:0}
.bl p{font-size:13.5px;color:var(--ink-soft);margin:8px 0 0;line-height:1.4}
.status{display:inline-flex;align-items:center;gap:8px;font-family:var(--mono);font-size:10.5px;
  letter-spacing:.14em;text-transform:uppercase;font-weight:700;padding:5px 10px;
  border:1.5px solid currentColor;margin:0 0 14px}
.status::before{content:"";width:7px;height:7px;border-radius:50%;background:currentColor;flex:0 0 auto}
.st-observed{color:var(--ink-soft)}
.st-implemented{color:var(--adequate)}
.st-verified{color:var(--strong)}
.disclosure{margin-top:26px;border:1px solid var(--line);border-left:3px solid var(--signal);
  padding:14px 18px;font-size:14.5px;line-height:1.5;color:var(--ink-soft);background:var(--paper-light)}
.disclosure b{display:block;font-family:var(--mono);font-size:10.5px;letter-spacing:.13em;
  text-transform:uppercase;color:var(--ink);margin-bottom:6px}
.legend{list-style:none;padding:0;margin:22px 0 0;border-top:1px solid var(--line)}
.legend li{display:grid;grid-template-columns:300px minmax(0,1fr);gap:18px;align-items:center;
  padding:12px 0;border-bottom:1px solid var(--line);font-size:14.5px;color:var(--ink-soft)}
.legend .status{margin:0;justify-self:start}
.ba{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));margin-top:18px;
  border-top:1px solid var(--line);border-left:1px solid var(--line)}
.ba > div{padding:16px 18px;border-right:1px solid var(--line);border-bottom:1px solid var(--line)}
.ba .k{display:block;font-family:var(--mono);font-size:10.5px;letter-spacing:.13em;
  text-transform:uppercase;color:var(--muted)}
.ba .big{font-size:40px;font-weight:800;letter-spacing:-.04em;line-height:1;margin-top:10px;
  font-variant-numeric:tabular-nums}
.ba p{font-size:14.5px;color:var(--ink-soft);margin:10px 0 0}
@media (max-width:820px){
  .baseline{grid-template-columns:repeat(2,minmax(0,1fr))}
  .legend li{grid-template-columns:1fr;gap:6px}
  .ba{grid-template-columns:1fr}
}
@media print{
  .baseline{grid-template-columns:repeat(4,minmax(0,1fr))}
  .legend li{grid-template-columns:300px minmax(0,1fr)}
  .ba{grid-template-columns:repeat(2,minmax(0,1fr))}
  .baseline,.bl,.disclosure,.legend li,.ba{break-inside:avoid}
}

@media (max-width:820px){
  .verdictgrid{grid-template-columns:1fr;gap:26px}
  .shape{grid-template-columns:1fr;gap:24px;padding:22px 20px}
  .who-grid{grid-template-columns:1fr}
  .who-col{border-right:none;border-bottom:1px solid var(--line);padding-right:0}
  .who-col:last-child{border-bottom:none}
  .frow{grid-template-columns:1fr;gap:5px}
  .claim{grid-template-columns:1fr;gap:7px}
  .claim .verdict-tag{text-align:left}
  .spec{border-right:none;border-bottom:1px solid var(--line);flex:1 1 100%;padding-right:0}
  .critlist li{grid-template-columns:1fr;gap:6px}
  .matrix{grid-template-columns:1fr}
  .matrix .col{border-right:none;border-bottom:1px solid var(--line)}
  .prioractions li{grid-template-columns:24px minmax(0,1fr)}
}
@media print{
  body{background:#fff}
  .redact{filter:blur(9px);-webkit-print-color-adjust:exact;print-color-adjust:exact}
  .specimen{-webkit-print-color-adjust:exact;print-color-adjust:exact}
  /* A printed page is ~816px wide, which trips the 820px mobile breakpoint and
     stacks every multi-column block into a tall single file. Restore the real
     layout, or a 6-page report becomes 12. */
  .specs{display:flex;flex-wrap:nowrap}
  .spec{flex:1 1 0;border-right:1px solid var(--line);border-bottom:none;
    padding:16px 14px 16px 0}
  .spec:last-child{border-right:none}
  .shape{grid-template-columns:320px minmax(0,1fr)}
  .who-grid{grid-template-columns:repeat(3,minmax(0,1fr))}
  .who-col{border-right:1px solid var(--line);border-bottom:none;padding-right:18px}
  .who-col:last-child{border-right:none}
  .claim{grid-template-columns:minmax(0,1fr) 150px}
  .claim .verdict-tag{text-align:right}
  .frow{grid-template-columns:170px minmax(0,1fr)}
  /* The disclosure must survive the export. Hiding the banner in print removed
     the only place the page says it is a sample with identifiers stripped. */
  .mockbar{background:none;color:var(--muted);border-bottom:1px solid var(--line);
    padding:0 0 10px}
  .mockbar b{color:var(--ink)}
  .finding,.specimen,.shape{break-inside:avoid}
  .critlist li,.impact,.matrix .col{break-inside:avoid}
  .matrix{grid-template-columns:repeat(3,minmax(0,1fr))}
  section{break-inside:auto}
  h2{break-after:avoid}
}@media print{.subhead,.tag,h2,.lede{break-after:avoid}.finding{break-inside:auto}.finding .fbar,.finding .fclaim,.specimen,.ba,.frow,.status{break-inside:avoid}}

@media print{.subhead,.tag,h2,.lede{break-after:avoid}.finding{break-inside:auto}.finding .fbar,.finding .fclaim,.specimen,.ba,.frow,.status{break-inside:avoid}}
/* trend chart */
.trendwrap{margin-top:34px;border:1px solid var(--line);background:var(--paper-light);
  padding:26px 28px 20px}
.trendchart{width:100%;height:auto;display:block}
.trendchart .axis-tick{fill:var(--muted);font-family:var(--mono);font-size:10px}
.trendnote{font-size:15px;color:var(--ink-soft);margin:16px 0 0;padding-top:16px;
  border-top:1px solid var(--line)}
.trendnote b{color:var(--ink)}
@media print{.trendwrap{break-inside:avoid}}

/* Generated by scripts/clean-reports.mjs: classes replacing inline style attributes. Do not edit below. */
.rs-color-var-muted { color:var(--muted) !important; }
.rs-color-var-strong { color:var(--strong) !important; }
.rs-fill-var-ink-font-weight-700 { fill:var(--ink) !important; font-weight:700 !important; }
.rs-fill-var-strong-font-weight-700 { fill:var(--strong) !important; font-weight:700 !important; }
.rs-fill-var-weak-font-weight-700 { fill:var(--weak) !important; font-weight:700 !important; }
