:root{--bg:#0f2a1f;--bg-raised:#173d2d;--bg-row:#fdf8ef12;--text:#fdf8ef;--muted:#b9c9bf;--accent:#d7263d;--gold:#f2c14e;--card:#fdf8ef;--card-text:#0f2a1f;--start-card:#d6e9da;color:var(--text);background:var(--bg);font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif}*{box-sizing:border-box}body{background:radial-gradient(ellipse at top, #1d4a36 0%, var(--bg) 60%) fixed;min-height:100dvh;margin:0;overflow-x:hidden}a{color:var(--gold)}h1{margin:0 0 .5em}button{font:inherit;cursor:pointer}button:disabled{cursor:not-allowed;opacity:.45}input,select{font:inherit;background:var(--text);color:var(--card-text);border:2px solid #0000;border-radius:10px;width:100%;padding:12px;font-size:1.1rem}input:focus,select:focus{border-color:var(--gold);outline:none}.center{text-align:center;flex-direction:column;justify-content:center;align-items:center;min-height:100dvh;padding:16px;display:flex}.stack{flex-direction:column;gap:14px;width:100%;display:flex}.panel{background:var(--bg-raised);text-align:left;border-radius:18px;max-width:420px;padding:28px}.field{flex-direction:column;gap:6px;font-weight:600;display:flex}.primary,.secondary{border:none;border-radius:12px;padding:14px 22px;font-size:1.1rem;font-weight:700}.primary{background:var(--accent);color:var(--text)}.secondary{color:var(--text);border:2px solid var(--muted);background:0 0}.link{color:var(--muted);background:0 0;border:none;text-decoration:underline}.error{color:#ff8a8a;margin:0;font-weight:600}.avatar{font-size:1.4em;line-height:1}.phone{max-width:520px;margin:0 auto}.form-page{padding:24px 16px}.phone-team{margin-bottom:16px;font-size:1.3rem;font-weight:700}.avatar-grid{grid-template-columns:repeat(auto-fill,minmax(56px,1fr));gap:8px;display:grid}.avatar-choice{aspect-ratio:1;background:var(--bg-raised);border:3px solid #0000;border-radius:12px;font-size:2rem}.avatar-choice.selected{border-color:var(--gold);background:#285a42}.avatar-choice:disabled{opacity:.2}.year-input{text-align:center;letter-spacing:.1em;font-size:2.2rem}.big-gap{color:var(--gold);margin:12px 0;font-size:2.6rem;font-weight:800}.picker{flex-direction:column;justify-content:space-between;max-width:none;min-height:100dvh;padding:12px 0;display:flex}.picker-top,.picker-bottom{text-align:center;padding:0 16px}.picker-bottom .primary{width:100%}.rotate-hint{color:var(--muted);margin:0;font-size:.9rem}@media (orientation:landscape){.rotate-hint{display:none}}.timeline-scroll{-webkit-overflow-scrolling:touch;padding:24px 16px;overflow-x:auto}.timeline{align-items:center;gap:6px;width:max-content;margin:0 auto;display:flex}.timeline-item{align-items:center;gap:6px;display:flex}.card{background:var(--card);color:var(--card-text);border-radius:12px;padding:26px 14px;font-size:1.5rem;font-weight:800;box-shadow:0 4px #0000004d}.gap{border:3px dashed var(--muted);width:52px;height:92px;color:var(--muted);background:0 0;border-radius:12px;font-size:1.6rem}.gap.selected{border:3px solid var(--gold);color:var(--gold);background:#f2c14e33;width:72px}.snow{pointer-events:none;z-index:0;position:fixed;inset:0;overflow:hidden}.flake{color:#fffc;animation-name:fall;animation-timing-function:linear;animation-iteration-count:infinite;position:absolute;top:-2rem}@keyframes fall{to{transform:translate(var(--drift), 110vh) rotate(360deg)}}.intro{cursor:pointer;overflow:hidden}.intro-tree{font-size:9rem}.intro-title{color:var(--gold);text-shadow:0 0 30px #f2c14e99;z-index:1;font-size:clamp(3rem,8vw,7rem)}.intro-sub{z-index:1;font-size:2rem}.lobby{grid-template-columns:auto 1fr;gap:3vw;height:100dvh;padding:3vh 3vw;display:grid;position:relative;overflow:hidden}.qr-box{aspect-ratio:.88;background:var(--card);max-width:58vw;height:100%;color:var(--card-text);border-radius:2vh;flex-direction:column;align-items:center;padding:2vh;display:flex;position:relative}.qr{aspect-ratio:1;flex:1;max-width:100%;min-height:0}.qr svg{width:100%;height:100%;display:block}.join-hint{white-space:nowrap;margin:1vh 0 0;font-size:5vh;font-weight:800}.lobby-side{flex-direction:column;min-width:0;min-height:0;display:flex;position:relative}.lobby-title{color:var(--gold);margin:0 0 1vh;font-size:6vh;line-height:1.1}.counter{align-items:baseline;gap:2vw;display:flex}.counter-value{color:var(--gold);font-variant-numeric:tabular-nums;text-align:right;min-width:1.2em;font-size:22vh;font-weight:900;line-height:.95}.counter-label{font-size:5vh;font-weight:700}.lobby-teams{flex-wrap:wrap;flex:1;align-content:flex-start;gap:1.2vh 1vw;min-height:0;margin:2vh 0 0;padding:0;list-style:none;display:flex;overflow:hidden}.lobby-teams li{background:var(--bg-row);white-space:nowrap;border-radius:999px;padding:.6vh 1.6vw;font-size:4vh;font-weight:700}.lobby-teams.many li{font-size:3vh}.lobby-teams.lots{gap:.8vh .6vw}.lobby-teams.lots li{padding:.4vh 1vw;font-size:2.4vh}.ready .start-button{border-radius:3vh;padding:3vh 8vw;font-size:6vh;position:relative}.control-bar{z-index:20;opacity:.35;align-items:center;gap:12px;transition:opacity .2s;display:flex;position:fixed;bottom:16px;right:16px}.control-bar:hover,.control-bar:focus-within{opacity:1}.scoreboard-page{flex-direction:column;height:100dvh;min-height:100dvh;padding:16px 24px 24px;display:flex}.scoreboard-header{grid-template-columns:1fr auto 1fr;align-items:center;gap:24px;margin-bottom:12px;display:grid}.scoreboard-header h1{margin:0}.scoreboard-header .target{text-align:right}.scoreboard-header h1{color:var(--gold);font-size:clamp(1.6rem,3vw,2.6rem)}.target{color:var(--muted);font-size:1.3rem}.round-status{text-align:center;white-space:nowrap;font-size:clamp(2rem,6vh,4rem);font-weight:700}.round-status strong{color:var(--gold);font-size:1.3em}.scoreboard{flex:1;grid-template-columns:1fr;grid-auto-flow:column;gap:8px 24px;min-height:0;margin:0;padding:0;list-style:none;display:grid}.scoreboard.two-columns{grid-template-columns:1fr 1fr}.score-row{background:var(--bg-row);border-radius:.5em;align-items:center;gap:.5em;min-height:0;padding:0 .6em;display:flex;overflow:hidden}.team-name{white-space:nowrap;text-overflow:ellipsis;flex-shrink:0;width:8em;font-weight:700;overflow:hidden}.years{flex-wrap:wrap;flex:1;align-content:center;gap:.2em;min-width:0;max-height:100%;display:flex;overflow:hidden}.year-box{background:var(--card);color:var(--card-text);font-variant-numeric:tabular-nums;border-radius:.3em;padding:.1em .3em;font-size:.85em;font-weight:700}.year-box.guess{color:var(--gold);outline:2px dashed var(--gold);outline-offset:-2px;text-align:center;background:#f2c14e26;min-width:3.2em}.year-box.guess-wrong{color:#ff8a8a;outline:2px dashed var(--accent);outline-offset:-2px;text-align:center;background:#d7263d40;min-width:3.2em}.year-box.vanish{white-space:nowrap;animation:1s ease-in forwards squeeze-out;overflow:hidden}@keyframes squeeze-out{0%{max-width:5em}to{opacity:0;outline-width:0;min-width:0;max-width:0;margin-left:-.2em;padding-left:0;padding-right:0}}.year-box.correct{color:#06210f;background:#3fbf6f;box-shadow:0 0 14px #3fbf6fcc}.year-box.wrong{background:var(--gold);box-shadow:0 0 14px #d7263dcc}.year-box.start,.card.start{background:var(--start-card);font-style:italic}.answered-mark{text-align:center;width:1.4em}.score-row.answered{background:#2e8b5759}.score{color:var(--gold);text-align:right;min-width:1.5em;font-size:1.4em;font-weight:800}.score-row.sudden-death{outline:3px solid var(--accent)}.score-row.winner-row{outline:3px solid var(--gold)}.reveal-overlay{z-index:10;background:#081610f0;flex-direction:column;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.reveal-song{text-align:center;margin-top:2vh}.reveal-title{font-size:clamp(2rem,7vh,5rem);font-weight:800}.reveal-artist{color:var(--muted);font-size:clamp(1.4rem,4.5vh,3rem)}.last-song{font-size:.7em}.reveal-year{color:var(--gold);text-shadow:0 0 60px #f2c14eb3;font-variant-numeric:tabular-nums;font-size:min(32vw,45vh);font-weight:900;line-height:1}.celebration{z-index:10;text-align:center;background:#081610d9;flex-direction:column;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.celebration-title{color:var(--gold);font-size:clamp(3rem,9vw,8rem);position:relative}.winners{flex-wrap:wrap;justify-content:center;gap:48px;display:flex;position:relative}.winner{flex-direction:column;align-items:center;display:flex}.winner-avatar{font-size:clamp(5rem,14vw,12rem)}.winner-name{font-size:clamp(2rem,4vw,3.5rem);font-weight:800}.muted{color:var(--muted)}.spotify-box{background:var(--bg-row);border-radius:12px;flex-direction:column;gap:6px;padding:14px;display:flex}.song-check{max-width:1200px;margin:0 auto;padding:24px 16px 64px}.song-check-actions{flex-wrap:wrap;gap:12px;display:flex}.song-table{border-collapse:collapse;width:100%;margin-top:24px}.song-table th,.song-table td{text-align:left;vertical-align:top;border-bottom:1px solid var(--bg-row);padding:10px 8px}.song-table .num{font-variant-numeric:tabular-nums;font-weight:700}.song-table tr.differs{background:#f2c14e1f}.song-table tr.differs td:nth-child(5){color:var(--gold)}.song-note{color:var(--muted);margin-top:4px;font-size:.85rem}.row-actions{white-space:nowrap}.row-actions .secondary{margin-left:6px;padding:6px 12px;font-size:.95rem}.choices{margin:8px 0 0;padding:0;font-size:.9rem;list-style:none}.choices .link{text-align:left;color:var(--text)}
