:root{
  --ink:#0c0a08; --txt:#F4F1EC; --mut:#d6c19a; --gold:#ffd98a; --gold2:#ffb14a;
  --warm:#c0391a;
}
*{box-sizing:border-box}
html,body{margin:0;height:100%}
body{
  background:var(--ink); color:var(--txt);
  font-family:-apple-system,"SF Pro Display",Inter,system-ui,sans-serif;
  -webkit-font-smoothing:antialiased; overflow:hidden;
}
.em{font-family:Georgia,"Times New Roman",serif;font-style:italic}

/* ---- backgrounds: static image for inputs, video flashes in on load ---- */
/* static image, but kept alive with zero-payload CSS motion (no video on inputs) */
.bg-static{position:fixed;inset:0;background:url('/scan/orange-bg.jpg') center/cover no-repeat,#d2521a;z-index:0;
  transition:opacity .5s ease;transform-origin:52% 46%;
  animation:bgbreathe 16s ease-in-out infinite, bgglow 7s ease-in-out infinite}
@keyframes bgbreathe{0%,100%{transform:scale(1.06) rotate(0deg)}50%{transform:scale(1.13) rotate(2.2deg)}}
@keyframes bgglow{0%,100%{filter:brightness(1) saturate(1)}50%{filter:brightness(1.09) saturate(1.08)}}
/* faint sweeping light — the carnival shimmer */
.bg-static:after{content:"";position:absolute;inset:-30%;
  background:conic-gradient(from 0deg,transparent 0deg,rgba(255,240,200,.10) 40deg,transparent 90deg,transparent 360deg);
  mix-blend-mode:screen;animation:bgsweep 24s linear infinite}
@keyframes bgsweep{to{transform:rotate(360deg)}}
@media (prefers-reduced-motion:reduce){.bg-static{animation:none}.bg-static:after{animation:none}.cta.gold{animation:none}.genie,.stage-act #genie-hero{animation:none}}
.bg-video{position:fixed;inset:0;width:100%;height:100%;object-fit:cover;opacity:0;transition:opacity .6s ease;z-index:0}
body.loading .bg-video{opacity:1}
.scrim{position:fixed;inset:0;z-index:1;background:linear-gradient(180deg,rgba(0,0,0,.04),rgba(60,20,0,.5));transition:background .5s ease}
/* vignette — darkens the frame edges for depth (under content) */
.vignette{position:fixed;inset:0;z-index:1;pointer-events:none;
  background:radial-gradient(ellipse 78% 68% at 50% 42%,transparent 56%,rgba(18,5,0,.55) 100%)}
body.calm .vignette{background:radial-gradient(ellipse 80% 70% at 50% 40%,transparent 52%,rgba(0,0,0,.6) 100%)}
body.calm .bg-static{opacity:0}
body.calm .scrim{background:radial-gradient(130% 80% at 50% -5%,#2a1d12,#0d0a07)}

#app{position:relative;z-index:2;height:100%;display:flex;flex-direction:column}

/* ---- screens ---- */
.screen{display:none;flex:1;flex-direction:column;align-items:center;
  padding:max(34px,env(safe-area-inset-top)) 22px max(20px,env(safe-area-inset-bottom))}
.screen.is-active{display:flex}
.load-center{justify-content:center}
#hero{justify-content:center;gap:clamp(2px,1vh,10px)}
#hero .thumb{margin-top:clamp(14px,3vh,28px)}
/* quiz: balanced + centered + iOS-roomy — fills the screen, no dead top void.
   Instagram/Meta in-app browser shrinks the webview and floats a bottom toolbar
   over it — so tall (5-option) questions must SCROLL, never clip, and keep a
   floor of bottom room the bar can't cover. `safe center` = centered when it
   fits, top-aligned (no off-screen clip) when it overflows. */
.quiz-bottom{justify-content:safe center;gap:clamp(10px,1.8vh,16px);
  overflow-y:auto;padding-bottom:max(20px,calc(env(safe-area-inset-bottom) + 60px))}
.quiz-bottom>*{flex-shrink:0}  /* options keep full height; the screen scrolls instead */
.qprompt{font-size:clamp(21px,6.2vw,27px);font-weight:800;line-height:1.14;text-align:center;letter-spacing:-.015em;
  margin:0;text-shadow:0 2px 12px rgba(60,15,0,.55)}

/* ---- genie + aura + motion ---- */
.gwrap{position:relative;display:flex;justify-content:center;align-items:center}
.gwrap.top{margin-top:4px}
.gwrap:before{content:"";position:absolute;left:50%;top:52%;transform:translate(-50%,-50%);
  width:250px;height:250px;border-radius:50%;
  background:radial-gradient(circle,rgba(255,240,205,.55),rgba(255,176,80,.26) 46%,transparent 70%);
  filter:blur(10px);animation:aura 5s ease-in-out infinite;z-index:0}
body.calm .gwrap:before{background:radial-gradient(circle,rgba(255,221,138,.45),rgba(139,123,255,.18) 48%,transparent 72%)}
/* hero "stage act": marquee header + genie stepping out in front, sparkle aura */
.stage-act{position:relative;width:min(82vw,310px);margin:0 auto clamp(50px,14vw,88px)}
.stage-act .banner{display:block;width:100%;z-index:1;pointer-events:none;filter:drop-shadow(0 12px 30px rgba(0,0,0,.5))}
.stage-act:before{content:"";position:absolute;left:50%;bottom:-12%;transform:translateX(-50%);width:80%;height:72%;
  border-radius:50%;background:radial-gradient(circle,rgba(255,240,205,.5),rgba(255,176,80,.22) 50%,transparent 72%);
  filter:blur(12px);z-index:0;animation:aura 5s ease-in-out infinite}
.stage-act #genie-hero{position:absolute;left:50%;bottom:-30%;width:62%;min-width:188px;
  z-index:2;cursor:pointer;filter:drop-shadow(0 16px 28px rgba(0,0,0,.45));animation:floatyC 5s ease-in-out infinite}
/* centered float — keeps translateX(-50%) so the absolute genie stays centered */
@keyframes floatyC{0%,100%{transform:translateX(-50%) translateY(0) rotate(-1.2deg) scale(1)}50%{transform:translateX(-50%) translateY(-11px) rotate(1.2deg) scale(1.02)}}
.genie{position:relative;z-index:2;cursor:pointer;filter:drop-shadow(0 14px 26px rgba(0,0,0,.42));animation:floaty 5s ease-in-out infinite}
/* tap-to-react */
.genie.tapped{animation:tappop .5s ease}
@keyframes tappop{0%{transform:scale(1)}28%{transform:scale(1.13) rotate(-5deg)}60%{transform:scale(1.04) rotate(5deg)}100%{transform:scale(1)}}
.stage-act #genie-hero.tapped{animation:tappopC .5s ease}
@keyframes tappopC{0%{transform:translateX(-50%) scale(1)}28%{transform:translateX(-50%) scale(1.13) rotate(-5deg)}60%{transform:translateX(-50%) scale(1.04) rotate(5deg)}100%{transform:translateX(-50%) scale(1)}}
.tapquip{position:absolute;left:50%;top:-4px;transform:translateX(-50%);background:#fff;color:#2a1a0c;font-weight:700;
  font-size:12.5px;padding:5px 11px;border-radius:13px;box-shadow:0 6px 16px rgba(0,0,0,.3);white-space:nowrap;
  z-index:6;pointer-events:none;animation:quipUp 1s ease forwards}
@keyframes quipUp{0%{opacity:0;transform:translate(-50%,6px) scale(.9)}20%{opacity:1;transform:translate(-50%,-2px) scale(1)}80%{opacity:1}100%{opacity:0;transform:translate(-50%,-16px)}}
/* responsive genie sizing (overrides inline width attrs) — bigger, scales with viewport */
#genie-hero{width:clamp(176px,48vw,220px)}
#genie-quiz{width:clamp(112px,30vw,150px)}
#genie-captcha{width:clamp(108px,30vw,132px)}
#genie-load{width:clamp(192px,54vw,236px)}
@keyframes floaty{0%,100%{transform:translateY(0) rotate(-1.2deg) scale(1)}50%{transform:translateY(-11px) rotate(1.2deg) scale(1.02)}}
@keyframes aura{0%,100%{opacity:.6;transform:translate(-50%,-50%) scale(1)}50%{opacity:1;transform:translate(-50%,-50%) scale(1.1)}}
.tw{position:absolute;z-index:3;color:#fff6dd;font-size:15px;animation:tw 3s ease-in-out infinite;text-shadow:0 0 8px rgba(255,230,160,.9)}
.tw.a{top:-4%;left:6%;animation-delay:.2s}.tw.b{top:8%;right:4%;font-size:12px;animation-delay:1.1s}.tw.c{top:42%;left:-2%;font-size:13px;animation-delay:2s}
.tw.d{top:-7%;right:22%;font-size:13px;animation-delay:.7s}.tw.e{top:28%;right:-3%;font-size:11px;animation-delay:1.6s}
.tw.f{top:62%;left:12%;font-size:10px;animation-delay:2.4s}.tw.g{top:56%;right:8%;font-size:12px;animation-delay:.4s}
@keyframes tw{0%,100%{opacity:0;transform:scale(.5)}50%{opacity:1;transform:scale(1)}}

/* ---- shared text ---- */
.say{background:rgba(255,255,255,.97);color:#2a1a0c;border-radius:18px;padding:12px 16px;font-size:14px;
  line-height:1.42;margin-top:10px;max-width:min(86vw,272px);text-align:center;font-weight:600;box-shadow:0 10px 24px rgba(0,0,0,.3)}
.say .em{color:var(--warm)}
.kicker{font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:#fff;background:rgba(0,0,0,.32);
  padding:5px 12px;border-radius:20px;margin:16px 0 11px}
h1{font-size:31px;line-height:1.04;letter-spacing:-.02em;font-weight:800;text-align:center;margin:0;
  text-shadow:0 2px 14px rgba(60,15,0,.6)}
h1 .em{color:var(--gold)}
.sub{font-size:13px;text-align:center;opacity:.95;line-height:1.5;text-shadow:0 1px 8px rgba(0,0,0,.55);margin:11px 0 0}
.spring{flex:1;min-height:12px}

/* ---- inputs / CTA (thumb zone) ---- */
.thumb{width:100%;display:flex;flex-direction:column;gap:12px}
.inp{width:100%;background:rgba(255,255,255,.97);border:none;border-radius:14px;padding:15px;font-size:16px;
  text-align:center;color:#2a1a0c}
.inp::placeholder{color:#9a8a76}
.cta{width:100%;background:#1a1410;color:var(--gold);border:none;font-weight:800;font-size:15px;padding:17px;
  border-radius:14px;box-shadow:0 12px 26px rgba(0,0,0,.45);cursor:pointer}
.cta.gold{background:linear-gradient(135deg,#ffe08a,#ffac3d);color:#3a1f08;font-size:16px;padding:18px;
  box-shadow:0 14px 32px rgba(255,160,60,.45);animation:ctaPulse 2.4s ease-in-out infinite}
@keyframes ctaPulse{0%,100%{transform:scale(1);box-shadow:0 12px 26px rgba(0,0,0,.32)}50%{transform:scale(1.03);box-shadow:0 18px 42px rgba(255,170,70,.6)}}
.cta:disabled{opacity:.6}
.proof{font-size:11px;opacity:.92;text-align:center;text-shadow:0 1px 6px rgba(0,0,0,.5);margin:2px 0 0}

/* ---- quiz options ---- */
.opt{width:100%;background:rgba(255,255,255,.97);color:#2a1a0c;border:none;border-radius:16px;padding:17px 18px;
  font-size:15.5px;text-align:left;font-weight:600;cursor:pointer;animation:rise .45s ease both;
  box-shadow:0 6px 18px rgba(0,0,0,.14)}
.opt:nth-child(2){animation-delay:.05s}.opt:nth-child(3){animation-delay:.1s}.opt:nth-child(4){animation-delay:.15s}.opt:nth-child(5){animation-delay:.2s}
.opt.sel{outline:3px solid var(--gold)}
@keyframes rise{from{opacity:0;transform:translateY(16px)}to{opacity:1;transform:translateY(0)}}

/* ---- certainty bar ---- */
.certain{width:100%;margin:14px 0}
.crow{display:flex;justify-content:space-between;align-items:baseline;font-size:10.5px;letter-spacing:.06em;
  text-transform:uppercase;opacity:.95;margin-bottom:5px;text-shadow:0 1px 4px rgba(0,0,0,.5)}
.crow b{font-family:Georgia,serif;font-style:italic;font-size:14px;color:#fff;text-transform:none}
.ctrack{height:8px;border-radius:6px;background:rgba(0,0,0,.34);overflow:hidden}
.cfill{height:100%;border-radius:6px;background:linear-gradient(90deg,#fff0c4,#fff);box-shadow:0 0 12px rgba(255,255,255,.7);
  transition:width .9s cubic-bezier(.3,1,.4,1)}

/* ---- TASTE CAPTCHA ---- */
.captcha-screen{justify-content:safe center;overflow-y:auto;
  padding-bottom:max(20px,calc(env(safe-area-inset-bottom) + 60px))}
.capcard{width:100%;background:rgba(255,255,255,.97);border-radius:18px;padding:15px;color:#2a1a0c;
  box-shadow:0 18px 44px rgba(0,0,0,.42);margin-top:10px;animation:rise .5s ease both}
.caphead{margin:0 0 12px}
.captitle{display:block;font-size:16px;font-weight:800}
.capsub{display:block;font-size:12.5px;color:#6b5a44;margin-top:2px}
.capgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:7px}
.captile{position:relative;aspect-ratio:1;border-radius:11px;overflow:hidden;cursor:pointer;border:3px solid transparent;
  background-size:cover;background-position:center;transition:transform .12s ease}
.captile:active{transform:scale(.96)}
.captile.sel{border-color:#ffb14a}
.admock{position:absolute;inset:0;display:flex;flex-direction:column;justify-content:flex-end;padding:8px;gap:4px}
.adh{font-size:10px;font-weight:800;color:#fff;line-height:1.12;text-shadow:0 1px 3px rgba(0,0,0,.45)}
.adcta{align-self:flex-start;font-size:8px;background:#fff;color:#2a1a0c;padding:2px 6px;border-radius:5px;font-weight:800}
.captile .check{position:absolute;top:5px;right:5px;width:20px;height:20px;border-radius:50%;background:#ffb14a;color:#2a1a0c;
  font-size:13px;font-weight:800;display:none;align-items:center;justify-content:center}
.captile.sel .check{display:flex}
.capfoot{margin-top:11px;text-align:center;font-size:12px;color:#6b5a44;font-weight:600}

/* ---- REVEAL ---- */
.revscroll{display:none;overflow-y:auto;align-items:stretch;padding:30px 20px 0;text-align:left}
#reveal.is-active{display:flex}
/* "generated one-by-one" — each block resolves out of a blur */
.gen{opacity:0;filter:blur(12px);transform:translateY(10px);
  transition:opacity .55s ease,filter .55s ease,transform .55s ease}
.gen.in{opacity:1;filter:blur(0);transform:none}
.rv-genie{position:absolute;top:14px;right:6px;width:96px;z-index:3;filter:drop-shadow(0 10px 20px rgba(0,0,0,.45));
  animation:floaty 5s ease-in-out infinite}
.rv-kick{font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--mut);margin:6px 0 0;max-width:62%}
.rv-stage{font-size:30px;line-height:1.05;font-weight:800;letter-spacing:-.02em;margin:4px 0 2px;max-width:72%}
.rv-stage .em{color:var(--gold)}
.rv-taste{font-size:12.5px;color:var(--mut);margin:8px 0 0;max-width:80%}
.rv-taste b{color:#ffe6b0}

.ladder{display:flex;width:100%;margin:16px 0 4px;align-items:flex-end}
.lstep{flex:1;text-align:center;position:relative}
.lbar{height:6px;background:rgba(255,255,255,.12);margin:0 2px;border-radius:4px}
.lstep.done .lbar{background:#e0843a}.lstep.now .lbar{background:var(--gold);height:12px}
.lnum{font-size:9px;color:#9a8163;margin-top:6px}.lstep.now .lnum{color:var(--gold);font-weight:800}
.youhere{position:absolute;top:-17px;left:50%;transform:translateX(-50%);font-size:8.5px;color:var(--gold);white-space:nowrap;font-weight:700}
.goal .lbar{background:linear-gradient(90deg,var(--gold),var(--gold2));height:12px;box-shadow:0 0 12px rgba(255,180,74,.7)}
.goal .lnum{color:var(--gold2);font-weight:800}
.goaltag{position:absolute;top:-17px;left:50%;transform:translateX(-50%);font-size:8.5px;color:var(--gold2);white-space:nowrap;font-weight:800}

/* diagnosis — flowing text, not boxes */
.diag{margin-top:20px;display:grid;gap:14px}
.diag p{margin:0;font-size:13.5px;line-height:1.5}
.diag .lab{display:block;font-size:9.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--mut);margin-bottom:4px}
.diag b{color:#ffe6b0}
.diag-fallback{display:grid;gap:14px}
/* dynamic diagnosis: sharp problem (the hook), cheeky aside, then the fix */
.diag-problem{font-size:17px;line-height:1.32;font-weight:700;color:#fff}
.diag-cheeky{font-size:13px;line-height:1.5;color:var(--mut);font-style:italic}
.diag-solution{font-size:13.5px;line-height:1.55;color:var(--txt)}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:16px}
.chip{font-size:11.5px;background:rgba(255,217,138,.14);border:1px solid rgba(255,217,138,.32);color:var(--gold);padding:6px 11px;border-radius:9px}

/* deliverables tease — what opting in unlocks */
.unlock{margin-top:18px}
.unlock-lab{font-size:9.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--mut);margin:0 0 8px}
.unlock-items{display:grid;gap:7px}
.unlock-row{display:flex;align-items:center;gap:9px;font-size:13px;color:var(--txt);
  background:rgba(255,217,138,.07);border:1px solid rgba(255,217,138,.22);border-radius:11px;padding:10px 12px}
.unlock-row .lock{font-size:13px;filter:grayscale(.2);opacity:.85}
.unlock-row b{font-weight:600}

/* free ad concepts — the two end-screen slots that fill when generation lands */
.concepts{margin-top:18px}
.concepts-lab{font-size:9.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--mut);margin:0 0 8px;
  display:flex;align-items:center;gap:8px}
.concepts-status{font-size:9.5px;letter-spacing:.08em;color:var(--gold);text-transform:none}
.concept-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}
/* 3 concept piles: base static (v1) in full up front, v2/v3 fanned out behind */
.concept-grid-9{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
.concept-pile-wrap{display:flex;flex-direction:column;gap:6px;min-width:0}
.concept-col-head{font-size:8.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--mut);
  text-align:center;margin:0 0 1px}
.concepts-note{font-size:10.5px;color:var(--mut);margin:9px 0 0}
/* headroom so the cards behind can peek above the front one */
.concept-pile{position:relative;aspect-ratio:1/1;margin-top:12px}
.concept-slot{position:absolute;inset:0;border-radius:10px;overflow:hidden;
  background:#15110c center/cover no-repeat;border:1px solid rgba(255,217,138,.22);
  box-shadow:0 6px 16px rgba(0,0,0,.35);
  transition:opacity .45s ease,filter .5s ease}
.concept-slot.pile-1{z-index:3}
.concept-slot.pile-2{z-index:2;transform:rotate(-3.5deg) translateY(-5.5%) scale(.95)}
.concept-slot.pile-3{z-index:1;transform:rotate(3.5deg) translateY(-10%) scale(.89)}
/* while the real ad renders, the slot holds a blurred INSPO ad (the ones they
   just picked) — "developing", never an empty void. Un-blurs into the real
   static on fill (transition:filter above). */
.concept-slot.inspo{filter:blur(6px) saturate(.85) brightness(.6)}
/* loading shimmer — a light sweep OVER the inspo image (background = the image) */
.concept-slot.loading::after{content:"";position:absolute;inset:0;
  background:linear-gradient(110deg,transparent 22%,rgba(255,240,205,.16) 42%,transparent 62%);
  background-size:220% 100%;animation:cshimmer 1.4s linear infinite}
@keyframes cshimmer{to{background-position:-220% 0}}

/* sticky email */
.emailbar{position:sticky;bottom:0;margin-top:20px;padding:14px 0 6px;
  background:linear-gradient(180deg,rgba(13,10,7,0),#0d0a07 26%);backdrop-filter:blur(6px)}
.etitle{font-size:15px;font-weight:800;text-align:center;margin:0 0 3px}
.esub{font-size:11.5px;color:var(--mut);text-align:center;margin:0 0 10px}
.micro{font-size:12px;text-align:center;color:var(--gold);margin:10px 0 0}
.gifts{font-size:11px;text-align:center;color:var(--mut);margin:9px 0 0;opacity:.9}

/* — load-screen email + call CTA (generation-first launch) — */
/* email gate rides a FULL-BLEED bottom fade — down to the ground, edge to edge
   (Alan 2026-07-04: the old sticky-bar gradient ended where the text ended) */
.loadmail { position: fixed; left: 0; right: 0; bottom: 0; margin: 0; max-width: none;
  display: flex; flex-direction: column; align-items: center;
  padding: 46px 22px calc(18px + env(safe-area-inset-bottom));
  background: linear-gradient(180deg, rgba(13,10,7,0), rgba(13,10,7,.9) 38%, #0d0a07 72%);
  backdrop-filter: none; }
.loadmail .thumb { width: 100%; max-width: 340px; }
#load { padding-bottom: 240px; }
.loadmail .etitle { font-size: 17px; margin: 0 0 4px; }
.loadmail .esub { font-size: 12.5px; opacity: .8; margin: 0 0 10px; }
.skiplink { background: none; border: none; color: inherit; opacity: .55; font-size: 12.5px; margin-top: 10px; text-decoration: underline; cursor: pointer; }
.callbar { margin: 26px 0 10px; text-align: center; }
/* €50k+ pitch moved to the very top — a self-contained hero card */
.callbar.attop { margin: 4px 0 20px; padding: 18px 16px; text-align: center;
  background: linear-gradient(180deg,rgba(255,217,138,.11),rgba(255,177,74,.04));
  border: 1px solid rgba(255,217,138,.30); border-radius: 18px;
  box-shadow: 0 14px 34px rgba(0,0,0,.34); }
.pitch-hook { font-size: 19px; line-height: 1.28; font-weight: 800; color: #fff;
  margin: 0 0 10px; text-align: center; letter-spacing: -.01em; }
.callbar .cta { display: inline-block; width: 100%; max-width: 340px; text-align: center; text-decoration: none; box-sizing: border-box; }
.walink { display: block; margin-top: 12px; font-size: 13.5px; opacity: .75; color: inherit; text-decoration: underline; }

/* — taste-captcha progress: big, unmissable, green at 3/3 (Tin 2026-07-03) — */
.capfoot{margin-top:12px}
#captcha-count{display:inline-block;font-size:17px;font-weight:800;letter-spacing:.04em;color:#8a7452;
  padding:6px 18px;border-radius:999px;border:1.5px dashed rgba(138,116,82,.5);transition:all .25s ease}
#captcha-count.done{color:#0d5c2e;border-color:#2fae64;border-style:solid;background:rgba(47,174,100,.12)}

/* — multi-run + limit pitch (Tin: tool feel, 3 runs, then the pitch) — */
/* Secondary by design (Alan 2026-09-21): the booking CTA is the one loud thing on
   this screen. The extra-wish rerun is an offer, not a competing call to action. */
.rerun{margin:26px 0 4px;text-align:center;opacity:.92}
.rerun-title{font-size:13px;font-weight:700;color:var(--mut);margin:0 0 9px}
.cta.quiet,.rerun .cta{background:transparent;color:rgba(255,255,255,.88);border:1px solid rgba(255,255,255,.28);
  font-size:14px;font-weight:700;padding:14px;box-shadow:none;animation:none}
.rerun .inp{font-size:14px;padding:14px}
.rerun-left{font-size:11.5px;color:var(--mut);margin:8px 0 0}
.pitchbox{margin:22px 0 8px;padding:18px 16px;text-align:center;
  background:linear-gradient(180deg,rgba(255,217,138,.11),rgba(255,177,74,.04));
  border:1px solid rgba(255,217,138,.30);border-radius:18px;box-shadow:0 14px 34px rgba(0,0,0,.34)}
.pitchbox .cta{display:inline-block;width:100%;max-width:340px;text-align:center;text-decoration:none;
  box-sizing:border-box;margin-top:10px}
.cta.suite{background:#1a1410;color:var(--gold);border:1px solid rgba(255,217,138,.35);font-size:14px;padding:15px}
.pitch-video{margin:12px auto 2px;max-width:340px}
.pitch-video video,.pitch-video iframe{width:100%;aspect-ratio:16/9;border:0;border-radius:12px;background:#000}

/* — desktop = phone proportions: one centered mobile-width column, space on the
   sides (Alan 2026-07-04). The fixed carnival background still fills the window. — */
#app{width:100%;max-width:480px;margin:0 auto}

/* — reveal restructure: fewer, BIGGER lines (Tin: too much small text) — */
/* the ads wrapped like a present */
.adgift{margin-top:20px;padding:14px 12px 12px;border:1.5px dashed rgba(255,217,138,.55);
  border-radius:18px;background:linear-gradient(180deg,rgba(255,217,138,.07),rgba(255,177,74,.02))}
.adgift-head{font-size:18px;font-weight:800;margin:0 0 2px}
/* showman tent: red, loud, gold trim — the Calendly lives INSIDE */
.tent{margin:14px 0 6px;padding:20px 14px 14px;border-radius:22px;text-align:center;
  background:linear-gradient(180deg,#a51d1d,#921717 42%,#7a1212);
  border:1.5px solid rgba(255,206,0,.5);
  box-shadow:0 24px 60px rgba(0,0,0,.5), inset 0 1px 0 rgba(255,255,255,.10)}
.tent-title{font-size:22px;line-height:1.1;font-weight:900;letter-spacing:.02em;
  text-transform:uppercase;color:#ffce00;margin:0;text-shadow:0 2px 10px rgba(0,0,0,.5)}
.tent-sub{font-size:20px;font-weight:800;color:#fff;margin:8px 0 14px}
.tent .walink{display:inline-block;margin-top:10px;color:#ffd9c2}
.cal-embed{width:100%;height:540px;border:0;border-radius:14px;background:#921717}

/* problem/solution two-up under the ladder (Alan 2026-07-04) */
.probsol{display:grid;grid-template-columns:1fr 1fr;gap:10px;width:100%;margin:14px 0 4px;text-align:left}
.ps-box{border-radius:14px;padding:14px 15px;background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.09)}
.ps-problem{border-color:rgba(224,90,58,.35);background:rgba(146,23,23,.16)}
.ps-solution{border-color:rgba(255,177,74,.4);background:rgba(255,177,74,.09)}
.ps-label{font-size:9.5px;letter-spacing:.14em;text-transform:uppercase;margin:0 0 6px;font-weight:800}
.ps-problem .ps-label{color:#ff9b7a}
.ps-solution .ps-label{color:var(--gold)}
.ps-text{font-size:13px;line-height:1.5;color:var(--txt);margin:0}
.ps-text+.ps-text{margin-top:8px}
.ps-lead{font-weight:700;font-size:13.5px}
@media (max-width:520px){.probsol{grid-template-columns:1fr}}

/* subline under the ads gift head */
.adgift-sub{font-size:12.5px;color:var(--mut);margin:0 0 10px;font-style:italic}

/* — bounded states: the quiz waiting on config, and a run that produced nothing.
     Same genie palette as the rest; no new design language. — */
.qstate{gap:10px}
.qspin{width:26px;height:26px;margin:14px auto;border-radius:50%;
  border:3px solid rgba(255,255,255,.22);border-top-color:#ffce00;animation:qspin .8s linear infinite}
@keyframes qspin{to{transform:rotate(360deg)}}
@media (prefers-reduced-motion:reduce){.qspin{animation-duration:2.4s}}
.cta.ghost{background:transparent;color:#fff;border:1.5px solid rgba(255,255,255,.45);box-shadow:none}
.qnote{margin:10px 2px 0;font-size:13px;line-height:1.5;color:rgba(255,255,255,.72);text-align:center}
.runprob{margin:14px 0 2px;padding:12px 14px;border-radius:14px;
  background:rgba(0,0,0,.28);border:1px solid rgba(255,255,255,.14)}
.rp-text{margin:0;font-size:14px;line-height:1.55;color:#fff}
.rp-link{color:#ffce00;font-weight:700;text-decoration:underline}
.mailerr{margin:8px 2px 0;font-size:13px;line-height:1.45;color:#ffd9d0;text-align:center}
.cfill.failed{background:rgba(255,255,255,.28);box-shadow:none}
/* `hidden` must win over a component's own display rule. #concept-grid is
   display:grid, so hiding a failed run's shimmer piles was a no-op without this. */
[hidden]{display:none !important}
