/* ════════════════════════════════════════════════════════════════════
   PrettyDo landing · Focus Theatre grammar (D-T55, frozen 03.11.2026)
   T-462 revision: the bands around the frozen T-460 hero demo were
   rebuilt — default English, the all-languages band with right-to-left
   rows, a new coach band, the static second mock cut. The demo's own
   styles stay untouched: everything under .demo-root keeps its
   byte-identical behaviour. Motion rides the house recipes
   (motion-reference): panel slide with cross-blur on scroll,
   --motion-stagger per row, --motion-tap (instant) on the CTA buttons.
   The design sheet's CSS is the ruler — copied from
   projects/tikrar/evidence/T-417-2026-11-03/design/landing.html, with:
   · the CSP-safe move (no inline <style>/attributes — the app CSP is
     style-src 'self'), · real routes (/app, /blog), · the manager's
     one named defect fixed: the nav's middle label wrapped to two
     lines at 390 — the label is «Sitzung» and links never wrap.
   ?state=a / ?state=b  → hero paused at two moments (capture variant)
   ?static              → all motion frozen at the completed state
                          (identical to prefers-reduced-motion)
   ════════════════════════════════════════════════════════════════════ */
:root{
  --canvas:#0A0C0B; --card:#131716; --raised:#1B211E; --line:#242B28;
  --ink:#F2F5F3; --muted:#8D9A94;
  --lime:#C9F45A;            /* ONE signal colour: the next action only */
  --mint:#5BE0B0; --amber:#FFB347; --coral:#FF6B57;   /* grade rails only */
  --sans:'DejaVu Sans',system-ui,sans-serif;
  --serif:'DejaVu Serif',Georgia,serif;
  --mono:'DejaVu Sans Mono',monospace;
  --ease:cubic-bezier(.2,.7,.2,1);
  --hero-dur:14s;
  /* house motion tokens (motion-reference) — the landing shell's own copy;
     the frozen demo declares its identical set under .demo-root */
  --motion-tap:0ms; --motion-open:250ms; --motion-close:150ms; --motion-swap:150ms;
  --motion-emphasis:400ms; --motion-stagger:40ms;
  --motion-ease-out:cubic-bezier(.22,1,.36,1); --motion-ease-in-out:ease-in-out;
  --motion-ease-bounce:cubic-bezier(.34,1.36,.64,1);
}
@font-face{
  font-family:'PrettyDo Arabic';
  src:url('/static/fonts/arabic-400.woff2') format('woff2');
  font-display:swap;
}
*{box-sizing:border-box}
html,body{margin:0;padding:0}
body{background:var(--canvas);color:var(--ink);
     font:16px/1.6 var(--sans);-webkit-font-smoothing:antialiased}
a{color:var(--ink);text-decoration:none}
a:hover{color:var(--lime)}
:focus-visible{outline:2px solid var(--lime);outline-offset:2px}
img,svg{display:block}
[hidden]{display:none !important}

/* ── shared primitives ─────────────────────────────────────────────── */
.wrap{max-width:1080px;margin:0 auto;padding:0 24px}
.eyebrow{font:600 12px/1 var(--mono);letter-spacing:.18em;text-transform:uppercase;
         color:var(--muted)}
.eyebrow b{color:var(--ink);font-weight:600}
.display{font-family:var(--serif);font-weight:400;line-height:1.12;
         font-size:clamp(34px,5.2vw,64px);margin:16px 0 0;letter-spacing:-.01em}
.display--sub{font-size:clamp(28px,3.6vw,44px)}
.lede{font-size:18px;color:var(--muted);max-width:44ch;margin:20px 0 0}
.capsule{display:inline-flex;align-items:center;gap:10px;background:var(--lime);
         color:#10130A;border-radius:999px;padding:14px 28px;
         font:700 16px/1 var(--sans)}
.capsule:hover{color:#10130A;filter:brightness(1.05)}
.capsule .k{font:600 12px/1 var(--mono);background:#10130A;color:var(--lime);
            border-radius:6px;padding:3px 6px}
.ring-note{font:12px/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}
.fiction{font:12px/1.5 var(--mono);letter-spacing:.08em;color:var(--muted)}
.fiction--block{display:block;margin-top:24px}
hr.rule{border:0;border-top:1px solid var(--line);margin:0}
section{padding:88px 0}
section + section{border-top:1px solid var(--line)}

/* ── header ────────────────────────────────────────────────────────── */
header{border-bottom:1px solid var(--line)}
.bar{display:flex;align-items:center;gap:16px;height:64px}
/* The frozen PrettyDo wordmark (D-T54 / T-415 final): styled text in the site's own
   stack — no font file, no image. These pages are dark-only, so the mark wears its
   frozen dark twin: cream glyphs, lime dot (the light twin is ink #1A1C1E + teal). */
.prettydo{font-family:system-ui,"Noto Naskh Arabic","Segoe UI",Tahoma,sans-serif;
          letter-spacing:-0.01em;line-height:1;white-space:nowrap;
          color:#F2EDE4;font-size:22px}
.prettydo .prettydo-light{font-weight:400}
.prettydo .prettydo-bold{font-weight:700}
.prettydo .prettydo-dot{font-weight:700;color:#C9F45A}
.bar nav{margin-left:auto;display:flex;align-items:center;gap:20px;font-size:15px}
.bar nav a{white-space:nowrap}            /* the named defect: no two-line nav label, ever */
.bar .capsule{padding:9px 18px;font-size:15px}
/* T-462: the nav carries four items now (Languages · Coach · Blog · Open the
   app) — at phone width the row cannot hold them beside the wordmark, so the
   whole nav drops beneath it. Links still never wrap mid-label (the T-417 rule). */
@media (max-width:480px){
  .bar{flex-wrap:wrap;height:auto;padding:14px 0;row-gap:10px}
  .bar nav{gap:12px;font-size:14px}
  .bar .capsule{padding:8px 14px}
}

/* ── hero ──────────────────────────────────────────────────────────── */
.hero{padding:96px 0 88px;border-top:0}
.hero-grid{display:grid;gap:56px;align-items:center}
@media (min-width:1024px){
  .hero-grid{grid-template-columns:minmax(0,1fr) minmax(0,1.05fr)}
  .hero{padding:120px 0 104px}
}
.hero-cta{display:flex;align-items:center;gap:24px;margin-top:36px;flex-wrap:wrap}
.hero-cta .quiet{font-size:15px;color:var(--muted)}
/* the demo's wrapper: the live demo session replaces the static fallback
   INSIDE it, the caption below survives the swap (T-460 engine contract) */
.review-wrap{min-width:0}
.demo-caption{margin:14px 0 0;font-size:14px;color:var(--muted)}
/* CTA buttons answer instantly (--motion-tap 0 ms) — no decorative motion */
.capsule,.quiet{transition:none}

/* the review card — the one moving element that IS the product */
.review{background:var(--card);border:1px solid var(--line);border-radius:20px;
        padding:28px}
.review .head{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap}
.review .q{font-family:var(--serif);font-size:clamp(22px,2.6vw,30px);line-height:1.3;
           margin:20px 0 0}
.pills{display:flex;gap:8px;margin-top:24px}
.pill{flex:1;border:1px solid var(--line);border-radius:999px;padding:10px 8px;
      display:flex;align-items:center;justify-content:center;gap:8px;
      font-size:14px;color:var(--muted);background:transparent}
.pill .n{font:600 12px/1 var(--mono)}
.pill.amber-on{border-color:var(--amber);color:var(--amber)}
.pill.mint-on{border-color:var(--mint);color:var(--mint)}
.pill.lime-on{border-color:var(--lime);color:var(--lime);background:rgba(201,244,90,.08)}
.answer{margin-top:22px;border-top:1px solid var(--line);padding-top:18px}
.answer .tri{font-size:15px;color:var(--ink)}
.answer .tri .ar{font-family:'PrettyDo Arabic',var(--sans);font-size:17px}
.answer .why{font-family:var(--serif);font-size:17px;line-height:1.5;color:var(--ink);
             margin:10px 0 0}
.due{display:flex;align-items:center;gap:12px;margin-top:20px}
.due .label{font-size:14px;color:var(--muted)}
.due .badge{font:600 13px/1 var(--mono);color:var(--lime)}
.review .fiction{margin-top:22px;display:block}

/* ── hero motion: one 14s loop, all parts share --hero-dur ─────────── */
.ha{animation:var(--hero-dur) var(--ease) infinite both}
@keyframes h-pills{0%,12%{opacity:0}16%,92%{opacity:1}96%,100%{opacity:0}}
@keyframes h-pill1{0%,17%{border-color:var(--line);color:var(--muted);background:transparent}
                   18%,29%{border-color:var(--amber);color:var(--amber)}
                   30%,100%{border-color:var(--line);color:var(--muted);background:transparent}}
@keyframes h-pill2{0%,28%{border-color:var(--line);color:var(--muted);background:transparent}
                   29%,39%{border-color:var(--mint);color:var(--mint)}
                   40%,100%{border-color:var(--line);color:var(--muted);background:transparent}}
@keyframes h-pill3{0%,38%{border-color:var(--line);color:var(--muted);background:transparent}
                   39%,100%{border-color:var(--lime);color:var(--lime);background:rgba(201,244,90,.08)}}
@keyframes h-answer{0%,39%{opacity:0;filter:blur(7px)}
                    40%,47%{opacity:1;filter:blur(0)}
                    92%,100%{opacity:0;filter:blur(7px)}}
@keyframes h-ring{0%,47%{stroke-dashoffset:163.4}62%,92%{stroke-dashoffset:0}100%{stroke-dashoffset:0}}
@keyframes h-ringfade{0%,46%{opacity:0}52%,92%{opacity:1}96%,100%{opacity:0}}

.h-pills{animation-name:h-pills}
.h-pill1{animation-name:h-pill1}
.h-pill2{animation-name:h-pill2}
.h-pill3{animation-name:h-pill3}
.h-answer{animation-name:h-answer}
.h-ringpath{animation-name:h-ring;animation-timing-function:linear}
.h-ringwrap{animation-name:h-ringfade}
/* ?state=a / ?state=b pin the loop at its two documented moments with plain
   CSS (the exact values the keyframes hold at t=3.5s / t=9.7s). WAAPI
   freeze-frames are unreliable under headless virtual time — do not
   reintroduce animation-delay negatives or JS pinning here. */

/* ?state=a: t=3.5s — pills up, «Nicht sicher» amber, no answer, no ring */
html[data-moment="a"] .ha{animation:none}
html[data-moment="a"] .h-pills{opacity:1}
html[data-moment="a"] .h-pill1{border-color:var(--amber);color:var(--amber)}
html[data-moment="a"] .h-pill2,html[data-moment="a"] .h-pill3{
  border-color:var(--line);color:var(--muted);background:transparent}
html[data-moment="a"] .h-answer{opacity:0;filter:blur(7px)}
html[data-moment="a"] .h-ringwrap{opacity:0}
html[data-moment="a"] .h-ringpath{stroke-dashoffset:163.4}
/* ?state=b: t=9.7s — «Sicher» lime, answer open, ring closed */
html[data-moment="b"] .ha{animation:none}
html[data-moment="b"] .h-pills{opacity:1}
html[data-moment="b"] .h-pill1,html[data-moment="b"] .h-pill2{
  border-color:var(--line);color:var(--muted);background:transparent}
html[data-moment="b"] .h-pill3{border-color:var(--lime);color:var(--lime);
                               background:rgba(201,244,90,.08)}
html[data-moment="b"] .h-answer{opacity:1;filter:blur(0)}
html[data-moment="b"] .h-ringwrap{opacity:1}
html[data-moment="b"] .h-ringpath{stroke-dashoffset:0}

/* ?static and prefers-reduced-motion: the completed card, nothing lost */
html[data-static] .ha{animation:none}
html[data-static] .h-pills{opacity:1}
html[data-static] .h-pill1,
html[data-static] .h-pill2{border-color:var(--line);color:var(--muted);background:transparent}
html[data-static] .h-pill3{border-color:var(--lime);color:var(--lime);
                           background:rgba(201,244,90,.08)}
html[data-static] .h-answer{opacity:1;filter:blur(0)}
html[data-static] .h-ringpath{stroke-dashoffset:0}
html[data-static] .h-ringwrap{opacity:1}
@media (prefers-reduced-motion: reduce){
  .ha{animation:none}
  .h-pills{opacity:1}
  .h-pill1,.h-pill2{border-color:var(--line);color:var(--muted);background:transparent}
  .h-pill3{border-color:var(--lime);color:var(--lime);background:rgba(201,244,90,.08)}
  .h-answer{opacity:1;filter:blur(0)}
  .h-ringpath{stroke-dashoffset:0}
  .h-ringwrap{opacity:1}
}

/* (T-462: the static second mock section and its scroll timeline are cut —
   the hero's live demo shows the session; no static twin is invented.) */

/* ── languages ─────────────────────────────────────────────────────── */
.langs{margin-top:40px;border-top:1px solid var(--line)}
.lang-row{display:grid;grid-template-columns:56px minmax(0,1fr);gap:16px;
          align-items:baseline;padding:20px 0;border-bottom:1px solid var(--line)}
.lang-row .tag{font:600 13px/1 var(--mono);letter-spacing:.14em;color:var(--muted)}
.lang-row .line{font-size:18px;line-height:1.6}
/* the RTL rows carry dir="rtl" on the row itself: tag and line both read
   right-to-left, while the page around them stays English-LTR (T-462) */
.lang-row[dir="rtl"] .line{font-family:'PrettyDo Arabic',var(--sans);font-size:20px;text-align:right}
.lang-row .mix .ar{font-family:'PrettyDo Arabic',var(--sans);font-size:19px}

/* ── the coach band (T-462) ────────────────────────────────────────── */
.coach-lines{margin-top:36px;border-top:1px solid var(--line)}
.coach-line{padding:18px 0;border-bottom:1px solid var(--line);
            font-size:16px;line-height:1.6;color:var(--muted)}
.coach-card{margin-top:28px;max-width:720px;background:var(--card);
            border:1px solid var(--line);border-radius:16px;padding:22px 24px}
.coach-card__line{margin:0;font-size:15px;line-height:1.6;color:var(--ink)}

/* ── why-lines: the reasoning under each band, quiet and serif (T-462) ── */
.why{font-family:var(--serif);font-style:italic;font-size:15px;line-height:1.6;
     color:var(--muted);margin:22px 0 0;max-width:52ch}
.cta-strip .why{margin-inline:auto}

/* ── blog ──────────────────────────────────────────────────────────── */
.blog-grid{display:grid;gap:16px;margin-top:40px}
@media (min-width:768px){.blog-grid{grid-template-columns:repeat(3,1fr)}}
.post{display:flex;flex-direction:column;gap:10px;background:var(--card);
      border:1px solid var(--line);border-radius:16px;padding:24px}
.post .meta{font:12px/1.5 var(--mono);letter-spacing:.1em;color:var(--muted)}
.post h3{font-family:var(--serif);font-weight:400;font-size:20px;line-height:1.35;
         margin:0}
.post p{font-size:15px;color:var(--muted);margin:0}
.post .read{margin-top:auto;padding-top:12px;font-size:14px;color:var(--muted)}
.post .read b{color:var(--lime);font-weight:400}
.post:hover{border-color:#31392F}
.post:hover .read{color:var(--ink)}

/* ── CTA strip + footer ────────────────────────────────────────────── */
.cta-strip{padding:96px 0;text-align:center}
.cta-strip .capsule{font-size:17px;padding:16px 36px}
.cta-strip__action{margin-top:32px}
footer{border-top:1px solid var(--line);padding:40px 0 56px}
.foot{display:flex;gap:24px;flex-wrap:wrap;align-items:baseline}
.foot .links{margin-left:auto;display:flex;gap:20px;font-size:15px}
.foot-line{font:12px/1.5 var(--mono);letter-spacing:.08em;color:var(--muted)}

/* ── T-460: the live demo session (the hero's right column) ─────────
   The app's own review card, scoped: the bevel skin's tokens and the real
   furniture (.qcard, .choice, .tf, .blank, .reveal, .merged, .survey,
   .outcome, .askcoach, .coachview) ride only inside .demo-root, so nothing
   leaks into the rest of the landing. UI words are English (the landing is
   switching to default-English). Motion rides the house tokens (--motion-*,
   motion-reference recipes: slide-in enter, blur-crossfade reveal, modal
   survey, one-bounce glyph pop) and honours prefers-reduced-motion; the
   ?static short-circuit yields the first card fully visible. The coach
   room's typing space is blurred under a «Limited access» overlay —
   disabled, not focusable, never typeable. */
.demo-root{
  --mist:#0A0C0B; --card:#131716; --raised:#1B211E; --line:#242B28;
  --ink:#F2F5F3; --muted:#8D9A94;
  --teal:#C9F45A; --teal-dark:#5BE0B0;
  --amber:#FFB347; --coral:#FF6B57;
  --radius:18px; --radius-sm:14px; --tap:44px;
  --shadow:0 1px 2px rgba(0,0,0,.5); --shadow-lg:0 12px 32px rgba(0,0,0,.35);
  --motion-tap:0ms; --motion-open:250ms; --motion-close:150ms; --motion-swap:150ms;
  --motion-emphasis:400ms; --motion-stagger:40ms;
  --motion-ease-out:cubic-bezier(.22,1,.36,1); --motion-ease-in-out:ease-in-out;
  --motion-ease-bounce:cubic-bezier(.34,1.56,.64,1);
  font:15px/1.6 'DejaVu Sans',system-ui,sans-serif; color:var(--ink);
}
/* ── the session head: counter far left, exit far right ── */
.demo-root .review-head{display:flex;align-items:center;justify-content:space-between;gap:10px}
.demo-root .review-head__count{font-size:12px;color:var(--muted)}
.demo-root .review-head__exit{min-height:38px;padding:0 14px;border:0;border-radius:999px;
  background:transparent;color:var(--muted);font:inherit;font-size:12px;cursor:pointer}
.demo-root .review-head__exit:hover{color:var(--ink);background:var(--raised)}
/* the progress hairline with its lime fill */
.demo-root .progress{height:2px;border-radius:1px;background:var(--line);overflow:hidden;margin:10px 0 16px}
.demo-root .progress__bar{height:100%;background:var(--teal);width:0;
  transition:width var(--motion-open) var(--motion-ease-out)}
/* ── the card — the app's own .qcard furniture ── */
.demo-root .qcard{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);
  box-shadow:var(--shadow);padding:22px}
.demo-root .qcard--enter{animation:demo-qcard-in var(--motion-open) var(--motion-ease-out) both}
@keyframes demo-qcard-in{from{opacity:0;transform:translateY(8px);filter:blur(4px)}
  to{opacity:1;transform:none;filter:blur(0)}}
.demo-root .qcard__prompt{font-size:1.18rem;line-height:1.75;white-space:pre-wrap;word-wrap:break-word}
/* ── MCQ choices — the app's own .choice furniture ── */
.demo-root .qcard__choices{list-style:none;margin:14px 0 0;padding:0;display:grid;gap:8px}
.demo-root .qcard__choices li{padding:0;border:0;background:transparent}
.demo-root .choice{display:block;width:100%;text-align:start;font:inherit;color:var(--ink);
  padding:10px 12px;border:2px solid var(--line);border-radius:var(--radius-sm);
  background:var(--raised);cursor:pointer;min-height:44px}
.demo-root .choice:hover{border-color:var(--teal)}
.demo-root .choice[disabled]{cursor:default}
.demo-root .choice--correct{border-color:var(--teal);background:rgba(201,244,90,.14);color:var(--ink)}
.demo-root .choice--wrong{border-color:var(--coral);background:rgba(255,107,87,.14);color:var(--ink)}
/* ── True/False — the app's own .tf row ── */
.demo-root .tf{display:grid;grid-template-columns:1fr 1fr;gap:9px;margin-top:14px}
.demo-root .tf__btn{min-height:44px;padding:10px;border:2px solid var(--line);border-radius:var(--radius-sm);
  background:var(--raised);color:var(--ink);font:inherit;cursor:pointer}
.demo-root .tf__btn[disabled]{cursor:default}
.demo-root .tf__btn--correct{border-color:var(--teal);background:rgba(201,244,90,.14)}
.demo-root .tf__btn--wrong{border-color:var(--coral);background:rgba(255,107,87,.14)}
.demo-root .tf__verdict{margin:10px 0 0;font-size:.85rem;color:var(--muted)}
/* ── cloze blank — the app's own .blank chip ── */
.demo-root .blank{display:inline-block;vertical-align:baseline;min-width:64px;padding:2px 12px;
  border:1px dashed var(--teal-dark);border-radius:8px;background:rgba(201,244,90,.10);
  color:var(--ink);font:inherit;font-size:.95rem;cursor:pointer}
.demo-root .blank:hover{background:rgba(201,244,90,.22)}
.demo-root .blank__mask{letter-spacing:.12em;color:var(--muted)}
.demo-root .blank.is-revealed{border-style:solid;background:rgba(201,244,90,.14);color:var(--ink);cursor:default}
/* ── the reveal block — blur-crossfade recipe (motion-reference) ── */
.demo-root .reveal{margin-top:14px}
.demo-root .reveal__btn{position:relative;display:block;width:100%;text-align:start;font:inherit;color:var(--ink);
  padding:14px;border:1px solid rgba(201,244,90,.35);border-radius:var(--radius-sm);
  background:rgba(201,244,90,.06);cursor:pointer;min-height:44px}
.demo-root .reveal__btn:hover{border-color:var(--teal)}
.demo-root .reveal__label{display:block;font-size:.8rem;font-weight:700;color:var(--teal-dark);letter-spacing:.5px;margin-bottom:6px}
.demo-root .reveal__content{filter:blur(6px);user-select:none;
  transition:filter var(--motion-open) var(--motion-ease-out)}
.demo-root .reveal.is-revealed .reveal__content{filter:blur(0);user-select:auto}
.demo-root .reveal__hint{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;
  font-size:.82rem;color:var(--muted);pointer-events:none}
.demo-root .reveal.is-revealed .reveal__hint{display:none}
/* ── the merged answer card — answer, then the labelled explanation ── */
.demo-root .merged{margin-top:14px;display:grid;gap:12px}
.demo-root .merged__label{font-size:.8rem;font-weight:700;color:var(--teal-dark);letter-spacing:.5px;margin-bottom:4px}
.demo-root .merged__answer{font-weight:600;white-space:pre-wrap;word-wrap:break-word}
.demo-root .merged__body{white-space:pre-wrap;word-wrap:break-word}
/* the coach pill takes the Hide control's place once the answer is open */
.demo-root .coach-row{margin-top:10px}
.demo-root .askcoach{display:inline-flex;align-items:center;gap:8px;min-height:44px;
  border-radius:999px;font:inherit;font-size:.82rem;font-weight:600;cursor:pointer;
  padding:0 16px;border:1px solid rgba(201,244,90,.35);color:var(--teal);background:rgba(201,244,90,.10)}
.demo-root .askcoach svg{width:18px;height:18px;flex:none}
/* ── the session footer — one button row, one outcome question ── */
.demo-root .session-footer{margin-top:16px}
.demo-root .verdict-row{margin:8px 0 0}
.demo-root .btn{display:block;width:100%;min-height:44px;padding:10px 16px;font:inherit;font-weight:600;
  color:var(--ink);background:var(--raised);border:1px solid var(--line);border-radius:var(--radius-sm);cursor:pointer}
.demo-root .btn--primary{background:var(--teal);border-color:var(--teal);color:#0A0C0B}
.demo-root .btn--primary:hover{filter:brightness(1.06)}
/* the outcome row: ✗ No · ½ Close · ✓ Yes — glyph over word, red-amber-teal ramp */
.demo-root .outcome{margin:8px 0 0}
.demo-root .outcome__ask{margin:0 0 8px;text-align:center;font-size:.95rem;color:var(--muted)}
.demo-root .outcome__row{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:9px}
.demo-root .outcome__btn{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;
  min-height:52px;padding:10px;border:1px solid var(--line);border-radius:var(--radius-sm);
  background:var(--card);color:var(--ink);font:inherit;cursor:pointer;
  animation:demo-pop var(--motion-emphasis) var(--motion-ease-bounce) both}
.demo-root .outcome__btn:hover{background:var(--raised)}
.demo-root .outcome__btn--no{border-inline-start:4px solid var(--coral)}
.demo-root .outcome__btn--close{border-inline-start:4px solid var(--amber)}
.demo-root .outcome__btn--yes{border-inline-start:4px solid var(--teal)}
.demo-root .outcome__glyph{font-size:1.15rem;font-weight:700;line-height:1}
.demo-root .outcome__word{font-size:.78rem;color:var(--muted)}
@keyframes demo-pop{from{transform:scale(.94);opacity:0}to{transform:scale(1);opacity:1}}
/* ── the certainty survey — a modal on a frosted backdrop (T-276) ── */
.demo-root .survey{position:fixed;inset:0;z-index:60;display:grid;place-items:center;padding:15px;
  background:rgba(10,12,11,.34);
  animation:demo-fade-in var(--motion-open) var(--motion-ease-out) both}
.demo-root .survey__card{width:min(380px,100%);background:var(--card);border:1px solid var(--line);
  border-radius:18px;box-shadow:var(--shadow-lg);padding:18px;text-align:center;
  animation:demo-modal-in var(--motion-open) var(--motion-ease-out) both}
@keyframes demo-fade-in{from{opacity:0}to{opacity:1}}
@keyframes demo-modal-in{from{opacity:0;transform:scale(.97) translateY(6px)}to{opacity:1;transform:none}}
.demo-root .survey__ask{margin:0 0 12px;font-weight:700;font-size:1.02rem;color:var(--ink)}
.demo-root .survey__row{display:grid;grid-template-columns:repeat(3,1fr);padding:5px;
  background:#101413;border-radius:999px;gap:0}
.demo-root .survey__btn{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;
  min-height:52px;padding:8px 4px;border:0;border-radius:999px;background:transparent;
  color:var(--muted);font:inherit;font-size:.78rem;letter-spacing:.05em;text-transform:uppercase;cursor:pointer;
  transition:background var(--motion-close) var(--motion-ease-in-out),color var(--motion-close) var(--motion-ease-in-out)}
.demo-root .survey__btn:hover{background:rgba(255,255,255,.05);color:#C9D2CE}
.demo-root .survey__btn[aria-checked="true"]{background:var(--teal);color:#0A1410}
.demo-root .survey__glyph{font-size:17px;line-height:1}
.demo-root .survey__label{font-size:.72rem;font-weight:800}
/* ── the coach room — the app's own .coachview furniture ── */
.demo-root .coachview{display:flex;flex-direction:column;min-height:320px}
.demo-root .coachview__bar{display:flex;align-items:center;gap:10px;margin-bottom:8px;min-height:44px}
.demo-root .coachview__back{display:inline-flex;align-items:center;gap:6px;min-height:38px;padding:0 14px;
  border:1px solid var(--line);border-radius:999px;background:transparent;color:var(--muted);
  font:inherit;font-size:.82rem;cursor:pointer}
.demo-root .coachview__back:hover{color:var(--ink);background:var(--raised)}
.demo-root .coachview__back svg{width:16px;height:16px}
.demo-root .coach__title{margin:0;font-family:Georgia,serif;font-size:1.05rem;line-height:1.4;color:var(--ink)}
.demo-root .coachthread{display:flex;flex-direction:column;gap:10px;margin:8px 0 0}
.demo-root .bubble{max-width:92%;padding:10px 14px;border-radius:10px;font-size:.9rem;line-height:1.55}
.demo-root .bubble--you{align-self:flex-end;border:1px solid var(--line);background:transparent;color:var(--muted)}
.demo-root .bubble--coach{align-self:flex-start;background:var(--raised);border:1px solid var(--line);color:var(--ink)}
.demo-root .coach__src{margin:4px 0 0;font-size:.75rem;color:var(--muted)}
/* the composer — blurred under «Limited access», nothing typeable */
.demo-root .composer-wrap{position:relative;margin-top:14px;border-radius:999px}
.demo-root .coachfollow{display:flex;gap:8px;filter:blur(5px);pointer-events:none;user-select:none}
.demo-root .coachfollow .input{flex:1;min-height:44px;padding:0 16px;border:1px solid var(--line);
  border-radius:999px;background:var(--mist);color:var(--ink);font:inherit;font-size:.95rem}
.demo-root .coachfollow .coachsend{width:44px;height:44px;border-radius:50%;border:none;flex:none;
  background:var(--teal);color:#0A0C0B;display:grid;place-items:center;cursor:pointer}
.demo-root .coachfollow .coachsend svg{width:20px;height:20px}
.demo-root .demo-coach__lock{position:absolute;inset:0;display:grid;place-items:center;
  border-radius:999px;background:rgba(10,12,11,.35);pointer-events:none;
  font:700 11px/1 'DejaVu Sans Mono',monospace;letter-spacing:.14em;text-transform:uppercase;color:var(--ink)}
/* the coach's answer text under the room */
.demo-root .coachview__pause{margin-top:14px;display:flex;align-items:center;gap:8px;
  padding:10px 14px;border:1px solid var(--line);border-radius:var(--radius-sm);
  color:var(--muted);font-size:.82rem}
/* the end card's ring — the app's own .due furniture */
.demo-root .demo-end__due{display:flex;align-items:center;gap:12px;margin-top:8px}
.demo-root .demo-end__due svg{flex:none}
.demo-root .demo-end__due .badge{font-weight:600;font-size:13px;color:var(--teal)}
.demo-root .demo-end__due .label{font-size:14px;color:var(--muted);margin-top:4px}
.demo-root .demo-openapp{display:inline-block;margin-top:8px;font-size:14px;color:var(--teal-dark)}
/* Arabic cards wear the same Arabic face the languages row carries */
.demo-root .is-ar .qcard__prompt,.demo-root .is-ar .merged__answer,.demo-root .is-ar .merged__body,
.demo-root .is-ar .coach__title,.demo-root .is-ar .bubble--coach{
  font-family:'PrettyDo Arabic',Georgia,serif;line-height:1.8}
/* ── reduced motion / ?static: states appear instantly, nothing slides ── */
@media (prefers-reduced-motion: reduce){
  .demo-root *,.demo-root *::before,.demo-root *::after{
    animation-duration:1ms !important; animation-iteration-count:1 !important;
    transition-duration:1ms !important}
}
html[data-static] .demo-root *,html[data-static] .demo-root *::before,html[data-static] .demo-root *::after{
  animation:none !important; transition:none !important}
html[data-static] .demo-root .reveal__content{filter:blur(0);user-select:auto}
html[data-static] .demo-root .reveal__hint{display:none}
@media (max-width:480px){
  .demo-root .qcard{padding:16px}
  .demo-root .qcard__prompt{font-size:1.05rem}
  .demo-root .outcome__row{gap:6px}
}

/* ── scroll reveals: panel slide with cross-blur (motion-reference, T-462) ──
   Section bands slide in from their inline-start side while de-blurring,
   in --motion-emphasis; the languages and coach rows follow staggered,
   --motion-stagger (40 ms) apart. Directional motion never touches the
   wordmark, digits or the demo (the demo's own motion is frozen). */
.reveal{opacity:0;transform:translateX(var(--slide-from,-20px));filter:blur(5px);
        transition:opacity var(--motion-emphasis) var(--motion-ease-out),
                   transform var(--motion-emphasis) var(--motion-ease-out),
                   filter var(--motion-emphasis) var(--motion-ease-out)}
.reveal.in{opacity:1;transform:none;filter:blur(0)}
/* the staggered rows inside a band */
.reveal .lang-row,.reveal .coach-line{--slide-from:-14px;
  opacity:0;transform:translateX(var(--slide-from));filter:blur(3px);
  transition:opacity var(--motion-emphasis) var(--motion-ease-out) var(--stagger,0ms),
             transform var(--motion-emphasis) var(--motion-ease-out) var(--stagger,0ms),
             filter var(--motion-emphasis) var(--motion-ease-out) var(--stagger,0ms)}
.reveal.in .lang-row,.reveal.in .coach-line{opacity:1;transform:none;filter:blur(0)}
.reveal .lang-row:nth-child(1),.reveal .coach-line:nth-child(1){--stagger:calc(var(--motion-stagger)*0)}
.reveal .lang-row:nth-child(2),.reveal .coach-line:nth-child(2){--stagger:calc(var(--motion-stagger)*1)}
.reveal .lang-row:nth-child(3),.reveal .coach-line:nth-child(3){--stagger:calc(var(--motion-stagger)*2)}
.reveal .lang-row:nth-child(4),.reveal .coach-line:nth-child(4){--stagger:calc(var(--motion-stagger)*3)}
.reveal .lang-row:nth-child(5),.reveal .coach-line:nth-child(5){--stagger:calc(var(--motion-stagger)*4)}
/* RTL rows flip only the enter direction: inline-start is the right edge there */
.lang-row[dir="rtl"]{--slide-from:14px}
html[data-static] .reveal,.reveal.no-io{opacity:1;transform:none;filter:blur(0)}
html[data-static] .reveal .lang-row,html[data-static] .reveal .coach-line{
  opacity:1;transform:none;filter:blur(0);transition:none}
@media (prefers-reduced-motion: reduce){
  .reveal{opacity:1;transform:none;filter:blur(0);transition:none}
  .reveal .lang-row,.reveal .coach-line{opacity:1;transform:none;filter:blur(0);transition:none}
}