/* ============================================================
   Revolt Customer Portal — Case Study  ·  "The Untangling"
   case-study-v2.css   (extends ../styles.css brand tokens)
   One cream canvas. Colour as punctuation. Layout goes from
   scattered → structured. Screenshots live in the composition.
   ============================================================ */

/* ---------- canvas + rhythm ---------- */
.cs2{background:var(--cream);overflow-x:clip}
.cs2 .wrap{max-width:1240px}
.chapter{position:relative;padding:118px 0}
.chapter + .chapter{padding-top:34px}
@media(max-width:820px){.chapter{padding:74px 0}.chapter + .chapter{padding-top:18px}}

/* big faint chapter index — same visual language as the site project cards */
.chap{position:relative;margin-bottom:52px}
.chap-head{display:flex;align-items:flex-end;gap:22px;flex-wrap:wrap}
.chap-num{font-family:var(--font-grotesk);font-weight:900;font-size:clamp(56px,8vw,120px);
  line-height:.74;letter-spacing:-.05em;color:rgba(36,20,8,.12);user-select:none}
.chap-kicker{display:inline-flex;align-items:center;gap:11px;font-family:var(--font-grotesk);
  font-weight:800;font-size:13px;letter-spacing:.18em;text-transform:uppercase;color:var(--ink-soft)}
.chap-kicker .eyebrow-line{height:2px;width:30px;background:currentColor;opacity:.55;border-radius:2px}
.chap-title{font-family:var(--font-grotesk);font-weight:900;font-size:clamp(30px,4.4vw,58px);
  line-height:1.02;letter-spacing:-.035em;color:var(--ink);margin:20px 0 0;max-width:19ch;text-wrap:balance}
.chap-lead{font-size:clamp(17px,1.35vw,20px);line-height:1.7;color:var(--ink-soft);margin:22px 0 0;max-width:60ch}
.chap.on-dark .chap-num{color:rgba(247,241,225,.14)}
.chap.on-dark .chap-kicker{color:rgba(247,241,225,.6)}
.chap.on-dark .chap-title{color:var(--cream)}
.chap.on-dark .chap-lead{color:rgba(247,241,225,.74)}

/* ---------- shared figure frame (screenshots become real imagery) ---------- */
.frame{position:relative;border:3px solid var(--ink);border-radius:18px;overflow:hidden;
  background:#fff;box-shadow:11px 13px 0 var(--ink)}
.frame img{width:100%;height:auto;display:block}
.frame.scrollable{overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;scrollbar-width:thin}
.frame.cream{background:var(--cream-2)}
.frame.soft{box-shadow:7px 9px 0 rgba(36,20,8,.16)}
.on-dark-shadow{box-shadow:14px 16px 0 rgba(0,0,0,.4)}

/* pen marginalia + tags */
.pen{font-family:var(--font-hand);font-weight:700;color:var(--ink);font-size:clamp(22px,2vw,30px);
  line-height:1.05}
.pen.cream{color:var(--cream)}
.tag-pill{display:inline-flex;align-items:center;gap:7px;font-family:var(--font-grotesk);font-weight:800;
  font-size:11px;letter-spacing:.13em;text-transform:uppercase;color:var(--ink);
  background:var(--cream);border:2px solid var(--ink);border-radius:999px;padding:5px 13px;white-space:nowrap}
.tag-pill.mint{background:var(--mint)}
.tag-pill.orange{background:var(--orange);color:var(--cream);border-color:var(--orange)}
.tag-pill.ghost{background:transparent;color:var(--cream);border-color:rgba(247,241,225,.5)}

/* ============================================================
   00 · OPENING / HOOK
   ============================================================ */
.cs2-head{position:relative;padding:26px 0 96px}
.cs2-back{display:inline-flex;align-items:center;gap:8px;margin:24px 0 40px;font-family:var(--font-grotesk);
  font-weight:700;font-size:14px;color:var(--ink-soft);text-decoration:none;transition:gap .2s,color .2s}
.cs2-back:hover{gap:13px;color:var(--orange-deep)}
.head-eyebrow{display:inline-flex;align-items:center;gap:10px;font-family:var(--font-grotesk);font-weight:800;
  font-size:12.5px;letter-spacing:.2em;text-transform:uppercase;color:var(--ink-soft)}
.head-eyebrow .dot{width:9px;height:9px;border-radius:50%;background:var(--orange)}
.cs2-title{font-family:var(--font-grotesk);font-weight:900;font-size:clamp(40px,6.6vw,90px);
  line-height:.98;letter-spacing:-.045em;color:var(--ink);margin:14px 0 0;max-width:17ch;text-wrap:balance}
.head-project{font-family:var(--font-grotesk);font-weight:800;font-size:clamp(17px,1.7vw,22px);
  letter-spacing:-.01em;color:var(--orange-deep);margin:20px 0 0;display:flex;width:fit-content;align-items:center;gap:11px}
.head-project::before{content:"";width:26px;height:3px;background:var(--orange);border-radius:2px}
.head-grid{display:grid;grid-template-columns:minmax(0,.92fr) minmax(0,1.55fr);gap:50px;align-items:center;margin-top:50px}
.head-col p{font-size:clamp(17px,1.4vw,21px);line-height:1.66;color:var(--ink-soft);margin:0}
.byline{margin-top:32px;border-top:2px solid var(--ink);padding-top:22px;display:flex;flex-wrap:wrap;gap:26px 34px}
.byline .by{display:flex;flex-direction:column;gap:5px}
.byline .byk{font-family:var(--font-grotesk);font-weight:800;font-size:11px;letter-spacing:.14em;
  text-transform:uppercase;color:rgba(36,20,8,.55)}
.byline .byv{font-family:var(--font-grotesk);font-weight:700;font-size:15.5px;line-height:1.38;color:var(--ink);max-width:24ch}

/* hero shot — large, tilted, breaking the frame, annotated */
.head-shot{position:relative}
.head-shot .frame{transform:rotate(-1.4deg);box-shadow:15px 18px 0 var(--ink)}
/* annotation sits in normal flow above the frame — keeps it from bleeding into the screenshot */
.head-shot .anno{display:flex;align-items:flex-end;justify-content:flex-end;gap:8px;margin-bottom:14px}
.head-shot .anno .pen{transform:rotate(-4deg);max-width:13ch;text-align:right}
.head-tags{display:flex;flex-wrap:wrap;gap:9px;margin-top:30px}
@media(max-width:900px){.head-grid{grid-template-columns:1fr;gap:34px}.head-shot{order:-1}}

/* ============================================================
   01 · THE MESSY SERVICE  (research wall)
   ============================================================ */
.wall{display:grid;grid-template-columns:1.32fr .9fr;gap:40px;align-items:center;margin-top:8px}
.wall-art{position:relative}
.wall-art .frame{transform:rotate(-1.3deg)}
.wall-art .tape{position:absolute;width:104px;height:26px;background:rgba(247,207,46,.62);
  border:1px dashed rgba(36,20,8,.35);z-index:4}
.wall-art .tape.t1{top:-13px;left:30px;transform:rotate(-7deg)}
.wall-art .tape.t2{bottom:-12px;right:46px;transform:rotate(5deg)}
.wall-art .artlabel{position:absolute;left:8px;bottom:-44px;display:flex;align-items:center;gap:9px}
.wall-notes{position:relative;display:flex;flex-direction:column;gap:14px}
.note{position:relative;align-self:flex-start;max-width:30ch;background:var(--cream-2);border:2.5px solid var(--ink);
  border-radius:4px;padding:13px 16px;font-family:var(--font-grotesk);font-weight:700;font-size:15.5px;
  line-height:1.36;color:var(--ink);box-shadow:4px 5px 0 rgba(36,20,8,.16)}
.note small{display:block;font-weight:700;font-size:12.5px;letter-spacing:.05em;text-transform:uppercase;
  color:var(--orange-deep);margin-bottom:5px}
.note.n1{transform:rotate(-2.4deg);margin-left:0}
.note.n2{transform:rotate(1.8deg);align-self:flex-end;margin-right:6px}
.note.n3{transform:rotate(-1.4deg);margin-left:34px;background:var(--yellow)}
.note.n4{transform:rotate(2.2deg);align-self:flex-end}
.note.n5{transform:rotate(-1.8deg);margin-left:14px}
.note.n6{transform:rotate(1.3deg);align-self:flex-end;margin-right:24px;background:var(--yellow)}
.wall-arrow{position:absolute;color:var(--ink);z-index:2;pointer-events:none}
.messy-quote{margin-top:64px;display:grid;grid-template-columns:auto 1fr;gap:26px;align-items:center;max-width:980px}
.messy-quote .qbar{width:5px;align-self:stretch;background:var(--orange);border-radius:4px}
.messy-quote p{font-family:var(--font-display);font-style:italic;font-weight:700;
  font-size:clamp(22px,2.6vw,34px);line-height:1.28;letter-spacing:-.01em;color:var(--ink);margin:0;text-wrap:balance}
.messy-quote cite{display:block;font-family:var(--font-grotesk);font-style:normal;font-weight:700;font-size:13px;
  letter-spacing:.05em;color:var(--ink-soft);margin-top:14px}
@media(max-width:900px){.wall{grid-template-columns:1fr;gap:30px}
  .wall-art .frame{transform:none}.wall-art .artlabel{position:static;margin-top:18px}
  .wall-notes{margin-top:8px}.note{transform:none!important;align-self:stretch!important;
  margin:0!important;max-width:none}.wall-arrow{display:none}}

/* ============================================================
   02 · MAPPING THE TRUTH
   ============================================================ */
.map-spread{display:grid;grid-template-columns:1.55fr 1fr;gap:48px;align-items:center;margin-top:6px}
.map-spread .frame{transform:rotate(.7deg)}
.map-aside{display:flex;flex-direction:column;gap:26px}
.map-aside .pen{transform:rotate(-2.5deg);color:var(--orange-deep)}
.groups{display:flex;flex-direction:column;gap:0}
.group-row{display:grid;grid-template-columns:auto 1fr;gap:16px;align-items:start;padding:18px 0;
  border-top:2px solid var(--line)}
.group-row:last-child{border-bottom:2px solid var(--line)}
.group-row .gn{font-family:var(--font-grotesk);font-weight:900;font-size:22px;color:var(--orange-deep);line-height:1}
.group-row h4{font-family:var(--font-grotesk);font-weight:800;font-size:18px;color:var(--ink);margin:0 0 5px;line-height:1.18}
.group-row p{font-size:15.5px;line-height:1.58;color:var(--ink-soft);margin:0}
/* editorial stat line (replaces the 3-card insight grid) */
.statline{margin-top:64px;display:grid;grid-template-columns:repeat(3,1fr);gap:0;
  border-top:3px solid var(--ink);border-bottom:3px solid var(--ink)}
.stat{padding:38px 40px 38px 0;border-right:2px solid rgba(36,20,8,.22)}
.stat:last-child{border-right:none;padding-right:0}
.stat .sn{font-family:var(--font-grotesk);font-weight:900;font-size:clamp(46px,5.5vw,72px);line-height:.92;
  letter-spacing:-.04em;color:var(--orange-deep)}
.stat .st{font-family:var(--font-grotesk);font-weight:800;font-size:16px;color:var(--ink);margin:16px 0 9px}
.stat .sd{font-size:15.5px;line-height:1.6;color:var(--ink-soft)}
@media(max-width:900px){.map-spread{grid-template-columns:1fr;gap:30px}.map-spread .frame{transform:none}
  .statline{grid-template-columns:1fr;border-bottom:none}
  .stat{padding:24px 0;border-right:none;border-bottom:2px solid var(--line)}}

/* ============================================================
   03 · FROM JOURNEY → FLOW   (dark interruption · the reveal)
   ============================================================ */
.flowdark{position:relative;background:var(--ink);color:var(--cream)}
.flowdark .messy-quote{display:none}
.ba{margin-top:14px;display:grid;grid-template-columns:1fr;gap:0}
.ba-step{position:relative}
.ba-meta{display:flex;align-items:center;gap:14px;margin-bottom:18px;flex-wrap:wrap}
.ba-meta .lbl{font-family:var(--font-grotesk);font-weight:900;font-size:clamp(20px,2.4vw,30px);
  letter-spacing:-.02em}
.ba-step.before .ba-meta .lbl{color:var(--pink-deep)}
.ba-step.after .ba-meta .lbl{color:var(--mint)}
.ba-meta .desc{font-size:16px;color:rgba(247,241,225,.78);line-height:1.45;max-width:44ch}
.ba .frame{background:#fff}
.ba-bridge{display:flex;align-items:center;justify-content:center;gap:18px;padding:30px 0}
.ba-bridge .pen{color:var(--mint);transform:rotate(-3deg)}
.ba-bridge svg{color:var(--mint)}
@media(max-width:760px){.ba-bridge{padding:22px 0}.ba-bridge .pen{font-size:22px}}

/* ============================================================
   04 · DESIGNING CONFIDENCE  (staggered UI gallery)
   ============================================================ */
.gallery{margin-top:10px;display:grid;grid-template-columns:repeat(12,1fr);gap:26px;align-items:start}
.g-item{display:flex;flex-direction:column;gap:14px}
.g-item.g-main{grid-column:1 / span 7}
.g-item.g-b{grid-column:8 / span 5;margin-top:54px}
.g-item.g-c{grid-column:1 / span 5;margin-top:6px}
.g-item.g-wire{grid-column:6 / span 7;margin-top:34px}
.g-cap{display:flex;flex-direction:column;gap:5px}
.g-cap .gt{font-family:var(--font-grotesk);font-weight:800;font-size:16px;color:var(--ink);
  display:flex;align-items:center;gap:9px}
.g-cap .gt .gd{width:9px;height:9px;border-radius:50%;background:var(--orange);flex-shrink:0}
.g-cap .gs{font-size:15.5px;line-height:1.58;color:var(--ink-soft);margin-left:18px;max-width:42ch}
.g-item.g-main .frame{transform:rotate(-1deg)}
.g-item.g-c .frame{transform:rotate(1deg)}
.g-wire-inner{position:relative}
.g-wire-inner .pen{position:absolute;left:-6px;top:-40px;transform:rotate(-3deg);color:var(--orange-deep)}
.wire-flag{position:absolute;right:14px;top:14px;z-index:4}
@media(max-width:900px){.gallery{grid-template-columns:1fr;gap:30px}
  .g-item{grid-column:1 / -1!important;margin-top:0!important}
  .g-item .frame{transform:none!important;max-width:560px}
  .g-wire-inner .pen{position:static;display:inline-block;margin-bottom:8px}}

/* from low-fi wireframe → shipped UI (process micro-moment) */
.wirestrip{margin-top:74px;display:grid;grid-template-columns:.78fr auto 1fr;gap:26px;align-items:center;
  padding-top:40px;border-top:2px dashed rgba(36,20,8,.28)}
.wirestrip .wlabel{font-family:var(--font-grotesk);font-weight:800;font-size:11.5px;letter-spacing:.13em;
  text-transform:uppercase;color:var(--ink-soft);margin-bottom:12px;display:flex;align-items:center;gap:8px}
.wirestrip .wlabel .wd{width:8px;height:8px;border-radius:50%;background:var(--ink)}
.wirestrip .frame{box-shadow:6px 8px 0 rgba(36,20,8,.18)}
.wirestrip .w-arrow{display:grid;place-items:center;color:var(--ink)}
.wirestrip .w-arrow .pen{color:var(--orange-deep);margin-bottom:6px;transform:rotate(-3deg);white-space:nowrap}
@media(max-width:820px){.wirestrip{grid-template-columns:1fr;gap:18px}
  .wirestrip .w-arrow svg{transform:rotate(90deg)}.wirestrip .frame{max-width:480px}}

/* ============================================================
   05 · TESTING & ITERATION  (finding → response ledger)
   ============================================================ */
.ledger{margin-top:18px;border-top:3px solid var(--ink)}
.lrow{display:grid;grid-template-columns:1fr auto 1fr;gap:34px;align-items:center;
  padding:40px 0;border-bottom:2px solid var(--line)}
.lrow:last-child{border-bottom:3px solid var(--ink)}
.l-find .ftag{font-family:var(--font-grotesk);font-weight:800;font-size:11.5px;letter-spacing:.13em;
  text-transform:uppercase;color:var(--ink-soft);display:flex;align-items:center;gap:8px;margin-bottom:10px}
.l-find .ftag::before{content:"";width:22px;height:2px;background:var(--orange)}
.l-find p{font-family:var(--font-display);font-weight:800;font-size:clamp(18px,1.7vw,22px);line-height:1.26;
  color:var(--ink);margin:0}
.l-conn{display:grid;place-items:center;color:var(--ink)}
.l-conn .clabel{font-family:var(--font-hand);font-weight:700;font-size:19px;color:var(--orange-deep);
  margin-bottom:2px;white-space:nowrap}
.l-resp{display:grid;grid-template-columns:auto 1fr;gap:14px;align-items:start;
  background:linear-gradient(90deg,rgba(166,224,207,.32),rgba(166,224,207,.08));
  border-left:3px solid var(--mint-deep);border-radius:0 14px 14px 0;padding:18px 22px}
.l-resp .rcheck{flex-shrink:0;width:30px;height:30px;border-radius:9px;background:var(--mint);
  border:2px solid var(--ink);display:grid;place-items:center;margin-top:1px}
.l-resp .rk{font-family:var(--font-grotesk);font-weight:800;font-size:11.5px;letter-spacing:.12em;
  text-transform:uppercase;color:var(--mint-deep);filter:brightness(.62)}
.l-resp p{font-size:15.5px;line-height:1.58;color:var(--ink-soft);margin:5px 0 0}
@media(max-width:820px){.lrow{grid-template-columns:1fr;gap:20px;padding:32px 0}
  .l-conn{justify-items:start}.l-conn svg{transform:rotate(90deg)}.l-conn .clabel{margin-bottom:0;margin-right:8px}}

/* ============================================================
   06 · FOCUSED MVP  (priority spectrum)
   ============================================================ */
.spectrum{margin-top:18px}
.spec-axis{position:relative;display:grid;grid-template-columns:repeat(4,1fr);
  border-top:3px solid var(--ink);margin-top:58px}
.spec-axis::before{content:"";position:absolute;left:0;right:0;top:-3px;height:3px;
  background:linear-gradient(90deg,var(--orange),var(--orange) 24%,var(--ink) 24%,var(--ink) 75%,rgba(36,20,8,.3) 75%)}
.spec-col{padding:0 26px 0 0}
.spec-col:last-child{padding-right:0}
.spec-node{display:flex;align-items:center;gap:11px;padding:26px 0 18px}
.spec-node .nt{font-family:var(--font-grotesk);font-weight:900;font-size:clamp(20px,2vw,26px);
  letter-spacing:-.02em;color:var(--ink)}
.spec-node .nw{font-family:var(--font-grotesk);font-weight:800;font-size:11px;letter-spacing:.09em;
  text-transform:uppercase;color:var(--ink-soft);background:var(--cream-2);border:1.5px solid var(--line);
  border-radius:999px;padding:3px 9px}
.spec-dot{width:15px;height:15px;border-radius:50%;border:3px solid var(--ink);background:var(--cream);
  margin-top:-9px;position:relative;z-index:2}
.spec-col.c1 .spec-dot{background:var(--orange);border-color:var(--orange)}
.spec-col.c1 .spec-node .nt{color:var(--orange-deep)}
.spec-col .spec-list{list-style:none;margin:0;padding:8px 0 36px;display:flex;flex-direction:column;gap:12px}
.spec-list li{font-size:15.5px;line-height:1.42;color:var(--ink);display:flex;gap:9px;align-items:flex-start}
.spec-list li::before{content:"";flex-shrink:0;width:7px;height:7px;border-radius:50%;background:var(--ink);margin-top:6px}
.spec-col.c2 .spec-list li{color:var(--ink-soft)}
.spec-col.c3 .spec-list li,.spec-col.c4 .spec-list li{color:rgba(36,20,8,.5)}
.spec-col.c3 .spec-list li::before,.spec-col.c4 .spec-list li::before{background:rgba(36,20,8,.32)}
.spec-col.c4 .spec-list li{text-decoration:line-through;text-decoration-color:rgba(36,20,8,.3)}
.spec-legend{margin-top:28px;display:flex;gap:10px;align-items:flex-start;max-width:74ch;
  font-family:var(--font-grotesk);font-weight:600;font-size:15px;line-height:1.58;color:var(--ink-soft)}
.spec-legend svg{flex-shrink:0;margin-top:3px}
@media(max-width:820px){.spec-axis{grid-template-columns:1fr;border-top:none}
  .spec-axis::before{display:none}
  .spec-col{padding:0;border-top:3px solid var(--ink)}
  .spec-col.c1{border-color:var(--orange)}
  .spec-dot{display:none}.spec-node{padding-top:18px}}

/* ============================================================
   07 · CONTRIBUTION + CLOSE  (orange payoff)
   ============================================================ */
.close{position:relative;background:var(--orange);color:var(--cream);overflow:hidden}
.close .chap-kicker{color:rgba(247,241,225,.78)}
.close-statement{font-family:var(--font-grotesk);font-weight:800;font-size:clamp(28px,3.9vw,50px);
  line-height:1.12;letter-spacing:-.03em;color:var(--cream);margin:26px 0 0;max-width:22ch;text-wrap:balance}
.close-statement .mark{color:var(--ink)}
.close-sub{font-size:clamp(17px,1.4vw,20px);line-height:1.68;color:rgba(247,241,225,.92);margin:30px 0 0;max-width:60ch}
.coda{margin-top:76px;display:grid;grid-template-columns:repeat(3,1fr);gap:34px}
.coda-item{padding-top:26px;border-top:3px solid rgba(247,241,225,.5)}
.coda-item .cn{font-family:var(--font-grotesk);font-weight:900;font-size:14px;color:var(--cream);opacity:.7;letter-spacing:.05em}
.coda-item h4{font-family:var(--font-display);font-weight:800;font-size:21px;color:var(--cream);margin:9px 0 9px;line-height:1.22}
.coda-item p{font-size:15.5px;line-height:1.62;color:rgba(247,241,225,.92);margin:0}
.close-cta{display:flex;gap:16px;flex-wrap:wrap;margin-top:70px}
@media(max-width:820px){.coda{grid-template-columns:1fr;gap:26px}}

/* ---------- mobile: keep wide diagrams legible — scroll, don't shrink ---------- */
@media(max-width:820px){
  .frame.scrollable{overflow-x:auto}
  .frame.scrollable img{width:auto;height:300px;max-width:none}
}

/* ---------- reduced-motion: drop the tilts so nothing reads broken ---------- */
@media (prefers-reduced-motion: reduce){
  .head-shot .frame,.wall-art .frame,.map-spread .frame,
  .g-item .frame,.head-shot .anno .pen,.map-aside .pen,.g-wire-inner .pen{transform:none!important}
}

/* ================================================================
   MOBILE FIXES  ≤ 768px  — case study
   ROOT CAUSES (found with DevTools scrollWidth scan at 390px):
   1. .wall-art / .wall-notes / .ba-step / .ba-bridge lack min-width:0
      so their parent 1fr grid tracks expand to content min-content
      (wall → 566px, ba section → 881px instead of 354px)
   2. .frame.scrollable img uses width:auto + height:300px + max-width:none
      so the image takes its intrinsic width from aspect ratio, forcing
      every ancestor wider
   3. <figure> has browser-default margin:1em 40px that subtracts 80px
      from usable frame width on mobile
   ================================================================ */
@media(max-width:768px){
  /* ---- figure margin reset: reclaim the 80px browser default takes away ---- */
  .frame{margin:0}

  /* ---- grid item minimum: prevent 1fr tracks from expanding to content ---- */
  /* .wall section */
  .wall-art,.wall-notes{min-width:0}
  /* .ba before/after section */
  .ba-step,.ba-bridge{min-width:0}

  /* ---- scrollable artifact frames: width constrained by grid, not image ---- */
  /* The frame is the scroll container. Width = 100% of the (now-correct) grid track.
     Image maintains aspect-ratio height and scrolls horizontally inside the frame. */
  .frame.scrollable{
    overflow-x:auto;
    -webkit-overflow-scrolling:touch;
    width:100%;
    max-width:100%
  }
  .frame.scrollable img{
    height:260px;
    width:auto;
    max-width:none;
    min-width:0;
    display:block
  }

  /* ---- ba-meta: wrap items when container is viewport-width ---- */
  .ba-meta{flex-wrap:wrap;gap:10px 12px}
  .ba-meta .desc{max-width:100%}

  /* ---- opening header ---- */
  .cs2-head{padding:12px 0 52px}
  .cs2-title{font-size:clamp(26px,7vw,48px);letter-spacing:-.03em}

  /* head-shot: remove tilt; overflow:hidden was clipping both the shadow and
     the frame's own border-radius — remove it now that there is no tilt to clip */
  .head-shot{overflow:visible}
  .head-shot .frame{transform:none;border-width:2px;border-radius:12px;box-shadow:5px 6px 0 var(--ink)}
  /* annotation: hand-written caption above the image, left-aligned on mobile */
  .head-shot .anno{position:static;margin-bottom:16px;justify-content:flex-start;gap:0}
  .head-shot .anno .pen{transform:none;max-width:none;text-align:left;font-size:clamp(18px,5vw,24px)}

  /* ---- testing section connector: hide the rotating SVG arrow ----
     On desktop the → arrow points from finding to response (3-col layout).
     At 820px it's rotated 90° to point ↓, but the SVG layout box stays
     48×20 while it renders 20×48 — causing visual misalignment.
     Hiding the SVG and just showing the "so I" Caveat label is cleaner. */
  .l-conn{display:flex;align-items:center;gap:8px}
  .l-conn svg{display:none}

  /* ---- chapter rhythm ---- */
  .chapter{padding:52px 0}
  .chapter+.chapter{padding-top:12px}

  /* ---- section-specific tightening ---- */
  .note{font-size:14px;padding:10px 13px}
  .messy-quote{margin-top:40px;gap:16px}
  .ba-bridge{padding:16px 0}
  .wirestrip{margin-top:48px}

  /* ---- close section CTAs ---- */
  .close-cta{flex-direction:column;align-items:stretch;gap:12px;margin-top:50px}
  .close-cta .btn{justify-content:center;text-align:center}
}

/* ================================================================
   MOBILE FIXES  ≤ 480px  — tightest viewports
   ================================================================ */
@media(max-width:480px){
  /* font floors: smaller so long headings don't need to wrap awkwardly */
  .cs2-title{font-size:clamp(22px,7.5vw,36px)}
  .chap-num{font-size:clamp(40px,12vw,68px)}
  .chap-title{font-size:clamp(20px,5.5vw,32px);max-width:none}
  .chap-lead{font-size:15px}

  /* reduce frame shadows — large offsets look clipped at narrow widths */
  .frame{box-shadow:5px 6px 0 var(--ink)}
  .head-shot .frame{box-shadow:5px 6px 0 var(--ink)}
  .frame.soft{box-shadow:4px 5px 0 rgba(36,20,8,.16)}
  .frame.on-dark-shadow,.ba .frame{box-shadow:7px 9px 0 rgba(0,0,0,.4)}

  /* scrollable image shorter on very small screens */
  .frame.scrollable img{height:200px}

  /* tighter note cards */
  .note{font-size:13px;padding:9px 11px}

  /* tighter ledger rows */
  .lrow{gap:14px;padding:20px 0}

  /* tighter close section */
  .coda{margin-top:44px}
  .close-cta .btn{width:100%}
}
