:root{
  --bg:#0E1511; --ink:#EAF2EC; --muted:#93A699; --card:#18231C; --card-2:#1F2D24; --line:#2B3B31;
  --tag:#E8C23A; --tag-ink:#2E2500; --leaf:#3C7A4C; --leaf-hi:#9BE3AE; --live:#46D172; --clay:#E48A62;
  --display:"Bricolage Grotesque","Avenir Next","Segoe UI",system-ui,sans-serif;
  --body:"IBM Plex Sans","Segoe UI",system-ui,sans-serif;
  --mono:"IBM Plex Mono",ui-monospace,Menlo,Consolas,monospace;
  color-scheme:dark;
}
*{box-sizing:border-box}
html,body{margin:0;background:var(--bg);color:var(--ink)}
body{font:18px/1.45 var(--body);-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent}
h1,h2,p{margin:0}
.num{font-variant-numeric:tabular-nums}
.mono{font-family:var(--mono)}
.muted{color:var(--muted)}
.sr{position:absolute;width:1px;height:1px;opacity:0;overflow:hidden;pointer-events:none}
button{font:inherit;color:inherit}
.kicker{font:500 .78rem/1 var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--tag)}
.cta{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;min-height:60px;border:0;border-radius:16px;background:var(--tag);color:var(--tag-ink);font:700 1.25rem/1 var(--display);cursor:pointer;touch-action:manipulation;user-select:none;-webkit-user-select:none}
.cta:active{transform:scale(.98)}

/* ---------------------------------------------------------------- audience shell */
.aud .topbar{position:sticky;top:0;z-index:5;display:flex;justify-content:space-between;align-items:center;gap:10px;padding:calc(10px + env(safe-area-inset-top)) 16px 10px;background:linear-gradient(var(--bg) 70%,transparent);font:500 .74rem/1 var(--mono);letter-spacing:.07em;text-transform:uppercase;color:var(--muted)}
.brand{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.conn{display:inline-flex;align-items:center;gap:7px;white-space:nowrap;color:var(--leaf-hi)}
.conn .dot{width:8px;height:8px;border-radius:50%;background:var(--live);box-shadow:0 0 0 3px rgba(70,209,114,.25)}
.conn[data-s=poll]{color:var(--tag)} .conn[data-s=poll] .dot{background:var(--tag);box-shadow:0 0 0 3px rgba(232,194,58,.25)}
.conn[data-s=off]{color:var(--muted)} .conn[data-s=off] .dot{background:var(--muted);box-shadow:none;animation:blink 1s infinite}
@keyframes blink{50%{opacity:.3}}
#stage{min-height:calc(100dvh - 44px);display:flex;flex-direction:column}
.aud:not(.joined) #stage{display:none}

.join{position:fixed;inset:0;z-index:10;background:radial-gradient(120% 70% at 50% 0%,#1B3325 0%,var(--bg) 60%);display:flex;align-items:flex-end;padding:24px 20px calc(28px + env(safe-area-inset-bottom))}
.join[hidden]{display:none}
.join-in{width:100%;max-width:520px;margin:0 auto;display:grid;gap:16px}
.join-h{font:800 clamp(2.3rem,11vw,3.4rem)/1 var(--display);letter-spacing:-.025em}
.join-p{color:var(--muted);font-size:1.05rem}
.join-count{display:flex;align-items:baseline;gap:8px;color:var(--muted)}
.join-count b{font:800 3.4rem/1 var(--display);color:var(--leaf-hi)}
.join-fine{font-size:.85rem;color:var(--muted);text-align:center}

/* ---------------------------------------------------------------- scenes (shared) */
.scene{flex:1;display:flex;flex-direction:column;gap:18px;padding:8px 20px calc(24px + env(safe-area-inset-bottom));position:relative;opacity:0;transform:translateY(8px);transition:opacity .28s ease,transform .28s ease;max-width:640px;width:100%;margin:0 auto}
.scene.in{opacity:1;transform:none}
.sc-head{display:grid;gap:12px}
.sc-title{font:800 clamp(2rem,9vw,2.9rem)/1.02 var(--display);letter-spacing:-.02em;text-wrap:balance}
.sc-title.small{font-size:clamp(1.4rem,6vw,1.9rem)}
.sc-body{font-size:1.12rem;color:#C9D6CD;text-wrap:pretty}
.sc-body b,.bullets b{color:var(--ink)}
.bullets{margin:0;padding:0;list-style:none;display:grid;gap:10px}
.bullets li{background:var(--card);border-radius:12px;padding:12px 14px 12px 38px;position:relative;font-size:1.02rem}
.bullets li::before{content:"";position:absolute;left:15px;top:20px;width:10px;height:10px;border-radius:2px;background:var(--tag);transform:rotate(45deg)}
.slide-text{display:flex;flex-direction:column;gap:18px}
.slide-img{width:100%;border-radius:14px;background:var(--card)}
.stats{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.stats.n1{grid-template-columns:1fr}
.stat{background:var(--card);border-radius:14px;padding:14px;display:grid;gap:6px;align-content:start}
.stat-v{font:800 clamp(1.8rem,8vw,2.4rem)/1 var(--display);color:var(--leaf-hi);letter-spacing:-.02em}
.stat-l{font-size:.9rem;color:var(--muted);line-height:1.3}
.stats.n1 .stat-v{font-size:4rem}

/* tap */
.rx-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:auto}
.rx-btn{border:0;border-radius:22px;background:var(--card);min-height:clamp(120px,19dvh,170px);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;cursor:pointer;touch-action:manipulation;user-select:none;-webkit-user-select:none;transition:background .15s}
.rx-btn:active{background:var(--card-2)}
.rx-btn.pop .rx-e{animation:pop .25s ease}
@keyframes pop{40%{transform:scale(1.3)}}
.rx-e{font-size:3.2rem;line-height:1}
.rx-count{font:600 .95rem/1 var(--mono);color:var(--muted)}
.float-layer{position:fixed;inset:0;pointer-events:none;overflow:hidden;z-index:4}
.float{position:absolute;bottom:-60px;font-size:2rem;animation:rise 3s cubic-bezier(.2,.6,.4,1) forwards;will-change:transform,opacity}
@keyframes rise{0%{transform:translate(0,0) scale(.6);opacity:0}10%{opacity:1}100%{transform:translate(var(--dx),-105vh) scale(1.15);opacity:0}}

/* poll */
.opts{display:grid;gap:10px}
.opt{position:relative;overflow:hidden;border:2px solid transparent;border-radius:14px;background:var(--card);padding:16px 16px;text-align:left;min-height:62px;cursor:pointer;touch-action:manipulation;width:100%}
.opt .bar{position:absolute;inset:0 auto 0 0;width:0;background:rgba(70,209,114,.22);transition:width .9s cubic-bezier(.2,.8,.2,1)}
.opt.win .bar{background:rgba(232,194,58,.38)}
.opt-row{position:relative;display:flex;justify-content:space-between;gap:12px;font-weight:600;font-size:1.12rem}
.pct{font-family:var(--display);font-weight:800}
.opt.mine{border-color:var(--tag)}
.opt:disabled{cursor:default;color:var(--ink)}
.voted:not(.revealed) .opt:not(.mine){opacity:.55}
.poll-foot{color:var(--muted);font-size:.95rem}

/* demo */
.pill{align-self:flex-start;font:500 .72rem/1 var(--mono);letter-spacing:.06em;text-transform:uppercase;background:var(--card);color:var(--leaf-hi);border-radius:999px;padding:8px 12px}
.demo-scroll{overflow:auto;border-radius:14px;background:#F4F3EC;-webkit-overflow-scrolling:touch;touch-action:pan-x pan-y pinch-zoom}
.demo-stage{position:relative;display:grid}
.demo-stage .frame{grid-area:1/1;width:100%;height:auto;display:block;opacity:0;transition:opacity .6s ease}
.demo-stage .frame.on{opacity:1}
.aud .zoomed .demo-stage{width:230%}
.caption{font-size:1.02rem}

/* lookup */
.aud .t-lookup{justify-content:center;align-items:center;text-align:center}
.look{display:grid;gap:18px;justify-items:center;padding-bottom:10vh}
.eyes{font-size:5.5rem;animation:look 2.4s ease-in-out infinite}
@keyframes look{0%,100%{transform:translateY(0)}50%{transform:translateY(-14px)}}
body[data-type=lookup] .topbar{opacity:.5}

/* qr reveal */
.reveal{display:grid;gap:14px;margin:auto 0}
.big-wrap{display:flex;align-items:baseline;gap:12px;flex-wrap:wrap}
.big-n{font:800 clamp(5rem,30vw,8rem)/.9 var(--display);color:var(--leaf-hi);letter-spacing:-.04em}
.big-l{font:600 1.2rem/1.2 var(--display);color:var(--muted)}

/* snap */
.snap-prev img{width:100%;max-height:38dvh;object-fit:cover;border-radius:14px;display:block}
.snap-status{color:var(--muted)}
.busy .snap-status::after{content:"";display:inline-block;width:14px;height:14px;margin-left:8px;border:2px solid var(--muted);border-top-color:transparent;border-radius:50%;animation:spin .7s linear infinite;vertical-align:-2px}
@keyframes spin{to{transform:rotate(360deg)}}
.busy .cta{opacity:.5;pointer-events:none}
.t-snap .cta{margin-top:auto}
.res-card{background:var(--card);border-radius:16px;padding:16px;display:grid;gap:8px;position:relative}
.res-name{font:800 1.4rem/1.1 var(--display)}
.chips{display:flex;gap:6px;flex-wrap:wrap}
.chips span{background:var(--card-2);border-radius:999px;padding:5px 10px;font-size:.9rem}
.hold{background:var(--leaf);color:#fff;border-radius:12px;padding:12px;text-align:center;font:700 1.05rem/1 var(--display);margin-top:4px}
.stub-tag{font:500 .68rem/1 var(--mono);text-transform:uppercase;letter-spacing:.08em;color:var(--muted);justify-self:end}

/* ---------------------------------------------------------------- projector (16:9) */
.proj{overflow:hidden;height:100vh;font-size:min(1.6vw,2.85vh)}
.proj #pstage{position:fixed;inset:0;display:flex}
.proj .scene{max-width:none;margin:0;padding:6vh 6vw;gap:3.5vh;font-size:1em}
.proj .sc-title{font-size:4.4em;line-height:1}
.proj .sc-head.huge .sc-title{font-size:6em}
.proj .sc-body{font-size:1.7em;max-width:52ch}
.proj .kicker{font-size:1em}
.proj .bullets li{font-size:1.4em;padding:.7em 1em .7em 2.3em}
.proj .bullets li::before{left:.9em;top:1.05em}
.proj .bullets{grid-template-columns:1fr 1fr;gap:1em}
.proj .stats{grid-template-columns:repeat(auto-fit,minmax(0,1fr));gap:1.2em}
.proj .stat{padding:1.2em}
.proj .stat-v{font-size:4em}
.proj .stat-l{font-size:1.15em}
.proj .with-qr{flex-direction:row;align-items:center;gap:5vw}
.proj .with-qr .slide-text{flex:1}
.qr-side{display:grid;gap:2vh;justify-items:center}
.qr-block{display:grid;gap:1.2vh;justify-items:center}
.qr-block .qr{width:34vh;height:34vh;background:#fff;border-radius:2vh;padding:1vh}
.qr-block.big .qr{width:52vh;height:52vh}
.qr-url{font-size:1.5em;color:var(--tag)}
.join-count{font-size:1.6em}
.join-count b{font:800 2.2em/1 var(--display);color:var(--leaf-hi)}
.proj .slide-img{max-height:50vh;object-fit:contain;width:auto;align-self:flex-start}
.proj .rx-grid{grid-template-columns:repeat(4,1fr);gap:2vw;margin-top:auto}
.proj .rx-grid.n3{grid-template-columns:repeat(3,1fr)}
.rx-tile{background:var(--card);border-radius:3vh;padding:3vh 1vw;display:grid;justify-items:center;gap:1vh}
.proj .rx-e{font-size:6em}
.proj .rx-count{font:800 3em/1 var(--display);color:var(--ink)}
.proj .float{font-size:4.5em}
.corner-count{position:absolute;top:6vh;right:6vw;font:800 2.2em/1 var(--display);color:var(--leaf-hi)}
.proj .opts{gap:1.6vh}
.proj .opt{min-height:0;padding:2.2vh 1.4vw;cursor:default}
.proj .opt-row{font-size:2em}
.proj .poll-foot{font-size:1.4em}
.qr-mini{position:absolute;right:3vw;bottom:4vh;display:grid;justify-items:center}
.qr-mini .qr{width:14vh;height:14vh;background:#fff;border-radius:1vh;padding:.5vh}
.proj .t-poll .opts,.proj .t-poll .sc-head{max-width:78%}
.proj .t-demo{align-items:center}
.proj .t-demo .demo-scroll{max-height:66vh;overflow:hidden;width:auto;max-width:100%;aspect-ratio:auto}
.proj .t-demo .demo-stage{height:66vh}
.proj .t-demo .demo-stage .frame{height:66vh;width:auto}
.proj .t-demo .sc-title{font-size:2.6em;align-self:flex-start}
.proj .t-demo .caption{align-self:flex-start}
.proj .t-lookup{justify-content:center}
.proj .t-qr .big-n{font-size:14em}
.proj .t-qr .big-l{font-size:2em}
.proj .reveal{margin:0}
/* snap wall */
.wall-head{display:flex;justify-content:space-between;align-items:flex-end;gap:3vw}
.wall-head .sc-title{font-size:3em}
.wall-count{font:800 2.4em/1 var(--display);color:var(--leaf-hi);white-space:nowrap}
.wall{flex:1;display:grid;grid-template-columns:repeat(4,1fr);grid-auto-rows:calc((100vh - 30vh) / 2);gap:1.2vw;overflow:hidden;align-content:start}
.dense .wall{grid-template-columns:repeat(6,1fr);grid-auto-rows:calc((100vh - 30vh) / 3)}
.wall-item{margin:0;position:relative;border-radius:1.4vh;overflow:hidden;background:var(--card);transition:transform .5s cubic-bezier(.2,.8,.2,1),opacity .5s}
.wall-item.new{transform:scale(.6);opacity:0}
.wall-item img{width:100%;height:100%;object-fit:cover;display:block}
.wall-item figcaption{position:absolute;inset:auto 0 0 0;padding:1vh 1vw;background:linear-gradient(transparent,rgba(0,0,0,.75));font-size:.95em;font-weight:600}
.wall:empty::before{content:"Photos appear here as they arrive";grid-column:1/-1;color:var(--muted);font-size:1.6em;padding-top:10vh;text-align:center}
.proj .badge{position:fixed;left:3vw;bottom:3vh;z-index:6;display:flex;gap:1.4vw;align-items:center;font:500 1em/1 var(--mono);color:var(--muted);letter-spacing:.04em}
.proj .badge b{color:var(--leaf-hi);font-family:var(--display);font-size:1.3em}
.proj .badge .u{color:var(--tag)}
body.proj[data-type=snap] .badge,body.proj[data-qr] .badge{display:none}
.proj .fs-hint{position:fixed;top:1vh;right:1vw;font:500 .8em var(--mono);color:var(--muted);opacity:.6}
.proj.is-fs .fs-hint{display:none}

/* ---- layout fixes after screenshot pass */
.proj .scene{padding-bottom:11vh}
.proj .float-layer{font-size:3.2em}
.proj .float{font-size:1em}
.proj .stat-v{font-size:2.7em;line-height:1.05}
.proj .stats{align-items:start}
.proj .t-poll .sc-title{font-size:3.2em}
.proj .t-poll .opts{flex:1;min-height:0;grid-auto-rows:minmax(0,1fr);gap:1.2vh}
.proj .t-poll .opt{padding:0 1.4vw;display:flex;align-items:center}
.proj .t-poll .opt-row{font-size:1.7em;width:100%}
.proj .t-demo .demo-scroll{flex:0 0 auto}
.proj .t-demo .demo-stage,.proj .t-demo .demo-stage .frame{height:58vh}
.proj .t-demo .demo-scroll{max-height:58vh}
.proj .t-demo .caption{font-size:1.45em;max-width:none}
.proj .t-snap .wall{min-height:0;grid-template-rows:repeat(2,minmax(0,1fr));grid-auto-rows:0;grid-auto-rows:0}
.proj .t-snap.dense .wall{grid-template-rows:repeat(3,minmax(0,1fr))}
.proj .t-snap{padding-bottom:5vh}
@media (prefers-reduced-motion:reduce){.float{display:none}.eyes{animation:none}.scene{transition:none}}
@media (min-width:700px){.aud .scene{padding-top:24px}}
