:root {
  --paper: oklch(96% 0.018 83);
  --paper-deep: oklch(91% 0.028 81);
  --ink: oklch(23% 0.027 73);
  --ink-soft: oklch(43% 0.025 72);
  --rule: oklch(76% 0.032 78);
  --signal: oklch(58% 0.17 32);
  --signal-dark: oklch(38% 0.12 30);
  --moss: oklch(48% 0.09 147);
  --danger: oklch(48% 0.14 24);
  --font-display: "Newsreader", Georgia, serif;
  --font-body: "Instrument Sans", "Avenir Next", sans-serif;
  --space-xs: .25rem;
  --space-sm: .5rem;
  --space-md: 1rem;
  --space-lg: 1.5rem;
  --space-xl: 2rem;
  --space-2xl: 3rem;
  --space-3xl: clamp(4rem, 9vw, 8rem);
  --ease-out: cubic-bezier(.22, 1, .36, 1);
}

* { box-sizing: border-box; }
[hidden] { display: none !important; }
html { color: var(--ink); background: var(--paper); font-family: var(--font-body); font-size: 100%; }
body { margin: 0; min-height: 100vh; padding: env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left); background-image: linear-gradient(90deg, transparent 49.9%, color-mix(in oklch, var(--rule) 35%, transparent) 50%, transparent 50.1%); background-size: 12rem 100%; }
[x-cloak] { display: none !important; }
button, input, select { font: inherit; }
button { min-height: 44px; }
button:focus-visible, input:focus-visible, select:focus-visible, summary:focus-visible { outline: 3px solid var(--signal); outline-offset: 3px; }
.skip-link { position: fixed; left: 1rem; top: -5rem; z-index: 20; color: var(--paper); background: var(--ink); padding: .75rem 1rem; }
.skip-link:focus { top: 1rem; }

.masthead { display: grid; grid-template-columns: 1fr auto; align-items: center; gap: var(--space-md); padding: var(--space-md) clamp(1rem, 4vw, 4rem); border-bottom: 1px solid var(--ink); }
.wordmark { display: inline-flex; align-items: center; gap: .7rem; color: inherit; text-decoration: none; font-weight: 600; letter-spacing: -.02em; }
.wordmark-mark { display: grid; place-items: center; width: 2rem; aspect-ratio: 1; color: var(--paper); background: var(--ink); font-family: var(--font-display); font-size: .8rem; }
.edition { display: none; margin: 0; color: var(--ink-soft); font-size: .75rem; text-transform: uppercase; letter-spacing: .12em; }
.text-action, .danger-action { border: 0; padding: .5rem 0; color: var(--ink); background: transparent; text-decoration: underline; text-decoration-color: var(--rule); text-underline-offset: .35rem; cursor: pointer; }
.text-action:hover { text-decoration-color: var(--signal); }
.danger-action { color: var(--danger); }

/* Scoped to .intake: the only thing that needs clipping is the decorative
   ::after ring, which is deliberately positioned outside the section. Clipping
   all of main also clipped every legitimate overflow below it. */
.intake { min-height: 74vh; display: grid; align-items: end; gap: var(--space-2xl); padding: var(--space-3xl) clamp(1rem, 7vw, 7rem) var(--space-2xl); border-bottom: 1px solid var(--ink); position: relative; overflow: clip; }
.intake::after { content: ""; position: absolute; width: clamp(11rem, 26vw, 24rem); aspect-ratio: 1; border: 1px solid var(--rule); border-radius: 50%; right: -8%; top: 5%; box-shadow: 0 0 0 2.5rem var(--paper), 0 0 0 calc(2.5rem + 1px) var(--rule), 0 0 0 5rem var(--paper), 0 0 0 calc(5rem + 1px) var(--rule); z-index: -1; }
.eyebrow { margin: 0 0 var(--space-md); font-size: .75rem; font-weight: 600; letter-spacing: .14em; text-transform: uppercase; }
h1, h2, h3, h4, p { max-width: 65ch; }
h1 { margin: 0; font-family: var(--font-display); font-size: clamp(3.3rem, 10vw, 8.5rem); font-weight: 500; line-height: .84; letter-spacing: -.055em; text-wrap: balance; }
.dek { margin: var(--space-xl) 0 0; max-width: 39rem; color: var(--ink-soft); font-size: clamp(1.1rem, 2vw, 1.4rem); line-height: 1.5; }
.privacy-note { margin: var(--space-xl) 0 0; font-size: .8rem; }
.privacy-note span { color: var(--moss); margin-right: .4rem; }

.analysis-form { align-self: end; max-width: 52rem; }
label { display: block; margin-bottom: var(--space-sm); font-size: .78rem; font-weight: 600; letter-spacing: .08em; text-transform: uppercase; }
label span { color: var(--ink-soft); font-weight: 400; text-transform: none; letter-spacing: 0; }
.address-row { display: grid; gap: var(--space-sm); }
.address-combo { position: relative; }
.address-combo input { width: 100%; }
.address-suggestions { position: absolute; top: calc(100% - 1px); left: 0; right: 0; z-index: 40; margin: 0; padding: 0; list-style: none; border: 1px solid var(--ink); background: var(--paper); max-height: 16rem; overflow-y: auto; box-shadow: 0 .5rem 1.25rem rgba(0, 0, 0, .12); }
.address-suggestions li { margin: 0; }
.address-suggestions button { display: block; width: 100%; padding: .55rem .75rem; border: 0; background: transparent; font: inherit; font-size: .85rem; text-align: left; cursor: pointer; }
.address-suggestions button:hover, .address-suggestions button.active { background: var(--paper-deep); }
input, select { width: 100%; min-height: 3.25rem; padding: .75rem 0; border: 0; border-bottom: 2px solid var(--ink); border-radius: 0; color: var(--ink); background: transparent; }
input::placeholder { color: oklch(50% 0.025 73); opacity: 1; }
.primary-action { border: 1px solid var(--ink); padding: .85rem 1.25rem; color: var(--paper); background: var(--ink); font-weight: 600; cursor: pointer; transition: transform 120ms var(--ease-out), background 120ms linear; }
.primary-action:hover { background: var(--signal-dark); }
.primary-action:active { transform: translateY(1px); }
.primary-action:disabled { cursor: not-allowed; opacity: .55; }
.primary-action.full { width: 100%; margin-top: var(--space-lg); }
.field-note, .form-error, .form-notice { margin: var(--space-sm) 0 0; color: var(--ink-soft); font-size: .8rem; }
.form-error { color: var(--danger); }
.form-notice { color: var(--moss); }
.advanced { margin-top: var(--space-lg); border-top: 1px solid var(--rule); }
.advanced summary, .drawer summary, .provenance summary { min-height: 44px; display: flex; align-items: center; gap: .5rem; cursor: pointer; font-size: .85rem; font-weight: 600; overflow-wrap: anywhere; }
.advanced-grid { display: grid; gap: var(--space-lg); padding: var(--space-md) 0 var(--space-lg); }

.preview { display: grid; border-bottom: 1px solid var(--ink); }
.map-frame { min-height: 28rem; position: relative; border-bottom: 1px solid var(--ink); background: var(--paper-deep); }
#preview-map { position: absolute; inset: 0; }
.snapshot-caveat { margin: var(--space-md) 0 0; max-width: 44rem; color: var(--signal-dark); font-size: .85rem; line-height: 1.5; }
.map-key { position: absolute; left: 1rem; bottom: 1rem; z-index: 500; padding: .55rem .75rem; background: var(--paper); border: 1px solid var(--ink); font-size: .75rem; }
.map-key i { display: inline-block; width: .7rem; height: .7rem; margin-right: .35rem; background: var(--signal); border-radius: 50%; }
.preview-readout { padding: var(--space-2xl) clamp(1rem, 5vw, 5rem); align-self: center; }
.preview-readout h2, .section-heading h2 { margin: 0; font-family: var(--font-display); font-size: clamp(3rem, 7vw, 6rem); font-weight: 500; line-height: 1; }
.snapshot-source { margin: var(--space-lg) 0 0; padding-top: var(--space-md); border-top: 1px solid var(--rule); color: var(--ink-soft); font-size: .82rem; line-height: 1.5; }
.candidate-list { margin: var(--space-xl) 0 0; padding: 0; list-style: none; border-top: 1px solid var(--rule); }
.candidate-list li { display: grid; grid-template-columns: 1fr auto; padding: .75rem 0; border-bottom: 1px solid var(--rule); font-variant-numeric: tabular-nums; }
.candidate-list li::after { content: ""; }
.candidate-list .recommended { color: var(--signal-dark); }

.progress-panel { padding: var(--space-3xl) clamp(1rem, 14vw, 14rem); border-bottom: 1px solid var(--ink); }
.progress-heading { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: baseline; gap: 1rem; }
.progress-heading h2 { min-width: 0; margin: 0; font-family: var(--font-display); font-size: clamp(2.4rem, 6vw, 5rem); font-weight: 500; overflow-wrap: break-word; }
.progress-heading span { font-variant-numeric: tabular-nums; }
.progress-track { height: 2px; margin: var(--space-xl) 0; background: var(--rule); overflow: hidden; }
.progress-track i { display: block; width: 100%; height: 100%; transform-origin: left; background: var(--signal); transition: transform 500ms var(--ease-out); }

/* --- session, staleness, and withheld strips ------------------------------ */
.auth-panel, .withheld-panel { padding: var(--space-2xl) clamp(1rem, 8vw, 8rem); border-bottom: 1px solid var(--ink); background: var(--paper-deep); }
.auth-panel h2, .withheld-panel h2 { margin: 0 0 var(--space-md); max-width: 22ch; font-family: var(--font-display); font-size: clamp(1.9rem, 5vw, 3.4rem); font-weight: 500; line-height: 1.02; overflow-wrap: break-word; }
.auth-panel p, .withheld-panel p { margin: 0 0 var(--space-md); color: var(--ink-soft); line-height: 1.55; }
.auth-message { color: var(--danger) !important; font-weight: 600; overflow-wrap: anywhere; }
.stale-strip { padding: .75rem clamp(1rem, 5vw, 5rem); border-bottom: 1px solid var(--ink); color: var(--paper); background: var(--signal-dark); font-size: .85rem; line-height: 1.5; overflow-wrap: anywhere; }
.progress-retry { color: var(--signal-dark); font-weight: 600; }

/* --- report header and release state -------------------------------------- */
.report { border-bottom: 1px solid var(--ink); }
.report-header, .section-heading { display: flex; flex-wrap: wrap; justify-content: space-between; gap: var(--space-lg); align-items: end; padding: var(--space-2xl) clamp(1rem, 5vw, 5rem); }
.report-header > div { min-width: 0; }
.report-header h2 { margin: 0; max-width: 24ch; font-family: var(--font-display); font-size: clamp(2rem, 5vw, 4.5rem); font-weight: 500; line-height: 1; overflow-wrap: anywhere; }
.report-subhead { margin: var(--space-sm) 0 0; color: var(--ink-soft); font-size: .85rem; }
.report-actions { display: flex; flex-wrap: wrap; gap: var(--space-lg); }
.warning-strip { padding: .75rem clamp(1rem, 5vw, 5rem); border-top: 1px solid var(--ink); color: var(--ink); background: var(--paper-deep); font-size: .85rem; line-height: 1.5; }
.warning-strip.diagnostic { color: var(--paper); background: var(--signal-dark); }

/* --- verdict -------------------------------------------------------------- */
.verdict, .coverage-method, .teaching-payload { display: grid; gap: var(--space-md); padding: var(--space-3xl) clamp(1rem, 8vw, 8rem); border-top: 1px solid var(--ink); }
.teaching-payload { padding-block: var(--space-2xl); background: var(--paper-deep); }
.teaching-payload h2 { margin: 0; max-width: 22ch; font-family: var(--font-display); font-size: clamp(1.9rem, 5vw, 3.4rem); font-weight: 500; line-height: 1.02; overflow-wrap: break-word; }
.teaching-payload p { margin: 0; max-width: 52rem; color: var(--ink-soft); line-height: 1.55; }
.verdict h2, .next-step h2, .empty-report h2 { margin: 0; max-width: 20ch; font-family: var(--font-display); font-size: clamp(2.2rem, 6vw, 5.5rem); font-weight: 500; line-height: .98; letter-spacing: -.035em; overflow-wrap: break-word; }
.verdict-copy { min-width: 0; }
.report-map-frame { margin: 0; position: relative; min-height: 16rem; border: 1px solid var(--ink); background: var(--paper-deep); }
#report-map { position: absolute; inset: 0 0 2.4rem 0; }
.report-map-key { position: absolute; inset: auto 0 0 0; display: flex; align-items: center; gap: .45rem; padding: .5rem .75rem; border-top: 1px solid var(--ink); background: var(--paper); font-size: .72rem; line-height: 1.35; }
.report-map-key i { flex: none; width: .7rem; height: .7rem; background: var(--signal); border-radius: 50%; }
.coverage-method h2 { margin: 0; max-width: 24ch; font-family: var(--font-display); font-size: clamp(1.8rem, 4vw, 3.2rem); font-weight: 500; line-height: 1.05; overflow-wrap: break-word; }
.validation-note { margin: var(--space-lg) 0 0; max-width: 52rem; color: var(--ink-soft); font-size: clamp(1rem, 2vw, 1.2rem); line-height: 1.55; }
.report-meta { display: grid; gap: var(--space-lg); margin: var(--space-xl) 0 0; padding: var(--space-md) 0 0; border-top: 1px solid var(--rule); }
.report-meta > div { min-width: 0; }
.report-meta dt { color: var(--ink-soft); font-size: .7rem; letter-spacing: .08em; text-transform: uppercase; }
.report-meta dd { margin: .25rem 0 0; font-weight: 600; overflow-wrap: anywhere; }

/* --- handoff band and sprint picker --------------------------------------- */
.next-step { display: grid; gap: var(--space-sm); padding: var(--space-2xl) clamp(1rem, 8vw, 8rem); color: var(--paper); background: var(--moss); }
.next-step .eyebrow { color: var(--paper-deep); }
.next-step h2 { max-width: 25ch; font-size: clamp(1.9rem, 4.5vw, 3.6rem); }
.next-step p { margin: var(--space-md) 0 0; max-width: 52rem; line-height: 1.55; }
.next-step .primary-action { justify-self: start; margin-top: var(--space-lg); max-width: 100%; border-color: var(--paper); color: var(--moss); background: var(--paper); }
.next-step .primary-action:hover { color: var(--paper); background: var(--signal-dark); }
.handoff-note { margin: var(--space-sm) 0 0; color: var(--paper-deep); font-size: .82rem; overflow-wrap: anywhere; }
.sprint-picker { margin-top: var(--space-xl); padding-top: var(--space-lg); border-top: 1px solid color-mix(in oklch, var(--paper) 45%, transparent); }
.sprint-choices { display: grid; gap: var(--space-sm); margin: 0 0 var(--space-md); padding: 0; list-style: none; }
.sprint-choice { width: 100%; padding: .7rem .9rem; border: 1px solid var(--paper); color: var(--paper); background: transparent; text-align: left; cursor: pointer; overflow-wrap: anywhere; }
.sprint-choice.selected { color: var(--moss); background: var(--paper); font-weight: 600; }
.sprint-actions { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-lg); }
.sprint-actions .primary-action { margin-top: var(--space-md); }
.sprint-actions .text-action { color: var(--paper); text-decoration-color: var(--paper-deep); }
.sprint-picker .form-error { color: var(--paper); font-weight: 600; }

/* --- opportunity cards ---------------------------------------------------- */
/* Each card is a <details>: a compact one-line summary row (rank, name,
   qualified score with its coverage) that expands into the full evidence
   body. Rank 1 arrives open; everything else is a click away. */
.opportunity { display: block; border-top: 1px solid var(--ink); }
.opportunity-summary { display: grid; grid-template-columns: auto minmax(0, 1fr); align-items: center; column-gap: var(--space-md); row-gap: var(--space-sm); min-height: 44px; padding: var(--space-md) clamp(1rem, 5vw, 5rem); cursor: pointer; list-style: none; }
.opportunity-summary::-webkit-details-marker { display: none; }
.opportunity-summary::marker { content: ""; }
.opportunity-summary:hover { background: color-mix(in oklch, var(--paper-deep) 60%, transparent); }
.opportunity[open] > .opportunity-summary { background: var(--paper-deep); }
.rank-mark { display: grid; place-items: center; width: 2.1rem; aspect-ratio: 1; border: 1px solid var(--ink); border-radius: 50%; font-family: var(--font-display); font-size: 1rem; font-variant-numeric: tabular-nums; }
.summary-heading { min-width: 0; display: grid; gap: .1rem; }
.summary-name { margin: 0; font-family: var(--font-display); font-size: clamp(1.15rem, 2.4vw, 1.65rem); font-weight: 500; line-height: 1.12; overflow-wrap: break-word; }
.summary-profile { color: var(--ink-soft); font-size: .78rem; line-height: 1.4; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 1; overflow: hidden; overflow-wrap: anywhere; }
.summary-signal { grid-column: 2; display: grid; gap: .35rem; }
.summary-score { font-weight: 600; font-variant-numeric: tabular-nums; font-size: .88rem; }
.summary-coverage { color: var(--ink-soft); font-size: .72rem; }
.summary-toggle { display: none; width: 1.4rem; aspect-ratio: 1; position: relative; }
.summary-toggle::before, .summary-toggle::after { content: ""; position: absolute; inset: 50% auto auto 50%; width: .9rem; height: 2px; background: var(--ink); transform: translate(-50%, -50%); transition: transform 160ms var(--ease-out); }
.summary-toggle::after { transform: translate(-50%, -50%) rotate(90deg); }
.opportunity[open] .summary-toggle::after { transform: translate(-50%, -50%) rotate(0deg); }
.opportunity-body { min-width: 0; padding: var(--space-md) clamp(1rem, 5vw, 5rem) var(--space-xl); }
.rank-chip, .hypothesis-chip { display: inline-block; width: fit-content; max-width: 100%; margin: 0 0 var(--space-sm); padding: .3rem .6rem; border: 1px solid var(--ink); font-size: .7rem; font-weight: 600; letter-spacing: .08em; text-transform: uppercase; overflow-wrap: anywhere; }
.hypothesis-chip { margin: 0; padding: .2rem .5rem; color: var(--paper); background: var(--moss); border: 1px solid var(--moss); font-size: .65rem; font-weight: 600; letter-spacing: .08em; text-transform: uppercase; }
.profile { margin: 0 0 var(--space-lg); max-width: 52rem; color: var(--ink-soft); line-height: 1.55; overflow-wrap: break-word; }
.card-summary { display: grid; gap: var(--space-md); padding: var(--space-md) 0; border-top: 1px solid var(--rule); border-bottom: 1px solid var(--rule); }
.card-summary > div { min-width: 0; }
.card-summary span { display: block; color: var(--ink-soft); font-size: .7rem; letter-spacing: .08em; text-transform: uppercase; }
.card-summary p { margin: .3rem 0 0; max-width: 40ch; font-size: .92rem; line-height: 1.5; overflow-wrap: break-word; }
.card-figures { display: grid; gap: var(--space-lg); margin: var(--space-lg) 0 0; }
.card-figures > div { min-width: 0; }
.card-figures dt { color: var(--ink-soft); font-size: .7rem; letter-spacing: .08em; text-transform: uppercase; overflow-wrap: break-word; }
.card-figures dd { margin: .25rem 0 0; font-size: 1.15rem; font-weight: 600; font-variant-numeric: tabular-nums; overflow-wrap: anywhere; }
.figure-note { margin: .3rem 0 0; max-width: 44ch; color: var(--ink-soft); font-size: .75rem; line-height: 1.45; overflow-wrap: anywhere; }
.method-trace { margin-top: .35rem; }
.method-trace summary { min-height: 0; color: var(--ink-soft); font-size: .7rem; font-weight: 600; letter-spacing: .06em; text-transform: uppercase; cursor: pointer; }
.method-trace .figure-note { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: .68rem; }

/* --- disclosure drawers --------------------------------------------------- */
.drawer { margin-top: var(--space-md); border-top: 1px solid var(--rule); }
.drawer-body { display: grid; gap: var(--space-md); padding: var(--space-sm) 0 var(--space-lg); }
.factor-row, .reach-row { display: grid; gap: .2rem; min-width: 0; padding: .8rem 0; border-top: 1px solid var(--rule); }
.factor-row strong, .reach-row strong { overflow-wrap: anywhere; }
.factor-row span, .reach-row span { color: var(--ink-soft); font-size: .75rem; overflow-wrap: anywhere; }
.factor-value { color: var(--ink) !important; font-size: 1.05rem !important; font-weight: 600; font-variant-numeric: tabular-nums; }
.reach-row p { margin: .2rem 0; max-width: 52rem; font-size: .92rem; line-height: 1.5; overflow-wrap: break-word; }
.evidence-record { display: grid; gap: var(--space-sm); padding: .8rem 0; border-top: 1px solid var(--rule); }
.evidence-record > div { min-width: 0; }
.evidence-record strong, .evidence-record span { display: block; overflow-wrap: anywhere; }
.evidence-record span { margin-top: .2rem; color: var(--ink-soft); font-size: .75rem; }
.transformation { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: .7rem !important; }
.card-warnings { margin: var(--space-lg) 0 0; padding-left: 1.2rem; max-width: 52rem; color: var(--ink-soft); font-size: .82rem; }
.card-warnings li { overflow-wrap: anywhere; }
.card-warnings li + li { margin-top: var(--space-sm); }

/* --- qualified visual marks (sketch 01: meter, gauge, factor grid) --------- */
/* One data hue: signal fills over paper-deep tracks. Absence is texture, not
   hue -- a 45° rule-hairline hatch that survives grayscale and every CVD type,
   so "not measured" can never read as a short bar (R3). Identity comes from
   position and labels; moss is never paired with signal as a second series
   (ΔE 1.5 under protanopia). The words beside each mark are the existing
   helper sentences, unchanged -- the mark accompanies them, never replaces
   them (R2). */
.qmeter-track { display: block; position: relative; height: 8px; background: var(--paper-deep); }
.qmeter-fill { position: absolute; inset: 0 auto 0 0; background: var(--signal); border-radius: 0 4px 4px 0; }
.qmeter-track.absent { background: repeating-linear-gradient(45deg, transparent 0 5px, var(--rule) 5px 6px); }
.cgauge-row { display: flex; align-items: center; gap: .5rem; }
.cgauge { flex: none; display: inline-grid; grid-auto-flow: column; grid-auto-columns: 1fr; gap: 2px; height: 6px; width: 6.5rem; }
.cgauge i { background: var(--ink-soft); }
.cgauge i.unmeasured { background: repeating-linear-gradient(45deg, transparent 0 3px, var(--rule) 3px 4px); }

/* --- cross-opportunity factor grid ----------------------------------------- */
/* Rows share identical track definitions, so separate row grids resolve to
   the same column widths; --fg-cols arrives from factorGridStyle(). */
.factor-grid { padding: var(--space-2xl) clamp(1rem, 8vw, 8rem); border-top: 1px solid var(--ink); }
.factor-grid h2 { margin: 0; max-width: 24ch; font-family: var(--font-display); font-size: clamp(1.8rem, 4vw, 3.2rem); font-weight: 500; line-height: 1.05; overflow-wrap: break-word; }
.fgrid-scroll { overflow-x: auto; margin-top: var(--space-xl); }
.fgrid { --fg-cols: 3; min-width: calc(11rem + var(--fg-cols) * 10.5rem); }
.fgrid-row { display: grid; grid-template-columns: minmax(11rem, 1.1fr) repeat(var(--fg-cols), minmax(9.5rem, 1fr)); column-gap: var(--space-md); }
.fgrid-row > * { min-width: 0; padding: .65rem 0; border-top: 1px solid var(--rule); }
.fgrid-headrow > * { border-top: 0; align-self: end; }
.rank-mini { display: inline-grid; place-items: center; width: 1.5rem; aspect-ratio: 1; margin-bottom: .3rem; border: 1px solid var(--ink); border-radius: 50%; font-family: var(--font-display); font-size: .8rem; font-variant-numeric: tabular-nums; }
.fhead-name { display: block; font-family: var(--font-display); font-size: 1rem; font-weight: 500; line-height: 1.15; overflow-wrap: anywhere; }
.fhead-score { display: block; margin-top: .2rem; color: var(--ink-soft); font-size: .7rem; }
.flabel strong { display: block; font-size: .85rem; overflow-wrap: anywhere; }
.flabel span { color: var(--ink-soft); font-size: .7rem; }
.fcell { display: grid; gap: .25rem; align-content: center; }
.fcell .qmeter-track { height: 10px; }
.fval { font-size: .78rem; font-variant-numeric: tabular-nums; overflow-wrap: anywhere; }
.fcell.absent .fval { color: var(--ink-soft); }

/* --- empty result, coverage, provenance ----------------------------------- */
.empty-report { padding: var(--space-2xl) clamp(1rem, 8vw, 8rem); border-top: 1px solid var(--ink); }
.empty-report p { max-width: 52rem; line-height: 1.55; }
.coverage-warnings, .method-notes, .source-status { margin-top: var(--space-xl); padding-top: var(--space-md); border-top: 1px solid var(--rule); }
.coverage-method h3 { margin: 0 0 var(--space-sm); font-size: .75rem; font-weight: 600; letter-spacing: .12em; text-transform: uppercase; }
.coverage-method ul { max-width: 55rem; margin: 0; padding-left: 1.2rem; }
.coverage-method li { overflow-wrap: anywhere; line-height: 1.5; }
.coverage-method li + li { margin-top: var(--space-sm); }
.source-status ul { padding-left: 0; list-style: none; }
.source-status li { display: grid; gap: .15rem; padding: .6rem 0; border-top: 1px solid var(--rule); }
.source-status span { color: var(--ink-soft); font-size: .78rem; }
.provenance { padding: var(--space-lg) clamp(1rem, 8vw, 8rem) var(--space-2xl); border-top: 1px solid var(--ink); }
.provenance-grid { display: grid; gap: var(--space-md); margin: var(--space-md) 0 0; }
.provenance-grid > div { min-width: 0; padding-top: .6rem; border-top: 1px solid var(--rule); }
.provenance-grid dt { color: var(--ink-soft); font-size: .7rem; letter-spacing: .08em; text-transform: uppercase; }
.provenance-grid dd { margin: .2rem 0 0; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: .72rem; overflow-wrap: anywhere; }

.history { padding: var(--space-2xl) clamp(1rem, 5vw, 5rem); border-bottom: 1px solid var(--ink); }
.history-row { width: 100%; display: grid; grid-template-columns: auto minmax(0, 1fr) auto; gap: 1rem; align-items: center; padding: 1rem 0; border: 0; border-top: 1px solid var(--rule); color: var(--ink); background: transparent; text-align: left; cursor: pointer; }
.history-row strong { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.history-row:hover { color: var(--signal-dark); }
footer { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 1rem; padding: var(--space-xl) clamp(1rem, 4vw, 4rem); font-size: .75rem; }
footer p { margin: 0; } footer span { color: var(--signal-dark); }

.reveal { animation: rise 700ms var(--ease-out) both; animation-delay: calc(var(--i) * 90ms); }
@keyframes rise { from { opacity: 0; transform: translateY(1.25rem); } to { opacity: 1; transform: translateY(0); } }

@media (min-width: 48rem) {
  .masthead { grid-template-columns: 1fr auto 1fr; }
  .masthead .text-action { justify-self: end; }
  .edition { display: block; }
  .intake { grid-template-columns: minmax(0, 1.15fr) minmax(22rem, .85fr); }
  .address-row { grid-template-columns: 1fr auto; align-items: end; }
  .advanced-grid { grid-template-columns: 1fr 1fr; }
  .preview { grid-template-columns: minmax(0, 1.55fr) minmax(20rem, .65fr); }
  .map-frame { min-height: 38rem; border-right: 1px solid var(--ink); border-bottom: 0; }
  .report-meta { grid-template-columns: repeat(auto-fit, minmax(14rem, 1fr)); }
  .card-summary { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .card-figures { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .opportunity-summary { grid-template-columns: auto minmax(0, 1fr) auto auto; }
  .summary-signal { grid-column: auto; width: 15rem; }
  .summary-toggle { display: block; }
  .verdict { grid-template-columns: minmax(0, 1.15fr) minmax(18rem, .85fr); align-items: start; column-gap: var(--space-2xl); }
  .report-map-frame { min-height: 24rem; position: sticky; top: var(--space-lg); }
  .provenance-grid { grid-template-columns: repeat(auto-fit, minmax(18rem, 1fr)); }
  .factor-row { grid-template-columns: minmax(0, 1.2fr) minmax(0, .6fr) minmax(0, .8fr) minmax(0, .8fr); align-items: baseline; }
  .factor-row .figure-note { grid-column: 1 / -1; }
  .evidence-record { grid-template-columns: minmax(0, 1.5fr) minmax(10rem, .5fr); }
}

@media (pointer: coarse) { .text-action, .danger-action { padding-block: .8rem; } }
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation-duration: .01ms !important; transition-duration: .01ms !important; }
}
