/* Snap Sync v3 — neon arcade. Fonts: Bungee (display) + Rubik (UI), both SIL OFL, self-hosted. */
@font-face{font-family:Bungee;src:url(https://cdn.hedyassist.com/public/hedy/4caf90c880c54ac484a7c903ebe25de2/projects/proj_3b02857ea38947b5ace5e530417d2b79/app/v2/objects/sha256/12/126eec706b7931682dbcf6c6efc274132c603f181fbf912678e6cfeb341e721b) format("woff2");font-display:swap}
@font-face{font-family:Rubik;src:url(https://cdn.hedyassist.com/public/hedy/4caf90c880c54ac484a7c903ebe25de2/projects/proj_3b02857ea38947b5ace5e530417d2b79/app/v2/objects/sha256/69/691cd1d9b4c0cdf31a1dcf04259c86f92c85e69f6622abab7964d81e36890691) format("woff2");font-weight:300 900;font-display:swap}
:root{--bg:#07041a;--card:#160c3c;--line:#3b2a85;--ink:#f6f3ff;--mute:#b0a6e0;--pink:#ff2bd6;--cyan:#22f3ff;--lime:#b6ff2b;--yel:#ffe62b;--red:#ff3b5c;--green:#2bff88;--orange:#ff8a2b;--gc:var(--pink);
 --disp:Bungee,"Arial Black",Impact,system-ui,sans-serif;--sans:Rubik,system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;--spring:cubic-bezier(.2,1.5,.35,1)}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;height:100%;background:var(--bg);color:var(--ink);font-family:var(--sans);overscroll-behavior:none}
body{min-height:100dvh;overflow-x:hidden}
button{font:inherit;color:inherit;cursor:pointer;touch-action:manipulation;user-select:none;-webkit-user-select:none}
input{font:inherit}
.hidden{display:none!important}
/* ---------- animated background (transform-only, paused during play) ---------- */
.bg{position:fixed;inset:0;z-index:-1;overflow:hidden;background:radial-gradient(120% 80% at 50% 0%,#1d0b4f 0%,#07041a 60%)}
.bg .blob{position:absolute;width:70vmax;height:70vmax;border-radius:50%;opacity:.55;will-change:transform}
.bg .b1{background:radial-gradient(circle,#ff2bd655 0%,transparent 62%);left:-25vmax;top:-20vmax;animation:drift1 18s ease-in-out infinite alternate}
.bg .b2{background:radial-gradient(circle,#22f3ff44 0%,transparent 62%);right:-30vmax;top:10vmax;animation:drift2 22s ease-in-out infinite alternate}
.bg .b3{background:radial-gradient(circle,#b6ff2b26 0%,transparent 62%);left:10vmax;bottom:-40vmax;animation:drift1 26s ease-in-out infinite alternate-reverse}
.bg .grid{position:absolute;left:-50%;right:-50%;bottom:-10vh;height:55vh;transform:perspective(40vh) rotateX(62deg);transform-origin:bottom;overflow:hidden;opacity:.5;-webkit-mask-image:linear-gradient(to top,#000 10%,transparent 85%);mask-image:linear-gradient(to top,#000 10%,transparent 85%)}
.bg .grid i{position:absolute;left:0;right:0;top:-60px;bottom:0;background-image:linear-gradient(#ff2bd688 2px,transparent 2px),linear-gradient(90deg,#22f3ff55 2px,transparent 2px);background-size:60px 60px;animation:gridmove 2.4s linear infinite;will-change:transform}
@keyframes drift1{to{transform:translate(12vmax,8vmax) scale(1.15)}}
@keyframes drift2{to{transform:translate(-10vmax,14vmax) scale(.9)}}
@keyframes gridmove{to{transform:translateY(60px)}}
body.playing .bg *{animation-play-state:paused}
/* ---------- layout ---------- */
#app{max-width:520px;margin:0 auto;min-height:100dvh;padding:max(12px,env(safe-area-inset-top)) 16px max(18px,env(safe-area-inset-bottom));display:flex;flex-direction:column}
.scr{display:flex;flex-direction:column;flex:1}
.scr.anim{animation:scrIn .5s var(--spring) both}
@keyframes scrIn{0%{opacity:0;transform:translateY(24px) scale(.97)}100%{opacity:1;transform:none}}
.top{display:flex;align-items:center;gap:8px;margin-bottom:12px;min-height:44px}
.sp{flex:1}
.logo{font-family:var(--disp);font-size:20px;letter-spacing:1px;background:linear-gradient(90deg,var(--pink),var(--cyan));-webkit-background-clip:text;background-clip:text;color:transparent;filter:drop-shadow(0 0 8px #ff2bd666)}
.icon{width:44px;height:44px;border-radius:14px;border:1px solid var(--line);background:#160c3ccc;font-size:18px;display:flex;align-items:center;justify-content:center;transition:transform .25s var(--spring)}
.icon:active{transform:scale(.88)}
.net{font-size:11px;font-weight:700;letter-spacing:1px;color:var(--mute);padding:4px 9px;border-radius:99px;border:1px solid var(--line)}
.net.ok{color:var(--lime);border-color:#4a7a1a}
.net.ok::before{content:"";display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--lime);margin-right:5px;vertical-align:1px;box-shadow:0 0 6px var(--lime);animation:blink 1.6s infinite}
@keyframes blink{50%{opacity:.3}}
.card{background:linear-gradient(180deg,#1f1056ee,#150b3ce6);border:1px solid var(--line);border-radius:22px;padding:16px;margin-bottom:14px;box-shadow:0 14px 40px #0008,inset 0 1px 0 #ffffff14}
.card h3{margin:0 0 12px;font-size:12px;letter-spacing:2.5px;text-transform:uppercase;color:var(--mute);font-weight:800}
.muted{color:var(--mute);font-size:14px}
.mt{margin-top:12px}
.center{text-align:center}
/* ---------- hero logo ---------- */
.hero{text-align:center;margin:18px 0 18px}
.hero .t{font-family:var(--disp);font-size:clamp(52px,17vw,84px);line-height:.92;letter-spacing:2px}
.hero .t span{display:block;background:linear-gradient(180deg,#fff 0%,#ffb8f3 45%,var(--pink) 100%);-webkit-background-clip:text;background-clip:text;color:transparent;filter:drop-shadow(0 0 18px #ff2bd6aa);animation:heroIn .8s var(--spring) both}
.hero .t span+span{background-image:linear-gradient(180deg,#fff 0%,#b8fdff 45%,var(--cyan) 100%);filter:drop-shadow(0 0 18px #22f3ffaa);animation-delay:.12s}
.hero .tag{color:var(--mute);font-weight:600;margin-top:10px;font-size:15px}
.hero .tag b{color:var(--yel)}
@keyframes heroIn{0%{transform:scale(.4) rotate(-6deg);opacity:0}100%{transform:none;opacity:1}}
/* ---------- buttons ---------- */
.btn{position:relative;display:flex;align-items:center;justify-content:center;gap:10px;width:100%;min-height:60px;border:0;border-radius:18px;font-family:var(--disp);font-size:20px;letter-spacing:.5px;color:#1a0030;background:linear-gradient(180deg,#ff8af0,var(--pink));box-shadow:0 5px 0 #a3108a,0 10px 30px #ff2bd655;transition:transform .3s var(--spring),box-shadow .2s}
.btn:active{transform:translateY(4px) scale(.97);box-shadow:0 1px 0 #a3108a,0 4px 14px #ff2bd655;transition-duration:.06s}
.btn.cy{background:linear-gradient(180deg,#a8fcff,var(--cyan));box-shadow:0 5px 0 #0f8f9a,0 10px 30px #22f3ff44;color:#001a1d}
.btn.cy:active{box-shadow:0 1px 0 #0f8f9a}
.btn.lime{background:linear-gradient(180deg,#e3ffa0,var(--lime));box-shadow:0 5px 0 #5e8f0f,0 10px 30px #b6ff2b44;color:#132000}
.btn.ghost{background:#ffffff08;color:var(--ink);box-shadow:inset 0 0 0 2px var(--line);font-family:var(--sans);font-weight:800;font-size:16px;min-height:52px}
.btn.ghost:active{box-shadow:inset 0 0 0 2px var(--cyan)}
.btn.big{min-height:76px;font-size:26px}
.btn small{display:block;font-family:var(--sans);font-size:12px;font-weight:700;opacity:.75;letter-spacing:0}
.btn .stk{display:flex;flex-direction:column;align-items:center;line-height:1.1}
.btn:disabled{filter:grayscale(.7) brightness(.7);box-shadow:0 3px 0 #333;transform:none}
.btn.throb:not(:disabled){animation:throb 1.6s ease-in-out infinite}
@keyframes throb{0%,100%{box-shadow:0 5px 0 #a3108a,0 10px 30px #ff2bd655}50%{box-shadow:0 5px 0 #a3108a,0 10px 50px #ff2bd6cc,0 0 0 6px #ff2bd622}}
.row{display:flex;gap:10px}
.row>*{flex:1}
.field{width:100%;min-height:58px;border-radius:16px;border:2px solid var(--line);background:#0b0628;color:var(--ink);padding:0 16px;font-size:20px;font-weight:700;outline:none;transition:border-color .2s,box-shadow .2s}
.field:focus{border-color:var(--cyan);box-shadow:0 0 0 4px #22f3ff22}
.code-in{text-transform:uppercase;letter-spacing:10px;text-align:center;font-family:var(--disp);font-size:24px}
.lbl{font-size:12px;color:var(--mute);margin:0 0 8px;letter-spacing:1.5px;text-transform:uppercase;font-weight:800}
.or{display:flex;align-items:center;gap:10px;color:var(--mute);font-size:12px;font-weight:800;letter-spacing:2px;margin:14px 0 10px}
.or::before,.or::after{content:"";flex:1;height:1px;background:var(--line)}
.linkbtn{background:none;border:0;color:var(--cyan);font-weight:800;font-size:15px;padding:8px;text-decoration:underline;text-underline-offset:4px}
/* ---------- 3-step strip (home + TV lobby) ---------- */
.steps{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.step{text-align:center;background:#ffffff07;border:1px solid #ffffff14;border-radius:16px;padding:10px 6px}
.step .ill{font-size:9px;height:64px;display:flex;align-items:center;justify-content:center}
.step b{display:block;font-size:13px;line-height:1.2;margin-top:6px}
.step .n{font-family:var(--disp);font-size:12px;color:var(--yel)}
/* ---------- step illustrations (em-sized; scale via font-size) ---------- */
.ill-join{position:relative;width:4.4em;height:7.2em;border-radius:.8em;border:.35em solid #fff;background:#120a35;display:flex;align-items:center;justify-content:center;font-family:var(--disp);font-size:1em;color:var(--yel)}
.ill-join::after{content:"ABCD";font-size:1.15em;letter-spacing:.05em;animation:codeType 2.4s steps(4) infinite;overflow:hidden;white-space:nowrap;width:4ch;display:inline-block}
@keyframes codeType{0%{width:0}60%,100%{width:4ch}}
.ill-sync{display:flex;gap:.5em;align-items:flex-end}
.ill-sync i{width:2.6em;height:4.6em;border-radius:.5em;border:.3em solid #fff;background:#120a35;animation:syncFlash 1.4s infinite}
.ill-sync i:nth-child(2){height:5.4em}
@keyframes syncFlash{0%,55%{background:#120a35}60%,85%{background:var(--green);box-shadow:0 0 1.4em var(--green)}}
.ill-win{position:relative;font-size:1em}
.ill-win .tro{font-size:5em;display:block;animation:trophyBob 1.8s ease-in-out infinite}
.ill-win .clk{position:absolute;right:-1.2em;bottom:.2em;font-size:2.4em}
@keyframes trophyBob{50%{transform:translateY(-.15em) rotate(-6deg)}}
/* ---------- how-it-works overlay ---------- */
.howto{position:fixed;inset:0;z-index:96;background:#05021ae6;display:flex;align-items:center;justify-content:center;padding:18px;animation:fadeIn .25s both}
.howto .card{max-width:420px;width:100%;text-align:center;padding:22px 18px}
.howto .hill{height:170px;display:flex;align-items:center;justify-content:center;font-size:20px}
.howto .hn{font-family:var(--disp);color:var(--yel);font-size:14px;letter-spacing:2px}
.howto h2{font-family:var(--disp);font-size:26px;margin:6px 0 8px;line-height:1.1}
.howto p{color:var(--mute);margin:0 0 16px;font-size:16px;line-height:1.4}
.dots{display:flex;gap:8px;justify-content:center;margin:0 0 14px}
.dots i{width:10px;height:10px;border-radius:50%;background:#ffffff30;transition:all .3s var(--spring)}
.dots i.on{background:var(--cyan);width:26px;border-radius:99px}
.howslide{animation:slideIn .4s var(--spring) both}
@keyframes slideIn{0%{opacity:0;transform:translateX(40px)}100%{opacity:1;transform:none}}
@keyframes fadeIn{from{opacity:0}}
/* ---------- avatars ---------- */
.av{--pc:#ff2bd6;display:inline-flex;align-items:center;justify-content:center;width:1.9em;height:1.9em;border-radius:50%;font-size:1em;line-height:1;background:radial-gradient(circle at 35% 30%,#ffffff40,transparent 60%),color-mix(in srgb,var(--pc) 30%,#120a35);box-shadow:0 0 0 .12em var(--pc),0 0 .6em color-mix(in srgb,var(--pc) 70%,transparent);flex:none}
@supports not (background:color-mix(in srgb,red 50%,blue)){.av{background:#1d1050;box-shadow:0 0 0 .12em var(--pc),0 0 .6em var(--pc)}.gtile{background:#ffffff0a;border-color:#ffffff22}.lane .fill{background:var(--pc);opacity:.45}.stage{background:radial-gradient(120% 70% at 50% 10%,#1d0b4f 0%,#07041a 70%)}}
.av.lg{font-size:30px}.av.md{font-size:20px}.av.sm{font-size:15px}
.pname{font-weight:800;color:var(--pc,#fff)}
/* ---------- lobby ---------- */
.roomcard{text-align:center;position:relative;overflow:hidden}
.roomcard::before{content:"";position:absolute;inset:-40%;background:conic-gradient(from 0deg,transparent,#ff2bd622,transparent 30%,#22f3ff22,transparent 60%);animation:spin 10s linear infinite}
.roomcard>*{position:relative}
@keyframes spin{to{transform:rotate(360deg)}}
.codebig{font-family:var(--disp);font-size:64px;letter-spacing:12px;color:var(--yel);text-shadow:0 0 22px #ffe62b99;line-height:1;margin:2px 0 8px;padding-left:12px}
.codebig span{display:inline-block;animation:letterIn .6s var(--spring) both}
.codebig span:nth-child(2){animation-delay:.08s}.codebig span:nth-child(3){animation-delay:.16s}.codebig span:nth-child(4){animation-delay:.24s}
@keyframes letterIn{0%{transform:translateY(-40px) scale(.3);opacity:0}100%{transform:none;opacity:1}}
.qrwrap{display:flex;justify-content:center;margin:8px 0}
.qrwrap svg{background:#fff;border-radius:14px;padding:6px;box-shadow:0 0 0 3px #ffffff22,0 0 30px #22f3ff33}
.pgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
.ptile{position:relative;display:flex;flex-direction:column;align-items:center;gap:6px;padding:12px 4px 10px;border-radius:16px;background:#ffffff08;border:1px solid #ffffff14;min-height:96px}
.ptile.new{animation:tileIn .55s var(--spring) both}
@keyframes tileIn{0%{transform:scale(.2) rotate(-12deg);opacity:0}100%{transform:none;opacity:1}}
.ptile .nm{font-weight:800;font-size:14px;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:0 4px}
.ptile.me{border-color:var(--cyan);box-shadow:0 0 0 1px var(--cyan),0 0 18px #22f3ff33}
.ptile .badge{position:absolute;top:-8px;right:-4px;font-size:11px;font-weight:900;padding:3px 7px;border-radius:99px;background:var(--yel);color:#2a1d00;box-shadow:0 2px 8px #0008}
.ptile .badge.you{background:var(--cyan);color:#002024;left:-4px;right:auto}
.ptile.empty{border:2px dashed #ffffff22;background:none;justify-content:center;color:#ffffff44;font-size:28px}
.ptile.empty small{font-size:11px;font-weight:700}
.ptile.gone{opacity:.35}
.status{display:flex;align-items:center;gap:10px;justify-content:center;font-weight:800;font-size:16px;text-align:center;padding:4px 0}
.ellip::after{content:"";animation:ellip 1.4s steps(4) infinite}
@keyframes ellip{0%{content:""}25%{content:"."}50%{content:".."}75%{content:"..."}}
.seg{display:flex;gap:6px;background:#0b0628;padding:5px;border-radius:14px;border:1px solid var(--line)}
.seg button{flex:1;min-height:44px;border-radius:10px;border:0;background:none;font-weight:900;font-size:16px;color:var(--mute);transition:all .3s var(--spring)}
.seg button.on{background:var(--cyan);color:#001;transform:scale(1.04);box-shadow:0 0 16px #22f3ff66}
.gamestrip{display:flex;gap:8px;justify-content:space-between}
.gtile{flex:1;text-align:center;border-radius:14px;padding:8px 2px;background:color-mix(in srgb,var(--gc) 14%,transparent);border:1px solid color-mix(in srgb,var(--gc) 45%,transparent)}
.gtile .gi{font-size:24px;display:block}
.gtile b{display:block;font-size:9px;letter-spacing:.5px;color:var(--gc);font-family:var(--disp);margin-top:3px;line-height:1.1}
/* ---------- toast + modal ---------- */
.toast{position:fixed;left:50%;bottom:calc(24px + env(safe-area-inset-bottom));transform:translateX(-50%);background:#24146a;border:1px solid var(--line);padding:12px 18px;border-radius:16px;font-weight:800;z-index:99;max-width:90vw;text-align:center;animation:toastIn .45s var(--spring) both;box-shadow:0 10px 30px #000a}
@keyframes toastIn{0%{transform:translate(-50%,30px) scale(.8);opacity:0}100%{transform:translate(-50%,0);opacity:1}}
.toast.bad{border-color:var(--red);color:#ffd0d8}
.toast.good{border-color:var(--lime);color:#eaffc8}
.modal{position:fixed;inset:0;background:#05021acc;display:flex;align-items:center;justify-content:center;z-index:95;padding:18px;animation:fadeIn .2s}
.modal .card{max-width:440px;width:100%;animation:scrIn .4s var(--spring) both}
.url{word-break:break-all;color:var(--cyan);font-weight:700;font-size:15px}
/* ---------- play stage (phone) ---------- */
.stage{position:fixed;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:calc(64px + env(safe-area-inset-top)) 16px max(24px,env(safe-area-inset-bottom));z-index:20;background:radial-gradient(120% 70% at 50% 10%,color-mix(in srgb,var(--gc) 22%,#0a0522) 0%,#07041a 70%);touch-action:none;user-select:none;-webkit-user-select:none;overflow:hidden}
.hud{position:absolute;top:0;left:0;right:0;padding:max(10px,env(safe-area-inset-top)) 14px 10px;display:flex;justify-content:space-between;align-items:center;font-weight:900;font-size:14px;z-index:3;background:linear-gradient(#07041acc,transparent)}
.hud .gn{font-family:var(--disp);color:var(--gc);font-size:15px;text-shadow:0 0 12px var(--gc)}
.hud .pill{background:#ffffff12;border-radius:99px;padding:5px 10px}
.timer{position:absolute;left:0;right:0;top:calc(max(10px,env(safe-area-inset-top)) + 40px);height:6px;background:#ffffff10;z-index:3}
.timer i{display:block;height:100%;background:var(--gc);box-shadow:0 0 12px var(--gc);transform-origin:left;will-change:transform}
.timer.low i{background:var(--red);box-shadow:0 0 12px var(--red)}
.shake{animation:shake .45s cubic-bezier(.36,.07,.19,.97) both}
@keyframes shake{10%,90%{transform:translate3d(-2px,0,0)}20%,80%{transform:translate3d(5px,0,0)}30%,50%,70%{transform:translate3d(-10px,2px,0)}40%,60%{transform:translate3d(10px,-2px,0)}}
.float{position:fixed;z-index:60;pointer-events:none;font-family:var(--disp);font-size:28px;transform:translate(-50%,-50%);animation:floatUp .8s ease-out forwards;text-shadow:0 0 12px currentColor,0 3px 0 #0008}
.float.ok{color:var(--lime)}.float.no{color:var(--red)}.float.y{color:var(--yel)}
@keyframes floatUp{0%{opacity:0;transform:translate(-50%,-30%) scale(.5)}15%{opacity:1;transform:translate(-50%,-60%) scale(1.15)}100%{opacity:0;transform:translate(-50%,-180%) scale(1)}}
#fx{position:fixed;inset:0;width:100vw;height:100vh;pointer-events:none;z-index:70}
.flashov{position:fixed;inset:0;z-index:65;pointer-events:none;animation:flashOv .35s ease-out forwards}
@keyframes flashOv{0%{opacity:.6}100%{opacity:0}}
/* ---------- round intro ---------- */
.intro{display:flex;flex-direction:column;align-items:center;text-align:center;width:100%}
.intro .rnd{font-family:var(--disp);font-size:14px;letter-spacing:3px;color:var(--mute);animation:scrIn .4s both}
.intro .gname{font-family:var(--disp);font-size:clamp(34px,11vw,52px);line-height:1;color:var(--gc);text-shadow:0 0 24px var(--gc),0 4px 0 #0008;margin:6px 0 12px;animation:slam .6s var(--spring) both}
@keyframes slam{0%{transform:scale(2.6);opacity:0}60%{opacity:1}100%{transform:none}}
.intro .demo{font-size:11px;margin:4px 0 14px;animation:scrIn .5s .15s both}
.intro .rule{font-family:var(--disp);font-size:clamp(24px,7.4vw,34px);line-height:1.12;max-width:440px;animation:scrIn .5s .3s both}
.intro .rule em{font-style:normal;color:var(--gc)}
.intro .rule .r{color:var(--red)}.intro .rule .g{color:var(--green)}
.cdown{margin-top:18px;height:84px;display:flex;align-items:center;justify-content:center}
.cdown span{font-family:var(--disp);font-size:72px;color:var(--yel);text-shadow:0 0 30px #ffe62b99;animation:cpop .9s var(--spring) both}
@keyframes cpop{0%{transform:scale(2.2);opacity:0}30%{transform:scale(1);opacity:1}100%{transform:scale(.85);opacity:.6}}
.gobig{position:fixed;inset:0;z-index:62;display:flex;align-items:center;justify-content:center;pointer-events:none;font-family:var(--disp);font-size:clamp(90px,34vw,240px);color:var(--gc);text-shadow:0 0 40px var(--gc),0 8px 0 #0009;animation:goIn .75s ease-out forwards}
@keyframes goIn{0%{transform:scale(.3) rotate(-8deg);opacity:0}25%{transform:scale(1.15);opacity:1}70%{transform:scale(1);opacity:1}100%{transform:scale(1.6);opacity:0}}
/* ---------- demos (em-based so phone + TV share them) ---------- */
.demo{position:relative;width:22em;height:13em;display:flex;align-items:center;justify-content:center}
.fing{position:absolute;font-size:4.6em;filter:drop-shadow(0 .1em .1em #000a);z-index:3}
.dm-qd .lamp{width:11em;height:11em;border-radius:50%;display:flex;align-items:center;justify-content:center;font-family:var(--disp);font-size:1em;animation:lamp 2.6s infinite;position:relative}
.dm-qd .lamp b{position:absolute;font-size:2.2em;font-weight:400}
.dm-qd .lamp .w{animation:showA 2.6s infinite}.dm-qd .lamp .t{animation:showB 2.6s infinite;color:#002a10}
@keyframes lamp{0%,58%{background:#c2143a;box-shadow:0 0 3em #ff3b5c88}60%,100%{background:#19e06a;box-shadow:0 0 4em #2bff88aa}}
@keyframes showA{0%,58%{opacity:1}60%,100%{opacity:0}}
@keyframes showB{0%,58%{opacity:0}60%,100%{opacity:1}}
.dm-qd .fing{right:2.6em;bottom:-1em;animation:qdTap 2.6s infinite}
@keyframes qdTap{0%,62%{transform:translateY(1.2em)}68%{transform:translateY(-.6em) scale(.92)}76%,100%{transform:translateY(1.2em)}}
.dm-tf .btnd{width:10em;height:10em;border-radius:50%;background:radial-gradient(circle at 35% 30%,#ff9cf0,var(--pink) 55%,#a00d8a);box-shadow:0 0 3em #ff2bd6aa;animation:tfBtn .28s infinite}
@keyframes tfBtn{50%{transform:scale(.93)}}
.dm-tf .fing{right:4em;bottom:-.6em;animation:tfTap .28s infinite}
@keyframes tfTap{50%{transform:translateY(-.7em)}}
.dm-tf .p1{position:absolute;font-family:var(--disp);color:var(--lime);font-size:2em;animation:plus1 .84s infinite;left:5.5em;top:1em;opacity:0}
.dm-tf .p1:nth-of-type(2){animation-delay:.28s;left:2.6em;top:2.4em}.dm-tf .p1:nth-of-type(3){animation-delay:.56s;left:8em;top:2em}
@keyframes plus1{0%{opacity:0;transform:translateY(0) scale(.6)}20%{opacity:1;transform:translateY(-.3em) scale(1)}100%{opacity:0;transform:translateY(-1.6em)}}
.dm-cm{flex-direction:column;gap:1.2em}
.dm-cm .wd{font-family:var(--disp);font-size:3.6em;color:#ff4d68;text-shadow:0 0 .4em #ff4d6888;line-height:1}
.dm-cm .bt{display:flex;gap:1.2em}
.dm-cm .bt i{font-style:normal;width:8em;height:3.6em;border-radius:.8em;display:flex;align-items:center;justify-content:center;font-family:var(--disp);font-size:1.1em;color:#fff;position:relative}
.dm-cm .bt .r{background:#ff2f4f;animation:cmRing 2.2s infinite}.dm-cm .bt .b{background:#2f6bff;opacity:.45}
.dm-cm .bt .b::after{content:"\2715";position:absolute;font-size:2.4em;color:#fff;opacity:.9}
@keyframes cmRing{0%,45%{box-shadow:0 0 0 0 #fff0}55%,85%{box-shadow:0 0 0 .35em #fff,0 0 2em #ff2f4f}}
.dm-cm .fing{left:5em;bottom:-2.4em;animation:cmTap 2.2s infinite}
@keyframes cmTap{0%,40%{transform:translate(3em,1em)}55%{transform:translate(0,-.6em) scale(.92)}70%,100%{transform:translate(0,.4em)}}
.dm-ci .box{position:relative;width:13em;height:11em;border-radius:1em;background:#120a35;border:.25em solid var(--line)}
.dm-ci .box i{position:absolute;font-style:normal;font-size:2.2em;animation:ciFlash 2.8s infinite}
@keyframes ciFlash{0%{opacity:0;transform:scale(.4)}8%,40%{opacity:1;transform:none}48%,100%{opacity:0;transform:scale(.6)}}
.dm-ci .q{position:absolute;right:.6em;top:1.2em;font-family:var(--disp);font-size:2.4em;background:var(--cyan);color:#001a1d;border-radius:.5em;padding:.15em .45em;animation:ciQ 2.8s infinite}
@keyframes ciQ{0%,48%{opacity:0;transform:scale(.5)}58%,92%{opacity:1;transform:none}100%{opacity:0}}
.dm-sw .ar{position:absolute;font-family:var(--disp);font-size:8em;line-height:1}
.dm-sw .a1{color:var(--cyan);text-shadow:0 0 .2em var(--cyan);animation:swA 4s infinite}
.dm-sw .a2{color:var(--red);text-shadow:0 0 .2em var(--red);animation:swB 4s infinite}
@keyframes swA{0%,8%{opacity:0;transform:scale(.6)}14%,36%{opacity:1;transform:none}46%,100%{opacity:0;transform:translateX(1.4em)}}
@keyframes swB{0%,52%{opacity:0;transform:scale(.6)}58%,82%{opacity:1;transform:none}92%,100%{opacity:0;transform:translateX(-.2em)}}
.dm-sw .fing{bottom:-1.4em;animation:swF 4s infinite}
@keyframes swF{0%,16%{transform:translateX(-3em);opacity:0}20%{opacity:1}38%{transform:translateX(3.4em);opacity:1}44%,60%{transform:translateX(3em);opacity:0}62%{transform:translateX(-3em);opacity:1}82%{transform:translateX(-3.4em) translateX(0)}84%{opacity:1}90%,100%{opacity:0}}
.dm-sw .tagr{position:absolute;top:-.6em;font-weight:900;font-size:1.3em;color:var(--red);letter-spacing:.1em;animation:swB 4s infinite}
/* ---------- quick draw ---------- */
.qd{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;flex-direction:column;font-family:var(--disp);font-size:58px;text-align:center;padding:20px}
.qd.wait{background:radial-gradient(circle,#c2143a,#5a0618);color:#ffd0da}
.qd.wait .ring{position:absolute;width:70vmin;height:70vmin;border-radius:50%;border:4px solid #ff8aa344;animation:breathe 1.2s ease-in-out infinite}
@keyframes breathe{50%{transform:scale(1.06);opacity:.4}}
.qd.go{background:radial-gradient(circle,#2bff88,#0b8f40);color:#002a10;font-size:110px}
.qd.bad{background:radial-gradient(circle,#5a0618,#1a0208);color:#ff8aa3}
.qd.done{background:radial-gradient(circle,#0e5a30,#06240f);color:#caffdf}
.qd small{font-family:var(--sans);font-size:18px;font-weight:800;margin-top:12px;opacity:.9;letter-spacing:0}
.qd .ms{font-size:96px;line-height:1}
/* ---------- tap frenzy ---------- */
.tapcount{font-family:var(--disp);font-size:84px;line-height:1;color:#fff;text-shadow:0 0 30px var(--pink);margin-bottom:8px;transition:transform .08s}
.tapcount.bump{transform:scale(1.12)}
.rate{font-weight:900;color:var(--yel);height:24px;margin-bottom:18px;font-size:18px}
.tapbtn{width:min(74vw,320px);height:min(74vw,320px);border-radius:50%;border:0;background:radial-gradient(circle at 35% 30%,#ff9cf0,var(--pink) 55%,#a00d8a);box-shadow:0 10px 0 #7a0a68,0 0 0 10px #ff2bd622,0 0 80px #ff2bd6aa;font-family:var(--disp);font-size:56px;color:#fff;text-shadow:0 4px 0 #0006;transition:transform .05s,box-shadow .05s}
.tapbtn.hit{transform:translateY(6px) scale(.95);box-shadow:0 4px 0 #7a0a68,0 0 0 16px #ff2bd633,0 0 110px #ff2bd6}
/* ---------- color match ---------- */
.word{font-family:var(--disp);font-size:clamp(54px,17vw,80px);margin:0 0 8px;letter-spacing:2px;line-height:1;transition:transform .1s}
.wordhint{font-weight:800;color:var(--mute);margin-bottom:22px;font-size:15px}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:12px;width:100%;max-width:440px}
.cbtn{min-height:96px;border-radius:20px;border:0;font-family:var(--disp);font-size:20px;color:#fff;text-shadow:0 2px 0 #0007;box-shadow:0 6px 0 #0007,inset 0 2px 0 #ffffff55;transition:transform .25s var(--spring)}
.cbtn:active{transform:translateY(4px) scale(.96)}
.cbtn.right{box-shadow:0 0 0 5px #fff,0 0 30px #fff}
.cbtn.wrong{animation:shake .35s}
.c-RED{background:#ff2f4f}.c-BLUE{background:#2f6bff}.c-GREEN{background:#19c25a}.c-YELLOW{background:#ffd21f;color:#3a2a00;text-shadow:none}
.ink-RED{color:#ff4d68;text-shadow:0 0 26px #ff4d6888}.ink-BLUE{color:#5b8cff;text-shadow:0 0 26px #5b8cff88}.ink-GREEN{color:#2bff88;text-shadow:0 0 26px #2bff8888}.ink-YELLOW{color:#ffe62b;text-shadow:0 0 26px #ffe62b88}
.streak{font-weight:900;color:var(--yel);height:22px;margin-top:14px}
/* ---------- count it ---------- */
.flash{position:relative;width:min(92vw,420px);aspect-ratio:4/5;max-height:56vh;border-radius:22px;background:#120a35;border:2px solid var(--line);overflow:hidden;box-shadow:inset 0 0 40px #000a}
.flash span{position:absolute;font-size:34px;transform:translate(-50%,-50%);animation:pop .25s var(--spring) both}
@keyframes pop{0%{transform:translate(-50%,-50%) scale(.2);opacity:0}100%{transform:translate(-50%,-50%) scale(1);opacity:1}}
.flash .gone{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-family:var(--disp);font-size:60px;color:var(--cyan)}
.askq{font-family:var(--disp);font-size:30px;margin-bottom:18px;text-align:center}
.optbtn{min-height:88px;border-radius:20px;border:0;background:#2a1868;font-family:var(--disp);font-size:42px;box-shadow:0 6px 0 #120a35,inset 0 0 0 2px var(--line);transition:transform .25s var(--spring),background .2s}
.optbtn:active{transform:translateY(4px) scale(.96)}
.optbtn.right{background:#19c25a;box-shadow:0 0 0 4px #fff,0 0 30px #2bff88}
.optbtn.wrong{background:#ff2f4f}
.optbtn:disabled{opacity:1}
.verdict{font-family:var(--disp);font-size:22px;height:30px;margin-top:14px}
.pips{display:flex;gap:8px;margin-top:16px}
.pips i{width:14px;height:14px;border-radius:50%;background:#ffffff22}
.pips i.ok{background:var(--lime);box-shadow:0 0 10px var(--lime)}.pips i.no{background:var(--red)}.pips i.cur{outline:2px solid #fff}
/* ---------- swipe ---------- */
.arrow{font-size:min(48vw,200px);line-height:1;font-family:var(--disp);will-change:transform}
.arrow.red{color:var(--red);text-shadow:0 0 40px #ff3b5caa}
.arrow.norm{color:var(--cyan);text-shadow:0 0 40px #22f3ffaa}
.arrow.in{animation:arrIn .25s var(--spring) both}
@keyframes arrIn{0%{transform:scale(.4);opacity:0}100%{transform:none;opacity:1}}
.arrow.fly0{transform:translateY(-70vh);transition:transform .22s ease-in}.arrow.fly1{transform:translateX(80vw);transition:transform .22s ease-in}.arrow.fly2{transform:translateY(70vh);transition:transform .22s ease-in}.arrow.fly3{transform:translateX(-80vw);transition:transform .22s ease-in}
.swtag{font-family:var(--disp);font-size:20px;height:28px;margin-top:6px}
.swtag.red{color:var(--red)}
.swhint{position:absolute;bottom:max(30px,env(safe-area-inset-bottom));left:0;right:0;text-align:center;font-weight:800;color:var(--mute);font-size:14px}
/* ---------- waiting panel ---------- */
.waitp{text-align:center;width:100%;max-width:420px;animation:scrIn .45s var(--spring) both}
.waitp .big{font-family:var(--disp);font-size:44px;line-height:1.05;color:var(--gc);text-shadow:0 0 24px var(--gc)}
.waitp .sub{font-weight:800;font-size:17px;margin:10px 0 18px}
.donelist{display:flex;flex-wrap:wrap;gap:12px;justify-content:center}
.donelist .d{position:relative;opacity:.4;transition:opacity .3s,transform .4s var(--spring)}
.donelist .d.ok{opacity:1;transform:scale(1.08)}
.donelist .d.ok::after{content:"\2713";position:absolute;right:-4px;bottom:-4px;width:20px;height:20px;border-radius:50%;background:var(--lime);color:#132000;font-size:13px;font-weight:900;display:flex;align-items:center;justify-content:center}
/* ---------- lanes (TV race + phone spectate) ---------- */
.lanes{width:100%;display:flex;flex-direction:column;gap:10px}
.lane{position:relative;display:flex;align-items:center;gap:10px}
.lane .nm{width:76px;font-weight:800;font-size:13px;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lane .trk{position:relative;flex:1;height:34px;border-radius:99px;background:#ffffff0c;border:1px solid #ffffff14}
.lane .fill{position:absolute;left:0;top:0;bottom:0;width:0;border-radius:99px;background:linear-gradient(90deg,transparent,color-mix(in srgb,var(--pc) 70%,transparent));transition:width .45s cubic-bezier(.3,1.2,.4,1)}
.lane .runner{position:absolute;top:50%;left:0;transform:translate(-30%,-50%);transition:left .45s cubic-bezier(.3,1.2,.4,1);font-size:15px;z-index:2}
.lane .v{width:52px;font-family:var(--disp);font-size:18px}
.lane .v.fin{color:var(--lime)}
.lane.lead .runner .av{animation:leadGlow .8s ease-in-out infinite}
@keyframes leadGlow{50%{box-shadow:0 0 0 .15em var(--pc),0 0 1.4em var(--pc)}}
/* ---------- results (phone) ---------- */
.rhead{text-align:center;font-family:var(--disp);color:var(--gc);font-size:15px;letter-spacing:1px;text-shadow:0 0 12px var(--gc)}
.mine{text-align:center;padding:18px 14px}
.mine .pts{font-family:var(--disp);font-size:64px;line-height:1;margin:6px 0 6px}
.mine .why{font-weight:800;font-size:17px}
.mine .brk{color:var(--mute);font-size:14px;margin-top:6px;font-weight:600}
.mine.win{border-color:var(--yel);box-shadow:0 0 0 1px var(--yel),0 0 40px #ffe62b33}
.mine .place{display:inline-block;font-family:var(--disp);font-size:13px;padding:5px 12px;border-radius:99px;background:var(--yel);color:#2a1d00;margin-bottom:6px}
.mine .place.bad{background:var(--red);color:#fff}.mine .place.neu{background:#ffffff22;color:var(--ink)}
.pos{color:var(--lime)}.neg{color:var(--red)}.zero{color:var(--mute)}
.rrow{display:flex;align-items:center;gap:10px;padding:9px 2px;border-bottom:1px solid #ffffff10;animation:rowIn .45s var(--spring) both}
.rrow:last-child{border-bottom:0}
@keyframes rowIn{0%{opacity:0;transform:translateX(-30px)}100%{opacity:1;transform:none}}
.rrow .rk{font-family:var(--disp);width:26px;text-align:center;color:var(--yel);font-size:18px}
.rrow .who{flex:1;min-width:0}
.rrow .who b{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rrow .who small{color:var(--mute);font-size:12px;font-weight:600}
.rrow .p{font-family:var(--disp);font-size:18px;min-width:62px;text-align:right}
.rrow.me{background:linear-gradient(90deg,#22f3ff14,transparent);border-radius:12px}
.lbwrap{position:relative}
.lbrow{position:absolute;left:0;right:0;display:flex;align-items:center;gap:10px;height:52px;padding:0 4px;transition:transform .9s cubic-bezier(.3,1.25,.45,1);will-change:transform}
.lbrow .rk{font-family:var(--disp);width:26px;text-align:center;color:var(--yel);font-size:18px}
.lbrow b{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lbrow .sc{font-family:var(--disp);font-size:18px}
.lbrow.me{background:linear-gradient(90deg,#22f3ff1a,transparent);border-radius:12px}
.delta{font-size:12px;font-weight:900;min-width:30px;text-align:center;border-radius:99px;padding:2px 6px}
.delta.up{color:#132000;background:var(--lime)}.delta.dn{color:#fff;background:var(--red)}.delta.eq{color:var(--mute)}
.nextin{text-align:center;color:var(--mute);font-weight:800;margin:4px 0 8px}
.nextin b{color:var(--ink);font-family:var(--disp)}
/* ---------- podium ---------- */
.podium{display:flex;align-items:flex-end;justify-content:center;gap:10px;margin:14px 0 4px}
.pod{flex:1;max-width:130px;text-align:center;display:flex;flex-direction:column;align-items:center}
.pod .who{animation:podWho .5s var(--spring) both;display:flex;flex-direction:column;align-items:center;gap:4px;margin-bottom:8px}
.pod .nm{font-weight:900;font-size:15px;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pod .sc{font-size:13px;color:var(--mute);font-weight:700}
.pod .bar{width:100%;border-radius:16px 16px 4px 4px;display:flex;align-items:flex-start;justify-content:center;font-family:var(--disp);font-size:38px;padding-top:8px;color:#1a0f00;transform-origin:bottom;animation:podUp .7s var(--spring) both;box-shadow:inset 0 2px 0 #fff8}
@keyframes podUp{0%{transform:scaleY(0)}100%{transform:none}}
@keyframes podWho{0%{transform:translateY(-30px) scale(.3);opacity:0}100%{transform:none;opacity:1}}
.p1 .bar{height:150px;background:linear-gradient(#fff3a0,var(--yel) 40%,#d9a400);box-shadow:0 0 40px #ffe62b66,inset 0 2px 0 #fff}
.p2 .bar{height:108px;background:linear-gradient(#ffffff,#c9c9ec 40%,#8b8bb8)}
.p3 .bar{height:78px;background:linear-gradient(#ffd2a8,#ff9d4d 40%,#b9601a)}
.p1 .crown{font-size:28px;animation:trophyBob 1.6s ease-in-out infinite}
.youplace{text-align:center;font-family:var(--disp);font-size:20px;margin-top:6px}
/* ---------- TV stage ---------- */
body.tv #app{max-width:none;padding:3vh 4vw;height:100vh;overflow:hidden}
body.tv{overflow:hidden;cursor:none}
body.tv .bg .grid{opacity:.7}
.spot{position:fixed;top:-20vh;width:40vw;height:140vh;background:linear-gradient(180deg,#ffffff1c,transparent 70%);clip-path:polygon(45% 0,55% 0,100% 100%,0 100%);transform-origin:top center;z-index:-1;pointer-events:none;mix-blend-mode:screen}
.spot.s1{left:5vw;animation:sweep1 9s ease-in-out infinite alternate}
.spot.s2{right:5vw;animation:sweep2 11s ease-in-out infinite alternate}
@keyframes sweep1{0%{transform:rotate(-18deg)}100%{transform:rotate(14deg)}}
@keyframes sweep2{0%{transform:rotate(18deg)}100%{transform:rotate(-14deg)}}
.tvwrap{display:flex;flex-direction:column;height:94vh}
.tvtop{display:flex;align-items:center;gap:2vw;font-size:2.4vh;font-weight:800}
.tvtop .logo{font-size:4.2vh}
.tvtop .tvcode{font-family:var(--disp);font-size:4.2vh;color:var(--yel);letter-spacing:.6vh;text-shadow:0 0 2vh #ffe62b88}
.tvtop .net{font-size:1.8vh}
.tvtop .rpill{font-family:var(--disp);font-size:2.4vh;padding:.8vh 1.8vh;border-radius:99px;background:#ffffff14}
.tvmain{flex:1;display:flex;align-items:center;justify-content:center;flex-direction:column;position:relative;min-height:0}
.tvlobby{display:grid;grid-template-columns:1.25fr 1fr;gap:4vw;align-items:center;width:100%}
.tvlobby .codebig{font-size:20vh;letter-spacing:3vh;padding-left:3vh;margin:1vh 0}
.tvjoin{font-size:3.2vh;text-align:center;color:var(--mute);font-weight:700}
.tvjoin b{color:var(--cyan)}
.tvlobby .qrwrap svg{width:34vh;height:34vh;padding:1.4vh;border-radius:2.4vh}
.tvplayers{display:flex;flex-wrap:wrap;gap:2.4vh 3vh;justify-content:center;margin-top:3vh;min-height:14vh}
.tvp{display:flex;flex-direction:column;align-items:center;gap:1vh;animation:tileIn .6s var(--spring) both}
.tvp .av{font-size:5vh;animation:bob 2.4s ease-in-out infinite}
.tvp:nth-child(2n) .av{animation-delay:-.6s}.tvp:nth-child(3n) .av{animation-delay:-1.2s}
.tvp b{font-size:2.6vh}
@keyframes bob{50%{transform:translateY(-1vh)}}
.tvsteps{display:grid;grid-template-columns:repeat(3,1fr);gap:2vw;width:100%;margin-top:3vh}
.tvsteps .step{padding:2vh 1vw;border-radius:2.4vh}
.tvsteps .step .ill{font-size:1.5vh;height:11vh}
.tvsteps .step b{font-size:2.6vh}.tvsteps .step .n{font-size:2vh}
.tvstatus{font-size:3vh;font-weight:800;margin-top:2vh;text-align:center}
/* round title card */
.tcard{display:flex;flex-direction:column;align-items:center;text-align:center}
.tcard .rn{font-family:var(--disp);font-size:5vh;letter-spacing:1vh;color:var(--mute);animation:slam .6s var(--spring) both}
.tcard .gname{font-family:var(--disp);font-size:13vh;line-height:1;color:var(--gc);text-shadow:0 0 5vh var(--gc),0 1vh 0 #0008;margin:1vh 0 2vh;animation:slam .7s .15s var(--spring) both}
.tcard .demo{font-size:2.3vh;animation:scrIn .5s .35s both}
.tcard .rule{font-family:var(--disp);font-size:6.4vh;line-height:1.1;max-width:84vw;margin-top:2vh;animation:scrIn .5s .5s both}
.tcard .rule em{font-style:normal;color:var(--gc)}.tcard .rule .r{color:var(--red)}.tcard .rule .g{color:var(--green)}
.tcard .cdown{height:16vh;margin-top:1vh}.tcard .cdown span{font-size:14vh}
body.tv .gobig{font-size:40vh}
/* TV play */
.tvplay{width:88vw;display:flex;flex-direction:column;align-items:center}
.tvplay .ph{font-family:var(--disp);font-size:6vh;color:var(--gc);text-shadow:0 0 3vh var(--gc);margin-bottom:3vh}
body.tv .lanes{gap:2vh}
body.tv .lane{gap:2vw}
body.tv .lane .nm{width:16vw;font-size:3.6vh}
body.tv .lane .trk{height:7vh}
body.tv .lane .runner{font-size:3.6vh}
body.tv .lane .v{width:10vw;font-size:4.6vh}
.tvtimer{width:88vw;height:1.4vh;border-radius:99px;background:#ffffff14;overflow:hidden;margin-top:3vh}
.tvtimer i{display:block;height:100%;background:var(--gc);box-shadow:0 0 2vh var(--gc);transform-origin:left}
.tvqd{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;flex-direction:column;font-family:var(--disp);font-size:20vh;z-index:5;transition:background .08s}
.tvqd.wait{background:radial-gradient(circle,#c2143a,#3a0410)}.tvqd.go{background:radial-gradient(circle,#2bff88,#0b6f30);color:#002a10}
.tvqd .qrow{display:flex;flex-wrap:wrap;gap:3vh 4vw;justify-content:center;margin-top:6vh;font-family:var(--sans);font-size:3.4vh;font-weight:900;max-width:90vw}
.tvqd .qp{display:flex;flex-direction:column;align-items:center;gap:1vh;transition:transform .4s var(--spring)}
.tvqd .qp .av{font-size:5vh}
.tvqd .qp span{background:#000a;color:#fff;padding:.6vh 1.6vh;border-radius:99px;min-width:8vw;text-align:center}
.tvqd .qp.ok{transform:scale(1.12)}.tvqd .qp.ok span{background:#fff;color:#003016}
.tvqd .qp.early span{background:var(--red);color:#fff}
/* TV results */
.tvres{width:82vw}
.tvres .ttl{font-family:var(--disp);font-size:7vh;text-align:center;color:var(--gc);text-shadow:0 0 3vh var(--gc);margin-bottom:3vh;animation:slam .6s var(--spring) both}
.tvres .it{display:flex;align-items:center;gap:2.4vw;font-size:4.4vh;padding:1.4vh 2vw;border-radius:2vh;margin-bottom:1vh;background:#ffffff08;opacity:0}
.tvres .it.show{animation:revealRow .6s var(--spring) forwards}
.tvres .it.win{background:linear-gradient(90deg,#ffe62b33,#ffe62b08);box-shadow:0 0 0 .3vh var(--yel),0 0 5vh #ffe62b44}
@keyframes revealRow{0%{opacity:0;transform:translateX(-12vw) scale(.9)}100%{opacity:1;transform:none}}
.tvres .rk{font-family:var(--disp);color:var(--yel);width:6vw;text-align:center;font-size:5.4vh}
.tvres .av{font-size:4.6vh}
.tvres .nm{flex:1;font-weight:900}
.tvres .why{color:var(--mute);font-weight:700;font-size:3.4vh}
.tvres .p{font-family:var(--disp);font-size:5.6vh;min-width:12vw;text-align:right}
.tvlb{width:72vw}
.tvlb .ttl{font-family:var(--disp);font-size:7vh;text-align:center;margin-bottom:3vh;animation:slam .6s var(--spring) both}
body.tv .lbrow{font-size:4.4vh;gap:2vw;padding:0 2vw;border-radius:2vh}
body.tv .lbrow .rk,body.tv .lbrow .sc{font-size:5vh}
body.tv .lbrow .rk{width:6vw}
body.tv .lbrow .av{font-size:4vh}
body.tv .lbrow:nth-child(odd){background:#ffffff07}
body.tv .delta{font-size:2.6vh;min-width:6vw;padding:.4vh 1vh}
/* TV podium */
body.tv .podium{gap:2.4vw;margin-top:2vh}
body.tv .pod{max-width:24vw;width:22vw}
body.tv .pod .av{font-size:7vh}
body.tv .pod .nm{font-size:4.6vh}body.tv .pod .sc{font-size:3.2vh}
body.tv .p1 .bar{height:30vh}body.tv .p2 .bar{height:21vh}body.tv .p3 .bar{height:14vh}
body.tv .pod .bar{font-size:10vh}
body.tv .p1 .crown{font-size:7vh}
.tvrest{display:flex;gap:3vw;justify-content:center;margin-top:3vh;font-size:3vh;font-weight:800;color:var(--mute)}
/* ---------- reduced motion ---------- */
@media (prefers-reduced-motion:reduce){
 *,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}
 .bg .blob,.bg .grid i,.spot{animation:none!important}
 .demo *{animation-duration:2.6s!important;animation-iteration-count:infinite!important}
}
.sbody{width:100%;display:flex;flex-direction:column;align-items:center}
/* ---- v4: start screen is the lobby (auto-room) + nearby games as the hero join path ---- */
.hero.sm{margin:4px 0 10px}.hero.sm .t{font-size:clamp(40px,12vw,56px)}
.codebig.skel{color:#ffffff33;text-shadow:none}.codebig.skel span{animation:skel 1.1s ease-in-out infinite alternate}
.codebig.skel span:nth-child(2){animation-delay:.15s}.codebig.skel span:nth-child(3){animation-delay:.3s}.codebig.skel span:nth-child(4){animation-delay:.45s}
@keyframes skel{from{opacity:.25;transform:translateY(0)}to{opacity:1;transform:translateY(-6px)}}
.nearcard{border-color:#22f3ff66;box-shadow:0 0 0 1px #22f3ff33,0 0 34px #22f3ff22,0 14px 40px #0006;position:relative;overflow:hidden}
.nearcard::after{content:"";position:absolute;left:-30%;top:0;width:30%;height:100%;background:linear-gradient(90deg,transparent,#22f3ff14,transparent);animation:sweep 3.2s linear infinite;pointer-events:none}
@keyframes sweep{to{left:130%}}
.nhead{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}.nhead h3{margin:0;color:var(--cyan)}
.nhead .live{font-size:10px;font-weight:900;letter-spacing:1.5px;color:#002024;background:var(--cyan);border-radius:99px;padding:3px 8px;animation:livePulse 1.6s ease-in-out infinite}
@keyframes livePulse{50%{opacity:.55}}
.nempty{display:flex;flex-direction:column;align-items:center;text-align:center;gap:6px;padding:10px 4px 4px}
.nempty b{font-size:16px}.nempty small{color:var(--mute);font-size:13px;font-weight:600;max-width:290px}
.radar{position:relative;width:46px;height:46px;border-radius:50%;background:radial-gradient(circle,#22f3ff 0 5px,transparent 6px);margin-bottom:4px}
.radar::before,.radar::after{content:"";position:absolute;inset:0;border-radius:50%;border:2px solid var(--cyan);animation:ping 2s cubic-bezier(.2,.6,.3,1) infinite;opacity:0}
.radar::after{animation-delay:1s}
@keyframes ping{0%{transform:scale(.2);opacity:.9}100%{transform:scale(1.25);opacity:0}}
.nrow{display:flex;align-items:center;gap:12px;padding:10px 8px;margin:6px 0;border-radius:16px;background:linear-gradient(90deg,#b6ff2b14,#ffffff06);border:1px solid #b6ff2b44;animation:tileIn .55s var(--spring) both}
.nrow .who{flex:1;min-width:0}.nrow .who b{display:block;font-size:17px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.nrow .who small{color:var(--mute);font-size:12px;font-weight:600}
.btn.njoin{width:auto;min-height:54px;padding:0 20px;font-size:19px;flex-direction:column;line-height:1;gap:2px}
.btn.njoin small{font-size:11px;letter-spacing:2px;opacity:.75;font-family:var(--body,inherit)}
.ptile .ed{font-style:normal;opacity:.7;font-size:12px}
#myTile{cursor:pointer}
@media (prefers-reduced-motion:reduce){.nearcard::after,.radar::before,.radar::after,.codebig.skel span,.nhead .live{animation:none}.radar::before{opacity:.6;transform:scale(1)}}
/* ---- v4.4: one obvious thing to do — calm lobby, nearby banner, sticky Start ---- */
.lobscr .top{margin-bottom:8px}
.lob{display:flex;flex-direction:column}
.nearwrap{display:grid;grid-template-rows:0fr;transition:grid-template-rows .45s var(--spring),margin .3s;margin:0}
.nearwrap.on{grid-template-rows:1fr;margin:0 0 12px}
.nearwrap>*{min-height:0;overflow:hidden}
.nban{border-radius:18px;padding:4px 8px;background:linear-gradient(90deg,#b6ff2b22,#22f3ff14);border:1px solid #b6ff2b88;box-shadow:0 0 0 1px #b6ff2b33,0 0 26px #b6ff2b33;animation:banIn .6s var(--spring) both,banGlow 2.4s ease-in-out .6s infinite}
@keyframes banIn{0%{opacity:0;transform:translateY(-18px) scale(.94)}100%{opacity:1;transform:none}}
@keyframes banGlow{50%{box-shadow:0 0 0 1px #b6ff2b66,0 0 38px #b6ff2b55}}
.nban .nbh{font-size:11px;font-weight:900;letter-spacing:1.5px;text-transform:uppercase;color:var(--lime);padding:6px 4px 0}
.nban .nrow{background:none;border:0;margin:0;padding:6px 2px;animation:none}
.nban.multi .nrow+.nrow{border-top:1px solid #ffffff14}
.nban .nrow .who b{font-size:16px}
.nban .btn.njoin{min-height:44px;padding:0 18px;font-size:17px;border-radius:14px}
.hero2{padding:14px 16px 12px;margin-bottom:12px}
.rlbl{font-size:11px;letter-spacing:2.5px;text-transform:uppercase;color:var(--mute);font-weight:800}
.hero2 .codebig{font-size:58px;margin:4px 0 6px}
.hero2 .qrwrap{margin:4px 0 6px}
.qrskel{width:160px;height:160px;border-radius:14px;background:#ffffff10;animation:skel 1.1s ease-in-out infinite alternate}
.hint{color:var(--mute);font-size:13px;font-weight:600}
.minirow{display:flex;justify-content:center;gap:8px;margin-top:10px}
.chipbtn{display:inline-flex;align-items:center;gap:6px;min-height:38px;padding:0 14px;border-radius:99px;border:1px solid var(--line);background:#ffffff0a;font-weight:800;font-size:14px;color:var(--ink);transition:transform .2s var(--spring)}
.chipbtn:active{transform:scale(.94);border-color:var(--cyan)}
.pstripc{padding:2px 2px 0}
.pshead{display:flex;align-items:center;justify-content:space-between;font-size:11px;letter-spacing:2px;text-transform:uppercase;color:var(--mute);font-weight:800;margin-bottom:8px}
.rinfo{letter-spacing:1px}
.seg.mini{padding:3px;border-radius:11px;gap:3px}
.seg.mini button{min-height:30px;min-width:38px;font-size:13px;border-radius:8px;padding:0 6px}
.seg.mini button.on{transform:none}
.pstrip{display:flex;flex-wrap:wrap;gap:6px}
.pchip{position:relative;display:flex;flex-direction:column;align-items:center;gap:4px;width:62px;padding:4px 0 2px;background:none;border:0;color:inherit}
.pchip.new{animation:tileIn .55s var(--spring) both}
.pchip .nm{font-size:12px;font-weight:800;max-width:62px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pchip.me .av{box-shadow:0 0 0 2px var(--cyan),0 0 14px #22f3ff66}
.pchip .crown{position:absolute;top:-6px;right:6px;font-style:normal;font-size:14px;filter:drop-shadow(0 1px 2px #000a)}
.pchip .ed{font-style:normal;opacity:.6;font-size:10px;margin-left:2px}
.pchip.empty .av{background:none;border:2px dashed #ffffff2a;box-shadow:none;color:#ffffff55;font-weight:700}
.pchip.empty .nm{color:#ffffff55;font-weight:700}
.lfoot{display:flex;justify-content:center;gap:4px;min-height:8px;margin:4px 0 0}
.linkbtn.sm{font-size:14px;color:var(--mute);text-decoration-color:#ffffff40}
.dock{position:sticky;bottom:0;margin-top:auto;padding:12px 0 calc(4px + env(safe-area-inset-bottom));background:linear-gradient(180deg,transparent,var(--bg) 26%);z-index:5}
.dhelp{text-align:center;color:var(--mute);font-size:13px;font-weight:700;margin-bottom:8px}
.btn.solo{background:linear-gradient(180deg,#ff8af0cc,#ff2bd6cc)}
.dock .wait{display:flex;flex-direction:column;align-items:center;gap:4px;padding:14px;border-radius:18px;border:1px solid var(--line);background:#160c3ccc;font-weight:800;font-size:16px;text-align:center}
.dock .wait small{color:var(--mute);font-weight:600;font-size:12px}
.sheetbg{align-items:flex-end;padding:0}
.sheetbg.out{opacity:0;transition:opacity .18s}
.sheet{width:100%;max-width:520px;background:linear-gradient(180deg,#24116a,#150b3c);border:1px solid var(--line);border-bottom:0;border-radius:24px 24px 0 0;padding:10px 18px calc(22px + env(safe-area-inset-bottom));box-shadow:0 -20px 60px #000a;animation:sheetUp .38s var(--spring) both}
@keyframes sheetUp{from{transform:translateY(100%)}to{transform:none}}
.sheet .grab{width:44px;height:5px;border-radius:9px;background:#ffffff30;margin:0 auto 12px}
.sheet h3{margin:0 0 12px;font-size:12px;letter-spacing:2.5px;text-transform:uppercase;color:var(--mute);font-weight:800}
.sheet .muted.sm{font-size:13px;margin:10px 0 2px}
.sheet .linkbtn{padding-left:0}
.howto .card{position:relative}
.howto .hill{height:170px}
.howto .hx{position:absolute;top:10px;right:10px;width:36px;height:36px;border-radius:12px;border:1px solid var(--line);background:#ffffff08;font-size:15px}
.howto .hsnd{display:block;margin:10px auto 0}
@media (prefers-reduced-motion:reduce){.nban,.qrskel,.sheet{animation:none}.nearwrap{transition:none}}
body.dockd .toast{bottom:calc(150px + env(safe-area-inset-bottom))}
.lob.n2 .qrwrap svg{width:132px;height:132px}.lob.n2 .hero2 .codebig{font-size:48px}
.qrwrap svg{transition:width .3s,height .3s}
