:root{--font-display:"Fredoka", "Nunito", system-ui, sans-serif;--font-body:"Nunito", system-ui, -apple-system, "Segoe UI", sans-serif;--bg:#f4f1ff;--card:#fff;--line:#e6e1fa;--ink:#1f2340;--ink-soft:#565c80;--muted:#9aa0bd;--primary:#6c4dff;--primary-hover:#5a3bf0;--primary-soft:#ece7ff;--sun:#ffc93c;--sun-soft:#fff4d1;--team-a:#ff5d73;--team-a-soft:#ffe5ea;--team-a-ink:#d93a55;--team-b:#3a86ff;--team-b-soft:#e2edff;--team-b-ink:#2563d9;--ffa:#6c4dff;--ffa-soft:#ece7ff;--good:#22c55e;--bad:#ff4d6d;--taken:#ff8a3d;--radius:22px;--shadow:0 10px 30px #1f234014;--shadow-lift:0 16px 40px #1f234024}*,:before,:after{box-sizing:border-box;margin:0;padding:0}body{font-family:var(--font-body);background:radial-gradient(900px 500px at 8% -10%, #ffe3ec 0%, transparent 60%), radial-gradient(800px 500px at 100% 0%, #ddebff 0%, transparent 55%), radial-gradient(900px 600px at 50% 110%, #ddf8ea 0%, transparent 60%), var(--bg);color:var(--ink);-webkit-tap-highlight-color:transparent;background-attachment:fixed;min-height:100vh;overflow-x:hidden}h1,h2,h3{font-family:var(--font-display)}button{cursor:pointer;font-family:inherit}input{font-family:inherit}.avatar{flex-shrink:0;display:block;overflow:visible}.wordmark{vertical-align:middle;width:auto;height:1.1em;display:inline-block;overflow:visible}.tug-visual-root{filter:drop-shadow(0 18px 30px #1f23402e);width:100%;max-width:760px;margin:0 auto}.tug-svg{width:100%;display:block;overflow:visible}.tug-label{font-family:var(--font-display,"Fredoka", sans-serif);letter-spacing:.5px;font-size:15px;font-weight:600}.tug-score{font-family:var(--font-display,"Fredoka", sans-serif);fill:#1f2340;font-size:28px;font-weight:700}.tug-cheer{fill:#ffc93c;font-size:22px;animation:.8s ease-in-out infinite alternate cheer-pop}@keyframes cheer-pop{0%{opacity:.6}to{opacity:1}}.tug-cloud{animation:18s ease-in-out infinite alternate cloud-drift}@keyframes cloud-drift{0%{transform:translate(-12px)}to{transform:translate(16px)}}.tug-rope{animation:.35s ease-out rope-jolt}@keyframes rope-jolt{0%{transform:translateY(0)}30%{transform:translateY(-4px)}60%{transform:translateY(2px)}to{transform:translateY(0)}}@keyframes bounce-strain{0%{transform:translateY(0)scaleX(1)}20%{transform:translateY(-3px)scaleX(.98)}40%{transform:translateY(-1px)scaleX(1.01)}60%{transform:translateY(-4px)scaleX(.97)}80%{transform:translateY(-2px)scaleX(1)}to{transform:translateY(0)scaleX(1)}}@keyframes bounce-win{0%{transform:translateY(0)scaleY(1)}30%{transform:translateY(-8px)scaleY(1.04)}55%{transform:translateY(-3px)scaleY(.99)}80%{transform:translateY(-6px)scaleY(1.02)}to{transform:translateY(0)scaleY(1)}}@keyframes bounce-drag{0%{transform:translate(0)translateY(0)}15%{transform:translate(3px)translateY(-1px)}35%{transform:translate(-2px)translateY(-2px)}55%{transform:translate(4px)translateY(0)}75%{transform:translate(-3px)translateY(-1px)}to{transform:translate(0)translateY(0)}}.figure{transform-box:fill-box;transform-origin:bottom}.figure.bounce-strain{animation:.6s ease-in-out infinite bounce-strain}.figure.bounce-win{animation:.5s ease-in-out infinite bounce-win}.figure.bounce-drag{animation:.3s ease-in-out infinite bounce-drag}@media (prefers-reduced-motion:reduce){.figure,.tug-cloud,.tug-rope,.tug-cheer{animation:none!important}}.tug-visual-root.tug-fill{filter:none;width:100%;max-width:none;height:100%;margin:0}.tug-fill .tug-svg{height:100%;overflow:hidden}@media (width>=960px) and (height>=500px) and (aspect-ratio>=5/4){html.tv-host{font-size:min(1.85vh,1.04vw)}html.tv-host body{overflow:hidden}}.tv-root{height:100vh;color:var(--ink);flex-direction:column;display:flex;position:relative;overflow:hidden}.tv-backdrop{z-index:0;pointer-events:none;position:absolute;inset:0}.tv-header{z-index:2;flex-shrink:0;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:center;gap:1.5rem;padding:1.1rem 2.4rem 0;display:grid;position:relative}.phase-setup .tv-header{position:absolute;top:0;left:0;right:0}.tv-header-side{align-items:center;gap:1.2rem;min-width:0;display:flex}.tv-header-end{grid-column:3;justify-content:flex-end}.tv-logo{background:0 0;border:none;padding:0;font-size:3rem;line-height:1}.tv-room-code{font-family:var(--font-display);color:var(--ink-soft);white-space:nowrap;background:#ffffffd9;border-radius:999px;padding:.35rem .9rem;font-size:.95rem}.tv-room-code strong{color:var(--ink);letter-spacing:.15rem;margin-left:.3rem;font-size:1.15rem}.scoreboard{align-items:center;gap:1rem;display:flex}.score-pill{background:var(--card);box-shadow:var(--shadow);font-family:var(--font-display);border-radius:999px;align-items:center;gap:.8rem;padding:.3rem 1.2rem;display:flex}.score-pill strong{text-align:center;min-width:2.2ch;font-size:2.4rem;font-weight:700;line-height:1.1}.score-name{white-space:nowrap;text-overflow:ellipsis;max-width:8rem;font-size:1.15rem;font-weight:600;overflow:hidden}.score-a{border-left:.5rem solid var(--team-a)}.score-a .score-name{color:var(--team-a-ink)}.score-b{border-right:.5rem solid var(--team-b)}.score-b .score-name{color:var(--team-b-ink)}.tv-timer{font-family:var(--font-display);color:var(--ink);background:var(--card);box-shadow:var(--shadow);text-align:center;border-radius:999px;min-width:7.5rem;padding:.1rem 1.2rem;font-size:2.8rem;font-weight:700;line-height:1.2;transition:color .3s,background .3s}.tv-timer.danger{color:#fff;background:var(--bad);animation:.8s ease-in-out infinite pulse}.end-game-btn{padding:.5rem 1rem;font-size:.95rem}@keyframes pulse{0%,to{transform:scale(1)}50%{transform:scale(1.12)}}.error-msg{background:var(--team-a-soft);color:var(--team-a-ink);border-radius:.8rem;padding:.6rem .9rem;font-size:.95rem;font-weight:700}.primary-btn{background:var(--primary);color:#fff;font-family:var(--font-display);letter-spacing:.03rem;white-space:nowrap;box-shadow:0 .4rem 0 var(--primary-hover), var(--shadow);border:none;border-radius:999px;align-self:center;padding:.85rem 2.4rem;font-size:1.4rem;font-weight:600;transition:transform .15s,box-shadow .15s,background .2s}.primary-btn:hover:not(:disabled){box-shadow:0 .5rem 0 var(--primary-hover), var(--shadow-lift);transform:translateY(-2px)}.primary-btn:active:not(:disabled){box-shadow:0 .15rem 0 var(--primary-hover), var(--shadow);transform:translateY(5px)}.primary-btn:disabled{opacity:.45;cursor:not-allowed}.secondary-btn{background:var(--card);border:.12rem solid var(--line);color:var(--ink);font-family:var(--font-display);white-space:nowrap;box-shadow:var(--shadow);border-radius:999px;padding:.75rem 1.8rem;font-size:1.2rem;font-weight:600;transition:transform .15s,border-color .2s}.secondary-btn:hover:not(:disabled){border-color:var(--primary);transform:translateY(-2px)}.secondary-btn:disabled{opacity:.45;cursor:not-allowed}.tv-root button:focus{outline:none}.tv-root button:focus-visible{outline:.3rem solid var(--ink);outline-offset:.2rem;box-shadow:0 0 0 .7rem var(--sun);z-index:1;position:relative;transform:scale(1.06)}.tv-home{flex-direction:column;flex:1;align-items:center;min-height:0;padding:1.2rem 2.4rem 1.8rem;display:flex}.home-hero{z-index:1;text-align:center;text-shadow:0 .1rem .6rem #ffffffb3;flex-direction:column;align-items:center;gap:.2rem;display:flex;position:relative}.hero-title{font-size:5.6rem;line-height:1}.hero-tagline{font-family:var(--font-display);font-size:1.6rem;font-weight:600}.hero-sub{color:var(--ink-soft);font-size:1.1rem;font-weight:700}.home-notes{z-index:1;flex-direction:column;align-items:center;gap:.5rem;margin-top:auto;margin-bottom:.8rem;display:flex;position:relative}.ffa-hint{background:var(--sun-soft);color:var(--ink-soft);border-radius:999px;align-items:center;gap:.6rem;padding:.5rem 1.1rem;font-size:1rem;font-weight:700;display:flex}.ffa-hint-icon{flex-shrink:0;font-size:1.3rem}.setup-bar{z-index:1;box-shadow:var(--shadow-lift);background:#fffffff5;border-radius:1.8rem;align-items:flex-end;gap:1.4rem;padding:1rem 1.6rem 1.2rem;display:flex;position:relative}.setup-section{flex-direction:column;gap:.45rem;display:flex}.setup-label{letter-spacing:.1rem;color:var(--muted);text-transform:uppercase;font-size:.8rem;font-weight:800}.mode-buttons{gap:.6rem;display:flex}.mode-btn{background:var(--bg);min-width:7rem;color:var(--ink);font-family:var(--font-display);border:.12rem solid #0000;border-radius:1rem;flex-direction:column;align-items:center;gap:.1rem;padding:.55rem .7rem;font-size:1.2rem;font-weight:600;transition:transform .15s,border-color .2s,background .2s;display:flex}.mode-btn:hover{border-color:var(--line);transform:translateY(-2px)}.mode-btn.active{background:var(--primary-soft);border-color:var(--primary);color:var(--primary)}.mode-sub{white-space:nowrap;font-family:var(--font-body);color:var(--muted);font-size:.75rem;font-weight:700}.mode-btn.active .mode-sub{color:var(--primary);opacity:.8}.mode-btn.grid-btn{justify-content:center;align-self:stretch;min-width:4.6rem}.setup-bar.setup-bar-full .mode-btn:not(.grid-btn){min-width:6rem}.mode-left{font-family:var(--font-body);color:var(--muted);font-size:.7rem;font-weight:800;display:block}.plays-hint{background:var(--sun-soft);color:var(--ink-soft);border-radius:999px;margin:0;padding:.5rem 1.1rem;font-size:1rem;font-weight:700}.pass-badge{background:var(--sun);font-family:var(--font-display);color:var(--ink);border-radius:999px;margin:0;padding:.45rem 1.1rem;font-size:1.05rem;font-weight:600}.pass-btn{padding:.5rem 1.3rem;font-size:1.05rem}.pass-overlay{z-index:10;background:#1f23408c;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.pass-card{background:var(--card);border-radius:var(--radius);width:min(34rem,92vw);box-shadow:var(--shadow-lift);text-align:center;flex-direction:column;align-items:center;gap:1rem;padding:2rem 2.4rem;display:flex}.pass-star{font-size:3rem;line-height:1}.pass-title{font-family:var(--font-display);margin:0;font-size:2.2rem;font-weight:600}.pass-text{color:var(--ink-soft);margin:0;font-size:1.15rem}.pass-perks{color:var(--ink-soft);margin:0;padding:0;font-size:1.15rem;font-weight:700;line-height:1.7;list-style:none}.pass-actions{gap:1rem;margin-top:.5rem;display:flex}.timer-stepper{background:var(--bg);border-radius:1rem;align-items:center;gap:.4rem;padding:.3rem;display:flex}.step-btn{background:var(--card);width:2.9rem;height:2.9rem;color:var(--ink);font-family:var(--font-display);border:none;border-radius:.8rem;font-size:1.7rem;font-weight:700;line-height:1}.step-btn[aria-disabled=true]{opacity:.4}.timer-value{text-align:center;min-width:4.2rem;font-family:var(--font-display);font-size:1.5rem;font-weight:700}.create-btn{align-self:flex-end;font-size:1.5rem}.tv-lobby{flex:1;grid-template-rows:minmax(0,1fr) auto;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:1.2rem 2rem;min-height:0;padding:1.2rem 2.4rem 1.6rem;display:grid}.lobby-qr{background:var(--card);min-height:0;box-shadow:var(--shadow-lift);border-radius:1.8rem;flex-direction:column;grid-area:1/1;justify-content:center;align-items:center;gap:.7rem;padding:1.2rem;display:flex}.qr-label{font-family:var(--font-display);font-size:1.8rem;font-weight:600;line-height:1.2}.qr-box{border:.3rem solid var(--sun);background:#fff;border-radius:1.2rem;width:29rem;height:29rem;padding:.8rem}.qr-box svg{width:100%;height:100%;display:block}.qr-url{color:var(--muted);word-break:break-all;text-align:center;font-size:.9rem;font-weight:700}.lobby-teams{grid-area:1/2;align-items:stretch;min-height:0;display:flex}.team-col{background:var(--card);min-width:0;min-height:0;box-shadow:var(--shadow);border-top:.6rem solid #0000;border-radius:1.8rem;flex-direction:column;flex:1;gap:.7rem;padding:1.1rem;display:flex;overflow:hidden}.team-col.team-a{border-top-color:var(--team-a)}.team-col.team-b{border-top-color:var(--team-b)}.team-col-title{text-align:center;white-space:nowrap;text-overflow:ellipsis;font-size:1.6rem;font-weight:600;overflow:hidden}.team-a .team-col-title{color:var(--team-a)}.team-b .team-col-title{color:var(--team-b)}.no-players{color:var(--muted);text-align:center;margin-top:1.5rem;font-size:1.1rem;font-weight:700}.team-players{flex-direction:column;gap:.5rem;min-height:0;display:flex}.team-players.dense{grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:.4rem;display:grid}.lobby-player{background:var(--bg);font-family:var(--font-display);color:var(--ink);text-align:left;border:.12rem solid #0000;border-radius:1rem;align-items:center;gap:.7rem;width:100%;min-width:0;padding:.35rem .8rem;font-size:1.35rem;font-weight:600;animation:.45s cubic-bezier(.34,1.56,.64,1) both pop-in;display:flex}.lobby-player .avatar{width:2.6rem;height:2.6rem}.lobby-player>span{white-space:nowrap;text-overflow:ellipsis;min-width:0;overflow:hidden}.dense .lobby-player{gap:.45rem;padding:.2rem .5rem;font-size:1.05rem}.dense .lobby-player .avatar{width:1.9rem;height:1.9rem}.team-a .lobby-player{background:var(--team-a-soft)}.team-b .lobby-player{background:var(--team-b-soft)}.lobby-player-swap{cursor:pointer;border-style:dashed;border-color:var(--line)}.lobby-player-swap:hover{border-color:var(--ink-soft)}@keyframes pop-in{0%{opacity:0;transform:scale(.6)}to{opacity:1;transform:scale(1)}}.cpu-bot-badge{border:.12rem dashed var(--line);border-radius:1rem;flex-direction:column;align-items:center;gap:.4rem;padding:1.2rem 1rem;display:flex}.cpu-bot-badge .avatar{width:4rem;height:4rem}.cpu-label{font-family:var(--font-display);color:var(--team-b);font-size:1.3rem;font-weight:600}.cpu-sub{color:var(--muted);text-align:center;font-size:.95rem}.lobby-divider{z-index:1;background:var(--sun);width:3.4rem;height:3.4rem;color:var(--ink);font-family:var(--font-display);box-shadow:var(--shadow-lift);border-radius:50%;flex-shrink:0;justify-content:center;align-self:center;align-items:center;margin:0 -1rem;font-size:1.3rem;font-weight:700;display:flex}.lobby-actions{grid-area:2/1/auto/3;align-items:center;gap:1.6rem;display:flex}.lobby-actions-side{flex-direction:column;flex:1;align-items:flex-start;gap:.3rem;display:flex}.lobby-actions-side:first-child{text-align:right;align-items:flex-end}.lobby-start-btn{padding:.9rem 3.4rem;font-size:1.7rem}.lobby-count{font-family:var(--font-display);color:var(--ink);font-size:1.3rem}.leader-hint{background:var(--sun-soft);color:var(--ink);border-radius:999px;padding:.45rem 1rem;font-size:1rem;font-weight:800}.hint{color:var(--ink-soft);font-size:1rem;font-weight:700}.ffa-lobby-col{background:var(--card);min-height:0;box-shadow:var(--shadow);border-top:.6rem solid var(--ffa);border-radius:1.8rem;flex-direction:column;grid-area:1/2;align-items:center;gap:1rem;padding:1.2rem;display:flex;overflow:hidden}.ffa-lobby-title{align-items:center;gap:.7rem;font-size:1.6rem;font-weight:600;display:flex}.ffa-badge{background:var(--ffa-soft);color:var(--ffa);letter-spacing:.05rem;border-radius:999px;padding:.2rem .7rem;font-size:.9rem}.ffa-lobby-grid{grid-template-columns:repeat(auto-fill,minmax(8.5rem,1fr));gap:.7rem;width:100%;display:grid}.ffa-lobby-grid.dense{grid-template-columns:repeat(auto-fill,minmax(6.4rem,1fr));gap:.4rem}.ffa-lobby-player{background:var(--ffa-soft);border-radius:1.1rem;flex-direction:column;align-items:center;gap:.3rem;min-width:0;padding:.7rem .5rem .6rem;animation:.45s cubic-bezier(.34,1.56,.64,1) both pop-in;display:flex}.ffa-lobby-player .avatar{width:3.2rem;height:3.2rem}.dense .ffa-lobby-player .avatar{width:2.2rem;height:2.2rem}.ffa-lobby-name{max-width:100%;font-family:var(--font-display);white-space:nowrap;text-overflow:ellipsis;font-size:1.15rem;font-weight:600;overflow:hidden}.dense .ffa-lobby-name{font-size:.95rem}.tv-playing{flex-direction:column;flex:1;min-height:0;padding:0 2.4rem 1.6rem;display:flex}.playing-main{z-index:1;flex-direction:column;flex:1;align-items:center;min-height:0;padding:.8rem 0;display:flex;position:relative}.longest-callout{z-index:3;white-space:nowrap;font-family:var(--font-display);color:var(--ink);background:var(--sun);box-shadow:0 .4rem 0 #e8a317, var(--shadow-lift);pointer-events:none;border-radius:999px;align-items:baseline;gap:1rem;padding:.5rem 2rem;font-weight:700;animation:.5s cubic-bezier(.34,1.56,.64,1) calloutIn,.4s ease-in 3.1s forwards calloutOut;display:flex;position:absolute;top:.8rem;left:50%;transform:translate(-50%)}.tv-playing-ffa .longest-callout{top:auto;bottom:.8rem}.longest-callout-title{font-size:1.6rem}.longest-callout-word{letter-spacing:.1rem;font-size:2.8rem}.longest-callout-who{font-size:1.4rem;font-family:var(--font-body);font-weight:800}@keyframes calloutIn{0%{opacity:0;transform:translate(-50%)translateY(-1.5rem)scale(.6)}to{opacity:1;transform:translate(-50%)translateY(0)scale(1)}}@keyframes calloutOut{0%{opacity:1;transform:translate(-50%)scale(1)}to{opacity:0;transform:translate(-50%)scale(.9)}}.playing-strip{z-index:1;flex-shrink:0;align-items:stretch;gap:1.2rem;height:11.6rem;display:flex;position:relative}.word-lane{border-top:.4rem solid var(--ffa);min-width:0;box-shadow:var(--shadow);background:#ffffffe0;border-radius:1.4rem;flex-direction:column;flex:1;gap:.4rem;padding:.6rem 1rem .8rem;display:flex;overflow:hidden}.lane-a{border-top-color:var(--team-a)}.lane-b{border-top-color:var(--team-b)}.lane-title{font-family:var(--font-display);color:var(--ffa);white-space:nowrap;text-overflow:ellipsis;font-size:1.1rem;font-weight:600;overflow:hidden}.lane-a .lane-title{color:var(--team-a-ink)}.lane-b .lane-title{color:var(--team-b-ink)}.lane-b{text-align:right}.lane-b .lane-words{justify-content:flex-end}.lane-words{flex-wrap:wrap;flex:1;align-content:flex-start;gap:.4rem;min-height:0;display:flex;overflow:hidden}.lane-empty{color:var(--muted);font-size:1rem;font-weight:700}.word-chip{font-family:var(--font-display);border-radius:999px;padding:.2rem .8rem;font-size:1.2rem;font-weight:600;animation:.35s cubic-bezier(.34,1.56,.64,1) chipIn}.chip-who{opacity:.7;font-size:.85em}@keyframes chipIn{0%{opacity:0;transform:scale(.5)}to{opacity:1;transform:scale(1)}}.tv-grid{background:var(--card);box-shadow:var(--shadow-lift);border-radius:1rem;flex-shrink:0;grid-template-columns:repeat(4,1fr);align-self:center;gap:.3rem;padding:.5rem;display:grid}.tv-cell{width:2.4rem;height:2.4rem;font-family:var(--font-display);background:var(--sun-soft);color:var(--ink);-webkit-user-select:none;user-select:none;border-radius:.5rem;justify-content:center;align-items:center;font-size:1.4rem;font-weight:700;animation:.4s cubic-bezier(.34,1.56,.64,1) both tile-in;display:flex;box-shadow:inset 0 -.2rem #e8a31740}.tv-grid-5{grid-template-columns:repeat(5,1fr);gap:.25rem}.tv-grid-5 .tv-cell{border-radius:.4rem;width:1.86rem;height:1.86rem;font-size:1.1rem}.tv-grid-6{grid-template-columns:repeat(6,1fr);gap:.2rem}.tv-grid-6 .tv-cell{border-radius:.35rem;width:1.53rem;height:1.53rem;font-size:.95rem}@keyframes tile-in{0%{opacity:0;transform:scale(.4)rotate(-8deg)}to{opacity:1;transform:scale(1)rotate(0)}}.ffa-leaderboard{flex-direction:column;flex:1;gap:.6rem;width:100%;max-width:64rem;min-height:0;display:flex}.ffa-lb-title{font-family:var(--font-display);text-align:center;font-size:1.6rem;font-weight:600}.ffa-lb-empty{color:var(--muted);text-align:center;margin-top:1rem;font-size:1.2rem;font-weight:700}.ffa-lb-rows{flex-direction:column;flex:1;gap:.45rem;min-height:0;display:flex;overflow:hidden}.ffa-lb-row{background:var(--card);min-height:1.8rem;box-shadow:var(--shadow);border-radius:1.1rem;flex:0 3.6rem;grid-template-columns:2.6rem minmax(0,1.4fr) 1fr 3.2rem 2.6rem;align-items:center;gap:.7rem;padding:0 1rem;transition:transform .3s;display:grid;overflow:hidden}.ffa-lb-leader{background:var(--sun-soft);transform:scale(1.02)}.ffa-lb-rank{text-align:center;font-size:1.5rem}.ffa-lb-name{font-family:var(--font-display);white-space:nowrap;text-overflow:ellipsis;align-items:center;gap:.6rem;font-size:1.3rem;font-weight:600;display:flex;overflow:hidden}.ffa-lb-name .avatar{width:2.2rem;height:2.2rem}.ffa-lb-bar-wrap{background:var(--bg);border-radius:999px;height:.6rem;overflow:hidden}.ffa-lb-bar{background:linear-gradient(90deg, var(--primary), #a98bff);border-radius:999px;min-width:4px;height:100%;transition:width .5s}.ffa-lb-score{font-family:var(--font-display);text-align:right;font-size:1.6rem;font-weight:700}.ffa-lb-words{color:var(--muted);text-align:right;font-size:.9rem;font-weight:700}.tv-finished{flex-direction:column;flex:1;align-items:center;gap:1rem;min-height:0;padding:.6rem 2.4rem 1.6rem;display:flex}.winner-banner{z-index:1;font-family:var(--font-display);color:var(--ink);background:var(--sun);box-shadow:0 .4rem 0 #e8a317, var(--shadow-lift);border-radius:999px;flex-shrink:0;padding:.3rem 2rem;font-size:3.2rem;font-weight:700;line-height:1.25;animation:.6s cubic-bezier(.34,1.56,.64,1) winnerPop;position:relative}.winner-banner.tie{background:var(--card);box-shadow:var(--shadow-lift)}@keyframes winnerPop{0%{opacity:0;transform:scale(.4)rotate(-6deg)}to{opacity:1;transform:scale(1)rotate(0)}}.longest-line{z-index:1;flex-shrink:0;gap:1rem;font-size:1.3rem;font-weight:700;display:flex;position:relative}.longest-line>span{box-shadow:var(--shadow-lift);background:#ffffffd9;border-radius:999px;padding:.3rem 1.2rem}.longest-line .longest-best{background:var(--sun)}.longest-line .longest-possible{color:var(--muted)}.results-panel{z-index:1;width:100%;box-shadow:var(--shadow-lift);background:#ffffffc7;border-radius:1.8rem;position:relative}.final-scores{gap:1.2rem;max-width:86rem;height:15rem;margin-top:auto;padding:1rem;display:flex}.final-score-box{background:#ffffff8c;border:.2rem solid #0000;border-radius:1.2rem;flex-direction:column;flex:1;gap:.6rem;min-width:0;padding:.7rem 1rem;display:flex}.winner-glow{border-color:var(--sun);background:#fff4d1b3}.fs-head{align-items:baseline;gap:.8rem;display:flex}.fs-label{font-family:var(--font-display);white-space:nowrap;text-overflow:ellipsis;font-size:1.4rem;font-weight:600;overflow:hidden}.fs-score{font-family:var(--font-display);font-size:2.6rem;font-weight:700;line-height:1}.fs-count{color:var(--ink-soft);white-space:nowrap;margin-left:auto;font-size:.95rem;font-weight:700}.fit-chips{flex-wrap:wrap;align-content:flex-start;gap:.35rem;display:flex;overflow:hidden}.fs-words{flex:1;min-height:0}.fs-word{border-radius:999px;padding:.15rem .7rem;font-size:1.05rem;font-weight:700}.fs-more{color:var(--ink-soft);white-space:nowrap;padding:.15rem .4rem;font-size:.95rem;font-weight:800}.ffa-final-board{flex-direction:column;flex:1;gap:.5rem;max-width:72rem;min-height:0;padding:1rem;display:flex;overflow:hidden}.ffa-final-row{background:var(--card);min-height:2rem;box-shadow:var(--shadow);border-radius:1.1rem;flex:0 4rem;grid-template-columns:2.6rem minmax(0,1.1fr) 3.6rem 5rem minmax(0,1.8fr);align-items:center;gap:.8rem;padding:0 1rem;display:grid;overflow:hidden}.ffa-winner-row{background:var(--sun-soft);border:.18rem solid var(--sun)}.ffa-final-rank{text-align:center;font-size:1.7rem}.ffa-final-name{min-width:0;font-family:var(--font-display);white-space:nowrap;text-overflow:ellipsis;align-items:center;gap:.6rem;font-size:1.35rem;font-weight:600;display:flex;overflow:hidden}.ffa-final-name .avatar{width:2.4rem;height:2.4rem}.ffa-final-score{font-family:var(--font-display);text-align:right;font-size:1.8rem;font-weight:700}.ffa-final-words{color:var(--muted);text-align:center;font-size:.95rem;font-weight:700}.ffa-final-chips{height:1.9rem}.ffa-word-chip{background:var(--ffa-soft);color:var(--ffa);border-radius:999px;padding:.15rem .6rem;font-size:.95rem;font-weight:700}.finished-actions{z-index:1;flex-shrink:0;justify-content:center;align-items:center;gap:1.2rem;display:flex;position:relative}.finished-actions .leader-hint{white-space:nowrap;margin-left:1.6rem;position:absolute;left:100%}.is-offline{opacity:.5;filter:grayscale()}.reconnecting-tag{font-family:var(--font-body);text-transform:uppercase;color:var(--ink-soft);margin-left:.5rem;font-size:.65em;font-weight:800}.offline-players{flex-wrap:wrap;justify-content:center;gap:.5rem;display:flex}.offline-player{background:var(--card);border-radius:999px;padding:.25rem .8rem;font-size:1rem;font-weight:700}.music-toggle{font-family:var(--font-display);white-space:nowrap;color:var(--ink-soft);background:var(--card);box-shadow:var(--shadow);cursor:pointer;border:none;border-radius:999px;padding:.45rem .9rem;font-size:.95rem}.music-toggle.off{color:var(--muted)}@media (width<=959px),(height<=499px),(aspect-ratio<=124/100){.tv-root{height:auto;min-height:100vh;overflow:visible}.tv-header,.phase-setup .tv-header{flex-wrap:wrap;padding:12px 16px 0;display:flex;position:relative}.tv-header-end{margin-left:auto}.tv-backdrop{height:56vw;max-height:60vh;margin:0 -16px;position:relative}.tv-home,.tv-lobby,.tv-playing,.tv-finished{padding:12px 16px 24px}.home-hero{order:-1}.hero-title{font-size:3.5rem}.home-notes{margin-top:12px}.setup-bar{flex-wrap:wrap;justify-content:center;gap:16px}.tv-lobby{grid-template-rows:none;grid-template-columns:minmax(0,1fr)}.lobby-qr,.lobby-teams,.ffa-lobby-col,.lobby-actions{grid-area:auto/1}.qr-box{width:min(70vw,18rem);height:min(70vw,18rem)}.lobby-actions{flex-direction:column}.lobby-actions-side,.lobby-actions-side:first-child{text-align:center;align-items:center}.playing-strip{flex-wrap:wrap;height:auto}.word-lane{flex-basis:40%;min-height:8rem}.final-scores{flex-direction:column;height:auto}.final-score-box{min-height:10rem}.finished-actions{flex-wrap:wrap}.finished-actions .leader-hint{margin:0;position:static}}@media (prefers-reduced-motion:reduce){.lobby-player,.ffa-lobby-player,.tv-cell,.word-chip,.winner-banner,.tv-timer.danger{animation:none!important}}.phone-root{min-height:100dvh;color:var(--ink);flex-direction:column;display:flex;overflow:hidden}.phone-center{flex:1;justify-content:center;align-items:center;padding:20px 16px;display:flex}.team-a-color{color:var(--team-a)}.team-b-color{color:var(--team-b)}.join-card{background:var(--card);width:100%;max-width:360px;box-shadow:var(--shadow-lift);text-align:center;border-radius:28px;flex-direction:column;align-items:center;gap:16px;padding:28px 22px;display:flex}.join-logo{font-size:3.5rem}.buddy-parade{justify-content:center;gap:4px;display:flex}.parade-buddy{animation:1.6s ease-in-out infinite hop}@keyframes hop{0%,60%,to{transform:translateY(0)}30%{transform:translateY(-8px)}}.join-room{color:var(--ink-soft);font-weight:700}.join-room span{color:var(--ink);font-family:var(--font-display);letter-spacing:3px}.join-input{background:var(--bg);width:100%;color:var(--ink);font-family:var(--font-display);text-align:center;border:3px solid #0000;border-radius:18px;outline:none;padding:16px 20px;font-size:1.3rem;font-weight:600;transition:border-color .2s}.join-input:focus{border-color:var(--primary)}.join-input::placeholder{color:var(--muted)}.join-error{color:var(--team-a-ink);background:var(--team-a-soft);border-radius:12px;width:100%;padding:8px 12px;font-size:.9rem;font-weight:700}.join-btn,.start-btn{background:var(--primary);color:#fff;width:100%;font-family:var(--font-display);box-shadow:0 6px 0 var(--primary-hover);border:none;border-radius:999px;padding:16px;font-size:1.3rem;font-weight:600;transition:transform .1s,box-shadow .1s}.join-btn:active:not(:disabled),.start-btn:active:not(:disabled){box-shadow:0 2px 0 var(--primary-hover);transform:translateY(4px)}.join-btn:disabled,.start-btn:disabled{opacity:.45;cursor:not-allowed}.connecting-msg{color:var(--muted);font-size:.85rem;font-weight:700}.lobby-card{text-align:center;flex-direction:column;align-items:center;gap:14px;width:100%;max-width:380px;display:flex}.me-card{background:var(--card);width:100%;box-shadow:var(--shadow-lift);border-top:10px solid var(--ffa);border-radius:28px;flex-direction:column;align-items:center;gap:8px;padding:22px 18px 18px;display:flex}.me-card-a{border-top-color:var(--team-a)}.me-card-b{border-top-color:var(--team-b)}.me-avatar-big{animation:2s ease-in-out infinite hop}.me-hello{font-family:var(--font-display);font-size:1.4rem;font-weight:500}.me-hello strong{font-weight:700}.side-chip{border-radius:999px;padding:4px 14px;font-size:.85rem;font-weight:800}.side-chip-a{background:var(--team-a-soft);color:var(--team-a-ink)}.side-chip-b{background:var(--team-b-soft);color:var(--team-b-ink)}.side-chip-ffa{background:var(--ffa-soft);color:var(--ffa)}.leader-panel{background:var(--sun-soft);border:3px solid var(--sun);border-radius:24px;flex-direction:column;gap:8px;width:100%;padding:16px;display:flex}.leader-title{font-family:var(--font-display);font-size:1.25rem;font-weight:600}.leader-sub{color:var(--ink-soft);margin-bottom:4px;font-size:.9rem;font-weight:700}.lobby-waiting{color:var(--ink-soft);font-weight:700;animation:2s ease-in-out infinite blink}@keyframes blink{0%,to{opacity:1}50%{opacity:.5}}.lobby-lists{gap:10px;width:100%;display:flex}.lobby-list{background:var(--card);box-shadow:var(--shadow);border-radius:20px;flex-direction:column;flex:1;gap:6px;min-width:0;padding:12px;display:flex}.lobby-list-title{font-family:var(--font-display);margin-bottom:2px;font-weight:600}.lobby-list-a .lobby-list-title{color:var(--team-a)}.lobby-list-b .lobby-list-title{color:var(--team-b)}.lobby-list-ffa .lobby-list-title{color:var(--ffa)}.lobby-card>.lobby-list-ffa{width:100%}.lobby-name{text-align:left;align-items:center;gap:8px;min-width:0;font-weight:700;display:flex}.lobby-name span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.you-tag{text-transform:uppercase;color:var(--primary);margin-left:6px;font-size:.7rem;font-weight:800}.leave-btn{border:2px solid var(--line);color:var(--ink-soft);background:0 0;border-radius:999px;padding:8px 18px;font-size:.85rem;font-weight:800}.phone-playing{--trace:var(--ffa);--trace-soft:var(--ffa-soft);flex-direction:column;flex:1;align-items:center;gap:10px;padding:12px 14px 20px;display:flex;overflow:hidden}.phone-playing.side-a{--trace:var(--team-a);--trace-soft:var(--team-a-soft)}.phone-playing.side-b{--trace:var(--team-b);--trace-soft:var(--team-b-soft)}.play-topbar{background:var(--card);width:100%;max-width:400px;box-shadow:var(--shadow);border-radius:999px;align-items:center;gap:10px;padding:6px 16px 6px 8px;display:flex}.play-score{font-family:var(--font-display);flex:1;font-size:1.5rem;font-weight:700}.score-sep{color:var(--muted);font-size:1rem}.play-timer{font-family:var(--font-display);font-size:1.4rem;font-weight:700;transition:color .3s}.play-timer.danger{color:var(--bad);animation:.8s ease-in-out infinite pulse}.word-display{background:var(--card);width:100%;max-width:400px;min-height:52px;box-shadow:var(--shadow);border-radius:18px;justify-content:center;align-items:center;padding:8px 16px;display:flex}.word-text{font-family:var(--font-display);letter-spacing:3px;color:var(--trace);font-size:1.7rem;font-weight:700}.word-placeholder{color:var(--muted);font-size:.9rem;font-weight:700}.word-display.word-result{flex-direction:column;gap:0;padding:4px 16px;animation:.25s cubic-bezier(.34,1.56,.64,1) resultIn}.word-display.word-result .word-text{color:#fff;font-size:1.5rem;line-height:1.15}.word-note{letter-spacing:1px;text-transform:uppercase;color:#fff;opacity:.95;font-size:.75rem;font-weight:800}.word-display.accepted{background:var(--good)}.word-display.wrong{background:var(--bad);animation:.25s cubic-bezier(.34,1.56,.64,1) resultIn,.35s ease-in-out shake}.word-display.taken{background:var(--taken)}.word-display.longest{background:var(--sun);box-shadow:0 4px 0 #e8a317, var(--shadow)}.word-display.longest .word-text,.word-display.longest .word-note{color:var(--ink)}@keyframes flashIn{0%{opacity:0;transform:translate(-50%,-50%)scale(.6)}to{opacity:1;transform:translate(-50%,-50%)scale(1)}}@keyframes resultIn{0%{transform:scale(.92)}to{transform:scale(1)}}@keyframes shake{0%,to{translate:0}20%,60%{translate:-6px}40%,80%{translate:6px}}.phone-grid-wrap{background:var(--card);width:100%;max-width:400px;box-shadow:var(--shadow-lift);touch-action:none;-webkit-user-select:none;user-select:none;border-radius:26px;padding:10px;position:relative}@keyframes spin-out-cw{0%{opacity:1;transform:rotate(0)scale(1)}50%{opacity:.25;transform:rotate(45deg)scale(.72)}to{opacity:1;transform:rotate(0)scale(1)}}@keyframes spin-out-ccw{0%{opacity:1;transform:rotate(0)scale(1)}50%{opacity:.25;transform:rotate(-45deg)scale(.72)}to{opacity:1;transform:rotate(0)scale(1)}}.rotating-cw{animation:.6s ease-in-out spin-out-cw}.rotating-ccw{animation:.6s ease-in-out spin-out-ccw}.phone-grid{touch-action:none;-webkit-user-select:none;user-select:none;grid-template-columns:repeat(4,1fr);gap:8px;width:100%;display:grid}.phone-grid-5{grid-template-columns:repeat(5,1fr);gap:6px}.phone-grid-5 .phone-cell{border-radius:14px;font-size:1.65rem}.phone-grid-6{grid-template-columns:repeat(6,1fr);gap:5px}.phone-grid-6 .phone-cell{border-radius:11px;font-size:1.35rem;box-shadow:inset 0 -4px #e8a31740}.phone-grid-6 .cell-order,.phone-grid-5 .cell-order{font-size:.6rem}.swipe-svg{pointer-events:none;width:calc(100% - 20px);height:calc(100% - 20px);position:absolute;inset:10px;overflow:visible}.trace-line{stroke:var(--trace);opacity:.45}.trace-pending{opacity:.25}.trace-dot{fill:var(--trace);opacity:.35}.trace-end{opacity:.6}.phone-cell{aspect-ratio:1;font-family:var(--font-display);background:var(--sun-soft);color:var(--ink);cursor:pointer;-webkit-user-select:none;user-select:none;text-transform:uppercase;border:none;border-radius:18px;justify-content:center;align-items:center;font-size:2rem;font-weight:700;transition:background .1s,transform .1s,color .1s;display:flex;position:relative;box-shadow:inset 0 -5px #e8a31740}.phone-cell:active{transform:scale(.93)}.phone-cell.selected{background:var(--trace-soft);color:var(--trace);box-shadow:inset 0 0 0 3px var(--trace);transform:scale(.96)}.phone-cell.last-sel{background:var(--trace);color:#fff;transform:scale(1.04);box-shadow:0 6px 16px #1f234033}.phone-cell.glow-accepted,.phone-cell.glow-longest,.phone-cell.glow-taken,.phone-cell.glow-wrong{animation:.6s ease-out tileGlow}.phone-cell.glow-accepted{--glow:var(--good)}.phone-cell.glow-longest{--glow:var(--sun)}.phone-cell.glow-taken{--glow:var(--taken)}.phone-cell.glow-wrong{--glow:var(--bad);animation:.6s ease-out tileGlow,.35s ease-in-out shake}@keyframes tileGlow{0%,35%{background:var(--glow);color:#fff;box-shadow:0 0 0 3px var(--glow), 0 0 18px var(--glow)}to{}}.cell-order{font-family:var(--font-body);opacity:.8;font-size:.6rem;font-weight:800;position:absolute;top:4px;right:7px}.rotate-controls{justify-content:center;align-items:center;gap:16px;width:100%;max-width:400px;display:flex}.rotate-btn{background:var(--card);width:56px;height:56px;box-shadow:var(--shadow);border:none;border-radius:50%;place-items:center;transition:transform .1s;display:grid}.rotate-btn:active{transform:scale(.9)rotate(-20deg)}.rotate-icon{color:var(--primary);font-size:1.6rem;line-height:1}.my-words{width:100%;max-width:400px}.my-words-label,.finish-my-label{color:var(--ink-soft);text-transform:uppercase;letter-spacing:1px;margin-bottom:6px;font-size:.8rem;font-weight:800}.my-words-list,.finish-my-words{flex-wrap:wrap;gap:6px;display:flex}.finish-my-words{justify-content:center}.my-word-chip{border-radius:999px;padding:4px 12px;font-size:.85rem;font-weight:800;animation:.3s cubic-bezier(.34,1.56,.64,1) chipIn}.chip-a{background:var(--team-a-soft);color:var(--team-a-ink)}.chip-b{background:var(--team-b-soft);color:var(--team-b-ink)}.chip-ffa{background:var(--ffa-soft);color:var(--ffa)}.ffa-top-score{align-items:baseline;gap:8px;display:flex}.ffa-rank-badge{color:var(--ffa)}.ffa-pts{font-size:1.1rem}.ffa-of{font-family:var(--font-body);color:var(--muted);font-size:.75rem;font-weight:700}.finish-card{background:var(--card);width:100%;max-width:380px;box-shadow:var(--shadow-lift);text-align:center;border-radius:28px;flex-direction:column;align-items:center;gap:14px;padding:24px 18px;display:flex}.finish-result{font-family:var(--font-display);font-size:2rem;font-weight:700;animation:.5s cubic-bezier(.34,1.56,.64,1) flashIn;transform:none}.finish-result.tie{color:var(--ink-soft)}.finish-longest{flex-direction:column;align-items:center;gap:4px;margin-bottom:10px;font-size:.85rem;font-weight:700;display:flex}.finish-longest .longest-best{background:var(--sun);border-radius:12px;padding:2px 10px}.finish-longest .longest-possible{color:var(--ink-soft)}.finish-scores{gap:28px;font-weight:800;display:flex}.finish-score-item{flex-direction:column;align-items:center;gap:2px;display:flex}.finish-pts{font-family:var(--font-display);font-size:2.2rem;font-weight:700}.no-words{color:var(--muted);font-weight:700}.ffa-finish-rank{justify-content:center;align-items:center;gap:12px;display:flex}.ffa-finish-medal{font-size:2.6rem}.ffa-finish-pts{font-family:var(--font-display);color:var(--ffa);font-size:2rem;font-weight:700}.ffa-finish-board{flex-direction:column;gap:6px;width:100%;display:flex}.ffa-finish-row{background:var(--bg);border-radius:16px;align-items:center;gap:10px;padding:6px 12px;display:flex}.ffa-finish-me{background:var(--sun-soft);box-shadow:inset 0 0 0 2px var(--sun)}.ffa-finish-pos{color:var(--muted);min-width:28px;font-weight:800}.ffa-finish-name{text-align:left;flex:1;font-weight:800}.ffa-finish-score{font-family:var(--font-display);font-size:1.1rem;font-weight:700}@media (prefers-reduced-motion:reduce){.parade-buddy,.me-avatar-big,.lobby-waiting,.play-timer.danger,.my-word-chip{animation:none!important}}
