/* ===========================================================
   Credit by Sie — ScrollCraft layer
   House method: hq-brain skills/design/claude-website-design.
   Dependency-free: sticky + rAF progress, no libraries.
   Uses ONLY the existing tokens (--pink / --pink-d / --ink).
   =========================================================== */

/* ---------- reveal-on-scroll ----------
   The arming class is added BY JS. With JS off nothing is ever
   hidden, so the page degrades to fully visible. */
.rv.rv-armed{opacity:0;transform:translateY(16px)}
.rv.rv-in{
  opacity:1;transform:none;
  transition:opacity .75s cubic-bezier(.22,1,.36,1), transform .75s cubic-bezier(.22,1,.36,1);
}
.rv.rv-in.rv-d1{transition-delay:.08s}
.rv.rv-in.rv-d2{transition-delay:.16s}
.rv.rv-in.rv-d3{transition-delay:.24s}

/* ===========================================================
   SIGNATURE SCENE — "Watch a file clear"
   Her logo is a neon sign, so the payoff of a clean report is
   the sign switching on. Scroll drives: disputes land, lines
   get struck and deleted, the dial climbs, the neon ignites.
   =========================================================== */
.scene{background:var(--ink);color:#fff;position:relative}
.scene-track{height:360vh;position:relative}      /* the scroll runway */
.scene-pin{position:sticky;top:var(--nav-h);height:calc(100vh - var(--nav-h));
  display:flex;align-items:center;overflow:hidden}
.scene-pin::before{                                /* soft pink light, matches the hero */
  content:"";position:absolute;inset:0;pointer-events:none;
  background:
    radial-gradient(ellipse 44% 40% at 82% 26%, rgba(246,81,150,.16), transparent 68%),
    radial-gradient(ellipse 50% 44% at 10% 84%, rgba(246,81,150,.10), transparent 68%);
}
.scene-inner{position:relative;z-index:2;width:100%}

.scene-head{display:flex;align-items:baseline;gap:16px;flex-wrap:wrap;margin-bottom:30px}
.scene-head .kicker{color:var(--pink);margin:0}
.scene-head h2{font-size:clamp(26px,3.4vw,40px);color:#fff}
.scene-head h2 em{font-style:italic;font-weight:400;color:var(--pink)}
.scene-illus{
  font-family:"DM Sans",sans-serif;font-size:13px;font-weight:500;line-height:1.45;
  color:rgba(255,255,255,.78);border:1px solid rgba(255,255,255,.26);
  border-radius:10px;padding:9px 13px;margin:2px 0 0;max-width:260px;text-align:left;
}

.scene-grid{display:grid;grid-template-columns:minmax(0,1.25fr) minmax(0,.75fr);gap:44px;align-items:center}

/* ---------- the report ---------- */
.rep{list-style:none;margin:0;padding:0;border-top:1px solid rgba(255,255,255,.12)}
.rep-item{
  display:grid;grid-template-columns:1fr auto;align-items:center;gap:14px;
  padding:13px 2px;border-bottom:1px solid rgba(255,255,255,.12);
  transition:opacity .45s ease, filter .45s ease;
}
.rep-name{position:relative;display:inline-block;font-size:16px;font-weight:500;color:rgba(255,255,255,.9)}
.rep-name::after{                                   /* the strike, drawn left→right */
  content:"";position:absolute;left:0;top:52%;height:2px;width:100%;
  background:var(--pink);transform:scaleX(0);transform-origin:left;
  transition:transform .5s cubic-bezier(.22,1,.36,1);
}
.rep-bureau{font-family:"JetBrains Mono",ui-monospace,monospace;font-size:10.5px;
  letter-spacing:.12em;color:rgba(255,255,255,.42);display:block;margin-top:5px}
.rep-tag{
  font-family:"JetBrains Mono",ui-monospace,monospace;font-size:9.5px;font-weight:600;
  letter-spacing:.13em;text-transform:uppercase;padding:5px 11px;border-radius:100px;
  border:1px solid rgba(255,255,255,.22);color:rgba(255,255,255,.55);white-space:nowrap;
  transition:all .4s ease;
}
/* state: dispute filed */
.rep-item.is-open .rep-tag{border-color:rgba(246,81,150,.6);color:var(--pink)}
/* state: deleted */
.rep-item.is-gone{opacity:.32}
.rep-item.is-gone .rep-name::after{transform:scaleX(1)}
.rep-item.is-gone .rep-tag{background:var(--pink);border-color:var(--pink);color:#fff}

/* ---------- dial + neon ---------- */
.scene-side{display:flex;flex-direction:column;align-items:center;text-align:center;gap:18px}
.dial{position:relative;width:200px;max-width:100%}
.dial svg{width:100%;height:auto;display:block;overflow:visible}
.dial-track{fill:none;stroke:rgba(255,255,255,.14);stroke-width:9;stroke-linecap:round}
.dial-fill{fill:none;stroke:var(--pink);stroke-width:9;stroke-linecap:round;
  filter:drop-shadow(0 0 7px rgba(246,81,150,.6))}
.dial-num{
  position:absolute;left:0;right:0;top:46%;transform:translateY(-50%);
  font-family:"Playfair Display",Georgia,serif;font-weight:900;font-size:46px;line-height:1;color:#fff;
  font-variant-numeric:tabular-nums;
}
.dial-band{
  font-family:"JetBrains Mono",ui-monospace,monospace;font-size:10px;letter-spacing:.18em;
  text-transform:uppercase;color:var(--pink);margin-top:-6px;
}
.scene-count{font-family:"JetBrains Mono",ui-monospace,monospace;font-size:11px;
  letter-spacing:.12em;text-transform:uppercase;color:rgba(255,255,255,.55)}
.scene-count b{color:#fff;font-weight:600}

/* the neon sign: off until the file is clean */
.neon{margin-top:2px;opacity:.12;filter:grayscale(1) brightness(.5);transition:opacity .5s ease, filter .5s ease}
.neon img{width:132px;height:auto;margin:0 auto}
.neon figcaption{
  font-family:"JetBrains Mono",ui-monospace,monospace;font-size:9.5px;letter-spacing:.16em;
  text-transform:uppercase;color:rgba(255,255,255,.5);margin-top:8px;
}
.scene.is-lit .neon{opacity:1;filter:none;animation:ignite .7s steps(1,end) 1}
@keyframes ignite{
  0%{opacity:.15}  12%{opacity:1}  20%{opacity:.25}
  34%{opacity:1}   42%{opacity:.4} 58%{opacity:1}
  66%{opacity:.7}  100%{opacity:1}
}

/* ---------- progress rail ---------- */
.scene-prog{margin-top:30px;height:2px;background:rgba(255,255,255,.14);border-radius:2px;overflow:hidden}
.scene-prog span{display:block;height:100%;width:0;background:linear-gradient(90deg,var(--pink),#fff);border-radius:2px}

@media (max-width:900px){
  .scene-track{height:300vh}
  .scene-grid{grid-template-columns:1fr;gap:26px}
  .scene-side{flex-direction:row;justify-content:center;flex-wrap:wrap;gap:20px}
  .dial{width:148px}
  .dial-num{font-size:34px}
  .neon img{width:108px}
}
@media (max-width:640px){
  .scene-track{height:280vh}
  .scene-pin{height:auto;min-height:calc(100vh - var(--nav-h));padding:34px 0}
  .scene-head{margin-bottom:20px;gap:10px}
  .rep-item{padding:11px 2px;gap:10px}
  .rep-name{font-size:14.5px}
  .rep-tag{font-size:8.5px;padding:4px 8px;letter-spacing:.08em}
  .scene-side{gap:14px}
  .dial{width:126px}
  .dial-num{font-size:29px}
  .neon img{width:92px}
}

/* ---------- QA keyframe mode (?scene=0..1) ----------
   Headless Chrome ignores window.scrollTo, so instead of scrolling to the
   pinned scene we isolate and un-pin it. Deterministic capture, and it
   only ever activates when the query param is present. */
html[data-scene-qa] body > *:not(#clearing){display:none !important}
html[data-scene-qa] .scene-track{height:auto}
html[data-scene-qa] .scene-pin{position:static;height:auto;min-height:100vh}

/* respect reduced motion: show the finished state, no scroll theatre */
@media (prefers-reduced-motion:reduce){
  .rv.rv-armed{opacity:1;transform:none}
  .scene-track{height:auto}
  .scene-pin{position:static;height:auto;padding:64px 0}
  .rep-item,.rep-name::after,.rep-tag,.neon{transition:none}
  .scene .neon{opacity:1;filter:none;animation:none}
  .scene .rep-item{opacity:1}
}
