:root{--c1:#7c5cff;--c2:#ff5c9e;--accent:#baa6ff;--accent2:#ffb2d1;--ink:#f4f2fa;--ink-dim:#f4f2fa8c;--surface:#ffffff0f;--surface-border:#ffffff1f}*{box-sizing:border-box;margin:0;padding:0}html,body{height:100%}body{color:var(--ink);-webkit-font-smoothing:antialiased;background:#0a0a0f;font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;overflow-x:hidden}button{font:inherit;color:inherit}.bg{z-index:-1;background:#0a0a0f;position:fixed;inset:0;overflow:hidden}.bg-tint{background:radial-gradient(60% 55% at 22% 25%, color-mix(in srgb, var(--c1) 42%, transparent), transparent 70%), radial-gradient(55% 55% at 80% 75%, color-mix(in srgb, var(--c2) 34%, transparent), transparent 70%);transition:background 1.2s;position:absolute;inset:0}.bg-img{object-fit:cover;filter:blur(110px)saturate(1.6)brightness(.65);opacity:.75;will-change:transform;border-radius:30%;width:75vmax;height:75vmax;transition:opacity 1.2s;position:absolute}.bg-img-a{animation:36s ease-in-out infinite alternate drift-a;top:-22vmax;left:-18vmax}.bg-img-b{animation:44s ease-in-out infinite alternate drift-b;bottom:-25vmax;right:-20vmax}@keyframes drift-a{0%{transform:translate(0)rotate(0)scale(1)}to{transform:translate(6vmax,4vmax)rotate(18deg)scale(1.12)}}@keyframes drift-b{0%{transform:translate(0)rotate(0)scale(1.1)}to{transform:translate(-5vmax,-6vmax)rotate(-14deg)scale(1)}}.bg-vignette{background:radial-gradient(120% 90% at 50% 40%,#0000 40%,#05050abf 100%);position:absolute;inset:0}.stage{text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:1.1rem;max-width:30rem;min-height:100dvh;margin:0 auto;padding:1.5rem 1.25rem 2.5rem;display:flex}.hidden{display:none!important}.btn{border:1px solid var(--surface-border);background:var(--surface);cursor:pointer;-webkit-backdrop-filter:blur(10px);border-radius:999px;transition:transform .12s,box-shadow .25s,filter .2s}.btn:hover{filter:brightness(1.15);transform:translateY(-1px)}.btn:active{transform:translateY(1px)scale(.98)}.btn:disabled{opacity:.4;cursor:default;pointer-events:none}.btn-primary{background:linear-gradient(120deg, var(--c1), var(--c2));color:#fff;letter-spacing:.02em;box-shadow:0 8px 32px -8px color-mix(in srgb, var(--c1) 65%, transparent);border:none;padding:.8rem 2rem;font-weight:700}.btn-big{padding:.95rem 2.6rem;font-size:1.1rem}.btn-step{font-variant-numeric:tabular-nums;border-radius:50%;flex-shrink:0;width:3rem;height:3rem;font-size:1rem;font-weight:700}.btn-ghost{color:var(--ink-dim);text-underline-offset:3px;-webkit-backdrop-filter:none;background:0 0;border:none;padding:.5rem 1rem;font-size:.85rem;-webkit-text-decoration:underline #ffffff40;text-decoration:underline #ffffff40}.btn-ghost:hover{color:var(--ink);transform:none}.setup{background:var(--surface);border:1px solid var(--surface-border);-webkit-backdrop-filter:blur(16px);border-radius:1.25rem;flex-direction:column;gap:1.1rem;width:100%;padding:1.25rem;display:flex}.setup-row{text-align:left;flex-direction:column;gap:.6rem;display:flex}.setup-label{text-transform:uppercase;letter-spacing:.15em;color:var(--ink-dim);font-size:.75rem;font-weight:600}.setup-label strong{color:var(--ink);font-variant-numeric:tabular-nums;margin-left:.3rem;font-size:.9rem}.chips{flex-wrap:wrap;gap:.4rem;display:flex}.chip{border:1px solid var(--surface-border);cursor:pointer;color:var(--ink-dim);background:#ffffff0a;border-radius:999px;padding:.4rem .85rem;font-size:.8rem;font-weight:600;transition:all .15s}.chip em{opacity:.55;font-variant-numeric:tabular-nums;font-size:.72rem;font-style:normal}.chip:hover{color:var(--ink);border-color:#ffffff4d}.chip.on{color:#fff;background:linear-gradient(120deg, var(--c1), var(--c2));box-shadow:0 4px 16px -6px color-mix(in srgb, var(--c1) 60%, transparent);border-color:#0000}.mode-buttons{flex-direction:column;align-items:center;gap:.7rem;width:100%;display:flex}.btn-alt{background:linear-gradient(120deg, var(--c2), var(--c1))}.text-input{border:1px solid var(--surface-border);width:100%;font:inherit;color:var(--ink);background:#ffffff0d;border-radius:.8rem;outline:none;padding:.75rem 1rem;transition:border-color .15s}.text-input:focus{border-color:color-mix(in srgb, var(--accent) 60%, transparent)}.text-input::placeholder{color:#f4f2fa4d}.mp-entry{align-items:stretch}.join-row{gap:.6rem;display:flex}.code-input{text-transform:uppercase;letter-spacing:.35em;font-variant-numeric:tabular-nums;text-align:center;flex:1;font-weight:700}.code-row{align-items:center;gap:.7rem;display:flex}.lobby-code{letter-spacing:.18em;font-variant-numeric:tabular-nums;background:linear-gradient(120deg, var(--accent), var(--accent2));color:#0000;filter:drop-shadow(0 1px 2px #05050acc);-webkit-background-clip:text;background-clip:text;font-size:clamp(2.4rem,10vw,3.4rem);font-weight:800;transition:transform .15s}.lobby-code.copied{transform:scale(1.06)}.player-list{flex-direction:column;gap:.4rem;width:100%;list-style:none;display:flex}.player-list li{background:var(--surface);border:1px solid var(--surface-border);-webkit-backdrop-filter:blur(10px);border-radius:.8rem;justify-content:space-between;align-items:center;padding:.6rem .9rem;font-size:.9rem;display:flex}.player-list li.off{opacity:.45}.player-list .empty-slot{color:var(--ink-dim);background:0 0;border-style:dashed;justify-content:center;font-size:.8rem}.player-name{font-weight:600}.player-tags{gap:.4rem;display:flex}.player-tags em{text-transform:uppercase;letter-spacing:.08em;border-radius:999px;padding:.2rem .55rem;font-size:.7rem;font-style:normal}.tag-host{background:color-mix(in srgb, var(--accent) 25%, transparent);color:var(--accent)}.tag-ready{color:#6ee7a0;background:#6ee7a026}.tag-wait{color:var(--ink-dim);background:#ffffff14}.mp-summary{align-items:center}.setup-row.dimmed{opacity:.35;pointer-events:none}.playlist-loaded{border:1px solid var(--surface-border);background:#ffffff0d;border-radius:.8rem;justify-content:space-between;align-items:center;gap:.6rem;padding:.55rem .9rem;font-size:.85rem;display:flex}.playlist-loaded .btn-step{width:2.1rem;height:2.1rem;font-size:.85rem}.playlist-list{flex-direction:column;gap:.45rem;display:flex}.playlist-list>.btn-step{align-self:center}.coffee{color:var(--ink-dim);border:1px solid var(--surface-border);border-radius:999px;padding:.45rem 1rem;font-size:.8rem;text-decoration:none;transition:all .15s}.coffee:hover{color:#ffdd59;background:#ffdd590f;border-color:#ffdd5966}.timebar{background:#ffffff14;border-radius:999px;width:min(30rem,100vw - 2.5rem);height:.25rem;position:absolute;top:3.4rem;left:50%;overflow:hidden;transform:translate(-50%)}.timebar-fill{background:linear-gradient(90deg, var(--c1), var(--c2));border-radius:999px;width:100%;height:100%;transition:width .2s linear}.players-strip{flex-wrap:wrap;justify-content:center;gap:.35rem;display:flex}.pchip{border:1px solid var(--surface-border);color:var(--ink-dim);background:#ffffff12;border-radius:999px;padding:.25rem .7rem;font-size:.72rem;font-weight:600;transition:all .2s}.pchip.done{color:#fff;background:linear-gradient(120deg, var(--c1), var(--c2));border-color:#0000}.cover-wrap.small{width:min(34vw,9rem)}.mp-recap li{grid-template-columns:1fr auto auto}.mp-scores{opacity:.85}.logo{letter-spacing:-.04em;font-size:clamp(3rem,11vw,4.5rem);font-weight:800;line-height:1}.logo span{background:linear-gradient(120deg, var(--c1), var(--c2));color:#0000;-webkit-background-clip:text;background-clip:text}.tagline{color:var(--ink-dim);line-height:1.55}.hint{color:var(--ink-dim);opacity:.8;font-size:.8rem}.end-label{text-transform:uppercase;letter-spacing:.25em;color:var(--ink-dim);font-size:.75rem}.final-score{letter-spacing:-.03em;font-variant-numeric:tabular-nums;background:linear-gradient(120deg, var(--accent), var(--accent2));color:#0000;filter:drop-shadow(0 1px 2px #05050acc)drop-shadow(0 4px 18px #05050a73);-webkit-background-clip:text;background-clip:text;font-size:clamp(4rem,18vw,6rem);font-weight:800;line-height:1}.final-score small{color:var(--ink-dim);-webkit-text-fill-color:var(--ink-dim);font-size:.3em}.recap{flex-direction:column;gap:.4rem;width:100%;margin:.5rem 0 1rem;list-style:none;display:flex}.recap li{background:var(--surface);border:1px solid var(--surface-border);-webkit-backdrop-filter:blur(10px);border-radius:.8rem;grid-template-columns:1fr auto auto;align-items:center;gap:.75rem;padding:.6rem .9rem;font-size:.82rem;display:grid}.recap-song{text-align:left;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.recap-detail{color:var(--ink-dim);font-variant-numeric:tabular-nums}.recap-pts{font-variant-numeric:tabular-nums;font-weight:700}.recap-pts.best{color:var(--accent)}.end-actions{flex-direction:column;align-items:center;gap:.5rem;display:flex}.topbar{justify-content:space-between;width:min(30rem,100vw - 2.5rem);font-size:.85rem;font-weight:600;display:flex;position:absolute;top:1.1rem;left:50%;transform:translate(-50%)}.round-chip,.score-chip{background:var(--surface);border:1px solid var(--surface-border);-webkit-backdrop-filter:blur(10px);font-variant-numeric:tabular-nums;border-radius:999px;padding:.35rem .9rem}.round-chip em{color:var(--ink-dim);font-style:normal}.stage.round{padding-top:4.5rem;position:relative}.cover-wrap{aspect-ratio:1;width:min(58vw,15rem);position:relative}.cover{object-fit:cover;width:100%;height:100%;box-shadow:0 24px 60px -12px #000000b3, 0 0 80px -20px color-mix(in srgb, var(--c1) 55%, transparent);-webkit-user-select:none;user-select:none;border-radius:1.4rem}.beat-ring{--beat:.5s;border:2px solid color-mix(in srgb, var(--accent) 70%, transparent);animation:beat var(--beat) ease-out infinite;pointer-events:none;border-radius:1.9rem;position:absolute;inset:-.55rem}@keyframes beat{0%{opacity:.9;transform:scale(1)}to{opacity:0;transform:scale(1.07)}}.meta{flex-direction:column;gap:.15rem;display:flex}.title{letter-spacing:-.01em;max-width:26rem;font-size:1.25rem;font-weight:700}.artist{color:var(--ink-dim);font-size:.95rem}.controls{flex-direction:column;align-items:center;gap:1rem;width:100%;margin-top:.25rem;display:flex}.controls.locked{opacity:.45}.bpm-readout{font-variant-numeric:tabular-nums;align-items:baseline;gap:.4rem;display:flex}.bpm-readout span{letter-spacing:-.03em;background:linear-gradient(120deg, var(--accent), var(--accent2));color:#0000;filter:drop-shadow(0 1px 2px #05050ae6)drop-shadow(0 4px 18px #05050a8c);-webkit-background-clip:text;background-clip:text;font-size:3.2rem;font-weight:800;line-height:1}.bpm-readout small{letter-spacing:.18em;color:var(--ink-dim);font-size:.9rem;font-weight:700}.slider-row{align-items:center;gap:.8rem;width:100%;display:flex}input[type=range]{appearance:none;background:linear-gradient(90deg, var(--c1), var(--c2));cursor:pointer;border-radius:999px;outline:none;flex:1;height:.45rem}input[type=range]::-webkit-slider-thumb{appearance:none;width:1.7rem;height:1.7rem;box-shadow:0 2px 12px #00000080, 0 0 0 5px color-mix(in srgb, var(--accent) 30%, transparent);background:#fff;border:none;border-radius:50%;transition:box-shadow .2s}input[type=range]::-webkit-slider-thumb:hover{box-shadow:0 2px 12px #00000080, 0 0 0 8px color-mix(in srgb, var(--accent) 40%, transparent)}input[type=range]::-moz-range-thumb{width:1.7rem;height:1.7rem;box-shadow:0 2px 12px #00000080, 0 0 0 5px color-mix(in srgb, var(--accent) 30%, transparent);background:#fff;border:none;border-radius:50%}input[type=range]::-moz-range-track{background:linear-gradient(90deg, var(--c1), var(--c2));border-radius:999px;height:.45rem}.reveal{background:var(--surface);border:1px solid var(--surface-border);-webkit-backdrop-filter:blur(16px);border-radius:1.25rem;flex-direction:column;align-items:center;gap:.9rem;width:100%;padding:1.25rem;animation:.35s rise;display:flex}@keyframes rise{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}.tier{background:linear-gradient(120deg, var(--accent), var(--accent2));color:#0000;filter:drop-shadow(0 1px 2px #05050acc);-webkit-background-clip:text;background-clip:text;font-size:1.3rem;font-weight:800}.reveal-grid{grid-template-columns:repeat(3,1fr);gap:.5rem;width:100%;display:grid}.reveal-grid div{flex-direction:column;gap:.2rem;display:flex}.reveal-grid small{text-transform:uppercase;letter-spacing:.12em;color:var(--ink-dim);font-size:.68rem}.reveal-grid strong{font-variant-numeric:tabular-nums;font-size:1.5rem;font-weight:800}.reveal-grid .points{color:var(--accent)}.reveal-note{color:var(--ink-dim);font-size:.78rem}.spinner{border:3px solid var(--surface-border);border-top-color:var(--accent);border-radius:50%;width:3rem;height:3rem;animation:.8s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.loading-label{color:var(--ink-dim)}.error{color:#ff8f8f;max-width:22rem;line-height:1.5}@media (prefers-reduced-motion:reduce){.bg-img,.beat-ring{animation:none}}
