/* ============================================================
   PERIMTR — Neighbourhood Intelligence Report
   Cleaned reading layout. Strict palette: white / black / blue.
   No alarm red. Hierarchy by scale, weight, and the blue italic.
   ============================================================ */

html { scroll-behavior: smooth; }
body { background: var(--bg); color: var(--ink); margin: 0; font-family:var(--sans); -webkit-font-smoothing: antialiased; overflow-wrap:break-word; }
*, *::before, *::after { box-sizing: border-box; min-width:0; }
.report-skip-link { position:fixed;left:12px;top:8px;z-index:1000;transform:translateY(-160%);background:var(--ink);color:#fff;padding:10px 14px;font-weight:700; }
.report-skip-link:focus { transform:translateY(0); }
:where(a,button,[tabindex]):focus-visible { outline:3px solid var(--accent);outline-offset:3px; }

/* ---- TYPEFACE SYSTEMS ---------------------------------------------
   The report shares the same IBM Plex-led sans system as the Perimtr
   site. System fallbacks keep it readable without contacting a CDN. */
:root {
  --serif: 'IBM Plex Sans', system-ui, -apple-system, sans-serif;
  --sans:  'IBM Plex Sans', system-ui, -apple-system, sans-serif;
}
html[data-typeface="editorial"] {
  --serif: 'Boska', 'Times New Roman', Georgia, serif;
  --sans:  'Switzer', 'Helvetica Neue', Arial, sans-serif;
}
html[data-typeface="system"] {
  --serif: system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
  --sans:  system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
}
/* Plain & System are sans — italics read better slightly less tight. */
html:not([data-typeface="editorial"]) .sec-head h2 em,
html:not([data-typeface="editorial"]) .card h3 em,
html:not([data-typeface="editorial"]) .cover .know,
html:not([data-typeface="editorial"]) .verdict { letter-spacing: 0; }

/* Reading width (Tweakable) */
html[data-width="wide"] .wrap { max-width: 1480px; }

/* The reading column. One width, centred, generous gutters. */
.wrap { max-width: 1240px; margin: 0 auto; padding: 0 64px; }
@media (max-width: 860px) { .wrap { padding: 0 28px; } }

/* ----------------------------------------------------------------
   META STRIP — quiet utility bar
   ---------------------------------------------------------------- */
.meta-strip {
  border-bottom: 1px solid var(--rule);
}
.meta-strip .wrap {
  display: flex; justify-content: space-between; align-items: center;
  padding-top: 16px; padding-bottom: 16px;
  font-family: var(--mono); font-size: 9px;
  letter-spacing: 0.18em; text-transform: uppercase; color: var(--muted);
}
.meta-strip .id b { color: var(--accent); font-weight: 500; }
.report-home { color:var(--ink);font-family:var(--sans);font-size:18px;font-weight:700;letter-spacing:-0.04em;text-decoration:none;white-space:nowrap;text-transform:none; }
.report-home span { color:var(--accent); }
.meta-strip .actions { display: flex; gap: 22px; }
.report-download { color:var(--ink);text-decoration:none;white-space:nowrap;display:inline-flex;align-items:center;gap:6px;transition:opacity .15s ease;padding:4px; }
.report-download:hover { text-decoration:none;opacity:.55; }
.meta-strip .actions button {
  color: var(--ink); text-decoration: none; white-space: nowrap;
  display: inline-flex; align-items: center; gap: 6px;
  transition: opacity .15s ease; border:0; background:none; padding:4px; cursor:pointer;
  font:inherit; letter-spacing:inherit; text-transform:inherit;
}
.meta-strip .actions button:hover { opacity: 0.55; }
.meta-strip .actions a.accent { color: var(--accent); }
.meta-strip .actions i { width: 13px; height: 13px; stroke-width: 1.5; }

/* ----------------------------------------------------------------
   COVER
   ---------------------------------------------------------------- */
.cover { padding-top: 112px; padding-bottom: 96px; border-bottom: 2px solid var(--ink); }
.cover-logo { font-family:'IBM Plex Sans',sans-serif;font-size:24px;font-weight:700;letter-spacing:-0.04em;line-height:1;color:var(--ink);margin-bottom:22px; }
.cover-logo span { color:var(--accent); }
.cover .eyebrow {
  font-family: var(--sans); font-weight: 500;
  font-size: 11px; letter-spacing: 0.32em; text-transform: uppercase;
  color: var(--accent); display: block; margin-bottom: 10px;
}
.cover .know {
  font-family: var(--serif); font-style: italic; font-weight: 500;
  font-size: 19px; color: var(--muted); display: block; margin-bottom: 72px;
}
.cover h1 {
  font-family: var(--serif); font-weight: 500;
  font-size: clamp(56px, 9vw, 132px);
  letter-spacing: -0.04em; line-height: 0.9; margin: 0 0 28px;
}
.cover .place {
  display: flex; flex-wrap: wrap; align-items: baseline; gap: 10px 18px;
}
.cover .nbhd {
  font-family: var(--sans); font-weight: 500;
  font-size: 13px; letter-spacing: 0.22em; text-transform: uppercase; color: var(--ink);
}
.cover .ward {
  font-family: var(--mono); font-size: 11px;
  letter-spacing: 0.1em; color: var(--muted); text-transform: uppercase;
}
.cover-meta {
  display: grid; grid-template-columns: repeat(4, 1fr); gap: 32px;
  margin-top: 80px; padding-top: 28px; border-top: 1px solid var(--rule);
}
.cover-meta .k {
  font-family: var(--sans); font-weight: 500; font-size: 10px;
  letter-spacing: 0.2em; text-transform: uppercase; color: var(--accent);
  display: block; margin-bottom: 8px;
}
.cover-meta .v { font-family: var(--mono); font-size: 14px; font-weight: 500; color: var(--ink); }
.cover-disc {
  margin: 24px 0 0; font-family: var(--mono); font-size: 9px;
  letter-spacing: 0.12em; text-transform: uppercase; color: var(--muted-soft);
}
.cover-disc a { color: var(--accent); text-decoration: none; }

/* ----------------------------------------------------------------
   KEY SIGNALS BAND — the anchor read. White, hairline columns.
   ---------------------------------------------------------------- */
.signals { padding-top: 64px; padding-bottom: 64px; border-bottom: 2px solid var(--ink); }
.signals .head {
  font-family: var(--sans); font-weight: 500; font-size: 10px;
  letter-spacing: 0.2em; text-transform: uppercase; color: var(--accent);
  margin-bottom: 36px;
}
.signals-row { display:grid;grid-template-columns:repeat(2,1fr);gap:16px; }
.signal { padding:28px;border:1px solid var(--rule);min-width:0; }
.signal:first-child { padding:30px;border:2px solid var(--accent); }
.signal-primary { grid-column:1 / -1;display:grid;grid-template-columns:minmax(180px,.7fr) 1.3fr;column-gap:36px;align-items:end; }
.signal-primary .lbl { grid-column:1 / -1; }
.signal-primary .read { margin-top:0; }
.signal .lbl {
  font-family: var(--sans); font-weight: 500; font-size: 10px;
  letter-spacing: 0.18em; text-transform: uppercase; color: var(--muted);
  display: block; margin-bottom: 16px;
}
.signal .big {
  font-family: var(--serif); font-weight: 900; letter-spacing: -0.04em;
  line-height: 0.92; color: var(--accent); font-size: 52px; overflow-wrap:normal; word-break:normal;
}
@media (max-width: 1200px) { .signal .big { font-size:clamp(28px,2.7vw,40px) !important; } }
.signal .big .u { font-family: var(--sans); font-weight: 700; font-size: 15px; letter-spacing: 0; vertical-align: super; margin-left: 2px; }
.data-note { margin-top: 12px; font-family: var(--sans); font-size: 11px; line-height: 1.45; color: var(--muted); }
.signal .read {
  font-family: var(--sans); font-size: 13px; line-height: 1.45;
  color: var(--muted); margin-top: 14px;
}
.signal .read b { color: var(--ink); font-weight: 500; }
@media (max-width: 980px) {
  .signals-row { grid-template-columns: repeat(2, 1fr); gap: 36px 0; }
  .signal-primary { grid-template-columns:1fr; }
  .signal-primary .read { margin-top:14px; }
}

/* ----------------------------------------------------------------
   SECTION SCAFFOLD
   ---------------------------------------------------------------- */
.section { padding-top: 96px; padding-bottom: 8px; }
.section.dim-bg { background: var(--dim); padding-bottom: 96px; }
.sec-head {
  display: flex; align-items: baseline; gap: 20px;
  padding-bottom: 18px; margin-bottom: 44px;
  border-bottom: 2px solid var(--ink);
}
.sec-head .num {
  font-family: var(--mono); font-weight: 500; font-size: 11px;
  letter-spacing: 0.18em; text-transform: uppercase; color: var(--accent);
  flex-shrink: 0; position: relative; top: -2px;
}
.sec-head h2 {
  font-family: var(--serif); font-weight: 500;
  font-size: clamp(30px, 3.6vw, 46px); letter-spacing: -0.03em;
  line-height: 1; margin: 0;
}
.sec-head h2 em { font-family: var(--serif); font-style: italic; font-weight: 700; color: var(--accent); }
.sec-head .sub {
  margin-left: auto; max-width: 320px; text-align: right;
  font-family: var(--sans); font-size: 13px; line-height: 1.45; color: var(--muted);
}
@media (max-width: 760px) {
  .sec-head { flex-wrap: wrap; gap: 8px 16px; }
  .sec-head .sub { margin-left: 0; text-align: left; width: 100%; }
}

/* ----------------------------------------------------------------
   BENTO GRID + CARDS
   ---------------------------------------------------------------- */
.bento { display: grid; grid-template-columns: repeat(12, 1fr); gap: 24px; }
.bento + .bento { margin-top: 24px; }

.card {
  border: 1px solid var(--rule); background: var(--bg);
  padding: 32px; display: flex; flex-direction: column;
}
.card.dim { background: var(--dim); border-color: transparent; }
.card.accent-line { border: 2px solid var(--accent); }
.card.ink { background: var(--ink); color: #fff; border: 0; }
.card.ink .lbl { color: rgba(255,255,255,0.6); }
.card.ink .big, .card.ink .numeral { color: #fff; }

.card .lbl {
  font-family: var(--sans); font-weight: 650; font-size: 11.5px;
  letter-spacing: 0.13em; line-height: 1.4; text-transform: uppercase; color: var(--accent);
  display: block; margin-bottom: 14px;
}
.card h3 {
  font-family: var(--serif); font-weight: 500; font-size: 27px;
  letter-spacing: -0.02em; line-height: 1.05; margin: 0 0 14px;
}
.card h3 em { font-family: var(--serif); font-style: italic; font-weight: 700; color: var(--accent); }
.card.ink h3 em { color: #fff; }
.card p { font-family: var(--sans); font-size: 14px; line-height: 1.6; color: var(--muted); margin: 0; }
.card p + p { margin-top: 12px; }
.card p b { color: var(--ink); font-weight: 600; }
.card.ink p { color: rgba(255,255,255,0.82); }
.card.ink p b { color: #fff; }

/* spans */
.s2{grid-column:span 2}.s3{grid-column:span 3}.s4{grid-column:span 4}
.s5{grid-column:span 5}.s6{grid-column:span 6}.s7{grid-column:span 7}
.s8{grid-column:span 8}.s9{grid-column:span 9}.s12{grid-column:span 12}
@media (max-width: 860px) {
  .bento { grid-template-columns: repeat(2, 1fr); gap: 16px; }
  .s2,.s3,.s4,.s5,.s6,.s7,.s8,.s9 { grid-column: span 1; }
  .s12 { grid-column: span 2; }
}

/* ----------------------------------------------------------------
   NUMERALS
   ---------------------------------------------------------------- */
.numeral { font-family: var(--serif); font-weight: 900; line-height: 0.88; color: var(--accent); letter-spacing: -0.05em; }
.numeral.xl { font-size: 104px; }
.numeral.lg { font-size: 76px; }
.numeral.md { font-size: 52px; }
.numeral .unit { font-family: var(--sans); font-weight: 700; font-size: 15px; margin-left: 4px; letter-spacing: 0; vertical-align: super; opacity: 0.85; }

/* stat — label over numeral, repeating mini-metric */
.stat .stat-lbl {
  font-family: var(--sans); font-weight: 500; font-size: 10px;
  letter-spacing: 0.18em; text-transform: uppercase; color: var(--muted);
  display: block; margin-bottom: 10px;
}

/* ----------------------------------------------------------------
   KEY / VALUE ROWS
   ---------------------------------------------------------------- */
.kv { font-family: var(--mono); font-size: 12.5px; }
.kv .row { display: flex; justify-content: space-between; gap: 18px; padding: 13px 0; border-bottom: 1px solid var(--rule); }
.kv .row:last-child { border-bottom: 0; }
.kv .k { color: var(--muted); }
.kv .v { font-weight: 500; text-align: right; }
.kv .v.accent { color: var(--accent); }

/* ----------------------------------------------------------------
   SIGNAL BARS (crime categories)
   ---------------------------------------------------------------- */
.sig { padding: 16px 0; border-bottom: 1px solid var(--rule); }
.sig:last-child { border-bottom: 0; }
.sig .top { display: flex; justify-content: space-between; align-items: baseline; gap: 14px; }
.sig .name { font-family: var(--sans); font-weight: 500; font-size: 13px; letter-spacing: 0.06em; text-transform: uppercase; }
.sig .name .rank { font-family: var(--mono); color: var(--muted-soft); margin-right: 12px; font-weight: 400; }
.sig .val { font-family: var(--serif); font-weight: 900; font-size: 22px; letter-spacing: -0.03em; color: var(--ink); }
.sig .val.lead { color: var(--accent); }
.sig .track { width: 100%; height: 3px; background: var(--rule); margin-top: 12px; }
.sig .fill { height: 100%; background: var(--accent); }
.sig .breakdown { font-family: var(--mono); font-size: 10.5px; color: var(--muted); margin-top: 10px; letter-spacing: 0.02em; line-height: 1.5; }
.sig .breakdown b { color: var(--ink); font-weight: 500; }

/* ----------------------------------------------------------------
   DISTANCE BANDS
   ---------------------------------------------------------------- */
.bands { margin-top: 6px; }
.band { display: grid; grid-template-columns: 120px 1fr 72px; gap: 18px; align-items: center; padding: 16px 0; border-bottom: 1px solid var(--rule); }
.band:last-child { border-bottom: 0; }
.band .label { font-family: var(--mono); font-size: 11px; font-weight: 500; letter-spacing: 0.06em; }
.band .track { height: 3px; background: var(--rule); position: relative; }
.band .track::after { content:''; position:absolute; left:0; top:0; height:100%; background: var(--accent); width: var(--w, 0); }
.band .n { text-align: right; font-family: var(--serif); font-weight: 900; font-size: 20px; letter-spacing: -0.03em; }

/* ----------------------------------------------------------------
   TIME-OF-DAY COMPARISON
   ---------------------------------------------------------------- */
.time-intro, .fire-intro { margin: -4px 0 18px; font-family: var(--sans); font-size: 12.5px; line-height: 1.55; color: var(--muted); }
.time-bars { display:grid; gap:0; }
.time-row { display:grid; grid-template-columns:104px minmax(72px,1fr) 46px 54px; gap:12px; align-items:center; min-height:54px; border-top:1px solid var(--rule); }
.time-name strong { display:block; font-family:var(--sans); font-size:12px; font-weight:600; color:var(--ink); }
.time-name span { display:block; margin-top:3px; font-family:var(--mono); font-size:9px; color:var(--muted); }
.time-track { height:6px; background:var(--rule); }
.time-track span { display:block; width:var(--w,0); height:100%; background:var(--accent); }
.time-count { text-align:right; font-family:var(--serif); font-size:22px; font-weight:900; letter-spacing:-.03em; color:var(--ink); }
.time-tag { font-family:var(--sans); font-size:8px; font-weight:600; letter-spacing:.1em; text-transform:uppercase; color:var(--accent); }
.time-row:not(.peak) .time-tag { visibility:hidden; }

/* fire evidence */
.fire-evidence h3 { font-size:32px; margin-bottom:10px; }
.fire-evidence h3 em { color:var(--accent); }
.fire-heading { display:grid; grid-template-columns:minmax(0,1.7fr) minmax(240px,.8fr); gap:36px; align-items:start; }
.fire-grid { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); margin-top:24px; border-top:2px solid var(--ink); border-left:1px solid var(--rule); }
.fire-panel { padding:22px; border-right:1px solid var(--rule); border-bottom:1px solid var(--rule); }
.fire-panel h4 { margin:0 0 6px; font-family:var(--sans); font-size:16px; }
.fire-denominator, .fire-note { margin:0 0 13px; font-family:var(--sans); font-size:10.5px; line-height:1.45; color:var(--muted); }
.fire-list { margin:0; }
.fire-list > div { display:grid; grid-template-columns:1fr auto; gap:18px; padding:9px 0; border-top:1px solid var(--rule); }
.fire-list dt { font-family:var(--sans); font-size:11.5px; line-height:1.35; }
.fire-list dd { margin:0; font-family:var(--mono); font-size:11px; font-weight:600; white-space:nowrap; }
.fire-list dd span { margin-left:5px; color:var(--muted); font-weight:400; }
.fire-note { margin:12px 0 0; }
.station-context { padding-top:14px; border-top:2px solid var(--ink); }
.station-context > span { display:block; margin-bottom:6px; font-family:var(--sans); font-size:9px; font-weight:600; letter-spacing:.13em; text-transform:uppercase; color:var(--accent); }
.station-context > strong { display:block; font-family:var(--sans); font-size:13px; line-height:1.4; }
.station-context p { margin:7px 0 0; font-family:var(--sans); font-size:10.5px; line-height:1.45; color:var(--muted); }

/* ----------------------------------------------------------------
   TABLES
   ---------------------------------------------------------------- */
.tbl { width: 100%; border-collapse: collapse; font-family: var(--mono); font-size: 12.5px; }
.tbl thead th {
  text-align: left; font-family: var(--sans); font-weight: 500; font-size: 10px;
  letter-spacing: 0.18em; text-transform: uppercase; color: var(--accent);
  padding: 0 12px 14px; border-bottom: 2px solid var(--ink); white-space: nowrap;
}
.tbl tbody td { padding: 15px 12px; border-bottom: 1px solid var(--rule); vertical-align: top; }
.tbl tbody tr:last-child td { border-bottom: 0; }
.tbl tbody tr:hover td { background: var(--accent-wash); }
.tbl .num { text-align: right; font-variant-numeric: tabular-nums; }
.tbl .accent { color: var(--accent); font-weight: 700; }
.tbl .primary { font-family: var(--sans); font-weight: 500; font-size: 13px; letter-spacing: 0.02em; color: var(--ink); }
.tbl .sub2 { display: block; color: var(--muted); margin-top: 3px; font-size: 11px; }
.tbl td:first-child { padding-left: 0; }
.tbl th:first-child { padding-left: 0; }
.tbl td:last-child { padding-right: 0; }
.tbl th:last-child { padding-right: 0; }

/* ranked list (311) */
.ranked { font-family: var(--mono); }
.ranked .r { display: grid; grid-template-columns: 28px 1fr auto; gap: 14px; align-items: baseline; padding: 13px 0; border-bottom: 1px solid var(--rule); }
.ranked .r:last-child { border-bottom: 0; }
.ranked .rk { color: var(--muted-soft); font-size: 11px; }
.ranked .nm { font-family: var(--sans); font-size: 13.5px; color: var(--ink); }
.ranked .ct { font-family: var(--serif); font-weight: 900; font-size: 18px; letter-spacing: -0.02em; color: var(--accent); }

/* ----------------------------------------------------------------
   SEASONAL
   ---------------------------------------------------------------- */
.seasons { display: grid; grid-template-columns: 1fr; }
.season { display: grid; grid-template-columns: 96px 1fr; gap: 20px; padding: 16px 0; border-bottom: 1px solid var(--rule); }
.season:last-child { border-bottom: 0; }
.season .nm { font-family: var(--sans); font-weight: 500; font-size: 11px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--accent); }
.season .items { font-family: var(--mono); font-size: 12.5px; line-height: 1.9; color: var(--muted); }
.season .items b { color: var(--ink); font-weight: 500; }

/* ----------------------------------------------------------------
   SENTINEL NARRATIVE (§06)
   ---------------------------------------------------------------- */
.sentinel-tag {
  font-family: var(--mono); font-size: 10px; letter-spacing: 0.14em; text-transform: uppercase;
  color: var(--accent); display: flex; align-items: center; gap: 10px; margin-bottom: 8px;
}
.sentinel-tag .dot { width: 6px; height: 6px; border-radius: 50%; background: var(--accent); box-shadow: var(--shadow-glow-accent); }
.takeaway p { font-family: var(--sans); font-size: 16px; line-height: 1.65; color: var(--ink); margin: 0; }
.takeaway p b { font-weight: 600; color: var(--accent); }
.narrative-body { font-family: var(--sans); font-size: 15px; line-height: 1.72; color: var(--muted); }
.narrative-body b { color: var(--ink); font-weight: 600; }
.watch .w-item { padding: 18px 0; border-bottom: 1px solid var(--rule); display: flex; gap: 16px; align-items: baseline; }
.watch .w-item:last-child { border-bottom: 0; }
.watch .w-item .idx { font-family: var(--serif); font-weight: 900; font-size: 22px; color: var(--accent); letter-spacing: -0.03em; line-height: 1; min-width: 30px; }
.watch .w-item .txt { font-family: var(--sans); font-size: 13.5px; line-height: 1.5; color: var(--ink); }

/* ----------------------------------------------------------------
   INFRASTRUCTURE PIECES
   ---------------------------------------------------------------- */
.species { display: flex; gap: 10px; flex-wrap: wrap; margin-top: 6px; }
.species .sp { font-family: var(--mono); font-size: 11px; letter-spacing: 0.04em; padding: 7px 12px; border: 1px solid var(--rule); color: var(--ink); }
.cycle-row { display: flex; justify-content: space-between; font-family: var(--mono); font-size: 12.5px; padding: 11px 0; border-bottom: 1px solid var(--rule); }
.cycle-row:last-child { border-bottom: 0; }
.cycle-row b { color: var(--accent); font-weight: 700; }
.verdict-row { display: flex; justify-content: space-between; align-items: baseline; gap: 18px; padding: 20px 22px; border: 2px solid var(--accent); }
.verdict-row .label { font-family: var(--sans); font-weight: 500; font-size: 11px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--muted); }
.verdict-row .verdict { font-family: var(--serif); font-style: italic; font-weight: 700; font-size: 22px; color: var(--accent); }

/* ----------------------------------------------------------------
   PROXIMITY ROWS
   ---------------------------------------------------------------- */
.prox { font-family: var(--mono); }
.prox-row { display: grid; grid-template-columns: 140px 1fr auto auto; gap: 20px; align-items: baseline; padding: 18px 0; border-bottom: 1px solid var(--rule); }
.prox-row:last-child { border-bottom: 0; }
.prox-row .type { font-family: var(--sans); font-weight: 500; font-size: 11px; letter-spacing: 0.16em; text-transform: uppercase; color: var(--accent); display: flex; align-items: center; gap: 9px; }
.prox-row .type i { width: 15px; height: 15px; stroke-width: 1.5; color: var(--accent); }
.prox-row .place { font-family: var(--sans); font-size: 14px; color: var(--ink); }
.prox-row .dist { font-family: var(--serif); font-weight: 900; font-size: 19px; letter-spacing: -0.03em; text-align: right; }
.prox-row .walk { font-size: 11px; color: var(--muted); text-align: right; min-width: 64px; }
.prox-row.near .dist { color: var(--accent); }
@media (max-width: 760px) {
  .prox-row { grid-template-columns: 1fr auto; gap: 6px 16px; }
  .prox-row .place { grid-column: 1 / -1; }
}

/* ----------------------------------------------------------------
   METHODOLOGY
   ---------------------------------------------------------------- */
.method h4 { font-family: var(--serif); font-weight: 500; font-size: 19px; letter-spacing: -0.015em; margin: 0 0 8px; }
.method p { font-family: var(--sans); font-size: 13.5px; line-height: 1.65; color: var(--muted); margin: 0 0 22px; }
.method p b { color: var(--ink); font-weight: 600; }
.class-card .tag { font-family: var(--sans); font-weight: 700; font-size: 11px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--accent); display:block; margin-bottom: 6px; }
.class-card .sub { font-family: var(--mono); font-size: 10px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--muted); display: block; margin-bottom: 16px; }
.class-card .desc { font-family: var(--sans); font-size: 13px; line-height: 1.55; color: var(--ink); margin: 0 0 16px; }
.class-card ul { list-style: none; padding: 0; margin: 0; font-family: var(--mono); font-size: 11px; line-height: 1.95; color: var(--muted); }
.class-card li::before { content: '·'; color: var(--accent); margin-right: 9px; }
.notlist { list-style: none; padding: 0; margin: 0; }
.notlist li { font-family: var(--sans); font-size: 14px; line-height: 1.55; color: var(--muted); padding: 12px 0; border-bottom: 1px solid var(--rule); display: flex; gap: 12px; }
.notlist li:last-child { border-bottom: 0; }
.notlist li .x { color: var(--accent); font-weight: 700; }
.notlist li b { color: var(--ink); font-weight: 600; }
.disclaimer-box { font-family: var(--sans); font-size: 12px; line-height: 1.65; color: var(--muted-soft); margin-top: 4px; }

/* source footer line */
.source { font-family: var(--mono); font-size: 9px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--accent); border-top: 2px solid var(--ink); padding-top: 14px; margin-top: 32px; }
.source.muted { color: var(--muted); border-top: 1px solid var(--rule); }

/* note (about-data) */
.note { font-family: var(--sans); font-size: 13px; line-height: 1.6; color: var(--muted); }
.note b { color: var(--ink); font-weight: 600; }
.advisory { display: flex; gap: 12px; align-items: flex-start; padding: 16px 18px; background: var(--accent-wash); }
.advisory i { width: 16px; height: 16px; stroke-width: 1.5; color: var(--accent); flex-shrink: 0; margin-top: 2px; }
.advisory p { font-family: var(--sans); font-size: 12.5px; line-height: 1.55; color: var(--ink); margin: 0; }
.advisory p b { font-weight: 600; }
.section-intro { max-width: 760px; margin: 12px 0 22px; color: var(--muted); }
.summary-overview .narrative-body { max-width:900px; }
.evidence-list h3 { margin:10px 0 20px; }
.evidence-list ul { list-style:none;margin:0;padding:0; }
.evidence-list li { padding:15px 0;border-top:1px solid var(--rule); }
.evidence-list li b { display:block;margin-bottom:5px;font-family:var(--sans);font-size:13px;color:var(--ink); }
.evidence-list li span { display:block;font-family:var(--sans);font-size:13px;line-height:1.5;color:var(--muted); }
.feature-card { padding: 42px; }
.feature-card h3, .seasonal-card h3 { font-size:32px; margin: 8px 0 18px; }
.parking-heading { display:flex; justify-content:space-between; gap:36px; align-items:flex-start; }
.parking-heading .section-intro { margin-bottom:24px; }
.parking-hero-stat { min-width:150px; padding-left:24px; border-left:2px solid var(--accent); }
.parking-hero-stat b { display:block; color:var(--accent); font-size:54px; line-height:.9; }
.parking-hero-stat span { display:block; margin-top:8px; color:var(--muted); font-family:var(--mono); font-size:9px; letter-spacing:.08em; text-transform:uppercase; }
.parking-grid { display:grid; grid-template-columns:1fr 1.4fr; border:1px solid var(--rule); }
.parking-card, .parking-panel { min-width:0; }
.parking-panel { padding:24px; }
.parking-card .lbl, .parking-card .source { white-space:normal; overflow-wrap:anywhere; }
.parking-panel + .parking-panel { border-left:1px solid var(--rule); }
.parking-metrics { display:grid; grid-template-columns:repeat(3,1fr); gap:1px; background:var(--rule); border:1px solid var(--rule); margin-top:12px; }
.parking-metrics > div { background:var(--bg); padding:16px 12px; }
.parking-metrics b { display:block; color:var(--accent); font-size:28px; line-height:1; }
.parking-metrics span { display:block; margin-top:8px; color:var(--muted); font-size:11px; line-height:1.35; }
.parking-types { display:flex; flex-wrap:wrap; gap:8px; margin-top:16px; }
.parking-types span { border:1px solid var(--rule); padding:7px 9px; font-family:var(--mono); font-size:10px; }
.parking-types b { color:var(--accent); }
.parking-nearest { margin-top:14px; color:var(--muted); font-family:var(--mono); font-size:10px; text-transform:uppercase; letter-spacing:.05em; }
.parking-interpretation { margin:18px 0 0; }
.parking-caveat { margin-top:18px; padding:16px 18px; border-left:3px solid var(--ink); background:var(--panel); }
.parking-caveat b { font-size:14px; }
.parking-caveat p { margin-top:5px; color:var(--muted); font-size:13px; }
.tree-card { min-width:0; }
.tree-grid { display:grid; grid-template-columns:1fr 1fr; border:1px solid var(--rule); }
.tree-panel { min-width:0; padding:24px; }
.tree-panel + .tree-panel { border-left:1px solid var(--rule); }
.tree-metrics { display:grid; grid-template-columns:repeat(3,1fr); gap:1px; margin-top:12px; background:var(--rule); border:1px solid var(--rule); }
.tree-metrics > div { padding:16px 12px; background:var(--bg); }
.tree-metrics b { display:block; color:var(--accent); font-size:28px; line-height:1; }
.tree-metrics span { display:block; margin-top:8px; color:var(--muted); font-size:11px; }
.tree-summary { margin-top:14px; }
.tree-coverage { margin-top:12px; color:var(--muted); font-size:12px; }
.nearest-tree-block { margin-top:24px; }
.nearest-tree-qualifier { color:var(--muted); letter-spacing:.08em; text-transform:lowercase; }
.nearest-tree-list { margin-top:10px; }
.nearest-tree-list > div { display:flex; justify-content:space-between; gap:16px; padding:11px 0; border-top:1px solid var(--rule); font-size:12px; }
.nearest-tree-list span { min-width:0; }
.nearest-tree-list strong { white-space:nowrap; font-family:var(--mono); font-weight:500; }
.nearest-tree-block > p { margin-top:10px; color:var(--muted); font-size:11px; line-height:1.45; }
.tree-species-list { margin-top:12px; }
.tree-species-list > div { display:flex; justify-content:space-between; gap:16px; padding:12px 0; border-top:1px solid var(--rule); font-size:12px; }
.tree-species-list span { display:flex; gap:12px; }
.tree-species-list span b { color:var(--accent); font-family:var(--mono); }
.tree-species-list strong { white-space:nowrap; }
.tree-species-list small { margin-left:5px; color:var(--muted); font-weight:400; }
.tree-caveat { margin-top:18px; padding:16px 18px; border-left:3px solid var(--ink); background:var(--panel); }
.tree-caveat b { font-size:14px; }
.tree-caveat p { margin-top:5px; color:var(--muted); font-size:13px; }
.cycling-card { min-width:0; }
.cycling-card .lbl, .cycling-card .source { white-space:normal; overflow-wrap:anywhere; }
.cycling-metrics { display:grid; grid-template-columns:repeat(3,1fr); gap:1px; margin:22px 0; background:var(--rule); border:1px solid var(--rule); }
.cycling-metrics > div { padding:18px 16px; background:var(--bg); }
.cycling-metrics b { display:block; color:var(--accent); font-size:30px; line-height:1; }
.cycling-metrics span { display:block; margin-top:8px; color:var(--muted); font-size:11px; line-height:1.4; }
.cycling-grid { display:grid; grid-template-columns:1fr 1fr; border:1px solid var(--rule); }
.cycling-panel { min-width:0; padding:24px; }
.cycling-panel + .cycling-panel { border-left:1px solid var(--rule); }
.cycling-card .cycle-row, .cycling-types > div { display:flex; justify-content:space-between; gap:18px; padding:12px 0; border-top:1px solid var(--rule); font-size:12px; }
.cycling-card .cycle-row b, .cycling-types b { white-space:nowrap; color:var(--accent); }
.cycling-types { margin-top:12px; }
.cycling-caveat { margin-top:18px; padding:16px 18px; border-left:3px solid var(--ink); background:var(--panel); }
.cycling-caveat b { font-size:14px; }
.cycling-caveat p { margin-top:5px; color:var(--muted); font-size:13px; }
.seasonal-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 18px; margin-top: 26px; }
.seasonal-grid .season { border: 1px solid var(--rule); padding: 22px; background: var(--bg); }
.seasonal-grid h4 { margin: 0 0 14px; font-family: var(--serif); font-size: 24px; }
.seasonal-grid ol { list-style: none; margin: 0; padding: 0; }
.seasonal-grid li { display: flex; justify-content: space-between; gap: 18px; padding: 9px 0; border-top: 1px solid var(--rule); font-family: var(--sans); font-size: 12px; }
.seasonal-grid li b { color: var(--accent); }

/* ----------------------------------------------------------------
   HOOK STRIP
   ---------------------------------------------------------------- */
.hook { background: var(--accent); color: #fff; padding-top: 88px; padding-bottom: 88px; }
.hook .eyebrow { font-family: var(--sans); font-weight: 500; font-size: 11px; letter-spacing: 0.28em; text-transform: uppercase; opacity: 0.8; display: block; margin-bottom: 22px; }
.hook h2 { font-family: var(--serif); font-weight: 500; font-size: clamp(30px, 4vw, 50px); letter-spacing: -0.025em; line-height: 1.06; margin: 0 0 20px; max-width: 880px; }
.hook h2 em { font-family: var(--serif); font-style: italic; font-weight: 700; }
.hook p { font-family: var(--sans); font-size: 16px; line-height: 1.6; opacity: 0.9; max-width: 620px; margin: 0; }
.hook .ctas { display: flex; gap: 14px; margin-top: 32px; flex-wrap: wrap; }
.hook .btn { display: inline-flex; align-items: center; gap: 10px; font-family: var(--sans); font-weight: 700; font-size: 12px; letter-spacing: 0.12em; text-transform: uppercase; padding: 15px 24px; text-decoration: none; transition: opacity .15s ease; }
.hook .btn:hover { opacity: 0.78; }
.hook .btn.solid { background: #fff; color: var(--accent); }
.hook .btn.outline { background: transparent; color: #fff; border: 1px solid rgba(255,255,255,0.6); }
.hook .btn .arrow { transition: transform .15s ease; }
.hook .btn:hover .arrow { transform: translateX(4px); }

/* ----------------------------------------------------------------
   FINAL DISCLAIMER
   ---------------------------------------------------------------- */
.final { border-top: 2px solid var(--ink); }
.final .wrap { display: flex; justify-content: space-between; gap: 24px; flex-wrap: wrap; padding-top: 22px; padding-bottom: 22px; font-family: var(--mono); font-size: 9px; letter-spacing: 0.15em; text-transform: uppercase; color: var(--muted); }
.final .accent { color: var(--accent); }
.final a { color: var(--accent); text-decoration: none; }

/* ----------------------------------------------------------------
   SCROLL REVEAL
   ---------------------------------------------------------------- */
@media (prefers-reduced-motion: no-preference) {
  .reveal { opacity: 0; transform: translateY(16px); transition: opacity .7s var(--ease-out), transform .7s var(--ease-out); }
  .reveal.in { opacity: 1; transform: none; }
}

/* print */
@media print {
  @page { size: Letter; margin: 12mm; }
  html, body { background: #fff !important; }
  body { font-size: 10pt; print-color-adjust: exact; -webkit-print-color-adjust: exact; }
  .report-skip-link, .meta-strip .actions, .hook { display: none; }
  .reveal { opacity: 1 !important; transform: none !important; }
  .wrap { max-width: none; padding-left: 0; padding-right: 0; }
  .cover { min-height: auto; break-after: page; padding: 18mm 0 10mm; }
  .signals { break-after: page; padding: 8mm 0; }
  .report-section { padding: 8mm 0 0; }
  .print-page { break-before: page; }
  .section.dim-bg { padding-bottom: 8mm; }
  .sec-head { break-after: avoid-page; margin-bottom: 7mm; }
  h2, h3, h4, .lbl, .stat-lbl { break-after: avoid-page; }
  p, li { orphans: 3; widows: 3; }
  tr, .signal, .season, .time-row, .fire-panel, .station-context, .verdict-row, .kv .row, .cycle-row, .source, .evidence-list li { break-inside: avoid-page; }
  .card { box-shadow: none; }
  .feature-card, .seasonal-card { break-inside: auto; }
  .signals-row { grid-template-columns:1fr 1fr;gap:4mm; }
  .signal { padding:5mm; }
  .signal-primary { grid-template-columns:42mm 1fr; }
  .sig { padding:8px 0; }
  .sig .breakdown { font-size:8px;line-height:1.3;margin-top:5px; }
  .permit-table { table-layout:fixed;font-size:9px; }
  .permit-table th:nth-child(1) { width:18%; }
  .permit-table th:nth-child(2) { width:14%; }
  .permit-table th:nth-child(3) { width:20%; }
  .permit-table th:nth-child(4) { width:48%; }
  .permit-table td { overflow-wrap:anywhere;word-break:normal; }
  .final { break-before:auto; }
}

@media (max-width: 640px) {
  .wrap { padding-left:20px; padding-right:20px; }
  .meta-strip .wrap { align-items:flex-start; flex-wrap:wrap; gap:10px 16px; letter-spacing:.08em; }
  .meta-strip .id { order:3; flex-basis:100%; }
  .cover { padding-top:64px; padding-bottom:56px; }
  .cover .know { margin-bottom:40px; }
  .cover h1 { font-size:clamp(42px,14vw,64px); line-height:.96; }
  .cover-meta { grid-template-columns:1fr 1fr; gap:24px 16px; margin-top:48px; }
  .fire-heading, .fire-grid { grid-template-columns:1fr; }
  .fire-heading { gap:22px; }
  .signals-row { grid-template-columns:1fr; }
  .signal, .signal:nth-child(odd) { border:1px solid var(--rule);padding:22px; }
  .signal:first-child { border:2px solid var(--accent); }
  .section { padding-top:64px; }
  .section.dim-bg { padding-bottom:64px; }
  .bento { grid-template-columns:1fr; }
  .s2,.s3,.s4,.s5,.s6,.s7,.s8,.s9,.s12 { grid-column:span 1; }
  .card { padding:24px 20px; }
  .feature-card { padding:28px 20px; }
  .parking-heading { display:block; }
  .parking-hero-stat { margin:0 0 22px; padding:0; border:0; }
  .parking-grid { grid-template-columns:1fr; }
  .parking-panel + .parking-panel { border-left:0; border-top:1px solid var(--rule); }
  .parking-metrics { grid-template-columns:1fr 1fr; }
  .parking-card .kv .row { display:grid; grid-template-columns:1fr; gap:6px; }
  .parking-card .kv .v { max-width:100%; text-align:left; overflow-wrap:anywhere; }
  .tree-grid { grid-template-columns:1fr; }
  .tree-panel + .tree-panel { border-left:0; border-top:1px solid var(--rule); }
  .tree-metrics { grid-template-columns:repeat(3,1fr); }
  .tree-card .lbl, .tree-card .source { white-space:normal; overflow-wrap:anywhere; }
  .tree-card .kv .row { display:grid; grid-template-columns:1fr; gap:6px; }
  .tree-card .kv .v { text-align:left; overflow-wrap:anywhere; }
  .cycling-metrics { grid-template-columns:1fr; }
  .cycling-grid { grid-template-columns:1fr; }
  .cycling-panel + .cycling-panel { border-left:0; border-top:1px solid var(--rule); }
  .cycling-card .cycle-row, .cycling-types > div { align-items:flex-start; }
  .seasonal-grid { grid-template-columns:1fr; }
  .time-row { grid-template-columns:92px minmax(52px,1fr) 42px; gap:10px; }
  .time-tag { grid-column:2 / 4; margin:-8px 0 8px; }
  .band { grid-template-columns:84px 1fr 48px; gap:10px; }
  .tbl { display:block; max-width:100%; overflow-x:auto; -webkit-overflow-scrolling:touch; }
  .tbl th, .tbl td { min-width:110px; }
  .kv .row, .cycle-row, .verdict-row { align-items:flex-start; }
  .final .wrap { letter-spacing:.08em; }
}

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior:auto; }
  *, *::before, *::after { transition:none !important; animation:none !important; }
}
