/* analyze-v2.css — the staged experience layer (arrival → found-it → scan →
   gated report). Loads after analyze.css and overrides its presentation. */

/* The staged sections carry their own display values, which would silently
   defeat the hidden attribute the controller toggles. hidden always wins. */
[hidden] { display: none !important; }

/* ---- Arrival: one question, one field ---- */
.axp-arrival {
  min-height: calc(100svh - 140px);
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  text-align: center;
  padding: clamp(72px, 12vh, 120px) var(--pad-x) clamp(56px, 9vh, 96px);
}
.axp-title {
  margin: 14px 0 0;
  font: 600 clamp(34px, 8vw, 62px)/1.06 var(--font-serif);
  letter-spacing: -0.01em; color: var(--ink);
}
.axp-title em { font-style: italic; color: var(--red); }
.axp-form { width: 100%; max-width: 600px; margin-top: clamp(28px, 5vh, 44px); }
.axp-pill {
  display: flex; align-items: center; gap: 10px;
  padding: 9px 9px 9px 20px;
  background: #fff;
  border: 1px solid var(--ink-hairline);
  border-radius: 999px;
  box-shadow: 0 1px 2px rgba(26, 23, 18, 0.05), 0 22px 48px -26px rgba(26, 23, 18, 0.34);
  transition: border-color .2s ease, box-shadow .2s ease;
}
.axp-pill:focus-within {
  border-color: color-mix(in srgb, var(--red) 45%, transparent);
  box-shadow: 0 1px 2px rgba(26, 23, 18, 0.05), 0 22px 48px -26px rgba(26, 23, 18, 0.34), 0 0 0 4px color-mix(in srgb, var(--red) 12%, transparent);
}
.axp-pill-glyph { flex: none; font: 400 19px/1 var(--font-mono); color: var(--ink-muted); }
.axp-url {
  flex: 1; min-width: 0; border: 0; background: none; outline: none;
  font: 400 clamp(15px, 2.4vw, 17px)/1.3 var(--font-mono); color: var(--ink);
}
.axp-url::placeholder { color: var(--ink-faint); }
.axp-go {
  flex: none; display: inline-flex; align-items: center; gap: 8px;
  padding: 13px 20px 13px 22px;
  background: var(--red); color: #fff;
  border: 0; border-radius: 999px; cursor: pointer;
  font: 600 12.5px/1 var(--font-mono); letter-spacing: .1em; text-transform: uppercase;
  transition: background-color .2s ease, gap .2s ease;
}
.axp-go:hover { background: #A62F16; gap: 12px; }
.axp-friction { margin: 16px 0 0; font: 500 11px/1.5 var(--font-mono); letter-spacing: .06em; text-transform: uppercase; color: var(--ink-muted); }
.axp-arrival .ax-form-error { margin-top: 12px; }

/* ---- Theater: found-it + live scan ---- */
.axp-theater { max-width: 1080px; margin: 0 auto; padding: clamp(36px, 7vh, 72px) var(--pad-x); }
.axp-theater-head { text-align: center; }
.axp-live { display: inline-flex; align-items: center; gap: 8px; margin: 0 0 10px; font: 600 11px/1 var(--font-mono); letter-spacing: .16em; text-transform: uppercase; color: var(--red); }
.axp-live-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--red); animation: axpPulse 1.4s ease-in-out infinite; }
@keyframes axpPulse { 50% { opacity: .35; transform: scale(.82); } }
.axp-theater-title { margin: 0; font: 600 clamp(26px, 5.4vw, 42px)/1.1 var(--font-serif); color: var(--ink); overflow-wrap: anywhere; }
.axp-theater-sub { margin: 10px auto 0; max-width: 52ch; font-size: 14.5px; line-height: 1.5; color: var(--ink-muted); }

.axp-found {
  max-width: 640px; margin: clamp(20px, 4vh, 32px) auto 0;
  background: #fff; border: 1px solid var(--ink-hairline); border-radius: 16px;
  padding: 18px 22px;
  box-shadow: 0 1px 2px rgba(26, 23, 18, 0.05), 0 18px 40px -24px rgba(26, 23, 18, 0.3);
  min-height: 64px;
}
.axp-found .ax-rec-waiting { margin: 4px 0; font: 500 13px/1.4 var(--font-mono); color: var(--ink-muted); }
.axp-found .ax-rec-row { margin: 0 0 10px; }
.axp-found .ax-rec-name { margin: 0; font: 600 clamp(20px, 3.4vw, 26px)/1.15 var(--font-serif); color: var(--ink); }
.axp-found .ax-rec-line { margin: 0; font-size: 14px; line-height: 1.45; color: var(--ink); }
.axp-found .ax-rec-src { margin: 2px 0 0; font: 500 10.5px/1.3 var(--font-mono); letter-spacing: .05em; text-transform: uppercase; color: var(--ink-muted); }
.axp-found .ax-rec-note { margin: 8px 0 0; padding-top: 10px; border-top: 1px solid var(--ink-faint); font-size: 12.5px; color: var(--ink-muted); }

.axp-scanrow {
  display: grid; grid-template-columns: minmax(0, 6fr) minmax(0, 5fr);
  gap: clamp(20px, 3.5vw, 48px);
  align-items: start;
  margin-top: clamp(24px, 4.5vh, 40px);
}
.axp-plates { display: grid; grid-template-columns: minmax(0, 0.9fr) minmax(0, 1.5fr); gap: 12px; align-items: start; }
.axp-plates .ax-plate-cap { margin-top: 8px; display: flex; flex-direction: column; gap: 2px; }
.axp-plates .ax-plate-label { font: 600 10.5px/1 var(--font-mono); letter-spacing: .14em; text-transform: uppercase; color: var(--ink); }
.axp-plates .ax-plate-status { font: 400 11px/1.4 var(--font-mono); color: var(--ink-muted); }

.axp-steps .ax-strip { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 12px; }
.axp-steps .ax-strip li { display: flex; align-items: baseline; gap: 12px; }
.axp-steps .ax-strip-mark {
  flex: none; width: 18px; height: 18px; border-radius: 50%;
  border: 1.5px solid var(--ink-hairline); position: relative; top: 3px;
  transition: border-color .25s ease, background-color .25s ease;
}
.axp-steps .ax-strip li[data-state="active"] .ax-strip-mark { border-color: var(--red); animation: axpPulse 1.3s ease-in-out infinite; }
.axp-steps .ax-strip li[data-state="done"] .ax-strip-mark,
.axp-steps .ax-strip li[data-state="partial"] .ax-strip-mark { border-color: var(--red); background: var(--red); }
.axp-steps .ax-strip li[data-state="done"] .ax-strip-mark::after,
.axp-steps .ax-strip li[data-state="partial"] .ax-strip-mark::after {
  content: "✓"; position: absolute; inset: 0; display: grid; place-items: center;
  color: #fff; font: 700 11px/1 var(--font-mono);
}
.axp-steps .ax-strip li[data-state="failed"] .ax-strip-mark { border-color: var(--ink-faint); background: var(--ink-faint); }
.axp-steps .ax-strip-label { font: 500 14px/1.4 var(--font-mono); color: var(--ink); }
.axp-steps .ax-strip li[data-state="pending"] .ax-strip-label { color: var(--ink-muted); }
.axp-steps .ax-strip-note { font: 400 11px/1.3 var(--font-mono); color: var(--ink-muted); }
.axp-meter { display: flex; justify-content: space-between; gap: 10px; margin: 18px 0 0; padding-top: 14px; border-top: 1px solid var(--ink-faint); font: 500 11px/1.4 var(--font-mono); letter-spacing: .04em; text-transform: uppercase; color: var(--ink-muted); }
.axp-expect { margin: 10px 0 0; font-size: 12.5px; line-height: 1.5; color: var(--ink-muted); }
.axp-steps .ax-cancel { margin-top: 16px; }

.axp-wiredetails { max-width: 640px; margin: clamp(22px, 4vh, 34px) auto 0; }
.axp-wiredetails summary { cursor: pointer; font: 500 11.5px/1 var(--font-mono); letter-spacing: .1em; text-transform: uppercase; color: var(--ink-muted); }
.axp-wiredetails[open] summary { margin-bottom: 10px; }
.axp-error { text-align: center; padding: clamp(28px, 6vh, 56px) 0; }

/* ---- Report: AI lead card, free finding, blur gate ---- */
.ed-lead-ai {
  background: #fff;
  border: 1px solid color-mix(in srgb, var(--red) 30%, transparent);
  border-radius: 18px;
  padding: clamp(20px, 3vw, 30px);
  box-shadow: 0 1px 2px rgba(26, 23, 18, 0.05), 0 26px 56px -30px rgba(194, 57, 29, 0.4);
}
.ed-lead-engines { display: flex; flex-wrap: wrap; gap: 10px 18px; margin: 14px 0 6px; }
.ed-lead-engine { display: inline-flex; align-items: center; gap: 7px; }
.ed-lead-engine-ico { width: 18px; height: 18px; }
.ed-lead-engine-name { font: 500 12px/1 var(--font-mono); letter-spacing: .04em; color: var(--ink); }

.ed-free { margin-top: clamp(24px, 4vh, 36px); }
.ed-free-kicker { margin-bottom: 10px; }

.ed-gated { position: relative; margin-top: clamp(26px, 4.5vh, 40px); }
.ed-gated-head { margin-bottom: 14px; }
/* Sealed rows are redactions, not blurs: the real headline stays in the DOM
   but paints as an ink bar that follows its word shapes. */
.ed-row-blur {
  display: inline;
  color: transparent;
  background: rgba(26, 23, 18, 0.94);
  box-decoration-break: clone;
  -webkit-box-decoration-break: clone;
  border-radius: 1px;
  line-height: 1.42;
  user-select: none;
  pointer-events: none;
  filter: none;
}
.ed-slip { position: relative; z-index: 2; }

#axp-demo-badge {
  position: fixed; left: 12px; bottom: 12px; z-index: 99;
  margin: 0; padding: 5px 9px;
  background: var(--ink); color: var(--paper-on-ink);
  border-radius: 999px;
  font: 600 9px/1 var(--font-mono); letter-spacing: .08em; text-transform: uppercase;
  opacity: .7; pointer-events: none;
}

.axp-method { max-width: 760px; margin: 0 auto; padding: 0 var(--pad-x) clamp(48px, 8vh, 80px); }
.axp-method-details summary { cursor: pointer; font: 500 12px/1.5 var(--font-mono); letter-spacing: .06em; text-transform: uppercase; color: var(--ink-muted); }
.axp-method-details[open] summary { margin-bottom: 12px; }

@media (max-width: 760px) {
  .axp-scanrow { grid-template-columns: minmax(0, 1fr); }
  .axp-pill { padding-left: 16px; }
  .axp-go-label { display: none; }
  /* The arrival button's arrow is familiar in context. A recovery action is
     not: keep "Try again" visible so a phone visitor never has to guess what
     the lone arrow will do. */
  .axl-error .axp-go-label { display: inline; }
  .axp-go { padding: 13px 16px; }
  .axp-go-arrow { font-size: 16px; }
}
@media (prefers-reduced-motion: reduce) {
  .axp-live-dot, .axp-steps .ax-strip li[data-state="active"] .ax-strip-mark { animation: none; }
}

/* Nested report sections must never inherit the page-shell padding (the
   global styles.css `section` rule): at ultrawide gutters that padding
   exceeds the column width and crushes nested content to zero. */
.ed section { padding: 0; }

/* Reserve the desktop scrollbar lane up front, so the sheet's body
   scroll-lock can never shift the page sideways. */
html { scrollbar-gutter: stable; }

/* ============================================================
   ROUND-1 REDESIGN — "The Sealed Edition" (_design-iter/SPEC.md)
   Everything below is new presentation; analyze.css is untouched.
   ============================================================ */

/* — two voices inside the report: Newsreader reads, Spline Sans Mono scans — */
.ed { font-family: var(--font-serif); padding-top: clamp(12px, 2vw, 24px); }
.ed .ax-url { font-family: var(--font-mono); font-size: 15px; }

/* — masthead, compressed — */
.ed-mast { padding-top: 6px; }
.ed-mast-brand { margin: 0; }
.ed-title { font-size: clamp(2rem, 8vw, 3.4rem); margin-top: 4px; }
.ed-mast-meta {
  display: block;
  font-size: 10px;
  letter-spacing: 0.04em;
  line-height: 1.55;
  margin-top: 4px;
  padding-bottom: 6px;
}
.ed-mast-sep { padding: 0 2px; }
@media (max-width: 640px) {
  /* the sentence repeats what the counts line and the not-measured section
     already say — the label alone carries the fold on phones */
  .ed-conf-sentence { display: none; }
}

/* — score hero: ring + verdict on one row, confidence + counts below — */
.ed-scorerow {
  grid-template-columns: auto minmax(0, 1fr);
  align-items: center;
  gap: 8px clamp(18px, 4vw, 56px);
  margin-top: 6px;
}
.ed-judgment { display: contents; }
.ed-score { grid-column: 1; grid-row: 1; }
.ed-verdict {
  grid-column: 2;
  grid-row: 1;
  align-self: center;
  margin-top: 0;
  font-size: clamp(1.35rem, 5.8vw, 2.15rem);
}
.ed-confidence {
  grid-column: 1 / -1;
  grid-row: 2;
  font-size: 10px;
  line-height: 1.5;
  text-transform: uppercase;
  letter-spacing: 0.08em;
}
.ed-counts {
  grid-column: 1 / -1;
  grid-row: 3;
  font-size: 10px;
  line-height: 1.55;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  margin-top: 0;
}
.ed-ring {
  position: relative;
  width: 144px;
  height: 144px;
  display: grid;
  place-items: center;
}
.ed-ring-svg { position: absolute; inset: 0; width: 100%; height: 100%; display: block; }
.ed-ring-track { fill: none; stroke: var(--ink-faint); stroke-width: 5; }
.ed-ring-arc {
  fill: none;
  stroke: var(--red);
  stroke-width: 5;
  stroke-linecap: round;
  stroke-dasharray: 364.42;
  stroke-dashoffset: 364.42;
}
.ed-score-num {
  position: relative;
  margin: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  font-size: clamp(2.6rem, 11vw, 3.6rem);
  line-height: 1;
  letter-spacing: -0.02em;
}
.ed-score-max { font-size: 0.28em; margin-top: 3px; }
.ed-verdict { text-wrap: balance; }
/* The verdict is a script-focused landing pad: no painted box by default.
   Real keyboard users (tracked via html[data-kbd]) get a quiet editorial
   hairline instead of the old red rectangle. */
.ed-verdict:focus:not(:focus-visible) { outline: none; }
.ed-verdict:focus-visible { outline: none; }
html[data-kbd="true"] .ed-verdict:focus-visible { outline: 2px solid var(--ink-faint); outline-offset: 6px; }
@media (min-width: 1080px) {
  .ed-ring { width: 168px; height: 168px; }
}

/* — verified row: one flat hairline receipt — */
.ed-target { margin-top: 6px; }
.ed-target-details {
  background: transparent;
  border: 1px solid var(--ink-faint);
  border-left: 3px solid var(--ok);
}
/* true single line: the lead-in and the HOSTNAME are pinned (the host is
   the trust proof — the visitor typed it 30 seconds ago); the firm name,
   already huge in the masthead, is the part that gives way */
.ed-target-summary {
  position: relative;
  min-height: 0;
  padding: 8px 68px 8px 12px;
  gap: 6px;
  flex-wrap: nowrap;
  align-items: center;
}
.ed-target-line {
  flex: 1 1 0;
  display: flex;
  align-items: baseline;
  gap: 6px;
  font-size: 0.9rem;
  line-height: 1.4;
  white-space: nowrap;
  overflow: hidden;
  min-width: 0;
}
.ed-target-lead { flex: none; }
.ed-target-line strong {
  flex: 0 1 auto;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  font-size: 0.95rem;
}
.ed-target-host { flex: none; font-size: 9.5px; }
.ed-target-host:empty { display: none; }
@media (max-width: 640px) {
  /* 390px cannot hold lead + name + host on one line: the ✓ + name + host
     carry the proof on phones; the lead stays in the DOM for AT and
     returns on wider viewports */
  .ed-target-lead { display: none; }
}
.ed-target-more { position: absolute; right: 12px; top: 9px; margin-left: 0; }

/* — the seal card (delivery slip, moved into the fold) — */
.ed-slip { margin-top: 8px; }
.ed-slip-inner { display: grid; gap: 6px; padding: 12px 16px; }
.ed-slip-copy { min-width: 0; }
.ed-slip-kicker { margin: 0; padding-right: 44px; }
/* the "· n OF total OPEN" tail never wraps internally */
.ed-kicker-tail { white-space: nowrap; }
.ed-slip-title { font-size: clamp(1.3rem, 5.2vw, 1.8rem); max-width: 26ch; margin-top: 2px; }
.ed-slip-text { font-size: 0.92rem; line-height: 1.5; margin-top: 6px; }
.ed-seal-trust {
  font-style: italic;
  font-size: 0.9rem;
  line-height: 1.4;
  color: var(--ink-muted);
  margin-top: 4px;
}
.ed-slip-form { margin-top: 0; }
.ed-slip-form .ax-label { margin-bottom: 4px; }
.ed-slip-input { padding: 10px 14px; min-height: 44px; }
.ed-slip-row { gap: 6px; }
.ed-slip-row .btn { padding: 12px 20px; min-height: 44px; }
.ed-slip-privacy { font-size: 10px; margin-top: 8px; }
.ed-seal-mark {
  position: absolute;
  top: -13px;
  right: 20px;
  z-index: 3;
  width: 34px;
  height: 34px;
  border-radius: 50%;
  display: grid;
  place-items: center;
  background: radial-gradient(circle at 35% 30%, var(--red) 0%, var(--red-deep) 78%);
  color: var(--paper-on-ink);
  font: 600 15px/1 var(--font-mono);
  transform: rotate(-4deg);
  box-shadow: 0 2px 6px rgba(26, 23, 18, 0.3), inset 0 1px 1px rgba(255, 255, 255, 0.28);
  animation: edSealIn 0.38s var(--ease-paper) 0.3s both;
}
@keyframes edSealIn {
  0% { transform: rotate(-4deg) scale(1.55); opacity: 0; }
  62% { transform: rotate(-4deg) scale(0.95); opacity: 1; }
  100% { transform: rotate(-4deg) scale(1); opacity: 1; }
}
.ed-seal-mark.ed-seal-ok {
  background: radial-gradient(circle at 35% 30%, #4A7C44 0%, var(--ok) 78%);
}
.ed-seal-lifted {
  display: inline-block;
  margin-top: 10px;
  font: 600 10px/1 var(--font-mono);
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--ok);
  border: 1px solid var(--ok);
  padding: 4px 9px;
  transform: rotate(-2deg);
}
@media (min-width: 1080px) {
  /* the seal card keeps the report column's left edge — no floaty centering */
  .ed-slip-inner {
    grid-template-columns: minmax(0, 1.1fr) minmax(320px, 0.9fr);
    align-items: center;
    gap: 32px;
    padding: 26px 32px;
  }
}

/* — fold budget (390×844): the email input and the gate button land fully
     inside the first viewport. Surgical shaves only — every word stays. — */
@media (max-width: 640px) {
  .ed { padding-top: 8px; }
  .ed-mast { padding-top: 4px; }
  .ed-title { margin-top: 2px; }
  .ed-mast-meta { margin-top: 2px; padding-bottom: 4px; }
  .ed-scorerow { margin-top: 2px; }
  .ed-target { margin-top: 4px; }
  .ed-slip { margin-top: 6px; }
  .ed-slip-inner { padding: 10px 14px; }
}
@media (max-width: 400px) {
  /* counts stay ≤2 lines: tighter mono + the nbsp units wired in copy.mjs */
  .ed-counts { font-size: 9px; letter-spacing: 0.03em; }
  /* the seal kicker (with its nowrap tail) fits one line at exactly 390px */
  .ed-slip-kicker { font-size: 9.5px; letter-spacing: 0.12em; }
}

/* — section rhythm: one section gap, one block gap — */
.ed-photos-wrap { margin-top: clamp(48px, 7vw, 72px); }
.ed-lead { margin-top: clamp(48px, 7vw, 72px); }
.ed-docket { margin-top: clamp(48px, 7vw, 72px); }
.ed-booking { margin-top: clamp(48px, 7vw, 72px); }

/* — severity rails on docket rows — */
.ed-row-critical { border-left: 3px solid var(--red); padding-left: 14px; }
.ed-row-high { border-left: 2px solid var(--red-deep); padding-left: 15px; }
.ed-row-medium { border-left: 1px solid var(--ink-hairline); padding-left: 16px; }
.ed-row-headline { transition: color 0.45s ease, background-color 0.45s ease; }
.ed-row[data-locked="true"] .ed-row-head { padding-bottom: 10px; }

/* — redaction bars suggesting the withheld detail — */
.ed-redact {
  display: block;
  width: 84%;
  height: 0.8em;
  margin-top: 8px;
  background: rgba(26, 23, 18, 0.82);
  border-radius: 1px;
  font-size: 1.02rem;
}
.ed-redact-b { width: 62%; }

/* — the quiet release line under each sealed row: note and CTA are
     separate spans, so a wrap is a structural break between them,
     never a rag after a separator — */
.ed-row-lock {
  background: none;
  border-left: 0;
  padding: 8px 0;
  font-size: 10.5px;
  letter-spacing: 0.12em;
  flex-wrap: wrap;
  gap: 0 10px;
}
.ed-row-lock:hover { background: none; color: var(--red); }
/* the arrow moved from the note to the CTA when the line was split */
.ed-row-lock-note::after { content: none; }
.ed-row-lock-cta::after { content: " →"; }

/* — docket-tail return line — */
.ed-tier-hint { text-wrap: balance; }
.ed-return-line {
  display: block;
  width: 100%;
  margin-top: 24px;
  padding: 14px 0;
  background: none;
  border: 0;
  border-top: 1px solid var(--ink-faint);
  font: 500 10.5px/1.5 var(--font-mono);
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--red-deep);
  text-align: center;
  text-wrap: balance;
  cursor: pointer;
}
.ed-return-line:hover { color: var(--red); }
.ed-return-line:focus-visible { outline: 2px solid var(--ink); outline-offset: 3px; }

/* ============================================================
   DEVICE STILL-LIFE — .ed-rig-*
   ============================================================ */

.ed-photos {
  display: flex;
  flex-direction: column;
  margin-top: clamp(18px, 2.4vw, 24px);
}
.ed-rig-shell { position: relative; }
.ed-rig-screen { position: relative; overflow: hidden; max-height: none; }
.ed-rig-screen .ed-photo-trigger { height: 100%; }
.ed-rig-screen .ed-photo-img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: top center;
}

/* — phone: machined-ink shell, screen exactly 390:844 — */
.ed-rig-phone { position: relative; z-index: 2; width: clamp(140px, 42vw, 200px); }
.ed-rig-phone .ed-rig-shell {
  padding: 10px;
  border-radius: clamp(30px, 9vw, 40px);
  background: linear-gradient(150deg, #46413A 0%, #211D17 38%, #0F0D0A 100%);
  box-shadow:
    inset 0 1px 1px rgba(255, 255, 255, 0.22),
    inset 0 -1px 2px rgba(0, 0, 0, 0.6),
    0 18px 40px -18px rgba(26, 23, 18, 0.55);
}
.ed-rig-phone .ed-rig-shell::before { /* volume keys, doubled by shadow */
  content: "";
  position: absolute;
  left: -2px;
  top: 17%;
  width: 3px;
  height: 26px;
  border-radius: 2px 0 0 2px;
  background: #3A352E;
  box-shadow: 0 40px 0 #3A352E;
}
.ed-rig-phone .ed-rig-shell::after { /* power key */
  content: "";
  position: absolute;
  right: -2px;
  top: 24%;
  width: 3px;
  height: 42px;
  border-radius: 0 2px 2px 0;
  background: #3A352E;
}
.ed-rig-phone .ed-rig-screen {
  aspect-ratio: 390 / 844;
  border: 0;
  border-radius: calc(clamp(30px, 9vw, 40px) - 9px);
  background: #0B0A08;
  box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.05), inset 0 3px 14px rgba(0, 0, 0, 0.55);
}
.ed-rig-island {
  position: absolute;
  top: 8px;
  left: 50%;
  translate: -50% 0;
  width: 26%;
  aspect-ratio: 3.4 / 1;
  border-radius: 999px;
  background: #000;
  pointer-events: none;
  z-index: 2;
}
.ed-rig-island::after { /* camera glint */
  content: "";
  position: absolute;
  right: 16%;
  top: 50%;
  translate: 0 -50%;
  width: 20%;
  aspect-ratio: 1;
  border-radius: 50%;
  background: radial-gradient(circle at 35% 35%, #2A3440 0 18%, #05070A 60%);
}
.ed-rig-home {
  position: absolute;
  bottom: 0.9%;
  left: 50%;
  translate: -50% 0;
  width: 34%;
  height: max(0.55%, 3px);
  border-radius: 999px;
  background: rgba(244, 240, 230, 0.85);
  pointer-events: none;
  z-index: 2;
}

/* — monitor: thin-bezel dark shell + browser chrome, screen 1440:900 — */
.ed-rig-desk { width: 100%; }
.ed-rig-desk .ed-rig-shell {
  padding: 8px;
  border-radius: 12px;
  background: linear-gradient(160deg, #403B34, #181510 60%, #0F0D0A);
  box-shadow: inset 0 1px 1px rgba(255, 255, 255, 0.18), 0 22px 44px -20px rgba(26, 23, 18, 0.5);
}
.ed-rig-chrome {
  height: 28px;
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 0 10px;
  background: linear-gradient(#2B2721, #1D1A15);
  border-radius: 6px 6px 0 0;
}
.ed-rig-dots {
  flex: none;
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: #6B6558;
  box-shadow: 11px 0 0 #6B6558, 22px 0 0 #6B6558;
  margin-right: 22px;
}
.ed-rig-url {
  flex: 1;
  max-width: 52%;
  margin: 0 auto;
  height: 16px;
  border-radius: 999px;
  background: rgba(248, 245, 238, 0.08);
  color: rgba(248, 245, 238, 0.75);
  font: 500 9.5px/16px var(--font-mono);
  text-align: center;
  letter-spacing: 0.04em;
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
}
.ed-rig-desk .ed-rig-screen {
  aspect-ratio: 1440 / 900;
  border: 0;
  background: #0B0A08;
  box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.05);
}
.ed-rig-stand { display: none; }

/* — a missing capture stays an honest dark frame — */
.ed-rig-screen.ed-photo-missing { min-height: 0; display: grid; align-content: center; }
.ed-rig-screen .ed-photo-missing-note { color: rgba(248, 245, 238, 0.72); }

/* — one sheen sweep per device, then it leaves the device entirely —
     the resting state is off-screen so no frozen streak can survive,
     even when the entrance animation never runs (reduced motion). */
.ed-rig-sheen {
  position: absolute;
  inset: 0;
  z-index: 3;
  pointer-events: none;
  background: linear-gradient(112deg, transparent 42%, rgba(255, 255, 255, 0.1) 47%, rgba(255, 255, 255, 0.16) 50%, rgba(255, 255, 255, 0.1) 53%, transparent 58%);
  transform: translateX(-160%);
}
.ed-rig-in { animation: edRigSettle 0.56s var(--ease-paper) 0.09s both; }
@keyframes edRigSettle {
  from { opacity: 0; transform: rotateY(14deg) translateY(14px); }
  to { opacity: 1; transform: none; }
}
.ed-rig-in .ed-rig-sheen { animation: edRigSheen 0.7s var(--ease-paper) 0.25s 1 both; }
@keyframes edRigSheen {
  from { transform: translateX(-60%); }
  to { transform: translateX(160%); }
}
.ed-rig-in .ed-photo-img { animation: edRigDevelop 0.7s ease 0.12s both; }
@keyframes edRigDevelop {
  from { filter: brightness(1.3) contrast(0.8); }
  to { filter: none; }
}

.ed-photo-cap { margin-top: 10px; }
/* plate ID + meta hug the left; the action pins right. The meta is one
   nowrap unit — a wrap can only fall BEFORE it, never inside it. */
.ed-photo-cap { justify-content: flex-start; column-gap: 8px; row-gap: 2px; }
.ed-photo-cap-meta { white-space: nowrap; }
.ed-photo-cap-action { margin-left: auto; }
/* the caption action is a real <button> — reset it into the mono caption */
button.ed-photo-cap-action {
  background: none;
  border: 0;
  padding: 0;
  margin: 0;
  cursor: zoom-in;
  font: inherit;
  letter-spacing: inherit;
  text-transform: inherit;
  color: var(--red-deep);
}
button.ed-photo-cap-action:hover { color: var(--red); }
button.ed-photo-cap-action:focus-visible { outline: 2px solid var(--ink); outline-offset: 2px; }
@media (max-width: 1079px) {
  /* captions may outgrow their device so the nbsp units never orphan */
  .ed-photo-cap { width: max-content; max-width: 100%; }
  .ed-photo-mobile .ed-photo-cap { max-width: min(420px, calc(100vw - 64px)); }
  /* the phone overlaps the monitor's lower-left: the monitor's plate
     caption starts right of the phone's overlap (phone left edge 4% +
     phone width) and hugs the right edge */
  .ed-photo-desktop .ed-photo-cap {
    width: auto;
    justify-content: flex-end;
    text-align: right;
    padding-left: calc(4% + clamp(140px, 42vw, 200px) + 10px);
    font-size: 9px;
    letter-spacing: 0.1em;
  }
  .ed-photo-desktop .ed-photo-cap-action { margin-left: 0; }
}
/* the demo badge rides above the keyline when the keyline is up */
body:has(.ed-keyline[data-show="true"]) #axp-demo-badge { bottom: 84px; }
/* …and it never sits on the modal sheet's legal links */
body.ed-sheet-open #axp-demo-badge { display: none; }
/* …and the keyline never covers the colophon at the very bottom */
body:has(.ed-keyline[data-show="true"]) .footer { padding-bottom: 84px; }

/* — desktop: perspective for the stage tilt — */
@media (min-width: 1080px) {
  .ed-photos-wrap { perspective: 1200px; max-width: 1160px; }
  .ed-photos { display: block; position: relative; transform-style: preserve-3d; }
}

/* ============================================================
   KEYLINE BAR + SHEET
   ============================================================ */

.ed-keyline {
  position: fixed;
  z-index: 65; /* below .topbar (70) and the viewer */
  left: 12px;
  right: 12px;
  bottom: max(12px, env(safe-area-inset-bottom));
  display: flex;
  align-items: center;
  gap: 12px;
  min-height: 56px;
  padding: 8px 8px 8px 14px;
  background: color-mix(in srgb, var(--paper-raise) 92%, transparent);
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
  border: 1px solid var(--ink-hairline);
  border-left: 3px solid var(--red);
  border-radius: 14px;
  box-shadow: 0 12px 32px -12px rgba(26, 23, 18, 0.35);
  transform: translateY(calc(100% + 24px));
  visibility: hidden;
  transition: transform 0.38s var(--ease-paper), visibility 0s 0.38s;
}
.ed-keyline[data-show="true"] {
  transform: none;
  visibility: visible;
  transition: transform 0.38s var(--ease-paper);
}
.ed-keyline-seal {
  flex: none;
  width: 26px;
  height: 26px;
  border-radius: 50%;
  display: grid;
  place-items: center;
  background: radial-gradient(circle at 35% 30%, var(--red) 0%, var(--red-deep) 78%);
  color: var(--paper-on-ink);
  font: 600 12px/1 var(--font-mono);
}
.ed-keyline-text {
  flex: 1;
  min-width: 0;
  font: 500 10.5px/1.35 var(--font-mono);
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--ink);
}
.ed-keyline-btn {
  flex: none;
  padding: 12px 16px;
  font-size: 11px;
  min-height: 44px;
  box-sizing: border-box;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}
.ed-keyline-pulse { animation: edKeylinePulse 0.8s var(--ease-paper) 0.4s 1; }
@keyframes edKeylinePulse {
  0% { box-shadow: 0 0 0 0 rgba(194, 57, 29, 0.35), 0 12px 32px -12px rgba(26, 23, 18, 0.35); }
  100% { box-shadow: 0 0 0 14px rgba(194, 57, 29, 0), 0 12px 32px -12px rgba(26, 23, 18, 0.35); }
}
.ed-keyline-done { border-left-color: var(--ok); }
.ed-keyline-done .ed-keyline-seal { background: radial-gradient(circle at 35% 30%, #4A7C44 0%, var(--ok) 78%); }
.ed-keyline-done .ed-keyline-text { color: var(--ok); }
.ed.ed-keyline-room { padding-bottom: 84px; }
body.ax-viewer-open .ed-keyline, body.ax-viewer-open .ed-sheet, body.ax-viewer-open .ed-sheet-scrim {
  display: none;
}
@media (min-width: 760px) {
  .ed-keyline {
    left: auto;
    right: 32px;
    bottom: 32px;
    min-height: 48px;
    max-width: 380px;
  }
}

/* the page holds still while the sheet is modal */
body.ed-sheet-open { overflow: hidden; }

.ed-sheet-scrim {
  position: fixed;
  inset: 0;
  z-index: 80;
  background: rgba(26, 23, 18, 0.45);
  opacity: 0;
  visibility: hidden;
  touch-action: none;
  transition: opacity 0.2s ease, visibility 0s 0.2s;
}
.ed-sheet-scrim[data-open="true"] { opacity: 1; visibility: visible; transition: opacity 0.2s ease; }
.ed-sheet {
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: 81;
  font-family: var(--font-serif);
  background: var(--paper-raise);
  border-top: 3px solid var(--red);
  border-radius: 18px 18px 0 0;
  padding: 20px var(--pad-x) max(20px, env(safe-area-inset-bottom));
  translate: 0 104%;
  visibility: hidden;
  transition: translate 0.42s var(--ease-paper), visibility 0s 0.42s;
}
.ed-sheet[data-open="true"] {
  translate: 0 0;
  visibility: visible;
  transition: translate 0.42s var(--ease-paper);
}
.ed-sheet-head { display: flex; align-items: center; gap: 12px; }
.ed-seal-mini {
  position: static;
  flex: none;
  width: 28px;
  height: 28px;
  font-size: 13px;
  animation: none;
}
.ed-sheet-title {
  margin: 0;
  font: 600 1.35rem/1.15 var(--font-serif);
  letter-spacing: -0.015em;
  color: var(--ink);
}
.ed-sheet-sub { font-size: 0.98rem; line-height: 1.55; color: var(--ink-muted); margin-top: 8px; }
.ed-sheet-form { margin-top: 14px; }
.ed-sheet .ax-url { width: 100%; font-family: var(--font-mono); font-size: 15px; }
.ed-sheet-form .btn { width: 100%; margin-top: 10px; }
.ed-sheet-privacy {
  font: 400 10px/1.6 var(--font-mono);
  letter-spacing: 0.04em;
  color: var(--ink-muted);
  margin-top: 12px;
}
.ed-sheet-privacy a { color: var(--ink-muted); }
@media (min-width: 1080px) {
  .ed-sheet {
    left: auto;
    right: 32px;
    bottom: 96px;
    width: 380px;
    border: 1px solid var(--ink-hairline);
    border-top: 3px solid var(--red);
    border-radius: 18px;
    padding: 22px;
    translate: 0 12px;
    opacity: 0;
    transition: translate 0.32s var(--ease-paper), opacity 0.32s ease, visibility 0s 0.32s;
  }
  .ed-sheet[data-open="true"] {
    translate: 0 0;
    opacity: 1;
    transition: translate 0.32s var(--ease-paper), opacity 0.32s ease;
  }
}



/* the booking secondary link never breaks inside a word */
.ed-booking .text-link {
  overflow-wrap: normal;
  word-break: keep-all;
  letter-spacing: 0.08em;
}

/* ============================================================
   PRINT — rigs flatten, sealed rows stay sealed
   ============================================================ */

@media print {
  .ed-keyline, .ed-sheet, .ed-sheet-scrim { display: none !important; }
  /* Ctrl+P while the sheet is open must not clip the printout */
  body.ed-sheet-open { overflow: visible; }
  /* sealed rows print as solid ink bars, not washed-out grey */
  .ed-row-blur, .ed-redact { print-color-adjust: exact; -webkit-print-color-adjust: exact; }
  .ed-photos { display: block; padding-bottom: 0; }
  .ed-photo-mobile { position: static; width: 200px; margin-top: 16px; transform: none; }
  .ed-photo-desktop { width: 100%; }
  .ed-rig-shell { background: none; box-shadow: none; padding: 0; border-radius: 0; }
  .ed-rig-phone .ed-rig-shell::before, .ed-rig-phone .ed-rig-shell::after,
  .ed-rig-island, .ed-rig-home, .ed-rig-sheen, .ed-rig-stand, .ed-rig-chrome {
    display: none !important;
  }
  .ed-rig-screen { border: 1px solid var(--ink-hairline); border-radius: 0; box-shadow: none; }
  .ed-gated[data-locked="true"]::after {
    content: "SEALED FINDINGS DO NOT PRINT — RELEASE THEM WITH THE EMAILED EDITION.";
    display: block;
    margin-top: 12px;
    font: 500 10px/1.6 var(--font-mono);
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--ink-muted);
  }
}

/* ============================================================
   REDUCED MOTION — round-1 additions
   ============================================================ */

@media (prefers-reduced-motion: reduce) {
  .ed-rig-in, .ed-rig-in .ed-photo-img, .ed-rig-in .ed-rig-sheen { animation: none; }
  .ed-keyline, .ed-keyline[data-show="true"] { transition-duration: 0.16s; }
  .ed-keyline-pulse { animation: none; }
  .ed-seal-mark { animation: none; }
  .ed-sheet, .ed-sheet[data-open="true"], .ed-sheet-scrim, .ed-sheet-scrim[data-open="true"] {
    transition-duration: 0.16s;
  }
  .ed-row-headline { transition: none; }
  .ed-return-line, .ed-row-lock, .ed-keyline-btn { transition: none; }
}

/* ============================================================
   REPORT vNEXT — hero score card, the ink-pill tab rail, glance
   tiles, overview teasers, and the numbered fix plan. Appended
   last on purpose: these override any earlier report presentation.
   ============================================================ */

/* ---- hero card: score, verdict, meta — one object ---- */
.edx-hero {
  display: grid;
  grid-template-columns: auto minmax(0, 1fr);
  gap: clamp(16px, 4vw, 34px);
  align-items: center;
  background: #fff;
  border: 1px solid var(--ink-hairline);
  border-radius: 18px;
  padding: clamp(16px, 4vw, 28px);
  box-shadow: 0 1px 2px rgba(26, 23, 18, 0.04), 0 20px 48px -30px rgba(26, 23, 18, 0.25);
  margin-top: clamp(16px, 3.5vw, 24px);
}
.edx-hero .ed-ring { width: clamp(108px, 27vw, 152px); }
.edx-hero .ed-verdict {
  margin: 6px 0 0;
  border: 0;
  padding: 0;
  background: none;
  font: 600 clamp(19px, 4.6vw, 27px)/1.25 var(--font-serif);
  font-style: italic;
  color: var(--red);
  letter-spacing: -0.01em;
}
.edx-hero .ed-mast-meta { margin: 10px 0 0; }
.edx-evidence {
  display: block;
  margin: 5px 0 0;
  padding: 0;
  background: none;
  border: 0;
  font: 500 10.5px/1.5 var(--font-mono);
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--ink-muted);
  text-align: left;
  cursor: pointer;
}
.edx-evidence:not(:disabled):hover { color: var(--ink); text-decoration: underline; }
.edx-evidence:disabled { cursor: default; }
.edx-evidence:focus-visible { outline: 2px solid var(--red); outline-offset: 3px; }

/* ---- the tab rail: white track, sliding ink pill ---- */
.edx-tabs-wrap { margin-top: clamp(16px, 3.6vw, 26px); }
.edx-tabs {
  position: relative;
  display: flex;
  gap: 4px;
  padding: 5px;
  background: #fff;
  border: 1px solid var(--ink-hairline);
  border-radius: 999px;
}
.edx-tabs-blob {
  position: absolute;
  top: 5px;
  left: 0;
  width: 10px;
  height: calc(100% - 10px);
  background: var(--ink);
  border-radius: 999px;
  box-shadow: 0 8px 22px rgba(26, 23, 18, 0.26);
  transition: transform 0.5s var(--ease-paper, cubic-bezier(0.16, 1, 0.3, 1)), width 0.5s var(--ease-paper, cubic-bezier(0.16, 1, 0.3, 1));
  will-change: transform, width;
}
.edx-tab {
  position: relative;
  z-index: 1;
  flex: 1 1 0;
  min-width: 0;
  padding: 12px 2px;
  background: none;
  border: 0;
  border-radius: 999px;
  font: 600 clamp(10px, 2.8vw, 12px)/1 var(--font-mono);
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--ink);
  white-space: nowrap;
  cursor: pointer;
  transition: color 0.25s ease;
}
.edx-tab[aria-selected="true"] { color: var(--paper-on-ink); }
.edx-tab:focus-visible { outline: 2px solid var(--red); outline-offset: 3px; }
.edx-panel { margin-top: clamp(18px, 4vw, 28px); }
#px-docket, #ed-pass, #ed-notmeasured { scroll-margin-top: 88px; }

/* ---- glance tiles ---- */
.edx-tiles {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 10px;
  margin-top: clamp(14px, 3.4vw, 20px);
}
@media (min-width: 720px) { .edx-tiles { grid-template-columns: repeat(4, minmax(0, 1fr)); } }
.edx-tile {
  position: relative;
  background: #fff;
  border: 1px solid var(--ink-hairline);
  border-radius: 14px;
  padding: 15px 15px 13px;
  overflow: hidden;
}
.edx-tile::before {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  height: 3px;
  background: var(--ink-faint);
}
.edx-tile-attention::before { background: #C08427; }
.edx-tile-critical::before { background: var(--red); }
.edx-tile-ai::before { background: var(--ink); }
.edx-tile-zero::before { background: var(--ink-faint); }
.edx-tile-num {
  margin: 0;
  font: 650 clamp(27px, 6.4vw, 36px)/1 var(--font-display);
  letter-spacing: -0.02em;
  color: var(--ink);
  font-variant-numeric: tabular-nums;
}
.edx-tile-critical:not(.edx-tile-zero) .edx-tile-num { color: var(--red); }
.edx-tile-attention:not(.edx-tile-zero) .edx-tile-num { color: #A66F1D; }
.edx-tile-label {
  margin: 7px 0 0;
  font: 500 9.5px/1.35 var(--font-mono);
  letter-spacing: 0.09em;
  text-transform: uppercase;
  color: var(--ink-muted);
}

/* ---- overview teasers ---- */
.edx-teasers { display: grid; gap: 10px; margin-top: clamp(14px, 3.4vw, 20px); }
.edx-tease {
  position: relative;
  display: flex;
  align-items: center;
  gap: 12px;
  width: 100%;
  text-align: left;
  background: #fff;
  border: 1px solid var(--ink-hairline);
  border-radius: 14px;
  padding: 13px 14px 13px 18px;
  cursor: pointer;
  overflow: hidden;
  transition: transform 0.2s ease, box-shadow 0.2s ease;
}
.edx-tease::before {
  content: "";
  position: absolute;
  left: 0;
  top: 0;
  bottom: 0;
  width: 4px;
  background: var(--ink-faint);
}
.edx-tease-critical::before { background: var(--red); }
.edx-tease-high::before { background: #C08427; }
.edx-tease-medium::before { background: #C08427; }
.edx-tease-pass::before { background: #2c7a4b; }
.edx-tease:hover { transform: translateY(-1px); box-shadow: 0 12px 26px -18px rgba(26, 23, 18, 0.32); }
.edx-tease:focus-visible { outline: 2px solid var(--red); outline-offset: 3px; }
.edx-tease-ok {
  flex: none;
  display: grid;
  place-items: center;
  width: 24px;
  height: 24px;
  border-radius: 50%;
  background: rgba(44, 122, 75, 0.12);
  color: #2c7a4b;
  font-size: 12px;
}
.edx-tease-copy { flex: 1; min-width: 0; display: block; }
.edx-tease-head {
  display: block;
  font: 600 13.5px/1.4 var(--font-sans);
  color: var(--ink);
}
.edx-tease-note {
  display: block;
  margin-top: 4px;
  font: 500 9px/1.2 var(--font-mono);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--ink-muted);
}
.edx-tease-chev { flex: none; color: var(--ink-muted); font-size: 20px; line-height: 1; transform: translateY(-1px); }

/* ---- the fix plan ---- */
.edx-fix-lede {
  margin: 0 0 14px;
  font: 400 14.5px/1.55 var(--font-sans);
  color: var(--ink-muted);
  max-width: 62ch;
}
.edx-fix-list { list-style: none; margin: 0; padding: 0; display: grid; gap: 10px; }
.edx-fix-item {
  display: flex;
  gap: 14px;
  background: #fff;
  border: 1px solid var(--ink-hairline);
  border-radius: 14px;
  padding: 15px;
}
.edx-fix-critical { border-left: 4px solid var(--red); }
.edx-fix-high { border-left: 4px solid #C08427; }
.edx-fix-rank {
  flex: none;
  min-width: 34px;
  font: 650 clamp(20px, 4.6vw, 26px)/1.15 var(--font-display);
  letter-spacing: -0.02em;
  color: color-mix(in srgb, var(--ink) 24%, transparent);
  font-variant-numeric: tabular-nums;
}
.edx-fix-body { flex: 1; min-width: 0; }
.edx-fix-headline { margin: 8px 0 0; font: 600 14.5px/1.45 var(--font-sans); color: var(--ink); }
.edx-fix-note { margin: 6px 0 0; font: 400 13px/1.55 var(--font-sans); color: var(--ink-muted); }

/* ---- motion + print ---- */
@media (prefers-reduced-motion: reduce) {
  .edx-tabs-blob { transition: none; }
  .edx-tease { transition: none; }
  .edx-tease:hover { transform: none; }
}
@media print {
  .edx-tabs-wrap { display: none; }
  .edx-panel[hidden] { display: block !important; }
}

/* ---- hero card, corrected interior: legacy scorerow geometry neutralized,
   meta rides a full-width footer rail under a hairline ---- */
.edx-hero.ed-scorerow {
  display: grid;
  grid-template-columns: auto minmax(0, 1fr);
  grid-template-areas: none;
  align-items: center;
  row-gap: 0;
}
.edx-hero .ed-score,
.edx-hero .ed-judgment,
.edx-hero .edx-hero-meta { grid-area: auto; width: auto; max-width: none; margin: 0; }
.edx-hero .ed-score { grid-column: 1; grid-row: 1; }
.edx-hero .ed-judgment { grid-column: 2; grid-row: 1; display: block; min-width: 0; }
.edx-hero .edx-hero-meta {
  grid-column: 1 / -1;
  grid-row: 2;
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 4px 20px;
  margin-top: clamp(14px, 3.4vw, 20px);
  padding-top: clamp(12px, 3vw, 16px);
  border-top: 1px solid var(--ink-faint);
}
.edx-hero .ed-confidence { margin: 0 0 8px; }
.edx-hero .ed-conf-sentence { display: none; }
.edx-hero .ed-verdict { font-size: clamp(19px, 5vw, 27px); }
.edx-hero .ed-mast-meta,
.edx-hero .edx-hero-meta .ed-mast-meta {
  margin: 0;
  padding: 0;
  border: 0;
  text-decoration: none;
}
.edx-hero .ed-mast-meta span { border: 0; text-decoration: none; }
.edx-evidence { margin: 0; }


/* ============================================================
   REPORT vNEXT · round 2 — compressed hero, one-strip numbers,
   teaser polish, fine print at the foot, the topbar left alone.
   ============================================================ */

/* hero: tighter frame, smaller ring, no meta rail */
.edx-hero { padding: clamp(14px, 3.4vw, 24px); margin-top: clamp(12px, 3vw, 20px); }
.edx-hero .ed-ring { width: clamp(88px, 21vw, 132px); }
.edx-hero .ed-confidence { margin: 0 0 6px; }
.edx-hero .ed-verdict { font-size: clamp(17.5px, 4.6vw, 25px); }

/* the four numbers, compressed to one ledger strip */
.edx-tiles {
  display: flex;
  gap: 0;
  margin-top: 12px;
  background: #fff;
  border: 1px solid var(--ink-hairline);
  border-radius: 14px;
  padding: 11px 2px 10px;
}
.edx-tile {
  position: static;
  flex: 1 1 0;
  min-width: 0;
  background: none;
  border: 0;
  border-left: 1px solid var(--ink-faint);
  border-radius: 0;
  padding: 1px 12px 0;
  overflow: visible;
}
.edx-tile:first-child { border-left: 0; }
.edx-tile::before { display: none; }
.edx-tile-num { font-size: clamp(21px, 5.4vw, 30px); }
.edx-tile-label {
  margin-top: 4px;
  font-size: 8px;
  letter-spacing: 0.07em;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

/* teasers: a firmer hand */
.edx-tease { padding: 12px 14px 12px 16px; border-radius: 12px; }
.edx-tease-critical {
  background: color-mix(in srgb, var(--red) 4%, #fff);
  border-color: color-mix(in srgb, var(--red) 26%, var(--ink-hairline));
}
.edx-tease-head { font-size: 14px; letter-spacing: -0.01em; }

/* the review's fine print, at the foot of the report */
.edx-fineline {
  margin: clamp(22px, 5vw, 32px) 0 0;
  text-align: center;
  font: 500 9.5px/1.9 var(--font-mono);
  letter-spacing: 0.07em;
  text-transform: uppercase;
  color: color-mix(in srgb, var(--ink-muted) 82%, transparent);
}
.edx-fineline .edx-evidence {
  display: inline;
  margin: 0 0 0 14px;
  font-size: 9.5px;
  color: inherit;
}


/* This page loads no main.js, so the wordmark's script-measured geometry is
   pinned statically to the exact values the dock-morph resolves on every
   other page (measured: lockup 3.267×, Fold at 1.8229×, in --bmark units —
   deterministic because the font is self-hosted with opsz pinned). The
   base rules already place the rule and Studio; only the two JS-supplied
   measures need values. */
.brand-lockup { width: calc(var(--bmark) * 3.267); }
.bw-fold { left: calc(var(--bmark) * 1.8229); }
.brand-rule { width: 100%; }
.brand-studio { width: 100%; }


/* ============================================================
   HERO CARD, REBALANCED — the score reads as one instrument:
   a true square gauge (the old fixed 144px height left phantom
   space above and below), a band with real weight, air between
   band and numeral, and /100 tucked at the number's baseline.
   ============================================================ */
.edx-hero {
  padding: clamp(12px, 3vw, 22px) clamp(14px, 3.4vw, 24px);
  gap: clamp(14px, 3.6vw, 30px);
}
.edx-hero .ed-ring {
  width: clamp(98px, 25vw, 130px);
  height: auto;
  aspect-ratio: 1;
}
.edx-hero .ed-ring-track,
.edx-hero .ed-ring-arc { stroke-width: 10.5; }
.edx-hero .ed-score-num {
  flex-direction: row;
  align-items: baseline;
  justify-content: center;
  gap: 3px;
  font-size: clamp(1.85rem, 7.8vw, 2.55rem);
  letter-spacing: -0.03em;
}
.edx-hero .ed-score-max { font-size: 0.36em; margin: 0; letter-spacing: 0; }
.edx-hero .ed-confidence { margin: 0 0 5px; }
.edx-hero .ed-verdict { line-height: 1.22; }


/* ============================================================
   GATE, REDESIGNED — a frosted glimpse of what's held back, one
   lock, one field, one button. The same lock caps the blurred
   groups under Findings and the Fix plan. Plus one geometry for
   the whole report: containers 18, cards 14, chips pill.
   ============================================================ */

/* ---- one geometry ---- */
.ed-slip, .ed-sheet { border-radius: 18px; }
.ed-lead, .ed-gated, .ed-tier.ed-free, .ed-fine, .ed-row, .ed-target, .ed-photos-wrap { border-radius: 14px; }

/* ---- the seal card ---- */
.ed-slip {
  background: #fff;
  border: 1px solid var(--ink-hairline);
  box-shadow: 0 1px 2px rgba(26, 23, 18, 0.04), 0 20px 48px -30px rgba(26, 23, 18, 0.25);
  max-width: 640px;
  margin-inline: auto;
  overflow: hidden;
  padding: 0;
}
.ed-slip-inner { display: block; padding: 0; }
.ed-slip .ed-seal-mark { display: none; }
.ed-seal-trust { display: none; }

.edx-gate-preview {
  position: relative;
  padding: 12px 16px 16px;
  background: color-mix(in srgb, var(--paper) 45%, #fff);
  border-bottom: 1px solid var(--ink-faint);
  overflow: hidden;
}
.edx-gate-preview[hidden] { display: none; }
.edx-gate-prow {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 7px 0;
  filter: blur(4.5px);
  user-select: none;
}
.edx-gate-pline {
  flex: 1;
  min-width: 0;
  font: 600 13px/1.3 var(--font-sans);
  color: var(--ink);
  white-space: nowrap;
  overflow: hidden;
}
.edx-gate-preview::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, rgba(255, 255, 255, 0) 20%, rgba(255, 255, 255, 0.9));
  pointer-events: none;
}
.edx-gate-lock {
  position: absolute;
  inset: 0;
  z-index: 1;
  display: grid;
  place-items: center;
}
.edx-gate-lock svg {
  width: 22px;
  height: 22px;
  padding: 9px;
  box-sizing: content-box;
  color: var(--ink);
  background: #fff;
  border: 1px solid var(--ink-hairline);
  border-radius: 50%;
  box-shadow: 0 12px 28px -14px rgba(26, 23, 18, 0.4);
}

.ed-slip-copy { padding: 16px 18px 0; }
.ed-slip-title { margin: 4px 0 0; }
.ed-slip-text { margin: 7px 0 0; font-size: 13px; line-height: 1.55; color: var(--ink-muted); }
.ed-slip-body { padding: 14px 18px 18px; }
.ed-slip-form .ed-slip-row { display: flex; flex-direction: column; gap: 10px; }
.ed-slip-input {
  width: 100%;
  padding: 14px 16px;
  font-size: 16px;
  background: #fff;
  border: 1.5px solid var(--ink);
  border-radius: 12px;
}
.ed-slip-input:focus-visible { outline: 2px solid var(--red); outline-offset: 2px; }
#px-gate-button { width: 100%; border-radius: 12px; padding: 15px 16px; }
.ed-slip-privacy { margin: 10px 0 0; font-size: 9px; line-height: 1.7; color: var(--ink-muted); }

/* ---- the blurred groups wear the same lock ---- */
.ed-gated[data-locked="true"] { position: relative; }
.ed-gated[data-locked="true"] .ed-row {
  filter: blur(5px);
  pointer-events: none;
  user-select: none;
}
.edx-lockcap {
  position: absolute;
  inset: 52px 0 0 0;
  z-index: 2;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 10px;
  background: none;
  border: 0;
  cursor: pointer;
  text-align: center;
}
.edx-lockcap svg {
  width: 22px;
  height: 22px;
  padding: 9px;
  box-sizing: content-box;
  color: var(--ink);
  background: #fff;
  border: 1px solid var(--ink-hairline);
  border-radius: 50%;
  box-shadow: 0 12px 30px -14px rgba(26, 23, 18, 0.4);
}
.edx-lockcap-line {
  font: 600 10.5px/1.2 var(--font-mono);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--ink);
  background: #fff;
  border: 1px solid var(--ink-hairline);
  padding: 9px 15px;
  border-radius: 999px;
  box-shadow: 0 10px 24px -14px rgba(26, 23, 18, 0.35);
}
.edx-lockcap:focus-visible { outline: 2px solid var(--red); outline-offset: 3px; }
.edx-lockcap-flow { position: static; margin: 16px auto 0; padding: 4px; }


/* the input sizes to its content — the legacy horizontal-row grow is gone */
.ed-slip-form .ed-slip-input { flex: 0 0 auto; height: auto; }

/* sealed rows read as frosted text, not smeared redaction bars — the same
   frosting the gate preview wears */
.ed-gated[data-locked="true"] .ed-row { filter: blur(6px); }
.ed-gated[data-locked="true"] .ed-row .ed-row-blur { background: none; color: var(--ink); }
.edx-fix-item[data-locked="true"] .ed-row-blur {
  background: none;
  color: var(--ink);
  filter: blur(5px);
  user-select: none;
}


/* ============================================================
   RAILS, NOT BORDERS — every tone accent becomes a floating
   inset rail that respects the card's corners; outer borders
   stay hairline all the way around. Plus the turning brand in
   the AI visibility card.
   ============================================================ */

/* recognition row: green rail */
.ed-target-details { position: relative; border-left: 1px solid var(--ink-faint); }
.ed-target-details::before {
  content: "";
  position: absolute;
  left: 7px;
  top: 11px;
  bottom: 11px;
  width: 3.5px;
  border-radius: 999px;
  background: var(--ok, #2c7a4b);
  pointer-events: none;
}

/* sticky keyline: red rail (green once done) */
.ed-keyline { border-left: 1px solid var(--ink-hairline); }
.ed-keyline::before {
  content: "";
  position: absolute;
  left: 7px;
  top: 10px;
  bottom: 10px;
  width: 3.5px;
  border-radius: 999px;
  background: var(--red);
  pointer-events: none;
}
.ed-keyline-done::before { background: var(--ok, #2c7a4b); }

/* overview teasers: the bar becomes a rail */
.edx-tease { padding-left: 24px; }
.edx-tease::before {
  inset: auto;
  left: 8px;
  top: 11px;
  bottom: 11px;
  width: 3.5px;
  border-radius: 999px;
}

/* fix plan: rails with hairline frames */
.edx-fix-item { position: relative; padding-left: 22px; }
.edx-fix-critical, .edx-fix-high { border-left: 1px solid var(--ink-hairline); }
.edx-fix-critical::before, .edx-fix-high::before {
  content: "";
  position: absolute;
  left: 8px;
  top: 12px;
  bottom: 12px;
  width: 3.5px;
  border-radius: 999px;
  pointer-events: none;
}
.edx-fix-critical::before { background: var(--red); }
.edx-fix-high::before { background: #C08427; }

/* findings rows: rails instead of mixed border weights */
.ed-row-critical, .ed-row-high, .ed-row-medium {
  position: relative;
  border-left: 0;
  padding-left: 16px;
}
.ed-row-critical::before, .ed-row-high::before {
  content: "";
  position: absolute;
  left: 2px;
  top: 10px;
  bottom: 10px;
  width: 3px;
  border-radius: 999px;
  pointer-events: none;
}
.ed-row-critical::before { background: var(--red); }
.ed-row-high::before { background: color-mix(in srgb, var(--red) 72%, #7a4a12); }

/* the turning brand inside the AI headline */
.edx-ai-brand { white-space: nowrap; }
.edx-ai-swap {
  display: inline-flex;
  align-items: center;
  gap: 0.26em;
  vertical-align: -0.1em;
  transition: opacity 0.34s var(--ease-paper, ease), transform 0.34s var(--ease-paper, ease);
}
.edx-ai-swap.is-roll { opacity: 0; transform: translateY(0.32em); }
.edx-ai-logo { width: 0.92em; height: 0.92em; }
@media (prefers-reduced-motion: reduce) { .edx-ai-swap { transition: none; } }


/* the legacy printed-ticket chrome inside the seal card — ink border,
   offset block shadow, inset rule — is retired: one rounded box only */
.ed-slip .ed-slip-inner {
  border: 0;
  box-shadow: none;
  background: none;
}
.ed-slip .ed-slip-inner::before { content: none; }


/* ============================================================
   THE VERIFICATION TERMINAL — the Details disclosure opens a
   session window: chrome bar, prompt lines, real scan data,
   blinking cursor. And the AI brand now TYPES itself on the
   true text baseline, homepage-style.
   ============================================================ */
.ed-target-body { padding: 0; }
.ed-target-flag {
  position: relative;
  margin: 12px 0 0;
  padding: 10px 14px 10px 52px;
  background: #241f17;
  border-radius: 10px 10px 0 0;
  font: 500 9px/1 var(--font-mono);
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: rgba(244, 240, 230, 0.55);
}
.ed-target-flag::before {
  content: "";
  position: absolute;
  left: 14px;
  top: 50%;
  transform: translateY(-50%);
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: #ff5f57;
  box-shadow: 13px 0 0 #febc2e, 26px 0 0 #28c840;
}
.edx-term {
  background: #14110c;
  border-radius: 0 0 10px 10px;
  padding: 12px 14px 13px;
  font: 400 10.5px/1.75 var(--font-mono);
  color: #e8e2d4;
  overflow-x: hidden;
}
.edx-term-line { white-space: pre-wrap; overflow-wrap: anywhere; }
.edx-term-prompt { color: #4cc38a; }
.edx-term-cmdtext { color: #f4f0e6; }
.edx-term-status { color: rgba(232, 226, 212, 0.6); }
.edx-term-arrow { color: rgba(232, 226, 212, 0.35); }
.edx-term-okword { color: #4cc38a; }
.edx-term-kv { padding-left: 14px; }
.edx-term-key { display: inline-block; min-width: 84px; color: rgba(232, 226, 212, 0.45); }
.edx-term-val { color: #e8e2d4; }
.edx-term-ok { color: #4cc38a; margin-top: 3px; }
.edx-term-tick { color: #4cc38a; }
.edx-term-caret {
  display: inline-block;
  width: 7px;
  height: 12px;
  margin-left: 7px;
  vertical-align: -2px;
  background: #4cc38a;
  animation: edxTermBlink 1.1s steps(1) infinite;
}
@keyframes edxTermBlink { 50% { opacity: 0; } }
.ed-target-note { margin-top: 12px; }

/* the typed brand: logo inline on the baseline, the word types into a
   fixed slot sized by the widest name, the caret blinks through holds */
.edx-ai-brand { white-space: nowrap; }
.edx-ai-logo {
  width: 0.88em;
  height: 0.88em;
  vertical-align: -0.08em;
  margin-right: 0.2em;
}
.edx-ai-word { position: relative; display: inline-block; text-align: left; }
.edx-ai-measure { visibility: hidden; }
.edx-ai-live { position: absolute; left: 0; top: 0; white-space: nowrap; }
.edx-ai-caret {
  display: inline-block;
  width: 0.06em;
  min-width: 2.5px;
  height: 0.74em;
  margin-left: 2px;
  background: var(--red);
  transform: translateY(0.08em);
}
.edx-ai-caret.is-blinking { animation: edxCaretBlink 1.1s steps(1) infinite; }
@keyframes edxCaretBlink { 50% { opacity: 0; } }
@media (prefers-reduced-motion: reduce) {
  .edx-term-caret, .edx-ai-caret.is-blinking { animation: none; }
}


/* ============================================================
   THE VERIFICATION WINDOW — closed, the row IS the terminal's
   title bar; opening extends the same window. And the journey
   CTA: the topbar action follows the reader.
   ============================================================ */
.ed-target-details.edx-termwin {
  position: relative;
  background: #241f17;
  border: 0;
  border-radius: 12px;
  overflow: hidden;
  box-shadow: 0 14px 34px -20px rgba(26, 23, 18, 0.45);
}
.ed-target-details.edx-termwin::before { content: none; }
.edx-term-bar {
  display: flex;
  align-items: center;
  gap: 9px;
  padding: 12px 14px;
  cursor: pointer;
  list-style: none;
  background: #241f17;
  font: 500 11px/1.3 var(--font-mono);
  color: #e8e2d4;
}
.edx-term-bar::-webkit-details-marker { display: none; }
.edx-term-bar::marker { content: ""; }
.edx-term-bar .edx-term-dots {
  flex: none;
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: #ff5f57;
  box-shadow: 13px 0 0 #febc2e, 26px 0 0 #28c840;
  margin-right: 28px;
}
.edx-termwin .ed-target-check { flex: none; color: #4cc38a; font-size: 11px; }
.edx-termwin .ed-target-line {
  flex: 1;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.edx-termwin .ed-target-line strong { font-weight: 600; color: #f4f0e6; }
.edx-termwin .ed-target-host { color: rgba(232, 226, 212, 0.55); margin-left: 7px; }
.edx-termwin .ed-target-more {
  flex: none;
  font-size: 9px;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: rgba(232, 226, 212, 0.62);
}
.edx-term-caretglyph { display: inline-block; transition: transform 0.25s ease; }
.ed-target-details[open] .edx-term-caretglyph { transform: rotate(180deg); }
.edx-termwin .ed-target-body { padding: 0; }
.edx-termwin .edx-term { border-radius: 0; border-top: 1px solid rgba(232, 226, 212, 0.12); }
html[data-kbd] .edx-termwin:focus-within { outline: 2px solid var(--red); outline-offset: 2px; }
@media (prefers-reduced-motion: reduce) { .edx-term-caretglyph { transition: none; } }

/* the journey CTA's attention wiggle (unlock state only) */
.topbar-cta-wiggle { animation: ffCtaWiggle 0.7s ease; }
@keyframes ffCtaWiggle {
  0%, 100% { transform: translateX(0) rotate(0); }
  20% { transform: translateX(-2px) rotate(-1.6deg); }
  40% { transform: translateX(2px) rotate(1.6deg); }
  60% { transform: translateX(-1.5px) rotate(-1deg); }
  80% { transform: translateX(1.5px) rotate(0.8deg); }
}
@media (prefers-reduced-motion: reduce) { .topbar-cta-wiggle { animation: none; } }


/* the title bar carries exactly one caret */
.edx-termwin .ed-target-more::before,
.edx-termwin .ed-target-more::after { content: none; }


/* one caret, one voice: the legacy summary chevron dies, the name goes mono */
.edx-term-bar::before, .edx-term-bar::after { content: none; }
.edx-termwin .ed-target-line strong {
  font-family: var(--font-mono);
  font-size: 11px;
  letter-spacing: 0.02em;
}


/* the base sheet's open-state chevron (specificity 0-3-1) dies at equal weight */
.ed-target-details[open] .ed-target-more::after { content: none; }


/* ============================================================
   ONE VERTICAL RHYTHM — spacing follows hierarchy: 12–16px
   between blocks inside a panel, 16–24px between the page's
   organs, 26–40px before the closing booking card. Plus the
   retry button and the methodology disclosure join the system.
   ============================================================ */
.edx-hero { margin-top: clamp(14px, 3vw, 20px); }
.edx-tabs-wrap { margin-top: clamp(14px, 3.2vw, 22px); }
.edx-panel { margin-top: clamp(16px, 3.6vw, 24px); }
.edx-panel > * + * { margin-top: clamp(12px, 3vw, 16px); }
#px-docket > * + * { margin-top: clamp(12px, 3vw, 16px); }
.ed-delivery-status:empty { display: none; }
.ed-booking { margin-top: clamp(26px, 5.5vw, 40px); }
.edx-fineline { margin-top: clamp(18px, 4vw, 26px); }
.ed-end { margin-top: 14px; }

/* the closing action, in the system's own voice */
.ed-end .btn {
  min-width: 220px;
  min-height: 44px;   /* touch-target floor */
  padding: 13px 22px;
  background: #fff;
  border: 1px solid var(--ink-hairline);
  border-radius: 999px;
  color: var(--ink);
  font: 600 11px/1 var(--font-mono);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  box-shadow: 0 1px 2px rgba(26, 23, 18, 0.04);
  transition: border-color 0.2s ease, transform 0.2s ease;
}
.ed-end .btn:hover { border-color: var(--ink); transform: translateY(-1px); }

/* the methodology disclosure becomes a proper card */
.axp-method { padding-top: clamp(16px, 3.6vw, 24px); padding-bottom: clamp(40px, 7vh, 64px); }
.axp-method-details {
  background: #fff;
  border: 1px solid var(--ink-hairline);
  border-radius: 14px;
  overflow: hidden;
}
.axp-method-details summary {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 14px 16px;
  cursor: pointer;
  list-style: none;
  font: 600 10.5px/1.5 var(--font-mono);
  letter-spacing: 0.07em;
  text-transform: uppercase;
  color: var(--ink-muted);
}
.axp-method-details summary::-webkit-details-marker { display: none; }
.axp-method-details summary::after {
  content: "▾";
  flex: none;
  color: var(--ink-muted);
  transition: transform 0.25s ease;
}
.axp-method-details[open] summary::after { transform: rotate(180deg); }
.axp-method-details[open] summary {
  margin-bottom: 0;
  border-bottom: 1px solid var(--ink-faint);
  color: var(--ink);
}
.ax-method-text {
  margin: 0;
  padding: 14px 16px;
  font: 400 13px/1.65 var(--font-sans);
  color: var(--ink-muted);
}
.ax-method-text + .ax-method-text { padding-top: 0; }
@media (prefers-reduced-motion: reduce) { .axp-method-details summary::after { transition: none; } }


/* ============================================================
   FINDINGS AS NUMBERED CARDS — the fix-plan card, carrying the
   full story; the gated group flattens to let the cards speak.
   Bigger locks. And the email dialog floats high, where no
   keyboard can reach it.
   ============================================================ */
.edx-rowcard {
  display: flex;
  gap: 14px;
  position: relative;
  background: #fff;
  border: 1px solid var(--ink-hairline);
  border-radius: 14px;
  padding: 15px 15px 15px 22px;
}
.edx-row-rank {
  flex: none;
  min-width: 34px;
  font: 650 clamp(20px, 4.6vw, 26px)/1.15 var(--font-display);
  letter-spacing: -0.02em;
  color: color-mix(in srgb, var(--ink) 24%, transparent);
  font-variant-numeric: tabular-nums;
}
.edx-row-body { flex: 1; min-width: 0; }
.edx-rowcard .ed-row-headline { margin: 8px 0 0; }
.edx-rowcard .ed-row-detail { margin-top: 6px; }
.ed-row-critical, .ed-row-high, .ed-row-medium {
  border-left: 1px solid var(--ink-hairline);
  padding-left: 22px;
}
.ed-row-critical::before, .ed-row-high::before { left: 8px; top: 12px; bottom: 12px; width: 3.5px; }
.ed-gated { background: none; border: 0; padding: 0; }
.ed-gated .ed-gated-head { margin-bottom: 12px; }

/* the locks, with real presence */
.edx-lockcap svg, .edx-gate-lock svg {
  width: 30px;
  height: 30px;
  padding: 13px;
  box-shadow: 0 16px 38px -16px rgba(26, 23, 18, 0.5), 0 0 0 5px rgba(255, 255, 255, 0.55);
}

/* the email dialog floats in the safe upper band — keyboards never cover it */
.ed-sheet {
  position: fixed;
  left: 50%;
  right: auto;
  top: clamp(76px, 11vh, 150px);
  bottom: auto;
  width: min(440px, calc(100vw - 24px));
  translate: none;
  transform: translateX(-50%) scale(0.96);
  opacity: 0;
  visibility: hidden;
  border: 1px solid var(--ink-hairline);
  border-top: 3px solid var(--red);
  border-radius: 18px;
  padding: 20px;
  box-shadow: 0 30px 80px -30px rgba(26, 23, 18, 0.5);
  transition: transform 0.3s var(--ease-paper), opacity 0.3s ease, visibility 0s 0.3s;
}
.ed-sheet[data-open="true"] {
  translate: none;
  transform: translateX(-50%) scale(1);
  opacity: 1;
  visibility: visible;
  transition: transform 0.3s var(--ease-paper), opacity 0.3s ease;
}
@media (prefers-reduced-motion: reduce) {
  .ed-sheet, .ed-sheet[data-open="true"] { transition: opacity 0.15s ease; transform: translateX(-50%); }
}


/* ============================================================
   ROUND — the findings panel starts flush, context & limits is
   one balanced card holding not-measured, the booking box wears
   a folded corner, and the captures ride the homepage hardware.
   ============================================================ */
#px-docket { margin-top: 0; }

/* context & limits: the collapsed card, chevron in line, equal air */
.edx-limits {
  background: #fff;
  border: 1px solid var(--ink-hairline);
  border-radius: 14px;
  overflow: hidden;
}
.edx-limits .edx-limits-summary {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 14px 16px;
  cursor: pointer;
  list-style: none;
  margin: 0;
}
.edx-limits-summary::-webkit-details-marker { display: none; }
.edx-limits-summary::before, .edx-limits-summary::after { content: none; }
.edx-limits-title {
  font: 600 10.5px/1.4 var(--font-mono);
  letter-spacing: 0.07em;
  text-transform: uppercase;
  color: var(--ink-muted);
}
.edx-limits-chev { flex: none; color: var(--ink-muted); transition: transform 0.25s ease; }
.edx-limits[open] .edx-limits-chev { transform: rotate(180deg); }
.edx-limits[open] .edx-limits-summary { border-bottom: 1px solid var(--ink-faint); }
.edx-limits[open] .edx-limits-title { color: var(--ink); }
.edx-limits-body { padding: 14px 16px 16px; }
.edx-limits-body .ed-context-row { margin: 0 0 12px; font: 400 13px/1.6 var(--font-sans); color: var(--ink-muted); }
.edx-limits-body .ed-context-row strong { color: var(--ink); font-weight: 600; }
.edx-limits-sub { margin: 16px 0 6px; padding-top: 14px; border-top: 1px solid var(--ink-faint); }
.edx-limits-body .ed-fine-note { margin: 0 0 8px; font: 400 12.5px/1.55 var(--font-sans); color: var(--ink-muted); }
.edx-limits-body .ed-fine-list { margin: 0; padding: 0; list-style: none; }
.edx-limits-body .ed-fine-item { font: 400 12.5px/1.6 var(--font-sans); color: var(--ink-muted); }
.edx-limits-body .ed-fine-label { font-weight: 600; color: var(--ink); }
@media (prefers-reduced-motion: reduce) { .edx-limits-chev { transition: none; } }

/* the booking note folds its corner */
.ed-booking {
  position: relative;
  clip-path: polygon(0 0, calc(100% - 38px) 0, 100% 38px, 100% 100%, 0 100%);
  border-radius: 6px 0 6px 6px;
}
.ed-booking::after {
  content: "";
  position: absolute;
  top: 0;
  right: 0;
  width: 38px;
  height: 38px;
  background: linear-gradient(to bottom left, transparent 49.4%, #474033 50%);
  border-bottom-left-radius: 6px;
  pointer-events: none;
}

/* captures: the Our Work showcase rig, captures as still posters.
   The mockup canvas is 1086x1448 with transparent dead space above the
   monitor and below the phone; the same width-relative negative margins
   the homepage uses crop it (see styles.css .showcase-media). */
.edx-photostage { position: relative; max-width: 560px; margin: 0 auto; }
.edx-photostage .edx-mockup {
  display: block;
  width: 100%;
  background: transparent;
  margin-top: -16.64%;
  margin-bottom: -19.95%;
  filter: drop-shadow(0 18px 22px rgba(26, 23, 18, 0.26));
  /* the crop margins overlap neighbors with TRANSPARENT canvas; no overflow
     clip on the stage, so the ground shadow fades out instead of hard-cutting */
  pointer-events: none;
}
/* the sticky note's action centers on the card */
.ed-booking-actions { justify-content: center; align-items: center; }
/* the rig hosts the mockup and its invisible per-screen tap targets */
.edx-rig { position: relative; display: block; width: 100%; }
.edx-cap-hit {
  position: absolute;
  z-index: 3;
  padding: 0;
  border: 0;
  background: transparent;
  cursor: zoom-in;
}
/* the caption strip: a broadsheet figure caption, not a pill pair */
.edx-cap-strip {
  position: relative;
  z-index: 1;
  margin-top: 14px;
  padding-top: 10px;
  border-top: 1px solid var(--ink-hairline);
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 10px 14px;
  flex-wrap: wrap;
}
.edx-cap-note {
  font: 500 9.5px/1.5 var(--font-mono);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--ink-muted);
}
.edx-cap-links { display: inline-flex; align-items: baseline; gap: 16px; }
.edx-cap-link {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 0 0 2px;
  border: 0;
  border-bottom: 1px solid var(--ink-faint);
  background: none;
  cursor: zoom-in;
  font: 600 10.5px/1.4 var(--font-mono);
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--ink);
}
.edx-cap-link svg { width: 11px; height: 11px; flex: none; }
.edx-cap-link:hover { color: var(--red); border-bottom-color: var(--red); }
.edx-cap-link:focus-visible { outline: 2px solid var(--red); outline-offset: 3px; }
.edx-cap-missing {
  margin: 10px 0 0;
  font: 500 10px/1.6 var(--font-mono);
  letter-spacing: 0.05em;
  text-transform: uppercase;
  color: var(--ink-muted);
  text-align: center;
}
/* equal air above and below "Check another site"; the section's legacy
   72px bottom pad is retired so the button sits evenly between card and footer */
.ed-end { margin: clamp(12px, 3vw, 16px) 0; }
.ed.edx { padding-bottom: 0; }


/* the fix plan speaks in actions; the sealed steps blur as one group */
.edx-fix-action { margin: 8px 0 0; font: 600 14.5px/1.5 var(--font-sans); color: var(--ink); }
.edx-fix-ref {
  font: 500 8.5px/1 var(--font-mono);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--ink-muted);
}
.edx-fixsealed { position: relative; margin-top: clamp(12px, 3vw, 16px); }
.edx-fixsealed[data-locked="true"] .edx-fix-item {
  filter: blur(6px);
  pointer-events: none;
  user-select: none;
}
.edx-fixsealed .edx-lockcap { inset: 0; }
.edx-fixsealed[data-locked="false"] .edx-lockcap { display: none; }


/* ============================================================
   THE LIVE REVIEW — one viewport, no scroll: whimsy line,
   narrating terminal, and the rig developing captures live.
   ============================================================ */
.axl { padding: 0 var(--pad-x); }
.axl-stage {
  display: flex;
  flex-direction: column;
  gap: 10px;
  max-width: 640px;
  margin: 0 auto;
  /* FIXED height: the terminal absorbs the slack and scrolls internally, so
     the whole review always fits one viewport with nothing below the fold */
  height: calc(100svh - var(--topbar-h) - 8px);
  min-height: 540px;
  padding: 12px 0 8px;
}

/* One reading order at every width. This used to live only inside the ≥1024px
   pass, so the phone put the progress phrase above the terminal while the
   desktop put it below — the same screen composed two different ways for no
   reason the visitor could see. The DOM is untouched (the stage is
   aria-hidden and #px-status is the live channel), so this is presentation
   order only: identity, then the record, then the state of the work, then the
   evidence developing, then the way out. */
.axl-meta { order: 1; }
.axl-term { order: 2; }
.axl-whimsy { order: 3; }
.axl-rigwrap { order: 4; }
.axl-cancel-row { order: 5; }
/* .axl-error is a sibling of .axl-stage, not a flex item inside it, so it
   takes no order — it follows the stage in the section and replaces it
   entirely once [data-error] is set. */

/* The progress phrase. One sentence, never replaced, with a highlight
   travelling through the glyphs while work is live. The travelling fill is
   the whole signal: it says "still working" without counting anything, and
   the elapsed clock beside it is the honest measure of how long. */
.axl-whimsy {
  margin: 0;
  min-height: 1.5em;
  text-align: center;
  font-family: var(--font-serif);
  font-style: italic;
  font-size: clamp(1.3rem, 5.8vw, 1.7rem);
  letter-spacing: -0.01em;
  color: var(--ink);
}
.axl-whimsy-word { position: relative; display: inline-block; }

/* The highlight is a layer, not a treatment of the text itself.
   The first build clipped a gradient to the glyphs and animated an oversized
   no-repeat background across them, which meant the painted image left part
   of the transparent text uncovered: at some frames the sentence rendered as
   "Reading yo" and the rest of it vanished. Nothing that carries meaning may
   depend on where an animation happens to be.
   So the phrase below stays solid ink at all times, and ::after paints the
   same glyphs again on top, filled with a highlight that is transparent
   everywhere except a travelling band. Where the band is not, nothing paints
   and the ink shows through unchanged — every glyph is readable at every
   frame by construction, including if the animation never starts.
   repeat-x closes the other half of the old bug: a tiled image covers the
   full run of text however far it has travelled, and the gradient is pure
   90deg with matching end stops so the tiles meet seamlessly. One period of
   travel is exactly one tile, so the loop has no jump. */
@supports ((background-clip: text) or (-webkit-background-clip: text)) {
  .axl-whimsy-word[data-active="true"]::after {
    content: attr(data-phrase);
    position: absolute;
    inset: 0;
    pointer-events: none;
    background-image: linear-gradient(
      90deg,
      transparent 0%,
      transparent 34%,
      color-mix(in srgb, var(--red) 45%, transparent) 44%,
      var(--red) 50%,
      color-mix(in srgb, var(--red) 45%, transparent) 56%,
      transparent 66%,
      transparent 100%
    );
    background-size: 7em 100%;
    background-repeat: repeat-x;
    -webkit-background-clip: text;
    background-clip: text;
    color: transparent;
    animation: axlPhrase 2.9s linear infinite;
  }
}
@keyframes axlPhrase {
  from { background-position: 0 0; }
  to { background-position: 7em 0; }
}
.axl-meta {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  margin: 0;
  font: 500 9.5px/1.4 var(--font-mono);
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--ink-muted);
}
.axl-live-dot {
  flex: none;
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: var(--red);
  animation: axlPulse 1.6s ease-in-out infinite;
}
@keyframes axlPulse {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.35; }
}
.axl-meta-host { color: var(--ink); }
/* Bounded rather than greedy. As `flex: 1 1 auto` the terminal absorbed every
   spare pixel in the column — 368px of a 772px phone stage — and the device it
   sits above got whatever was left. It scrolls internally, so height beyond a
   readable window buys nothing, and the height it gives up is height the
   captures gain. */
.axl-term {
  flex: 0 1 auto;
  height: clamp(140px, 26svh, 220px);
  min-height: 0;
  isolation: isolate;
  display: flex;
  flex-direction: column;
  background: #241f17;
  border-radius: 12px;
  overflow: hidden;
  box-shadow: 0 14px 34px -20px rgba(26, 23, 18, 0.45);
}
.axl-term-bar {
  flex: none;
  position: relative;
  z-index: 1;
  background: #241f17;
  display: flex;
  align-items: center;
  gap: 9px;
  padding: 11px 14px;
  font: 500 10.5px/1.3 var(--font-mono);
  color: rgba(232, 226, 212, 0.72);
  border-bottom: 1px solid rgba(232, 226, 212, 0.12);
}
.axl-term-dots {
  flex: none;
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: #ff5f57;
  box-shadow: 13px 0 0 #febc2e, 26px 0 0 #28c840;
  margin-right: 28px;
}
.axl-term-title { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.axl-term-count { flex: none; font-size: 9px; letter-spacing: 0.1em; text-transform: uppercase; color: rgba(232, 226, 212, 0.55); }
.axl-term-lines {
  flex: 1 1 auto;
  min-height: 0;
  overflow-y: auto;
  background: #241f17;
  margin: 0;
  padding: 10px 14px 12px;
  list-style: none;
  font: 400 11px/1.75 var(--font-mono);
  color: #e8e2d4;
  overscroll-behavior: contain;
}
.axl-line { display: flex; align-items: baseline; gap: 9px; }
.axl-stamp { flex: none; color: rgba(232, 226, 212, 0.4); font-size: 10px; }
.axl-glyph { flex: none; width: 12px; text-align: center; color: rgba(232, 226, 212, 0.6); }
.axl-line[data-tone="good"] .axl-glyph { color: #4cc38a; }
.axl-line[data-tone="bad"] .axl-glyph { color: #ff8f7a; }
.axl-line[data-tone="quote"] .axl-text { color: rgba(232, 226, 212, 0.66); font-style: italic; }
.axl-text { min-width: 0; }
/* The rig gets the slack the terminal used to hoard, at every width. */
.axl-rigwrap {
  flex: 1 1 auto;
  min-height: 0;
  display: grid;
  place-items: center;
  padding: 6px 0 2px;
}
.axl-rig {
  position: relative;
  display: block;
  width: min(100%, 62svh, 480px);
  margin: 0 auto;
  /* The negative crop below pulls the mockup's *layout* box in, but the
     element still paints its full height — 1.333x its width against a layout
     box of 0.967x. On a phone that difference escaped upward into the progress
     phrase and downward through the cancel row to the bottom of the viewport:
     measured at 390x844, a 360px-tall device inside a 269px allocation.
     Clipping here makes the layout box and the visible box the same object, so
     the rig can never reach a neighbouring row at any width. Nothing visible
     is lost: the clipped bands are the empty canvas the crop was authored to
     remove, and the device's drop shadow falls inside them. */
  overflow: hidden;
}
.axl-rig firstfold-device-mockup {
  display: block;
  width: 100%;
  margin-top: -16.64%;
  margin-bottom: -19.95%;
  pointer-events: none;
  filter: drop-shadow(0 12px 18px rgba(26, 23, 18, 0.24)) grayscale(0.15) brightness(0.98);
  transition: filter 0.8s var(--ease-paper);
}
/* the rig warms up as its screens light */
.axl-rig[data-mobile] firstfold-device-mockup,
.axl-rig[data-desktop] firstfold-device-mockup { filter: drop-shadow(0 12px 18px rgba(26, 23, 18, 0.24)); }
.axl-cancel-row { margin: 0; text-align: center; }
.axl-cancel {
  padding: 6px 4px;
  border: 0;
  background: none;
  cursor: pointer;
  font: 500 10px/1.4 var(--font-mono);
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--ink-muted);
  text-decoration: underline;
  text-underline-offset: 3px;
}
.axl-cancel:hover { color: var(--red); }
.axl-cancel:disabled { opacity: 0.4; cursor: default; text-decoration: none; }
/* ————— failure: a destination, not an alert under a dead stage —————
   Setting data-error on the section swaps the whole live composition out. The
   old build only ever hid `.ax-progress .ax-stagewrap`, a selector left behind
   when the theater was rewritten from ax- to axl-, so the terminal, the rig
   and a pulsing red "Live review" dot all stayed on screen underneath the
   error — a second failure sitting under the first. */
.axl[data-error] .axl-stage { display: none; }

/* A failed review is the arrival screen again, not a notice about the arrival
   screen. It asks the same question, in the same voice, through the same
   control — so the composition is arrival's: one full-height centred column,
   display serif, one field, one mono reassurance. The previous slip (paper
   fill, hairline, 3px red margin rule, 34rem cap inside a 60svh grid) read as
   a correction notice dropped into empty page, which is the defect. No card,
   no border, no shadow: the page ground is the surface, exactly as it is on
   arrival. */
.axl[data-error] {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  min-height: calc(100svh - 140px);
  padding-top: clamp(56px, 9vh, 96px);
  padding-bottom: clamp(56px, 9vh, 96px);
  text-align: center;
}
.axl-error {
  width: 100%;
  min-width: 0;
  box-sizing: border-box;
  max-width: 600px;
  margin: 0 auto;
}
/* Arrival opens on a mono eyebrow, and the display type lands against it. The
   recovery had no eyebrow, so its heading started cold and the whole block
   floated 36px higher than arrival's at the same width. Same words as arrival,
   because this screen is still the free website analysis — it just has not run
   yet. That reframes the failure as the analyzer asking again rather than as
   an error page. */
.axl-error-kicker { margin: 0; }
/* Arrival's title carries 108px of display at 390 across three lines. Four
   words cannot match that at 32px — measured, the heading was 34px, a third of
   arrival's mass, which is why the composition read as a notice rather than as
   the analyzer. Larger type, wrapping to two balanced lines on a phone, gives
   the same anchor with the copy the owner fixed. */
.axl-error-title {
  margin: 14px 0 0;
  font: 600 clamp(40px, 8vw, 56px)/1.06 var(--font-serif);
  letter-spacing: -0.01em;
  color: var(--ink);
  text-wrap: balance;
}
/* The heading is a script-focused landing pad, exactly like .ed-verdict: JS
   moves focus here so assistive tech announces the state change. Chromium
   treats programmatic focus on a tabindex="-1" element as focus-visible, so
   the old rule painted a red rectangle around "Something went wrong." on every
   phone failure — card chrome, on the one composition that must have none.
   Same two-step the verdict already uses: no painted box by default, and a
   quiet mark only for real keyboard users tracked via html[data-kbd]. Muted
   ink rather than the verdict's --ink-faint, because a focus indicator has to
   clear 3:1 to be one. */
.axl-error-title:focus:not(:focus-visible) { outline: none; }
.axl-error-title:focus-visible { outline: none; }
html[data-kbd="true"] .axl-error-title:focus-visible {
  outline: 2px solid var(--ink-muted);
  outline-offset: 6px;
}
/* The reason takes arrival's italic serif — the same emphasis its title uses
   for "about your firm?" — so the failure reads in the product's voice rather
   than as system output. Red stays on the action, not on the problem. */
.axl-error-msg {
  margin: 14px auto 0;
  max-width: 30ch;
  font: italic 400 clamp(16px, 2.6vw, 20px)/1.5 var(--font-serif);
  color: var(--ink-muted);
  text-wrap: pretty;
}
/* The field is the arrival pill, unchanged, so recovery uses the same control
   the visitor already succeeded with once. */
.axl-error-form { width: 100%; margin: clamp(28px, 5vh, 44px) 0 0; }
.axl-error-pill { width: 100%; text-align: left; }
/* Balanced like the heading and the reason above it: at 430px this line broke
   as "…HAS BEEN EMAILED / TO YOU.", orphaning two words under a full line. */
.axl-error-note {
  margin: 16px 0 0;
  font: 500 11px/1.5 var(--font-mono);
  letter-spacing: .06em;
  text-transform: uppercase;
  color: var(--ink-muted);
  text-wrap: balance;
}
.axl-error-alt { margin: 18px 0 0; text-align: center; }
.axl-error-alt .axl-cancel { padding: 8px 6px; }

/* Recovery is the one place on this page a thumb must land first time, so both
   of its actions clear 44px on touch. Desktop keeps arrival's exact button
   metrics — the pointer there is fine and the two screens must still match. */
@media (pointer: coarse), (max-width: 760px) {
  .axl-error-pill .axp-go { padding-top: 16px; padding-bottom: 16px; }
  .axl-error-alt .axl-cancel { padding: 15px 10px; }
}

/* Below 480px an inline pill puts a verb button and a URL in the same 300px
   row, which is the cramped control the owner reported. The button takes its
   own full-width row inside the same field, so the address keeps its measure
   and the action keeps a 44px target. Radii stay concentric: 20px outer,
   8px inset, 12px inner. */
@media (max-width: 480px) {
  .axl-error-pill {
    flex-wrap: wrap;
    row-gap: 10px;
    padding: 9px;
    border-radius: 26px;
  }
  .axl-error-pill .axp-pill-glyph { margin-left: 11px; }
  /* Arrival's button is a stadium — 999px, red, mono caps, arrow. The recovery
     had squared it to a 12px bar, which read as a form from another product
     sitting inside a field. It keeps its own row, because a verb and a URL
     cannot share 300px without crushing one of them, but it keeps arrival's
     shape so the two screens use one control language. */
  .axl-error-pill .axp-go {
    flex: 1 0 100%;
    justify-content: center;
    padding: 16px 20px;
    border-radius: 999px;
  }
}
/* the pre-footer pitch and the footer have no business interrupting a live
   review — the analyzing state owns the whole viewport */
body.is-analyzing .foot-cta,
body.is-analyzing .footer { display: none !important; }
@media (prefers-reduced-motion: reduce) {
  /* The phrase keeps a distinct in-progress form rather than collapsing into
     the same solid ink the finished state uses: the highlight is held still
     inside the sentence instead of travelling through it. Progress itself is
     carried by things that were never animation — the elapsed clock and the
     terminal's real event lines. */
  .axl-whimsy-word[data-active="true"]::after {
    animation: none;
    /* Held where the crest lands mid-sentence: a still highlight, so the line
       still reads as in progress rather than as the finished state, and the
       ink underneath is untouched either way. */
    background-position: 2.4em 0;
  }
  .axl-live-dot { animation: none; }
  .axl-rig firstfold-device-mockup { transition: none; }
  .axl-seek { transition: none; }
}


/* ————— the seeking screens: text + pulsing dots on the waiting glass ————— */
.axl-seek {
  position: absolute;
  left: 0;
  top: 0;
  transform-origin: 0 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  pointer-events: none;
  z-index: 3;
  transition: opacity 0.5s ease;
}
.axl-seek[data-gone] { opacity: 0; }
/* content is laid out in LAYER pixels (desktop 1520x950, phone 780x1688)
   and the matrix3d warp scales it onto the glass */
/* The warp itself was never the problem — solveHomography maps the layer rect
   onto the real screen quad, so the geometry is projectively correct. What
   read as a sticker was the type: 64px uppercase mono on 0.12em tracking is
   the one treatment with no ascenders, no descenders and an even stroke
   rhythm, so the eye got no vertical cue to read the rake from. The serif
   italic — the same voice the progress phrase speaks in — has the varied
   stroke weight and the ascender/descender travel that let the plane show.
   Larger, because a monitor is showing content here, not wearing a label.
   The nudge below is optical, not geometric: this screen's near edge is the
   left one (644 layer px tall against 502 on the right), and on a plane that
   steep a block centred by construction reads as sitting slightly far and
   high. RIG_GEO and the homography are untouched. */
.axl-seek[data-strategy="desktop"] {
  gap: 44px;
  padding: 40px 110px 0 0;
}
.axl-seek[data-strategy="mobile"] { gap: 0; }
.axl-seek-text {
  max-width: 74%;
  font: italic 400 88px/1.22 var(--font-serif);
  letter-spacing: -0.005em;
  text-align: center;
  text-wrap: balance;
  color: rgba(232, 226, 212, 0.82);
}
.axl-seek-dots { display: flex; gap: 34px; }
.axl-seek[data-strategy="mobile"] .axl-seek-dots { gap: 58px; }
.axl-seek-dot {
  width: 28px;
  height: 28px;
  border-radius: 50%;
  background: rgba(232, 226, 212, 0.78);
  animation: axlSeek 1.3s ease-in-out infinite;
}
.axl-seek[data-strategy="mobile"] .axl-seek-dot { width: 76px; height: 76px; }
.axl-seek-dot:nth-child(2) { animation-delay: 0.18s; }
.axl-seek-dot:nth-child(3) { animation-delay: 0.36s; }
@keyframes axlSeek {
  0%, 100% { opacity: 0.25; transform: translateY(0); }
  40% { opacity: 1; transform: translateY(-14px); }
}
@media (prefers-reduced-motion: reduce) { .axl-seek-dot { animation: none; } }


/* term-bar polish: the Details affordance centres with the row, and the host
   line fades out before it can collide (no ellipsis) */
.edx-termwin .ed-target-more { align-self: center; display: inline-flex; align-items: center; gap: 4px; }
.edx-termwin .ed-target-line {
  text-overflow: clip;
  -webkit-mask-image: linear-gradient(to right, #000 calc(100% - 30px), transparent);
  mask-image: linear-gradient(to right, #000 calc(100% - 30px), transparent);
}

/* ================= DESKTOP PASS (>=1024px) =================
   Desktop-only presentation for the live theater and the report. Mobile keeps
   the shipped composition untouched — everything here stays inside the
   min-width scope. */
@media (min-width: 1024px) {
  /* --- Live theater: the terminal is a broadsheet-wide, short window matched
     to the site column, and the rig below it takes every pixel that is left.
     Order is set once in the base rules and is not repeated here. --- */
  .axl-stage { max-width: none; gap: 12px; }
  .axl-meta { font-size: 11px; }
  .axl-whimsy { font-size: 2rem; }
  /* Shorter than before: the terminal was taking 310px of a stage whose
     subject is the device rig, and it scrolls internally anyway, so the
     height it gave up is height the captures gained. */
  .axl-term {
    flex: 0 1 auto;
    min-height: 0;
    height: clamp(200px, 24vh, 268px);
    border-radius: 14px;
  }
  .axl-term-bar { padding: 12px 18px; font-size: 12.5px; }
  .axl-term-count { font-size: 10.5px; }
  .axl-term-lines { font-size: 13.5px; padding: 12px 20px 16px; }
  .axl-stamp { font-size: 12px; }
  .axl-glyph { width: 14px; }

  /* The rig was sized from width alone — `min(46vh, 480px)` — so a taller
     viewport bought nothing but taller empty bands above and below it: at
     1440x1100 a 480x464 composition floated in a 1282x554 wrapper.
     It is now sized from the height it is actually given. The row stretches,
     and `aspect-ratio` derives the width from that height, so the rig fills
     the wrapper exactly and the dead bands close.
     The ratio is the rig's *rendered* box, not the raw 1086x1448 canvas: the
     mockup's negative crop margins (-16.64% / -19.95% of the inline size)
     remove 397px of empty canvas, leaving 1086 x 1050.63. Those margins and
     RIG_GEO are deliberately untouched — theater.mjs's seekPlace() scales the
     seek overlays by rigEl.clientWidth against a top-left origin, so the
     screens and their overlays stay locked together while the rig grows.
     max-width is the one guard: on an unusually tall, narrow viewport the
     derived width would overflow the column, and there a small band is the
     correct trade. */
  .axl-rigwrap {
    flex: 1 1 auto;
    min-height: 0;
    display: grid;
    align-items: stretch;
    justify-items: center;
    padding: 0;
  }
  .axl-rig {
    width: auto;
    height: 100%;
    aspect-ratio: 1086 / 1050.63;
    max-width: 100%;
  }
  .axl-cancel { font-size: 11px; }

  /* --- Report: every block shares the same column edge — no staggering. --- */
  .ed-lead { max-width: none; }
  .ed-lead > * { max-width: 700px; margin-inline: auto; }
  .ed-slip { max-width: none; }
  /* the slip's reading content keeps a comfortable measure inside the wide card */
  .ed-slip-copy, .ed-slip-body, .ed-slip-title { max-width: 640px; margin-inline: auto; }
  #px-gate-form { max-width: 560px; margin-inline: auto; }
  /* the fine print sits centered beneath the (centered) submit button */
  .ed-slip-privacy { text-align: center; }
  .ed-end { max-width: 1080px; margin-inline: auto; text-align: center; }

  /* --- Scorecard: larger dial, the pair centered as a unit. --- */
  .edx-hero {
    grid-template-columns: auto auto;
    justify-content: center;
    column-gap: clamp(40px, 5vw, 72px);
    padding: clamp(30px, 3.5vw, 44px);
  }
  .edx-hero .ed-ring { width: clamp(160px, 15vw, 200px); }
  .edx-hero .ed-verdict { font-size: clamp(27px, 2.3vw, 34px); }
  .edx-hero .ed-judgment { max-width: 560px; }

  /* --- Tier tiles: the label sits beside the numeral, both scaled up. --- */
  .edx-tile {
    display: flex;
    align-items: baseline;
    gap: 14px;
    padding: 20px 22px;
  }
  .edx-tile-num { font-size: 44px; }
  .edx-tile-label { margin: 0; font-size: 12px; letter-spacing: 0.1em; }

  /* --- Findings: the good-shape checks and the limits note share the
     column edge, and the checks read three across. --- */
  .ed-fine { max-width: none; }
  .ed-pass-list { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px 40px; }

  /* --- The black card speaks from its center. --- */
  .ed-booking { text-align: center; }
  .ed-booking-line, .ed-booking-body { margin-inline: auto; }
}
