From d3aefe1efd46205bdc95b0312beabb0b1ee5ef75 Mon Sep 17 00:00:00 2001 From: BeatifyBot Date: Sun, 23 Aug 2026 15:09:47 +0200 Subject: [PATCH] Give the year slider something to aim at MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Closes #2344. The track carried no landmarks — 76 years of blank rail. Decade marks now sit under it, derived from the live span. The issue's own framing was wrong and is corrected in a comment there. It said roughly four years per thumb-pixel; measured against the real range, 1950-2026 on a ~300px track is 0.25 years per pixel, so an 8px thumb movement covers about two years. Out by a factor of sixteen. The problem is orientation, not precision. There was no way to see where 1985 sits, so the interaction was drag, read the number, drag again — with twelve seconds on the clock, in a dim room, one-handed. A mark to aim at puts the first movement close and leaves the +-1/+-5 buttons doing what they were designed for. Derived rather than pinned. #2337 made the bounds move: applyYearRange() sets min/max from the playlist in play, so marks nailed to fixed percentages would drift the moment a playlist reaches past the default. The scale is rebuilt from the same span, in the same function, so the bounds and the marks cannot disagree. Three details worth the extra lines: A range thumb's centre travels from thumbWidth/2 to width - thumbWidth/2 and never reaches the edge, so marks are laid out inside that inset. One at a true 100% would sit past the highest year the slider can select. The step widens past eight marks rather than letting labels collide. The default span lands on eight decades, about 35px apart at 10px type. Labels are two digits with an apostrophe — language-neutral, so no translation is needed, and narrow enough that eight fit. A span crossing a century would render '00 twice, so the short form is used only while it stays unambiguous and four digits take over otherwise. 7 tests, four of which fail against the unfixed code. Bundle and CSS rebuilt, 18 artifacts match. 2058 unit tests green. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01LYnmkDxHC2drccP1XFpJN4 --- custom_components/beatify/www/css/styles.css | 26 +++- .../beatify/www/css/styles.min.css | 2 +- .../beatify/www/css/styles.min.css.map | 4 +- .../beatify/www/js/player-game.js | 68 +++++++++++ .../beatify/www/js/player.bundle.min.js | 8 +- custom_components/beatify/www/player.html | 6 + tests/unit/test_year_scale_marks_2344.py | 114 ++++++++++++++++++ 7 files changed, 220 insertions(+), 8 deletions(-) create mode 100644 tests/unit/test_year_scale_marks_2344.py diff --git a/custom_components/beatify/www/css/styles.css b/custom_components/beatify/www/css/styles.css index e46b02bd..e25923ee 100644 --- a/custom_components/beatify/www/css/styles.css +++ b/custom_components/beatify/www/css/styles.css @@ -12645,7 +12645,31 @@ body.is-ingame .player-header { display: none; } transform: translate(-50%, -50%); } .slider-arcade { gap: 8px; } /* tighten gap so 5 children fit on narrow screens */ -.slider-arcade-track { flex: 1; display: flex; align-items: center; } +/* #2344: the track holds the input and the decade scale stacked, so the + marks line up with the thumb's travel rather than with the box. */ +.slider-arcade-track { flex: 1; display: flex; flex-direction: column; align-items: stretch; gap: 4px; } +.year-scale { + position: relative; + height: 13px; + /* Reserve the thumb's half-width on both sides: a range thumb's centre + never reaches the very edge, so a mark at 100% would sit past the + furthest year the slider can actually select. */ + margin: 0 2px; + pointer-events: none; +} +.year-scale span { + position: absolute; + top: 0; + transform: translateX(-50%); + font-size: 10px; + font-weight: 600; + letter-spacing: 0.02em; + color: var(--color-text-muted, rgba(255, 255, 255, 0.42)); + font-variant-numeric: tabular-nums; + white-space: nowrap; + user-select: none; +} +.slider-arcade.slider-arcade--locked .year-scale { opacity: 0.5; } .year-slider-arcade { -webkit-appearance: none; appearance: none; diff --git a/custom_components/beatify/www/css/styles.min.css b/custom_components/beatify/www/css/styles.min.css index 359d28bb..54cdde6d 100644 --- a/custom_components/beatify/www/css/styles.min.css +++ b/custom_components/beatify/www/css/styles.min.css @@ -1,2 +1,2 @@ -:root{--color-bg-primary: #0a0a12;--color-bg-surface: rgba(255, 255, 255, .05);--color-bg-light: #f5f5f5;--color-bg-white: #ffffff;--color-bg-card: #f9fafb;--color-bg-card-alt: #f3f4f6;--color-accent-primary: #ff2d6a;--color-accent-secondary: #00f5ff;--color-accent-brand: #6366f1;--color-accent-brand-hover: #4f46e5;--color-accent-blue: #3b82f6;--color-accent-blue-hover: #2563eb;--color-success: #10b981;--color-success-hover: #059669;--color-success-light: #d1fae5;--color-success-alt: #22c55e;--color-success-neon: #39ff14;--color-warning: #f59e0b;--color-warning-dark: #d97706;--color-warning-light: #fef3c7;--color-warning-alt: #ff6600;--color-error: #ef4444;--color-error-dark: #dc2626;--color-error-light: #fee2e2;--color-error-neon: #ff0040;--color-purple-primary: #8b5cf6;--color-purple-secondary: #7c3aed;--color-neon-purple: #9d4edd;--color-success-bg: rgba(16, 185, 129, .15);--color-accent-brand-bg: rgba(99, 102, 241, .15);--color-error-bg: rgba(239, 68, 68, .15);--color-text-primary: #1f2937;--color-text-secondary: #374151;--color-text-muted: #6b7280;--color-text-light: #9ca3af;--color-text-white: #ffffff;--color-text-dark: #1a1a1a;--color-text-heading: #444444;--color-text-neon-muted: #b3b3c2;--color-border-light: #e5e7eb;--color-border-medium: #d1d5db;--color-border-dark: #333333;--color-border-neon: rgba(255, 255, 255, .1);--color-dark-surface: rgba(255, 255, 255, .05);--color-dark-surface-hover: rgba(255, 255, 255, .08);--color-dark-card: rgba(255, 255, 255, .03);--color-surface-dark: #1a1a2e;--space-xs: 4px;--space-sm: 8px;--space-md: 16px;--space-lg: 24px;--space-xl: 32px;--space-2xl: 48px;--font-display: "Outfit", system-ui, sans-serif;--font-body: "Inter", system-ui, sans-serif;--font-system: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, sans-serif;--font-mono: monospace;--font-size-xs: 10px;--font-size-sm: 12px;--font-size-base: 14px;--font-size-md: 16px;--font-size-lg: 18px;--font-size-xl: 20px;--font-size-2xl: 24px;--font-size-3xl: 28px;--font-size-4xl: 32px;--font-size-year: 56px;--font-size-timer: 64px;--font-size-hero: 72px;--font-weight-normal: 400;--font-weight-medium: 500;--font-weight-semibold: 600;--font-weight-bold: 700;--font-weight-extrabold: 800;--glow-primary: 0 0 20px var(--color-accent-primary);--glow-secondary: 0 0 20px var(--color-accent-secondary);--glow-success: 0 0 20px var(--color-success-neon);--glow-warning: 0 0 20px var(--color-warning);--glow-error: 0 0 20px var(--color-error);--shadow-sm: 0 2px 4px rgba(0, 0, 0, .1);--shadow-md: 0 2px 8px rgba(0, 0, 0, .1);--shadow-lg: 0 4px 16px rgba(0, 0, 0, .1);--shadow-xl: 0 8px 32px rgba(0, 0, 0, .15);--radius-sm: 4px;--radius-md: 8px;--radius-lg: 12px;--radius-xl: 16px;--radius-2xl: 20px;--radius-full: 9999px;--transition-fast: .15s ease;--transition-normal: .3s ease;--transition-slow: .5s ease;--z-control-bar: 100;--z-reaction-bar: 101;--z-modal: 1000;--z-overlay: 1100;--z-toast: 1200}*{box-sizing:border-box;margin:0;padding:0}body{font-family:var(--font-system);background:var(--color-bg-light);color:var(--color-text-secondary);line-height:1.5;padding:var(--space-sm);min-height:100vh;overscroll-behavior:none}.wordmark{font-family:"Outfit",var(--font-system);font-weight:900;font-size:var(--font-size-hero);letter-spacing:-.02em;line-height:1}.wordmark-beat{color:var(--color-text-white)}body:not(.theme-dark) .wordmark-beat{color:var(--color-text-primary)}.wordmark-gradient{background:linear-gradient(90deg,var(--color-accent-primary),var(--color-accent-secondary));-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;color:transparent}.wordmark-hero{text-shadow:0 0 40px rgba(255,45,106,.5)}.logo-loading{animation:logo-pulse 2s ease-in-out infinite}@keyframes logo-pulse{0%,to{opacity:1}50%{opacity:.7}}@media(prefers-reduced-motion:reduce){.logo-loading{animation:none}}.vinyl-starting{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;padding:24px;box-sizing:border-box}.vinyl-row{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:clamp(20px,5vw,56px);max-width:100%}.vinyl-loader{flex:0 0 auto;width:clamp(130px,28vw,260px);height:clamp(130px,28vw,260px);display:flex;align-items:center;justify-content:center;border-radius:50%;background:radial-gradient(circle at center,rgba(255,45,106,.18) 0%,rgba(99,102,241,.1) 45%,transparent 70%)}.vinyl-disc{position:relative;width:78%;height:78%;border-radius:50%;background:conic-gradient(from 0deg,var(--color-accent-primary),var(--color-accent-brand),var(--color-accent-secondary),var(--color-accent-brand),var(--color-accent-primary));box-shadow:0 0 40px #ff2d6a59,0 0 80px #00f5ff2e,inset 0 0 30px #00000073;animation:vinyl-spin 3s linear infinite}.vinyl-ring{position:absolute;top:18%;left:18%;width:64%;height:64%;border-radius:50%;border:1.5px dashed rgba(255,255,255,.25)}.vinyl-hole{position:absolute;top:50%;left:50%;width:14%;height:14%;border-radius:50%;background:var(--color-bg-primary);transform:translate(-50%,-50%);box-shadow:0 0 0 4px #0006}.vinyl-copy{flex:1 1 280px;min-width:0;width:min(100%,460px);max-width:460px;text-align:left}.vinyl-copy .vinyl-headline,.vinyl-copy .vinyl-sub,.vinyl-copy .wordmark-hero{overflow-wrap:break-word}.vinyl-copy .wordmark-hero{font-size:clamp(2rem,5vw,3.25rem);margin:0 0 .5em}.vinyl-headline{font-size:clamp(1.5rem,4vw,2.5rem);font-weight:800;color:var(--color-text-white);margin:0 0 .4em}.vinyl-sub{font-size:clamp(.95rem,2.2vw,1.2rem);line-height:1.5;color:var(--color-text-muted);margin:0 0 1.2em}.vinyl-dots{display:flex;gap:12px}.vinyl-dots span{width:12px;height:12px;border-radius:50%;background:var(--color-accent-primary);opacity:.3;animation:vinyl-dot-pulse 1.4s ease-in-out infinite}.vinyl-dots span:nth-child(2){animation-delay:.2s}.vinyl-dots span:nth-child(3){animation-delay:.4s}@keyframes vinyl-spin{to{transform:rotate(360deg)}}@keyframes vinyl-dot-pulse{0%,to{opacity:.3;transform:scale(1)}40%{opacity:1;transform:scale(1.25)}}@media(max-width:640px){.vinyl-copy{text-align:center}.vinyl-dots{justify-content:center}}@media(prefers-reduced-motion:reduce){.vinyl-disc{animation:none}.vinyl-dots span{animation:none;opacity:.7}}header{margin-bottom:var(--space-lg)}header h1{font-size:var(--font-size-2xl);font-weight:var(--font-weight-semibold);color:var(--color-text-dark)}.admin-header{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md, 16px)}.admin-header h1{margin:0}.player-header{display:flex;align-items:center;justify-content:center;padding:var(--space-md) var(--space-md) 0}.player-header h1{margin:0}body.theme-dark main.admin-content{max-width:800px;margin:0 auto;padding:var(--space-md, 16px)}.analytics-icon-link{display:flex;align-items:center;justify-content:center;width:44px;height:44px;border-radius:50%;text-decoration:none;font-size:1.5rem;transition:background-color .2s ease,transform .2s ease}body.theme-dark .analytics-icon-link{background:#00f5ff1a}body.theme-dark .analytics-icon-link:hover,body.theme-dark .analytics-icon-link:focus{background:#00f5ff33;transform:scale(1.1);outline:none}.admin-header-actions{display:flex;align-items:center;gap:var(--space-xs, 8px)}.pwa-install-btn{display:flex;align-items:center;justify-content:center;width:44px;height:44px;border-radius:50%;border:none;background:#00f5ff1a;font-size:1.5rem;cursor:pointer;transition:background-color .2s ease,transform .2s ease;padding:0}.pwa-install-btn:hover,.pwa-install-btn:focus{background:#00f5ff33;transform:scale(1.1);outline:none}.reset-icon-btn{display:flex;align-items:center;justify-content:center;width:44px;height:44px;border-radius:50%;border:none;background:#ff2d6a1a;color:var(--color-text-white);font-size:1.5rem;cursor:pointer;padding:0;transition:background-color .2s ease,transform .2s ease}.reset-icon-btn:hover,.reset-icon-btn:focus{background:#ff2d6a40;transform:scale(1.1);outline:none}.pwa-ios-hint{position:fixed;bottom:0;left:0;right:0;z-index:1000;display:flex;justify-content:center;padding:var(--space-md, 16px);animation:slideUp .3s ease}.pwa-ios-hint.hidden{display:none}.pwa-ios-hint-content{position:relative;background:var(--color-bg-elevated, #2a2a3e);border-radius:var(--radius-lg, 12px);padding:var(--space-md, 16px) var(--space-lg, 24px);color:var(--color-text, #fff);text-align:center;max-width:340px;box-shadow:0 -2px 20px #0000004d}.pwa-ios-hint-close{position:absolute;top:8px;right:12px;background:none;border:none;color:var(--color-text, #fff);font-size:1.4rem;cursor:pointer;opacity:.6}.pwa-ios-hint-close:hover{opacity:1}.pwa-ios-share-icon{font-size:1.2rem}@keyframes slideUp{0%{transform:translateY(100%);opacity:0}to{transform:translateY(0);opacity:1}}.status-section,.card-section{background:var(--color-bg-white);border-radius:var(--radius-lg);padding:var(--space-sm) var(--space-md);margin-bottom:var(--space-md);box-shadow:var(--shadow-sm);border:1px solid transparent;transition:transform .2s ease,box-shadow .2s ease,border-color .2s ease}.card-section:hover{transform:translateY(-2px);box-shadow:0 4px 12px #00000026}.card-section .section-header{display:flex;align-items:center;gap:var(--space-sm, 8px);margin-bottom:var(--space-sm);font-size:var(--font-size-md);font-weight:var(--font-weight-semibold);color:var(--color-text-heading)}.card-section .section-icon{font-size:1.25rem}.status-section h2,.card-section h2:not(.section-header){font-size:var(--font-size-md);font-weight:var(--font-weight-semibold);margin-bottom:var(--space-sm);color:var(--color-text-heading)}.status-connected{color:var(--color-success-alt);font-weight:var(--font-weight-medium)}.status-error{color:var(--color-error);font-weight:var(--font-weight-medium)}.status-warning{color:var(--color-warning);font-weight:var(--font-weight-medium)}.list-item{padding:var(--space-sm);border-bottom:1px solid var(--color-border-light);display:flex;justify-content:space-between;align-items:center;gap:var(--space-sm);transition:background-color .2s ease}.list-item:last-child{border-bottom:none}body.theme-dark .list-item{border-bottom-color:var(--surface-border, #333)}body.theme-dark .list-item:hover{background:#9d4edd1a}.list-item .name{font-weight:var(--font-weight-medium);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.list-item .meta{color:var(--color-text-muted);font-size:var(--font-size-base);flex-shrink:0}.list-item.is-invalid{background:var(--color-error-light);border-left:3px solid var(--color-error)}.playlist-item.is-disabled{opacity:.5;cursor:not-allowed}.playlist-item.is-disabled .checkbox-label,.playlist-item.is-disabled .playlist-checkbox{cursor:not-allowed}.playlist-item.is-selectable{cursor:pointer}.playlist-item.is-selected,.media-player-item.is-selected{background:#eff6ff;border-left:3px solid var(--color-accent-blue)}body.theme-dark .playlist-item.is-selected,body.theme-dark .media-player-item.is-selected{background:#00f5ff1a;border-left:3px solid var(--color-accent-secondary)}.seasonal-suggestion{position:relative;margin-bottom:12px;padding:14px 16px;border-radius:14px;background:linear-gradient(135deg,#ff2d6a24,#6366f124),#12121c;border:1px solid rgba(255,45,106,.45);box-shadow:0 0 0 1px #00f5ff14,0 6px 18px #00000059}.seasonal-suggestion__badge{display:inline-block;font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--color-accent-secondary, #00f5ff);background:#00f5ff1a;border:1px solid rgba(0,245,255,.3);border-radius:999px;padding:3px 10px;margin-bottom:10px}.seasonal-suggestion__title{font-size:16px;font-weight:700;color:#fff;margin-bottom:4px}.seasonal-suggestion__reason{font-size:13px;line-height:1.4;color:#ffffffb8;margin-bottom:12px}.seasonal-suggestion__add{display:inline-block}.seasonal-suggestion__dismiss{position:absolute;top:8px;right:10px;width:28px;height:28px;line-height:1;font-size:20px;color:#fff9;background:transparent;border:none;border-radius:8px;cursor:pointer}.seasonal-suggestion__dismiss:after{content:"";position:absolute;top:50%;left:50%;width:44px;height:44px;transform:translate(-50%,-50%)}.seasonal-suggestion__dismiss:hover{color:#fff;background:#ffffff14}body:not(.theme-dark) .seasonal-suggestion{background:linear-gradient(135deg,#ff2d6a14,#6366f114),#fff;border:1px solid rgba(255,45,106,.35);box-shadow:0 4px 14px #00000014}body:not(.theme-dark) .seasonal-suggestion__title{color:#111}body:not(.theme-dark) .seasonal-suggestion__reason{color:#555}body:not(.theme-dark) .seasonal-suggestion__dismiss{color:#888}.playlist-checkbox{position:absolute;opacity:0;width:0;height:0;pointer-events:none}.checkbox-label{display:flex;align-items:center;flex:1;min-width:0;cursor:pointer;padding-left:var(--space-xs)}.playlist-name{font-weight:var(--font-weight-medium);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.selection-summary{padding:var(--space-sm) var(--space-md);background:#f0fdf4;border-radius:var(--radius-md);margin-top:var(--space-sm);font-weight:var(--font-weight-medium);color:#166534}.selection-summary #selected-count,.selection-summary #total-songs{font-family:Outfit,sans-serif;font-weight:700}body.theme-dark .selection-summary{background:#00f5ff1a;border:1px solid var(--color-accent-secondary);color:var(--color-text-white)}body.theme-dark .selection-summary #selected-count,body.theme-dark .selection-summary #total-songs{color:var(--color-accent-secondary);font-size:1.1em}.media-player-item.is-selectable{cursor:pointer}.media-player-radio{position:absolute;opacity:0;width:0;height:0;pointer-events:none}.radio-label{display:flex;align-items:center;flex:1;min-width:0;cursor:pointer;padding-left:var(--space-xs)}.player-name{font-weight:var(--font-weight-medium);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.state-dot{display:inline-block;width:var(--space-sm);height:var(--space-sm);border-radius:50%;margin-right:6px}.state-dot.state-playing{background:var(--color-success-alt)}.state-dot.state-idle,.state-dot.state-paused,.state-dot.state-off{background:var(--color-text-light)}button,.btn{min-width:44px;min-height:44px;padding:var(--space-sm) var(--space-lg);font-size:var(--font-size-md);font-weight:var(--font-weight-medium);border:none;border-radius:var(--radius-md);cursor:pointer;transition:background-color var(--transition-fast),opacity var(--transition-fast);display:inline-flex;align-items:center;justify-content:center;gap:var(--space-sm);touch-action:manipulation}.form-input{width:100%;padding:var(--space-sm) var(--space-md);font-size:var(--font-size-sm);border:1px solid var(--color-border-subtle);border-radius:var(--radius-md);background:var(--color-bg-secondary);color:var(--color-text-primary);margin-bottom:var(--space-sm);box-sizing:border-box}body.theme-dark .form-input{color:#e2e8f0;background:#ffffff1a;border-color:#ffffff26}.btn-primary{background:var(--color-accent-primary);color:#fff}.btn-primary:hover{background:#e0245c}.btn-primary:disabled{background:var(--color-text-light);cursor:not-allowed;opacity:.55}body.theme-dark .btn-primary{color:#fff}.btn-secondary{background:var(--color-border-light);color:var(--color-text-secondary)}.btn-secondary:hover{background:var(--color-border-medium)}.btn-ghost{background:transparent;color:var(--color-accent-primary);border:1.5px solid var(--color-accent-primary)}.btn-ghost:hover{background:#ff2d6a14}.btn-ghost:disabled{opacity:.45;cursor:not-allowed}.btn-outline{background:transparent;color:var(--color-text-secondary);border:1.5px solid var(--color-border-medium)}.btn-outline:hover{background:var(--color-border-light);border-color:var(--color-text-secondary)}.btn-outline:disabled{opacity:.45;cursor:not-allowed}.btn-danger{background:#dc2626;color:#fff}.btn-danger:hover{background:#b91c1c}a{color:var(--color-accent-blue);text-decoration:none}a:hover{text-decoration:underline}.empty-state{text-align:center;padding:var(--space-lg);color:var(--color-text-muted)}.empty-state p{margin-bottom:var(--space-sm)}footer{margin-top:var(--space-lg);text-align:center;color:var(--color-text-light);font-size:var(--font-size-sm)}.hidden{display:none!important}body.theme-dark{background:var(--color-bg-primary);color:var(--color-text-white)}body.theme-dark .player-container{background:var(--color-bg-primary)}body.theme-dark .card-section{background:var(--color-surface-dark);border:1px solid var(--color-border-neon);color:var(--color-text-white)}.admin-content .card-section{margin-bottom:var(--space-md)}body.theme-dark .card-section:hover{box-shadow:0 4px 20px #9d4edd4d}body.theme-dark .card-section h2,body.theme-dark .card-section .section-header,body.theme-dark .card-section p,body.theme-dark .card-section .name,body.theme-dark .card-section .player-name,body.theme-dark .card-section .playlist-name,body.theme-dark .card-section .list-item,body.theme-dark .card-section .radio-label,body.theme-dark .card-section .checkbox-label,body.theme-dark .card-section strong,body.theme-dark .card-section span{color:var(--color-text-white)}body.theme-dark .card-section .meta{color:var(--color-text-neon-muted)}body.theme-dark .game-info{background:#ffffff0d;border:1px solid var(--color-neon-purple);border-radius:var(--radius-md);color:var(--color-text-white)}body.theme-dark .game-info p,body.theme-dark .game-info strong,body.theme-dark .game-info span{color:var(--color-text-white)}body.theme-dark .btn-primary span,body.theme-dark .btn-secondary span{color:inherit}body.theme-dark .lang-btn:not(.lang-btn--active),body.theme-dark .timer-btn:not(.timer-btn--active),body.theme-dark .difficulty-btn:not(.difficulty-btn--active){color:var(--color-text-primary, #1a1a2e)}body.theme-dark .lang-btn:not(.lang-btn--active) span,body.theme-dark .timer-btn:not(.timer-btn--active) span,body.theme-dark .difficulty-btn:not(.difficulty-btn--active) span{color:var(--color-text-primary, #1a1a2e)}.language-selector{display:flex;justify-content:center;gap:var(--space-sm)}.lang-btn{display:flex;align-items:center;justify-content:center;gap:var(--space-xs);padding:var(--space-sm) var(--space-lg);border:2px solid var(--color-border-medium);border-radius:var(--radius-md);background:var(--color-bg-white);color:var(--color-text-primary);font-size:var(--font-size-base);font-weight:500;cursor:pointer;transition:all .15s ease}.lang-btn:hover{border-color:var(--color-accent-brand);background:var(--color-bg-card-alt)}.lang-btn--active{border-color:var(--color-accent-brand);background:var(--color-accent-brand);color:var(--color-text-white)}.lang-btn--active:hover{background:var(--color-accent-brand-hover)}.lang-flag{font-size:1.25em}.lang-name{font-weight:600}.timer-selector{display:flex;justify-content:center;gap:var(--space-sm)}.timer-btn{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-2xs);padding:var(--space-sm) var(--space-md);min-width:90px;border:2px solid var(--color-border-neon);border-radius:var(--radius-md);background:var(--color-bg-card);color:var(--color-text-secondary);font-family:inherit;cursor:pointer;transition:all .15s ease}.timer-btn:hover{border-color:var(--color-accent-brand);background:var(--color-bg-card-alt)}.timer-btn:focus{outline:none;border-color:var(--color-accent-brand);box-shadow:0 0 0 3px #1ed7604d}.timer-btn:focus-visible{outline:2px solid var(--color-accent-brand);outline-offset:2px}.timer-btn:disabled{opacity:.5;cursor:not-allowed;border-color:var(--color-border-neon);background:var(--color-bg-card)}.timer-btn:disabled:hover{border-color:var(--color-border-neon);background:var(--color-bg-card)}.timer-btn--active{border-color:var(--color-accent-brand);background:var(--color-accent-brand);color:var(--color-text-white)}.timer-btn--active:hover{background:var(--color-accent-brand-hover)}.timer-icon{font-size:1.5em}.timer-label{font-weight:600;font-size:.875rem}.timer-value{font-size:.75rem;opacity:.8}.timer-btn--active .timer-value{opacity:1}.difficulty-selector{display:flex;justify-content:center;gap:var(--space-sm)}.difficulty-btn{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-2xs);padding:var(--space-sm) var(--space-md);min-width:90px;border:2px solid var(--color-border-light);border-radius:var(--radius-md);background:var(--color-bg-card);color:var(--color-text-secondary);font-family:inherit;cursor:pointer;transition:all .15s ease}.difficulty-btn:hover{border-color:var(--color-accent-brand);background:var(--color-bg-card-alt)}.difficulty-btn:focus{outline:none;border-color:var(--color-accent-brand);box-shadow:0 0 0 3px #6366f14d}.difficulty-btn:focus-visible{outline:2px solid var(--color-accent-brand);outline-offset:2px}.difficulty-btn--active{border-color:var(--color-accent-brand);background:var(--color-accent-brand);color:var(--color-text-white)}.difficulty-btn--active:hover{background:var(--color-accent-brand-hover)}.difficulty-icon{font-size:1.5em}.difficulty-label{font-weight:600;font-size:.875rem}.difficulty-description{text-align:center;font-size:.8125rem;color:var(--color-text-muted);margin-top:var(--space-sm);line-height:1.5;max-width:400px;margin-left:auto;margin-right:auto}.toggle-option{display:flex;align-items:center;gap:var(--space-md);cursor:pointer;padding:var(--space-sm) 0}.toggle-option input[type=checkbox]{position:absolute;opacity:0;width:0;height:0}.toggle-switch{position:relative;width:48px;height:26px;background:var(--color-border);border-radius:13px;transition:background .2s ease;flex-shrink:0}.toggle-switch:after{content:"";position:absolute;top:3px;left:3px;width:20px;height:20px;background:#fff;border-radius:50%;transition:transform .2s ease}.toggle-option input:checked+.toggle-switch{background:var(--color-success)}.toggle-option input:checked+.toggle-switch:after{transform:translate(22px)}.toggle-option input:focus-visible+.toggle-switch{outline:2px solid var(--color-accent-primary);outline-offset:2px}.toggle-label{font-size:var(--font-size-md);font-weight:500;color:var(--color-text)}.option-description{font-size:var(--font-size-sm);color:var(--color-text-muted);margin:var(--space-xs) 0 0 0;padding-left:calc(48px + var(--space-md))}body.theme-dark .toggle-switch{background:var(--color-dark-border, #333)}.provider-selector{display:flex;justify-content:center;gap:var(--space-sm)}.provider-btn{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-2xs);padding:var(--space-sm) var(--space-md);min-width:100px;border:2px solid var(--color-border-light);border-radius:var(--radius-md);background:var(--color-bg-card);color:var(--color-text-secondary);font-family:inherit;cursor:pointer;transition:all .15s ease}.provider-btn:hover:not(.provider-btn--disabled){border-color:var(--color-accent-brand);background:var(--color-bg-card-alt)}.provider-btn:focus{outline:none;border-color:var(--color-accent-brand);box-shadow:0 0 0 3px #6366f14d}.provider-btn:focus-visible{outline:2px solid var(--color-accent-brand);outline-offset:2px}.provider-btn--active{border-color:var(--color-accent-brand);background:var(--color-accent-brand);color:var(--color-text-white)}.provider-btn--active:hover{background:var(--color-accent-brand-hover)}.provider-icon{font-size:1.5em}.provider-label{font-weight:600;font-size:.875rem}.playlist-coverage{font-size:.75rem;color:var(--color-text-muted)}.playlist-coverage--warning{color:var(--color-warning)}.playlist-coverage--none{color:var(--color-error)}.playlist-filter-bar{display:flex;flex-direction:column;gap:.75rem;padding:.75rem 0;margin-bottom:.5rem;border-bottom:1px solid var(--color-border)}.filter-dropdowns{display:flex;flex-wrap:wrap;gap:.5rem}.filter-dropdown{padding:.5rem 2rem .5rem .75rem;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md, 6px);font-size:.875rem;font-weight:500;color:var(--color-text-primary, #333);cursor:pointer;transition:all .15s ease;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23666' d='M2 4l4 4 4-4'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right .75rem center;min-width:120px}.filter-dropdown:hover{border-color:var(--color-primary, #6c5ce7)}.filter-dropdown:focus{outline:none;border-color:var(--color-primary, #6c5ce7);box-shadow:0 0 0 2px #6c5ce733}.filter-dropdown:not([value=""]):has(option:checked:not([value=""])){border-color:var(--color-primary, #6c5ce7);background-color:#6c5ce714}.filter-summary{display:flex;align-items:center;gap:.75rem;font-size:.8125rem}.filter-summary-text{color:var(--color-text-secondary, #666)}.filter-clear{padding:.25rem .5rem;background:transparent;border:1px solid var(--color-border);border-radius:var(--radius-sm, 4px);font-size:.75rem;color:var(--color-text-secondary, #666);cursor:pointer;transition:all .15s ease}.filter-clear:hover{background:var(--color-error, #e74c3c);border-color:var(--color-error, #e74c3c);color:#fff}body.theme-dark .filter-dropdown{background-color:#ffffff14;border-color:#ffffff26;color:#ffffffd9;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23999' d='M2 4l4 4 4-4'/%3E%3C/svg%3E")}body.theme-dark .filter-dropdown:hover,body.theme-dark .filter-dropdown:focus{border-color:#6c5ce799}body.theme-dark .filter-summary-text{color:#fff9}body.theme-dark .filter-clear{border-color:#fff3;color:#fff9}.filter-tag{display:inline-flex;align-items:center;gap:.25rem;padding:.4375rem .875rem;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-full);font-size:.8125rem;font-weight:600;color:var(--color-text-primary, #333);cursor:pointer;transition:all .15s ease;white-space:nowrap}.filter-tag .filter-count{font-size:.6875rem;opacity:.8}.playlist-tags{display:flex;flex-wrap:wrap;gap:.25rem;margin-top:.375rem}.playlist-tag{display:inline-block;padding:.1875rem .5rem;background:var(--color-primary-light, #e8e4f8);border:1px solid var(--color-primary-border, #c9bff2);border-radius:var(--radius-full);font-size:.6875rem;font-weight:500;color:var(--color-primary-dark, #5b4cad);max-width:6rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.playlist-tag--more{background:transparent;border-color:var(--color-primary-border, #c9bff2);color:var(--color-text-secondary, #666);font-style:italic}body.theme-dark .playlist-tag{background:#6c5ce733;border-color:#6c5ce766;color:#b8acf6}body.theme-dark .playlist-tag--more{background:transparent;color:#ffffff80}.difficulty-badge{display:inline-block;padding:.125rem .5rem;border-radius:var(--radius-full);font-size:.75rem;font-weight:600;margin-left:var(--space-xs)}.difficulty-badge--easy{background:var(--color-success-bg);color:var(--color-success);border:1px solid var(--color-success)}.difficulty-badge--normal{background:var(--color-accent-brand-bg);color:var(--color-accent-brand);border:1px solid var(--color-accent-brand)}.difficulty-badge--hard{background:var(--color-error-bg);color:var(--color-error);border:1px solid var(--color-error)}.supported-players-hint{font-size:.75rem;color:var(--color-text-muted);margin-top:var(--space-sm);padding-top:var(--space-sm);border-top:1px solid var(--color-border-light)}.supported-players-hint a{color:var(--color-accent-primary);text-decoration:none}.supported-players-hint a:hover{text-decoration:underline}body.theme-dark .supported-players-hint{color:var(--color-text-neon-muted);border-top-color:var(--color-border-neon)}.player-info{display:flex;flex-direction:column;gap:2px}.platform-badge{display:inline-flex;align-items:center;gap:4px;font-size:.625rem;font-weight:600;padding:2px 6px;border-radius:var(--radius-sm);text-transform:uppercase;letter-spacing:.025em;background:#80808026;color:var(--color-text-muted)}.platform-badge--music_assistant{background:#4caf5026;color:#4caf50}.platform-badge--sonos{background:#ff980026;color:#ff9800}.platform-badge--alexa_media,.platform-badge--alexa{background:#00a8e126;color:#00a8e1}body.theme-dark .platform-badge{background:#ffffff14}body.theme-dark .platform-badge--music_assistant{background:#4caf5033;color:#81c784}body.theme-dark .platform-badge--sonos{background:#ff980033;color:#ffb74d}body.theme-dark .platform-badge--alexa_media,body.theme-dark .platform-badge--alexa{background:#00a8e133;color:#4fc3f7}.no-players-message{text-align:center;padding:var(--space-lg)}.no-players-message h3{font-size:1.125rem;margin-bottom:var(--space-sm)}.no-players-message p{font-size:.875rem;color:var(--color-text-muted);margin-bottom:var(--space-sm)}.no-players-message .button-group{display:flex;flex-direction:column;gap:var(--space-sm);margin-top:var(--space-md)}.provider-chips{justify-content:flex-start}.provider-chips .chip{display:inline-flex;align-items:center;gap:6px}.provider-icon{font-size:1rem}.warning-box{background:var(--color-warning-bg);border:1px solid var(--color-warning);border-radius:var(--radius-sm);padding:var(--space-sm);margin-top:var(--space-sm);font-size:.875rem}.warning-box p{margin:0 0 var(--space-xs) 0}.warning-box p:last-child{margin-bottom:0}.warning-caveat{font-size:.8125rem;opacity:.85}#provider-hint{font-size:.8125rem;color:var(--color-text-muted);margin-top:var(--space-sm)}body.theme-dark #provider-hint{color:var(--color-text-neon-muted)}.chip--disabled,.provider-btn--disabled{opacity:.4;cursor:not-allowed;pointer-events:none}.hint-text{font-size:.75rem;color:var(--color-text-muted);margin:var(--space-xs) 0 0 calc(var(--space-md) + 24px);font-style:italic}body.theme-dark .hint-text{color:var(--color-text-neon-muted)}body.theme-dark .modal-content,body.theme-dark .modal-content h2,body.theme-dark .modal-content p{color:var(--color-text-primary)}body.theme-dark .modal-content .name-input{background:var(--color-bg-white);border-color:var(--color-border-medium);color:var(--color-text-primary)}body.theme-dark .modal-content .name-input::placeholder{color:var(--color-text-muted)}body.theme-dark .modal-content .name-input:focus{border-color:var(--color-accent-blue);box-shadow:0 0 0 3px #3b82f61a}.card{background:var(--color-dark-surface);border-radius:var(--radius-lg);padding:var(--space-md);border:1px solid var(--color-border-neon)}.card-glass{background:var(--color-dark-surface);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border:1px solid var(--color-border-neon);border-radius:var(--radius-lg)}.btn-neon{background:var(--color-accent-primary);color:var(--color-text-white);border:none;border-radius:var(--radius-md);padding:var(--space-md) var(--space-lg);font-weight:var(--font-weight-semibold);cursor:pointer;transition:all var(--transition-fast)}.btn-neon:hover{background:#ff4080}.btn-neon:active{transform:scale(.98)}.btn-glow{transition:box-shadow var(--transition-fast),transform var(--transition-fast)}.btn-glow:hover{box-shadow:var(--glow-primary)}.btn-glow:active{transform:scale(.98);box-shadow:var(--glow-primary)}.btn-glow-secondary:hover{box-shadow:var(--glow-secondary)}.btn-glow-success:hover{box-shadow:var(--glow-success)}.text-glow{text-shadow:0 0 10px var(--color-accent-primary),0 0 20px var(--color-accent-primary),0 0 30px var(--color-accent-primary)}.text-glow-cyan{text-shadow:0 0 10px var(--color-accent-secondary),0 0 20px var(--color-accent-secondary),0 0 30px var(--color-accent-secondary)}.text-glow-success{text-shadow:0 0 10px var(--color-success-neon),0 0 20px var(--color-success-neon),0 0 30px var(--color-success-neon)}.text-neon-white{color:var(--color-text-white)}.text-neon-muted{color:var(--color-text-neon-muted)}.text-neon-primary{color:var(--color-accent-primary)}.text-neon-secondary{color:var(--color-accent-secondary)}body.theme-dark .player-container h1,body.theme-dark .lobby-header h1,body.theme-dark .game-container h1,body.theme-dark .reveal-container h1,body.theme-dark .end-container h1{color:var(--color-text-white)}body.theme-dark .player-container p,body.theme-dark .hint,body.theme-dark .player-count{color:var(--color-text-neon-muted)}body.theme-dark .join-form>p{color:var(--color-text-neon-muted)}body.theme-dark .player-card{background:var(--color-dark-surface);border-color:var(--color-border-neon)}body.theme-dark .player-card--you{background:#ff2d6a1a;border-color:var(--color-accent-primary)}body.theme-dark .player-name{color:var(--color-text-white)}body.theme-dark .you-badge{color:var(--color-accent-primary)}body.theme-dark .name-input{background:var(--color-dark-surface);border-color:var(--color-border-neon);color:var(--color-text-white)}body.theme-dark .name-input:focus{border-color:var(--color-accent-primary);box-shadow:0 0 0 3px #ff2d6a33}body.theme-dark .name-input::placeholder{color:var(--color-text-neon-muted)}body.theme-dark .join-btn{background:var(--color-accent-primary);color:var(--color-text-white)}body.theme-dark .join-btn:hover{box-shadow:var(--glow-primary)}body.theme-dark .qr-share-area{background:var(--color-dark-surface);border:1px solid var(--color-border-neon)}body.theme-dark .qr-hint{color:var(--color-text-neon-muted)}body.theme-dark .qr-share-header{color:var(--color-text-white)}body.theme-dark .qr-share-chevron,body.theme-dark .lobby-status{color:var(--color-text-neon-muted)}body.theme-dark .game-container{background:var(--color-bg-primary)}body.theme-dark .round-indicator-text,body.theme-dark .timer{color:var(--color-text-white)}body.theme-dark .timer--warning{color:var(--color-warning);text-shadow:0 0 10px var(--color-warning);animation:timer-pulse-subtle 1s ease-in-out infinite}body.theme-dark .timer--critical{color:var(--color-error-neon);text-shadow:0 0 15px var(--color-error-neon);animation:timer-pulse-intense .5s ease-in-out infinite}body.theme-dark .player-avatar{background:var(--color-dark-surface-hover);color:var(--color-text-neon-muted)}body.theme-dark .player-indicator.is-submitted .player-avatar{background:var(--color-success-neon);color:var(--color-bg-primary);box-shadow:var(--glow-success)}body.theme-dark #selected-year{color:var(--color-text-white)}body.theme-dark .slider-label{color:var(--color-text-neon-muted)}body.theme-dark .year-slider{background:var(--color-dark-surface)}body.theme-dark .year-slider::-webkit-slider-thumb{background:var(--color-accent-primary);box-shadow:var(--glow-primary)}body.theme-dark .year-slider::-moz-range-thumb{background:var(--color-accent-primary);box-shadow:var(--glow-primary)}body.theme-dark .submit-btn{background:var(--color-accent-primary)}body.theme-dark .submit-btn:hover{box-shadow:var(--glow-primary)}body.theme-dark .submitted-confirmation{background:var(--color-success-neon);color:var(--color-bg-primary);box-shadow:var(--glow-success)}body.theme-dark .reveal-container{background:var(--color-bg-primary)}body.theme-dark .reveal-round-info,body.theme-dark .correct-year-label{color:var(--color-text-neon-muted)}body.theme-dark .correct-year{color:var(--color-success-neon);text-shadow:0 0 10px var(--color-success-neon),0 0 20px var(--color-success-neon)}body.theme-dark .song-title{color:var(--color-text-white)}body.theme-dark .song-artist{color:var(--color-text-neon-muted)}body.theme-dark .fun-fact-container{background:#ff660026;border:1px solid rgba(255,102,0,.3)}body.theme-dark .fun-fact-text{color:var(--color-warning)}body.theme-dark .reveal-emotion--exact{color:var(--color-success-neon);text-shadow:0 0 20px var(--color-success-neon),0 0 40px var(--color-success-neon)}body.theme-dark .reveal-emotion--close{color:var(--color-warning);text-shadow:0 0 15px var(--color-warning)}body.theme-dark .reveal-emotion--wrong{color:var(--color-text-neon-muted)}body.theme-dark .reveal-emotion--missed{color:var(--color-text-neon-muted);opacity:.6}body.theme-dark .personal-result{background:var(--color-dark-surface);border:1px solid var(--color-border-neon)}body.theme-dark .result-header,body.theme-dark .result-label{color:var(--color-text-neon-muted)}body.theme-dark .result-value{color:var(--color-text-white)}body.theme-dark .result-score{color:var(--color-accent-secondary);text-shadow:0 0 10px var(--color-accent-secondary)}body.theme-dark .leaderboard{background:var(--color-dark-surface);border:1px solid var(--color-border-neon);box-shadow:none}body.theme-dark .leaderboard-header{background:var(--color-dark-card);border-color:var(--color-border-neon)}body.theme-dark .leaderboard-title{color:var(--color-text-white)}body.theme-dark .leaderboard-entry{border-color:var(--color-border-neon)}body.theme-dark .leaderboard-entry.is-current{background:#ff2d6a1a;border-left-color:var(--color-accent-primary)}body.theme-dark .entry-rank{color:var(--color-text-neon-muted)}body.theme-dark .entry-name{color:var(--color-text-white)}body.theme-dark .entry-score{color:var(--color-accent-secondary)}body.theme-dark .leaderboard-entry--climbing{animation:leaderboard-climb-dark .4s ease-out}body.theme-dark .leaderboard-entry--falling{animation:leaderboard-fall-dark .4s ease-out}@keyframes leaderboard-climb-dark{0%{transform:translateY(10px);opacity:.7;background:#00ff8826}to{transform:translateY(0);opacity:1;background:transparent}}@keyframes leaderboard-fall-dark{0%{transform:translateY(-10px);opacity:.7;background:#ff2d6a26}to{transform:translateY(0);opacity:1;background:transparent}}body.theme-dark .rank-up{color:var(--color-success-neon);text-shadow:0 0 5px var(--color-success-neon)}body.theme-dark .rank-down{color:var(--color-error-neon);text-shadow:0 0 5px var(--color-error-neon)}body.theme-dark .streak-indicator{color:var(--color-warning)}body.theme-dark .streak-indicator--hot{text-shadow:0 0 10px var(--color-warning),0 0 20px var(--color-warning)}body.theme-dark .leaderboard-separator{color:var(--color-text-neon-muted);border-color:var(--color-border-neon)}body.theme-dark .leaderboard-entry.is-top-1{background:linear-gradient(90deg,#ffd70026,#ffd7000d)}body.theme-dark .leaderboard-entry.is-top-1 .entry-rank{color:gold;text-shadow:0 0 10px rgba(255,215,0,.5)}body.theme-dark .leaderboard-entry.is-top-2{background:linear-gradient(90deg,#c0c0c026,#c0c0c00d)}body.theme-dark .leaderboard-entry.is-top-2 .entry-rank{color:silver;text-shadow:0 0 10px rgba(192,192,192,.5)}body.theme-dark .leaderboard-entry.is-top-3{background:linear-gradient(90deg,#cd7f3226,#cd7f320d)}body.theme-dark .leaderboard-entry.is-top-3 .entry-rank{color:#cd7f32;text-shadow:0 0 10px rgba(205,127,50,.5)}body.theme-dark .end-container{background:var(--color-bg-primary)}body.theme-dark .end-title{color:var(--color-text-white)}body.theme-dark .end-subtitle{color:var(--color-text-neon-muted)}body.theme-dark .your-result{background:var(--color-dark-surface);border:1px solid var(--color-border-neon)}body.theme-dark .your-result-header{color:var(--color-accent-primary)}body.theme-dark .your-result-rank{color:var(--color-text-white)}body.theme-dark .your-result-score{color:var(--color-text-neon-muted)}body.theme-dark .stat-value{color:var(--color-accent-secondary)}body.theme-dark .stat-label{color:var(--color-text-neon-muted)}body.theme-dark .podium-name{color:var(--color-text-white)}body.theme-dark .podium-score{color:var(--color-text-neon-muted)}body.theme-dark .final-leaderboard{background:var(--color-dark-surface);border:1px solid var(--color-border-neon);box-shadow:none}body.theme-dark .final-leaderboard-header{background:var(--color-dark-card);color:var(--color-text-white)}body.theme-dark .final-entry{border-color:var(--color-border-neon)}body.theme-dark .final-entry.is-current{background:#ff2d6a1a}body.theme-dark .final-rank{color:var(--color-text-neon-muted)}body.theme-dark .final-name{color:var(--color-text-white)}body.theme-dark .final-score{color:var(--color-accent-secondary)}body.theme-dark .new-game-btn{background:var(--color-success-neon);color:var(--color-bg-primary);box-shadow:var(--glow-success)}body.theme-dark .new-game-btn:hover{background:#4dff1f}body.theme-dark .end-player-message,body.theme-dark .rejoin-hint{color:var(--color-text-neon-muted)}body.theme-dark .paused-container{background:var(--color-bg-primary)}body.theme-dark .paused-container h1{color:var(--color-text-white)}body.theme-dark .paused-container>p{color:var(--color-text-neon-muted)}body.theme-dark .paused-hint{color:var(--color-text-neon-muted)}body.theme-dark .connection-lost-container h1{color:var(--color-text-white)}body.theme-dark .connection-lost-container>p{color:var(--color-text-neon-muted)}body.theme-dark .connection-lost-hint{color:var(--color-text-neon-muted)}body.theme-dark .qr-modal-content{background:var(--color-bg-primary);border:1px solid var(--color-border-neon)}body.theme-dark .qr-modal-label{color:var(--color-text-white)}.qr-print-area{text-align:center;padding:var(--space-lg) 0}.qr-container{display:inline-block;padding:var(--space-md);background:var(--color-bg-white);border-radius:var(--radius-md);box-shadow:var(--shadow-md)}#qr-code{display:inline-block}#qr-code img{display:block}.qr-instruction{font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);color:var(--color-text-primary);margin-top:var(--space-md)}.join-url{font-family:var(--font-mono);font-size:var(--font-size-base);color:var(--color-text-muted);margin-top:var(--space-sm);word-break:break-all;user-select:all;cursor:text}.lobby-controls{display:flex;flex-wrap:wrap;justify-content:center;gap:var(--space-sm);margin:var(--space-md) 0}.btn-dashboard{display:flex;align-items:center;gap:var(--space-xs)}.player-list{margin-top:var(--space-md);border-top:1px solid var(--color-border-light);padding-top:var(--space-md)}.game-controls-bar{display:flex;gap:var(--space-sm);justify-content:center;margin-top:var(--space-md);padding-top:var(--space-md);border-top:1px solid var(--color-border-light)}.game-info{background:var(--color-bg-card);border-radius:var(--radius-md);padding:var(--space-md);margin-bottom:var(--space-md)}.game-info p{margin-bottom:var(--space-sm)}.game-info p:last-child{margin-bottom:0}@media print{body *{visibility:hidden}.qr-print-area,.qr-print-area *{visibility:visible}.qr-print-area{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);text-align:center}#qr-code{width:400px!important;height:400px!important}#qr-code img,#qr-code canvas{width:400px!important;height:400px!important}.qr-instruction{font-size:var(--font-size-2xl);font-weight:var(--font-weight-bold);margin-top:var(--space-xl)}.join-url{font-size:var(--font-size-base);font-family:var(--font-mono);margin-top:var(--space-sm)}.no-print{display:none!important}}.player-container{max-width:500px;margin:0 auto;padding-top:max(var(--space-md),env(safe-area-inset-top));padding-bottom:max(var(--space-md),env(safe-area-inset-bottom));padding-left:max(var(--space-sm),env(safe-area-inset-left));padding-right:max(var(--space-sm),env(safe-area-inset-right));text-align:center;min-height:100vh;display:flex;flex-direction:column;justify-content:flex-start}@media(min-width:768px){.player-container{max-width:480px;margin-left:auto;margin-right:auto;padding-left:var(--space-lg);padding-right:var(--space-lg)}}.view{display:block;overflow-x:hidden}.view.hidden{display:none}.error-icon{font-size:var(--font-size-timer);margin-bottom:var(--space-md)}.player-container h1{margin-bottom:var(--space-sm);color:var(--color-text-primary)}.player-container p{color:var(--color-text-muted);margin-bottom:var(--space-sm)}.hint{font-size:var(--font-size-base);color:var(--color-text-light)}.coming-soon{font-style:italic;color:var(--color-text-muted)}.spinner{width:40px;height:40px;margin:0 auto var(--space-md);border:4px solid var(--color-bg-card-alt);border-top:4px solid var(--color-accent-blue);border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}#qr-code{max-width:100%}#qr-code img,#qr-code canvas{max-width:100%;height:auto}@media(min-width:481px)and (max-width:768px){.qr-container{padding:var(--space-xl)}}@media(min-width:769px){.qr-container{padding:var(--space-lg)}}.join-form{max-width:400px;margin:0 auto;padding:var(--space-lg);text-align:center}.join-form h1{margin-bottom:var(--space-sm);font-size:var(--font-size-2xl)}.join-form>p{margin-bottom:var(--space-lg);color:var(--color-text-muted)}.form-group{margin-bottom:var(--space-md)}.name-input{width:100%;padding:14px var(--space-md);font-size:var(--font-size-lg);border:2px solid var(--color-border-medium);border-radius:var(--radius-md);min-height:48px;box-sizing:border-box}.name-input:focus{border-color:var(--color-accent-blue);outline:none;box-shadow:0 0 0 3px #3b82f61a}.join-btn{width:100%;min-height:48px;font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold)}.validation-msg{margin-top:var(--space-sm);font-size:var(--font-size-base);color:var(--color-error);text-align:left}.lobby-container{max-width:500px;margin:0 auto;padding:var(--space-lg) var(--space-md)}.lobby-header{text-align:center;margin-bottom:var(--space-lg)}.lobby-header h1{font-size:var(--font-size-2xl);margin-bottom:var(--space-sm);color:var(--color-text-primary)}.player-count{font-size:var(--font-size-md);color:var(--color-text-muted)}.player-list{display:flex;flex-direction:column;gap:var(--space-sm);margin-bottom:var(--space-lg)}.player-card{display:flex;align-items:center;padding:var(--space-sm) var(--space-md);min-height:48px;background:var(--color-bg-card);border-radius:var(--radius-md);border:1px solid var(--color-border-light);transition:all var(--transition-normal)}.player-card--you{background:#eff6ff;border-color:var(--color-accent-blue)}.player-card--disconnected{opacity:.5;filter:grayscale(.3);transition:opacity .3s ease,filter .3s ease}.away-badge{font-size:var(--font-size-sm);color:var(--color-text-muted);font-style:italic;margin-left:var(--space-xs)}.player-name{display:flex;align-items:center;gap:var(--space-sm);font-size:var(--font-size-md);color:var(--color-text-primary)}.you-badge{font-size:var(--font-size-sm);color:var(--color-accent-blue);font-weight:var(--font-weight-medium)}.player-card.is-new{animation:playerJoin var(--transition-slow) ease-out;background:#ecfdf5;border-color:var(--color-success)}@keyframes playerJoin{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.player-list--virtual{position:relative;overflow-y:auto;max-height:320px;-webkit-overflow-scrolling:touch;contain:layout style paint}.player-list--virtual .virtual-spacer-top,.player-list--virtual .virtual-spacer-bottom{flex-shrink:0;pointer-events:none}.player-list--virtual .virtual-content-wrapper{display:flex;flex-direction:column;gap:var(--space-sm)}.player-list--virtual .player-card{flex-shrink:0;height:52px;box-sizing:border-box}.qr-share-area{text-align:center;padding:var(--space-lg) var(--space-md);background:var(--color-bg-card);border-radius:var(--radius-lg);margin-bottom:var(--space-md)}.qr-icon{font-size:var(--font-size-xl)}.qr-container{display:inline-block;padding:var(--space-sm);background:var(--color-bg-white);border-radius:var(--radius-md);box-shadow:var(--shadow-md);cursor:pointer;min-width:150px;min-height:150px;transition:transform var(--transition-fast)}.qr-container:hover,.qr-container:focus{transform:scale(1.02);outline:2px solid var(--color-accent-blue);outline-offset:2px}.qr-container img{display:block;width:100%;height:auto}.qr-hint{margin-top:var(--space-sm);font-size:13px;color:var(--color-text-muted)}.qr-collapsible{padding:0}.qr-share-header{display:flex;align-items:center;justify-content:center;gap:var(--space-sm);padding:var(--space-md);cursor:pointer;user-select:none;list-style:none;font-size:var(--font-size-md);font-weight:600;color:var(--color-text-primary);min-height:44px}.qr-share-header::-webkit-details-marker{display:none}.qr-share-chevron{margin-left:var(--space-sm);transition:transform var(--transition-normal);font-size:.8rem;color:var(--color-text-muted)}.qr-collapsible[open] .qr-share-chevron{transform:rotate(180deg)}.qr-share-content{padding:0 var(--space-md) var(--space-lg);animation:qrSlideDown var(--transition-normal) ease-out}@keyframes qrSlideDown{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}.qr-collapsible:not([open]){padding-bottom:0}.qr-collapsible:not([open]) .qr-share-header{padding-bottom:var(--space-md)}@media(prefers-reduced-motion:reduce){.qr-share-chevron{transition:none}.qr-share-content{animation:none}}.dashboard-hint-container{margin-top:var(--space-md);text-align:center}.dashboard-hint-text{display:inline-flex;flex-direction:column;align-items:center;gap:var(--space-xs);font-size:var(--font-size-sm);color:#fff;background:var(--color-surface-dark);padding:var(--space-sm) var(--space-md);border-radius:var(--radius-md);margin:0}.dashboard-hint-label{display:flex;align-items:center;gap:var(--space-xs);color:#fff}.dashboard-hint-icon{font-size:var(--font-size-base)}.dashboard-hint-url{font-family:monospace;color:var(--color-accent-secondary);font-size:var(--font-size-sm)}.qr-modal{position:fixed;inset:0;z-index:var(--z-modal);display:flex;align-items:center;justify-content:center}.qr-modal.hidden{display:none}.qr-modal-backdrop{position:absolute;inset:0;background:#000000bf}.qr-modal-content{position:relative;background:var(--color-bg-white);padding:var(--space-xl) var(--space-lg);border-radius:var(--radius-xl);text-align:center;max-width:90vw;max-height:90vh;animation:modalFadeIn var(--transition-fast)}.qr-modal-code{display:inline-block;padding:var(--space-md);background:var(--color-bg-white);border-radius:var(--radius-md);min-width:250px}.qr-modal-code img{display:block;width:100%;max-width:80vw;height:auto}.qr-modal-label{margin:var(--space-md) 0;font-size:var(--font-size-lg);color:var(--color-text-primary)}.qr-modal-close{min-width:120px;min-height:48px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.lobby-status{text-align:center;padding:var(--space-md);color:var(--color-text-muted)}.how-to-play{margin:var(--space-md) 0;background:var(--color-bg-card);border-radius:var(--radius-md);border:1px solid var(--color-border-light)}.how-to-play-header{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-md);cursor:pointer;user-select:none;list-style:none;font-weight:600;color:var(--color-text-primary);min-height:44px}.how-to-play-header::-webkit-details-marker{display:none}.how-to-play-icon{font-size:1.2rem}.how-to-play-chevron{margin-left:auto;transition:transform var(--transition-normal);font-size:.8rem;color:var(--color-text-secondary)}.how-to-play[open] .how-to-play-chevron{transform:rotate(180deg)}.how-to-play-content{padding:0 var(--space-md) var(--space-md);animation:howToPlaySlideDown var(--transition-normal) ease-out}.how-to-play-steps{margin:0;padding:0;list-style:none;color:var(--color-text-secondary);font-size:.9rem;line-height:1.6;counter-reset:step-counter}.how-to-play-steps li{margin-bottom:var(--space-sm);padding-left:var(--space-lg);position:relative;counter-increment:step-counter}.how-to-play-steps li:before{content:counter(step-counter) ".";position:absolute;left:0;width:var(--space-md);text-align:right;font-weight:600;color:var(--color-text-primary)}.how-to-play-steps li:last-child{margin-bottom:0}@keyframes howToPlaySlideDown{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}.leave-game-container{text-align:center;padding:var(--space-md);position:sticky;bottom:0;background:linear-gradient(to top,var(--color-bg-card),transparent);z-index:var(--z-controls, 10)}.leave-game-container.hidden{display:none}body.theme-dark .leave-game-container{background:transparent}.btn-leave{opacity:.7;transition:opacity .2s ease}.btn-leave:hover{opacity:1}.admin-controls{padding:var(--space-lg) var(--space-md);text-align:center;background:linear-gradient(to top,var(--color-bg-card),transparent);position:sticky;bottom:0}.admin-controls.hidden{display:none}body.theme-dark .admin-controls{background:transparent}.btn-large{min-height:56px;font-size:var(--font-size-xl);padding:var(--space-md) var(--space-xl)}.btn-full-width{width:100%}.admin-hint{margin-top:var(--space-sm);font-size:var(--font-size-base);color:var(--color-text-muted)}.admin-lobby-actions{text-align:center;margin-top:var(--space-lg)}.admin-badge{font-size:var(--font-size-sm);color:var(--color-warning);margin-left:var(--space-xs)}.lobby-player-count-container{text-align:center;margin-bottom:var(--space-md)}.lobby-stats-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:var(--space-md);margin-bottom:var(--space-lg)}.stat-card--clickable{display:block;text-decoration:none;cursor:pointer;margin-bottom:var(--space-lg)}.stat-card--clickable:hover{border-color:var(--color-accent-secondary)}.dashboard-hint-card{background:#00f5ff0d;border-color:var(--color-accent-secondary)}.qr-section{text-align:center;padding:var(--space-xl) var(--space-lg);background:var(--color-surface-dark);border:1px solid var(--color-border-neon);border-radius:var(--radius-md);margin-bottom:var(--space-lg)}.qr-section .qr-container{display:inline-block;padding:var(--space-md);background:#fff;border-radius:var(--radius-md);margin-bottom:var(--space-md)}.qr-hint{font-size:1rem;color:var(--color-text-neon-muted);margin-bottom:var(--space-sm)}.qr-url-display{font-family:Outfit,sans-serif;font-size:1.125rem;font-weight:600;color:var(--color-accent-secondary);word-break:break-all}.player-list-section{background:var(--color-surface-dark);border:1px solid var(--color-border-neon);border-radius:var(--radius-md);padding:var(--space-md);margin-bottom:var(--space-lg)}.section-subheader{display:flex;align-items:center;gap:var(--space-sm);font-size:1rem;font-weight:600;color:var(--color-text-white);margin-bottom:var(--space-md)}.section-subheader .section-icon{font-size:1.25rem}.player-cards-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:var(--space-sm)}.player-cards-grid .player-card{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:var(--space-md);min-height:80px;background:var(--color-dark-surface);border:1px solid var(--color-border-neon);border-radius:var(--radius-md);text-align:center;transition:transform .2s ease,box-shadow .2s ease,border-color .2s ease}.player-cards-grid .player-card:hover{transform:translateY(-2px);box-shadow:0 4px 12px #9d4edd33}.player-cards-grid .player-card.is-new{background:#39ff141a;border-color:var(--color-success-neon);animation:playerCardJoin .5s ease-out}@keyframes playerCardJoin{0%{opacity:0;transform:scale(.9)}to{opacity:1;transform:scale(1)}}.player-cards-grid .player-card--disconnected{opacity:.5;filter:grayscale(.3)}.player-cards-grid .player-name{font-size:var(--font-size-md);font-weight:600;color:var(--color-text-white);margin-bottom:var(--space-xs);display:flex;align-items:center;gap:var(--space-xs);flex-wrap:wrap;justify-content:center}.player-cards-grid .admin-badge{font-size:1rem}.player-cards-grid .away-badge{font-size:var(--font-size-xs);color:var(--color-text-neon-muted);display:block;width:100%}.kick-player-btn{position:relative;background:none;border:1px solid var(--color-border-dark);color:var(--color-text-muted);width:24px;height:24px;border-radius:50%;font-size:1rem;line-height:1;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;margin-top:var(--space-xs);padding:0;transition:all .15s ease}.kick-player-btn:after{content:"";position:absolute;top:50%;left:50%;width:44px;height:44px;transform:translate(-50%,-50%)}.kick-player-btn:hover{background:var(--color-error);color:#fff;border-color:var(--color-error)}.lobby-actions{margin-top:var(--space-lg);padding-top:var(--space-md);border-top:1px solid var(--color-border-dark)}.lobby-header-compact{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--space-sm);margin-bottom:var(--space-md);text-align:left}.section-header--inline{margin-bottom:0;flex:1;min-width:120px;text-align:left}.stat-badge-bar{display:flex;align-items:center;gap:var(--space-md)}.stat-badge{display:flex;align-items:center;gap:var(--space-xs);padding:var(--space-xs) var(--space-sm);background:#ffffff0d;border:1px solid var(--color-border-neon);border-radius:var(--radius-md);font-size:.875rem}.stat-badge-icon{font-size:1rem}.stat-badge-value{font-weight:600;color:var(--color-accent-secondary)}.stat-badge--status .stat-badge-value{color:var(--color-text-white)}.qr-section--compact{padding:var(--space-md);margin-bottom:var(--space-md)}.qr-section--compact .qr-container{padding:var(--space-sm);margin-bottom:var(--space-sm)}.qr-section--compact #qr-code{width:180px!important;height:180px!important}.qr-section--compact #qr-code img,.qr-section--compact #qr-code canvas{width:180px!important;height:180px!important}.qr-section--compact .qr-hint{font-size:.875rem;margin-bottom:var(--space-xs)}.qr-url-display--compact{font-size:.75rem;margin-bottom:var(--space-sm)}.dashboard-link{display:inline-flex;align-items:center;gap:var(--space-xs);padding:var(--space-xs) var(--space-sm);background:#00f5ff1a;border:1px solid var(--color-accent-secondary);border-radius:var(--radius-md);color:var(--color-accent-secondary);text-decoration:none;font-size:.875rem;transition:all .2s ease}.dashboard-link:hover{background:#00f5ff33}.dashboard-link-arrow{opacity:.7}.player-list-section--compact{padding:var(--space-sm);margin-bottom:var(--space-sm)}.section-subheader--compact{font-size:.875rem;margin-bottom:var(--space-sm)}.empty-state-inline{display:flex;align-items:center;justify-content:center;gap:var(--space-sm);padding:var(--space-md);color:var(--color-text-neon-muted);font-size:.875rem;text-align:center}.lobby-actions--sticky{position:sticky;bottom:0;margin:0 calc(-1 * var(--space-md));padding:var(--space-sm) var(--space-md);background:var(--color-bg-primary);border-top:1px solid var(--color-border-dark);z-index:10;display:flex;flex-direction:column;gap:var(--space-sm, 8px)}@media(min-width:481px){.qr-section--compact #qr-code,.qr-section--compact #qr-code img,.qr-section--compact #qr-code canvas{width:240px!important;height:240px!important}.qr-section--compact{padding:var(--space-lg)}.lobby-actions--sticky{position:relative;margin:var(--space-lg) 0 0 0;padding:var(--space-md) 0 0 0;background:transparent}}.lobby-wordmark-header{display:flex;justify-content:center;align-items:center;padding:var(--space-md) var(--space-md) var(--space-sm);padding-top:env(safe-area-inset-top,16px)}.lobby-wordmark-header .wordmark{font-size:2rem}.lobby-container--compact{flex:1;padding:0 var(--space-sm) var(--space-2xl);max-width:500px;margin:0 auto;width:100%}.lobby-container--compact .section-collapsible{background:var(--color-surface-dark);border:1px solid var(--color-border-neon);border-radius:var(--radius-md);margin-bottom:var(--space-md);overflow:hidden}.lobby-container--compact .section-header-collapsible{display:flex;align-items:center;gap:var(--space-sm);width:100%;padding:var(--space-sm) var(--space-md);background:transparent;border:none;color:var(--color-text-white);font-size:.875rem;font-weight:600;cursor:pointer;text-align:left}.lobby-container--compact .section-header-collapsible .section-icon{font-size:1rem}.lobby-container--compact .section-summary{margin-left:auto;font-size:.75rem;font-weight:400;color:var(--color-text-neon-muted);padding:2px 8px;background:#ffffff0d;border-radius:var(--radius-sm)}.lobby-container--compact .section-toggle{font-size:.625rem;color:var(--color-text-neon-muted);transition:transform .2s ease;margin-left:var(--space-sm)}.lobby-container--compact .section-header-collapsible>.section-toggle:nth-child(3){margin-left:auto}.lobby-container--compact .section-collapsible:not(.collapsed) .section-toggle{transform:rotate(180deg)}.lobby-container--compact .section-content{padding:0 var(--space-md) var(--space-md)}.lobby-container--compact .section-collapsible.collapsed .section-content{display:none}.lobby-status-compact{text-align:center;padding:var(--space-md);color:var(--color-text-neon-muted);font-size:.875rem}.how-to-play-steps-compact{list-style:decimal;padding-left:var(--space-lg);margin:0;font-size:.875rem;color:var(--color-text-neon-muted)}.how-to-play-steps-compact li{padding:var(--space-xs) 0}.stat-badge--difficulty{font-size:.75rem;text-transform:uppercase;letter-spacing:.03em}.stat-badge--difficulty:empty{display:none}.admin-content .section-collapsible{background:var(--color-surface-dark);border:1px solid var(--color-border-neon);border-radius:var(--radius-md);margin-bottom:var(--space-md);overflow:hidden}.admin-content .section-header-collapsible{display:flex;align-items:center;gap:var(--space-sm);width:100%;padding:var(--space-sm) var(--space-md);background:transparent;border:none;color:var(--color-text-white);font-size:.875rem;font-weight:600;cursor:pointer;text-align:left}.admin-content .section-header-collapsible .section-icon{font-size:1rem}.admin-content .section-header-collapsible .section-summary{margin-left:auto;font-size:.75rem;font-weight:400;color:var(--color-accent-secondary);background:#00f5ff1a;padding:2px 8px;border-radius:var(--radius-sm)}.admin-content .section-header-collapsible .section-toggle{margin-left:var(--space-sm);font-size:.625rem;color:var(--color-text-neon-muted);transition:transform .2s ease}.admin-content .section-collapsible:not(.collapsed) .section-toggle{transform:rotate(180deg)}.admin-content .section-collapsible .section-content{padding:0 var(--space-md) var(--space-md)}.admin-content .section-collapsible.collapsed .section-content{display:none}.setting-row{display:flex;align-items:center;justify-content:space-between;padding:var(--space-xs) 0;border-bottom:1px solid rgba(255,255,255,.05)}.setting-row:last-child{border-bottom:none}.setting-group{border-bottom:1px solid rgba(255,255,255,.05);padding-bottom:var(--space-sm);margin-bottom:var(--space-sm)}.setting-group:last-child{border-bottom:none}.setting-group .setting-row{border-bottom:none}.tts-group-title{font-size:.7rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--color-text-muted);margin:0 0 var(--space-xs) 0;opacity:.8}.setting-hint{font-size:.7rem;color:var(--color-text-muted);margin:0 0 var(--space-xs) calc(var(--space-xs) + 24px);line-height:1.3;opacity:.75}body.theme-dark .setting-hint{color:var(--color-text-neon-muted)}.setting-label{display:flex;align-items:center;gap:var(--space-xs);font-size:.875rem;color:var(--color-text-white)}.setting-icon{font-size:.875rem}.chip-group{display:flex;gap:4px}.chip{padding:4px 10px;font-size:.75rem;font-weight:500;background:#ffffff0d;border:1px solid var(--color-border-neon);border-radius:var(--radius-sm);color:var(--color-text-neon-muted);cursor:pointer;transition:all .15s ease}.chip:hover{background:#ffffff1a;color:var(--color-text-white)}.chip.chip--active{background:#00f5ff33;border-color:var(--color-accent-secondary);color:var(--color-accent-secondary)}.toggle-compact{display:flex;align-items:center;cursor:pointer}.toggle-compact input{position:absolute;opacity:0;width:0;height:0}.toggle-switch-compact{width:36px;height:20px;background:#ffffff1a;border-radius:10px;position:relative;transition:background .2s ease}.toggle-switch-compact:after{content:"";position:absolute;top:2px;left:2px;width:16px;height:16px;background:var(--color-text-neon-muted);border-radius:50%;transition:all .2s ease}.toggle-compact input:checked+.toggle-switch-compact{background:#00f5ff4d}.toggle-compact input:checked+.toggle-switch-compact:after{left:18px;background:var(--color-accent-secondary)}.admin-actions{position:sticky;bottom:0;background:var(--color-bg-primary);padding:var(--space-sm) 0;margin-top:var(--space-sm)}.admin-actions .status-error{margin-bottom:var(--space-xs);font-size:.875rem}.modal{position:fixed;inset:0;z-index:var(--z-modal);display:flex;align-items:center;justify-content:center}.modal.hidden{display:none}.modal-backdrop{position:absolute;inset:0;background:#00000080}.modal-content{position:relative;background:var(--color-bg-white);padding:var(--space-lg);border-radius:var(--radius-lg);max-width:400px;width:90%;animation:modalFadeIn var(--transition-fast)}.modal-content h2{margin-bottom:var(--space-sm);font-size:var(--font-size-xl)}.modal-content p{margin-bottom:var(--space-md);color:var(--color-text-muted)}.modal-actions{display:flex;gap:var(--space-sm);margin-top:var(--space-lg)}.modal-actions .btn{flex:1}.game-placeholder{text-align:center;padding:var(--space-2xl) var(--space-lg)}.game-placeholder h1{font-size:var(--font-size-3xl);margin-bottom:var(--space-md);color:var(--color-text-primary)}.game-placeholder p{font-size:var(--font-size-md);color:var(--color-text-muted)}.reveal-placeholder{text-align:center;padding:var(--space-2xl) var(--space-lg)}.reveal-placeholder h1{font-size:var(--font-size-4xl);margin-bottom:var(--space-md);color:var(--color-text-primary)}.reveal-placeholder p{font-size:var(--font-size-md);color:var(--color-text-muted)}.end-container{text-align:center;padding:var(--space-2xl) var(--space-lg)}.end-icon{font-size:var(--font-size-timer);margin-bottom:var(--space-md)}.end-container h1{font-size:var(--font-size-3xl);margin-bottom:var(--space-sm);color:var(--color-text-primary)}.end-message{font-size:var(--font-size-lg);color:#4b5563;margin-bottom:var(--space-sm)}.game-container{display:flex;flex-direction:column;align-items:center;padding:var(--space-sm);padding-bottom:max(var(--space-md),env(safe-area-inset-bottom));max-width:400px;margin:0 auto}.game-sticky-bar{position:sticky;top:0;z-index:50;width:100%;padding:var(--space-xs) var(--space-sm);background:var(--color-bg-light);border-bottom:1px solid var(--color-border-light)}body.theme-dark .game-sticky-bar{background:var(--color-bg-primary);border-bottom-color:var(--color-border-dark)}.game-sticky-bar .timer-container{margin-bottom:0}.game-sticky-bar .timer{font-size:2rem}.game-header-compact{display:flex;align-items:center;justify-content:space-between;width:100%;margin-bottom:var(--space-sm);padding:0 var(--space-xs)}.game-header-left{display:flex;align-items:center;gap:var(--space-xs)}.game-header-left .section-icon{font-size:1rem}.round-indicator-text{font-size:var(--font-size-sm);font-weight:600;color:var(--color-text-white)}.stat-badge--steal{background:linear-gradient(135deg,var(--color-purple-primary),var(--color-purple-secondary, #9333ea));animation:steal-badge-pulse 2s ease-in-out infinite}@keyframes steal-badge-pulse{0%,to{box-shadow:0 0 8px #9333ea80}50%{box-shadow:0 0 12px #9333eacc}}.last-round-banner{background:linear-gradient(135deg,var(--color-warning),var(--color-warning-dark));color:var(--color-text-white);padding:var(--space-xs) var(--space-md);border-radius:var(--radius-md);font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);margin-bottom:var(--space-sm);text-align:center;width:100%;animation:pulse 2s infinite}.intro-badge{display:inline-flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-lg);background:linear-gradient(135deg,gold,#ff6b00);color:#000;border-radius:var(--radius-pill);font-size:var(--font-size-lg);font-weight:var(--font-weight-bold);text-transform:uppercase;letter-spacing:1px;animation:intro-pulse 1.5s ease-in-out infinite;margin-bottom:var(--space-md);box-shadow:0 0 20px #ffd70080,0 0 40px #ff6b004d}.intro-splash{position:fixed;inset:0;z-index:9999;display:flex;align-items:center;justify-content:center;background:#000000d9;animation:intro-splash-in .3s ease-out,intro-splash-out .5s ease-in 1.5s forwards;pointer-events:none}.intro-splash-content{display:flex;flex-direction:column;align-items:center;gap:12px;animation:intro-splash-scale .4s cubic-bezier(.34,1.56,.64,1)}.intro-splash-icon{font-size:80px;filter:drop-shadow(0 0 30px rgba(255,215,0,.8))}.intro-splash-text{font-size:36px;font-weight:900;text-transform:uppercase;letter-spacing:4px;background:linear-gradient(135deg,gold,#ff6b00);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;text-shadow:none}.intro-splash-hint{font-size:18px;color:#ffffffb3;letter-spacing:1px}@keyframes intro-splash-in{0%{opacity:0}to{opacity:1}}@keyframes intro-splash-out{0%{opacity:1}to{opacity:0;visibility:hidden}}@keyframes intro-splash-scale{0%{transform:scale(.5);opacity:0}to{transform:scale(1);opacity:1}}.intro-badge-icon{font-size:var(--font-size-md)}.intro-badge--large{font-size:var(--font-size-lg);padding:var(--space-sm) var(--space-lg);margin-left:var(--space-md)}.intro-badge--large .intro-badge-icon{font-size:var(--font-size-xl)}.intro-badge--stopped{background:linear-gradient(135deg,#666,#444);color:var(--color-text-white);animation:none}@keyframes intro-pulse{0%,to{transform:scale(1);opacity:1}50%{transform:scale(1.05);opacity:.9}}@media(prefers-reduced-motion:reduce){.intro-badge{animation:none}}.closest-wins-badge{background:linear-gradient(135deg,#00c6ff,#0072ff);box-shadow:0 0 20px #00c6ff80,0 0 40px #0072ff4d}.result-card.is-closest-winner{border:2px solid #00c6ff;box-shadow:0 0 12px #00c6ff66}.closest-winner-badge{margin-left:var(--space-sm);font-size:var(--font-size-sm)}.album-cover-container{position:relative;width:150px;height:150px;margin-bottom:var(--space-md)}.album-cover{width:100%;height:100%;object-fit:cover;border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);filter:blur(20px)}@media(max-width:360px){.album-cover-container{width:120px;height:120px}}@media(min-width:768px){.album-cover-container{width:180px;height:180px}}.album-loading{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:var(--color-bg-card-alt);border-radius:var(--radius-xl)}.loading-spinner{width:40px;height:40px;border:4px solid var(--color-border-light);border-top-color:var(--color-accent-brand);border-radius:50%;animation:spin 1s linear infinite}.timer-container{margin-bottom:var(--space-lg)}.timer{font-size:var(--font-size-timer);font-weight:var(--font-weight-bold);color:var(--color-text-primary);font-variant-numeric:tabular-nums;transition:color var(--transition-normal)}.timer--warning{color:var(--color-warning);animation:timer-pulse-subtle 1s ease-in-out infinite}.timer--critical{color:var(--color-error);animation:timer-pulse-intense .5s ease-in-out infinite}@keyframes timer-pulse-subtle{0%,to{opacity:1}50%{opacity:.8}}@keyframes timer-pulse-intense{0%,to{opacity:1;transform:scale(1)}50%{opacity:.9;transform:scale(1.05)}}@media(prefers-reduced-motion:reduce){.timer--warning,.timer--critical{animation:none}}.submission-tracker{width:100%;margin-bottom:var(--space-md);padding:var(--space-sm);background:var(--color-surface-dark);border:1px solid var(--color-border-neon);border-radius:var(--radius-md)}.submitted-players{display:flex;gap:var(--space-sm);overflow-x:auto;padding:var(--space-xs) 0;-webkit-overflow-scrolling:touch;scrollbar-width:none;justify-content:center;flex-wrap:wrap}.submitted-players::-webkit-scrollbar{display:none}.player-indicator{display:flex;flex-direction:column;align-items:center;min-width:48px;flex-shrink:0;position:relative}.player-badge{position:absolute;width:16px;height:16px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:10px;z-index:1}.player-badge--bet{top:-2px;right:2px;background:var(--color-warning)}.player-badge--steal{top:-2px;left:2px;background:linear-gradient(135deg,var(--color-purple-primary),var(--color-purple-secondary, #9333ea))}.player-avatar{width:36px;height:36px;border-radius:50%;background:var(--color-border-light);display:flex;align-items:center;justify-content:center;font-size:var(--font-size-base);font-weight:var(--font-weight-semibold);color:var(--color-text-muted);border:2px solid transparent;transition:all var(--transition-normal)}.player-indicator.is-submitted .player-avatar{background:var(--color-success);color:var(--color-text-white);border-color:var(--color-success-hover);animation:submitted-pulse var(--transition-slow) ease-out}.player-indicator.is-submitted .player-initials{display:none}.player-indicator.is-submitted .player-avatar:after{content:"\2713";font-size:var(--font-size-md)}@keyframes submitted-pulse{0%{transform:scale(1)}50%{transform:scale(1.2)}to{transform:scale(1)}}.player-indicator .player-name{font-size:var(--font-size-xs);color:var(--color-text-muted);max-width:48px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:center;margin-top:var(--space-xs)}.player-indicator.is-current-player .player-avatar{border-color:var(--color-accent-brand)}.player-indicator.is-current-player .player-name{font-weight:var(--font-weight-semibold);color:var(--color-accent-brand)}.player-indicator--disconnected{opacity:.4}.submission-tracker.all-submitted{border-color:var(--color-success);background:#10b9811a}.artist-challenge{width:100%}.artist-challenge .section-header{display:flex;align-items:center;gap:var(--space-sm);flex-wrap:wrap}.stat-badge--bonus{background:#22c55e26;color:var(--color-success);font-weight:700;margin-left:auto}.artist-options-grid{display:grid;grid-template-columns:1fr 1fr;grid-auto-rows:1fr;gap:var(--space-sm)}@media(max-width:320px){.artist-options-grid{grid-template-columns:1fr}}.artist-option-btn{display:flex;align-items:center;justify-content:center;min-height:72px;padding:var(--space-sm) var(--space-md);border:2px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface);color:var(--color-text);font-size:var(--font-size-md);font-weight:500;cursor:pointer;transition:all .2s ease;position:relative}.artist-option-btn:active{transform:scale(.98)}.artist-option-btn.is-loading{animation:artistPulse 1s infinite}@keyframes artistPulse{0%,to{opacity:1}50%{opacity:.6}}.artist-option-btn.is-correct,.artist-option-btn.is-winner{background:var(--color-success);border-color:var(--color-success);color:#fff}.artist-option-btn.is-winner{box-shadow:var(--glow-primary)}.artist-option-btn.is-wrong{animation:artistWrongFlash .5s ease}.artist-option-btn.is-wrong.is-selected{background:var(--color-error);border-color:var(--color-error);color:#fff;animation:none;opacity:.8}@keyframes artistWrongFlash{0%,to{background:var(--color-surface)}50%{background:#ef44444d}}.artist-option-btn.is-disabled{opacity:.5;pointer-events:none}.artist-points-badge{position:absolute;right:var(--space-sm);font-size:var(--font-size-sm);font-weight:700;color:#fff;background:#0003;padding:2px 6px;border-radius:var(--radius-sm)}.artist-result{margin-top:var(--space-md);padding:var(--space-sm) var(--space-md);border-radius:var(--radius-md);text-align:center;font-weight:500}.artist-result.is-winner{background:#22c55e26;color:var(--color-success)}.artist-result.is-late{background:var(--color-surface-alt, rgba(255, 255, 255, .05));color:var(--color-text-muted)}body.theme-dark .artist-option-btn{background:#ffffff0d;border-color:var(--color-border-neon);color:var(--color-text-white)}body.theme-dark .artist-option-btn:hover{background:#ffffff1a}@media(prefers-reduced-motion:reduce){.artist-option-btn.is-loading{animation:none;opacity:.7}.artist-option-btn.is-wrong{animation:none;opacity:.5}}.artist-reveal-section{padding:var(--space-md);margin-bottom:var(--space-md);background:var(--color-surface-alt, rgba(255, 255, 255, .05));border-radius:var(--radius-lg)}.artist-reveal-section .section-content-padded{text-align:center}.artist-reveal-label{font-size:var(--font-size-sm);color:var(--color-text-muted);text-transform:uppercase;letter-spacing:.5px;margin-bottom:var(--space-xs)}.artist-reveal-name{font-size:var(--font-size-xl);font-weight:700;color:var(--color-text);margin-bottom:var(--space-sm)}.artist-reveal-winner{font-size:var(--font-size-md);padding:var(--space-xs) var(--space-md);border-radius:var(--radius-md);display:inline-block}.artist-reveal-winner.is-you{background:#22c55e26;color:var(--color-success);font-weight:600}.artist-reveal-winner.is-other{color:var(--color-text-muted)}.artist-reveal-no-winner{color:var(--color-text-muted);font-style:italic}body.theme-dark .artist-reveal-section{background:var(--color-dark-surface-alt, #16213e)}.artist-bonus-row .result-value{color:var(--color-success);font-weight:600}.player-card-artist-badge{font-size:var(--font-size-xs);color:var(--color-success);background:#22c55e1a;padding:2px 6px;border-radius:var(--radius-sm);margin-left:var(--space-xs)}.movie-challenge{width:100%}.movie-challenge .section-header{display:flex;align-items:center;gap:var(--space-sm);flex-wrap:wrap}.movie-options-grid{display:grid;grid-template-columns:1fr;gap:var(--space-sm)}@media(min-width:480px){.movie-options-grid{grid-template-columns:1fr 1fr}}.movie-option-btn{display:flex;align-items:center;justify-content:center;min-height:44px;padding:var(--space-sm) var(--space-md);border:2px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface);color:var(--color-text);font-size:var(--font-size-md);font-weight:500;cursor:pointer;transition:all .2s ease;position:relative;text-align:center}.movie-option-btn:active{transform:scale(.98)}.movie-option-btn.is-loading{animation:moviePulse 1s infinite}@keyframes moviePulse{0%,to{opacity:1}50%{opacity:.6}}.movie-option-btn.is-correct,.movie-option-btn.is-winner{background:var(--color-success);border-color:var(--color-success);color:#fff}.movie-option-btn.is-winner{box-shadow:var(--glow-primary)}.movie-option-btn.is-wrong{animation:movieWrongFlash .5s ease}.movie-option-btn.is-wrong.is-selected{background:var(--color-error);border-color:var(--color-error);color:#fff;animation:none;opacity:.8}@keyframes movieWrongFlash{0%,to{background:var(--color-surface)}50%{background:#ef44444d}}.movie-option-btn.is-disabled{opacity:.5;pointer-events:none}.movie-rank-badge{position:absolute;right:var(--space-sm);font-size:var(--font-size-sm);font-weight:700;color:#fff;background:#0003;padding:2px 6px;border-radius:var(--radius-sm)}.movie-result{margin-top:var(--space-md);padding:var(--space-sm) var(--space-md);border-radius:var(--radius-md);text-align:center;font-weight:500}.movie-result.is-winner{background:#22c55e26;color:var(--color-success)}.movie-result.is-late{background:var(--color-surface-alt, rgba(255, 255, 255, .05));color:var(--color-text-muted)}body.theme-dark .movie-option-btn{background:#ffffff0d;border-color:var(--color-border-neon);color:var(--color-text-white)}body.theme-dark .movie-option-btn:hover{background:#ffffff1a}@media(prefers-reduced-motion:reduce){.movie-option-btn.is-loading{animation:none;opacity:.7}.movie-option-btn.is-wrong{animation:none;opacity:.5}}.movie-reveal-section{padding:var(--space-md);margin-bottom:var(--space-md);background:var(--color-surface-alt, rgba(255, 255, 255, .05));border-radius:var(--radius-lg)}.movie-reveal-section .section-content-padded{text-align:center}.movie-reveal-name{font-size:var(--font-size-xl);font-weight:700;color:var(--color-text);margin-bottom:var(--space-sm)}.movie-reveal-winners{margin-top:var(--space-sm)}.movie-reveal-winners-title{font-size:var(--font-size-sm);color:var(--color-text-muted);text-transform:uppercase;letter-spacing:.5px;margin-bottom:var(--space-xs)}.movie-reveal-winner-entry{font-size:var(--font-size-md);padding:var(--space-xs) var(--space-md);border-radius:var(--radius-md);display:inline-block;margin:2px 4px}.movie-reveal-winner-entry.is-you{background:#22c55e26;color:var(--color-success);font-weight:600}.movie-reveal-winner-entry.is-other{color:var(--color-text-muted)}.movie-reveal-no-winner{color:var(--color-text-muted);font-style:italic;font-size:var(--font-size-md);padding:var(--space-xs) var(--space-md)}body.theme-dark .movie-reveal-section{background:var(--color-dark-surface-alt, #16213e)}.year-selector-section{width:100%;padding-bottom:max(var(--space-md),env(safe-area-inset-bottom))}.year-selector{width:100%}.year-display{display:flex;align-items:center;justify-content:center;gap:var(--space-sm);margin-bottom:var(--space-md)}.year-adjust-btn{width:48px;height:48px;border-radius:50%;border:2px solid var(--color-border-dark);background:transparent;color:var(--color-text-white);font-size:1.5rem;font-weight:700;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;transition:all .15s ease;-webkit-tap-highlight-color:transparent;touch-action:manipulation;user-select:none;flex-shrink:0}.year-adjust-btn:active{background:var(--color-accent-primary);border-color:var(--color-accent-primary);transform:scale(.95)}.year-adjust-btn:disabled{opacity:.3;pointer-events:none}#selected-year{font-size:var(--font-size-year);font-weight:var(--font-weight-bold);color:var(--color-text-primary);font-variant-numeric:tabular-nums}.slider-container{display:flex;align-items:center;gap:var(--space-sm);margin-bottom:var(--space-lg)}.slider-label{font-size:var(--font-size-sm);color:var(--color-text-muted);min-width:40px}.slider-label--min{text-align:right}.slider-label--max{text-align:left}.year-slider{-webkit-appearance:none;appearance:none;flex:1;height:var(--space-sm);background:var(--color-border-light);border-radius:var(--radius-sm);outline:none}.year-slider::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:44px;height:44px;background:var(--color-accent-brand);border-radius:50%;cursor:pointer;border:4px solid var(--color-bg-white);box-shadow:var(--shadow-md);transition:transform .1s ease}.year-slider::-webkit-slider-thumb:active{transform:scale(1.1)}.year-slider::-moz-range-thumb{width:44px;height:44px;background:var(--color-accent-brand);border-radius:50%;cursor:pointer;border:4px solid var(--color-bg-white);box-shadow:var(--shadow-md)}.submit-btn{width:100%;padding:var(--space-lg) var(--space-lg);font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);color:var(--color-text-white);background:var(--color-accent-brand);border:none;border-radius:var(--radius-lg);cursor:pointer;transition:all var(--transition-fast);min-height:56px}.submit-btn:hover{background:var(--color-accent-brand-hover)}.submit-btn:active{transform:scale(.98)}.submit-btn:disabled{background:var(--color-text-light);cursor:not-allowed;transform:none}.submit-btn.is-loading{color:transparent;position:relative}.submit-btn.is-loading:after{content:"";position:absolute;width:24px;height:24px;border:3px solid var(--color-bg-white);border-top-color:transparent;border-radius:50%;animation:spin .8s linear infinite;left:50%;top:50%;margin-left:-12px;margin-top:-12px}.submit-btn.is-error{background:var(--color-error)}.submitted-confirmation{display:flex;align-items:center;justify-content:center;gap:var(--space-sm);padding:var(--space-md);background:var(--color-success);color:var(--color-text-white);border-radius:var(--radius-lg);font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold)}.submitted-confirmation .checkmark{font-size:var(--font-size-2xl)}.year-selector.is-submitted .year-slider{pointer-events:none;opacity:.5}.year-selector.is-submitted #selected-year{color:var(--color-text-muted)}@media(max-width:360px){.album-cover-container{max-width:250px}.timer{font-size:var(--font-size-2xl)}}@media(min-width:768px){.album-cover-container{max-width:350px}.timer{font-size:var(--font-size-hero)}}@media(min-width:768px){body{max-width:800px;margin:0 auto;padding:var(--space-lg)}header h1{font-size:var(--font-size-4xl)}.status-section h2,.card-section h2{font-size:var(--font-size-lg)}.card-section{padding:var(--space-md) var(--space-lg)}}.reveal-container{display:flex;flex-direction:column;align-items:center;padding:var(--space-lg);width:100%;margin:0 auto;text-align:center}.reveal-container--compact{padding:var(--space-md);gap:var(--space-sm);align-items:stretch}.reveal-container--duel{padding:var(--space-md);gap:var(--space-sm);align-items:stretch;text-align:left}.reveal-header-compact{display:flex;align-items:center;justify-content:space-between;padding:var(--space-xs) 0;margin-bottom:var(--space-xs)}.reveal-header-left{display:flex;align-items:center;gap:var(--space-xs)}.reveal-header-compact .section-icon{font-size:1rem}.reveal-header-compact .round-indicator-text{font-size:.875rem;color:var(--color-text-neon-muted)}.reveal-song-hero{display:flex;align-items:center;gap:var(--space-md);padding:var(--space-sm);background:var(--color-surface-dark);border:1px solid var(--color-border-neon);border-radius:var(--radius-md);margin-bottom:var(--space-sm)}.reveal-album-cover-compact{width:80px;height:80px;object-fit:cover;border-radius:var(--radius-md);flex-shrink:0}.reveal-song-info{flex:1;min-width:0;text-align:left}.reveal-song-info .song-title{font-size:1rem;font-weight:600;color:var(--color-text-white);margin-bottom:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.reveal-song-info .song-artist{font-size:.875rem;color:var(--color-text-neon-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.reveal-year-section{text-align:center;padding:var(--space-sm) 0}.reveal-emotion-inline{font-size:1.25rem;font-weight:700;margin-bottom:var(--space-xs);animation:reveal-emotion-entrance .5s ease-out}.reveal-year-section .correct-year-label{font-size:.75rem;text-transform:uppercase;letter-spacing:.05em;color:var(--color-text-neon-muted);margin-bottom:var(--space-xs)}.reveal-year-section .correct-year{font-size:3rem}.personal-result-compact{display:flex;align-items:center;justify-content:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);background:#00f5ff1a;border:1px solid var(--color-border-neon);border-radius:var(--radius-md);margin-bottom:var(--space-sm)}.result-content-inline{font-size:.875rem;color:var(--color-text-white)}.artist-reveal-compact{display:flex;align-items:center;justify-content:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);background:var(--color-surface-dark);border:1px solid var(--color-border-neon);border-radius:var(--radius-md);margin-bottom:var(--space-sm)}.artist-reveal-icon{font-size:1rem}.artist-reveal-name-inline{font-weight:600;color:var(--color-accent-secondary)}.artist-reveal-winner-inline{font-size:.75rem;color:var(--color-text-neon-muted)}.artist-reveal-winner-inline:before{content:"\2022";margin-right:var(--space-xs)}.fun-fact-section{text-align:left}.fun-fact-section .fun-fact-text{font-size:.875rem;color:var(--color-text-white);line-height:1.5;margin-bottom:var(--space-sm)}.fun-fact-section .song-rich-info{font-size:.75rem;color:var(--color-text-neon-muted)}.section-content-padded{padding:0 var(--space-md) var(--space-md)}.card-section .section-content-padded{padding:0 0 var(--space-sm)}.guesses-section{text-align:left}.reveal-results-grid{width:100%}.personal-result-section{text-align:left}.personal-result-section .result-row{display:flex;justify-content:space-between;padding:var(--space-xs) 0;border-bottom:1px solid rgba(255,255,255,.05)}.personal-result-section .result-row:last-child{border-bottom:none}.artist-reveal-section{text-align:left}.artist-reveal-section .artist-reveal-name{font-size:1.25rem;font-weight:700;color:var(--color-accent-secondary);margin-bottom:var(--space-xs)}.artist-reveal-section .artist-reveal-winner{font-size:.875rem;color:var(--color-text-neon-muted)}.round-analytics-section{width:100%;background:var(--color-surface-dark);border:1px solid var(--color-border-neon);border-radius:var(--radius-md);overflow:hidden;text-align:left}.round-analytics-section .section-header-collapsible{display:flex;align-items:center;gap:var(--space-sm);width:100%;padding:var(--space-sm) var(--space-md);background:transparent;border:none;color:var(--color-text-white);font-size:.875rem;font-weight:600;cursor:pointer;text-align:left}.round-analytics-section .section-header-collapsible .section-icon{font-size:1rem}.round-analytics-section .section-header-collapsible .section-summary{margin-left:auto;font-size:.75rem;font-weight:400;color:var(--color-accent-secondary);background:#00f5ff1a;padding:2px 8px;border-radius:var(--radius-sm)}.round-analytics-section .section-header-collapsible .section-toggle{margin-left:var(--space-sm);font-size:.625rem;color:var(--color-text-neon-muted);transition:transform .2s ease}.round-analytics-section .section-content{padding:0 var(--space-md) var(--space-sm)}.round-analytics-section.collapsed .section-content{display:none}.round-analytics-section:not(.collapsed) .section-toggle{transform:rotate(180deg)}.reveal-round-info{font-size:var(--font-size-base);color:var(--color-text-muted);margin-bottom:var(--space-md)}.reveal-album{margin-bottom:var(--space-lg)}.reveal-album-cover{width:150px;height:150px;object-fit:cover;border-radius:var(--radius-lg);box-shadow:var(--shadow-lg)}.correct-year-container{margin-bottom:var(--space-md)}.correct-year-label{font-size:var(--font-size-md);color:var(--color-text-muted);margin-bottom:var(--space-sm)}.correct-year{font-size:var(--font-size-hero);font-weight:var(--font-weight-extrabold);color:var(--color-success);font-variant-numeric:tabular-nums;animation:reveal-pop var(--transition-slow) ease-out}@keyframes reveal-pop{0%{transform:scale(.5);opacity:0}70%{transform:scale(1.1)}to{transform:scale(1);opacity:1}}.song-info{margin-bottom:var(--space-md)}.song-title{font-size:var(--font-size-xl);font-weight:var(--font-weight-semibold);color:var(--color-text-primary);margin-bottom:var(--space-xs)}.song-artist{font-size:var(--font-size-md);color:var(--color-text-muted)}.fun-fact-container{display:flex;flex-direction:column;gap:var(--space-sm);background:var(--color-warning-light);padding:var(--space-md);border-radius:var(--radius-lg);margin-bottom:var(--space-lg);text-align:left;max-width:100%}.fun-fact-header{display:flex;align-items:flex-start;gap:var(--space-sm)}.fun-fact-icon{font-size:var(--font-size-xl);flex-shrink:0}.fun-fact-text{font-size:var(--font-size-base);color:#92400e;line-height:1.4}.fun-fact-header:empty,.fun-fact-text:empty{display:none}.song-rich-info{text-align:left}.song-rich-info:empty{display:none}.song-badges-row{display:flex;flex-wrap:wrap;justify-content:center;gap:var(--space-sm);margin-top:var(--space-sm);padding-top:var(--space-sm);border-top:1px solid rgba(120,53,15,.15)}.song-badges-row:first-child{border-top:none;padding-top:0}.song-badge{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);border-radius:20px;border:1px solid;box-shadow:0 1px 3px #0000001a;white-space:nowrap}.song-badge-icon{font-size:14px;line-height:1}.song-badge--chart{background:linear-gradient(135deg,#dbeafe,#bfdbfe);color:#1e40af;border-color:#93c5fd}.song-badge--chart .chart-weeks{font-weight:400;opacity:.8;font-size:11px}.song-badge--platinum{background:linear-gradient(135deg,#f1f5f9,#e2e8f0);color:#475569;border-color:#cbd5e1}.song-badge--gold{background:linear-gradient(135deg,#fef3c7,#fde68a);color:#92400e;border-color:#fcd34d}.song-badge--diamond{background:linear-gradient(135deg,#e0f2fe,#bae6fd);color:#0369a1;border-color:#7dd3fc}.song-badge--award{background:linear-gradient(135deg,#ffedd5,#fed7aa);color:#9a3412;border-color:#fdba74}.song-badge--grammy{background:linear-gradient(135deg,#fef3c7,#fde68a);color:#78350f;border-color:#f59e0b}.song-badge--eurovision{background:linear-gradient(135deg,#ede9fe,#ddd6fe);color:#5b21b6;border-color:#a78bfa}.song-badge--oscar,.song-badge--academy{background:linear-gradient(135deg,#fef3c7,#fde68a);color:#78350f;border-color:#f59e0b}.song-badge--halloffame{background:linear-gradient(135deg,#dbeafe,#bfdbfe);color:#1e40af;border-color:#60a5fa}.song-badges-more{font-size:var(--font-size-xs);color:#78350f;font-style:italic;opacity:.8}.song-difficulty{display:flex;align-items:center;gap:var(--space-sm);justify-content:center;margin-top:var(--space-sm);opacity:0;animation:fadeIn .5s ease-out forwards;animation-delay:.3s}.difficulty-stars{font-size:1.2rem;letter-spacing:.1em}.difficulty-1{color:var(--color-success-neon);text-shadow:0 0 10px var(--color-success-neon)}.difficulty-2{color:var(--color-warning);text-shadow:0 0 10px var(--color-warning)}.difficulty-3{color:var(--color-warning-alt);text-shadow:0 0 10px var(--color-warning-alt)}.difficulty-4{color:var(--color-accent-primary);text-shadow:0 0 10px var(--color-accent-primary)}.difficulty-label{font-weight:700;text-transform:uppercase;letter-spacing:.05em;font-size:var(--font-size-sm)}.difficulty-accuracy{font-size:.85em;opacity:.7}.superlatives-container{display:flex;flex-wrap:wrap;justify-content:center;gap:var(--space-md);margin:var(--space-lg) 0;padding:0 var(--space-md)}.superlative-card{display:flex;flex-direction:column;align-items:center;padding:var(--space-md);min-width:120px;max-width:160px;background:var(--color-dark-surface);border-radius:var(--radius-lg);border:1px solid rgba(255,255,255,.1);opacity:0;animation:superlativeSlideIn .5s ease-out forwards}@keyframes superlativeSlideIn{0%{opacity:0;transform:translateY(20px) scale(.9)}to{opacity:1;transform:translateY(0) scale(1)}}.superlative-emoji{font-size:2rem;margin-bottom:var(--space-xs)}.superlative-title{font-weight:700;text-transform:uppercase;letter-spacing:.05em;font-size:var(--font-size-xs);color:var(--color-accent-secondary);text-align:center;margin-bottom:var(--space-xs)}.superlative-player{font-weight:700;font-size:var(--font-size-base);color:var(--color-dark-text-primary);text-align:center;margin-bottom:var(--space-xs)}.superlative-value{font-size:var(--font-size-sm);color:var(--color-dark-text-secondary);text-align:center}.superlative-card--speed_demon{border-color:var(--color-warning);box-shadow:0 0 15px #f59e0b33}.superlative-card--lucky_streak{border-color:var(--color-error);box-shadow:0 0 15px #ef444433}.superlative-card--risk_taker{border-color:var(--color-purple-primary);box-shadow:0 0 15px #8b5cf633}.superlative-card--clutch_player{border-color:var(--color-success-neon);box-shadow:0 0 15px #39ff1433}.superlative-card--close_calls{border-color:var(--color-accent-secondary);box-shadow:0 0 15px #00f5ff33}.highlights-container{width:100%;margin-top:var(--space-lg);margin-bottom:var(--space-lg)}.highlights-header{font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);color:var(--color-text-white);text-align:center;margin-bottom:var(--space-md)}.highlights-list{display:flex;flex-direction:column;gap:var(--space-sm)}.highlight-card{display:flex;align-items:center;gap:var(--space-md);padding:var(--space-md);background:var(--color-dark-surface);border-radius:var(--radius-lg);border:1px solid rgba(255,255,255,.1);opacity:0;animation:highlightFadeIn .5s ease-out forwards}@keyframes highlightFadeIn{0%{opacity:0;transform:translate(-20px)}to{opacity:1;transform:translate(0)}}.highlight-emoji{font-size:1.8rem;flex-shrink:0;width:48px;text-align:center}.highlight-content{flex:1;min-width:0}.highlight-text{font-size:var(--font-size-base);color:var(--color-dark-text-primary);line-height:1.4}.highlight-round{font-size:var(--font-size-xs);color:var(--color-dark-text-secondary);margin-top:var(--space-xs)}@media(max-width:480px){.highlight-card{padding:var(--space-sm);gap:var(--space-sm)}.highlight-emoji{font-size:1.4rem;width:36px}.highlight-text{font-size:var(--font-size-sm)}}.round-analytics{width:100%;margin-top:var(--space-lg);margin-bottom:var(--space-lg);padding:var(--space-md);background:var(--color-dark-surface);border-radius:var(--radius-lg);text-align:center}.analytics-title{font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);color:var(--color-text-white);margin-bottom:var(--space-md)}.analytics-stats-row{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--space-lg);margin-bottom:var(--space-xs)}.stat-primary{text-align:left}.stat-primary .stat-label{font-size:var(--font-size-sm);color:var(--color-text-neon-muted);display:block;margin-bottom:var(--space-xs)}.stat-primary .stat-value{font-size:var(--font-size-2xl);font-weight:var(--font-weight-bold);color:var(--color-accent-secondary)}.stat-secondary{text-align:right}.stat-secondary .stat-value{font-size:var(--font-size-2xl);font-weight:var(--font-weight-bold);color:var(--color-success)}.stat-secondary .stat-label{font-size:var(--font-size-sm);color:var(--color-text-neon-muted);display:block}.stat-comparison-line{font-size:var(--font-size-sm);color:var(--color-text-neon-muted);margin-bottom:var(--space-md)}.analytics-histogram{margin-bottom:var(--space-lg)}.histogram-title{font-size:var(--font-size-base);color:var(--color-text-neon-muted);margin-bottom:var(--space-sm)}.dotaxis-wrap{margin:14px 0 16px}.dotaxis-axis{position:relative;height:88px;margin:0 14px}.dotaxis-line{position:absolute;left:0;right:0;top:52px;height:2px;background:#ffffff1f;border-radius:2px}.dotaxis-tick{position:absolute;top:48px;width:1px;height:10px;background:#ffffff2e}.dotaxis-tick-label{position:absolute;top:64px;font-size:9px;color:#ffffff80;transform:translate(-50%);letter-spacing:.3px;font-weight:500}.dotaxis-marker{position:absolute;top:4px;bottom:18px;width:2px;background:linear-gradient(180deg,transparent,var(--color-cyan, #00d4ff) 30%,var(--color-cyan, #00d4ff) 80%,transparent);box-shadow:0 0 8px var(--color-cyan, #00d4ff),0 0 16px #00d4ff99}.dotaxis-marker-label{position:absolute;top:-4px;left:50%;transform:translate(-50%);background:var(--color-cyan, #00d4ff);color:#0a0a0e;font-family:var(--font-family-display, "Outfit", sans-serif);font-weight:900;font-size:12px;padding:3px 8px;border-radius:6px;box-shadow:0 0 14px #00d4ff99;white-space:nowrap}.dotaxis-dot{position:absolute;top:39px;width:26px;height:26px;border-radius:50%;transform:translate(-50%);display:flex;align-items:center;justify-content:center;font-family:var(--font-family-display, "Outfit", sans-serif);font-weight:900;font-size:12px;color:#fff;text-shadow:0 1px 2px rgba(0,0,0,.5);box-shadow:0 0 0 3px var(--color-bg-primary, #0d0d12),0 4px 10px #0006;cursor:default}.dotaxis-dot--c1{background:linear-gradient(135deg,#ff6ec7,#d846a7)}.dotaxis-dot--c2{background:linear-gradient(135deg,#6e3bff,#4a25c8)}.dotaxis-dot--c3{background:linear-gradient(135deg,#ffd60a,#e6b800);color:#1a1a22;text-shadow:none}.dotaxis-dot--c4{background:linear-gradient(135deg,#00d4ff,#008abf)}.dotaxis-dot--correct{box-shadow:0 0 0 3px var(--color-bg-primary, #0d0d12),0 0 18px currentColor,0 4px 10px #0006}.dotaxis-dot--me{box-shadow:0 0 0 3px var(--color-bg-primary, #0d0d12),0 0 0 5px #ff9f4399,0 4px 10px #0006}.dotaxis-dot--correct.dotaxis-dot--me{box-shadow:0 0 0 3px var(--color-bg-primary, #0d0d12),0 0 0 5px #ff9f4399,0 0 22px currentColor,0 4px 10px #0006}.dotaxis-score{position:absolute;top:12px;transform:translate(-50%);font-family:var(--font-family-display, "Outfit", sans-serif);font-weight:800;font-size:11px;padding:2px 6px;border-radius:6px;background:#ffffff14;white-space:nowrap}.dotaxis-score--pos{background:#00d4ff2e;color:var(--color-cyan, #00d4ff)}.dotaxis-score--zero{color:#ffffff59}.dotaxis-legend{display:flex;flex-wrap:wrap;justify-content:center;gap:8px 14px;font-size:11px;color:#ffffffbf;margin-top:4px}.dotaxis-legend-entry{display:inline-flex;align-items:center;gap:5px}.dotaxis-legend-dot{display:inline-block;width:11px;height:11px;border-radius:50%;flex-shrink:0}.dotaxis-legend-medal{font-size:13px;line-height:1}.dotaxis-legend-me{color:#ff9f43;font-weight:700;font-size:10px;margin-left:2px;letter-spacing:.3px}.histogram-bars{display:flex;justify-content:space-between;align-items:flex-end;height:120px;gap:var(--space-xs);padding:0 var(--space-xs)}.histogram-bar-wrapper{flex:1;display:flex;flex-direction:column;align-items:center;height:100%;animation:histogram-fade-in .3s ease forwards;opacity:0}.histogram-bar{width:100%;max-width:40px;background:linear-gradient(180deg,var(--color-accent-primary),var(--color-accent-brand));border-radius:var(--radius-sm) var(--radius-sm) 0 0;display:flex;align-items:flex-start;justify-content:center;transition:height .5s ease;min-height:0}.histogram-bar.is-correct{background:linear-gradient(180deg,var(--color-success-neon),var(--color-success));box-shadow:var(--glow-success)}.bar-count{font-size:var(--font-size-xs);font-weight:var(--font-weight-bold);color:var(--color-text-white);padding-top:var(--space-xs)}.histogram-label{font-size:var(--font-size-xs);color:var(--color-text-neon-muted);margin-top:var(--space-xs)}@keyframes histogram-fade-in{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.analytics-achievements{display:flex;flex-direction:column;gap:var(--space-sm);text-align:left}.achievement-item{display:flex;align-items:center;gap:var(--space-sm);font-size:var(--font-size-sm);color:var(--color-text-white)}.achievement-emoji{font-size:var(--font-size-lg)}.achievement-label{color:var(--color-text-neon-muted)}.achievement-names{font-weight:var(--font-weight-semibold)}.achievement-value{color:var(--color-text-neon-muted)}.analytics-empty{text-align:center;color:var(--color-text-neon-muted);padding:var(--space-lg);font-style:italic}@media(prefers-reduced-motion:reduce){.histogram-bar-wrapper{animation:none;opacity:1}.histogram-bar{transition:none}}.reveal-emotion{text-align:center;font-size:var(--font-size-2xl);font-weight:var(--font-weight-bold);margin-bottom:var(--space-md);animation:reveal-emotion-entrance .5s ease-out}.reveal-emotion--exact{color:var(--color-success);text-shadow:0 0 20px var(--color-success)}.reveal-emotion--close{color:var(--color-warning);animation:reveal-emotion-entrance .5s ease-out,reveal-shake .5s ease-in-out .5s}.reveal-emotion--wrong{color:var(--color-text-muted)}.reveal-emotion--missed{color:var(--color-text-muted);opacity:.7}.reveal-emotion-subtitle{font-size:var(--font-size-base);font-weight:var(--font-weight-normal);margin-top:var(--space-xs);opacity:.8}@keyframes reveal-emotion-entrance{0%{opacity:0;transform:scale(.8)}50%{transform:scale(1.1)}to{opacity:1;transform:scale(1)}}@keyframes reveal-shake{0%,to{transform:translate(0)}20%,60%{transform:translate(-5px)}40%,80%{transform:translate(5px)}}.confetti-canvas{position:fixed;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:var(--z-modal)}body>canvas[style*="position: fixed"]{pointer-events:none!important}.personal-result.is-delayed{opacity:0;animation:fade-in-delay .5s ease-out 1s forwards}@keyframes fade-in-delay{to{opacity:1}}@media(prefers-reduced-motion:reduce){.reveal-emotion,.reveal-emotion--close{animation:none}.personal-result.is-delayed{opacity:1;animation:none}}.personal-result{width:100%;background:var(--color-bg-card-alt);padding:var(--space-md);border-radius:var(--radius-lg);margin-bottom:var(--space-lg)}.result-header{font-size:var(--font-size-base);font-weight:var(--font-weight-semibold);color:var(--color-text-muted);margin-bottom:var(--space-sm)}.result-content{display:flex;flex-direction:column;gap:var(--space-sm)}.result-row{display:flex;justify-content:space-between;align-items:center}.result-label{font-size:var(--font-size-base);color:var(--color-text-muted)}.result-value{font-size:var(--font-size-md);font-weight:var(--font-weight-semibold);color:var(--color-text-primary)}.result-value.is-exact{color:var(--color-success)}.result-value.is-close{color:var(--color-warning)}.result-value.is-far{color:var(--color-error)}.result-value.is-bonus{color:var(--color-warning);font-weight:var(--font-weight-bold)}.result-score{font-size:var(--font-size-4xl);font-weight:var(--font-weight-bold);color:var(--color-accent-brand);margin-top:var(--space-sm)}.result-missed{font-size:var(--font-size-md);color:var(--color-error);font-weight:var(--font-weight-semibold)}.result-value.is-streak{color:var(--color-error);font-weight:var(--font-weight-bold)}.streak-bonus-row{background:linear-gradient(90deg,var(--color-warning-light),#fde68a);padding:var(--space-sm) var(--space-md);border-radius:var(--radius-md);margin:var(--space-sm) 0;color:#1a1a1a}.result-total{font-size:var(--font-size-2xl);font-weight:var(--font-weight-bold);color:var(--color-success);margin-top:var(--space-sm);padding-top:var(--space-sm);border-top:2px dashed var(--color-border-light)}.streak-indicator{display:inline-flex;align-items:center;gap:2px;font-size:var(--font-size-sm);color:var(--color-warning);font-weight:var(--font-weight-semibold)}.streak-indicator:before{content:"\1f525"}.bet-container{margin-bottom:var(--space-md);position:relative;z-index:1}.bet-toggle{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-xl);background:var(--color-bg-card-alt);border:2px solid var(--color-border-medium);border-radius:var(--radius-lg);cursor:pointer;transition:background var(--transition-fast),border-color var(--transition-fast),color var(--transition-fast);font-size:var(--font-size-base);font-weight:var(--font-weight-semibold);color:var(--color-text-muted);width:100%;justify-content:center;-webkit-tap-highlight-color:transparent;-webkit-user-select:none;user-select:none;touch-action:manipulation}.bet-toggle:hover{border-color:var(--color-text-light)}.bet-toggle.is-active{background:var(--color-warning-light);border-color:var(--color-warning);color:#92400e}.bet-toggle.is-active .bet-icon{animation:dice-shake var(--transition-slow) ease}@keyframes dice-shake{0%,to{transform:rotate(0)}25%{transform:rotate(-10deg)}75%{transform:rotate(10deg)}}body.theme-dark .bet-toggle{background:#ffffff1a;border:1px solid rgba(255,255,255,.2);color:var(--color-text-white)}body.theme-dark .bet-toggle.is-active{background:var(--color-warning);border-color:var(--color-warning);color:var(--color-text-primary)}.bet-won-row{background:linear-gradient(90deg,var(--color-success-light),#a7f3d0);padding:var(--space-sm) var(--space-sm);border-radius:var(--radius-md);margin:var(--space-sm) 0}.bet-won-row .result-label,body.theme-dark .bet-won-row .result-label{color:#166534}.result-value.is-bet-won,body.theme-dark .result-value.is-bet-won{color:#166534;font-weight:var(--font-weight-bold)}.bet-lost-row{background:linear-gradient(90deg,var(--color-error-light),#fecaca);padding:var(--space-sm) var(--space-sm);border-radius:var(--radius-md);margin:var(--space-sm) 0}.bet-lost-row .result-label,body.theme-dark .bet-lost-row .result-label{color:#991b1b}.result-value.is-bet-lost,body.theme-dark .result-value.is-bet-lost{color:#991b1b;font-weight:var(--font-weight-bold)}.result-missed-container{display:flex;flex-direction:column;align-items:center;gap:var(--space-sm);padding:var(--space-md)}.result-missed-icon{font-size:var(--font-size-2xl)}.result-missed-text{font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);color:var(--color-text-muted)}.streak-broken{display:flex;align-items:center;gap:var(--space-sm);margin-top:var(--space-sm);padding:var(--space-sm) var(--space-md);background:var(--color-error-light);border-radius:var(--radius-md)}.streak-broken-icon{font-size:var(--font-size-xl)}.streak-broken-text{font-size:var(--font-size-base);font-weight:var(--font-weight-semibold);color:var(--color-error-dark)}.streak-shield-used{display:flex;align-items:center;gap:var(--space-sm);margin-top:var(--space-sm);padding:var(--space-sm) var(--space-md);background:var(--color-success-light);border-radius:var(--radius-md)}.streak-shield-icon{font-size:var(--font-size-xl)}.streak-shield-text{font-size:var(--font-size-base);font-weight:var(--font-weight-semibold);color:var(--color-success-hover)}.result-score.is-zero{color:var(--color-text-light);font-size:var(--font-size-2xl)}.leaderboard-section{width:100%;background:var(--color-surface-dark);border:1px solid var(--color-border-neon);border-radius:var(--radius-md);overflow:hidden}.leaderboard-section .section-header-collapsible{display:flex;align-items:center;gap:var(--space-sm);width:100%;padding:var(--space-sm) var(--space-md);background:transparent;border:none;color:var(--color-text-white);font-size:.875rem;font-weight:600;cursor:pointer;text-align:left}.leaderboard-section .section-header-collapsible .section-icon{font-size:1rem}.leaderboard-section .section-header-collapsible .section-summary{margin-left:auto;font-size:.75rem;font-weight:400;color:var(--color-accent-secondary);background:#00f5ff1a;padding:2px 8px;border-radius:var(--radius-sm)}.leaderboard-section .section-header-collapsible .section-toggle{margin-left:var(--space-sm);font-size:.625rem;color:var(--color-text-neon-muted);transition:transform .2s ease}.leaderboard-section .section-content{padding:0}.leaderboard-section .leaderboard-list{max-height:200px;overflow-y:auto}.leaderboard-section.collapsed .section-content{display:none}.leaderboard-section:not(.collapsed) .section-toggle{transform:rotate(180deg)}.leaderboard{background:var(--color-bg-white);border-radius:var(--radius-lg);box-shadow:var(--shadow-md);overflow:hidden;width:100%;margin-bottom:var(--space-md)}.leaderboard.is-compact .leaderboard-list{max-height:120px}.leaderboard.is-expanded .leaderboard-list{max-height:400px}.leaderboard.is-prominent{margin-top:var(--space-md)}.leaderboard.is-prominent .leaderboard-list{max-height:280px}.leaderboard-header{display:flex;justify-content:space-between;align-items:center;padding:var(--space-sm) var(--space-md);background:var(--color-bg-card-alt);border-bottom:1px solid var(--color-border-light)}.leaderboard-title{font-size:var(--font-size-base);font-weight:var(--font-weight-semibold);color:var(--color-text-secondary)}.leaderboard-toggle{background:none;border:none;cursor:pointer;padding:var(--space-xs);min-width:auto;min-height:auto;color:var(--color-text-muted)}.leaderboard-list{max-height:200px;overflow-y:auto;contain:layout style paint;will-change:transform}.leaderboard-spacer-top,.leaderboard-spacer-bottom{flex-shrink:0;pointer-events:none}.leaderboard-sentinel{flex-shrink:0;pointer-events:none;visibility:hidden}.leaderboard-entry{display:flex;align-items:center;gap:var(--space-sm);padding:10px var(--space-md);border-bottom:1px solid var(--color-bg-card-alt);transition:background var(--transition-fast);contain:content;height:48px;box-sizing:border-box}.leaderboard-entry:last-child{border-bottom:none}.leaderboard-entry.is-current{background:#eff6ff;border-left:3px solid var(--color-accent-blue)}.leaderboard-entry.is-top-1{background:linear-gradient(90deg,var(--color-warning-light),#fde68a)}.leaderboard-entry.is-top-1 .entry-rank{color:#b45309;font-weight:var(--font-weight-bold)}.leaderboard-entry.is-top-2{background:linear-gradient(90deg,var(--color-bg-card-alt),var(--color-border-light))}.leaderboard-entry.is-top-2 .entry-rank{color:var(--color-text-muted);font-weight:var(--font-weight-bold)}.leaderboard-entry.is-top-3{background:linear-gradient(90deg,#fed7aa,#fdba74)}.leaderboard-entry.is-top-3 .entry-rank{color:#c2410c;font-weight:var(--font-weight-bold)}.entry-rank{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-text-muted);min-width:28px}.entry-name{flex:1;font-size:var(--font-size-base);font-weight:var(--font-weight-medium);color:var(--color-text-primary);display:flex;align-items:center;gap:var(--space-xs);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.entry-meta{display:flex;align-items:center;gap:var(--space-xs)}.entry-score{font-size:var(--font-size-base);font-weight:var(--font-weight-bold);color:var(--color-accent-brand);min-width:40px;text-align:right}.rank-up{font-size:var(--font-size-xs);color:var(--color-success);font-weight:var(--font-weight-semibold)}.rank-down{font-size:var(--font-size-xs);color:var(--color-error);font-weight:var(--font-weight-semibold)}.leaderboard-entry--climbing{animation:leaderboard-climb .4s ease-out}.leaderboard-entry--falling{animation:leaderboard-fall .4s ease-out}.leaderboard-entry--disconnected{opacity:.5;transition:opacity .3s ease}@keyframes leaderboard-climb{0%{transform:translateY(10px);opacity:.7;background:#0f83}to{transform:translateY(0);opacity:1;background:transparent}}@keyframes leaderboard-fall{0%{transform:translateY(-10px);opacity:.7;background:#ff004033}to{transform:translateY(0);opacity:1;background:transparent}}.streak-indicator{font-size:var(--font-size-xs);color:var(--color-warning)}.streak-indicator--hot{text-shadow:0 0 8px var(--color-warning);animation:streak-pulse 1s ease-in-out infinite}@keyframes streak-pulse{0%,to{opacity:1}50%{opacity:.7}}.leaderboard-separator{text-align:center;padding:var(--space-xs) var(--space-md);color:var(--color-text-muted);font-size:var(--font-size-sm);border-bottom:1px solid var(--color-bg-card-alt)}@media(prefers-reduced-motion:reduce){.leaderboard-entry--climbing,.leaderboard-entry--falling,.streak-indicator--hot{animation:none}}.leaderboard-you{position:sticky;bottom:0;padding:var(--space-sm) var(--space-md);background:var(--color-accent-blue);color:var(--color-text-white);font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);text-align:center}.end-container{padding:var(--space-lg);max-width:480px;margin:0 auto;text-align:center}.end-header{margin-bottom:var(--space-lg)}.end-title{font-size:var(--font-size-4xl);font-weight:var(--font-weight-extrabold);color:var(--color-text-primary);margin-bottom:var(--space-sm)}.end-subtitle{font-size:var(--font-size-md);color:var(--color-text-muted);margin:0}.podium{display:flex;justify-content:center;align-items:flex-end;gap:var(--space-sm);margin-bottom:var(--space-xl)}.podium-place{display:flex;flex-direction:column;align-items:center;width:100px}.podium-medal{font-size:var(--font-size-4xl);margin-bottom:var(--space-sm)}.podium-name{font-size:var(--font-size-base);font-weight:var(--font-weight-semibold);color:var(--color-text-primary);margin-bottom:var(--space-xs);max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.podium-score{font-size:var(--font-size-sm);color:var(--color-text-muted);margin-bottom:var(--space-sm)}.podium-stand{width:100%;display:flex;align-items:center;justify-content:center;font-size:var(--font-size-2xl);font-weight:var(--font-weight-extrabold);color:var(--color-text-white);border-radius:var(--radius-md) var(--radius-md) 0 0}.podium-1 .podium-stand{height:80px;background:linear-gradient(180deg,#fbbf24,var(--color-warning-dark))}.podium-2 .podium-stand{height:60px;background:linear-gradient(180deg,var(--color-text-light),var(--color-text-muted))}.podium-3 .podium-stand{height:40px;background:linear-gradient(180deg,#fb923c,#c2410c)}.your-result{background:#eff6ff;border-radius:var(--radius-xl);padding:var(--space-lg);margin-bottom:var(--space-lg)}.your-result-header{font-size:var(--font-size-base);font-weight:var(--font-weight-semibold);color:var(--color-accent-blue);margin-bottom:var(--space-sm)}.your-result-rank{font-size:var(--font-size-2xl);font-weight:var(--font-weight-extrabold);color:var(--color-text-primary)}.your-result-score{font-size:var(--font-size-lg);color:var(--color-text-muted);margin-bottom:var(--space-md)}.your-result-stats{display:flex;justify-content:center;gap:var(--space-lg)}.stat{display:flex;flex-direction:column;align-items:center}.stat-value{font-size:var(--font-size-2xl);font-weight:var(--font-weight-bold);color:var(--color-accent-brand)}.stat-label{font-size:var(--font-size-sm);color:var(--color-text-muted)}.final-leaderboard{background:var(--color-bg-white);border-radius:var(--radius-lg);overflow:hidden;margin-bottom:var(--space-lg);box-shadow:var(--shadow-md)}.final-leaderboard-header{padding:var(--space-sm) var(--space-md);background:var(--color-bg-card-alt);font-size:var(--font-size-base);font-weight:var(--font-weight-semibold);color:var(--color-text-secondary);text-align:left}.final-leaderboard-list{max-height:200px;overflow-y:auto}.final-entry{display:flex;align-items:center;padding:10px var(--space-md);border-bottom:1px solid var(--color-bg-card-alt)}.final-entry:last-child{border-bottom:none}.final-entry.is-current{background:#eff6ff}.final-entry--disconnected{opacity:.5}.final-rank{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-text-muted);width:32px}.final-name{flex:1;font-size:var(--font-size-base);color:var(--color-text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.final-score{font-size:var(--font-size-base);font-weight:var(--font-weight-semibold);color:var(--color-accent-brand)}.end-admin-controls{display:flex;flex-direction:column;gap:var(--space-md);margin-bottom:var(--space-md)}.new-game-btn{width:100%;padding:var(--space-md) var(--space-xl);font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);color:var(--color-text-white);background:var(--color-success);border:none;border-radius:var(--radius-lg);cursor:pointer;transition:background var(--transition-fast);min-width:auto;min-height:auto}.new-game-btn:hover{background:var(--color-success-hover)}.new-game-btn:disabled{background:var(--color-text-light);cursor:not-allowed}.end-player-message{color:var(--color-text-muted)}.end-player-message p{margin:0 0 var(--space-sm) 0}.end-hint{font-size:var(--font-size-base)}.rejoin-hint{font-size:var(--font-size-base);color:var(--color-text-muted);margin-top:var(--space-sm)}.reveal-report-row{display:flex;justify-content:center;margin-top:var(--space-md)}.reveal-report-btn{background:none;border:none;padding:var(--space-xs) var(--space-sm);font-size:var(--font-size-sm);color:var(--color-text-muted);cursor:pointer;border-radius:var(--radius-sm);transition:color .15s ease,opacity .15s ease;opacity:.7}.reveal-report-btn:hover{color:var(--color-text-neon-muted);opacity:1}.reveal-report-btn:disabled{cursor:default;opacity:.5}.reveal-admin-controls{margin-top:var(--space-md)}.next-round-btn{padding:var(--space-md) var(--space-xl);font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);color:var(--color-text-white);background:var(--color-accent-brand);border:none;border-radius:var(--radius-lg);cursor:pointer;transition:all var(--transition-fast)}.next-round-btn:hover{background:var(--color-accent-brand-hover)}.next-round-btn:disabled{background:var(--color-text-light);cursor:not-allowed}.next-round-btn.is-final{background:var(--color-success)}.next-round-btn.is-final:hover{background:var(--color-success-hover)}.reveal-admin-buttons{display:flex;flex-direction:column;gap:var(--space-md);align-items:center}@media(min-width:480px){.reveal-admin-buttons{flex-direction:row;justify-content:center}}.invite-btn{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-lg);font-size:var(--font-size-md);font-weight:var(--font-weight-medium);color:var(--color-text-white);background:var(--color-bg-tertiary);border:1px solid var(--color-border-subtle);border-radius:var(--radius-lg);cursor:pointer;transition:all var(--transition-fast);min-height:44px;min-width:44px}.invite-btn:hover{background:var(--color-bg-secondary);border-color:var(--color-border-neon)}.invite-btn:active{transform:scale(.98)}.invite-btn-icon{font-size:var(--font-size-lg)}.invite-btn-label{white-space:nowrap}.invite-modal{position:fixed;inset:0;z-index:var(--z-modal);display:flex;align-items:center;justify-content:center}.invite-modal.hidden{display:none}.invite-modal-backdrop{position:absolute;inset:0;background:#000c}.invite-modal-content{position:relative;background:var(--color-bg-primary);border:1px solid var(--color-border-neon);padding:var(--space-lg);border-radius:var(--radius-xl);text-align:center;max-width:90vw;max-height:90vh;overflow-y:auto;animation:modalFadeIn var(--transition-normal) ease-out}@keyframes modalFadeIn{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.invite-modal-title{font-size:var(--font-size-xl);font-weight:var(--font-weight-bold);color:var(--color-text-white);margin:0 0 var(--space-xs)}.invite-modal-hint{font-size:var(--font-size-sm);color:var(--color-text-muted);margin:0 0 var(--space-md)}.invite-modal-code{display:inline-block;padding:var(--space-md);background:var(--color-bg-white);border-radius:var(--radius-md);margin-bottom:var(--space-md)}.invite-modal-code img{display:block;width:200px;height:200px}@media(min-width:480px){.invite-modal-code img{width:256px;height:256px}}.invite-modal-url-container{display:flex;gap:var(--space-xs);margin-bottom:var(--space-sm);max-width:100%}.invite-modal-url{flex:1;padding:var(--space-sm) var(--space-md);font-size:var(--font-size-sm);font-family:var(--font-family-mono);color:var(--color-text-primary);background:var(--color-bg-secondary);border:1px solid var(--color-border-subtle);border-radius:var(--radius-md);min-width:0;text-overflow:ellipsis}body.theme-dark .invite-modal-url{color:#e2e8f0;background:#ffffff1a;border-color:#ffffff26}.invite-copy-btn{display:flex;align-items:center;justify-content:center;padding:var(--space-sm);min-width:44px;min-height:44px;background:var(--color-accent-brand);border:none;border-radius:var(--radius-md);cursor:pointer;transition:all var(--transition-fast)}.invite-copy-btn:hover{background:var(--color-accent-brand-hover)}.invite-copy-btn:active{transform:scale(.95)}.invite-copy-icon{font-size:var(--font-size-lg)}.invite-copy-feedback{font-size:var(--font-size-sm);color:var(--color-success);margin:0 0 var(--space-md);animation:fadeInOut 2s ease-in-out}.invite-copy-feedback.hidden{display:none}@keyframes fadeInOut{0%,to{opacity:0}10%,80%{opacity:1}}.invite-modal-close{min-width:120px;min-height:48px}.reveal-results-cards{margin-top:var(--space-lg);width:100%;overflow:visible}.results-cards-header{font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);color:var(--color-text-secondary);margin-bottom:var(--space-sm);text-align:center}.results-cards-scroll{display:flex;flex-direction:row;flex-wrap:nowrap;gap:var(--space-sm);width:100%;overflow-x:auto;overflow-y:hidden;padding-bottom:var(--space-xs);-webkit-overflow-scrolling:touch}.results-cards-scroll::-webkit-scrollbar{height:3px}.results-cards-scroll::-webkit-scrollbar-thumb{background:var(--color-border-light);border-radius:2px}.result-card{background:var(--color-bg-card);border-radius:var(--radius-md);padding:var(--space-sm);text-align:center;border:2px solid var(--color-border-light);transition:all var(--transition-fast);flex:1 1 140px;min-width:140px;max-width:220px;box-sizing:border-box}.result-card.is-current{border-color:var(--color-accent-brand);background:#6366f11a}.result-card.is-score-high{border-color:var(--color-success);background:#10b9811a}.result-card.is-score-medium{border-color:var(--color-warning);background:#f59e0b1a}.result-card.is-score-zero{opacity:.6}.card-name{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-bottom:2px}.card-guess{font-size:var(--font-size-xl);font-weight:var(--font-weight-bold);color:var(--color-text-primary)}.card-accuracy{font-size:var(--font-size-xs);color:var(--color-text-muted)}.result-card.is-score-high .card-accuracy{color:var(--color-success);font-weight:var(--font-weight-semibold)}.card-score{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-success);margin-top:2px}.card-bet{margin-left:4px}body.theme-dark .result-card{background:#ffffff0d;border-color:#ffffff1a}body.theme-dark .result-card.is-current{border-color:var(--color-accent-neon);background:#00f5ff1a}body.theme-dark .result-card.is-score-high{border-color:var(--color-success-neon);background:#00ff881a}body.theme-dark .result-card.is-score-medium{border-color:var(--color-warning);background:#f59e0b26}body.theme-dark .card-name,body.theme-dark .card-guess{color:var(--color-text-white)}body.theme-dark .card-accuracy{color:var(--color-text-neon-muted)}body.theme-dark .result-card.is-score-high .card-accuracy,body.theme-dark .card-score{color:var(--color-success-neon)}.admin-control-bar{position:fixed;bottom:0;left:0;right:0;display:flex;justify-content:space-around;align-items:center;padding:var(--space-sm) var(--space-sm);padding-bottom:calc(var(--space-sm) + env(safe-area-inset-bottom));background:#000000e6;border-top:1px solid var(--color-border-dark);z-index:var(--z-control-bar)}.admin-control-bar.hidden{display:none}.control-btn{display:flex;flex-direction:column;align-items:center;justify-content:center;min-width:44px;min-height:44px;padding:var(--space-sm) var(--space-sm);background:#2a2a2a;border:none;border-radius:var(--radius-md);color:var(--color-text-white);cursor:pointer;transition:background var(--transition-fast),opacity var(--transition-fast)}.control-btn:hover:not(.is-disabled){background:#3a3a3a}.control-btn:active:not(.is-disabled){background:#4a4a4a}.control-btn.is-disabled{opacity:.4;cursor:not-allowed}.control-btn--danger{background:#7f1d1d}.control-btn--danger:hover:not(.is-disabled){background:#991b1b}.control-btn.is-stopped{background:var(--color-text-secondary);opacity:.7}.control-btn.is-stopped .control-icon{color:var(--color-success)}.volume-indicator{position:absolute;bottom:100%;left:50%;transform:translate(-50%);background:#000000e6;color:var(--color-text-white);padding:var(--space-sm) var(--space-md);border-radius:var(--radius-md);font-size:var(--font-size-base);font-weight:var(--font-weight-semibold);margin-bottom:var(--space-sm);opacity:0;transition:opacity var(--transition-normal);pointer-events:none;white-space:nowrap}.volume-indicator.is-visible{opacity:1}.control-btn.is-at-limit{opacity:.5}.control-btn.is-at-limit:active{transform:none}.control-icon{font-size:var(--font-size-xl);line-height:1}.control-icon.is-countdown{font-variant-numeric:tabular-nums;font-weight:700;min-width:1.5em;text-align:center}.control-label{font-size:var(--font-size-xs);margin-top:2px;text-transform:uppercase;letter-spacing:.5px}.has-control-bar .game-container,.has-control-bar .reveal-container,.has-control-bar .end-container{padding-bottom:140px}.reaction-bar{position:fixed;bottom:0;left:0;right:0;display:flex;justify-content:center;padding:var(--space-sm);padding-bottom:calc(var(--space-sm) + env(safe-area-inset-bottom));z-index:var(--z-reaction-bar);pointer-events:none}main:has(.admin-control-bar:not(.hidden)) .reaction-bar{bottom:70px}.reaction-bar.hidden{display:none}.reaction-bar-container{display:flex;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);background:#0009;border-radius:var(--radius-lg);border:1px solid rgba(255,255,255,.1);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);pointer-events:auto}.reaction-btn{font-size:1.5rem;padding:var(--space-sm);min-width:44px;min-height:44px;background:#1e1e2880;border:1px solid rgba(255,255,255,.15);border-radius:var(--radius-md);cursor:pointer;transition:transform var(--transition-fast),background var(--transition-fast)}.reaction-btn:hover{background:#32323cb3}.reaction-btn:active{transform:scale(.9)}.reaction-btn:disabled{cursor:default;opacity:.45}.reaction-btn.is-used{opacity:1;border-color:var(--color-accent-primary);box-shadow:0 0 12px var(--color-accent-primary)}@media(hover:none){.reaction-btn:active{box-shadow:0 0 15px var(--color-accent-primary)}}@media(prefers-reduced-motion:reduce){.reaction-btn{transition:none}.reaction-btn:active{transform:none}}.reaction-container{position:fixed;bottom:120px;left:0;right:0;pointer-events:none;z-index:99}main:has(.admin-control-bar:not(.hidden)) .reaction-container{bottom:180px}.reaction-bubble{position:absolute;font-size:1rem;font-weight:600;color:var(--color-text-white);text-shadow:0 0 8px var(--color-accent-primary);animation:reaction-float 3s ease-out forwards;white-space:nowrap}@keyframes reaction-float{0%{opacity:1;transform:translateY(0)}70%{opacity:1}to{opacity:0;transform:translateY(calc(-50vh + 60px))}}@media(prefers-reduced-motion:reduce){.reaction-bubble{animation:none;opacity:1}}.paused-container{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:var(--space-2xl) var(--space-lg);min-height:60vh;text-align:center}.paused-icon{font-size:var(--font-size-hero);margin-bottom:var(--space-lg);animation:pause-pulse 2s infinite}@keyframes pause-pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.6;transform:scale(.95)}}.paused-container h1{font-size:var(--font-size-3xl);font-weight:var(--font-weight-bold);color:var(--color-text-primary);margin-bottom:var(--space-md)}.paused-container>p{font-size:var(--font-size-md);color:var(--color-text-muted);margin-bottom:var(--space-sm)}.paused-spinner{margin:var(--space-xl) 0}.paused-hint{font-size:var(--font-size-base);color:var(--color-text-light)}.reconnecting-overlay{position:fixed;inset:0;background:#000c;display:flex;align-items:center;justify-content:center;z-index:var(--z-overlay)}.reconnecting-overlay.hidden{display:none}.reconnecting-content{text-align:center;color:var(--color-text-white)}.reconnecting-spinner .spinner{border-top-color:var(--color-text-white);width:48px;height:48px;margin:0 auto var(--space-md)}.reconnect-status{font-size:var(--font-size-md);color:var(--color-border-light)}.connection-lost-container{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:var(--space-2xl) var(--space-lg);min-height:60vh;text-align:center}.connection-lost-icon{font-size:var(--font-size-hero);margin-bottom:var(--space-lg)}.connection-lost-container h1{font-size:var(--font-size-3xl);font-weight:var(--font-weight-bold);color:var(--color-text-primary);margin-bottom:var(--space-md)}.connection-lost-container>p{font-size:var(--font-size-md);color:var(--color-text-muted);margin-bottom:var(--space-lg)}.connection-lost-hint{font-size:var(--font-size-base);color:var(--color-text-light);margin-top:var(--space-md)}@media(max-width:360px){.correct-year{font-size:var(--font-size-year)}.reveal-album-cover{width:120px;height:120px}}@media(min-width:768px){.reveal-album-cover{width:180px;height:180px}.correct-year{font-size:84px}}:focus-visible{outline:2px solid var(--color-accent-primary);outline-offset:2px}body.theme-dark :focus-visible{outline-color:var(--color-accent-primary);box-shadow:0 0 0 4px #ff2d6a4d}:focus:not(:focus-visible){outline:none}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}@media(prefers-color-scheme:light){body:not(.theme-dark){--color-bg-primary: #ffffff;--color-bg-surface: #f5f5f7;--color-bg-card: #ffffff;--color-bg-card-alt: #f8fafc;--color-text-primary: #1a1a1a;--color-text-muted: #666666;--color-text-light: #999999;--color-border-light: #e5e7eb}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.skip-link{position:absolute;top:-40px;left:0;background:var(--color-accent-primary);color:var(--color-text-white);padding:var(--space-sm) var(--space-md);z-index:var(--z-modal);transition:top var(--transition-fast)}.skip-link:focus{top:0}body.energy-calm .btn-glow:hover{box-shadow:none}body.energy-calm .wordmark-hero{text-shadow:none}body.energy-warmup .player-card{animation:energy-slide-in .3s ease-out}body.energy-warmup .qr-container{animation:energy-pulse-subtle 3s ease-in-out infinite}@keyframes energy-slide-in{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes energy-pulse-subtle{0%,to{opacity:1}50%{opacity:.85}}body.energy-party .album-cover{box-shadow:0 0 60px #ffffff1a}body.energy-party .submit-btn:not(:disabled){box-shadow:var(--glow-primary)}body.energy-party .year-display{text-shadow:0 0 20px rgba(255,45,106,.3)}.view{animation:screen-fade-in .3s ease-out}@keyframes screen-fade-in{0%{opacity:0}to{opacity:1}}@media(prefers-reduced-motion:reduce){body.energy-warmup .player-card,body.energy-warmup .qr-container,.view{animation:none}}.steal-btn{display:flex;align-items:center;justify-content:center;gap:var(--space-xs);width:100%;padding:var(--space-sm) var(--space-md);margin-top:var(--space-sm);background:linear-gradient(135deg,var(--color-purple-primary, #8b5cf6),var(--color-purple-secondary, #7c3aed));border:none;border-radius:var(--radius-lg);color:var(--color-text-white);font-size:var(--font-size-base);font-weight:var(--font-weight-bold);text-transform:uppercase;letter-spacing:.05em;cursor:pointer;box-shadow:0 0 20px #8b5cf666;transition:all var(--transition-fast)}.steal-btn:hover:not(:disabled){transform:scale(1.03);box-shadow:0 0 30px #8b5cf699}.steal-btn:disabled{opacity:.5;cursor:not-allowed}.steal-btn-icon{font-size:var(--font-size-lg)}.steal-modal{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;z-index:var(--z-modal)}.steal-modal-backdrop{position:absolute;inset:0;background:#000c;backdrop-filter:blur(4px)}.steal-modal-content{position:relative;background:var(--color-bg-card);border:2px solid var(--color-purple-primary, #8b5cf6);border-radius:var(--radius-xl);padding:var(--space-lg);max-width:320px;width:90%;text-align:center;box-shadow:0 0 40px #8b5cf64d}.steal-modal-title{font-size:var(--font-size-xl);font-weight:var(--font-weight-bold);color:var(--color-text-primary);margin-bottom:var(--space-xs)}.steal-modal-subtitle{font-size:var(--font-size-sm);color:var(--color-text-muted);margin-bottom:var(--space-md)}.steal-target-list{display:flex;flex-direction:column;gap:var(--space-sm);margin-bottom:var(--space-md)}.steal-target-btn{display:block;width:100%;padding:var(--space-sm) var(--space-md);background:var(--color-bg-surface);border:1px solid var(--color-accent-secondary);border-radius:var(--radius-md);color:var(--color-text-primary);font-size:var(--font-size-base);font-weight:var(--font-weight-semibold);cursor:pointer;transition:all var(--transition-fast)}.steal-target-btn:hover{background:var(--color-accent-secondary);color:var(--color-bg-primary);transform:scale(1.02)}.steal-no-targets{color:var(--color-text-muted);font-size:var(--font-size-sm);padding:var(--space-md)}.steal-modal-cancel{width:100%}.steal-confirmation{position:fixed;bottom:calc(var(--space-xl) + 60px);left:50%;transform:translate(-50%);display:flex;align-items:center;gap:var(--space-sm);background:linear-gradient(135deg,var(--color-purple-primary, #8b5cf6),var(--color-purple-secondary, #7c3aed));color:var(--color-text-white);padding:var(--space-sm) var(--space-lg);border-radius:var(--radius-full);font-weight:var(--font-weight-semibold);box-shadow:0 4px 20px #8b5cf680;animation:steal-toast-in .3s ease-out;z-index:var(--z-tooltip)}@keyframes steal-toast-in{0%{opacity:0;transform:translate(-50%) translateY(20px)}to{opacity:1;transform:translate(-50%) translateY(0)}}.steal-confirmation-icon{font-size:var(--font-size-lg)}.steal-badge{display:inline-flex;align-items:center;gap:var(--space-xs);background:#8b5cf633;border:1px solid var(--color-purple-primary, #8b5cf6);border-radius:var(--radius-full);padding:var(--space-xs) var(--space-sm);font-size:var(--font-size-xs);color:var(--color-purple-primary, #8b5cf6);margin-top:var(--space-xs)}.steal-badge-icon{font-size:.9em}.steal-badge-victim{background:#ef444433;border-color:var(--color-error);color:var(--color-error)}body.theme-dark .steal-modal-content{background:var(--color-bg-card)}body.theme-dark .steal-target-btn{background:#ffffff0d;border-color:var(--color-accent-secondary)}body.theme-dark .steal-target-btn:hover{background:var(--color-accent-secondary);color:var(--color-bg-primary)}@media(prefers-reduced-motion:reduce){.stat-badge--steal,.steal-confirmation{animation:none}}.intro-splash-modal{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;z-index:var(--z-modal)}.intro-splash-modal-backdrop{position:absolute;inset:0;background:#000c;backdrop-filter:blur(4px)}.intro-splash-modal-content{position:relative;background:var(--color-bg-card);border:2px solid var(--color-accent-primary, #1db954);border-radius:var(--radius-xl);padding:var(--space-lg);max-width:400px;width:90%;text-align:center;box-shadow:0 0 40px #1db9544d}.intro-splash-modal-emoji{font-size:3rem;margin-bottom:var(--space-sm)}.intro-splash-modal-title{font-size:var(--font-size-xl);font-weight:var(--font-weight-bold);color:var(--color-text-primary);margin-bottom:var(--space-xs)}.intro-splash-modal-desc{font-size:var(--font-size-base);color:var(--color-text-secondary);margin-bottom:var(--space-md)}.intro-splash-modal-waiting{font-size:var(--font-size-sm);color:var(--color-text-muted);margin-bottom:var(--space-sm)}.intro-splash-confirm-btn{width:100%;margin-top:var(--space-sm)}.score-animating{font-variant-numeric:tabular-nums}@keyframes score-pop{0%{transform:scale(1)}50%{transform:scale(1.3)}to{transform:scale(1)}}.score-pop{animation:score-pop .7s ease-out;display:inline-block}@keyframes score-shake{0%,to{transform:translate(0)}20%{transform:translate(-5px)}40%{transform:translate(5px)}60%{transform:translate(-3px)}80%{transform:translate(3px)}}.score-shake{animation:score-shake .4s ease-out;display:inline-block}@keyframes score-flash-red{0%,to{color:inherit}50%{color:var(--color-error)}}.score-flash-red{animation:score-flash-red .4s ease-out}@keyframes score-glow-gold{0%,to{text-shadow:0 0 0 transparent;color:inherit}50%{text-shadow:0 0 20px #ffd700,0 0 40px #ffd700;color:gold}}.score-glow-gold{animation:score-glow-gold .8s ease-out;display:inline-block}@keyframes score-burst{0%{transform:scale(1);text-shadow:0 0 0 transparent}30%{transform:scale(1.4);text-shadow:0 0 30px #ff6600}to{transform:scale(1);text-shadow:0 0 0 transparent}}.score-burst{animation:score-burst .7s ease-out;display:inline-block}@keyframes popup-float{0%{opacity:0;transform:translate(-50%)}20%{opacity:1}to{opacity:0;transform:translate(-50%,-30px)}}.points-popup{position:fixed;z-index:var(--z-toast);font-size:var(--font-size-lg);font-weight:var(--font-weight-bold);color:var(--color-success);pointer-events:none;animation:popup-float 1s ease-out forwards;transform:translate(-50%)}.points-popup--gold{color:gold;text-shadow:0 0 10px #ffd700}.points-popup--streak{color:#f60;text-shadow:0 0 10px #ff6600;font-size:var(--font-size-xl)}.leaderboard-entry--slide-up{animation:leaderboard-slide-up .5s ease-out}@keyframes leaderboard-slide-up{0%{transform:translateY(10px);background:#00ff884d}to{transform:translateY(0);background:transparent}}.leaderboard-entry--slide-down{animation:leaderboard-slide-down .5s ease-out}@keyframes leaderboard-slide-down{0%{transform:translateY(-10px);opacity:.6}to{transform:translateY(0);opacity:1}}@media(prefers-reduced-motion:reduce){.score-pop,.score-shake,.score-glow-gold,.score-burst,.score-flash-red{animation:none!important}.points-popup{animation:none!important;display:none!important}.leaderboard-entry--slide-up,.leaderboard-entry--slide-down{animation:none!important}}body.device-tier-low .leaderboard-entry--climbing,body.device-tier-low .leaderboard-entry--falling,body.device-tier-low .leaderboard-entry--slide-up,body.device-tier-low .leaderboard-entry--slide-down{animation:none!important}body.device-tier-low .neon-glow,body.device-tier-low .btn-glow:hover{box-shadow:none!important}body.device-tier-low .score-pop,body.device-tier-low .score-shake,body.device-tier-low .score-glow-gold,body.device-tier-low .score-burst{animation:none!important}body.device-tier-low .points-popup{display:none!important}body.device-tier-medium .leaderboard-entry--climbing,body.device-tier-medium .leaderboard-entry--falling{animation-duration:.2s!important}body.device-tier-medium .neon-glow{animation:none!important}body.device-tier-medium .score-pop,body.device-tier-medium .score-shake,body.device-tier-medium .score-glow-gold,body.device-tier-medium .score-burst{animation-duration:.2s!important}.reveal-skip-hint{position:absolute;bottom:var(--space-md);left:50%;transform:translate(-50%);font-size:var(--font-size-sm);color:var(--color-text-muted);opacity:0;animation:fadeInDelayed .3s ease-out 1s forwards}@keyframes fadeInDelayed{to{opacity:.6}}@media(prefers-reduced-motion:reduce){.reveal-skip-hint{animation:none;opacity:.6}}body.device-tier-low .reveal-skip-hint{animation:none;opacity:.6}.request-btn{margin-top:var(--space-md);gap:var(--space-xs)}.requests-list{display:flex;flex-direction:column;gap:var(--space-sm)}.request-item{display:flex;align-items:center;gap:var(--space-md);padding:var(--space-md);background:var(--color-surface-raised);border-radius:var(--radius-md);border:1px solid var(--color-border)}.request-item-thumbnail{width:40px;height:40px;min-width:40px;min-height:40px;max-width:40px;max-height:40px;border-radius:var(--radius-sm);object-fit:cover;flex-shrink:0}.request-item-thumbnail-placeholder{width:40px;height:40px;min-width:40px;min-height:40px;border-radius:var(--radius-sm);background:var(--color-surface);display:flex;align-items:center;justify-content:center;font-size:1.25rem;flex-shrink:0}.request-item-info{flex:1;min-width:0}.request-item-name{font-weight:600;font-size:var(--font-size-base);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.request-item-meta{font-size:var(--font-size-sm);color:var(--color-text-muted)}.request-status{display:inline-flex;align-items:center;gap:4px;padding:4px 8px;border-radius:var(--radius-full);font-size:var(--font-size-xs);font-weight:600;white-space:nowrap}.request-status--pending{background:#ffc10726;color:#ffc107}.request-status--ready{background:#4caf5026;color:#4caf50}.request-status--installed{background:transparent;color:#4caf50;border:1px solid #4caf50}.request-status--declined{background:#f4433626;color:#f44336}.request-update-btn{font-size:var(--font-size-xs);padding:6px 12px;white-space:nowrap}.text-input{width:100%;padding:var(--space-sm) var(--space-md);font-size:var(--font-size-base);background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);color:var(--color-text);transition:border-color .15s ease}.text-input:focus{outline:none;border-color:var(--color-primary)}.text-input.input-error{border-color:var(--color-error)}.info-box{background:var(--color-surface-raised);border-radius:var(--radius-md);padding:var(--space-md);margin-top:var(--space-md)}.info-box-title{font-weight:600;margin-bottom:var(--space-xs);color:var(--color-text-muted)}.info-box-list{margin:0;padding-left:0;list-style-position:inside;font-size:var(--font-size-sm);color:var(--color-text-muted)}.info-box-list li{margin-bottom:var(--space-xs)}.info-box-list li:last-child{margin-bottom:0}.info-box-note{margin-top:var(--space-sm);padding-top:var(--space-sm);border-top:1px solid var(--color-border);font-size:var(--font-size-sm);color:var(--color-text-muted)}.modal-content--success{text-align:center}.success-icon{font-size:3rem;margin-bottom:var(--space-sm)}.success-playlist-name{font-weight:600;font-size:var(--font-size-lg);margin-bottom:var(--space-xs)}.success-estimate{color:var(--color-text-muted);font-size:var(--font-size-sm)}.btn--loading{position:relative;color:transparent!important;pointer-events:none}.btn--loading:after{content:"";position:absolute;width:16px;height:16px;top:50%;left:50%;margin-left:-8px;margin-top:-8px;border:2px solid transparent;border-top-color:currentColor;border-radius:50%;animation:spin .6s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.share-container{margin:1.5rem 0;text-align:center}.share-header{font-size:1.2rem;font-weight:700;margin-bottom:1rem;color:var(--text-primary, #fff)}.share-card-preview{margin:12px auto;max-width:360px;width:100%;border-radius:16px;overflow:hidden;box-shadow:0 12px 36px #00000080,0 0 0 1px #ff2d6a40;background:#0a0a12}.share-card-image{display:block;width:100%;height:auto;aspect-ratio:1 / 1}.share-buttons{display:flex;gap:.75rem;justify-content:center;flex-wrap:wrap}.share-btn{padding:.6rem 1.2rem;border:none;border-radius:8px;font-size:.95rem;font-weight:600;cursor:pointer;background:var(--accent-color, #e94560);color:#fff;transition:opacity .2s,transform .1s}.share-btn:hover{opacity:.9}.share-btn:active{transform:scale(.97)}.share-toast{margin-top:.75rem;padding:.4rem 1rem;background:var(--success-color, #4caf50);color:#fff;border-radius:20px;display:inline-block;font-size:.85rem;font-weight:600;animation:shareToastIn .3s ease}@keyframes shareToastIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.admin-share-player-tabs{display:flex;flex-wrap:wrap;gap:.4rem;justify-content:center;margin-bottom:.75rem}.admin-share-tab{padding:.3rem .85rem;border-radius:20px;border:1px solid var(--color-border-light);background:transparent;color:var(--color-text-secondary);font-size:var(--font-size-sm);cursor:pointer;transition:all .15s ease}.admin-share-tab:hover{border-color:var(--color-accent-brand);color:var(--color-accent-brand)}.admin-share-tab.active{background:var(--color-accent-brand);border-color:var(--color-accent-brand);color:#fff;font-weight:var(--font-weight-semibold)}@media(max-width:480px){.share-buttons{flex-direction:column;align-items:center}.share-btn{width:100%;max-width:280px}.share-card-preview{max-width:320px}}@keyframes shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.skeleton{background:linear-gradient(90deg,var(--color-bg-card) 25%,#3a3a4e 50%,var(--color-bg-card) 75%);background-size:200% 100%;animation:shimmer 1.5s infinite;border-radius:var(--radius-md)}.skeleton-list{display:flex;flex-direction:column;gap:var(--space-sm);padding:var(--space-sm) 0}.skeleton-row{height:48px;width:100%}.skeleton-card{height:64px;width:100%}.player-header{position:relative}.connection-indicator{position:absolute;top:50%;right:var(--space-md);transform:translateY(-50%);display:flex;align-items:center;gap:4px;opacity:0;transition:opacity .3s ease}.connection-indicator--disconnected{opacity:1}.connection-dot{width:8px;height:8px;border-radius:50%;background:var(--color-error, #e94560);animation:pulse-dot 1.2s infinite}@keyframes pulse-dot{0%,to{opacity:1;transform:scale(1)}50%{opacity:.4;transform:scale(.7)}}.party-lights-picker{margin-top:12px}.party-lights-picker-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px;font-size:.85rem;color:var(--text-secondary, #aaa)}.party-lights-count{font-weight:500}.btn-link{background:none;border:none;color:var(--accent, #ff00ff);cursor:pointer;font-size:.85rem;padding:4px 8px}.btn-link:hover{text-decoration:underline}.party-lights-list{max-height:240px;overflow-y:auto;border-radius:8px;background:var(--card-bg, rgba(255,255,255,.05));margin-bottom:12px}.party-light-item{display:flex;align-items:center;gap:10px;padding:10px 12px;cursor:pointer;border-bottom:1px solid var(--border, rgba(255,255,255,.08));min-height:44px}.party-light-item:last-child{border-bottom:none}.party-light-item:hover{background:#ffffff08}.party-light-item input[type=checkbox]{width:18px;height:18px;flex-shrink:0;accent-color:var(--accent, #ff00ff)}.light-status{font-size:.75rem;flex-shrink:0}.light-name{flex:1;font-size:.9rem;color:var(--text-primary, #fff);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.light-cap-badge{font-size:.7rem;padding:2px 6px;border-radius:4px;background:#ffffff1a;color:var(--text-secondary, #aaa);flex-shrink:0;font-weight:500}.setting-row--vertical{flex-direction:column;align-items:flex-start;gap:var(--space-sm, 8px)}.wled-presets-grid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:var(--space-xs, 4px) var(--space-sm, 8px);width:100%}.wled-preset-item{display:flex;align-items:center;justify-content:space-between;gap:var(--space-xs, 4px);font-size:.8rem;color:var(--text-secondary, #aaa)}.wled-preset-item .input-sm{width:48px;padding:2px 4px;border:1px solid rgba(255,255,255,.15);border-radius:4px;background:#ffffff0d;color:var(--text-primary, #fff);font-size:.8rem;text-align:center}.admin-game-wrapper{max-width:480px;margin:0 auto}.admin-phase-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--space-md)}.round-badge{font-weight:600;font-size:1rem}.timer-badge{font-size:1.2rem;font-weight:700;font-variant-numeric:tabular-nums;min-width:3em;text-align:center}.timer-badge.timer-warning{color:var(--color-warning, #f59e0b)}.timer-badge.timer-critical{color:var(--color-danger, #ef4444);animation:pulse-critical .5s ease-in-out infinite alternate}@keyframes pulse-critical{0%{opacity:1}to{opacity:.5}}.admin-song-card{display:flex;align-items:center;gap:var(--space-md);background:var(--color-bg-card);border-radius:var(--radius-md);padding:var(--space-md);margin-bottom:var(--space-md)}.admin-album-art{width:64px;height:64px;border-radius:var(--radius-sm);object-fit:cover;flex-shrink:0}.admin-song-meta{min-width:0}.admin-song-title{font-weight:600;font-size:1rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.admin-song-artist{color:var(--text-secondary, #aaa);font-size:.9rem}.admin-song-details{text-align:center;margin-bottom:var(--space-sm, 8px)}.admin-song-year{font-size:.95rem;color:var(--color-primary, #1db954);font-weight:600}.admin-song-funfact{font-size:.85rem;color:var(--text-secondary, #aaa);font-style:italic;margin-top:4px;line-height:1.3}.admin-playing-banner{display:flex;align-items:center;gap:var(--space-sm, 8px);padding:var(--space-sm, 8px) var(--space-md, 16px);background:var(--bg-card, rgba(255, 255, 255, .05));border-bottom:2px solid var(--color-primary, #1db954);font-size:.9rem}.admin-playing-banner-icon{font-size:1.1rem;flex-shrink:0}.admin-playing-banner-text{flex:1;min-width:0}.admin-playing-banner-btn{flex-shrink:0;font-size:.8rem;padding:4px 10px;border-radius:var(--radius-sm, 8px)}.idle-halt-banner{display:flex;align-items:center;gap:var(--space-sm, 8px);margin:var(--space-md, 16px) auto;padding:var(--space-sm, 8px) var(--space-md, 16px);background:var(--bg-card, rgba(255, 255, 255, .06));border:1px solid var(--color-warning, #f5a623);border-radius:var(--radius-md, 12px);color:var(--color-warning, #f5a623);font-size:.9rem;line-height:1.35;max-width:540px}.idle-halt-icon{font-size:1.2rem;flex-shrink:0}.admin-pause-recovery{margin:var(--space-md, 16px);padding:var(--space-md, 16px) var(--space-lg, 20px);background:var(--bg-card, rgba(255, 255, 255, .06));border:2px solid var(--color-warning, #f5a623);border-radius:var(--radius-md, 12px)}.admin-pause-recovery-header{display:flex;align-items:center;gap:var(--space-sm, 8px);margin-bottom:var(--space-sm, 8px)}.admin-pause-recovery-icon{font-size:1.3rem;flex-shrink:0}.admin-pause-recovery-title{font-size:1rem;color:var(--color-warning, #f5a623)}.admin-pause-recovery-message{font-size:.95rem;line-height:1.4;margin:0 0 var(--space-sm, 8px) 0;color:var(--text-primary, #ffffff)}.admin-pause-recovery-detail{font-size:.8rem;line-height:1.3;margin:0 0 var(--space-md, 16px) 0;color:var(--text-secondary, rgba(255, 255, 255, .6));font-family:var(--font-monospace, monospace);word-break:break-word}.admin-pause-recovery-detail.hidden{display:none}.admin-pause-recovery-actions{display:flex;gap:var(--space-sm, 8px);flex-wrap:wrap}.admin-pause-recovery-actions .btn{flex:1;min-width:120px}.admin-personal-result-card{display:flex;flex-direction:column;gap:var(--space-xs, 4px)}.admin-personal-row{display:flex;justify-content:space-between;align-items:center;padding:var(--space-xs, 4px) 0}.admin-personal-label{color:var(--text-secondary, #aaa);font-size:.9rem}.admin-personal-value{font-weight:600;font-size:1rem}.admin-personal-score{color:var(--color-primary, #1db954);font-size:1.1rem}.artist-option--readonly{padding:10px 14px;background:var(--bg-card, rgba(255, 255, 255, .05));border:1px solid var(--color-border-dark, rgba(255, 255, 255, .1));border-radius:var(--radius-md, 12px);text-align:center;font-size:.9rem;opacity:.8}.admin-intro-splash{text-align:center;padding:var(--space-md);margin-bottom:var(--space-md);background:var(--bg-card, rgba(255, 255, 255, .05));border-radius:var(--radius-md, 12px);border:1px solid var(--color-primary, #1db954)}.intro-splash-info{font-size:1.1rem;font-weight:600;margin-bottom:var(--space-sm)}.intro-splash-icon{margin-right:6px}.btn-compact{padding:8px 12px;font-size:.85rem}.admin-player-panel{background:var(--color-bg-card);border-radius:var(--radius-md);padding:var(--space-md);margin-bottom:var(--space-md)}.admin-year-selector{text-align:center;margin-bottom:var(--space-md)}.admin-year-selector .year-display{display:block;font-size:2.5rem;font-weight:700;margin-bottom:var(--space-sm);font-variant-numeric:tabular-nums}.admin-year-selector .year-slider{width:100%;margin-bottom:var(--space-xs)}.year-range-labels{display:flex;justify-content:space-between;font-size:.75rem;color:var(--text-secondary, #aaa)}.last-round-banner{text-align:center;padding:var(--space-sm);background:var(--color-warning, #f59e0b);color:#000;border-radius:var(--radius-sm);font-weight:600;margin-bottom:var(--space-md)}.submission-status{text-align:center;color:var(--text-secondary, #aaa);font-size:.9rem;margin-top:var(--space-sm)}.submission-count{margin-bottom:6px}.submission-players{display:flex;flex-wrap:wrap;gap:6px;justify-content:center}.submission-player{display:inline-flex;align-items:center;gap:3px;padding:2px 8px;border-radius:12px;font-size:.8rem;background:var(--bg-card, rgba(255, 255, 255, .05))}.submission-player.is-submitted{color:var(--color-primary, #1db954)}.submission-player.is-waiting{opacity:.6}.reveal-year-display{font-size:2.5rem;font-weight:700;text-align:center;margin:var(--space-md) 0;color:var(--color-primary, #1db954)}.admin-personal-result{display:flex;justify-content:space-between;align-items:center;background:var(--color-bg-card);border-radius:var(--radius-md);padding:var(--space-md);margin-bottom:var(--space-md)}.score-badge{font-weight:700;color:var(--color-primary, #1db954)}.admin-leaderboard-container{margin-bottom:var(--space-md)}.admin-leaderboard{width:100%;border-collapse:collapse}.admin-leaderboard th{text-align:left;font-weight:600;padding:var(--space-xs) var(--space-sm);border-bottom:1px solid var(--color-border-light);font-size:.85rem;color:var(--text-secondary, #aaa)}.admin-leaderboard td{padding:var(--space-xs) var(--space-sm)}.admin-leaderboard tr.admin-highlight td{font-weight:600;color:var(--color-primary, #1db954)}.admin-winner-display{text-align:center;font-size:1.3rem;font-weight:600;padding:var(--space-lg) 0}.winner-trophy{font-size:2rem}.admin-end-actions{display:flex;gap:var(--space-sm);justify-content:center;margin-top:var(--space-md)}body.wizard-active>.admin-header,body.wizard-active>main.admin-content,body.wizard-active>.pwa-ios-hint{display:none}.wizard-takeover{position:fixed;inset:0;z-index:var(--z-overlay, 1100);background:var(--color-bg-primary);display:flex;flex-direction:column;overflow:hidden}.wizard-takeover.hidden{display:none}.wiz-bg{position:absolute;inset:0;background:radial-gradient(ellipse at top,rgba(255,45,106,.18),transparent 55%),radial-gradient(ellipse at bottom right,rgba(0,245,255,.12),transparent 40%);pointer-events:none}.wiz-top{padding:var(--space-md) var(--space-lg);display:flex;align-items:center;justify-content:space-between;gap:var(--space-md);border-bottom:1px solid var(--color-border-neon);position:relative;z-index:1}.wiz-step-count{font-family:var(--font-display);font-weight:600;font-size:var(--font-size-xs);letter-spacing:.14em;text-transform:uppercase;color:var(--color-text-dim, #6b6b7a);flex:1;text-align:center}.wiz-skip{font-family:var(--font-display);font-size:var(--font-size-sm);color:var(--color-text-neon-muted);background:none;border:none;font-weight:500;cursor:pointer;padding:var(--space-xs) var(--space-sm)}.wiz-skip:hover{color:var(--color-text-white)}.wiz-progress{display:flex;gap:var(--space-xs);padding:var(--space-sm) var(--space-lg);position:relative;z-index:1}.wiz-seg{flex:1;height:3px;background:var(--color-dark-surface);border-radius:var(--radius-full);overflow:hidden}.wiz-seg.filled{background:linear-gradient(90deg,var(--color-accent-primary),var(--color-accent-secondary));box-shadow:0 0 12px #ff2d6a80}.wiz-seg.active .wiz-seg-inner{height:100%;width:60%;background:linear-gradient(90deg,var(--color-accent-primary),var(--color-accent-secondary));box-shadow:0 0 12px #ff2d6a80;border-radius:var(--radius-full)}.wiz-frame{flex:1;overflow-y:auto;position:relative;z-index:1}.wiz-frame[hidden]{display:none}.wiz-body{padding:var(--space-lg);display:flex;flex-direction:column;gap:var(--space-md);max-width:720px;margin:0 auto}.wiz-eyebrow{font-family:var(--font-display);font-weight:700;font-size:var(--font-size-xs);letter-spacing:.14em;text-transform:uppercase;color:var(--color-accent-secondary)}.wiz-title{font-family:var(--font-display);font-weight:700;font-size:var(--font-size-3xl);line-height:1.15;letter-spacing:-.01em;color:var(--color-text-white)}.wiz-sub{color:var(--color-text-neon-muted);font-size:var(--font-size-base);line-height:1.5}.wiz-hint{font-size:var(--font-size-sm);margin-top:var(--space-xs)}.wiz-hint a{color:var(--color-accent-secondary);text-decoration:underline}.wiz-list{display:flex;flex-direction:column;gap:var(--space-sm)}.wiz-row{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);background:var(--color-dark-surface);border:1px solid var(--color-border-neon);border-radius:var(--radius-lg);cursor:pointer;transition:var(--transition-fast);color:var(--color-text-white);text-align:left;width:100%;font-family:var(--font-body)}.wiz-row:hover{background:var(--color-dark-surface-hover)}.wiz-row.selected{background:linear-gradient(90deg,#ff2d6a26,#00f5ff0d);border-color:var(--color-accent-primary);box-shadow:0 0 14px #ff2d6a40}.wiz-row-avatar{width:36px;height:36px;border-radius:var(--radius-md);background:linear-gradient(135deg,var(--color-accent-primary),var(--color-accent-brand));flex-shrink:0;display:grid;place-items:center;color:var(--color-bg-primary)}.wiz-row-avatar-icon{width:20px;height:20px}.wiz-row-text{flex:1;min-width:0}.wiz-row-name{font-family:var(--font-display);font-weight:600;font-size:var(--font-size-base);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.wiz-row-sub{font-size:var(--font-size-xs);color:var(--color-text-neon-muted);margin-top:2px}.wiz-row-check{color:var(--color-success-neon);text-shadow:var(--glow-success)}.wiz-provider-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:var(--space-sm)}.wiz-provider-chip{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-md);background:var(--color-dark-surface);border:1px solid var(--color-border-neon);border-radius:var(--radius-md);font-family:var(--font-display);font-weight:600;font-size:var(--font-size-base);cursor:pointer;color:var(--color-text-white);transition:var(--transition-fast)}.wiz-provider-chip:hover{background:var(--color-dark-surface-hover)}.wiz-provider-chip.active{border-color:var(--color-accent-primary);box-shadow:0 0 14px #ff2d6a40}.wiz-provider-chip.connected{border-color:var(--color-success-neon);background:#39ff141a}.wiz-provider-chip{justify-content:space-between}.wiz-provider-chip.disabled{opacity:.4;cursor:help;background:#ffffff05}.wiz-provider-chip.disabled:hover{opacity:.55;background:#ffffff0a}.wiz-provider-chip .chip-lock{width:14px;height:14px;opacity:.7;flex-shrink:0}.wiz-row-sub .cap-dot{width:4px;height:4px;border-radius:50%;background:var(--color-text-dim);display:inline-block;margin:0 6px;vertical-align:middle}.wiz-row-sub .cap-badge{font-family:var(--font-display);font-weight:600;font-size:10px;text-transform:uppercase;letter-spacing:.06em;padding:1px 6px;border-radius:var(--radius-sm);border:1px solid;vertical-align:middle;white-space:nowrap}.wiz-row-sub .cap-badge.full{color:var(--color-success-neon);background:#39ff1414;border-color:#39ff1466}.wiz-row-sub .cap-badge.partial{color:var(--color-warning-alt);background:#ff660014;border-color:#f606}.wiz-row-sub .cap-badge.none{color:var(--color-error-neon);background:#ff004014;border-color:#ff004066}.wiz-row-sub .cap-badge.summary{color:var(--color-text-dim);background:none;border:none;padding:0;text-transform:none;letter-spacing:0;font-weight:500}.wiz-explainer{margin-top:var(--space-md);padding:var(--space-lg);border-radius:var(--radius-lg);background:linear-gradient(135deg,#ff66000f,#00f5ff0a);border:1px solid rgba(255,102,0,.35)}.wiz-explainer[hidden]{display:none}.wiz-explainer-title{display:flex;align-items:center;gap:var(--space-sm);font-family:var(--font-display);font-weight:700;font-size:var(--font-size-md);margin:0 0 var(--space-sm)}.wiz-explainer-title .icon{font-size:18px}.wiz-explainer-body{font-size:var(--font-size-base);line-height:1.55;color:var(--color-text-neon-muted);margin:0 0 var(--space-md)}.wiz-explainer-steps{margin:0 0 var(--space-md);padding-left:var(--space-lg);font-size:var(--font-size-base);line-height:1.75;color:var(--color-text-neon-muted)}.wiz-explainer-steps li strong{color:var(--color-text-white)}.wiz-explainer-actions{display:flex;gap:var(--space-sm);flex-wrap:wrap}.wiz-explainer-footer{margin:var(--space-md) 0 0;padding-top:var(--space-sm);border-top:1px solid rgba(255,255,255,.06);font-size:var(--font-size-sm);color:var(--color-text-dim);font-style:italic}.wiz-lvl-card{display:flex;align-items:flex-start;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);background:var(--color-dark-surface);border:1px solid var(--color-border-neon);border-radius:var(--radius-lg);cursor:pointer;transition:var(--transition-fast)}.wiz-lvl-card.on{background:#00f5ff14;border-color:var(--color-accent-secondary)}.wiz-lvl-card.unavailable{opacity:.45;cursor:not-allowed}.wiz-lvl-text{flex:1}.wiz-lvl-title{font-family:var(--font-display);font-weight:600;font-size:var(--font-size-base);color:var(--color-text-white)}.wiz-lvl-desc{font-size:var(--font-size-xs);color:var(--color-text-neon-muted);margin-top:2px;line-height:1.4}.wiz-lvl-toggle{width:38px;height:22px;background:var(--color-dark-surface-hover);border-radius:var(--radius-full);border:1px solid var(--color-border-neon);position:relative;flex-shrink:0;margin-top:2px}.wiz-lvl-toggle:after{content:"";position:absolute;top:2px;left:2px;width:16px;height:16px;background:var(--color-text-neon-muted);border-radius:var(--radius-full);transition:var(--transition-fast)}.wiz-lvl-card.on .wiz-lvl-toggle{background:var(--color-accent-primary);border-color:var(--color-accent-primary)}.wiz-lvl-card.on .wiz-lvl-toggle:after{left:18px;background:var(--color-bg-primary)}.wiz-done{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-lg);text-align:center;padding:var(--space-xl);position:relative;z-index:1}.wiz-done-badge{font-family:var(--font-display);font-weight:700;font-size:var(--font-size-sm);letter-spacing:.14em;color:var(--color-success-neon);text-shadow:var(--glow-success)}.wiz-done-tag{font-family:var(--font-display);font-weight:600;font-size:var(--font-size-xl);color:var(--color-text-white)}.wiz-done-summary{display:flex;flex-direction:column;gap:var(--space-xs);width:100%;max-width:380px;padding:var(--space-md);background:var(--color-dark-surface);border:1px solid var(--color-border-neon);border-radius:var(--radius-lg)}.wiz-done-line{display:flex;justify-content:space-between;align-items:baseline;gap:var(--space-lg);font-family:var(--font-display);font-size:var(--font-size-sm);color:var(--color-text-neon-muted)}.wiz-done-line>span{letter-spacing:.08em;text-transform:uppercase;font-size:var(--font-size-xs);font-weight:600;flex-shrink:0}.wiz-done-line strong{color:var(--color-text-white);font-weight:600;text-align:right;word-break:break-word}.wiz-done-demo{width:100%;max-width:400px;aspect-ratio:16/9;border:1px solid var(--color-accent-primary);border-radius:var(--radius-xl);background:var(--color-bg-primary);position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;box-shadow:0 0 30px #ff2d6a4d}.wiz-done-demo-label{font-family:var(--font-display);font-size:var(--font-size-xs);font-weight:600;color:var(--color-text-neon-muted);letter-spacing:.14em;text-transform:uppercase}.wiz-done-demo-year{font-family:var(--font-display);font-weight:900;font-size:64px;line-height:.9;color:var(--color-accent-primary);text-shadow:0 0 24px rgba(255,45,106,.6);letter-spacing:-.03em}.wiz-done-demo-song{font-family:var(--font-display);font-size:var(--font-size-sm);font-weight:600;color:var(--color-text-neon-muted)}.wiz-cta{padding:var(--space-md) var(--space-lg);display:flex;gap:var(--space-sm);border-top:1px solid var(--color-border-neon);background:#0000004d;position:relative;z-index:1}.wiz-cta .btn{flex:1}.wiz-cta .wiz-back{flex:0 0 auto;min-width:80px}.wiz-frame-playlist:not([hidden])~.wiz-cta{display:none}.finish-setup-pill{font-family:var(--font-display);font-weight:600;font-size:var(--font-size-sm);color:var(--color-accent-primary);background:#ff2d6a1a;border:1px solid rgba(255,45,106,.4);border-radius:var(--radius-full);padding:var(--space-xs) var(--space-md);cursor:pointer;transition:var(--transition-fast)}.finish-setup-pill:hover{background:#ff2d6a33;box-shadow:var(--glow-primary)}.finish-setup-pill.hidden{display:none}@media(prefers-reduced-motion:reduce){.wizard-takeover,.wizard-takeover *{animation:none!important;transition:none!important}}.wiz-field{display:flex;flex-direction:column;gap:var(--space-xs)}.wiz-field-label{font-family:var(--font-display);font-weight:600;font-size:var(--font-size-xs);letter-spacing:.08em;text-transform:uppercase;color:var(--color-text-neon-muted)}.wiz-chip-group{display:flex;flex-wrap:wrap;gap:var(--space-xs)}.wiz-chip{padding:var(--space-sm) var(--space-md);background:var(--color-dark-surface);border:1px solid var(--color-border-neon);border-radius:var(--radius-full);font-family:var(--font-display);font-weight:600;font-size:var(--font-size-sm);color:var(--color-text-white);cursor:pointer;transition:var(--transition-fast)}.wiz-chip:hover{background:var(--color-dark-surface-hover)}.wiz-chip.active{background:var(--color-accent-primary);border-color:var(--color-accent-primary);color:var(--color-bg-primary);box-shadow:var(--glow-primary)}.wiz-request-playlist{margin-top:var(--space-md);align-self:flex-start}body.wizard-active .modal{z-index:calc(var(--z-overlay) + 10)}.wiz-difficulty-hint{margin-top:var(--space-sm);padding:var(--space-sm) var(--space-md);background:#00f5ff0f;border-left:2px solid var(--color-accent-secondary);border-radius:var(--radius-sm);color:var(--color-text-neon-muted);font-size:var(--font-size-sm);line-height:1.5;min-height:1.5em}.wiz-rounds-custom{display:flex;align-items:center;gap:var(--space-sm);margin-top:var(--space-sm)}.wiz-rounds-custom input{width:6em;padding:var(--space-sm) var(--space-md);background:var(--color-dark-surface);border:1px solid var(--color-border-neon);border-radius:var(--radius-sm);color:var(--color-text-white);font-family:var(--font-body);font-size:var(--font-size-base)}.wiz-rounds-custom input:focus{outline:none;border-color:var(--color-accent-primary)}.wiz-rounds-custom span{color:var(--color-text-neon-muted);font-size:var(--font-size-sm)}.wiz-lvl-card{flex-direction:column;align-items:stretch;padding:0}.wiz-lvl-head{display:flex;align-items:flex-start;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);cursor:pointer;user-select:none}.wiz-lvl-card.unavailable .wiz-lvl-head{cursor:not-allowed}.wiz-lvl-head:hover{background:#ffffff05}.wiz-lvl-card.on .wiz-lvl-head{border-bottom:1px solid var(--color-border-neon)}.wiz-detail{padding:var(--space-md);display:flex;flex-direction:column;gap:var(--space-md);background:#00000026}.wiz-detail-checks{display:flex;flex-direction:column;gap:var(--space-xs)}.wiz-detail-check{display:flex;align-items:center;gap:var(--space-sm);padding:6px 8px;border-radius:var(--radius-md);cursor:pointer}.wiz-detail-check:hover{background:#ffffff08}.wiz-detail-check input[type=checkbox]{accent-color:var(--color-accent-primary);width:16px;height:16px;flex-shrink:0}.wiz-detail-check-name{font-family:var(--font-display);font-weight:500;font-size:var(--font-size-sm);color:var(--color-text-white)}.wiz-detail-empty{font-size:var(--font-size-sm);color:var(--color-text-neon-muted);padding:var(--space-sm);background:var(--color-dark-surface);border:1px dashed var(--color-border-neon);border-radius:var(--radius-md);text-align:center}.wiz-detail-input{padding:var(--space-sm) var(--space-md);background:var(--color-bg-primary);border:1px solid var(--color-border-neon);border-radius:var(--radius-md);color:var(--color-text-white);font-family:ui-monospace,monospace;font-size:var(--font-size-sm)}.wiz-detail-input:focus{outline:none;border-color:var(--color-accent-secondary);box-shadow:0 0 0 3px #00f5ff26}.wiz-field-hint{font-size:var(--font-size-xs);color:var(--color-text-dim);line-height:1.4}body.home-mode #media-players,body.home-mode #music-service,body.home-mode #playlists,body.home-mode #game-settings,body.home-mode #party-lights,body.home-mode #tts-settings,body.home-mode .admin-content>.admin-actions{display:none!important}.home-view{display:none}.home-view.hidden{display:none!important}body.home-mode #home-view,body.home-mode .home-view{display:flex;flex-direction:column;min-height:calc(100vh - 120px);background:var(--color-bg-primary);border:1px solid var(--color-border-neon);border-radius:var(--radius-xl);overflow:hidden;margin-bottom:var(--space-md)}.home-stage{flex:1;position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-md);padding:var(--space-xl) var(--space-lg);text-align:center}.home-stage-bg{position:absolute;inset:0;pointer-events:none;background:radial-gradient(ellipse at center,rgba(255,45,106,.15),transparent 55%),radial-gradient(ellipse at bottom,rgba(0,245,255,.08),transparent 50%)}.home-eyebrow{position:relative;z-index:1;font-family:var(--font-display);font-weight:700;font-size:var(--font-size-sm);letter-spacing:.16em;text-transform:uppercase;color:var(--color-accent-secondary)}.home-headline{position:relative;z-index:1;font-family:var(--font-display);font-weight:900;font-size:var(--font-size-4xl);line-height:.95;letter-spacing:-.02em;margin:0;text-shadow:0 0 40px rgba(255,45,106,.35)}.home-headline-sub{display:block;font-weight:600;font-size:var(--font-size-xl);letter-spacing:.02em;text-shadow:none;color:var(--color-text-white);margin-top:4px}.home-hero-card{position:relative;z-index:1;padding:var(--space-lg);background:var(--color-dark-surface);border:1px solid var(--color-accent-primary);border-radius:var(--radius-2xl);box-shadow:0 0 32px #ff2d6a38;display:flex;flex-direction:column;align-items:center;gap:var(--space-sm);max-width:280px;width:100%}.home-qr-loading{font-family:var(--font-display);font-weight:600;font-size:var(--font-size-sm);color:var(--color-text-neon-muted);padding:var(--space-xl) 0;letter-spacing:.08em;text-transform:uppercase}.home-qr-loading.hidden{display:none}.home-qr-container{padding:8px;background:var(--color-bg-white);border-radius:var(--radius-md);display:grid;place-items:center;min-width:180px;min-height:180px}.home-qr-container:empty{display:none}.home-qr-container img,.home-qr-container canvas{display:block;max-width:180px;height:auto}.home-hero-title{font-family:var(--font-display);font-weight:700;font-size:var(--font-size-lg);color:var(--color-text-white);letter-spacing:-.01em}.home-hero-sub{font-size:var(--font-size-sm);color:var(--color-accent-secondary);font-family:ui-monospace,monospace;word-break:break-all;max-width:260px}.home-players{position:relative;z-index:1;display:grid;grid-template-columns:repeat(auto-fill,minmax(84px,1fr));gap:var(--space-sm);justify-items:center;width:100%;max-width:380px;margin-top:var(--space-lg)}.home-players:empty{display:none}.home-player-tile{position:relative;width:100%;aspect-ratio:1;padding:var(--space-sm);border-radius:var(--radius-lg);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;background:linear-gradient(135deg,var(--tile-from),var(--tile-to));border:1.5px solid var(--tile-border);box-shadow:0 0 14px var(--tile-glow);--tile-from: rgba(0, 245, 255, .32);--tile-to: rgba(0, 245, 255, .08);--tile-border: rgba(0, 245, 255, .7);--tile-glow: rgba(0, 245, 255, .35)}.home-player-tile-initial{font-family:var(--font-display);font-weight:900;font-size:28px;line-height:1;color:var(--color-text-white);text-shadow:0 2px 8px rgba(0,0,0,.4)}.home-player-tile-name{font-family:var(--font-display);font-weight:700;font-size:var(--font-size-xs);color:var(--color-text-white);max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding:0 2px}.home-player-tile--c2{--tile-from: rgba(57, 255, 20, .32);--tile-to: rgba(57, 255, 20, .08);--tile-border: rgba(57, 255, 20, .65);--tile-glow: rgba(57, 255, 20, .32)}.home-player-tile--c3{--tile-from: rgba(255, 102, 0, .32);--tile-to: rgba(255, 102, 0, .08);--tile-border: rgba(255, 102, 0, .65);--tile-glow: rgba(255, 102, 0, .32)}.home-player-tile--c4{--tile-from: rgba(0, 245, 255, .22);--tile-to: rgba(0, 245, 255, .04);--tile-border: rgba(0, 245, 255, .5);--tile-glow: rgba(0, 245, 255, .22)}.home-player-tile--host{--tile-from: rgba(255, 45, 106, .35);--tile-to: rgba(255, 45, 106, .08);--tile-border: rgba(255, 45, 106, .85);--tile-glow: rgba(255, 45, 106, .5);box-shadow:var(--glow-primary),0 0 22px #ff2d6a59}.home-player-tile-crown{position:absolute;top:-10px;right:-10px;font-size:20px;line-height:1;filter:drop-shadow(0 0 6px rgba(255,45,106,.8));pointer-events:none}.home-players-waiting{grid-column:1 / -1;padding:var(--space-md);border-radius:var(--radius-full);border:1px dashed var(--color-border-neon);background:transparent;color:var(--color-text-dim);font-family:var(--font-display);font-weight:500;font-size:var(--font-size-sm);text-align:center}.home-meta{position:relative;z-index:1;font-family:var(--font-display);font-weight:500;font-size:var(--font-size-xs);letter-spacing:.12em;text-transform:uppercase;color:var(--color-text-dim);max-width:320px;line-height:1.6}.home-cta-bar{display:flex;gap:var(--space-sm);padding:var(--space-md) var(--space-lg);background:#0000004d;border-top:1px solid var(--color-border-neon)}.home-cta-edit{padding:var(--space-sm) var(--space-md);font-size:var(--font-size-sm)}.home-cta-start{flex:1;padding:var(--space-md);font-size:var(--font-size-base);box-shadow:var(--glow-primary),0 0 40px #ff2d6a40}.home-cta-start.btn-ghost{box-shadow:none;flex:0 0 auto}.home-cta-join{width:100%;margin-top:var(--space-md);padding:var(--space-lg) var(--space-md);font-size:var(--font-size-xl);font-weight:700;letter-spacing:.02em;border-radius:var(--radius-xl);box-shadow:var(--glow-primary),0 0 48px #ff2d6a4d;display:inline-flex;align-items:center;justify-content:center;gap:var(--space-sm)}.home-cta-join svg{width:26px;height:26px;stroke-width:2.25}.home-cta-join.hidden{display:none}.wiz-mode-cards{display:flex;flex-direction:column;gap:var(--space-xs)}.wiz-mode-card{display:flex;align-items:flex-start;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);background:var(--color-dark-surface);border:1px solid var(--color-border-neon);border-radius:var(--radius-lg);cursor:pointer;transition:var(--transition-fast)}.wiz-mode-card:hover{background:var(--color-dark-surface-hover)}.wiz-mode-card.disabled{cursor:not-allowed;pointer-events:none}.wiz-mode-card.disabled .wiz-mode-icon,.wiz-mode-card.disabled .wiz-mode-title,.wiz-mode-card.disabled .wiz-lvl-toggle{opacity:.45}.wiz-mode-hint.gated{color:var(--color-warning);font-weight:600}.wiz-mode-card.on{background:#ff2d6a14;border-color:var(--color-accent-primary)}.wiz-mode-icon{font-size:22px;line-height:1;flex-shrink:0;margin-top:2px}.wiz-mode-body{flex:1;min-width:0}.wiz-mode-title{font-family:var(--font-display);font-weight:600;font-size:var(--font-size-base);color:var(--color-text-white)}.wiz-mode-hint{font-size:var(--font-size-xs);color:var(--color-text-neon-muted);margin-top:2px;line-height:1.45}.wiz-mode-card.on .wiz-lvl-toggle{background:var(--color-accent-primary);border-color:var(--color-accent-primary)}.wiz-mode-card.on .wiz-lvl-toggle:after{left:18px;background:var(--color-bg-primary)}.wiz-coremode-cards{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-sm)}.wiz-coremode-card{position:relative;display:flex;flex-direction:column;align-items:center;text-align:center;gap:6px;padding:var(--space-md) var(--space-sm);background:var(--color-dark-surface);border:1.5px solid var(--color-border-neon);border-radius:var(--radius-xl);cursor:pointer;overflow:hidden;transition:transform var(--transition-fast),box-shadow var(--transition-fast),background var(--transition-fast),border-color var(--transition-fast),opacity var(--transition-fast)}.wiz-coremode-card:hover{background:var(--color-dark-surface-hover)}.wiz-coremode-card .wiz-mode-icon{font-size:32px;margin-top:0}.wiz-coremode-card .wiz-mode-body{flex:none}.wiz-coremode-card .wiz-mode-title{font-weight:900;letter-spacing:.02em;text-transform:uppercase}.wiz-coremode-card .wiz-mode-hint{color:var(--color-text-dim)}.wiz-coremode-card.selected{transform:translateY(-2px)}.wiz-coremode-card--pink.selected{border-color:var(--color-accent-primary);background:radial-gradient(120% 100% at 50% 0%,#ff2d6a38,#ff2d6a0a);box-shadow:0 0 24px #ff2d6a4d}.wiz-coremode-card--cyan.selected{border-color:var(--color-accent-secondary);background:radial-gradient(120% 100% at 50% 0%,#00f5ff33,#00f5ff08);box-shadow:0 0 24px #00f5ff47}.wiz-coremode-card.dim{opacity:.5}.wiz-coremode-card.dim:hover{opacity:.8}.wiz-coremode-badge{position:absolute;top:8px;right:8px;font-family:var(--font-display);font-weight:800;font-size:9px;letter-spacing:.06em;text-transform:uppercase;padding:2px 7px;border-radius:var(--radius-full)}.wiz-coremode-card--pink .wiz-coremode-badge{background:var(--color-accent-primary);color:var(--color-text-white)}.wiz-coremode-card--cyan .wiz-coremode-badge{background:var(--color-accent-secondary);color:#04222a}@media(prefers-reduced-motion:reduce){.wiz-coremode-card{transition:none}.wiz-coremode-card.selected{transform:none}}.home-cast-link{display:inline-flex;align-items:center;gap:var(--space-xs);padding:var(--space-xs) var(--space-md);background:var(--color-dark-surface);border:1px solid var(--color-accent-secondary);border-radius:var(--radius-full);font-family:var(--font-display);font-weight:600;font-size:var(--font-size-sm);color:var(--color-accent-secondary);text-decoration:none;position:relative;z-index:1;transition:var(--transition-fast)}.home-cast-link:hover{background:#00f5ff14;box-shadow:var(--glow-secondary)}.home-cast-link.hidden{display:none}.wiz-detail-test{align-self:flex-start;margin-top:var(--space-xs);padding:var(--space-xs) var(--space-md);font-size:var(--font-size-xs)}.wiz-detail-test[disabled]{opacity:.5;cursor:not-allowed}.wiz-wled-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:var(--space-xs)}.wiz-wled-row{display:flex;align-items:center;gap:var(--space-xs)}.wiz-wled-phase{font-family:var(--font-display);font-weight:700;font-size:10px;letter-spacing:.1em;color:var(--color-text-dim);min-width:72px}.wiz-wled-input{width:60px;padding:4px 8px;text-align:center;font-family:ui-monospace,monospace;font-size:var(--font-size-sm)}.home-utility-row{display:flex;gap:var(--space-sm);flex-wrap:wrap;justify-content:center;position:relative;z-index:1}.home-utility-btn{display:inline-flex;align-items:center;gap:var(--space-xs);padding:var(--space-xs) var(--space-md);background:var(--color-dark-surface);border:1px solid var(--color-border-neon);border-radius:var(--radius-full);font-family:var(--font-display);font-weight:600;font-size:var(--font-size-sm);color:var(--color-text-neon-muted);cursor:pointer;transition:var(--transition-fast)}.home-utility-btn:hover{color:var(--color-text-white);border-color:var(--color-accent-secondary)}.home-utility-btn.hidden{display:none}.home-cta-end{border-color:#ff004066;color:var(--color-error-neon)}.home-cta-end:hover{background:#ff00401a;box-shadow:0 0 12px #ff00404d}.home-cta-end.hidden{display:none}.home-hero-card--setup{border-color:var(--color-border-neon);box-shadow:none;gap:var(--space-md)}.home-setup-glyph{width:56px;height:56px;display:grid;place-items:center;color:var(--color-accent-secondary);text-shadow:0 0 12px rgba(0,245,255,.4)}.home-setup-glyph svg{width:100%;height:100%}.home-hero-sub--plain{color:var(--color-text-neon-muted);font-family:var(--font-body);text-align:center;font-size:var(--font-size-sm);line-height:1.5;max-width:280px}.home-cta-setup{flex:1;padding:var(--space-md);font-size:var(--font-size-base);box-shadow:var(--glow-primary),0 0 40px #ff2d6a40}.home-cta-setup.hidden,body.is-learning-screen .player-header,body.is-ingame .player-header{display:none}#tour-view.view:not(.hidden){display:flex;flex-direction:column}.tour-container{min-height:100vh;padding:var(--space-xl) var(--space-md) var(--space-md);background:radial-gradient(circle at 50% 10%,rgba(255,45,106,.1),transparent 55%),radial-gradient(circle at 85% 90%,rgba(0,245,255,.08),transparent 55%),var(--color-bg-primary);display:flex;flex-direction:column}.tour-header-wiz{margin-bottom:var(--space-lg);display:flex;flex-direction:column;gap:var(--space-sm)}.tour-step-count{display:flex;align-items:center;justify-content:space-between;font-family:var(--font-body);font-size:var(--font-size-xs);font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--color-text-neon-muted)}.tour-step-count .of{color:var(--color-text-dim);font-weight:500}.tour-skip-link{font-family:var(--font-body);font-size:var(--font-size-sm);font-weight:500;color:var(--color-text-dim);background:transparent;border:0;cursor:pointer;padding:var(--space-xs) var(--space-sm);transition:color var(--transition-fast)}.tour-skip-link:hover,.tour-skip-link:focus-visible{color:var(--color-text-neon-muted);outline:none}.tour-wiz-progress{display:flex;gap:4px;width:100%}.tour-wiz-seg{flex:1;height:3px;background:#ffffff14;border-radius:var(--radius-full);overflow:hidden;position:relative}.tour-wiz-seg.filled{background:linear-gradient(90deg,var(--color-accent-primary),var(--color-accent-secondary));box-shadow:0 0 12px #ff2d6a80}.tour-wiz-seg.active .tour-wiz-seg-inner{height:100%;width:60%;background:linear-gradient(90deg,var(--color-accent-primary),var(--color-accent-secondary));box-shadow:0 0 12px #ff2d6a80;border-radius:var(--radius-full)}.tour-card{flex:1;display:flex;flex-direction:column;align-items:center;padding:var(--space-md) 0;animation:tour-card-enter var(--transition-slow) ease-out}@keyframes tour-card-enter{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}.tour-card.hidden{display:none}@media(prefers-reduced-motion:reduce){.tour-card{animation:none}}.tour-title{font-family:var(--font-display);font-weight:900;font-size:2.5rem;line-height:1;text-align:center;color:var(--color-text-white);letter-spacing:-.02em;margin-bottom:var(--space-sm)}.tour-caption{font-family:var(--font-body);font-weight:500;font-size:var(--font-size-lg);text-align:center;color:var(--color-text-neon-muted);margin-bottom:var(--space-xl);max-width:320px}.tour-preview{flex:1;width:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-md);margin-bottom:var(--space-md)}.tour-preview-album{width:88px;height:88px;border-radius:var(--radius-lg);background:linear-gradient(135deg,#2a1b4a,#1a1a24);border:1px solid rgba(255,255,255,.08);display:flex;align-items:center;justify-content:center;position:relative;overflow:hidden}.tour-preview-album:after{content:"";position:absolute;width:32px;height:32px;border-radius:50%;background:radial-gradient(circle,#0a0a12 28%,#2a2a3a 29% 62%,#0a0a12 63%);border:1px solid rgba(255,255,255,.08)}.tour-preview-album:before{content:"\266a";position:absolute;font-size:26px;color:var(--color-accent-secondary);opacity:.75;z-index:1}.tour-year-display{display:flex;align-items:center;justify-content:center;gap:var(--space-md)}.tour-year-adjust{width:38px;height:38px;border-radius:50%;border:1.5px solid rgba(255,255,255,.25);background:transparent;color:#fff9;font-size:var(--font-size-xl);font-weight:400;display:flex;align-items:center;justify-content:center}.tour-year-big{font-family:var(--font-display);font-weight:900;font-size:4.25rem;color:var(--color-accent-secondary);text-shadow:0 0 24px rgba(0,245,255,.6);line-height:1;letter-spacing:-.03em}.tour-preview-slider{width:100%;max-width:320px;display:flex;align-items:center;gap:var(--space-sm)}.tour-slider-label{font-family:var(--font-body);font-size:var(--font-size-sm);color:#ffffff80;min-width:34px;text-align:center}.tour-slider-track{flex:1;height:4px;background:#ffffff26;border-radius:2px;position:relative}.tour-slider-thumb{position:absolute;top:50%;left:45.3%;transform:translate(-50%,-50%);width:20px;height:20px;border-radius:50%;background:var(--color-accent-secondary);box-shadow:0 0 16px #00f5ffcc;border:2px solid var(--color-bg-primary)}.tour-bet-button{background:linear-gradient(135deg,#ff2d6a1f,#ff2d6a0f);border:2px solid var(--color-accent-primary);border-radius:var(--radius-xl);padding:var(--space-md) var(--space-lg);display:flex;align-items:center;gap:var(--space-sm);box-shadow:0 0 24px #ff2d6a59}.tour-bet-button .tour-bet-dice{font-size:30px;filter:drop-shadow(0 0 6px rgba(255,45,106,.6))}.tour-bet-button .tour-bet-label{font-family:var(--font-display);font-weight:700;font-size:var(--font-size-lg);color:var(--color-text-white)}.tour-bet-score{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);background:var(--color-bg-surface);border-radius:var(--radius-md);border:1px solid rgba(255,255,255,.06)}.tour-bet-score-base{font-family:var(--font-display);font-weight:700;font-size:var(--font-size-2xl);color:var(--color-text-neon-muted)}.tour-bet-score-op{color:var(--color-text-dim);font-size:var(--font-size-lg)}.tour-bet-score-multi{font-family:var(--font-display);font-weight:700;font-size:var(--font-size-2xl);color:var(--color-accent-primary)}.tour-bet-score-final{font-family:var(--font-display);font-weight:900;font-size:var(--font-size-4xl);color:var(--color-success-neon);text-shadow:0 0 12px rgba(57,255,20,.5)}.tour-steal-button{background:linear-gradient(135deg,#00f5ff1f,#00f5ff0a);border:2px solid var(--color-accent-secondary);border-radius:var(--radius-xl);padding:var(--space-md) var(--space-lg);display:flex;align-items:center;gap:var(--space-sm);box-shadow:0 0 24px #00f5ff66}.tour-steal-button .tour-steal-ninja{font-size:30px}.tour-steal-button .tour-steal-label{font-family:var(--font-display);font-weight:700;font-size:var(--font-size-lg);color:var(--color-text-white)}.tour-steal-targets{display:flex;gap:var(--space-sm);align-items:center}.tour-steal-target{background:var(--color-bg-surface);border-radius:var(--radius-md);padding:var(--space-sm) var(--space-md);font-family:var(--font-body);font-size:var(--font-size-sm);font-weight:500;color:var(--color-text-neon-muted);border:1px solid rgba(255,255,255,.06)}.tour-steal-target.highlighted{color:var(--color-text-white);border-color:var(--color-accent-secondary);box-shadow:0 0 12px #00f5ff59}.tour-hint{font-family:var(--font-body);font-size:var(--font-size-sm);color:#fff6;text-align:center;font-style:italic;margin-top:var(--space-xs)}.tour-ta-fields{display:flex;flex-direction:column;gap:var(--space-sm);width:100%}.tour-ta-field{display:flex;flex-direction:column;gap:4px;padding:10px 14px;background:linear-gradient(180deg,#ff2d6a0f,#ffffff05);border:1px solid rgba(255,45,106,.22);border-radius:var(--radius-lg);text-align:left}.tour-ta-field-label{font-family:var(--font-display);font-weight:700;font-size:var(--font-size-xs);letter-spacing:.08em;text-transform:uppercase;color:var(--color-text-neon-muted)}.tour-ta-field-val{font-family:var(--font-body);font-weight:600;font-size:var(--font-size-md);color:var(--color-text-white)}.tour-artist-prompt{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);background:var(--color-bg-surface);border-radius:var(--radius-md);border:1px solid rgba(255,255,255,.06);width:100%;max-width:320px}.tour-artist-prompt .tour-artist-mic{font-size:var(--font-size-xl)}.tour-artist-prompt .tour-artist-who{font-family:var(--font-body);font-size:var(--font-size-base);font-weight:500;color:var(--color-text-white)}.tour-artist-prompt .tour-artist-bonus{margin-left:auto;background:#22c55e26;color:var(--color-success);font-weight:700;font-size:var(--font-size-sm);padding:2px var(--space-sm);border-radius:var(--radius-full)}.tour-artist-grid{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-sm);width:100%;max-width:320px}.tour-artist-option{min-height:48px;padding:var(--space-sm) var(--space-md);border:2px solid rgba(255,255,255,.12);border-radius:var(--radius-md);background:var(--color-bg-surface);color:var(--color-text-white);font-family:var(--font-body);font-size:var(--font-size-base);font-weight:500;display:flex;align-items:center;justify-content:center;cursor:default}.tour-artist-option.is-winner{background:var(--color-success);border-color:var(--color-success);color:var(--color-text-white);box-shadow:var(--glow-primary)}.tour-footer{margin-top:auto;padding-top:var(--space-md);display:flex;gap:var(--space-sm);align-items:stretch}.btn-tour-skip{flex:1;background:transparent;color:var(--color-text-neon-muted);border:1.5px solid rgba(255,255,255,.15);border-radius:var(--radius-lg);padding:var(--space-md) var(--space-md);font-family:var(--font-body);font-weight:600;font-size:var(--font-size-md);cursor:pointer}.btn-tour-skip:hover,.btn-tour-skip:focus-visible{border-color:#ffffff4d;color:var(--color-text-white);outline:none}.btn-tour-next{flex:2;background:var(--color-accent-primary);color:var(--color-text-white);border:none;border-radius:var(--radius-lg);padding:var(--space-md) var(--space-lg);font-family:var(--font-display);font-weight:700;font-size:var(--font-size-lg);box-shadow:var(--glow-primary);cursor:pointer;display:flex;align-items:center;justify-content:center;gap:var(--space-sm)}.btn-tour-next .chev{opacity:.85}#ready-view.view:not(.hidden){display:flex;flex-direction:column}.ready-container{min-height:100vh;padding:var(--space-xl);background:radial-gradient(circle at 50% 30%,rgba(255,45,106,.1),transparent 55%),radial-gradient(circle at 85% 80%,rgba(0,245,255,.08),transparent 55%),var(--color-bg-primary);display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:var(--space-sm)}.ready-wordmark{font-family:var(--font-display);font-weight:900;font-size:5rem;letter-spacing:-.02em;margin-bottom:var(--space-sm);text-shadow:0 0 48px rgba(255,45,106,.55);animation:ready-wordmark-in .5s ease-out}.ready-wordmark .beat{color:var(--color-text-white)}.ready-wordmark .ify{background:linear-gradient(90deg,var(--color-accent-primary),var(--color-accent-secondary));-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:transparent}@keyframes ready-wordmark-in{0%{opacity:0;transform:translateY(16px)}to{opacity:1;transform:translateY(0)}}.ready-name{font-family:var(--font-display);font-weight:700;font-size:var(--font-size-3xl);color:var(--color-text-white);margin-bottom:var(--space-xs);animation:ready-fade-in .5s ease-out .1s both}.ready-subtitle{font-family:var(--font-body);font-size:var(--font-size-md);color:var(--color-text-neon-muted);margin-bottom:var(--space-2xl);animation:ready-fade-in .5s ease-out .2s both}@keyframes ready-fade-in{0%{opacity:0}to{opacity:1}}.ready-waiting{display:flex;flex-direction:column;align-items:center;gap:var(--space-md);animation:ready-fade-in .5s ease-out .3s both}.ready-pulse{position:relative;width:16px;height:16px;border-radius:50%;background:var(--color-accent-secondary);box-shadow:0 0 12px #00f5ffb3}.ready-pulse:before{content:"";position:absolute;inset:-8px;border-radius:50%;border:2px solid var(--color-accent-secondary);opacity:.6;animation:ready-pulse-ring 1.8s ease-out infinite}@keyframes ready-pulse-ring{0%{transform:scale(.6);opacity:.8}to{transform:scale(2.4);opacity:0}}@media(prefers-reduced-motion:reduce){.ready-wordmark,.ready-name,.ready-subtitle,.ready-waiting{animation:none}.ready-pulse:before{animation:none;opacity:0}}.ready-label{font-family:var(--font-body);font-size:var(--font-size-md);font-weight:500;color:var(--color-text-white)}.ready-count{font-family:var(--font-body);font-size:var(--font-size-sm);color:var(--color-text-dim)}.replay-tour-link{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);background:transparent;border:1px dashed rgba(255,45,106,.4);border-radius:var(--radius-md);color:var(--color-accent-primary);font-family:var(--font-body);font-size:var(--font-size-sm);font-weight:600;text-decoration:none;margin-bottom:var(--space-sm);cursor:pointer;width:100%;transition:all var(--transition-fast)}.replay-tour-link:hover,.replay-tour-link:focus-visible{border-color:var(--color-accent-primary);background:#ff2d6a0d;outline:none}.replay-tour-link .arrow{margin-left:auto}.home-player-tile--learning{border-style:dashed!important;opacity:.72}.home-player-tile-tour{position:absolute;top:-6px;right:-6px;background:#00f5ff1a;color:var(--color-accent-secondary);font-family:var(--font-body);font-size:9px;font-weight:700;letter-spacing:.06em;padding:2px 6px;border-radius:var(--radius-full);border:1px solid rgba(0,245,255,.4);box-shadow:0 0 8px #00f5ff40}.home-learning-warning{display:flex;align-items:center;justify-content:center;gap:var(--space-xs);padding:var(--space-sm) var(--space-md);margin-bottom:var(--space-sm);background:#ff660014;border:1px solid rgba(255,102,0,.25);border-radius:var(--radius-md);color:var(--color-warning-alt);font-family:var(--font-body);font-size:var(--font-size-sm);font-weight:500;text-align:center}.home-learning-warning.hidden{display:none}.player-tiles-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(84px,1fr));gap:var(--space-sm);justify-items:center;width:100%}.player-tiles-grid:empty{display:none}.player-tile{position:relative;width:100%;aspect-ratio:1;padding:var(--space-sm);border-radius:var(--radius-lg);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;background:linear-gradient(135deg,var(--tile-from),var(--tile-to));border:1.5px solid var(--tile-border);box-shadow:0 0 14px var(--tile-glow);--tile-from: rgba(0, 245, 255, .32);--tile-to: rgba(0, 245, 255, .08);--tile-border: rgba(0, 245, 255, .7);--tile-glow: rgba(0, 245, 255, .35);transition:box-shadow var(--transition-fast),border-color var(--transition-fast)}.player-tile-initial{font-family:var(--font-display);font-weight:900;font-size:var(--font-size-3xl);line-height:1;color:var(--color-text-white);text-shadow:0 2px 8px rgba(0,0,0,.4)}.player-tile-name{font-family:var(--font-display);font-weight:700;font-size:var(--font-size-xs);color:var(--color-text-white);max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding:0 2px}.player-tile--c2{--tile-from: rgba(57, 255, 20, .32);--tile-to: rgba(57, 255, 20, .08);--tile-border: rgba(57, 255, 20, .65);--tile-glow: rgba(57, 255, 20, .32)}.player-tile--c3{--tile-from: rgba(255, 102, 0, .32);--tile-to: rgba(255, 102, 0, .08);--tile-border: rgba(255, 102, 0, .65);--tile-glow: rgba(255, 102, 0, .32)}.player-tile--c4{--tile-from: rgba(0, 245, 255, .22);--tile-to: rgba(0, 245, 255, .04);--tile-border: rgba(0, 245, 255, .5);--tile-glow: rgba(0, 245, 255, .22)}.player-tile--host{--tile-from: rgba(255, 45, 106, .35);--tile-to: rgba(255, 45, 106, .08);--tile-border: rgba(255, 45, 106, .85);--tile-glow: rgba(255, 45, 106, .5);box-shadow:var(--glow-primary),0 0 22px #ff2d6a59}.player-tile-crown{position:absolute;top:-10px;right:-10px;font-size:20px;line-height:1;filter:drop-shadow(0 0 6px rgba(255,45,106,.8));pointer-events:none}.player-tile-you-chip{position:absolute;top:-10px;right:-10px;background:var(--color-accent-secondary);color:var(--color-bg-primary);font-family:var(--font-display);font-weight:900;font-size:9px;letter-spacing:.1em;padding:3px 7px;border-radius:var(--radius-full);box-shadow:0 0 12px #00f5ff99;pointer-events:none}.player-tile-away{position:absolute;bottom:-8px;left:50%;transform:translate(-50%);font-family:var(--font-body);font-size:9px;font-weight:600;text-transform:uppercase;letter-spacing:.08em;color:var(--color-text-dim);background:var(--color-bg-primary);padding:2px 6px;border-radius:var(--radius-full);border:1px solid rgba(255,255,255,.12);pointer-events:none}.player-tile--disconnected{opacity:.5;filter:grayscale(.4)}.player-tile.is-new{animation:player-tile-pop var(--transition-slow) ease-out}@keyframes player-tile-pop{0%{transform:scale(.6);opacity:0}60%{transform:scale(1.08);opacity:1}to{transform:scale(1);opacity:1}}@media(prefers-reduced-motion:reduce){.player-tile.is-new{animation:none}}.reveal-header-v2{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--space-md);gap:var(--space-sm)}.reveal-header-v2 .round-count{font-family:var(--font-body);font-size:var(--font-size-xs);font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--color-text-neon-muted);display:flex;align-items:center;gap:4px}.reveal-header-v2 .header-right{display:flex;align-items:center;gap:var(--space-sm)}.reveal-advance-pill{position:relative;width:32px;height:32px;flex-shrink:0;display:inline-flex;align-items:center;justify-content:center}.reveal-advance-pill.hidden{display:none}.reveal-advance-svg{width:100%;height:100%;transform:rotate(-90deg)}.reveal-advance-bg{fill:none;stroke:#ffffff1f;stroke-width:5}.reveal-advance-fg{fill:none;stroke:var(--color-accent-secondary);stroke-width:5;stroke-linecap:round;transition:stroke-dashoffset .5s linear;filter:drop-shadow(var(--glow-secondary))}.reveal-advance-num{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-family:var(--font-display);font-weight:900;font-size:13px;color:var(--color-accent-secondary)}.info-btn{width:28px;height:28px;border-radius:50%;border:1px solid rgba(255,255,255,.14);background:var(--color-bg-surface);color:var(--color-text-neon-muted);font-size:var(--font-size-base);font-weight:700;font-family:var(--font-display);display:flex;align-items:center;justify-content:center;cursor:pointer;transition:color var(--transition-fast),border-color var(--transition-fast);padding:0}.info-btn:hover,.info-btn:focus-visible{color:var(--color-text-white);border-color:#ffffff4d;outline:none}.song-strip{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-sm) var(--space-sm) var(--space-sm);background:#ffffff0a;border-radius:var(--radius-lg);border:1px solid rgba(255,255,255,.08);margin-bottom:var(--space-md)}.song-strip-cover{width:56px;height:56px;border-radius:var(--radius-md);object-fit:cover;flex-shrink:0;background:linear-gradient(135deg,#ff6b9a,#6366f1)}.song-strip-info{flex:1;min-width:0}.song-strip-title{font-family:var(--font-display);font-weight:700;font-size:var(--font-size-md);color:var(--color-text-white);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.song-strip-artist{font-family:var(--font-body);font-size:var(--font-size-sm);color:var(--color-text-neon-muted);margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chip-row{display:flex;gap:var(--space-xs);margin-bottom:var(--space-sm);flex-wrap:wrap}.chip-row.hidden{display:none}.chip-row .chip{display:inline-flex;align-items:center;gap:5px;padding:5px 10px;border-radius:var(--radius-full);font-family:var(--font-body);font-size:var(--font-size-xs);font-weight:700;letter-spacing:.04em}.chip-row .chip--bet-won{background:#ff2d6a1f;border:1px solid rgba(255,45,106,.5);color:var(--color-accent-primary);box-shadow:0 0 12px #ff2d6a33}.chip-row .chip--bet-lost{background:#ff004014;border:1px solid rgba(255,0,64,.4);color:var(--color-error-neon)}.chip-row .chip--streak{background:#ff66001f;border:1px solid rgba(255,102,0,.5);color:var(--color-warning-alt)}.duel{padding:var(--space-lg) var(--space-xs) var(--space-md);margin-bottom:var(--space-sm)}.duel-emotion{text-align:center;font-family:var(--font-display);font-weight:900;font-size:var(--font-size-2xl);letter-spacing:.06em;margin-bottom:var(--space-md);min-height:1.2em;transition:color var(--transition-normal)}.duel-emotion.hidden{visibility:hidden}.duel-emotion--exact{color:var(--color-success-neon);text-shadow:0 0 16px rgba(57,255,20,.55)}.duel-emotion--close{color:var(--color-success-neon);text-shadow:0 0 14px rgba(57,255,20,.45)}.duel-emotion--wrong{color:var(--color-error-neon);text-shadow:0 0 14px rgba(255,0,64,.45)}.duel-emotion--missed{color:var(--color-text-dim);text-shadow:none}.duel-row{display:grid;grid-template-columns:1fr auto 1fr;gap:var(--space-sm);align-items:center}.duel-side{text-align:center;min-width:0}.duel-label{font-family:var(--font-body);font-size:var(--font-size-xs);letter-spacing:.08em;text-transform:uppercase;color:var(--color-text-dim);font-weight:600;margin-bottom:var(--space-sm)}.duel-year{font-family:var(--font-display);font-weight:900;font-size:clamp(40px,12vw,64px);line-height:1;letter-spacing:-.03em}.duel-year.mine{color:var(--color-text-neon-muted)}.duel-year.correct{color:var(--color-accent-secondary);text-shadow:0 0 24px rgba(0,245,255,.6)}.duel-gap{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;min-width:48px}.duel-gap-x{font-family:var(--font-display);font-weight:700;font-size:var(--font-size-xl);color:var(--color-text-dim);opacity:.6;line-height:1}.duel-gap-n{font-family:var(--font-display);font-weight:900;font-size:var(--font-size-2xl);color:var(--color-error-neon);text-shadow:0 0 10px rgba(255,0,64,.35);line-height:1}.duel-gap--exact .duel-gap-n{color:var(--color-success-neon);text-shadow:0 0 10px rgba(57,255,20,.5)}.duel-gap--close .duel-gap-n{color:var(--color-success-neon);text-shadow:0 0 8px rgba(57,255,20,.35)}.duel-gap-unit{font-family:var(--font-body);font-size:9px;color:var(--color-text-dim);text-transform:uppercase;letter-spacing:.1em;margin-top:3px}.score-row{display:flex;align-items:center;justify-content:space-between;padding:14px 18px;background:var(--color-bg-surface);border-radius:var(--radius-lg);border:1px solid rgba(0,245,255,.25);box-shadow:0 0 14px #00f5ff1f;margin-bottom:var(--space-md);gap:var(--space-sm)}.score-row-left{font-family:var(--font-body);font-size:var(--font-size-xs);color:var(--color-text-neon-muted);font-weight:700;text-transform:uppercase;letter-spacing:.08em;display:flex;flex-direction:column;gap:3px;min-width:0}.score-row-subtitle{color:var(--color-text-white);font-size:var(--font-size-sm);font-weight:700;letter-spacing:0;text-transform:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.score-row-right{display:flex;align-items:center;gap:var(--space-sm);flex-shrink:0}.score-row-pts{font-family:var(--font-display);font-weight:900;font-size:38px;color:var(--color-accent-secondary);text-shadow:0 0 18px rgba(0,245,255,.5);line-height:1}.standings-section .leaderboard-list{display:flex;flex-direction:column;gap:6px}.sheet-backdrop{position:fixed;inset:0;z-index:400;display:flex;align-items:flex-end;justify-content:center}.sheet-backdrop.hidden{display:none}.sheet-dim{position:absolute;inset:0;background:#0a0a1299;backdrop-filter:blur(2px);animation:sheet-dim-in .2s ease-out}@keyframes sheet-dim-in{0%{opacity:0}to{opacity:1}}.sheet{position:relative;z-index:1;width:100%;max-width:520px;background:linear-gradient(180deg,#14141e,#0a0a12);border-top:1px solid rgba(0,245,255,.25);border-radius:var(--radius-2xl) var(--radius-2xl) 0 0;box-shadow:0 -12px 40px #00000080,0 -4px 16px #00f5ff1a;padding:14px 20px calc(28px + env(safe-area-inset-bottom,0));max-height:80vh;overflow-y:auto;animation:sheet-slide-up .32s cubic-bezier(.22,.8,.32,1)}@keyframes sheet-slide-up{0%{transform:translateY(100%)}to{transform:translateY(0)}}@media(prefers-reduced-motion:reduce){.sheet-dim,.sheet{animation:none}}.sheet-handle{width:40px;height:4px;border-radius:2px;background:#fff3;margin:0 auto 16px}.sheet-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--space-md)}.sheet-title{font-family:var(--font-display);font-weight:800;font-size:var(--font-size-lg);display:flex;align-items:center;gap:8px;color:var(--color-text-white)}.sheet-close{width:32px;height:32px;border-radius:50%;background:#ffffff14;border:0;color:var(--color-text-neon-muted);font-size:var(--font-size-base);font-weight:700;display:flex;align-items:center;justify-content:center;cursor:pointer}.sheet-close:hover,.sheet-close:focus-visible{color:var(--color-text-white);background:#ffffff24;outline:none}.breakdown-list{display:flex;flex-direction:column;margin-bottom:var(--space-md)}.breakdown-row{display:flex;align-items:center;justify-content:space-between;padding:10px 0;font-family:var(--font-body);font-size:var(--font-size-base)}.breakdown-row+.breakdown-row{border-top:1px solid rgba(255,255,255,.05)}.breakdown-row .label{color:var(--color-text-neon-muted);display:flex;align-items:center;gap:8px}.breakdown-row .label .emoji{font-size:var(--font-size-md)}.breakdown-row .value{font-family:var(--font-display);font-weight:800;font-size:var(--font-size-md)}.breakdown-row .value--positive{color:var(--color-success-neon)}.breakdown-row .value--multiplier{color:var(--color-accent-primary)}.breakdown-row .value--neutral{color:var(--color-text-white)}.breakdown-total{display:flex;align-items:center;justify-content:space-between;padding:var(--space-md);border-radius:var(--radius-lg);background:linear-gradient(90deg,#00f5ff14,#ff2d6a0d);border:1px solid rgba(0,245,255,.3)}.breakdown-total .label{font-family:var(--font-display);font-weight:700;font-size:var(--font-size-md);color:var(--color-text-white)}.breakdown-total .value{font-family:var(--font-display);font-weight:900;font-size:var(--font-size-3xl);color:var(--color-accent-secondary);text-shadow:0 0 16px rgba(0,245,255,.5)}.breakdown-total--zero .value{color:var(--color-text-dim);text-shadow:none}.breakdown-empty{text-align:center;padding:var(--space-md) 0}.breakdown-empty-icon{font-size:42px;margin-bottom:var(--space-sm)}.breakdown-empty-text{color:var(--color-text-neon-muted);font-family:var(--font-body);font-size:var(--font-size-base);margin-bottom:var(--space-md)}.difficulty-visual{display:flex;align-items:center;justify-content:space-between;padding:var(--space-md);background:#ff004014;border:1px solid rgba(255,0,64,.3);border-radius:var(--radius-md);margin-bottom:var(--space-sm);gap:var(--space-sm)}.difficulty-visual .left{font-family:var(--font-display);font-weight:800;font-size:var(--font-size-sm);color:var(--color-error-neon);min-width:0}.difficulty-visual .left .sub{font-family:var(--font-body);font-size:var(--font-size-xs);font-weight:500;color:var(--color-text-neon-muted);margin-top:3px}.difficulty-visual .stars{font-size:var(--font-size-md);letter-spacing:2px;white-space:nowrap}.difficulty-visual .star-filled{color:var(--color-warning-alt)}.difficulty-visual .star-empty{color:#ffffff26}.stats-grid{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-sm);margin-bottom:var(--space-sm)}.stats-card{padding:12px 14px;background:#ffffff0a;border:1px solid rgba(255,255,255,.08);border-radius:var(--radius-md)}.stats-card .lbl{font-family:var(--font-body);font-size:10px;color:var(--color-text-dim);font-weight:700;letter-spacing:.08em;text-transform:uppercase}.stats-card .val{font-family:var(--font-display);font-weight:800;font-size:var(--font-size-2xl);margin-top:4px;color:var(--color-text-white)}.stats-card .val.cyan{color:var(--color-accent-secondary)}.stats-card .val.success{color:var(--color-success-neon)}.stats-card .val.warn{color:var(--color-error-neon)}.stats-card .sub{font-family:var(--font-body);font-size:10px;color:var(--color-text-neon-muted);margin-top:2px}.furthest-list{display:flex;flex-direction:column;gap:6px}.furthest-row{display:flex;align-items:center;justify-content:space-between;padding:10px 12px;background:#ffffff08;border-radius:var(--radius-md);font-family:var(--font-body);font-size:var(--font-size-sm)}.furthest-row .name{font-weight:600;color:var(--color-text-white)}.furthest-row .off{color:var(--color-error-neon);font-family:var(--font-display);font-weight:700}.stats-empty{text-align:center;color:var(--color-text-dim);font-family:var(--font-body);font-size:var(--font-size-sm);padding:var(--space-md)}.game-container--arcade{padding:0;display:flex;flex-direction:column;gap:0}.arc-header{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);position:sticky;top:0;z-index:5;background:linear-gradient(180deg,rgba(10,10,18,.95),rgba(10,10,18,.82) 72%,transparent);backdrop-filter:blur(8px);margin-bottom:var(--space-md)}.timer-float{position:fixed;top:max(env(safe-area-inset-top,0px) + 8px,8px);right:12px;z-index:100;width:52px;height:52px;border-radius:50%;background:#0a0a12c7;border:2px solid var(--color-accent-primary);box-shadow:0 0 14px #ff2d6a73,inset 0 0 8px #ff2d6a40;display:flex;align-items:center;justify-content:center;font-family:var(--font-display);font-weight:900;font-size:22px;line-height:1;color:var(--color-accent-primary);text-shadow:0 0 8px rgba(255,45,106,.6);backdrop-filter:blur(8px);transition:opacity .2s ease-out,transform .2s ease-out;pointer-events:none}.timer-float.hidden{opacity:0;transform:scale(.7);pointer-events:none}.timer-float.timer-float--visible{opacity:1;transform:scale(1)}.timer-float.timer-float--warn{border-color:var(--color-error-neon, #ff0040);color:var(--color-error-neon, #ff0040);box-shadow:0 0 16px #ff004099,inset 0 0 8px #ff00404d;animation:arc-urgency .8s ease-in-out infinite}@media(prefers-reduced-motion:reduce){.timer-float{transition:none}.timer-float.timer-float--warn{animation:none}}.arc-pulse-orb{width:56px;height:56px;border-radius:50%;display:flex;align-items:center;justify-content:center;position:relative;overflow:hidden;background:linear-gradient(135deg,#ff6b9a,#6366f1);box-shadow:0 0 24px #ff2d6a80;flex-shrink:0}.arc-pulse-orb:before{content:"";position:absolute;inset:-4px;border-radius:50%;border:2px solid rgba(255,45,106,.5);animation:arc-orb-pulse 1.4s ease-out infinite;pointer-events:none}.arc-pulse-orb--steady:before{animation:none;opacity:0}@keyframes arc-orb-pulse{0%{opacity:.8;transform:scale(1)}to{opacity:0;transform:scale(1.25)}}@media(prefers-reduced-motion:reduce){.arc-pulse-orb:before{animation:none;opacity:0}}.arc-pulse-orb-img{width:100%;height:100%;object-fit:cover;border-radius:50%;z-index:1;filter:blur(12px);transform:scale(1.15);transition:filter .4s ease,transform .4s ease}.arc-round-center{text-align:center;font-family:var(--font-display);font-weight:800;font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--color-text-neon-muted);line-height:1.3;overflow:hidden}.arc-round-label{display:block}.arc-round-big{display:block;font-size:20px;color:var(--color-text-white);letter-spacing:0;text-transform:none;margin-top:2px}.arc-round-sep{color:var(--color-text-dim);margin:0 2px;font-weight:500}.timer-neon{width:72px;height:72px;border-radius:50%;background:var(--color-bg-primary);border:3px solid var(--color-accent-primary);box-shadow:var(--glow-primary),inset 0 0 12px #ff2d6a4d;display:flex;align-items:center;justify-content:center;font-family:var(--font-display);font-weight:900;font-size:30px;color:var(--color-accent-primary);text-shadow:0 0 10px rgba(255,45,106,.6);flex-shrink:0;line-height:1}.timer-neon .timer{color:inherit;font-family:inherit;font-size:inherit;font-weight:inherit}.timer-neon.timer-neon--warn{border-color:var(--color-error-neon);color:var(--color-error-neon);box-shadow:0 0 20px #ff004099,inset 0 0 12px #ff00404d;animation:arc-urgency .8s ease-in-out infinite}@keyframes arc-urgency{0%,to{transform:scale(1)}50%{transform:scale(1.06)}}.timer-neon.timer-neon--catchup{animation:timer-catchup-glow .4s ease-out}@keyframes timer-catchup-glow{0%{box-shadow:var(--glow-primary),inset 0 0 12px #ff2d6a4d}45%{box-shadow:0 0 26px #00f5ffb3,inset 0 0 16px #00f5ff59}to{box-shadow:var(--glow-primary),inset 0 0 12px #ff2d6a4d}}@media(prefers-reduced-motion:reduce){.timer-neon.timer-neon--warn,.timer-neon.timer-neon--catchup{animation:none}}.arc-chip-row{display:flex;gap:6px;flex-wrap:wrap;padding:0 var(--space-md);margin-bottom:var(--space-md)}.arc-chip-row.hidden{display:none}.arc-chip{display:inline-flex;align-items:center;gap:5px;padding:4px 10px;border-radius:var(--radius-full);font-family:var(--font-body);font-size:11px;font-weight:700;letter-spacing:.04em}.arc-chip--steal{color:var(--color-accent-secondary);background:#00f5ff14;border:1px solid rgba(0,245,255,.4)}.arc-chip--closest-wins{color:var(--color-success-neon);background:#39ff1414;border:1px solid rgba(57,255,20,.4)}.arc-chip--intro{color:var(--color-warning-alt);background:#ff66001f;border:1px solid rgba(255,102,0,.5)}.arc-chip--final{color:var(--color-accent-primary);background:#ff2d6a1f;border:1px solid rgba(255,45,106,.5);text-transform:uppercase}.year-xxl{text-align:center;font-family:var(--font-display);font-weight:900;font-size:clamp(96px,34vw,128px);line-height:1;letter-spacing:-.04em;background:linear-gradient(180deg,var(--color-text-white) 0%,rgba(0,245,255,.85) 100%);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;text-shadow:0 0 32px rgba(0,245,255,.35);margin:4px 0 var(--space-md);padding:0 var(--space-md);max-width:100%}.year-xxl--locked{background:linear-gradient(180deg,var(--color-success-neon) 0%,rgba(57,255,20,.7) 100%);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;text-shadow:0 0 28px rgba(57,255,20,.45)}.submitted-banner{margin:0 var(--space-md) var(--space-sm);padding:8px 14px;background:#39ff1414;border:1px solid rgba(57,255,20,.4);border-radius:var(--radius-md);font-family:var(--font-display);font-weight:800;font-size:14px;color:var(--color-success-neon);letter-spacing:.04em;display:flex;align-items:center;justify-content:center;gap:6px;text-align:center}.submitted-banner.hidden{display:none}.submitted-banner .check{width:18px;height:18px;border-radius:50%;background:var(--color-success-neon);color:var(--color-bg-primary);font-size:11px;font-weight:900;display:flex;align-items:center;justify-content:center;flex-shrink:0}.slider-arcade-wrap{padding:0 var(--space-md);margin-bottom:var(--space-md);position:relative}.slider-arcade{padding:10px;background:#ffffff0a;border-radius:var(--radius-lg);border:1px solid rgba(255,255,255,.08);display:flex;align-items:center;gap:12px}.slider-btn-year{width:44px;height:44px;border-radius:50%;background:var(--color-bg-primary);border:2px solid rgba(255,255,255,.15);color:var(--color-text-white);font-family:var(--font-display);font-weight:700;font-size:22px;line-height:1;flex-shrink:0;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all var(--transition-fast);touch-action:manipulation}.slider-btn-year:hover,.slider-btn-year:focus-visible{border-color:var(--color-accent-secondary);color:var(--color-accent-secondary);outline:none}.slider-btn-year:disabled{opacity:.4;cursor:not-allowed}.slider-btn-year--coarse{position:relative;width:36px;height:36px;font-size:13px;font-weight:800;letter-spacing:-.02em}.slider-btn-year--coarse:after{content:"";position:absolute;top:50%;left:50%;width:44px;height:44px;transform:translate(-50%,-50%)}.slider-arcade{gap:8px}.slider-arcade-track{flex:1;display:flex;align-items:center}.year-slider-arcade{-webkit-appearance:none;appearance:none;width:100%;height:10px;background:linear-gradient(90deg,#00f5ff26,#ff2d6a40,#39ff1426);border-radius:var(--radius-full);outline:none;cursor:pointer}.year-slider-arcade::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:32px;height:32px;border-radius:50%;background:var(--color-accent-primary);border:3px solid var(--color-bg-primary);box-shadow:var(--glow-primary);cursor:grab;transition:transform var(--transition-fast)}.year-slider-arcade::-webkit-slider-thumb:active{cursor:grabbing;transform:scale(1.05)}.year-slider-arcade::-moz-range-thumb{width:32px;height:32px;border-radius:50%;background:var(--color-accent-primary);border:3px solid var(--color-bg-primary);box-shadow:var(--glow-primary);cursor:grab}.slider-arcade.slider-arcade--locked{opacity:.55;pointer-events:none}.slider-arcade.slider-arcade--locked .year-slider-arcade::-webkit-slider-thumb{background:var(--color-success-neon);box-shadow:0 0 16px #39ff1499}.slider-arcade.slider-arcade--locked .year-slider-arcade::-moz-range-thumb{background:var(--color-success-neon);box-shadow:0 0 16px #39ff1499}.guess-lock-stamp{position:absolute;right:calc(var(--space-md) + 8px);top:-10px;padding:3px 10px;font-family:var(--font-display);font-weight:900;font-size:10px;color:var(--color-success-neon);background:var(--color-bg-primary);border:1px solid rgba(57,255,20,.4);border-radius:var(--radius-full);letter-spacing:.08em;text-transform:uppercase;box-shadow:0 0 8px #39ff1440}.guess-lock-stamp.hidden{display:none}.arc-tiles{padding:12px 14px;margin:0 var(--space-md) var(--space-md);background:linear-gradient(180deg,#00f5ff0a,#ffffff05);border:1px solid rgba(0,245,255,.18);border-radius:var(--radius-lg);box-shadow:inset 0 0 12px #00f5ff0a}.arc-tiles.hidden{display:none}.arc-tiles-header{display:flex;align-items:center;justify-content:space-between;font-family:var(--font-display);font-weight:700;font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--color-text-neon-muted);margin-bottom:10px;gap:var(--space-sm)}.arc-tiles-header>span:first-child{display:flex;align-items:center;gap:6px;min-width:0}.arc-tiles-bonus{background:#39ff1426;color:var(--color-success-neon);font-weight:900;font-size:11px;padding:2px 8px;border-radius:var(--radius-full);letter-spacing:.04em;flex-shrink:0}.arc-tiles-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}.arc-tiles-grid .artist-option-btn,.arc-tiles-grid .movie-option-btn{padding:14px 10px;background:#ffffff0d;border:2px solid rgba(255,255,255,.12);border-radius:var(--radius-lg);font-family:var(--font-display);font-weight:700;font-size:15px;text-align:center;color:var(--color-text-white);box-shadow:0 4px #0000004d;transition:transform var(--transition-fast),border-color var(--transition-fast),box-shadow var(--transition-fast);cursor:pointer;min-height:56px}.arc-tiles-grid .artist-option-btn:hover,.arc-tiles-grid .movie-option-btn:hover,.arc-tiles-grid .artist-option-btn:focus-visible,.arc-tiles-grid .movie-option-btn:focus-visible{border-color:#00f5ff8c;outline:none}.arc-tiles-grid .artist-option-btn:active,.arc-tiles-grid .movie-option-btn:active{transform:translateY(1px);box-shadow:0 2px #0000004d}.arc-tiles-grid .artist-option-btn.is-loading{background:linear-gradient(135deg,#00f5ff33,#00f5ff0d);border-color:var(--color-accent-secondary);color:var(--color-accent-secondary);animation:arc-tile-pulse 1s ease-in-out infinite}@keyframes arc-tile-pulse{0%,to{opacity:1}50%{opacity:.7}}.arc-tiles-grid .artist-option-btn.is-winner,.arc-tiles-grid .artist-option-btn.is-correct,.arc-tiles-grid .movie-option-btn.is-winner,.arc-tiles-grid .movie-option-btn.is-correct{background:linear-gradient(135deg,#39ff1440,#39ff1414);border-color:var(--color-success-neon);color:var(--color-success-neon);box-shadow:0 0 20px #39ff1480,0 4px #0000004d}.arc-tiles-grid .artist-option-btn.is-wrong,.arc-tiles-grid .artist-option-btn.is-wrong.is-selected,.arc-tiles-grid .movie-option-btn.is-wrong{opacity:.5;border-style:dashed}.arc-tiles-grid .artist-option-btn.is-disabled,.arc-tiles-grid .movie-option-btn.is-disabled{opacity:.6;cursor:not-allowed;box-shadow:none}@media(prefers-reduced-motion:reduce){.arc-tiles-grid .artist-option-btn.is-loading{animation:none}}.bonus-filler{padding:var(--space-md);margin:0 var(--space-md) var(--space-md);background:#ffffff05;border:1px dashed rgba(255,255,255,.1);border-radius:var(--radius-lg);text-align:center;font-family:var(--font-body);font-size:12px;color:var(--color-text-dim);font-style:italic;display:flex;align-items:center;justify-content:center;gap:6px}.bonus-filler.hidden{display:none}.arc-actions{display:grid;grid-template-columns:auto 1fr;gap:10px;padding:0 var(--space-md);margin-bottom:var(--space-md)}.bet-arc{width:72px;height:60px;background:transparent;border:2px solid rgba(255,45,106,.5);color:var(--color-accent-primary);border-radius:var(--radius-lg);font-family:var(--font-display);font-weight:700;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;box-shadow:0 4px #0000004d;cursor:pointer;transition:all var(--transition-fast)}.bet-arc .bet-icon{font-size:22px;line-height:1}.bet-arc .bet-label{font-size:9px;font-weight:800;letter-spacing:.08em;text-transform:uppercase}.bet-arc.is-active{background:#ff2d6a26;box-shadow:var(--glow-primary),0 4px #0000004d}.bet-arc:active{transform:translateY(2px);box-shadow:0 2px #0000004d}.bet-arc:disabled{opacity:.55;cursor:not-allowed}.submit-arc{background:linear-gradient(180deg,#ff4d82,var(--color-accent-primary));border:0;color:var(--color-text-white);border-radius:var(--radius-lg);padding:16px 20px;font-family:var(--font-display);font-weight:900;font-size:17px;letter-spacing:.08em;text-transform:uppercase;box-shadow:var(--glow-primary),0 6px #b4143c99;cursor:pointer;transition:transform var(--transition-fast);display:flex;align-items:center;justify-content:center;gap:8px}.submit-arc:active{transform:translateY(2px);box-shadow:var(--glow-primary),0 4px #b4143c99}.submit-arc:disabled{background:#ffffff0f;color:var(--color-text-neon-muted);box-shadow:0 4px #0000004d;cursor:not-allowed;text-shadow:none}.submit-arc.submit-arc--waiting{background:#ffffff0d;color:var(--color-text-neon-muted);box-shadow:0 4px #0000004d;text-shadow:none}.submit-arc .waiting-dot{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--color-accent-secondary);box-shadow:0 0 8px #00f5ff80;animation:arc-wait-pulse 1.2s ease-in-out infinite}@keyframes arc-wait-pulse{0%,to{opacity:.4}50%{opacity:1}}@media(prefers-reduced-motion:reduce){.submit-arc .waiting-dot{animation:none}}.steal-btn-full{margin:0 var(--space-md) var(--space-md);background:#00f5ff14;border:2px solid var(--color-accent-secondary);color:var(--color-accent-secondary);border-radius:var(--radius-lg);padding:14px;font-family:var(--font-display);font-weight:800;font-size:15px;letter-spacing:.06em;text-transform:uppercase;box-shadow:0 0 16px #00f5ff4d,0 4px #0000004d;display:flex;align-items:center;justify-content:center;gap:8px;cursor:pointer;transition:transform var(--transition-fast)}.steal-btn-full.hidden{display:none}.steal-btn-full:active{transform:translateY(2px);box-shadow:0 0 16px #00f5ff4d,0 2px #0000004d}.steal-btn-full .steal-btn-icon{font-size:18px}.powerup-btn-row{display:flex;gap:var(--space-md);margin:0 var(--space-md) var(--space-md)}.powerup-btn-row .steal-btn-full,.powerup-btn-row .sabotage-btn-full{flex:1;margin:0}.sabotage-btn-full{background:#ff2d5514;border:2px solid var(--color-danger, #ff2d55);color:var(--color-danger, #ff2d55);border-radius:var(--radius-lg);padding:14px;font-family:var(--font-display);font-weight:800;font-size:15px;letter-spacing:.06em;text-transform:uppercase;box-shadow:0 0 16px #ff2d554d,0 4px #0000004d;display:flex;align-items:center;justify-content:center;gap:8px;cursor:pointer;transition:transform var(--transition-fast)}.sabotage-btn-full.hidden{display:none}.sabotage-btn-full:active{transform:translateY(2px);box-shadow:0 0 16px #ff2d554d,0 2px #0000004d}.sabotage-btn-full .sabotage-btn-icon{font-size:18px}.arc-chip--sabotage{color:var(--color-danger, #ff2d55);background:#ff2d5514;border:1px solid rgba(255,45,85,.4)}.player-badge--sabotage{top:-2px;left:2px;background:linear-gradient(135deg,#ff2d55,#c1121f)}.sabotage-confirmation{background:linear-gradient(135deg,#ff2d55,#c1121f);box-shadow:0 4px 20px #ff2d5580}.sabotaged-banner{background:linear-gradient(135deg,#ff2d55,#7c1020);box-shadow:0 4px 20px #ff2d5599}.bet-arc--forced{opacity:.85;cursor:not-allowed}.submit-arc--frozen{opacity:.6;filter:grayscale(.4)}.arc-submission-strip{display:flex;align-items:center;justify-content:center;gap:8px;padding:8px var(--space-md) 12px;font-family:var(--font-body);font-size:11px;color:var(--color-text-dim);font-weight:600}.arc-submission-dots{display:flex;align-items:center;gap:6px}.arc-submission-dots .player-indicator{width:12px;height:12px;min-width:12px;padding:0;background:#ffffff2e;border:0;border-radius:50%;font-size:0;color:transparent;transition:all var(--transition-normal);flex:0 0 auto;overflow:hidden;display:block}.arc-submission-dots .player-indicator>*{display:none!important}.arc-submission-dots .player-indicator.is-submitted{background:var(--color-success-neon);box-shadow:0 0 6px #39ff1480}.arc-submission-dots .player-indicator.is-current-player,.arc-submission-dots .player-indicator.is-current{background:var(--color-accent-secondary);box-shadow:0 0 6px #00f5ff80}.arc-submission-dots .player-indicator.is-current-player.is-submitted{background:var(--color-success-neon);box-shadow:0 0 8px #39ff14b3}.arc-submission-count{color:var(--color-text-dim);font-weight:600}.submitted-confirmation.hidden{display:none}.closest-wins-splash{position:fixed;inset:0;z-index:50;display:flex;align-items:center;justify-content:center;background:#0a0a12b3;backdrop-filter:blur(4px);font-family:var(--font-display);font-weight:900;font-size:40px;color:var(--color-success-neon);letter-spacing:.08em;gap:12px;pointer-events:none;text-shadow:0 0 32px rgba(57,255,20,.55);animation:closest-wins-splash-in 1.6s ease-out both}.closest-wins-splash.hidden{display:none}@keyframes closest-wins-splash-in{0%{opacity:0;transform:scale(.8)}20%{opacity:1;transform:scale(1)}80%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(1.05)}}#round-indicator.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}body:has(#game-view:not(.hidden)) .player-header{display:none}body:has(#game-view:not(.hidden)) .player-container{padding-top:max(var(--space-xs),env(safe-area-inset-top))}body:has(#game-view:not(.hidden)) .arc-header{margin-bottom:var(--space-sm)}body:has(#game-view:not(.hidden)) .year-xxl{font-size:clamp(72px,26vw,104px);margin:2px 0 var(--space-sm)}body:has(#game-view:not(.hidden)) .slider-arcade-wrap{margin-bottom:var(--space-sm)}body:has(#game-view:not(.hidden)) .arc-tiles{padding:10px 12px;margin:0 var(--space-md) var(--space-sm)}body:has(#game-view:not(.hidden)) .arc-tiles-header{margin-bottom:6px}body:has(#game-view:not(.hidden)) .arc-tiles-grid{gap:8px}body:has(#game-view:not(.hidden)) .arc-tiles-grid .artist-option-btn,body:has(#game-view:not(.hidden)) .arc-tiles-grid .movie-option-btn{min-height:52px;padding:12px 10px}body:has(#game-view:not(.hidden)) .arc-actions{margin-bottom:var(--space-sm)}body:has(#game-view:not(.hidden)) .bonus-filler{padding:var(--space-sm) var(--space-md);margin:0 var(--space-md) var(--space-sm)}body.theme-dark .podium{display:grid;grid-template-columns:1fr 1fr;grid-template-areas:"hero hero" "second third";gap:var(--space-md);align-items:stretch;justify-content:stretch;margin-bottom:var(--space-xl);padding:0 var(--space-xs)}body.theme-dark .podium-place.podium-1{grid-area:hero;width:100%;padding:var(--space-lg) var(--space-md) var(--space-md);background:linear-gradient(135deg,#ff2d6a24,#00f5ff0f);border:1px solid rgba(255,45,106,.35);border-radius:var(--radius-xl);box-shadow:0 0 40px #ff2d6a2e;text-align:center;justify-content:center}body.theme-dark .podium-place.podium-1 .podium-medal{font-size:38px;margin-bottom:var(--space-xs);filter:drop-shadow(0 0 16px rgba(255,45,106,.6))}body.theme-dark .podium-place.podium-1 .podium-name{font-family:Outfit,sans-serif;font-weight:900;line-height:.92;letter-spacing:-.04em;margin:0 0 var(--space-sm);max-width:100%;white-space:normal;word-break:break-word;overflow:visible;text-overflow:clip;background:linear-gradient(90deg,var(--color-accent-primary),var(--color-accent-secondary));-webkit-background-clip:text;background-clip:text;color:transparent;filter:drop-shadow(0 0 24px rgba(255,45,106,.3));font-size:clamp(40px,14vw,64px)}body.theme-dark .podium-place.podium-1 .podium-score{font-family:Inter,sans-serif;font-weight:700;font-size:var(--font-size-3xl);color:var(--color-accent-secondary);font-variant-numeric:tabular-nums;text-shadow:0 0 14px rgba(0,245,255,.5);margin-bottom:0}body.theme-dark .podium-place.podium-1 .podium-stand{display:none}body.theme-dark .podium-place.podium-2,body.theme-dark .podium-place.podium-3{width:100%;min-width:0;padding:var(--space-md) var(--space-sm);background:var(--color-dark-surface);border:1px solid var(--color-border-neon);border-radius:var(--radius-lg);display:grid;grid-template-columns:auto minmax(0,1fr) auto;grid-template-rows:auto;align-items:center;gap:var(--space-sm);text-align:left}body.theme-dark .podium-place.podium-2{grid-area:second;border-color:#00f5ff47;box-shadow:0 0 18px #00f5ff1a}body.theme-dark .podium-place.podium-3{grid-area:third}body.theme-dark .podium-place.podium-2 .podium-medal,body.theme-dark .podium-place.podium-3 .podium-medal{font-size:22px;margin:0;line-height:1}body.theme-dark .podium-place.podium-2 .podium-name,body.theme-dark .podium-place.podium-3 .podium-name{font-family:Outfit,sans-serif;font-weight:800;font-size:var(--font-size-lg);color:var(--color-text-white);margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}body.theme-dark .podium-place.podium-2 .podium-score,body.theme-dark .podium-place.podium-3 .podium-score{font-family:Outfit,sans-serif;font-weight:900;font-size:var(--font-size-lg);color:var(--color-accent-secondary);font-variant-numeric:tabular-nums;text-shadow:0 0 8px rgba(0,245,255,.3);margin:0;white-space:nowrap}body.theme-dark .podium-place.podium-2 .podium-stand,body.theme-dark .podium-place.podium-3 .podium-stand{display:none}body.theme-dark .podium-place.podium-2.hidden~.podium-place.podium-3:not(.hidden){grid-area:second}body.theme-dark .your-result{background:linear-gradient(135deg,#ff2d6a1a,#00f5ff0a);border:1px solid rgba(255,45,106,.28);box-shadow:0 0 28px #ff2d6a1f}body.theme-dark .your-result-rank{font-family:Outfit,sans-serif;font-weight:900;font-size:var(--font-size-4xl);letter-spacing:-.03em}body.theme-dark .your-result-stats .stat-value{font-family:Outfit,sans-serif;font-weight:800}.plh-root{display:flex;flex-direction:column;min-height:100%;height:100%;background:var(--color-bg-primary);color:var(--color-text-white);font-family:var(--font-body);font-variant-numeric:tabular-nums;position:relative;isolation:isolate;overflow:hidden}.plh-root:before{content:"";position:absolute;inset:0;z-index:0;pointer-events:none;background:radial-gradient(ellipse 70% 25% at 50% 0%,rgba(255,45,106,.12),transparent 60%),radial-gradient(ellipse 60% 30% at 30% 60%,rgba(0,245,255,.06),transparent 60%)}.plh-header{position:sticky;top:0;z-index:5;background:#0a0a12d1;backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);padding:8px 14px 6px;border-bottom:1px solid rgba(255,255,255,.04)}.plh-titlebar{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px}.plh-wordmark{font-family:var(--font-display);font-weight:900;font-size:20px;letter-spacing:-.02em;line-height:1;background:linear-gradient(90deg,var(--color-accent-primary) 0%,var(--color-accent-secondary) 100%);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}.plh-search{position:relative;margin-bottom:10px}.plh-search input{width:100%;height:40px;padding:0 38px 0 40px;background:var(--color-bg-surface);border:1px solid var(--color-border-neon);border-radius:10px;color:var(--color-text-white);font-family:var(--font-body);font-weight:500;font-size:13px;outline:none;transition:border-color .15s,box-shadow .15s}.plh-search input:focus{border-color:var(--color-accent-secondary);box-shadow:0 0 0 3px #00f5ff26}.plh-search input::placeholder{color:var(--color-text-neon-muted);opacity:.6}.plh-search-icon{position:absolute;left:12px;top:50%;transform:translateY(-50%);color:var(--color-accent-secondary);opacity:.75}.plh-search-clear{position:absolute;right:8px;top:50%;transform:translateY(-50%);width:24px;height:24px;border-radius:50%;background:var(--color-dark-surface-hover);border:none;color:var(--color-text-neon-muted);font-family:var(--font-display);font-weight:900;font-size:13px;cursor:pointer;display:flex;align-items:center;justify-content:center}.plh-segmented{display:grid;grid-template-columns:1fr 1fr 1fr;gap:4px;padding:4px;background:var(--color-bg-surface);border:1px solid var(--color-border-neon);border-radius:10px;margin-bottom:10px}.plh-seg{background:transparent;border:none;padding:8px 4px;cursor:pointer;border-radius:7px;display:flex;flex-direction:column;gap:1px;align-items:center;line-height:1.1;font-family:var(--font-body);font-weight:700;font-size:12px;color:var(--color-text-neon-muted);letter-spacing:.04em;transition:background .15s,color .15s}.plh-seg .plh-seg-num{font-family:var(--font-display);font-weight:900;font-size:15px;color:var(--color-text-neon-muted)}.plh-seg .plh-seg-label{font-size:11px;letter-spacing:.1em;text-transform:uppercase}.plh-seg.active{background:linear-gradient(135deg,#ff2d6a38,#00f5ff24);color:var(--color-text-white);box-shadow:inset 0 0 0 1px #ff2d6a59,0 0 18px #ff2d6a2e}.plh-seg.active .plh-seg-num{color:var(--color-accent-primary)}.plh-seg-community.active{background:linear-gradient(135deg,#9d4edd40,#ff2d6a26);box-shadow:inset 0 0 0 1px #9d4edd73,0 0 18px #9d4edd38}.plh-seg-community.active .plh-seg-num{color:#c89af5}.plh-seg-mine.active{background:linear-gradient(135deg,#00f5ff2e,#ff2d6a1a);box-shadow:inset 0 0 0 1px #00f5ff66,0 0 18px #00f5ff2e}.plh-seg-mine.active .plh-seg-num{color:var(--color-accent-secondary)}.plh-chips{display:flex;gap:7px;overflow-x:auto;padding:0 0 6px;scrollbar-width:none}.plh-chips::-webkit-scrollbar{display:none}.plh-chip{flex-shrink:0;padding:7px 13px;background:var(--color-bg-surface);border:1px solid var(--color-border-neon);border-radius:999px;font-family:var(--font-body);font-weight:600;font-size:12px;color:var(--color-text-neon-muted);white-space:nowrap;cursor:pointer;letter-spacing:.01em;transition:background .15s,color .15s,border-color .15s}.plh-chip.active{background:var(--color-accent-primary);color:var(--color-text-white);border-color:transparent;font-weight:700;box-shadow:0 0 16px #ff2d6a73}.plh-list-view,.plh-mix-view{flex:1 1 0;min-height:0;display:flex;flex-direction:column}.plh-body{position:relative;z-index:1;flex:1;overflow-y:auto;padding:14px 0 110px}.plh-loading{padding:40px 20px;text-align:center;font-family:var(--font-body);font-weight:500;font-size:13px;color:var(--color-text-neon-muted)}.plh-section-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;padding:8px 18px 12px;margin:4px 0 8px;border-bottom:1px solid rgba(0,245,255,.12)}.plh-section-head-title{display:flex;align-items:center;gap:10px;font-family:var(--font-display);font-weight:900;font-size:22px;letter-spacing:-.02em;color:var(--color-text-white);line-height:1}.plh-section-head-emoji{font-size:22px;filter:drop-shadow(0 0 12px rgba(0,245,255,.3))}.plh-section-head-meta{font-family:var(--font-body);font-weight:600;font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:var(--color-text-neon-muted);flex-shrink:0}.plh-shelf{margin-bottom:22px}.plh-shelf-head{display:flex;align-items:baseline;justify-content:space-between;padding:0 18px 10px}.plh-shelf-title{font-family:var(--font-display);font-weight:800;font-size:18px;letter-spacing:-.01em;color:var(--color-text-white);display:flex;align-items:center;gap:6px}.plh-shelf-see{font-family:var(--font-body);font-weight:600;font-size:12px;color:var(--color-accent-secondary);letter-spacing:.02em;cursor:pointer;background:transparent;border:none;padding:0}.plh-local-dot{display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--color-success-neon);box-shadow:0 0 8px var(--color-success-neon);margin-right:8px;vertical-align:middle}.plh-local-badge{font-family:var(--font-body);font-weight:700;font-size:9px;letter-spacing:.14em;text-transform:uppercase;color:var(--color-success-neon);padding:2px 7px;background:#39ff141f;border:1px solid rgba(57,255,20,.4);border-radius:999px;margin-left:8px;vertical-align:middle}.plh-cards{display:flex;gap:12px;overflow-x:auto;padding:0 18px 4px;scrollbar-width:none}.plh-cards::-webkit-scrollbar{display:none}.plh-card{flex-shrink:0;width:160px;cursor:pointer;position:relative;background:transparent;border:none;padding:0;text-align:left;color:inherit;font:inherit}.plh-card .plh-cover{width:160px;height:160px;border-radius:12px;position:relative;overflow:hidden;box-shadow:0 10px 24px #00000080;isolation:isolate;display:flex;flex-direction:column;justify-content:flex-end;padding:10px}.plh-card .plh-cover:after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,transparent 55%,rgba(0,0,0,.45) 100%);pointer-events:none;z-index:1}.plh-cover-inner{position:relative;z-index:2;display:flex;flex-direction:column;justify-content:flex-end;height:100%}.plh-cover-glyph{font-family:var(--font-display);font-weight:900;font-size:42px;line-height:.9;letter-spacing:-.04em;color:#fff;text-shadow:0 2px 8px rgba(0,0,0,.4);max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.plh-cover-glyph-long{font-size:26px;letter-spacing:-.02em}.plh-cover-sub{font-family:var(--font-display);font-weight:700;font-size:12px;letter-spacing:.04em;text-transform:uppercase;color:#ffffffeb;margin-top:4px;line-height:1.15;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;overflow-wrap:break-word;word-break:break-word;max-width:100%}.plh-cover-badge{position:absolute;top:8px;right:8px;padding:3px 8px;background:#00000080;backdrop-filter:blur(6px);border-radius:999px;font-family:var(--font-body);font-weight:700;font-size:9px;letter-spacing:.14em;text-transform:uppercase;color:var(--color-text-white);z-index:3}.plh-cover-badge-purple{background:#9d4edd80}.plh-card-meta{padding:8px 2px 0}.plh-card-name{font-family:var(--font-body);font-weight:700;font-size:13px;line-height:1.25;color:var(--color-text-white);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.plh-card-sub{font-family:var(--font-body);font-weight:500;font-size:11px;color:var(--color-text-neon-muted);margin-top:2px;letter-spacing:.02em}.plh-card-sub b{color:var(--color-accent-secondary);font-weight:700}.plh-card-local{font-family:var(--font-body);font-weight:500;font-size:11px;color:var(--color-success-neon);margin-top:2px;letter-spacing:.02em}.plh-card-local b{color:var(--color-success-neon);font-weight:800}.plh-card-local-when{color:var(--color-text-neon-muted)}.plh-card-local-when b{color:var(--color-accent-secondary)}.plh-pill{position:absolute;top:8px;left:8px;z-index:4;display:inline-flex;align-items:center;gap:4px;padding:5px 10px 5px 8px;border-radius:999px;background:#ff2d6aeb;color:var(--color-text-white);font-family:var(--font-display);font-weight:800;font-size:10px;letter-spacing:.12em;text-transform:uppercase;cursor:pointer;border:1px solid rgba(255,255,255,.12);box-shadow:0 4px 12px #0006,0 0 14px #ff2d6a59;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);transition:background .15s,color .15s,box-shadow .15s,filter .15s}.plh-pill:hover{filter:brightness(1.1)}.plh-pill-label{line-height:1}.plh-card-selected .plh-pill{background:var(--color-success-neon);color:var(--color-bg-primary);border-color:transparent;box-shadow:0 4px 12px #0006,0 0 18px #39ff148c}.plh-card-selected .plh-cover{box-shadow:0 0 0 3px var(--color-success-neon),0 10px 24px #00000080}.plh-check{display:none}.plh-featured .plh-card,.plh-featured .plh-card .plh-cover{width:160px}.plh-featured .plh-card .plh-cover{height:200px;padding:2px;background:linear-gradient(135deg,var(--color-accent-primary),var(--color-accent-secondary));box-shadow:0 12px 30px #0009,0 0 24px #ff2d6a40}.plh-featured .plh-card .plh-cover:after{border-radius:10px;margin:2px;inset:2px}.plh-featured .plh-cover-inner{padding:10px}.plh-featured .plh-cover-glyph{font-size:48px}.plh-card-community .plh-cover{background:linear-gradient(135deg,#240046,#7209b7,#ff2d6a);box-shadow:0 12px 30px #0009,0 0 28px #9d4edd66}.plh-tint-pop{background:linear-gradient(135deg,#ff2d6a,#ff6b9d 60%,#ff8c42)}.plh-tint-rock{background:linear-gradient(135deg,#c1121f,#ff4d1c 60%,#ff8c42)}.plh-tint-hiphop{background:linear-gradient(135deg,#7209b7,#b5179e 60%,#ff2d6a)}.plh-tint-jazz{background:linear-gradient(135deg,#b08968,#e6a855 60%,#ffc94a)}.plh-tint-metal{background:linear-gradient(135deg,#1a0000,#6a040f 60%,#c1121f)}.plh-tint-eu{background:linear-gradient(135deg,#00b4d8,#0077b6 60%,#03045e)}.plh-tint-latin{background:linear-gradient(135deg,#f60,#ffb703 60%,#fdd85d)}.plh-tint-schlager{background:linear-gradient(135deg,#ff8fab,#ffc2d1 60%,#fae0e4)}.plh-tint-schlager .plh-cover-glyph,.plh-tint-schlager .plh-cover-sub{color:#2a0a1a;text-shadow:none}.plh-tint-soul{background:linear-gradient(135deg,#6a0572,#ab4287 60%,#fcbf49)}.plh-tint-purple{background:linear-gradient(135deg,#240046,#7209b7,#ff2d6a)}.plh-banner{margin:0 18px 18px;padding:14px 16px;border-radius:14px;background:linear-gradient(135deg,#9d4edd2e,#ff2d6a1a);border:1px solid rgba(157,78,221,.35);display:flex;align-items:center;gap:12px;cursor:pointer}.plh-banner-icon{width:40px;height:40px;border-radius:10px;background:linear-gradient(135deg,#7209b7,var(--color-accent-primary));display:flex;align-items:center;justify-content:center;font-size:20px;flex-shrink:0;box-shadow:0 0 14px #9d4edd80}.plh-banner-body{flex:1;min-width:0}.plh-banner-title{font-family:var(--font-display);font-weight:800;font-size:14px;color:var(--color-text-white);line-height:1.2}.plh-banner-sub{font-family:var(--font-body);font-weight:500;font-size:11px;color:var(--color-text-neon-muted);margin-top:2px;line-height:1.35}.plh-banner-arrow{font-family:var(--font-display);font-weight:900;font-size:22px;color:#c89af5}.plh-mine-empty{padding:30px 24px;text-align:center}.plh-empty-emoji{font-size:64px;margin-bottom:12px;filter:drop-shadow(0 0 24px rgba(0,245,255,.3))}.plh-mine-title{font-family:var(--font-display);font-weight:900;font-size:26px;color:var(--color-text-white);margin:0 0 8px;letter-spacing:-.01em;line-height:1.1}.plh-mine-body{font-family:var(--font-body);font-weight:500;font-size:14px;color:var(--color-text-neon-muted);margin:0 0 20px;line-height:1.5}.plh-mine-body b{color:var(--color-text-white);font-weight:700}.plh-request-cta{margin:0 0 16px;padding:20px;background:linear-gradient(135deg,#00f5ff1a,#ff2d6a0f);border:1px solid rgba(0,245,255,.35);border-radius:16px;text-align:left}.plh-request-head{display:flex;align-items:center;gap:12px;margin-bottom:14px}.plh-request-icon{width:44px;height:44px;border-radius:12px;background:linear-gradient(135deg,var(--color-accent-secondary),#0077b6);display:flex;align-items:center;justify-content:center;color:var(--color-bg-primary);font-family:var(--font-display);font-weight:900;font-size:22px;box-shadow:0 0 16px #00f5ff80}.plh-request-titles{flex:1;min-width:0}.plh-request-t1{font-family:var(--font-display);font-weight:800;font-size:16px;color:var(--color-text-white);line-height:1.2}.plh-request-t2{font-family:var(--font-body);font-weight:500;font-size:12px;color:var(--color-text-neon-muted);margin-top:2px;line-height:1.35}.plh-meanwhile{margin:12px 0 0;padding:14px 16px;background:var(--color-bg-surface);border:1px solid var(--color-border-neon);border-radius:12px;display:flex;align-items:center;gap:12px;cursor:pointer;text-align:left}.plh-meanwhile-icon{color:var(--color-accent-secondary);font-family:var(--font-display);font-weight:900;font-size:18px;flex-shrink:0}.plh-meanwhile-body{flex:1;min-width:0}.plh-meanwhile-t1{font-family:var(--font-display);font-weight:800;font-size:13px;color:var(--color-text-white);line-height:1.2}.plh-meanwhile-t2{font-family:var(--font-body);font-weight:500;font-size:11px;color:var(--color-text-neon-muted);margin-top:2px;line-height:1.35}.plh-meanwhile-arrow{color:var(--color-text-neon-muted);font-family:var(--font-display);font-weight:900;font-size:20px}.plh-mine-head{padding:14px 18px 6px;display:flex;align-items:baseline;justify-content:space-between}.plh-mine-count{font-family:var(--font-display);font-weight:800;font-size:13px;letter-spacing:.14em;text-transform:uppercase;color:var(--color-text-neon-muted)}.plh-mine-count b{color:var(--color-text-white);font-weight:900}.plh-new-request{margin:10px 18px 18px;display:flex;align-items:center;gap:12px;padding:14px;background:linear-gradient(90deg,#00f5ff1a,#ff2d6a14);border:1px dashed rgba(0,245,255,.4);border-radius:12px;cursor:pointer}.plh-new-plus{width:36px;height:36px;border-radius:10px;background:var(--color-accent-secondary);color:var(--color-bg-primary);display:flex;align-items:center;justify-content:center;font-family:var(--font-display);font-weight:900;font-size:20px;box-shadow:0 0 16px var(--color-accent-secondary);flex-shrink:0}.plh-new-t1{font-family:var(--font-display);font-weight:800;font-size:14px;color:var(--color-text-white);line-height:1.2}.plh-new-t2{font-family:var(--font-body);font-weight:500;font-size:11px;color:var(--color-text-neon-muted);margin-top:2px}.plh-req-list{padding:0 18px;display:flex;flex-direction:column;gap:10px}.plh-req-card{padding:14px 14px 14px 16px;background:var(--color-bg-surface);border:1px solid var(--color-border-neon);border-radius:14px;display:flex;flex-direction:column;gap:10px}.plh-req-card.plh-req-done{border-color:#39ff1459;background:linear-gradient(90deg,rgba(57,255,20,.06),transparent 75%)}.plh-req-card.plh-req-building{border-color:#00f5ff66;background:linear-gradient(90deg,rgba(0,245,255,.06),transparent 75%)}.plh-req-card.plh-req-declined{border-color:#ff2d6a59}.plh-req-row1{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}.plh-req-body{min-width:0;flex:1}.plh-req-name{font-family:var(--font-display);font-weight:800;font-size:15px;color:var(--color-text-white);line-height:1.2;letter-spacing:-.01em}.plh-req-desc{font-family:var(--font-body);font-weight:500;font-size:11.5px;color:var(--color-text-neon-muted);margin-top:3px;line-height:1.45;word-break:break-all;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.plh-req-meta{font-family:var(--font-body);font-weight:600;font-size:10px;color:var(--color-text-light);letter-spacing:.06em;text-transform:uppercase;margin-top:4px}.plh-req-meta b{color:var(--color-text-neon-muted);font-weight:700}.plh-req-link{color:var(--color-accent-secondary);font-weight:700;text-transform:none;letter-spacing:.02em;text-decoration:none}.plh-status-badge{flex-shrink:0;padding:4px 10px;border-radius:999px;font-family:var(--font-display);font-weight:800;font-size:10px;letter-spacing:.14em;text-transform:uppercase;display:flex;align-items:center;gap:5px}.plh-sb-dot{width:6px;height:6px;border-radius:50%;background:currentColor;box-shadow:0 0 6px currentColor}.plh-status-badge.pending{background:#f59e0b1f;border:1px solid rgba(245,158,11,.45);color:var(--color-warning)}.plh-status-badge.building{background:#00f5ff1f;border:1px solid rgba(0,245,255,.45);color:var(--color-accent-secondary)}.plh-status-badge.done{background:#39ff141f;border:1px solid rgba(57,255,20,.4);color:var(--color-success-neon)}.plh-status-badge.declined{background:#ff2d6a1f;border:1px solid rgba(255,45,106,.4);color:#ff7ca7}.plh-progress{display:flex;gap:3px;align-items:center}.plh-seg-pill{flex:1;height:3px;border-radius:2px;background:var(--color-border-neon)}.plh-seg-pill.filled-pending{background:var(--color-warning);box-shadow:0 0 6px var(--color-warning)}.plh-seg-pill.filled-building{background:var(--color-accent-secondary);box-shadow:0 0 6px var(--color-accent-secondary)}.plh-seg-pill.filled-done{background:var(--color-success-neon);box-shadow:0 0 6px var(--color-success-neon)}.plh-seg-pill.filled-declined{background:var(--color-accent-primary);box-shadow:0 0 6px var(--color-accent-primary)}.plh-steps-row{display:flex;justify-content:space-between;font-family:var(--font-body);font-weight:600;font-size:9px;color:var(--color-text-light);letter-spacing:.1em;text-transform:uppercase;margin-top:-4px}.plh-steps-row span.active{color:var(--color-text-white);font-weight:800}.plh-empty{padding:30px 28px;text-align:center;display:flex;flex-direction:column;align-items:center;gap:12px}.plh-empty-icon{width:96px;height:96px;border-radius:26px;display:flex;align-items:center;justify-content:center;background:var(--color-bg-surface);border:1px solid var(--color-border-neon);font-size:42px;position:relative}.plh-empty-icon-search{background:radial-gradient(circle,rgba(0,245,255,.12),var(--color-bg-surface) 60%)}.plh-empty-title{font-family:var(--font-display);font-weight:900;font-size:24px;color:var(--color-text-white);margin:0;letter-spacing:-.01em;line-height:1.15}.plh-empty-body{font-family:var(--font-body);font-weight:500;font-size:13px;color:var(--color-text-neon-muted);margin:0;line-height:1.55;max-width:280px}.plh-cyan{color:var(--color-accent-secondary)}.plh-action-stack{display:flex;flex-direction:column;gap:8px;width:100%;max-width:280px;margin-top:12px}.plh-btn{padding:13px 16px;border-radius:12px;font-weight:800;font-size:13px;letter-spacing:.04em;border:1px solid var(--color-border-neon);background:var(--color-bg-surface);color:var(--color-text-white);cursor:pointer;text-align:center;display:flex;align-items:center;justify-content:center;gap:8px;text-transform:uppercase;transition:all .15s;font-family:var(--font-display)}.plh-btn:hover{border-color:var(--color-accent-secondary)}.plh-btn-primary{background:linear-gradient(90deg,var(--color-accent-primary),#ff5fa4);border-color:transparent;color:var(--color-text-white);box-shadow:0 0 24px #ff2d6a73}.plh-btn-primary:hover{border-color:transparent;filter:brightness(1.1)}.plh-btn-cyan{background:linear-gradient(90deg,var(--color-accent-secondary),#0077b6);color:var(--color-bg-primary);border-color:transparent;box-shadow:0 0 22px #00f5ff73}.plh-btn-cyan:hover{border-color:transparent;filter:brightness(1.1)}.plh-btn-neon{background:linear-gradient(90deg,var(--color-success-neon),#7bf1ff);color:var(--color-bg-primary);border-color:transparent;box-shadow:0 0 24px #39ff1480}.plh-btn-ghost{background:transparent;color:var(--color-text-neon-muted)}.plh-sheet-host{position:fixed;inset:0;z-index:50;pointer-events:none;display:none}.plh-sheet-host.open{display:block;pointer-events:auto}.plh-scrim{position:absolute;inset:0;background:#05050ab8;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}.plh-sheet{position:absolute;left:0;right:0;bottom:0;background:linear-gradient(180deg,#14141e 0%,var(--color-bg-primary) 100%);border-top-left-radius:28px;border-top-right-radius:28px;box-shadow:0 -12px 40px #0009;max-height:80vh;display:flex;flex-direction:column;overflow:hidden;border-top:1px solid rgba(255,45,106,.25);animation:plh-sheet-in .25s ease-out}.plh-sheet-community{border-top-color:#9d4edd66}.plh-sheet:before{content:"";position:absolute;top:10px;left:50%;transform:translate(-50%);width:48px;height:4px;border-radius:999px;background:#fff3}@keyframes plh-sheet-in{0%{transform:translateY(100%)}to{transform:translateY(0)}}.plh-sheet-close{position:absolute;top:18px;right:18px;width:32px;height:32px;border-radius:50%;background:var(--color-bg-surface);border:1px solid var(--color-border-neon);color:var(--color-text-neon-muted);cursor:pointer;font-family:var(--font-display);font-weight:900;font-size:16px;line-height:1;z-index:5;display:flex;align-items:center;justify-content:center}.plh-sheet-head{padding:28px 20px 0;display:flex;gap:14px;align-items:flex-start;flex-shrink:0}.plh-sheet-cover{width:100px;height:100px;border-radius:14px;position:relative;overflow:hidden;flex-shrink:0;display:flex;flex-direction:column;justify-content:flex-end;padding:10px;box-shadow:0 12px 30px #00000080}.plh-sheet-cover-glyph{font-family:var(--font-display);font-weight:900;font-size:36px;line-height:.9;letter-spacing:-.04em;color:#fff;text-shadow:0 2px 8px rgba(0,0,0,.4)}.plh-sheet-cover-sub{font-family:var(--font-display);font-weight:700;font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:#ffffffe6;margin-top:2px}.plh-sheet-info{flex:1;min-width:0}.plh-sheet-title{font-family:var(--font-display);font-weight:900;font-size:22px;line-height:1.1;letter-spacing:-.02em;color:var(--color-text-white);margin:0}.plh-sheet-author{font-family:var(--font-body);font-weight:500;font-size:12px;color:var(--color-text-neon-muted);margin-top:4px}.plh-sheet-author b{color:var(--color-accent-secondary);font-weight:700}.plh-sheet-stats{display:flex;gap:0;padding:18px 20px 16px;border-bottom:1px solid rgba(255,255,255,.06);margin-top:18px;flex-shrink:0}.plh-stat{flex:1;text-align:center;position:relative}.plh-stat+.plh-stat:before{content:"";position:absolute;left:0;top:6px;bottom:6px;width:1px;background:var(--color-border-neon)}.plh-stat-val{font-family:var(--font-display);font-weight:900;font-size:22px;color:var(--color-text-white);letter-spacing:-.02em;line-height:1}.plh-stat-val-cyan{color:var(--color-accent-secondary)}.plh-stat-val-pink{color:var(--color-accent-primary)}.plh-stat-lbl{font-family:var(--font-body);font-weight:700;font-size:9px;letter-spacing:.16em;text-transform:uppercase;color:var(--color-text-light);margin-top:4px}.plh-sheet-scroll{flex:1;overflow-y:auto;padding:16px 20px 20px}.plh-sheet-sec-title{font-family:var(--font-display);font-weight:800;font-size:12px;letter-spacing:.18em;text-transform:uppercase;color:var(--color-text-neon-muted);margin:0 0 10px}.plh-sheet-desc{font-family:var(--font-body);font-weight:500;font-size:13px;color:var(--color-text-neon-muted);line-height:1.55;margin-bottom:16px;padding:14px;background:var(--color-bg-surface);border:1px solid var(--color-border-neon);border-radius:12px}.plh-sheet-tags{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:16px}.plh-sheet-tag{padding:5px 10px;background:var(--color-bg-surface);border:1px solid var(--color-border-neon);border-radius:6px;font-family:var(--font-body);font-weight:600;font-size:11px;color:var(--color-text-white);letter-spacing:.02em}.plh-sheet-providers{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:16px}.plh-sheet-provider{padding:6px 10px;background:var(--color-bg-surface);border:1px solid var(--color-border-neon);border-radius:8px;font-family:var(--font-body);font-weight:600;font-size:11px;color:var(--color-text-neon-muted)}.plh-sheet-provider b{color:var(--color-accent-secondary);font-weight:800}.plh-sheet-foot{padding:14px 20px calc(14px + env(safe-area-inset-bottom,0px)) 20px;background:#0a0a12f2;border-top:1px solid var(--color-border-neon);display:flex;gap:10px;align-items:center;flex-shrink:0}.plh-sheet-foot .plh-btn{flex:1}.plh-mix-cta:empty{display:none}.plh-cta-bar{position:absolute;left:12px;right:12px;bottom:12px;display:flex;gap:8px;padding:10px;background:#0a0a12e0;backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border:1px solid var(--color-border-neon);border-radius:16px;box-shadow:0 12px 40px #0009;align-items:center;z-index:10}.plh-cta-fab{width:44px;height:44px;border-radius:12px;background:linear-gradient(135deg,var(--color-accent-secondary) 0%,#0ea5c4 100%);border:none;color:var(--color-bg-primary);display:flex;align-items:center;justify-content:center;cursor:pointer;box-shadow:0 0 18px #00f5ff73,inset 0 1px #ffffff40;flex-shrink:0;transition:filter .15s}.plh-cta-fab:hover{filter:brightness(1.1)}.plh-cta-fab svg{stroke:#fff;fill:none}.plh-cta-back{flex-shrink:0;display:inline-flex;align-items:center;gap:4px;padding:0 12px;height:44px;border-radius:12px;background:var(--color-bg-surface);border:1px solid var(--color-border-neon);color:var(--color-text-white);font-family:var(--font-display);font-weight:700;font-size:13px;letter-spacing:.04em;text-transform:uppercase;cursor:pointer;transition:border-color .15s,background .15s}.plh-cta-back:hover{border-color:var(--color-accent-secondary)}.plh-cta-back svg{opacity:.85}.plh-cta-count{font-family:var(--font-display);font-weight:900;font-size:14px;color:var(--color-success-neon);padding:0 8px;letter-spacing:.04em;text-shadow:0 0 10px rgba(57,255,20,.5)}.plh-cta-start{flex:1;background:linear-gradient(90deg,var(--color-accent-primary),#ff5fa4);border:none;border-radius:12px;padding:12px;font-family:var(--font-display);font-weight:700;font-size:14px;color:var(--color-text-white);cursor:pointer;letter-spacing:.02em;box-shadow:0 0 24px #ff2d6a80;display:flex;align-items:center;justify-content:center;gap:8px}.plh-cta-start-count{display:none}.plh-cta-start-label{font-family:var(--font-display);font-weight:700}.plh-cta-start-arrow{opacity:.9;flex-shrink:0}.plh-cta-count-empty{opacity:.5}.plh-cta-count-btn{background:transparent;border:1px solid rgba(57,255,20,.35);border-radius:999px;cursor:pointer;transition:background .15s ease,border-color .15s ease,transform .1s ease}.plh-cta-count-btn:hover,.plh-cta-count-btn:focus-visible{background:#39ff141f;border-color:#39ff1499;outline:none}.plh-cta-count-btn:active{transform:scale(.96)}.plh-cta-start-disabled{opacity:.5;cursor:not-allowed;box-shadow:none}.plh-sheet-selected{border-top-color:#39ff1459}.plh-selected-head{padding:28px 20px 12px;flex-shrink:0}.plh-selected-title{font-family:var(--font-display);font-weight:900;font-size:20px;color:var(--color-text-white);margin:0 0 4px;letter-spacing:.01em}.plh-selected-subtitle{font-size:13px;color:var(--color-text-neon-muted);letter-spacing:.01em}.plh-selected-scroll{overflow-y:auto;padding:4px 16px 24px;flex:1;min-height:0}.plh-selected-row{display:flex;align-items:center;gap:12px;padding:10px 8px;border-bottom:1px solid rgba(255,255,255,.06)}.plh-selected-row:last-child{border-bottom:none}.plh-selected-thumb{width:44px;height:44px;border-radius:10px;display:flex;align-items:center;justify-content:center;flex-shrink:0;background:#ffffff0f}.plh-selected-glyph{font-size:20px}.plh-selected-meta{flex:1;min-width:0}.plh-selected-name{font-family:var(--font-display);font-weight:700;font-size:14px;color:var(--color-text-white);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.plh-selected-sub{font-size:12px;color:var(--color-text-neon-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-top:2px}.plh-selected-sub b{color:var(--color-text-white);font-weight:700}.plh-selected-remove{height:32px;padding:0 12px;border-radius:16px;background:var(--color-bg-surface);border:1px solid rgba(255,45,106,.35);color:#ff5fa4;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:6px;flex-shrink:0;font-family:var(--font-display);font-weight:700;font-size:12px;letter-spacing:.04em;text-transform:uppercase;transition:background .15s ease,color .15s ease,border-color .15s ease,transform .1s ease}.plh-selected-remove:hover,.plh-selected-remove:focus-visible{background:#ff2d6a2e;border-color:#ff2d6aa6;color:#ff7ab3;outline:none}.plh-selected-remove:active{transform:scale(.94)}.plh-selected-remove-label{line-height:1}.plh-selected-empty{text-align:center;padding:36px 20px;color:var(--color-text-neon-muted)}.plh-selected-empty-icon{font-size:36px;margin-bottom:8px}.plh-selected-empty-title{font-family:var(--font-display);font-weight:700;font-size:14px}@media(min-width:720px){.plh-cards{padding:0 24px 4px}.plh-header{padding:16px 24px 12px}.plh-shelf-head{padding:0 24px 10px}.plh-banner,.plh-new-request{margin-left:24px;margin-right:24px}.plh-req-list{padding:0 24px}.plh-mine-head{padding:14px 24px 6px}}.plg-host{position:fixed;inset:0;z-index:9000;display:flex;align-items:flex-start;justify-content:center;overflow:hidden}.plg-scrim{position:absolute;inset:0;background:#000000b8;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}.plg-modal{position:relative;z-index:1;margin:32px 16px;max-width:880px;width:100%;background:#0f1116;color:#f1f3f7;border-radius:16px;border:1px solid rgba(255,255,255,.08);box-shadow:0 30px 60px #0009;padding:24px 24px 20px;max-height:calc(100vh - 64px);overflow-y:auto;font-family:var(--font-body, system-ui)}.plg-close{position:absolute;top:12px;right:12px;width:32px;height:32px;border-radius:50%;background:#ffffff0f;color:#f1f3f7;border:0;font-size:16px;cursor:pointer}.plg-close:hover{background:#ffffff1f}.plg-title{margin:0 0 4px;font-size:20px;font-family:var(--font-display, system-ui);font-weight:700;letter-spacing:.02em}.plg-sub{margin:0 0 18px;color:#d8dce5;font-size:15px;line-height:1.55}.plg-guide{margin:0 0 18px;background:#14171f;border:1px solid rgba(255,255,255,.08);border-radius:12px;overflow:hidden}.plg-guide-toggle{display:flex;align-items:center;justify-content:space-between;width:100%;box-sizing:border-box;padding:12px 14px;background:transparent;border:0;color:#f1f3f7;font:inherit;font-size:14px;font-weight:700;letter-spacing:.01em;cursor:pointer;text-align:left}.plg-guide-toggle:hover{background:#ffffff08}.plg-guide-chevron{color:#8a92a3;font-size:13px;margin-left:12px}.plg-guide-body{padding:4px 14px 14px;border-top:1px solid rgba(255,255,255,.06)}.plg-guide-steps{list-style:none;margin:12px 0 14px;padding:0;display:flex;flex-direction:column;gap:12px}.plg-guide-step{display:flex;align-items:flex-start;gap:12px}.plg-guide-num{flex:0 0 auto;width:22px;height:22px;border-radius:50%;background:linear-gradient(180deg,#ff3a8c,#cf2e72);color:#fff;font-size:12px;font-weight:700;display:flex;align-items:center;justify-content:center;margin-top:1px}.plg-guide-text{color:#d8dce5;font-size:13.5px;line-height:1.5}.plg-guide-text b{color:#f1f3f7}.plg-guide-warn{display:flex;align-items:flex-start;gap:10px;background:#ffb80014;border:1px solid rgba(255,184,0,.35);border-radius:10px;padding:10px 12px}.plg-guide-warn-icon{flex:0 0 auto;font-size:14px;line-height:1.5}.plg-guide-warn-text{color:#f0d9a8;font-size:12.5px;line-height:1.55}.plg-guide-warn-text b{color:#ffd66b}.plg-label{display:block;margin:14px 0 6px;font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#8a92a3}.plg-input,.plg-textarea{width:100%;box-sizing:border-box;background:#181b24;color:#f1f3f7;border:1px solid rgba(255,255,255,.1);border-radius:10px;padding:10px 12px;font:inherit;font-size:14px;outline:none}.plg-input:focus,.plg-textarea:focus{border-color:#5cc8ff}.plg-textarea{min-height:200px;font-family:var(--font-mono, ui-monospace, SFMono-Regular, Menlo, monospace);font-size:12.5px;line-height:1.45;resize:vertical}.plg-row{display:flex;gap:10px;align-items:center;margin:8px 0 0;flex-wrap:wrap}.plg-hint{color:#8a92a3;font-size:12px}.plg-btn{appearance:none;-webkit-appearance:none;cursor:pointer;border-radius:999px;padding:9px 16px;font:inherit;font-size:13px;font-weight:600;border:0;background:#ffffff14;color:#f1f3f7}.plg-btn:disabled{cursor:not-allowed;opacity:.45}.plg-btn-primary{background:linear-gradient(180deg,#ff3a8c,#cf2e72);color:#fff}.plg-btn-secondary{background:#ffffff1a}.plg-btn-ghost{background:transparent;color:#aab0bd}.plg-btn-success{background:linear-gradient(180deg,#2dd66f,#20b659);color:#04140a}.plg-btn-disabled{background:#ffffff0a;color:#5a606e}.plg-actions{display:flex;gap:10px;margin:16px 0 0;flex-wrap:wrap}.plg-results{margin-top:16px}.plg-verdict{padding:10px 12px;border-radius:10px;margin:6px 0 12px;font-weight:700;font-size:13px}.plg-verdict-ok{background:#2dd66f29;color:#2dd66f;border:1px solid rgba(45,214,111,.4)}.plg-verdict-bad{background:#ff505024;color:#ff8a8a;border:1px solid rgba(255,80,80,.4)}.plg-block{background:#14171f;border:1px solid rgba(255,255,255,.06);border-radius:10px;padding:10px 12px;margin:8px 0}.plg-block h4{margin:0 0 6px;font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:#aab0bd}.plg-block ul{margin:0;padding-left:18px;font-size:13px;line-height:1.5}.plg-block-err{border-color:#ff505066}.plg-table-wrap{overflow-x:auto}.plg-table{width:100%;border-collapse:collapse;font-size:11px}.plg-table th,.plg-table td{padding:4px 6px;text-align:center}.plg-table th{color:#8a92a3;font-weight:600;letter-spacing:.04em;border-bottom:1px solid rgba(255,255,255,.08)}.plg-row-idx{color:#aab0bd;text-align:left;font-weight:700}.plg-cell-ok{color:#2dd66f}.plg-cell-bad{color:#ff8a8a;background:#ff50500f}.plg-row-bad{background:#ff50500a}.plg-row-details td{text-align:left;padding-left:24px}.plg-err-list{color:#ff8a8a}.plg-warn-list{color:#ffd66b}.plg-song-issue{padding:8px 0;border-top:1px solid rgba(255,255,255,.05)}.plg-song-issue:first-of-type{border-top:0;padding-top:4px}.plg-song-issue-head{font-weight:700;font-size:12px;margin:0 0 4px;color:#f1f3f7;letter-spacing:.02em}.plg-song-issue ul{margin:0;padding-left:18px;font-size:13px;line-height:1.5}.plg-err-item{color:#ff8a8a}.plg-warn-item{color:#ffd66b}.plg-results-actions{margin-top:0!important;margin-bottom:6px}.plg-hint-inline{font-style:italic}.plg-error{background:#ff50501f;border:1px solid rgba(255,80,80,.4);color:#ff8a8a;border-radius:10px;padding:12px;font-family:var(--font-mono, ui-monospace, SFMono-Regular, Menlo, monospace);font-size:12px}.plg-footer{margin-top:16px;border-top:1px solid rgba(255,255,255,.06);padding-top:10px;color:#8a92a3;font-size:12px;line-height:1.5}.plg-followup:empty{display:none}.plg-banner{margin-top:12px;padding:10px 12px;border-radius:10px;font-size:13px;line-height:1.5}.plg-banner p{margin:0 0 8px}.plg-banner .plg-row{margin-top:4px;flex-wrap:wrap}.plg-banner-ok{background:#2dd66f24;border:1px solid rgba(45,214,111,.4);color:#c8f3d8}.plg-banner-info{background:#6366f124;border:1px solid rgba(99,102,241,.4);color:#d6d8ff}.ta-reveal-truth{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:center;gap:8px;font-family:var(--font-display, inherit);font-size:var(--font-size-md, 1rem);margin-bottom:var(--space-sm, 8px)}.ta-truth-title{font-weight:800}.ta-truth-sep{opacity:.4}.ta-truth-artist{color:var(--color-text-neon-muted, #b3b3c2);font-family:var(--font-body, inherit);font-weight:600}.ta-reveal-own{display:flex;flex-direction:column;gap:6px;padding:10px 12px;background:#ffffff08;border:1px solid rgba(255,255,255,.07);border-radius:var(--radius-lg, 12px)}.ta-verdict{text-align:center;font-family:var(--font-display, inherit);font-weight:900;font-size:var(--font-size-lg, 1.125rem);letter-spacing:.01em;padding:8px 12px;margin-bottom:4px;border-radius:var(--radius-md, 8px)}.ta-verdict--win{color:var(--color-success-neon, #39ff14);background:#39ff1424;box-shadow:inset 0 0 18px #39ff141f;text-shadow:0 0 12px rgba(57,255,20,.5)}.ta-verdict--partial{color:var(--color-accent-secondary, #00f5ff);background:#00f5ff1a}.ta-verdict--pending{color:var(--color-accent-secondary, #00f5ff);background:#00f5ff12;font-weight:700;font-style:italic}.ta-verdict--miss{color:var(--color-text-neon-muted, #b3b3c2);background:#ffffff0d}.ta-own-row{display:flex;align-items:center;flex-wrap:wrap;gap:10px}.ta-own-label{color:var(--color-text-dim, #6b6b7a);font-size:var(--font-size-sm, .875rem);min-width:6em}.ta-own-guess{font-weight:600;flex:1 1 auto;word-break:break-word}.ta-own-row--none{color:var(--color-text-neon-muted, #b3b3c2);font-style:italic}.ta-pill{font-size:.72rem;font-weight:700;padding:2px 10px;border-radius:var(--radius-full, 999px);white-space:nowrap;letter-spacing:.02em}.ta-pill--exact,.ta-pill--fuzzy,.ta-pill--near-miss-accepted{background:#2ee59d29;color:#2ee59d}.ta-pill--near-miss{background:#ffb40029;color:#ffb400}.ta-pill--wrong{background:#ff004024;color:var(--color-error-neon, #ff0040)}.ta-pill--skipped{background:#ffffff14;color:var(--color-text-secondary, #b9b9c6)}.ta-voting{margin-top:var(--space-lg, 24px)}.ta-voting.hidden{display:none}.ta-voting-header{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:var(--space-md, 16px)}.ta-voting-header>span:not(.ta-voting-countdown){font-family:var(--font-display, inherit);font-weight:900;font-size:var(--font-size-sm, .875rem);letter-spacing:.1em;text-transform:uppercase;color:var(--color-text-white, #fff)}.ta-voting-countdown{flex-shrink:0;width:52px;height:52px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:18px;font-variant-numeric:tabular-nums;color:var(--color-accent-secondary, #00f5ff);background:radial-gradient(circle at center,var(--color-bg-primary, #0a0a12) 56%,transparent 57%),conic-gradient(var(--color-accent-secondary, #00f5ff) var(--ta-vote-progress, 360deg),rgba(255,255,255,.1) 0);box-shadow:var(--glow-secondary, 0 0 20px rgba(0, 245, 255, .5))}.ta-voting-countdown--closed{width:auto;height:auto;border-radius:var(--radius-full, 999px);padding:4px 12px;font-size:var(--font-size-sm, .875rem);font-weight:700;color:var(--color-text-neon-muted, #b3b3c2);background:#ffffff14;box-shadow:none}.ta-voting-cards{display:flex;flex-direction:column;gap:12px}.ta-vote-card{background:var(--color-bg-surface, rgba(255, 255, 255, .05));border:1px solid rgba(255,255,255,.08);border-radius:var(--radius-lg, 12px);padding:14px}.ta-vote-card--mine{border-color:#ff2d6a73;box-shadow:inset 0 0 16px #ff2d6a12}.ta-vote-card-head{display:flex;align-items:center;gap:10px;margin-bottom:10px}.ta-vote-avatar{flex-shrink:0;width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-family:var(--font-display, inherit);font-weight:800;font-size:13px;color:#fff;background:linear-gradient(135deg,var(--color-accent-primary, #ff2d6a),var(--color-neon-purple, #9d4edd))}.ta-vote-who{flex:1;font-weight:700;font-size:var(--font-size-md, 1rem);word-break:break-word}.ta-vote-field{flex-shrink:0;font-size:var(--font-size-xs, .625rem);font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--color-text-dim, #6b6b7a);background:#ffffff0f;padding:3px 8px;border-radius:var(--radius-full, 999px)}.ta-vote-guess{font-family:var(--font-display, inherit);font-weight:800;font-size:var(--font-size-lg, 1.125rem);margin:2px 0 12px;word-break:break-word}.ta-vote-tally{display:flex;flex-direction:column;gap:7px;margin-bottom:12px}.ta-tally-row{display:flex;align-items:center;gap:8px;font-size:var(--font-size-sm, .875rem);font-weight:700;font-variant-numeric:tabular-nums}.ta-tally-yes{color:var(--color-success-neon, #39ff14);min-width:48px}.ta-tally-no{color:var(--color-error-neon, #ff0040);min-width:48px}.ta-tally-track{flex:1;height:8px;border-radius:var(--radius-full, 999px);background:#ffffff12;overflow:hidden}.ta-tally-fill{display:block;height:100%;border-radius:var(--radius-full, 999px);transition:width var(--transition-normal, .3s) ease-out}.ta-tally-fill--yes{background:var(--color-success-neon, #39ff14);box-shadow:0 0 10px #39ff1480}.ta-tally-fill--no{background:var(--color-error-neon, #ff0040);box-shadow:0 0 10px #ff004073}.ta-vote-actions{display:flex;gap:10px}.ta-vote-btn{position:relative;flex:1;height:48px;border:1px solid rgba(255,255,255,.12);border-radius:var(--radius-lg, 12px);background:#ffffff0d;font-size:20px;cursor:pointer;transition:transform var(--transition-fast, .15s),box-shadow var(--transition-fast, .15s),opacity var(--transition-fast, .15s),background var(--transition-fast, .15s)}.ta-vote-btn--yes{background:#39ff141f;border-color:#39ff1466;color:var(--color-success-neon, #39ff14)}.ta-vote-btn--no{background:#ff00401a;border-color:#ff004061;color:var(--color-error-neon, #ff0040)}.ta-vote-btn.is-chosen{transform:translateY(-1px)}.ta-vote-btn--yes.is-chosen{background:#39ff1438;border-color:#39ff1499;box-shadow:var(--glow-success, 0 0 20px rgba(57, 255, 20, .5))}.ta-vote-btn--no.is-chosen{background:#ff004033;border-color:#ff00408c;box-shadow:var(--glow-error, 0 0 20px rgba(255, 0, 64, .5))}.ta-vote-actions--voted .ta-vote-btn{opacity:.34}.ta-vote-actions--voted .ta-vote-btn.is-chosen{opacity:1}.ta-vote-actions--voted .ta-vote-btn.is-chosen:after{content:"\2713";position:absolute;top:3px;right:8px;font-size:12px;font-weight:800}.ta-vote-btn--yes.is-chosen:after{color:var(--color-success-neon, #39ff14)}.ta-vote-btn--no.is-chosen:after{color:var(--color-error-neon, #ff0040)}.ta-voted-caption{margin-top:8px;text-align:center;font-size:var(--font-size-sm, .875rem);color:var(--color-text-neon-muted, #b3b3c2)}.ta-vote-own-note{text-align:center;font-size:var(--font-size-sm, .875rem);font-style:italic;color:var(--color-accent-primary, #ff2d6a);opacity:.85}.ta-override-actions{display:flex;align-items:center;gap:8px;margin-top:10px;padding-top:10px;border-top:1px solid rgba(255,255,255,.07)}.ta-override-label{margin-right:auto;font-size:var(--font-size-xs, .625rem);color:var(--color-text-dim, #6b6b7a)}.ta-override-btn{padding:6px 14px;border-radius:var(--radius-md, 8px);border:1px solid rgba(255,255,255,.14);background:#ffffff0d;color:var(--color-text-white, #fff);font-weight:700;font-size:var(--font-size-sm, .875rem);cursor:pointer}.ta-override-btn--accept.is-chosen{border-color:var(--color-success-neon, #39ff14);color:var(--color-success-neon, #39ff14)}.ta-override-btn--reject.is-chosen{border-color:var(--color-error-neon, #ff0040);color:var(--color-error-neon, #ff0040)}@media(prefers-reduced-motion:reduce){.ta-tally-fill,.ta-vote-btn{transition:none}}.ta-outcome-card{display:flex;align-items:center;gap:10px;background:var(--color-bg-surface, rgba(255, 255, 255, .05));border:1px solid rgba(255,255,255,.08);border-radius:var(--radius-lg, 12px);padding:11px 13px}.ta-outcome-card--accepted{border-color:#39ff144d}.ta-outcome-card--rejected{opacity:.72}.ta-outcome-avatar{flex-shrink:0;width:28px;height:28px;border-radius:50%;display:grid;place-items:center;font-family:var(--font-display, inherit);font-weight:800;font-size:12px;color:#fff;background:linear-gradient(135deg,var(--color-accent-primary, #ff2d6a),var(--color-neon-purple, #9d4edd))}.ta-outcome-main{flex:1;min-width:0}.ta-outcome-who{font-weight:700;font-size:var(--font-size-base, .875rem)}.ta-outcome-field{color:var(--color-text-dim, #6b6b7a);font-weight:600}.ta-outcome-guess{font-size:var(--font-size-sm, .875rem);color:var(--color-text-neon-muted, #b3b3c2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ta-outcome-tally{font-size:var(--font-size-xs, .625rem);color:var(--color-text-dim, #6b6b7a);font-variant-numeric:tabular-nums}.ta-outcome-verdict{flex-shrink:0;display:inline-flex;align-items:center;font-family:var(--font-display, inherit);font-weight:800;font-size:var(--font-size-base, .875rem);padding:5px 11px;border-radius:var(--radius-full, 999px);font-variant-numeric:tabular-nums}.ta-outcome-verdict--accepted{background:#39ff1429;color:var(--color-success-neon, #39ff14)}.ta-outcome-verdict--rejected{background:#ff00401f;color:var(--color-error-neon, #ff0040)}.ta-input-section{display:flex;flex-direction:column;gap:12px;padding:12px 14px;margin:0 var(--space-md) var(--space-md);background:linear-gradient(180deg,#ff2d6a0f,#ffffff05);border:1px solid rgba(255,45,106,.22);border-radius:var(--radius-lg);box-shadow:inset 0 0 12px #ff2d6a0d}.ta-input-section.hidden{display:none}.ta-input-field{display:flex;flex-direction:column;gap:6px}.ta-input-label{display:flex;align-items:center;gap:6px;font-family:var(--font-display);font-weight:700;font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--color-text-neon-muted)}.ta-input-points{margin-left:auto;flex-shrink:0;background:#39ff1426;color:var(--color-success-neon);font-weight:900;font-size:11px;letter-spacing:.04em;padding:2px 8px;border-radius:var(--radius-full)}.ta-text-input{width:100%;box-sizing:border-box;padding:12px 14px;background:#ffffff0d;border:2px solid rgba(255,255,255,.12);border-radius:var(--radius-lg);color:var(--color-text-white);font-family:var(--font-body);font-size:16px;line-height:1.3;transition:border-color var(--transition-fast),box-shadow var(--transition-fast)}.ta-text-input::placeholder{color:var(--color-text-neon-muted);opacity:.55}.ta-text-input:focus{outline:none;border-color:var(--color-accent-primary);box-shadow:0 0 0 3px #ff2d6a33}.ta-input-ack{margin-top:2px;text-align:center;font-family:var(--font-body);font-size:12px;color:var(--color-success-neon)}.ta-input-ack.hidden{display:none}#reveal-view .reveal-container--duel{position:relative;overflow:hidden;isolation:isolate}#reveal-view .reveal-backdrop{position:absolute;top:0;left:0;right:0;height:340px;z-index:0;background-size:cover;background-position:center;background-repeat:no-repeat;filter:blur(46px) saturate(1.15);transform:scale(1.15);transform-origin:top center;opacity:.5;pointer-events:none;-webkit-mask-image:linear-gradient(to bottom,#000 0%,#000 28%,transparent 70%);mask-image:linear-gradient(to bottom,#000 0%,#000 28%,transparent 70%)}#reveal-view .reveal-backdrop--synthetic{background-image:radial-gradient(circle at 28% 22%,#a82054f2,#a8205400 42%),radial-gradient(circle at 78% 14%,#601c96e6,#601c9600 46%),radial-gradient(circle at 18% 82%,#222878e6,#22287800 50%),conic-gradient(from 210deg at 52% 48%,#1a1038,#4a1240 70deg,#7a1e3c 130deg,#2a1454 200deg,#131642,#1a1038 360deg);filter:blur(54px) saturate(1.25)}#reveal-view .reveal-scrim{position:absolute;top:0;left:0;right:0;height:380px;z-index:0;pointer-events:none;background:linear-gradient(180deg,rgba(10,10,18,.78) 0%,rgba(10,10,18,.88) 55%,var(--color-bg-primary) 100%)}#reveal-view .reveal-scrim:after{content:"";position:absolute;inset:0;background:radial-gradient(ellipse 320px 360px at 50% 24%,#00f5ff21,#00f5ff00 62%)}#reveal-view .reveal-container--duel>*:not(.reveal-backdrop):not(.reveal-scrim):not(.confetti-canvas){position:relative;z-index:1}@media(prefers-reduced-motion:no-preference){#reveal-view .reveal-backdrop{transition:background-image .4s ease}}#reveal-view .song-strip,#reveal-view .score-row,#reveal-view .card-section,#reveal-view .duel-ticket{background:#ffffff0f;border:1px solid rgba(255,255,255,.12);-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);box-shadow:0 10px 30px #00000059;border-radius:var(--radius-lg)}#reveal-view .card-section:hover{background:#ffffff14;border-color:#ffffff29}#reveal-view .reveal-header-v2{margin-bottom:var(--space-sm)}#reveal-view .song-strip{padding:var(--space-sm) var(--space-md) var(--space-sm) var(--space-sm)}#reveal-view .song-strip-cover{box-shadow:0 2px 10px #00000080;border:1px solid rgba(255,255,255,.15)}#reveal-view .duel-emotion{font-size:30px;letter-spacing:.04em;margin-bottom:var(--space-sm);text-shadow:0 4px 18px rgba(0,0,0,.6)}#reveal-view .duel{padding:var(--space-md) var(--space-xs) var(--space-lg)}#reveal-view .duel-tickets{position:relative;display:flex;justify-content:center;align-items:stretch;gap:var(--space-md);padding-bottom:20px}#reveal-view .duel-ticket{flex:1 1 0;max-width:170px;padding:var(--space-md) var(--space-sm) var(--space-lg);text-align:center}#reveal-view .duel-ticket--you{transform:rotate(-3deg) translateY(4px);border-color:#ff2d6a59;box-shadow:0 14px 34px #00000073,0 0 24px #ff2d6a1f}#reveal-view .duel-ticket--truth{transform:rotate(3deg) translateY(4px);border-color:#00f5ff66;box-shadow:0 14px 34px #00000073,0 0 34px #00f5ff2e}#reveal-view .duel-ticket .duel-label{padding-bottom:var(--space-sm);margin:0 6px var(--space-sm);border-bottom:1.5px dashed rgba(255,255,255,.18)}#reveal-view .duel-ticket .duel-year{font-size:clamp(40px,13vw,54px)}#reveal-view .duel-ticket--you .duel-year.mine{color:var(--color-accent-primary);text-shadow:0 0 18px rgba(255,45,106,.45)}#reveal-view .duel-ticket--truth .duel-year.correct{color:var(--color-accent-secondary);text-shadow:0 0 14px rgba(0,245,255,.9),0 0 38px rgba(0,245,255,.45)}#reveal-view .duel-gap{position:absolute;left:50%;bottom:0;transform:translate(-50%);flex-direction:row;align-items:baseline;gap:5px;min-width:0;padding:6px 16px;border-radius:var(--radius-full);background:#ff660029;border:1px solid rgba(255,102,0,.55);-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);box-shadow:0 6px 18px #00000080,0 0 16px #f603;white-space:nowrap;z-index:3}#reveal-view .duel-gap-x{font-size:var(--font-size-md);color:var(--color-warning-alt);opacity:.9}#reveal-view .duel-gap-n{font-size:var(--font-size-lg);color:var(--color-warning-alt);text-shadow:none}#reveal-view .duel-gap-unit{margin-top:0;font-size:10px;color:var(--color-warning-alt)}#reveal-view .duel-gap--exact{background:#39ff1429;border-color:#39ff148c;box-shadow:0 6px 18px #00000080,0 0 16px #39ff1438}#reveal-view .duel-gap--exact .duel-gap-x,#reveal-view .duel-gap--exact .duel-gap-n,#reveal-view .duel-gap--exact .duel-gap-unit{color:var(--color-success-neon)}#reveal-view .duel-gap--wrong{background:#ff004024;border-color:#ff004080;box-shadow:0 6px 18px #00000080,0 0 16px #ff004033}#reveal-view .duel-gap--wrong .duel-gap-x,#reveal-view .duel-gap--wrong .duel-gap-n,#reveal-view .duel-gap--wrong .duel-gap-unit{color:var(--color-error-neon)}#reveal-view .score-row{border-color:#ffffff1f;box-shadow:0 10px 30px #00000059}#reveal-view .score-row-pts{color:var(--color-success-neon);text-shadow:0 0 16px rgba(57,255,20,.5);font-size:32px}#reveal-view .ta-vote-card,#reveal-view .ta-outcome-card{background:#ffffff0d;border:1px solid rgba(255,255,255,.1);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}#reveal-view .next-round-btn{background:linear-gradient(135deg,#ff2d6a,#ff4f86);border-radius:var(--radius-full);box-shadow:0 8px 24px #ff2d6a73,0 0 18px #ff2d6a4d}#reveal-view .next-round-btn:hover{background:linear-gradient(135deg,#ff4f86,#ff2d6a)}#reveal-view .next-round-btn.is-final{background:linear-gradient(135deg,#39ff14,#00f5ff);color:var(--color-bg-primary)}#reveal-view .invite-btn{background:#ffffff0f;border:1px solid rgba(255,255,255,.18);-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);border-radius:var(--radius-full)}#reveal-view .reveal-admin-buttons{align-items:stretch}#reveal-view .reveal-admin-buttons .invite-btn,#reveal-view .reveal-admin-buttons .next-round-btn{flex:1 1 0;min-width:0;max-width:260px;min-height:56px;padding:12px 20px;font-size:var(--font-size-md);display:inline-flex;align-items:center;justify-content:center;gap:var(--space-sm);text-align:center}#reveal-view #reveal-leaderboard-list{display:flex;flex-direction:column;gap:8px;max-height:none;overflow:visible}#reveal-view .rstand-row{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:12px;background:#ffffff08;border:1px solid rgba(255,255,255,.06)}#reveal-view .rstand-row--you{border:1px solid var(--color-accent-primary);background:#ff2d6a0f;box-shadow:0 0 16px #ff2d6a38}#reveal-view .rstand-row--taper1{opacity:.85}#reveal-view .rstand-row--taper2{opacity:.68}#reveal-view .rstand-rankcell{display:flex;flex-direction:column;align-items:center;width:26px;flex-shrink:0}#reveal-view .rstand-rank{font-family:var(--font-display);font-weight:800;font-size:20px;line-height:1;color:var(--color-text-white)}#reveal-view .rstand-row--taper1 .rstand-rank,#reveal-view .rstand-row--taper2 .rstand-rank{font-size:18px}#reveal-view .rstand-move{font-size:10px;font-weight:700;line-height:1;margin-top:3px}#reveal-view .rstand-move--up{color:var(--color-success-neon)}#reveal-view .rstand-move--down{color:var(--color-error-neon)}#reveal-view .rstand-move--flat{color:var(--color-text-neon-muted)}#reveal-view .rstand-avatar{width:34px;height:34px;border-radius:50%;flex-shrink:0;display:flex;align-items:center;justify-content:center;font-family:var(--font-display);font-weight:800;font-size:15px;color:var(--color-text-white);text-shadow:0 1px 2px rgba(0,0,0,.35);border:1px solid rgba(255,255,255,.15)}#reveal-view .rstand-ident{flex:1;min-width:0}#reveal-view .rstand-name{font-family:var(--font-body);font-weight:700;font-size:15px;line-height:1.1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:flex;align-items:center;gap:6px;color:var(--color-text-white)}#reveal-view .rstand-you{font-family:var(--font-display);font-weight:800;font-size:9px;letter-spacing:.06em;color:var(--color-accent-primary);background:#ff2d6a26;border:1px solid rgba(255,45,106,.4);border-radius:6px;padding:2px 5px;line-height:1;flex-shrink:0}#reveal-view .rstand-guess{font-size:11px;font-weight:500;color:var(--color-text-neon-muted);line-height:1.2;margin-top:3px;font-variant-numeric:tabular-nums;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#reveal-view .rstand-guess .rstand-exact{color:var(--color-success-neon);font-weight:600}#reveal-view .rstand-chips{display:flex;flex-wrap:wrap;gap:5px;margin-top:5px}#reveal-view .rstand-chip{font-size:10px;font-weight:600;color:var(--color-text-neon-muted);background:#ffffff0d;border:1px solid rgba(255,255,255,.08);border-radius:999px;padding:2px 7px;line-height:1.4;white-space:nowrap}#reveal-view .rstand-chip--fire{color:var(--color-warning-alt);border-color:#ff66004d;background:#ff660014}#reveal-view .rstand-chip--steal{color:var(--color-success-neon);border-color:#39ff1447;background:#39ff1412}#reveal-view .rstand-score{display:flex;flex-direction:column;align-items:flex-end;flex-shrink:0;margin-left:4px}#reveal-view .rstand-total{font-family:var(--font-display);font-weight:900;font-size:22px;line-height:1;color:var(--color-text-white);letter-spacing:-.01em}#reveal-view .rstand-row--taper1 .rstand-total{font-size:20px}#reveal-view .rstand-row--taper2 .rstand-total{font-size:19px}#reveal-view .rstand-delta{font-family:var(--font-body);font-weight:700;font-size:12px;line-height:1;margin-top:4px;color:var(--color-success-neon)}#reveal-view .rstand-delta--zero{color:var(--color-text-neon-muted)}#reveal-view .song-strip{flex-direction:column;align-items:stretch;gap:0;padding:0;overflow:hidden}#reveal-view .song-strip-main{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-md) var(--space-sm) var(--space-sm)}#reveal-view .artist-guess-row{display:flex;align-items:center;gap:8px;padding:9px var(--space-md) 9px var(--space-sm);border-top:1px solid rgba(255,255,255,.08)}#reveal-view .artist-guess-row.hidden{display:none}#reveal-view .artist-guess-ic{font-size:14px;flex-shrink:0}#reveal-view .artist-guess-name{font-family:var(--font-body);font-weight:700;font-size:14px;color:var(--color-text-white);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}#reveal-view .artist-reveal-winner{margin-left:auto;flex-shrink:0;font-family:var(--font-body);font-size:11px;font-weight:700;padding:3px 10px;border-radius:var(--radius-full);white-space:nowrap}#reveal-view .artist-reveal-winner.hidden{display:none}#reveal-view .artist-reveal-winner.is-you,#reveal-view .artist-reveal-winner.is-other{color:var(--color-success-neon);background:#39ff141f;border:1px solid rgba(57,255,20,.4)}#reveal-view .artist-reveal-winner.is-you{box-shadow:0 0 12px #39ff1433}#reveal-view .artist-reveal-winner.artist-reveal-no-winner{color:var(--color-text-neon-muted);background:#ffffff0f;border:1px solid rgba(255,255,255,.12)}#reveal-view #fun-fact-container .section-content-padded{display:flex;flex-direction:column;gap:11px}#reveal-view .song-rich-info .song-badges-row{display:flex;gap:8px}#reveal-view .song-rich-info .song-badge{flex:1;min-width:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;padding:11px 6px;border-radius:12px;background:#ffffff0d;border:1px solid rgba(255,255,255,.1);font-family:var(--font-body);font-size:11px;font-weight:700;line-height:1.2;text-align:center;white-space:normal}#reveal-view .song-rich-info .song-badge .song-badge-icon{font-size:20px}#reveal-view .song-rich-info .song-badges-more{flex:0 0 auto;align-self:center;font-size:11px;color:var(--color-text-neon-muted)}#reveal-view #fun-fact .fun-fact-text,#reveal-view .fun-fact-text{font-size:12px;line-height:1.4;color:var(--color-text-neon-muted);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.playlist-tabs{display:flex;gap:var(--space-lg);border-bottom:1px solid var(--color-border-neon);margin-bottom:var(--space-md)}.playlist-tab{appearance:none;background:none;border:none;padding:10px 2px;margin-bottom:-1px;font:inherit;font-weight:700;font-size:.95rem;color:var(--color-text-neon-muted);cursor:pointer;border-bottom:2px solid transparent;transition:color var(--transition-fast),border-color var(--transition-fast)}.playlist-tab:hover{color:var(--color-text-white)}.playlist-tab.active{color:var(--color-accent-secondary);border-bottom-color:var(--color-accent-secondary)}.playlist-panel.hidden{display:none}.mix-card{background:var(--color-surface-dark);border:1px solid var(--color-border-neon);border-radius:var(--radius-lg);padding:var(--space-lg)}.mix-card-head{display:flex;align-items:center;gap:var(--space-sm)}.mix-card-icon{font-size:1.25rem}.mix-card-title{margin:0;font-size:1.25rem;font-weight:800;color:var(--color-text-white)}.mix-card-sub{margin:6px 0 var(--space-lg);color:var(--color-text-neon-muted);font-size:.9rem}.mix-chip-cloud{display:flex;flex-direction:column;gap:var(--space-md)}.mix-chip-row{display:flex;flex-direction:column;gap:8px}.mix-chip-rowlabel{font-size:.7rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--color-text-neon-muted)}.mix-chip-group{display:flex;flex-wrap:wrap;gap:8px}.mix-chip{appearance:none;padding:6px 14px;border-radius:var(--radius-full);border:1px solid var(--color-border-neon);background:#ffffff0a;color:var(--color-text-neon-muted);font:inherit;font-size:.85rem;font-weight:600;cursor:pointer;transition:all var(--transition-fast)}.mix-chip:hover{border-color:#ffffff4d;color:var(--color-text-white)}.mix-chip-group[data-accent=cyan] .mix-chip.active{background:#00f5ff26;border-color:var(--color-accent-secondary);color:var(--color-accent-secondary)}.mix-chip-group[data-accent=pink] .mix-chip.active{background:#ff2d6a26;border-color:var(--color-accent-primary);color:var(--color-accent-primary)}.mix-chip-group[data-accent=indigo] .mix-chip.active{background:#6366f12e;border-color:var(--color-accent-brand);color:#a5b4fc}.mix-empty{color:var(--color-text-neon-muted);font-size:.9rem;margin:0}.mix-divider{height:1px;background:var(--color-border-neon);margin:var(--space-lg) 0}.mix-count-row{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md);flex-wrap:wrap}.mix-count-label{font-size:.7rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--color-text-neon-muted)}.mix-segmented{display:inline-flex;padding:4px;gap:4px;background:#ffffff0d;border:1px solid var(--color-border-neon);border-radius:10px}.mix-seg{appearance:none;min-width:56px;padding:8px 14px;border:none;border-radius:7px;background:transparent;color:var(--color-text-neon-muted);font:inherit;font-weight:700;cursor:pointer;transition:all var(--transition-fast)}.mix-seg:hover{color:var(--color-text-white)}.mix-seg.active{background:var(--color-accent-brand);color:var(--color-text-white);box-shadow:0 0 14px #6366f180}.mix-preview{display:flex;align-items:center;gap:10px;margin:var(--space-md) 0 var(--space-lg);padding:12px 16px;border-radius:var(--radius-md);background:#00f5ff0f;border:1px solid rgba(0,245,255,.15);color:var(--color-text-white);font-size:.9rem}.mix-preview-dot{width:8px;height:8px;border-radius:50%;background:#1ed760;box-shadow:0 0 8px #1ed760cc;flex-shrink:0}.mix-actions{display:flex;align-items:center;gap:var(--space-lg);flex-wrap:wrap}.mix-actions .btn-primary:disabled{opacity:.5;cursor:not-allowed;box-shadow:none}.mix-save-label{display:flex;align-items:center;gap:8px;font-size:.9rem;color:var(--color-text-neon-muted);cursor:pointer}#mix-error{margin-top:var(--space-md)}.mix-error-detail{display:block;margin-top:var(--space-xs);font-size:var(--font-size-sm);line-height:1.35;color:var(--color-text-light);word-break:break-word}.mix-tracklist-row{margin:var(--space-sm) 0}.mix-tracklist-row .btn-sm{font-size:.85rem;padding:6px 12px}.mix-tracklist{margin:var(--space-sm) 0 var(--space-md);max-height:280px;overflow-y:auto;border-radius:var(--radius-md);border:1px solid rgba(0,245,255,.15);background:#00f5ff0a}.mix-tracklist.hidden{display:none}.mix-tracklist-head{margin:0;padding:10px 14px;font-size:.8rem;font-weight:600;letter-spacing:.02em;text-transform:uppercase;color:var(--color-text-neon-muted);border-bottom:1px solid rgba(0,245,255,.12);position:sticky;top:0;background:#0a0c18eb}.mix-tracklist-empty{margin:0;padding:14px;font-size:.9rem;color:var(--color-text-neon-muted)}.mix-track-list{list-style:none;margin:0;padding:4px 0;counter-reset:mix-track}.mix-track{display:flex;align-items:baseline;gap:8px;padding:6px 14px;font-size:.88rem;color:var(--color-text-white)}.mix-track:before{counter-increment:mix-track;content:counter(mix-track);flex-shrink:0;min-width:1.8em;text-align:right;font-variant-numeric:tabular-nums;color:var(--color-text-neon-muted);opacity:.7}.mix-track-title{font-weight:500}.mix-track-artist{color:var(--color-text-neon-muted)}.mix-track-artist:before{content:"\2014 "}.mix-track-year{margin-left:auto;flex-shrink:0;color:var(--color-text-neon-muted);font-variant-numeric:tabular-nums;opacity:.7}.beatify-toast-container{position:fixed;top:var(--space-md);left:50%;transform:translate(-50%);z-index:var(--z-toast);display:flex;flex-direction:column;align-items:center;gap:var(--space-sm);width:min(92vw,440px);pointer-events:none}.beatify-toast{pointer-events:auto;width:100%;display:flex;align-items:flex-start;gap:var(--space-sm);position:relative;overflow:hidden;padding:var(--space-sm) var(--space-md);border-radius:var(--radius-lg);background:#141422f5;border:1px solid var(--color-error-neon);box-shadow:0 0 20px #ff004073,0 8px 32px #00000073;color:var(--color-text-white);font-family:var(--font-body);font-size:var(--font-size-base);font-weight:var(--font-weight-medium);opacity:0;transform:translateY(-12px);transition:opacity var(--transition-normal),transform var(--transition-normal)}.beatify-toast--in{opacity:1;transform:translateY(0)}.beatify-toast--leaving{opacity:0;transform:translateY(-12px)}.beatify-toast--info{border-color:var(--color-accent-secondary);box-shadow:0 0 20px #00f5ff66,0 8px 32px #00000073}.beatify-toast--success{border-color:var(--color-success-neon);box-shadow:0 0 20px #39ff1466,0 8px 32px #00000073}.beatify-toast-body{display:flex;align-items:flex-start;gap:var(--space-sm);flex:1 1 auto;min-width:0}.beatify-toast-icon{font-size:var(--font-size-lg);line-height:1.3;flex-shrink:0}.beatify-toast-text{line-height:1.35;word-break:break-word}.beatify-toast-close{flex-shrink:0;background:none;border:none;color:var(--color-text-neon-muted);font-size:var(--font-size-xl);line-height:1;cursor:pointer;padding:0 var(--space-xs);transition:color var(--transition-fast)}.beatify-toast-close:hover{color:var(--color-text-white)}.beatify-toast-progress{position:absolute;left:0;bottom:0;height:3px;width:100%;transform-origin:left center;background:var(--color-error-neon);box-shadow:0 0 8px var(--color-error-neon);animation:beatify-toast-drain linear forwards}.beatify-toast--info .beatify-toast-progress{background:var(--color-accent-secondary);box-shadow:0 0 8px var(--color-accent-secondary)}.beatify-toast--success .beatify-toast-progress{background:var(--color-success-neon);box-shadow:0 0 8px var(--color-success-neon)}@keyframes beatify-toast-drain{0%{transform:scaleX(1)}to{transform:scaleX(0)}}.beatify-banner{display:flex;align-items:flex-start;gap:var(--space-sm);margin-bottom:var(--space-md);padding:var(--space-sm) var(--space-md);border-radius:var(--radius-lg);background:#ff004014;border:1px solid var(--color-error-neon);box-shadow:inset 0 0 16px #ff00401f;color:var(--color-text-white);font-family:var(--font-body);font-size:var(--font-size-base);text-align:left}.beatify-banner--warning{background:#f59e0b1a;border-color:var(--color-warning);box-shadow:inset 0 0 16px #f59e0b1f}.beatify-banner--info{background:#00f5ff14;border-color:var(--color-accent-secondary);box-shadow:inset 0 0 16px #00f5ff1f}.beatify-banner-icon{font-size:var(--font-size-lg);line-height:1.2;flex-shrink:0}.beatify-banner-content{flex:1 1 auto;min-width:0}.beatify-banner-title{font-family:var(--font-display);font-weight:var(--font-weight-bold);margin-bottom:2px;color:var(--color-error-neon)}.beatify-banner--warning .beatify-banner-title{color:var(--color-warning)}.beatify-banner--info .beatify-banner-title{color:var(--color-accent-secondary)}.beatify-banner-text{line-height:1.4;color:var(--color-text-neon-muted);word-break:break-word}.beatify-banner-detail{margin-top:var(--space-xs);font-size:var(--font-size-sm);line-height:1.35;color:var(--color-text-light);word-break:break-word}.beatify-banner-action{margin-top:var(--space-xs);background:none;border:1px solid currentColor;border-radius:var(--radius-sm);color:var(--color-error-neon);font-family:var(--font-body);font-size:var(--font-size-sm);line-height:1.2;padding:6px var(--space-sm);cursor:pointer;transition:background var(--transition-fast),color var(--transition-fast)}.beatify-banner-action:hover{background:var(--color-error-neon);color:var(--color-bg-primary)}.beatify-banner--warning .beatify-banner-action{color:var(--color-warning)}.beatify-banner--warning .beatify-banner-action:hover{background:var(--color-warning)}.beatify-banner--info .beatify-banner-action{color:var(--color-accent-secondary)}.beatify-banner--info .beatify-banner-action:hover{background:var(--color-accent-secondary)}.beatify-banner-close{flex-shrink:0;background:none;border:none;color:var(--color-text-neon-muted);font-size:var(--font-size-xl);line-height:1;cursor:pointer;padding:0 var(--space-xs);transition:color var(--transition-fast)}.beatify-banner-close:hover{color:var(--color-text-white)}@media(prefers-reduced-motion:reduce){.beatify-toast{transition:none;opacity:1;transform:none}.beatify-toast-progress{animation:none}}.steal-target-row{display:flex;align-items:center;gap:var(--space-sm);text-align:left}.steal-target-rank{flex-shrink:0;width:24px;height:24px;display:inline-flex;align-items:center;justify-content:center;border-radius:var(--radius-full);background:var(--color-dark-surface);border:1px solid var(--color-border-neon);font-family:var(--font-display);font-weight:var(--font-weight-bold);font-size:var(--font-size-sm);color:var(--color-text-neon-muted)}.steal-target-name{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:var(--font-weight-semibold)}.steal-target-score{flex-shrink:0;font-family:var(--font-display);font-weight:var(--font-weight-bold);font-variant-numeric:tabular-nums;color:var(--color-accent-secondary);text-shadow:0 0 8px rgba(0,245,255,.5)}.steal-target-crown{flex-shrink:0;font-size:var(--font-size-md);line-height:1}.steal-target-row--leader{border-color:var(--color-warning);box-shadow:0 0 14px #f59e0b59,inset 0 0 10px #f59e0b1f}.steal-target-row--leader .steal-target-rank{border-color:var(--color-warning);color:var(--color-warning);box-shadow:0 0 8px #f59e0b66}.steal-target-row--leader .steal-target-score{color:var(--color-warning);text-shadow:0 0 8px rgba(245,158,11,.5)}.dotaxis-legend-acc{display:inline-flex;align-items:center;gap:3px;margin-left:4px;padding:1px 6px;border-radius:var(--radius-full);font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);border:1px solid currentColor;white-space:nowrap}.dotaxis-legend-acc-glyph{font-size:.95em;line-height:1}.dotaxis-legend-acc--exact{color:var(--color-accent-secondary)}.dotaxis-legend-acc--near{color:var(--color-warning)}.dotaxis-legend-acc--off{color:var(--color-text-neon-muted)}.player-tile-away{display:inline-flex;align-items:center;gap:3px}.player-tile-away-glyph{font-size:.9em;line-height:1}.timer-neon{position:relative}.timer-neon-ring{position:absolute;inset:3px;width:calc(100% - 6px);height:calc(100% - 6px);transform:rotate(-90deg);pointer-events:none}.timer-neon-ring-bg{fill:none;stroke:#ffffff1f;stroke-width:4}.timer-neon-ring-fg{fill:none;stroke:var(--color-accent-secondary);stroke-width:4;stroke-linecap:round;filter:drop-shadow(0 0 6px rgba(0,245,255,.6));transition:stroke-dashoffset 1s linear,stroke var(--transition-normal)}.timer-neon--warn .timer-neon-ring-fg,.timer-neon-ring--warn .timer-neon-ring-fg{stroke:var(--color-warning);filter:drop-shadow(0 0 6px rgba(245,158,11,.7))}.timer-neon-ring--critical .timer-neon-ring-fg{stroke:var(--color-error-neon);filter:drop-shadow(0 0 7px rgba(255,0,64,.8))}@media(prefers-reduced-motion:reduce){.timer-neon-ring-fg{transition:none}.arc-chip--elim{color:var(--color-error-neon);background:#ff00401f;border:1px solid rgba(255,0,64,.5);text-transform:uppercase}.sd-live-toggle{display:inline-flex;align-items:center;gap:7px;padding:5px 10px;border-radius:var(--radius-md);background:var(--color-bg-surface);border:1px solid rgba(255,255,255,.12);font-family:var(--font-body);font-size:12px;font-weight:600;color:var(--color-text-white);cursor:pointer;transition:border-color var(--transition-fast),box-shadow var(--transition-fast)}.sd-live-toggle:disabled{opacity:.4;cursor:not-allowed}.sd-live-toggle.is-on{border-color:var(--color-accent-primary);background:#ff2d6a14;box-shadow:var(--glow-primary)}.sd-live-toggle__switch{position:relative;width:30px;height:17px;border-radius:var(--radius-full);background:#ffffff26;flex:none}.sd-live-toggle.is-on .sd-live-toggle__switch{background:var(--color-accent-primary)}.sd-live-toggle__switch:after{content:"";position:absolute;width:13px;height:13px;border-radius:50%;background:#fff;top:2px;left:2px;transition:left var(--transition-fast)}.sd-live-toggle.is-on .sd-live-toggle__switch:after{left:15px}.eliminated-view{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:var(--space-sm);min-height:60vh;padding:var(--space-xl) var(--space-md)}.eliminated-orb{width:120px;height:120px;border-radius:var(--radius-full);overflow:hidden;filter:grayscale(1) brightness(.5);display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#2a2540,#16131f);margin-bottom:var(--space-md);position:relative}.eliminated-orb img{width:100%;height:100%;object-fit:cover}.eliminated-skull{font-size:46px;position:absolute}.eliminated-title{font-family:var(--font-display);font-weight:900;font-size:var(--font-size-4xl);color:var(--color-text-white);letter-spacing:-.02em}.eliminated-sub{color:var(--color-text-neon-muted);font-size:var(--font-size-base)}.eliminated-hint{color:var(--color-text-dim);font-size:var(--font-size-sm);margin-top:var(--space-md)}.cut-line{position:relative;height:0;border-top:2px solid var(--color-accent-primary);box-shadow:0 0 12px #ff2d6ab3;margin:var(--space-md) 0}.cut-line__label{position:absolute;top:-9px;left:50%;transform:translate(-50%);background:var(--color-bg-primary);padding:0 10px;font-family:var(--font-body);font-size:9px;font-weight:700;letter-spacing:.15em;color:var(--color-accent-primary)}.player-indicator.is-eliminated,.leaderboard-entry.is-eliminated{opacity:.45}.player-out-badge{font-size:10px;font-weight:700;color:var(--color-text-dim);letter-spacing:.04em}.sd-out-overlay{position:fixed;inset:0;z-index:900;display:none;flex-direction:column;align-items:center;justify-content:center;background:#06060cf5}.sd-out-overlay.show{display:flex;animation:sd-out-in var(--transition-slow) ease-out}.sd-out__word{font-family:var(--font-display);font-weight:900;font-size:clamp(120px,26vw,360px);line-height:.85;color:var(--color-error-neon);text-shadow:0 0 40px rgba(255,0,64,.7)}.sd-out__name{display:flex;align-items:center;gap:14px;margin-top:var(--space-md);font-family:var(--font-display);font-weight:900;font-size:var(--font-size-4xl);color:var(--color-text-white)}.sd-out__skull{font-size:40px}@keyframes sd-out-in{0%{opacity:0;transform:scale(.85)}to{opacity:1;transform:scale(1)}}.sd-final-banner{display:inline-flex;align-items:center;gap:8px;padding:8px 18px;border-radius:var(--radius-full);font-family:var(--font-display);font-weight:900;letter-spacing:.06em;color:var(--color-accent-primary);background:#ff2d6a1f;border:1px solid rgba(255,45,106,.5);box-shadow:0 0 16px #ff2d6a4d}.superlative-card--last_one_standing{box-shadow:0 0 18px #ff2d6a4d;border-color:#ff2d6a66}.sd-last-standing{display:flex;flex-direction:column;align-items:center;gap:var(--space-sm);text-align:center;margin-bottom:var(--space-lg)}.sd-last-standing__trophy{font-size:40px}.sd-last-standing__headline{font-family:var(--font-display);font-weight:900;font-size:var(--font-size-hero);letter-spacing:-.02em;background:linear-gradient(90deg,var(--color-accent-primary),var(--color-accent-secondary));-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;text-shadow:0 0 40px rgba(255,45,106,.5)}.sd-last-standing__winner{font-family:var(--font-body);font-weight:700;font-size:var(--font-size-xl);color:var(--color-text-white)}.sd-last-standing__sub{font-family:var(--font-body);font-weight:500;font-size:var(--font-size-sm);color:var(--color-text-neon-muted)}.sd-out-overlay.show{animation:none}} +:root{--color-bg-primary: #0a0a12;--color-bg-surface: rgba(255, 255, 255, .05);--color-bg-light: #f5f5f5;--color-bg-white: #ffffff;--color-bg-card: #f9fafb;--color-bg-card-alt: #f3f4f6;--color-accent-primary: #ff2d6a;--color-accent-secondary: #00f5ff;--color-accent-brand: #6366f1;--color-accent-brand-hover: #4f46e5;--color-accent-blue: #3b82f6;--color-accent-blue-hover: #2563eb;--color-success: #10b981;--color-success-hover: #059669;--color-success-light: #d1fae5;--color-success-alt: #22c55e;--color-success-neon: #39ff14;--color-warning: #f59e0b;--color-warning-dark: #d97706;--color-warning-light: #fef3c7;--color-warning-alt: #ff6600;--color-error: #ef4444;--color-error-dark: #dc2626;--color-error-light: #fee2e2;--color-error-neon: #ff0040;--color-purple-primary: #8b5cf6;--color-purple-secondary: #7c3aed;--color-neon-purple: #9d4edd;--color-success-bg: rgba(16, 185, 129, .15);--color-accent-brand-bg: rgba(99, 102, 241, .15);--color-error-bg: rgba(239, 68, 68, .15);--color-text-primary: #1f2937;--color-text-secondary: #374151;--color-text-muted: #6b7280;--color-text-light: #9ca3af;--color-text-white: #ffffff;--color-text-dark: #1a1a1a;--color-text-heading: #444444;--color-text-neon-muted: #b3b3c2;--color-border-light: #e5e7eb;--color-border-medium: #d1d5db;--color-border-dark: #333333;--color-border-neon: rgba(255, 255, 255, .1);--color-dark-surface: rgba(255, 255, 255, .05);--color-dark-surface-hover: rgba(255, 255, 255, .08);--color-dark-card: rgba(255, 255, 255, .03);--color-surface-dark: #1a1a2e;--space-xs: 4px;--space-sm: 8px;--space-md: 16px;--space-lg: 24px;--space-xl: 32px;--space-2xl: 48px;--font-display: "Outfit", system-ui, sans-serif;--font-body: "Inter", system-ui, sans-serif;--font-system: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, sans-serif;--font-mono: monospace;--font-size-xs: 10px;--font-size-sm: 12px;--font-size-base: 14px;--font-size-md: 16px;--font-size-lg: 18px;--font-size-xl: 20px;--font-size-2xl: 24px;--font-size-3xl: 28px;--font-size-4xl: 32px;--font-size-year: 56px;--font-size-timer: 64px;--font-size-hero: 72px;--font-weight-normal: 400;--font-weight-medium: 500;--font-weight-semibold: 600;--font-weight-bold: 700;--font-weight-extrabold: 800;--glow-primary: 0 0 20px var(--color-accent-primary);--glow-secondary: 0 0 20px var(--color-accent-secondary);--glow-success: 0 0 20px var(--color-success-neon);--glow-warning: 0 0 20px var(--color-warning);--glow-error: 0 0 20px var(--color-error);--shadow-sm: 0 2px 4px rgba(0, 0, 0, .1);--shadow-md: 0 2px 8px rgba(0, 0, 0, .1);--shadow-lg: 0 4px 16px rgba(0, 0, 0, .1);--shadow-xl: 0 8px 32px rgba(0, 0, 0, .15);--radius-sm: 4px;--radius-md: 8px;--radius-lg: 12px;--radius-xl: 16px;--radius-2xl: 20px;--radius-full: 9999px;--transition-fast: .15s ease;--transition-normal: .3s ease;--transition-slow: .5s ease;--z-control-bar: 100;--z-reaction-bar: 101;--z-modal: 1000;--z-overlay: 1100;--z-toast: 1200}*{box-sizing:border-box;margin:0;padding:0}body{font-family:var(--font-system);background:var(--color-bg-light);color:var(--color-text-secondary);line-height:1.5;padding:var(--space-sm);min-height:100vh;overscroll-behavior:none}.wordmark{font-family:"Outfit",var(--font-system);font-weight:900;font-size:var(--font-size-hero);letter-spacing:-.02em;line-height:1}.wordmark-beat{color:var(--color-text-white)}body:not(.theme-dark) .wordmark-beat{color:var(--color-text-primary)}.wordmark-gradient{background:linear-gradient(90deg,var(--color-accent-primary),var(--color-accent-secondary));-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;color:transparent}.wordmark-hero{text-shadow:0 0 40px rgba(255,45,106,.5)}.logo-loading{animation:logo-pulse 2s ease-in-out infinite}@keyframes logo-pulse{0%,to{opacity:1}50%{opacity:.7}}@media(prefers-reduced-motion:reduce){.logo-loading{animation:none}}.vinyl-starting{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;padding:24px;box-sizing:border-box}.vinyl-row{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:clamp(20px,5vw,56px);max-width:100%}.vinyl-loader{flex:0 0 auto;width:clamp(130px,28vw,260px);height:clamp(130px,28vw,260px);display:flex;align-items:center;justify-content:center;border-radius:50%;background:radial-gradient(circle at center,rgba(255,45,106,.18) 0%,rgba(99,102,241,.1) 45%,transparent 70%)}.vinyl-disc{position:relative;width:78%;height:78%;border-radius:50%;background:conic-gradient(from 0deg,var(--color-accent-primary),var(--color-accent-brand),var(--color-accent-secondary),var(--color-accent-brand),var(--color-accent-primary));box-shadow:0 0 40px #ff2d6a59,0 0 80px #00f5ff2e,inset 0 0 30px #00000073;animation:vinyl-spin 3s linear infinite}.vinyl-ring{position:absolute;top:18%;left:18%;width:64%;height:64%;border-radius:50%;border:1.5px dashed rgba(255,255,255,.25)}.vinyl-hole{position:absolute;top:50%;left:50%;width:14%;height:14%;border-radius:50%;background:var(--color-bg-primary);transform:translate(-50%,-50%);box-shadow:0 0 0 4px #0006}.vinyl-copy{flex:1 1 280px;min-width:0;width:min(100%,460px);max-width:460px;text-align:left}.vinyl-copy .vinyl-headline,.vinyl-copy .vinyl-sub,.vinyl-copy .wordmark-hero{overflow-wrap:break-word}.vinyl-copy .wordmark-hero{font-size:clamp(2rem,5vw,3.25rem);margin:0 0 .5em}.vinyl-headline{font-size:clamp(1.5rem,4vw,2.5rem);font-weight:800;color:var(--color-text-white);margin:0 0 .4em}.vinyl-sub{font-size:clamp(.95rem,2.2vw,1.2rem);line-height:1.5;color:var(--color-text-muted);margin:0 0 1.2em}.vinyl-dots{display:flex;gap:12px}.vinyl-dots span{width:12px;height:12px;border-radius:50%;background:var(--color-accent-primary);opacity:.3;animation:vinyl-dot-pulse 1.4s ease-in-out infinite}.vinyl-dots span:nth-child(2){animation-delay:.2s}.vinyl-dots span:nth-child(3){animation-delay:.4s}@keyframes vinyl-spin{to{transform:rotate(360deg)}}@keyframes vinyl-dot-pulse{0%,to{opacity:.3;transform:scale(1)}40%{opacity:1;transform:scale(1.25)}}@media(max-width:640px){.vinyl-copy{text-align:center}.vinyl-dots{justify-content:center}}@media(prefers-reduced-motion:reduce){.vinyl-disc{animation:none}.vinyl-dots span{animation:none;opacity:.7}}header{margin-bottom:var(--space-lg)}header h1{font-size:var(--font-size-2xl);font-weight:var(--font-weight-semibold);color:var(--color-text-dark)}.admin-header{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md, 16px)}.admin-header h1{margin:0}.player-header{display:flex;align-items:center;justify-content:center;padding:var(--space-md) var(--space-md) 0}.player-header h1{margin:0}body.theme-dark main.admin-content{max-width:800px;margin:0 auto;padding:var(--space-md, 16px)}.analytics-icon-link{display:flex;align-items:center;justify-content:center;width:44px;height:44px;border-radius:50%;text-decoration:none;font-size:1.5rem;transition:background-color .2s ease,transform .2s ease}body.theme-dark .analytics-icon-link{background:#00f5ff1a}body.theme-dark .analytics-icon-link:hover,body.theme-dark .analytics-icon-link:focus{background:#00f5ff33;transform:scale(1.1);outline:none}.admin-header-actions{display:flex;align-items:center;gap:var(--space-xs, 8px)}.pwa-install-btn{display:flex;align-items:center;justify-content:center;width:44px;height:44px;border-radius:50%;border:none;background:#00f5ff1a;font-size:1.5rem;cursor:pointer;transition:background-color .2s ease,transform .2s ease;padding:0}.pwa-install-btn:hover,.pwa-install-btn:focus{background:#00f5ff33;transform:scale(1.1);outline:none}.reset-icon-btn{display:flex;align-items:center;justify-content:center;width:44px;height:44px;border-radius:50%;border:none;background:#ff2d6a1a;color:var(--color-text-white);font-size:1.5rem;cursor:pointer;padding:0;transition:background-color .2s ease,transform .2s ease}.reset-icon-btn:hover,.reset-icon-btn:focus{background:#ff2d6a40;transform:scale(1.1);outline:none}.pwa-ios-hint{position:fixed;bottom:0;left:0;right:0;z-index:1000;display:flex;justify-content:center;padding:var(--space-md, 16px);animation:slideUp .3s ease}.pwa-ios-hint.hidden{display:none}.pwa-ios-hint-content{position:relative;background:var(--color-bg-elevated, #2a2a3e);border-radius:var(--radius-lg, 12px);padding:var(--space-md, 16px) var(--space-lg, 24px);color:var(--color-text, #fff);text-align:center;max-width:340px;box-shadow:0 -2px 20px #0000004d}.pwa-ios-hint-close{position:absolute;top:8px;right:12px;background:none;border:none;color:var(--color-text, #fff);font-size:1.4rem;cursor:pointer;opacity:.6}.pwa-ios-hint-close:hover{opacity:1}.pwa-ios-share-icon{font-size:1.2rem}@keyframes slideUp{0%{transform:translateY(100%);opacity:0}to{transform:translateY(0);opacity:1}}.status-section,.card-section{background:var(--color-bg-white);border-radius:var(--radius-lg);padding:var(--space-sm) var(--space-md);margin-bottom:var(--space-md);box-shadow:var(--shadow-sm);border:1px solid transparent;transition:transform .2s ease,box-shadow .2s ease,border-color .2s ease}.card-section:hover{transform:translateY(-2px);box-shadow:0 4px 12px #00000026}.card-section .section-header{display:flex;align-items:center;gap:var(--space-sm, 8px);margin-bottom:var(--space-sm);font-size:var(--font-size-md);font-weight:var(--font-weight-semibold);color:var(--color-text-heading)}.card-section .section-icon{font-size:1.25rem}.status-section h2,.card-section h2:not(.section-header){font-size:var(--font-size-md);font-weight:var(--font-weight-semibold);margin-bottom:var(--space-sm);color:var(--color-text-heading)}.status-connected{color:var(--color-success-alt);font-weight:var(--font-weight-medium)}.status-error{color:var(--color-error);font-weight:var(--font-weight-medium)}.status-warning{color:var(--color-warning);font-weight:var(--font-weight-medium)}.list-item{padding:var(--space-sm);border-bottom:1px solid var(--color-border-light);display:flex;justify-content:space-between;align-items:center;gap:var(--space-sm);transition:background-color .2s ease}.list-item:last-child{border-bottom:none}body.theme-dark .list-item{border-bottom-color:var(--surface-border, #333)}body.theme-dark .list-item:hover{background:#9d4edd1a}.list-item .name{font-weight:var(--font-weight-medium);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.list-item .meta{color:var(--color-text-muted);font-size:var(--font-size-base);flex-shrink:0}.list-item.is-invalid{background:var(--color-error-light);border-left:3px solid var(--color-error)}.playlist-item.is-disabled{opacity:.5;cursor:not-allowed}.playlist-item.is-disabled .checkbox-label,.playlist-item.is-disabled .playlist-checkbox{cursor:not-allowed}.playlist-item.is-selectable{cursor:pointer}.playlist-item.is-selected,.media-player-item.is-selected{background:#eff6ff;border-left:3px solid var(--color-accent-blue)}body.theme-dark .playlist-item.is-selected,body.theme-dark .media-player-item.is-selected{background:#00f5ff1a;border-left:3px solid var(--color-accent-secondary)}.seasonal-suggestion{position:relative;margin-bottom:12px;padding:14px 16px;border-radius:14px;background:linear-gradient(135deg,#ff2d6a24,#6366f124),#12121c;border:1px solid rgba(255,45,106,.45);box-shadow:0 0 0 1px #00f5ff14,0 6px 18px #00000059}.seasonal-suggestion__badge{display:inline-block;font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--color-accent-secondary, #00f5ff);background:#00f5ff1a;border:1px solid rgba(0,245,255,.3);border-radius:999px;padding:3px 10px;margin-bottom:10px}.seasonal-suggestion__title{font-size:16px;font-weight:700;color:#fff;margin-bottom:4px}.seasonal-suggestion__reason{font-size:13px;line-height:1.4;color:#ffffffb8;margin-bottom:12px}.seasonal-suggestion__add{display:inline-block}.seasonal-suggestion__dismiss{position:absolute;top:8px;right:10px;width:28px;height:28px;line-height:1;font-size:20px;color:#fff9;background:transparent;border:none;border-radius:8px;cursor:pointer}.seasonal-suggestion__dismiss:after{content:"";position:absolute;top:50%;left:50%;width:44px;height:44px;transform:translate(-50%,-50%)}.seasonal-suggestion__dismiss:hover{color:#fff;background:#ffffff14}body:not(.theme-dark) .seasonal-suggestion{background:linear-gradient(135deg,#ff2d6a14,#6366f114),#fff;border:1px solid rgba(255,45,106,.35);box-shadow:0 4px 14px #00000014}body:not(.theme-dark) .seasonal-suggestion__title{color:#111}body:not(.theme-dark) .seasonal-suggestion__reason{color:#555}body:not(.theme-dark) .seasonal-suggestion__dismiss{color:#888}.playlist-checkbox{position:absolute;opacity:0;width:0;height:0;pointer-events:none}.checkbox-label{display:flex;align-items:center;flex:1;min-width:0;cursor:pointer;padding-left:var(--space-xs)}.playlist-name{font-weight:var(--font-weight-medium);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.selection-summary{padding:var(--space-sm) var(--space-md);background:#f0fdf4;border-radius:var(--radius-md);margin-top:var(--space-sm);font-weight:var(--font-weight-medium);color:#166534}.selection-summary #selected-count,.selection-summary #total-songs{font-family:Outfit,sans-serif;font-weight:700}body.theme-dark .selection-summary{background:#00f5ff1a;border:1px solid var(--color-accent-secondary);color:var(--color-text-white)}body.theme-dark .selection-summary #selected-count,body.theme-dark .selection-summary #total-songs{color:var(--color-accent-secondary);font-size:1.1em}.media-player-item.is-selectable{cursor:pointer}.media-player-radio{position:absolute;opacity:0;width:0;height:0;pointer-events:none}.radio-label{display:flex;align-items:center;flex:1;min-width:0;cursor:pointer;padding-left:var(--space-xs)}.player-name{font-weight:var(--font-weight-medium);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.state-dot{display:inline-block;width:var(--space-sm);height:var(--space-sm);border-radius:50%;margin-right:6px}.state-dot.state-playing{background:var(--color-success-alt)}.state-dot.state-idle,.state-dot.state-paused,.state-dot.state-off{background:var(--color-text-light)}button,.btn{min-width:44px;min-height:44px;padding:var(--space-sm) var(--space-lg);font-size:var(--font-size-md);font-weight:var(--font-weight-medium);border:none;border-radius:var(--radius-md);cursor:pointer;transition:background-color var(--transition-fast),opacity var(--transition-fast);display:inline-flex;align-items:center;justify-content:center;gap:var(--space-sm);touch-action:manipulation}.form-input{width:100%;padding:var(--space-sm) var(--space-md);font-size:var(--font-size-sm);border:1px solid var(--color-border-subtle);border-radius:var(--radius-md);background:var(--color-bg-secondary);color:var(--color-text-primary);margin-bottom:var(--space-sm);box-sizing:border-box}body.theme-dark .form-input{color:#e2e8f0;background:#ffffff1a;border-color:#ffffff26}.btn-primary{background:var(--color-accent-primary);color:#fff}.btn-primary:hover{background:#e0245c}.btn-primary:disabled{background:var(--color-text-light);cursor:not-allowed;opacity:.55}body.theme-dark .btn-primary{color:#fff}.btn-secondary{background:var(--color-border-light);color:var(--color-text-secondary)}.btn-secondary:hover{background:var(--color-border-medium)}.btn-ghost{background:transparent;color:var(--color-accent-primary);border:1.5px solid var(--color-accent-primary)}.btn-ghost:hover{background:#ff2d6a14}.btn-ghost:disabled{opacity:.45;cursor:not-allowed}.btn-outline{background:transparent;color:var(--color-text-secondary);border:1.5px solid var(--color-border-medium)}.btn-outline:hover{background:var(--color-border-light);border-color:var(--color-text-secondary)}.btn-outline:disabled{opacity:.45;cursor:not-allowed}.btn-danger{background:#dc2626;color:#fff}.btn-danger:hover{background:#b91c1c}a{color:var(--color-accent-blue);text-decoration:none}a:hover{text-decoration:underline}.empty-state{text-align:center;padding:var(--space-lg);color:var(--color-text-muted)}.empty-state p{margin-bottom:var(--space-sm)}footer{margin-top:var(--space-lg);text-align:center;color:var(--color-text-light);font-size:var(--font-size-sm)}.hidden{display:none!important}body.theme-dark{background:var(--color-bg-primary);color:var(--color-text-white)}body.theme-dark .player-container{background:var(--color-bg-primary)}body.theme-dark .card-section{background:var(--color-surface-dark);border:1px solid var(--color-border-neon);color:var(--color-text-white)}.admin-content .card-section{margin-bottom:var(--space-md)}body.theme-dark .card-section:hover{box-shadow:0 4px 20px #9d4edd4d}body.theme-dark .card-section h2,body.theme-dark .card-section .section-header,body.theme-dark .card-section p,body.theme-dark .card-section .name,body.theme-dark .card-section .player-name,body.theme-dark .card-section .playlist-name,body.theme-dark .card-section .list-item,body.theme-dark .card-section .radio-label,body.theme-dark .card-section .checkbox-label,body.theme-dark .card-section strong,body.theme-dark .card-section span{color:var(--color-text-white)}body.theme-dark .card-section .meta{color:var(--color-text-neon-muted)}body.theme-dark .game-info{background:#ffffff0d;border:1px solid var(--color-neon-purple);border-radius:var(--radius-md);color:var(--color-text-white)}body.theme-dark .game-info p,body.theme-dark .game-info strong,body.theme-dark .game-info span{color:var(--color-text-white)}body.theme-dark .btn-primary span,body.theme-dark .btn-secondary span{color:inherit}body.theme-dark .lang-btn:not(.lang-btn--active),body.theme-dark .timer-btn:not(.timer-btn--active),body.theme-dark .difficulty-btn:not(.difficulty-btn--active){color:var(--color-text-primary, #1a1a2e)}body.theme-dark .lang-btn:not(.lang-btn--active) span,body.theme-dark .timer-btn:not(.timer-btn--active) span,body.theme-dark .difficulty-btn:not(.difficulty-btn--active) span{color:var(--color-text-primary, #1a1a2e)}.language-selector{display:flex;justify-content:center;gap:var(--space-sm)}.lang-btn{display:flex;align-items:center;justify-content:center;gap:var(--space-xs);padding:var(--space-sm) var(--space-lg);border:2px solid var(--color-border-medium);border-radius:var(--radius-md);background:var(--color-bg-white);color:var(--color-text-primary);font-size:var(--font-size-base);font-weight:500;cursor:pointer;transition:all .15s ease}.lang-btn:hover{border-color:var(--color-accent-brand);background:var(--color-bg-card-alt)}.lang-btn--active{border-color:var(--color-accent-brand);background:var(--color-accent-brand);color:var(--color-text-white)}.lang-btn--active:hover{background:var(--color-accent-brand-hover)}.lang-flag{font-size:1.25em}.lang-name{font-weight:600}.timer-selector{display:flex;justify-content:center;gap:var(--space-sm)}.timer-btn{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-2xs);padding:var(--space-sm) var(--space-md);min-width:90px;border:2px solid var(--color-border-neon);border-radius:var(--radius-md);background:var(--color-bg-card);color:var(--color-text-secondary);font-family:inherit;cursor:pointer;transition:all .15s ease}.timer-btn:hover{border-color:var(--color-accent-brand);background:var(--color-bg-card-alt)}.timer-btn:focus{outline:none;border-color:var(--color-accent-brand);box-shadow:0 0 0 3px #1ed7604d}.timer-btn:focus-visible{outline:2px solid var(--color-accent-brand);outline-offset:2px}.timer-btn:disabled{opacity:.5;cursor:not-allowed;border-color:var(--color-border-neon);background:var(--color-bg-card)}.timer-btn:disabled:hover{border-color:var(--color-border-neon);background:var(--color-bg-card)}.timer-btn--active{border-color:var(--color-accent-brand);background:var(--color-accent-brand);color:var(--color-text-white)}.timer-btn--active:hover{background:var(--color-accent-brand-hover)}.timer-icon{font-size:1.5em}.timer-label{font-weight:600;font-size:.875rem}.timer-value{font-size:.75rem;opacity:.8}.timer-btn--active .timer-value{opacity:1}.difficulty-selector{display:flex;justify-content:center;gap:var(--space-sm)}.difficulty-btn{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-2xs);padding:var(--space-sm) var(--space-md);min-width:90px;border:2px solid var(--color-border-light);border-radius:var(--radius-md);background:var(--color-bg-card);color:var(--color-text-secondary);font-family:inherit;cursor:pointer;transition:all .15s ease}.difficulty-btn:hover{border-color:var(--color-accent-brand);background:var(--color-bg-card-alt)}.difficulty-btn:focus{outline:none;border-color:var(--color-accent-brand);box-shadow:0 0 0 3px #6366f14d}.difficulty-btn:focus-visible{outline:2px solid var(--color-accent-brand);outline-offset:2px}.difficulty-btn--active{border-color:var(--color-accent-brand);background:var(--color-accent-brand);color:var(--color-text-white)}.difficulty-btn--active:hover{background:var(--color-accent-brand-hover)}.difficulty-icon{font-size:1.5em}.difficulty-label{font-weight:600;font-size:.875rem}.difficulty-description{text-align:center;font-size:.8125rem;color:var(--color-text-muted);margin-top:var(--space-sm);line-height:1.5;max-width:400px;margin-left:auto;margin-right:auto}.toggle-option{display:flex;align-items:center;gap:var(--space-md);cursor:pointer;padding:var(--space-sm) 0}.toggle-option input[type=checkbox]{position:absolute;opacity:0;width:0;height:0}.toggle-switch{position:relative;width:48px;height:26px;background:var(--color-border);border-radius:13px;transition:background .2s ease;flex-shrink:0}.toggle-switch:after{content:"";position:absolute;top:3px;left:3px;width:20px;height:20px;background:#fff;border-radius:50%;transition:transform .2s ease}.toggle-option input:checked+.toggle-switch{background:var(--color-success)}.toggle-option input:checked+.toggle-switch:after{transform:translate(22px)}.toggle-option input:focus-visible+.toggle-switch{outline:2px solid var(--color-accent-primary);outline-offset:2px}.toggle-label{font-size:var(--font-size-md);font-weight:500;color:var(--color-text)}.option-description{font-size:var(--font-size-sm);color:var(--color-text-muted);margin:var(--space-xs) 0 0 0;padding-left:calc(48px + var(--space-md))}body.theme-dark .toggle-switch{background:var(--color-dark-border, #333)}.provider-selector{display:flex;justify-content:center;gap:var(--space-sm)}.provider-btn{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-2xs);padding:var(--space-sm) var(--space-md);min-width:100px;border:2px solid var(--color-border-light);border-radius:var(--radius-md);background:var(--color-bg-card);color:var(--color-text-secondary);font-family:inherit;cursor:pointer;transition:all .15s ease}.provider-btn:hover:not(.provider-btn--disabled){border-color:var(--color-accent-brand);background:var(--color-bg-card-alt)}.provider-btn:focus{outline:none;border-color:var(--color-accent-brand);box-shadow:0 0 0 3px #6366f14d}.provider-btn:focus-visible{outline:2px solid var(--color-accent-brand);outline-offset:2px}.provider-btn--active{border-color:var(--color-accent-brand);background:var(--color-accent-brand);color:var(--color-text-white)}.provider-btn--active:hover{background:var(--color-accent-brand-hover)}.provider-icon{font-size:1.5em}.provider-label{font-weight:600;font-size:.875rem}.playlist-coverage{font-size:.75rem;color:var(--color-text-muted)}.playlist-coverage--warning{color:var(--color-warning)}.playlist-coverage--none{color:var(--color-error)}.playlist-filter-bar{display:flex;flex-direction:column;gap:.75rem;padding:.75rem 0;margin-bottom:.5rem;border-bottom:1px solid var(--color-border)}.filter-dropdowns{display:flex;flex-wrap:wrap;gap:.5rem}.filter-dropdown{padding:.5rem 2rem .5rem .75rem;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md, 6px);font-size:.875rem;font-weight:500;color:var(--color-text-primary, #333);cursor:pointer;transition:all .15s ease;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23666' d='M2 4l4 4 4-4'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right .75rem center;min-width:120px}.filter-dropdown:hover{border-color:var(--color-primary, #6c5ce7)}.filter-dropdown:focus{outline:none;border-color:var(--color-primary, #6c5ce7);box-shadow:0 0 0 2px #6c5ce733}.filter-dropdown:not([value=""]):has(option:checked:not([value=""])){border-color:var(--color-primary, #6c5ce7);background-color:#6c5ce714}.filter-summary{display:flex;align-items:center;gap:.75rem;font-size:.8125rem}.filter-summary-text{color:var(--color-text-secondary, #666)}.filter-clear{padding:.25rem .5rem;background:transparent;border:1px solid var(--color-border);border-radius:var(--radius-sm, 4px);font-size:.75rem;color:var(--color-text-secondary, #666);cursor:pointer;transition:all .15s ease}.filter-clear:hover{background:var(--color-error, #e74c3c);border-color:var(--color-error, #e74c3c);color:#fff}body.theme-dark .filter-dropdown{background-color:#ffffff14;border-color:#ffffff26;color:#ffffffd9;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23999' d='M2 4l4 4 4-4'/%3E%3C/svg%3E")}body.theme-dark .filter-dropdown:hover,body.theme-dark .filter-dropdown:focus{border-color:#6c5ce799}body.theme-dark .filter-summary-text{color:#fff9}body.theme-dark .filter-clear{border-color:#fff3;color:#fff9}.filter-tag{display:inline-flex;align-items:center;gap:.25rem;padding:.4375rem .875rem;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-full);font-size:.8125rem;font-weight:600;color:var(--color-text-primary, #333);cursor:pointer;transition:all .15s ease;white-space:nowrap}.filter-tag .filter-count{font-size:.6875rem;opacity:.8}.playlist-tags{display:flex;flex-wrap:wrap;gap:.25rem;margin-top:.375rem}.playlist-tag{display:inline-block;padding:.1875rem .5rem;background:var(--color-primary-light, #e8e4f8);border:1px solid var(--color-primary-border, #c9bff2);border-radius:var(--radius-full);font-size:.6875rem;font-weight:500;color:var(--color-primary-dark, #5b4cad);max-width:6rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.playlist-tag--more{background:transparent;border-color:var(--color-primary-border, #c9bff2);color:var(--color-text-secondary, #666);font-style:italic}body.theme-dark .playlist-tag{background:#6c5ce733;border-color:#6c5ce766;color:#b8acf6}body.theme-dark .playlist-tag--more{background:transparent;color:#ffffff80}.difficulty-badge{display:inline-block;padding:.125rem .5rem;border-radius:var(--radius-full);font-size:.75rem;font-weight:600;margin-left:var(--space-xs)}.difficulty-badge--easy{background:var(--color-success-bg);color:var(--color-success);border:1px solid var(--color-success)}.difficulty-badge--normal{background:var(--color-accent-brand-bg);color:var(--color-accent-brand);border:1px solid var(--color-accent-brand)}.difficulty-badge--hard{background:var(--color-error-bg);color:var(--color-error);border:1px solid var(--color-error)}.supported-players-hint{font-size:.75rem;color:var(--color-text-muted);margin-top:var(--space-sm);padding-top:var(--space-sm);border-top:1px solid var(--color-border-light)}.supported-players-hint a{color:var(--color-accent-primary);text-decoration:none}.supported-players-hint a:hover{text-decoration:underline}body.theme-dark .supported-players-hint{color:var(--color-text-neon-muted);border-top-color:var(--color-border-neon)}.player-info{display:flex;flex-direction:column;gap:2px}.platform-badge{display:inline-flex;align-items:center;gap:4px;font-size:.625rem;font-weight:600;padding:2px 6px;border-radius:var(--radius-sm);text-transform:uppercase;letter-spacing:.025em;background:#80808026;color:var(--color-text-muted)}.platform-badge--music_assistant{background:#4caf5026;color:#4caf50}.platform-badge--sonos{background:#ff980026;color:#ff9800}.platform-badge--alexa_media,.platform-badge--alexa{background:#00a8e126;color:#00a8e1}body.theme-dark .platform-badge{background:#ffffff14}body.theme-dark .platform-badge--music_assistant{background:#4caf5033;color:#81c784}body.theme-dark .platform-badge--sonos{background:#ff980033;color:#ffb74d}body.theme-dark .platform-badge--alexa_media,body.theme-dark .platform-badge--alexa{background:#00a8e133;color:#4fc3f7}.no-players-message{text-align:center;padding:var(--space-lg)}.no-players-message h3{font-size:1.125rem;margin-bottom:var(--space-sm)}.no-players-message p{font-size:.875rem;color:var(--color-text-muted);margin-bottom:var(--space-sm)}.no-players-message .button-group{display:flex;flex-direction:column;gap:var(--space-sm);margin-top:var(--space-md)}.provider-chips{justify-content:flex-start}.provider-chips .chip{display:inline-flex;align-items:center;gap:6px}.provider-icon{font-size:1rem}.warning-box{background:var(--color-warning-bg);border:1px solid var(--color-warning);border-radius:var(--radius-sm);padding:var(--space-sm);margin-top:var(--space-sm);font-size:.875rem}.warning-box p{margin:0 0 var(--space-xs) 0}.warning-box p:last-child{margin-bottom:0}.warning-caveat{font-size:.8125rem;opacity:.85}#provider-hint{font-size:.8125rem;color:var(--color-text-muted);margin-top:var(--space-sm)}body.theme-dark #provider-hint{color:var(--color-text-neon-muted)}.chip--disabled,.provider-btn--disabled{opacity:.4;cursor:not-allowed;pointer-events:none}.hint-text{font-size:.75rem;color:var(--color-text-muted);margin:var(--space-xs) 0 0 calc(var(--space-md) + 24px);font-style:italic}body.theme-dark .hint-text{color:var(--color-text-neon-muted)}body.theme-dark .modal-content,body.theme-dark .modal-content h2,body.theme-dark .modal-content p{color:var(--color-text-primary)}body.theme-dark .modal-content .name-input{background:var(--color-bg-white);border-color:var(--color-border-medium);color:var(--color-text-primary)}body.theme-dark .modal-content .name-input::placeholder{color:var(--color-text-muted)}body.theme-dark .modal-content .name-input:focus{border-color:var(--color-accent-blue);box-shadow:0 0 0 3px #3b82f61a}.card{background:var(--color-dark-surface);border-radius:var(--radius-lg);padding:var(--space-md);border:1px solid var(--color-border-neon)}.card-glass{background:var(--color-dark-surface);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border:1px solid var(--color-border-neon);border-radius:var(--radius-lg)}.btn-neon{background:var(--color-accent-primary);color:var(--color-text-white);border:none;border-radius:var(--radius-md);padding:var(--space-md) var(--space-lg);font-weight:var(--font-weight-semibold);cursor:pointer;transition:all var(--transition-fast)}.btn-neon:hover{background:#ff4080}.btn-neon:active{transform:scale(.98)}.btn-glow{transition:box-shadow var(--transition-fast),transform var(--transition-fast)}.btn-glow:hover{box-shadow:var(--glow-primary)}.btn-glow:active{transform:scale(.98);box-shadow:var(--glow-primary)}.btn-glow-secondary:hover{box-shadow:var(--glow-secondary)}.btn-glow-success:hover{box-shadow:var(--glow-success)}.text-glow{text-shadow:0 0 10px var(--color-accent-primary),0 0 20px var(--color-accent-primary),0 0 30px var(--color-accent-primary)}.text-glow-cyan{text-shadow:0 0 10px var(--color-accent-secondary),0 0 20px var(--color-accent-secondary),0 0 30px var(--color-accent-secondary)}.text-glow-success{text-shadow:0 0 10px var(--color-success-neon),0 0 20px var(--color-success-neon),0 0 30px var(--color-success-neon)}.text-neon-white{color:var(--color-text-white)}.text-neon-muted{color:var(--color-text-neon-muted)}.text-neon-primary{color:var(--color-accent-primary)}.text-neon-secondary{color:var(--color-accent-secondary)}body.theme-dark .player-container h1,body.theme-dark .lobby-header h1,body.theme-dark .game-container h1,body.theme-dark .reveal-container h1,body.theme-dark .end-container h1{color:var(--color-text-white)}body.theme-dark .player-container p,body.theme-dark .hint,body.theme-dark .player-count{color:var(--color-text-neon-muted)}body.theme-dark .join-form>p{color:var(--color-text-neon-muted)}body.theme-dark .player-card{background:var(--color-dark-surface);border-color:var(--color-border-neon)}body.theme-dark .player-card--you{background:#ff2d6a1a;border-color:var(--color-accent-primary)}body.theme-dark .player-name{color:var(--color-text-white)}body.theme-dark .you-badge{color:var(--color-accent-primary)}body.theme-dark .name-input{background:var(--color-dark-surface);border-color:var(--color-border-neon);color:var(--color-text-white)}body.theme-dark .name-input:focus{border-color:var(--color-accent-primary);box-shadow:0 0 0 3px #ff2d6a33}body.theme-dark .name-input::placeholder{color:var(--color-text-neon-muted)}body.theme-dark .join-btn{background:var(--color-accent-primary);color:var(--color-text-white)}body.theme-dark .join-btn:hover{box-shadow:var(--glow-primary)}body.theme-dark .qr-share-area{background:var(--color-dark-surface);border:1px solid var(--color-border-neon)}body.theme-dark .qr-hint{color:var(--color-text-neon-muted)}body.theme-dark .qr-share-header{color:var(--color-text-white)}body.theme-dark .qr-share-chevron,body.theme-dark .lobby-status{color:var(--color-text-neon-muted)}body.theme-dark .game-container{background:var(--color-bg-primary)}body.theme-dark .round-indicator-text,body.theme-dark .timer{color:var(--color-text-white)}body.theme-dark .timer--warning{color:var(--color-warning);text-shadow:0 0 10px var(--color-warning);animation:timer-pulse-subtle 1s ease-in-out infinite}body.theme-dark .timer--critical{color:var(--color-error-neon);text-shadow:0 0 15px var(--color-error-neon);animation:timer-pulse-intense .5s ease-in-out infinite}body.theme-dark .player-avatar{background:var(--color-dark-surface-hover);color:var(--color-text-neon-muted)}body.theme-dark .player-indicator.is-submitted .player-avatar{background:var(--color-success-neon);color:var(--color-bg-primary);box-shadow:var(--glow-success)}body.theme-dark #selected-year{color:var(--color-text-white)}body.theme-dark .slider-label{color:var(--color-text-neon-muted)}body.theme-dark .year-slider{background:var(--color-dark-surface)}body.theme-dark .year-slider::-webkit-slider-thumb{background:var(--color-accent-primary);box-shadow:var(--glow-primary)}body.theme-dark .year-slider::-moz-range-thumb{background:var(--color-accent-primary);box-shadow:var(--glow-primary)}body.theme-dark .submit-btn{background:var(--color-accent-primary)}body.theme-dark .submit-btn:hover{box-shadow:var(--glow-primary)}body.theme-dark .submitted-confirmation{background:var(--color-success-neon);color:var(--color-bg-primary);box-shadow:var(--glow-success)}body.theme-dark .reveal-container{background:var(--color-bg-primary)}body.theme-dark .reveal-round-info,body.theme-dark .correct-year-label{color:var(--color-text-neon-muted)}body.theme-dark .correct-year{color:var(--color-success-neon);text-shadow:0 0 10px var(--color-success-neon),0 0 20px var(--color-success-neon)}body.theme-dark .song-title{color:var(--color-text-white)}body.theme-dark .song-artist{color:var(--color-text-neon-muted)}body.theme-dark .fun-fact-container{background:#ff660026;border:1px solid rgba(255,102,0,.3)}body.theme-dark .fun-fact-text{color:var(--color-warning)}body.theme-dark .reveal-emotion--exact{color:var(--color-success-neon);text-shadow:0 0 20px var(--color-success-neon),0 0 40px var(--color-success-neon)}body.theme-dark .reveal-emotion--close{color:var(--color-warning);text-shadow:0 0 15px var(--color-warning)}body.theme-dark .reveal-emotion--wrong{color:var(--color-text-neon-muted)}body.theme-dark .reveal-emotion--missed{color:var(--color-text-neon-muted);opacity:.6}body.theme-dark .personal-result{background:var(--color-dark-surface);border:1px solid var(--color-border-neon)}body.theme-dark .result-header,body.theme-dark .result-label{color:var(--color-text-neon-muted)}body.theme-dark .result-value{color:var(--color-text-white)}body.theme-dark .result-score{color:var(--color-accent-secondary);text-shadow:0 0 10px var(--color-accent-secondary)}body.theme-dark .leaderboard{background:var(--color-dark-surface);border:1px solid var(--color-border-neon);box-shadow:none}body.theme-dark .leaderboard-header{background:var(--color-dark-card);border-color:var(--color-border-neon)}body.theme-dark .leaderboard-title{color:var(--color-text-white)}body.theme-dark .leaderboard-entry{border-color:var(--color-border-neon)}body.theme-dark .leaderboard-entry.is-current{background:#ff2d6a1a;border-left-color:var(--color-accent-primary)}body.theme-dark .entry-rank{color:var(--color-text-neon-muted)}body.theme-dark .entry-name{color:var(--color-text-white)}body.theme-dark .entry-score{color:var(--color-accent-secondary)}body.theme-dark .leaderboard-entry--climbing{animation:leaderboard-climb-dark .4s ease-out}body.theme-dark .leaderboard-entry--falling{animation:leaderboard-fall-dark .4s ease-out}@keyframes leaderboard-climb-dark{0%{transform:translateY(10px);opacity:.7;background:#00ff8826}to{transform:translateY(0);opacity:1;background:transparent}}@keyframes leaderboard-fall-dark{0%{transform:translateY(-10px);opacity:.7;background:#ff2d6a26}to{transform:translateY(0);opacity:1;background:transparent}}body.theme-dark .rank-up{color:var(--color-success-neon);text-shadow:0 0 5px var(--color-success-neon)}body.theme-dark .rank-down{color:var(--color-error-neon);text-shadow:0 0 5px var(--color-error-neon)}body.theme-dark .streak-indicator{color:var(--color-warning)}body.theme-dark .streak-indicator--hot{text-shadow:0 0 10px var(--color-warning),0 0 20px var(--color-warning)}body.theme-dark .leaderboard-separator{color:var(--color-text-neon-muted);border-color:var(--color-border-neon)}body.theme-dark .leaderboard-entry.is-top-1{background:linear-gradient(90deg,#ffd70026,#ffd7000d)}body.theme-dark .leaderboard-entry.is-top-1 .entry-rank{color:gold;text-shadow:0 0 10px rgba(255,215,0,.5)}body.theme-dark .leaderboard-entry.is-top-2{background:linear-gradient(90deg,#c0c0c026,#c0c0c00d)}body.theme-dark .leaderboard-entry.is-top-2 .entry-rank{color:silver;text-shadow:0 0 10px rgba(192,192,192,.5)}body.theme-dark .leaderboard-entry.is-top-3{background:linear-gradient(90deg,#cd7f3226,#cd7f320d)}body.theme-dark .leaderboard-entry.is-top-3 .entry-rank{color:#cd7f32;text-shadow:0 0 10px rgba(205,127,50,.5)}body.theme-dark .end-container{background:var(--color-bg-primary)}body.theme-dark .end-title{color:var(--color-text-white)}body.theme-dark .end-subtitle{color:var(--color-text-neon-muted)}body.theme-dark .your-result{background:var(--color-dark-surface);border:1px solid var(--color-border-neon)}body.theme-dark .your-result-header{color:var(--color-accent-primary)}body.theme-dark .your-result-rank{color:var(--color-text-white)}body.theme-dark .your-result-score{color:var(--color-text-neon-muted)}body.theme-dark .stat-value{color:var(--color-accent-secondary)}body.theme-dark .stat-label{color:var(--color-text-neon-muted)}body.theme-dark .podium-name{color:var(--color-text-white)}body.theme-dark .podium-score{color:var(--color-text-neon-muted)}body.theme-dark .final-leaderboard{background:var(--color-dark-surface);border:1px solid var(--color-border-neon);box-shadow:none}body.theme-dark .final-leaderboard-header{background:var(--color-dark-card);color:var(--color-text-white)}body.theme-dark .final-entry{border-color:var(--color-border-neon)}body.theme-dark .final-entry.is-current{background:#ff2d6a1a}body.theme-dark .final-rank{color:var(--color-text-neon-muted)}body.theme-dark .final-name{color:var(--color-text-white)}body.theme-dark .final-score{color:var(--color-accent-secondary)}body.theme-dark .new-game-btn{background:var(--color-success-neon);color:var(--color-bg-primary);box-shadow:var(--glow-success)}body.theme-dark .new-game-btn:hover{background:#4dff1f}body.theme-dark .end-player-message,body.theme-dark .rejoin-hint{color:var(--color-text-neon-muted)}body.theme-dark .paused-container{background:var(--color-bg-primary)}body.theme-dark .paused-container h1{color:var(--color-text-white)}body.theme-dark .paused-container>p{color:var(--color-text-neon-muted)}body.theme-dark .paused-hint{color:var(--color-text-neon-muted)}body.theme-dark .connection-lost-container h1{color:var(--color-text-white)}body.theme-dark .connection-lost-container>p{color:var(--color-text-neon-muted)}body.theme-dark .connection-lost-hint{color:var(--color-text-neon-muted)}body.theme-dark .qr-modal-content{background:var(--color-bg-primary);border:1px solid var(--color-border-neon)}body.theme-dark .qr-modal-label{color:var(--color-text-white)}.qr-print-area{text-align:center;padding:var(--space-lg) 0}.qr-container{display:inline-block;padding:var(--space-md);background:var(--color-bg-white);border-radius:var(--radius-md);box-shadow:var(--shadow-md)}#qr-code{display:inline-block}#qr-code img{display:block}.qr-instruction{font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);color:var(--color-text-primary);margin-top:var(--space-md)}.join-url{font-family:var(--font-mono);font-size:var(--font-size-base);color:var(--color-text-muted);margin-top:var(--space-sm);word-break:break-all;user-select:all;cursor:text}.lobby-controls{display:flex;flex-wrap:wrap;justify-content:center;gap:var(--space-sm);margin:var(--space-md) 0}.btn-dashboard{display:flex;align-items:center;gap:var(--space-xs)}.player-list{margin-top:var(--space-md);border-top:1px solid var(--color-border-light);padding-top:var(--space-md)}.game-controls-bar{display:flex;gap:var(--space-sm);justify-content:center;margin-top:var(--space-md);padding-top:var(--space-md);border-top:1px solid var(--color-border-light)}.game-info{background:var(--color-bg-card);border-radius:var(--radius-md);padding:var(--space-md);margin-bottom:var(--space-md)}.game-info p{margin-bottom:var(--space-sm)}.game-info p:last-child{margin-bottom:0}@media print{body *{visibility:hidden}.qr-print-area,.qr-print-area *{visibility:visible}.qr-print-area{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);text-align:center}#qr-code{width:400px!important;height:400px!important}#qr-code img,#qr-code canvas{width:400px!important;height:400px!important}.qr-instruction{font-size:var(--font-size-2xl);font-weight:var(--font-weight-bold);margin-top:var(--space-xl)}.join-url{font-size:var(--font-size-base);font-family:var(--font-mono);margin-top:var(--space-sm)}.no-print{display:none!important}}.player-container{max-width:500px;margin:0 auto;padding-top:max(var(--space-md),env(safe-area-inset-top));padding-bottom:max(var(--space-md),env(safe-area-inset-bottom));padding-left:max(var(--space-sm),env(safe-area-inset-left));padding-right:max(var(--space-sm),env(safe-area-inset-right));text-align:center;min-height:100vh;display:flex;flex-direction:column;justify-content:flex-start}@media(min-width:768px){.player-container{max-width:480px;margin-left:auto;margin-right:auto;padding-left:var(--space-lg);padding-right:var(--space-lg)}}.view{display:block;overflow-x:hidden}.view.hidden{display:none}.error-icon{font-size:var(--font-size-timer);margin-bottom:var(--space-md)}.player-container h1{margin-bottom:var(--space-sm);color:var(--color-text-primary)}.player-container p{color:var(--color-text-muted);margin-bottom:var(--space-sm)}.hint{font-size:var(--font-size-base);color:var(--color-text-light)}.coming-soon{font-style:italic;color:var(--color-text-muted)}.spinner{width:40px;height:40px;margin:0 auto var(--space-md);border:4px solid var(--color-bg-card-alt);border-top:4px solid var(--color-accent-blue);border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}#qr-code{max-width:100%}#qr-code img,#qr-code canvas{max-width:100%;height:auto}@media(min-width:481px)and (max-width:768px){.qr-container{padding:var(--space-xl)}}@media(min-width:769px){.qr-container{padding:var(--space-lg)}}.join-form{max-width:400px;margin:0 auto;padding:var(--space-lg);text-align:center}.join-form h1{margin-bottom:var(--space-sm);font-size:var(--font-size-2xl)}.join-form>p{margin-bottom:var(--space-lg);color:var(--color-text-muted)}.form-group{margin-bottom:var(--space-md)}.name-input{width:100%;padding:14px var(--space-md);font-size:var(--font-size-lg);border:2px solid var(--color-border-medium);border-radius:var(--radius-md);min-height:48px;box-sizing:border-box}.name-input:focus{border-color:var(--color-accent-blue);outline:none;box-shadow:0 0 0 3px #3b82f61a}.join-btn{width:100%;min-height:48px;font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold)}.validation-msg{margin-top:var(--space-sm);font-size:var(--font-size-base);color:var(--color-error);text-align:left}.lobby-container{max-width:500px;margin:0 auto;padding:var(--space-lg) var(--space-md)}.lobby-header{text-align:center;margin-bottom:var(--space-lg)}.lobby-header h1{font-size:var(--font-size-2xl);margin-bottom:var(--space-sm);color:var(--color-text-primary)}.player-count{font-size:var(--font-size-md);color:var(--color-text-muted)}.player-list{display:flex;flex-direction:column;gap:var(--space-sm);margin-bottom:var(--space-lg)}.player-card{display:flex;align-items:center;padding:var(--space-sm) var(--space-md);min-height:48px;background:var(--color-bg-card);border-radius:var(--radius-md);border:1px solid var(--color-border-light);transition:all var(--transition-normal)}.player-card--you{background:#eff6ff;border-color:var(--color-accent-blue)}.player-card--disconnected{opacity:.5;filter:grayscale(.3);transition:opacity .3s ease,filter .3s ease}.away-badge{font-size:var(--font-size-sm);color:var(--color-text-muted);font-style:italic;margin-left:var(--space-xs)}.player-name{display:flex;align-items:center;gap:var(--space-sm);font-size:var(--font-size-md);color:var(--color-text-primary)}.you-badge{font-size:var(--font-size-sm);color:var(--color-accent-blue);font-weight:var(--font-weight-medium)}.player-card.is-new{animation:playerJoin var(--transition-slow) ease-out;background:#ecfdf5;border-color:var(--color-success)}@keyframes playerJoin{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.player-list--virtual{position:relative;overflow-y:auto;max-height:320px;-webkit-overflow-scrolling:touch;contain:layout style paint}.player-list--virtual .virtual-spacer-top,.player-list--virtual .virtual-spacer-bottom{flex-shrink:0;pointer-events:none}.player-list--virtual .virtual-content-wrapper{display:flex;flex-direction:column;gap:var(--space-sm)}.player-list--virtual .player-card{flex-shrink:0;height:52px;box-sizing:border-box}.qr-share-area{text-align:center;padding:var(--space-lg) var(--space-md);background:var(--color-bg-card);border-radius:var(--radius-lg);margin-bottom:var(--space-md)}.qr-icon{font-size:var(--font-size-xl)}.qr-container{display:inline-block;padding:var(--space-sm);background:var(--color-bg-white);border-radius:var(--radius-md);box-shadow:var(--shadow-md);cursor:pointer;min-width:150px;min-height:150px;transition:transform var(--transition-fast)}.qr-container:hover,.qr-container:focus{transform:scale(1.02);outline:2px solid var(--color-accent-blue);outline-offset:2px}.qr-container img{display:block;width:100%;height:auto}.qr-hint{margin-top:var(--space-sm);font-size:13px;color:var(--color-text-muted)}.qr-collapsible{padding:0}.qr-share-header{display:flex;align-items:center;justify-content:center;gap:var(--space-sm);padding:var(--space-md);cursor:pointer;user-select:none;list-style:none;font-size:var(--font-size-md);font-weight:600;color:var(--color-text-primary);min-height:44px}.qr-share-header::-webkit-details-marker{display:none}.qr-share-chevron{margin-left:var(--space-sm);transition:transform var(--transition-normal);font-size:.8rem;color:var(--color-text-muted)}.qr-collapsible[open] .qr-share-chevron{transform:rotate(180deg)}.qr-share-content{padding:0 var(--space-md) var(--space-lg);animation:qrSlideDown var(--transition-normal) ease-out}@keyframes qrSlideDown{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}.qr-collapsible:not([open]){padding-bottom:0}.qr-collapsible:not([open]) .qr-share-header{padding-bottom:var(--space-md)}@media(prefers-reduced-motion:reduce){.qr-share-chevron{transition:none}.qr-share-content{animation:none}}.dashboard-hint-container{margin-top:var(--space-md);text-align:center}.dashboard-hint-text{display:inline-flex;flex-direction:column;align-items:center;gap:var(--space-xs);font-size:var(--font-size-sm);color:#fff;background:var(--color-surface-dark);padding:var(--space-sm) var(--space-md);border-radius:var(--radius-md);margin:0}.dashboard-hint-label{display:flex;align-items:center;gap:var(--space-xs);color:#fff}.dashboard-hint-icon{font-size:var(--font-size-base)}.dashboard-hint-url{font-family:monospace;color:var(--color-accent-secondary);font-size:var(--font-size-sm)}.qr-modal{position:fixed;inset:0;z-index:var(--z-modal);display:flex;align-items:center;justify-content:center}.qr-modal.hidden{display:none}.qr-modal-backdrop{position:absolute;inset:0;background:#000000bf}.qr-modal-content{position:relative;background:var(--color-bg-white);padding:var(--space-xl) var(--space-lg);border-radius:var(--radius-xl);text-align:center;max-width:90vw;max-height:90vh;animation:modalFadeIn var(--transition-fast)}.qr-modal-code{display:inline-block;padding:var(--space-md);background:var(--color-bg-white);border-radius:var(--radius-md);min-width:250px}.qr-modal-code img{display:block;width:100%;max-width:80vw;height:auto}.qr-modal-label{margin:var(--space-md) 0;font-size:var(--font-size-lg);color:var(--color-text-primary)}.qr-modal-close{min-width:120px;min-height:48px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.lobby-status{text-align:center;padding:var(--space-md);color:var(--color-text-muted)}.how-to-play{margin:var(--space-md) 0;background:var(--color-bg-card);border-radius:var(--radius-md);border:1px solid var(--color-border-light)}.how-to-play-header{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-md);cursor:pointer;user-select:none;list-style:none;font-weight:600;color:var(--color-text-primary);min-height:44px}.how-to-play-header::-webkit-details-marker{display:none}.how-to-play-icon{font-size:1.2rem}.how-to-play-chevron{margin-left:auto;transition:transform var(--transition-normal);font-size:.8rem;color:var(--color-text-secondary)}.how-to-play[open] .how-to-play-chevron{transform:rotate(180deg)}.how-to-play-content{padding:0 var(--space-md) var(--space-md);animation:howToPlaySlideDown var(--transition-normal) ease-out}.how-to-play-steps{margin:0;padding:0;list-style:none;color:var(--color-text-secondary);font-size:.9rem;line-height:1.6;counter-reset:step-counter}.how-to-play-steps li{margin-bottom:var(--space-sm);padding-left:var(--space-lg);position:relative;counter-increment:step-counter}.how-to-play-steps li:before{content:counter(step-counter) ".";position:absolute;left:0;width:var(--space-md);text-align:right;font-weight:600;color:var(--color-text-primary)}.how-to-play-steps li:last-child{margin-bottom:0}@keyframes howToPlaySlideDown{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}.leave-game-container{text-align:center;padding:var(--space-md);position:sticky;bottom:0;background:linear-gradient(to top,var(--color-bg-card),transparent);z-index:var(--z-controls, 10)}.leave-game-container.hidden{display:none}body.theme-dark .leave-game-container{background:transparent}.btn-leave{opacity:.7;transition:opacity .2s ease}.btn-leave:hover{opacity:1}.admin-controls{padding:var(--space-lg) var(--space-md);text-align:center;background:linear-gradient(to top,var(--color-bg-card),transparent);position:sticky;bottom:0}.admin-controls.hidden{display:none}body.theme-dark .admin-controls{background:transparent}.btn-large{min-height:56px;font-size:var(--font-size-xl);padding:var(--space-md) var(--space-xl)}.btn-full-width{width:100%}.admin-hint{margin-top:var(--space-sm);font-size:var(--font-size-base);color:var(--color-text-muted)}.admin-lobby-actions{text-align:center;margin-top:var(--space-lg)}.admin-badge{font-size:var(--font-size-sm);color:var(--color-warning);margin-left:var(--space-xs)}.lobby-player-count-container{text-align:center;margin-bottom:var(--space-md)}.lobby-stats-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:var(--space-md);margin-bottom:var(--space-lg)}.stat-card--clickable{display:block;text-decoration:none;cursor:pointer;margin-bottom:var(--space-lg)}.stat-card--clickable:hover{border-color:var(--color-accent-secondary)}.dashboard-hint-card{background:#00f5ff0d;border-color:var(--color-accent-secondary)}.qr-section{text-align:center;padding:var(--space-xl) var(--space-lg);background:var(--color-surface-dark);border:1px solid var(--color-border-neon);border-radius:var(--radius-md);margin-bottom:var(--space-lg)}.qr-section .qr-container{display:inline-block;padding:var(--space-md);background:#fff;border-radius:var(--radius-md);margin-bottom:var(--space-md)}.qr-hint{font-size:1rem;color:var(--color-text-neon-muted);margin-bottom:var(--space-sm)}.qr-url-display{font-family:Outfit,sans-serif;font-size:1.125rem;font-weight:600;color:var(--color-accent-secondary);word-break:break-all}.player-list-section{background:var(--color-surface-dark);border:1px solid var(--color-border-neon);border-radius:var(--radius-md);padding:var(--space-md);margin-bottom:var(--space-lg)}.section-subheader{display:flex;align-items:center;gap:var(--space-sm);font-size:1rem;font-weight:600;color:var(--color-text-white);margin-bottom:var(--space-md)}.section-subheader .section-icon{font-size:1.25rem}.player-cards-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:var(--space-sm)}.player-cards-grid .player-card{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:var(--space-md);min-height:80px;background:var(--color-dark-surface);border:1px solid var(--color-border-neon);border-radius:var(--radius-md);text-align:center;transition:transform .2s ease,box-shadow .2s ease,border-color .2s ease}.player-cards-grid .player-card:hover{transform:translateY(-2px);box-shadow:0 4px 12px #9d4edd33}.player-cards-grid .player-card.is-new{background:#39ff141a;border-color:var(--color-success-neon);animation:playerCardJoin .5s ease-out}@keyframes playerCardJoin{0%{opacity:0;transform:scale(.9)}to{opacity:1;transform:scale(1)}}.player-cards-grid .player-card--disconnected{opacity:.5;filter:grayscale(.3)}.player-cards-grid .player-name{font-size:var(--font-size-md);font-weight:600;color:var(--color-text-white);margin-bottom:var(--space-xs);display:flex;align-items:center;gap:var(--space-xs);flex-wrap:wrap;justify-content:center}.player-cards-grid .admin-badge{font-size:1rem}.player-cards-grid .away-badge{font-size:var(--font-size-xs);color:var(--color-text-neon-muted);display:block;width:100%}.kick-player-btn{position:relative;background:none;border:1px solid var(--color-border-dark);color:var(--color-text-muted);width:24px;height:24px;border-radius:50%;font-size:1rem;line-height:1;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;margin-top:var(--space-xs);padding:0;transition:all .15s ease}.kick-player-btn:after{content:"";position:absolute;top:50%;left:50%;width:44px;height:44px;transform:translate(-50%,-50%)}.kick-player-btn:hover{background:var(--color-error);color:#fff;border-color:var(--color-error)}.lobby-actions{margin-top:var(--space-lg);padding-top:var(--space-md);border-top:1px solid var(--color-border-dark)}.lobby-header-compact{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--space-sm);margin-bottom:var(--space-md);text-align:left}.section-header--inline{margin-bottom:0;flex:1;min-width:120px;text-align:left}.stat-badge-bar{display:flex;align-items:center;gap:var(--space-md)}.stat-badge{display:flex;align-items:center;gap:var(--space-xs);padding:var(--space-xs) var(--space-sm);background:#ffffff0d;border:1px solid var(--color-border-neon);border-radius:var(--radius-md);font-size:.875rem}.stat-badge-icon{font-size:1rem}.stat-badge-value{font-weight:600;color:var(--color-accent-secondary)}.stat-badge--status .stat-badge-value{color:var(--color-text-white)}.qr-section--compact{padding:var(--space-md);margin-bottom:var(--space-md)}.qr-section--compact .qr-container{padding:var(--space-sm);margin-bottom:var(--space-sm)}.qr-section--compact #qr-code{width:180px!important;height:180px!important}.qr-section--compact #qr-code img,.qr-section--compact #qr-code canvas{width:180px!important;height:180px!important}.qr-section--compact .qr-hint{font-size:.875rem;margin-bottom:var(--space-xs)}.qr-url-display--compact{font-size:.75rem;margin-bottom:var(--space-sm)}.dashboard-link{display:inline-flex;align-items:center;gap:var(--space-xs);padding:var(--space-xs) var(--space-sm);background:#00f5ff1a;border:1px solid var(--color-accent-secondary);border-radius:var(--radius-md);color:var(--color-accent-secondary);text-decoration:none;font-size:.875rem;transition:all .2s ease}.dashboard-link:hover{background:#00f5ff33}.dashboard-link-arrow{opacity:.7}.player-list-section--compact{padding:var(--space-sm);margin-bottom:var(--space-sm)}.section-subheader--compact{font-size:.875rem;margin-bottom:var(--space-sm)}.empty-state-inline{display:flex;align-items:center;justify-content:center;gap:var(--space-sm);padding:var(--space-md);color:var(--color-text-neon-muted);font-size:.875rem;text-align:center}.lobby-actions--sticky{position:sticky;bottom:0;margin:0 calc(-1 * var(--space-md));padding:var(--space-sm) var(--space-md);background:var(--color-bg-primary);border-top:1px solid var(--color-border-dark);z-index:10;display:flex;flex-direction:column;gap:var(--space-sm, 8px)}@media(min-width:481px){.qr-section--compact #qr-code,.qr-section--compact #qr-code img,.qr-section--compact #qr-code canvas{width:240px!important;height:240px!important}.qr-section--compact{padding:var(--space-lg)}.lobby-actions--sticky{position:relative;margin:var(--space-lg) 0 0 0;padding:var(--space-md) 0 0 0;background:transparent}}.lobby-wordmark-header{display:flex;justify-content:center;align-items:center;padding:var(--space-md) var(--space-md) var(--space-sm);padding-top:env(safe-area-inset-top,16px)}.lobby-wordmark-header .wordmark{font-size:2rem}.lobby-container--compact{flex:1;padding:0 var(--space-sm) var(--space-2xl);max-width:500px;margin:0 auto;width:100%}.lobby-container--compact .section-collapsible{background:var(--color-surface-dark);border:1px solid var(--color-border-neon);border-radius:var(--radius-md);margin-bottom:var(--space-md);overflow:hidden}.lobby-container--compact .section-header-collapsible{display:flex;align-items:center;gap:var(--space-sm);width:100%;padding:var(--space-sm) var(--space-md);background:transparent;border:none;color:var(--color-text-white);font-size:.875rem;font-weight:600;cursor:pointer;text-align:left}.lobby-container--compact .section-header-collapsible .section-icon{font-size:1rem}.lobby-container--compact .section-summary{margin-left:auto;font-size:.75rem;font-weight:400;color:var(--color-text-neon-muted);padding:2px 8px;background:#ffffff0d;border-radius:var(--radius-sm)}.lobby-container--compact .section-toggle{font-size:.625rem;color:var(--color-text-neon-muted);transition:transform .2s ease;margin-left:var(--space-sm)}.lobby-container--compact .section-header-collapsible>.section-toggle:nth-child(3){margin-left:auto}.lobby-container--compact .section-collapsible:not(.collapsed) .section-toggle{transform:rotate(180deg)}.lobby-container--compact .section-content{padding:0 var(--space-md) var(--space-md)}.lobby-container--compact .section-collapsible.collapsed .section-content{display:none}.lobby-status-compact{text-align:center;padding:var(--space-md);color:var(--color-text-neon-muted);font-size:.875rem}.how-to-play-steps-compact{list-style:decimal;padding-left:var(--space-lg);margin:0;font-size:.875rem;color:var(--color-text-neon-muted)}.how-to-play-steps-compact li{padding:var(--space-xs) 0}.stat-badge--difficulty{font-size:.75rem;text-transform:uppercase;letter-spacing:.03em}.stat-badge--difficulty:empty{display:none}.admin-content .section-collapsible{background:var(--color-surface-dark);border:1px solid var(--color-border-neon);border-radius:var(--radius-md);margin-bottom:var(--space-md);overflow:hidden}.admin-content .section-header-collapsible{display:flex;align-items:center;gap:var(--space-sm);width:100%;padding:var(--space-sm) var(--space-md);background:transparent;border:none;color:var(--color-text-white);font-size:.875rem;font-weight:600;cursor:pointer;text-align:left}.admin-content .section-header-collapsible .section-icon{font-size:1rem}.admin-content .section-header-collapsible .section-summary{margin-left:auto;font-size:.75rem;font-weight:400;color:var(--color-accent-secondary);background:#00f5ff1a;padding:2px 8px;border-radius:var(--radius-sm)}.admin-content .section-header-collapsible .section-toggle{margin-left:var(--space-sm);font-size:.625rem;color:var(--color-text-neon-muted);transition:transform .2s ease}.admin-content .section-collapsible:not(.collapsed) .section-toggle{transform:rotate(180deg)}.admin-content .section-collapsible .section-content{padding:0 var(--space-md) var(--space-md)}.admin-content .section-collapsible.collapsed .section-content{display:none}.setting-row{display:flex;align-items:center;justify-content:space-between;padding:var(--space-xs) 0;border-bottom:1px solid rgba(255,255,255,.05)}.setting-row:last-child{border-bottom:none}.setting-group{border-bottom:1px solid rgba(255,255,255,.05);padding-bottom:var(--space-sm);margin-bottom:var(--space-sm)}.setting-group:last-child{border-bottom:none}.setting-group .setting-row{border-bottom:none}.tts-group-title{font-size:.7rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--color-text-muted);margin:0 0 var(--space-xs) 0;opacity:.8}.setting-hint{font-size:.7rem;color:var(--color-text-muted);margin:0 0 var(--space-xs) calc(var(--space-xs) + 24px);line-height:1.3;opacity:.75}body.theme-dark .setting-hint{color:var(--color-text-neon-muted)}.setting-label{display:flex;align-items:center;gap:var(--space-xs);font-size:.875rem;color:var(--color-text-white)}.setting-icon{font-size:.875rem}.chip-group{display:flex;gap:4px}.chip{padding:4px 10px;font-size:.75rem;font-weight:500;background:#ffffff0d;border:1px solid var(--color-border-neon);border-radius:var(--radius-sm);color:var(--color-text-neon-muted);cursor:pointer;transition:all .15s ease}.chip:hover{background:#ffffff1a;color:var(--color-text-white)}.chip.chip--active{background:#00f5ff33;border-color:var(--color-accent-secondary);color:var(--color-accent-secondary)}.toggle-compact{display:flex;align-items:center;cursor:pointer}.toggle-compact input{position:absolute;opacity:0;width:0;height:0}.toggle-switch-compact{width:36px;height:20px;background:#ffffff1a;border-radius:10px;position:relative;transition:background .2s ease}.toggle-switch-compact:after{content:"";position:absolute;top:2px;left:2px;width:16px;height:16px;background:var(--color-text-neon-muted);border-radius:50%;transition:all .2s ease}.toggle-compact input:checked+.toggle-switch-compact{background:#00f5ff4d}.toggle-compact input:checked+.toggle-switch-compact:after{left:18px;background:var(--color-accent-secondary)}.admin-actions{position:sticky;bottom:0;background:var(--color-bg-primary);padding:var(--space-sm) 0;margin-top:var(--space-sm)}.admin-actions .status-error{margin-bottom:var(--space-xs);font-size:.875rem}.modal{position:fixed;inset:0;z-index:var(--z-modal);display:flex;align-items:center;justify-content:center}.modal.hidden{display:none}.modal-backdrop{position:absolute;inset:0;background:#00000080}.modal-content{position:relative;background:var(--color-bg-white);padding:var(--space-lg);border-radius:var(--radius-lg);max-width:400px;width:90%;animation:modalFadeIn var(--transition-fast)}.modal-content h2{margin-bottom:var(--space-sm);font-size:var(--font-size-xl)}.modal-content p{margin-bottom:var(--space-md);color:var(--color-text-muted)}.modal-actions{display:flex;gap:var(--space-sm);margin-top:var(--space-lg)}.modal-actions .btn{flex:1}.game-placeholder{text-align:center;padding:var(--space-2xl) var(--space-lg)}.game-placeholder h1{font-size:var(--font-size-3xl);margin-bottom:var(--space-md);color:var(--color-text-primary)}.game-placeholder p{font-size:var(--font-size-md);color:var(--color-text-muted)}.reveal-placeholder{text-align:center;padding:var(--space-2xl) var(--space-lg)}.reveal-placeholder h1{font-size:var(--font-size-4xl);margin-bottom:var(--space-md);color:var(--color-text-primary)}.reveal-placeholder p{font-size:var(--font-size-md);color:var(--color-text-muted)}.end-container{text-align:center;padding:var(--space-2xl) var(--space-lg)}.end-icon{font-size:var(--font-size-timer);margin-bottom:var(--space-md)}.end-container h1{font-size:var(--font-size-3xl);margin-bottom:var(--space-sm);color:var(--color-text-primary)}.end-message{font-size:var(--font-size-lg);color:#4b5563;margin-bottom:var(--space-sm)}.game-container{display:flex;flex-direction:column;align-items:center;padding:var(--space-sm);padding-bottom:max(var(--space-md),env(safe-area-inset-bottom));max-width:400px;margin:0 auto}.game-sticky-bar{position:sticky;top:0;z-index:50;width:100%;padding:var(--space-xs) var(--space-sm);background:var(--color-bg-light);border-bottom:1px solid var(--color-border-light)}body.theme-dark .game-sticky-bar{background:var(--color-bg-primary);border-bottom-color:var(--color-border-dark)}.game-sticky-bar .timer-container{margin-bottom:0}.game-sticky-bar .timer{font-size:2rem}.game-header-compact{display:flex;align-items:center;justify-content:space-between;width:100%;margin-bottom:var(--space-sm);padding:0 var(--space-xs)}.game-header-left{display:flex;align-items:center;gap:var(--space-xs)}.game-header-left .section-icon{font-size:1rem}.round-indicator-text{font-size:var(--font-size-sm);font-weight:600;color:var(--color-text-white)}.stat-badge--steal{background:linear-gradient(135deg,var(--color-purple-primary),var(--color-purple-secondary, #9333ea));animation:steal-badge-pulse 2s ease-in-out infinite}@keyframes steal-badge-pulse{0%,to{box-shadow:0 0 8px #9333ea80}50%{box-shadow:0 0 12px #9333eacc}}.last-round-banner{background:linear-gradient(135deg,var(--color-warning),var(--color-warning-dark));color:var(--color-text-white);padding:var(--space-xs) var(--space-md);border-radius:var(--radius-md);font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);margin-bottom:var(--space-sm);text-align:center;width:100%;animation:pulse 2s infinite}.intro-badge{display:inline-flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-lg);background:linear-gradient(135deg,gold,#ff6b00);color:#000;border-radius:var(--radius-pill);font-size:var(--font-size-lg);font-weight:var(--font-weight-bold);text-transform:uppercase;letter-spacing:1px;animation:intro-pulse 1.5s ease-in-out infinite;margin-bottom:var(--space-md);box-shadow:0 0 20px #ffd70080,0 0 40px #ff6b004d}.intro-splash{position:fixed;inset:0;z-index:9999;display:flex;align-items:center;justify-content:center;background:#000000d9;animation:intro-splash-in .3s ease-out,intro-splash-out .5s ease-in 1.5s forwards;pointer-events:none}.intro-splash-content{display:flex;flex-direction:column;align-items:center;gap:12px;animation:intro-splash-scale .4s cubic-bezier(.34,1.56,.64,1)}.intro-splash-icon{font-size:80px;filter:drop-shadow(0 0 30px rgba(255,215,0,.8))}.intro-splash-text{font-size:36px;font-weight:900;text-transform:uppercase;letter-spacing:4px;background:linear-gradient(135deg,gold,#ff6b00);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;text-shadow:none}.intro-splash-hint{font-size:18px;color:#ffffffb3;letter-spacing:1px}@keyframes intro-splash-in{0%{opacity:0}to{opacity:1}}@keyframes intro-splash-out{0%{opacity:1}to{opacity:0;visibility:hidden}}@keyframes intro-splash-scale{0%{transform:scale(.5);opacity:0}to{transform:scale(1);opacity:1}}.intro-badge-icon{font-size:var(--font-size-md)}.intro-badge--large{font-size:var(--font-size-lg);padding:var(--space-sm) var(--space-lg);margin-left:var(--space-md)}.intro-badge--large .intro-badge-icon{font-size:var(--font-size-xl)}.intro-badge--stopped{background:linear-gradient(135deg,#666,#444);color:var(--color-text-white);animation:none}@keyframes intro-pulse{0%,to{transform:scale(1);opacity:1}50%{transform:scale(1.05);opacity:.9}}@media(prefers-reduced-motion:reduce){.intro-badge{animation:none}}.closest-wins-badge{background:linear-gradient(135deg,#00c6ff,#0072ff);box-shadow:0 0 20px #00c6ff80,0 0 40px #0072ff4d}.result-card.is-closest-winner{border:2px solid #00c6ff;box-shadow:0 0 12px #00c6ff66}.closest-winner-badge{margin-left:var(--space-sm);font-size:var(--font-size-sm)}.album-cover-container{position:relative;width:150px;height:150px;margin-bottom:var(--space-md)}.album-cover{width:100%;height:100%;object-fit:cover;border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);filter:blur(20px)}@media(max-width:360px){.album-cover-container{width:120px;height:120px}}@media(min-width:768px){.album-cover-container{width:180px;height:180px}}.album-loading{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:var(--color-bg-card-alt);border-radius:var(--radius-xl)}.loading-spinner{width:40px;height:40px;border:4px solid var(--color-border-light);border-top-color:var(--color-accent-brand);border-radius:50%;animation:spin 1s linear infinite}.timer-container{margin-bottom:var(--space-lg)}.timer{font-size:var(--font-size-timer);font-weight:var(--font-weight-bold);color:var(--color-text-primary);font-variant-numeric:tabular-nums;transition:color var(--transition-normal)}.timer--warning{color:var(--color-warning);animation:timer-pulse-subtle 1s ease-in-out infinite}.timer--critical{color:var(--color-error);animation:timer-pulse-intense .5s ease-in-out infinite}@keyframes timer-pulse-subtle{0%,to{opacity:1}50%{opacity:.8}}@keyframes timer-pulse-intense{0%,to{opacity:1;transform:scale(1)}50%{opacity:.9;transform:scale(1.05)}}@media(prefers-reduced-motion:reduce){.timer--warning,.timer--critical{animation:none}}.submission-tracker{width:100%;margin-bottom:var(--space-md);padding:var(--space-sm);background:var(--color-surface-dark);border:1px solid var(--color-border-neon);border-radius:var(--radius-md)}.submitted-players{display:flex;gap:var(--space-sm);overflow-x:auto;padding:var(--space-xs) 0;-webkit-overflow-scrolling:touch;scrollbar-width:none;justify-content:center;flex-wrap:wrap}.submitted-players::-webkit-scrollbar{display:none}.player-indicator{display:flex;flex-direction:column;align-items:center;min-width:48px;flex-shrink:0;position:relative}.player-badge{position:absolute;width:16px;height:16px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:10px;z-index:1}.player-badge--bet{top:-2px;right:2px;background:var(--color-warning)}.player-badge--steal{top:-2px;left:2px;background:linear-gradient(135deg,var(--color-purple-primary),var(--color-purple-secondary, #9333ea))}.player-avatar{width:36px;height:36px;border-radius:50%;background:var(--color-border-light);display:flex;align-items:center;justify-content:center;font-size:var(--font-size-base);font-weight:var(--font-weight-semibold);color:var(--color-text-muted);border:2px solid transparent;transition:all var(--transition-normal)}.player-indicator.is-submitted .player-avatar{background:var(--color-success);color:var(--color-text-white);border-color:var(--color-success-hover);animation:submitted-pulse var(--transition-slow) ease-out}.player-indicator.is-submitted .player-initials{display:none}.player-indicator.is-submitted .player-avatar:after{content:"\2713";font-size:var(--font-size-md)}@keyframes submitted-pulse{0%{transform:scale(1)}50%{transform:scale(1.2)}to{transform:scale(1)}}.player-indicator .player-name{font-size:var(--font-size-xs);color:var(--color-text-muted);max-width:48px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:center;margin-top:var(--space-xs)}.player-indicator.is-current-player .player-avatar{border-color:var(--color-accent-brand)}.player-indicator.is-current-player .player-name{font-weight:var(--font-weight-semibold);color:var(--color-accent-brand)}.player-indicator--disconnected{opacity:.4}.submission-tracker.all-submitted{border-color:var(--color-success);background:#10b9811a}.artist-challenge{width:100%}.artist-challenge .section-header{display:flex;align-items:center;gap:var(--space-sm);flex-wrap:wrap}.stat-badge--bonus{background:#22c55e26;color:var(--color-success);font-weight:700;margin-left:auto}.artist-options-grid{display:grid;grid-template-columns:1fr 1fr;grid-auto-rows:1fr;gap:var(--space-sm)}@media(max-width:320px){.artist-options-grid{grid-template-columns:1fr}}.artist-option-btn{display:flex;align-items:center;justify-content:center;min-height:72px;padding:var(--space-sm) var(--space-md);border:2px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface);color:var(--color-text);font-size:var(--font-size-md);font-weight:500;cursor:pointer;transition:all .2s ease;position:relative}.artist-option-btn:active{transform:scale(.98)}.artist-option-btn.is-loading{animation:artistPulse 1s infinite}@keyframes artistPulse{0%,to{opacity:1}50%{opacity:.6}}.artist-option-btn.is-correct,.artist-option-btn.is-winner{background:var(--color-success);border-color:var(--color-success);color:#fff}.artist-option-btn.is-winner{box-shadow:var(--glow-primary)}.artist-option-btn.is-wrong{animation:artistWrongFlash .5s ease}.artist-option-btn.is-wrong.is-selected{background:var(--color-error);border-color:var(--color-error);color:#fff;animation:none;opacity:.8}@keyframes artistWrongFlash{0%,to{background:var(--color-surface)}50%{background:#ef44444d}}.artist-option-btn.is-disabled{opacity:.5;pointer-events:none}.artist-points-badge{position:absolute;right:var(--space-sm);font-size:var(--font-size-sm);font-weight:700;color:#fff;background:#0003;padding:2px 6px;border-radius:var(--radius-sm)}.artist-result{margin-top:var(--space-md);padding:var(--space-sm) var(--space-md);border-radius:var(--radius-md);text-align:center;font-weight:500}.artist-result.is-winner{background:#22c55e26;color:var(--color-success)}.artist-result.is-late{background:var(--color-surface-alt, rgba(255, 255, 255, .05));color:var(--color-text-muted)}body.theme-dark .artist-option-btn{background:#ffffff0d;border-color:var(--color-border-neon);color:var(--color-text-white)}body.theme-dark .artist-option-btn:hover{background:#ffffff1a}@media(prefers-reduced-motion:reduce){.artist-option-btn.is-loading{animation:none;opacity:.7}.artist-option-btn.is-wrong{animation:none;opacity:.5}}.artist-reveal-section{padding:var(--space-md);margin-bottom:var(--space-md);background:var(--color-surface-alt, rgba(255, 255, 255, .05));border-radius:var(--radius-lg)}.artist-reveal-section .section-content-padded{text-align:center}.artist-reveal-label{font-size:var(--font-size-sm);color:var(--color-text-muted);text-transform:uppercase;letter-spacing:.5px;margin-bottom:var(--space-xs)}.artist-reveal-name{font-size:var(--font-size-xl);font-weight:700;color:var(--color-text);margin-bottom:var(--space-sm)}.artist-reveal-winner{font-size:var(--font-size-md);padding:var(--space-xs) var(--space-md);border-radius:var(--radius-md);display:inline-block}.artist-reveal-winner.is-you{background:#22c55e26;color:var(--color-success);font-weight:600}.artist-reveal-winner.is-other{color:var(--color-text-muted)}.artist-reveal-no-winner{color:var(--color-text-muted);font-style:italic}body.theme-dark .artist-reveal-section{background:var(--color-dark-surface-alt, #16213e)}.artist-bonus-row .result-value{color:var(--color-success);font-weight:600}.player-card-artist-badge{font-size:var(--font-size-xs);color:var(--color-success);background:#22c55e1a;padding:2px 6px;border-radius:var(--radius-sm);margin-left:var(--space-xs)}.movie-challenge{width:100%}.movie-challenge .section-header{display:flex;align-items:center;gap:var(--space-sm);flex-wrap:wrap}.movie-options-grid{display:grid;grid-template-columns:1fr;gap:var(--space-sm)}@media(min-width:480px){.movie-options-grid{grid-template-columns:1fr 1fr}}.movie-option-btn{display:flex;align-items:center;justify-content:center;min-height:44px;padding:var(--space-sm) var(--space-md);border:2px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface);color:var(--color-text);font-size:var(--font-size-md);font-weight:500;cursor:pointer;transition:all .2s ease;position:relative;text-align:center}.movie-option-btn:active{transform:scale(.98)}.movie-option-btn.is-loading{animation:moviePulse 1s infinite}@keyframes moviePulse{0%,to{opacity:1}50%{opacity:.6}}.movie-option-btn.is-correct,.movie-option-btn.is-winner{background:var(--color-success);border-color:var(--color-success);color:#fff}.movie-option-btn.is-winner{box-shadow:var(--glow-primary)}.movie-option-btn.is-wrong{animation:movieWrongFlash .5s ease}.movie-option-btn.is-wrong.is-selected{background:var(--color-error);border-color:var(--color-error);color:#fff;animation:none;opacity:.8}@keyframes movieWrongFlash{0%,to{background:var(--color-surface)}50%{background:#ef44444d}}.movie-option-btn.is-disabled{opacity:.5;pointer-events:none}.movie-rank-badge{position:absolute;right:var(--space-sm);font-size:var(--font-size-sm);font-weight:700;color:#fff;background:#0003;padding:2px 6px;border-radius:var(--radius-sm)}.movie-result{margin-top:var(--space-md);padding:var(--space-sm) var(--space-md);border-radius:var(--radius-md);text-align:center;font-weight:500}.movie-result.is-winner{background:#22c55e26;color:var(--color-success)}.movie-result.is-late{background:var(--color-surface-alt, rgba(255, 255, 255, .05));color:var(--color-text-muted)}body.theme-dark .movie-option-btn{background:#ffffff0d;border-color:var(--color-border-neon);color:var(--color-text-white)}body.theme-dark .movie-option-btn:hover{background:#ffffff1a}@media(prefers-reduced-motion:reduce){.movie-option-btn.is-loading{animation:none;opacity:.7}.movie-option-btn.is-wrong{animation:none;opacity:.5}}.movie-reveal-section{padding:var(--space-md);margin-bottom:var(--space-md);background:var(--color-surface-alt, rgba(255, 255, 255, .05));border-radius:var(--radius-lg)}.movie-reveal-section .section-content-padded{text-align:center}.movie-reveal-name{font-size:var(--font-size-xl);font-weight:700;color:var(--color-text);margin-bottom:var(--space-sm)}.movie-reveal-winners{margin-top:var(--space-sm)}.movie-reveal-winners-title{font-size:var(--font-size-sm);color:var(--color-text-muted);text-transform:uppercase;letter-spacing:.5px;margin-bottom:var(--space-xs)}.movie-reveal-winner-entry{font-size:var(--font-size-md);padding:var(--space-xs) var(--space-md);border-radius:var(--radius-md);display:inline-block;margin:2px 4px}.movie-reveal-winner-entry.is-you{background:#22c55e26;color:var(--color-success);font-weight:600}.movie-reveal-winner-entry.is-other{color:var(--color-text-muted)}.movie-reveal-no-winner{color:var(--color-text-muted);font-style:italic;font-size:var(--font-size-md);padding:var(--space-xs) var(--space-md)}body.theme-dark .movie-reveal-section{background:var(--color-dark-surface-alt, #16213e)}.year-selector-section{width:100%;padding-bottom:max(var(--space-md),env(safe-area-inset-bottom))}.year-selector{width:100%}.year-display{display:flex;align-items:center;justify-content:center;gap:var(--space-sm);margin-bottom:var(--space-md)}.year-adjust-btn{width:48px;height:48px;border-radius:50%;border:2px solid var(--color-border-dark);background:transparent;color:var(--color-text-white);font-size:1.5rem;font-weight:700;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;transition:all .15s ease;-webkit-tap-highlight-color:transparent;touch-action:manipulation;user-select:none;flex-shrink:0}.year-adjust-btn:active{background:var(--color-accent-primary);border-color:var(--color-accent-primary);transform:scale(.95)}.year-adjust-btn:disabled{opacity:.3;pointer-events:none}#selected-year{font-size:var(--font-size-year);font-weight:var(--font-weight-bold);color:var(--color-text-primary);font-variant-numeric:tabular-nums}.slider-container{display:flex;align-items:center;gap:var(--space-sm);margin-bottom:var(--space-lg)}.slider-label{font-size:var(--font-size-sm);color:var(--color-text-muted);min-width:40px}.slider-label--min{text-align:right}.slider-label--max{text-align:left}.year-slider{-webkit-appearance:none;appearance:none;flex:1;height:var(--space-sm);background:var(--color-border-light);border-radius:var(--radius-sm);outline:none}.year-slider::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:44px;height:44px;background:var(--color-accent-brand);border-radius:50%;cursor:pointer;border:4px solid var(--color-bg-white);box-shadow:var(--shadow-md);transition:transform .1s ease}.year-slider::-webkit-slider-thumb:active{transform:scale(1.1)}.year-slider::-moz-range-thumb{width:44px;height:44px;background:var(--color-accent-brand);border-radius:50%;cursor:pointer;border:4px solid var(--color-bg-white);box-shadow:var(--shadow-md)}.submit-btn{width:100%;padding:var(--space-lg) var(--space-lg);font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);color:var(--color-text-white);background:var(--color-accent-brand);border:none;border-radius:var(--radius-lg);cursor:pointer;transition:all var(--transition-fast);min-height:56px}.submit-btn:hover{background:var(--color-accent-brand-hover)}.submit-btn:active{transform:scale(.98)}.submit-btn:disabled{background:var(--color-text-light);cursor:not-allowed;transform:none}.submit-btn.is-loading{color:transparent;position:relative}.submit-btn.is-loading:after{content:"";position:absolute;width:24px;height:24px;border:3px solid var(--color-bg-white);border-top-color:transparent;border-radius:50%;animation:spin .8s linear infinite;left:50%;top:50%;margin-left:-12px;margin-top:-12px}.submit-btn.is-error{background:var(--color-error)}.submitted-confirmation{display:flex;align-items:center;justify-content:center;gap:var(--space-sm);padding:var(--space-md);background:var(--color-success);color:var(--color-text-white);border-radius:var(--radius-lg);font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold)}.submitted-confirmation .checkmark{font-size:var(--font-size-2xl)}.year-selector.is-submitted .year-slider{pointer-events:none;opacity:.5}.year-selector.is-submitted #selected-year{color:var(--color-text-muted)}@media(max-width:360px){.album-cover-container{max-width:250px}.timer{font-size:var(--font-size-2xl)}}@media(min-width:768px){.album-cover-container{max-width:350px}.timer{font-size:var(--font-size-hero)}}@media(min-width:768px){body{max-width:800px;margin:0 auto;padding:var(--space-lg)}header h1{font-size:var(--font-size-4xl)}.status-section h2,.card-section h2{font-size:var(--font-size-lg)}.card-section{padding:var(--space-md) var(--space-lg)}}.reveal-container{display:flex;flex-direction:column;align-items:center;padding:var(--space-lg);width:100%;margin:0 auto;text-align:center}.reveal-container--compact{padding:var(--space-md);gap:var(--space-sm);align-items:stretch}.reveal-container--duel{padding:var(--space-md);gap:var(--space-sm);align-items:stretch;text-align:left}.reveal-header-compact{display:flex;align-items:center;justify-content:space-between;padding:var(--space-xs) 0;margin-bottom:var(--space-xs)}.reveal-header-left{display:flex;align-items:center;gap:var(--space-xs)}.reveal-header-compact .section-icon{font-size:1rem}.reveal-header-compact .round-indicator-text{font-size:.875rem;color:var(--color-text-neon-muted)}.reveal-song-hero{display:flex;align-items:center;gap:var(--space-md);padding:var(--space-sm);background:var(--color-surface-dark);border:1px solid var(--color-border-neon);border-radius:var(--radius-md);margin-bottom:var(--space-sm)}.reveal-album-cover-compact{width:80px;height:80px;object-fit:cover;border-radius:var(--radius-md);flex-shrink:0}.reveal-song-info{flex:1;min-width:0;text-align:left}.reveal-song-info .song-title{font-size:1rem;font-weight:600;color:var(--color-text-white);margin-bottom:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.reveal-song-info .song-artist{font-size:.875rem;color:var(--color-text-neon-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.reveal-year-section{text-align:center;padding:var(--space-sm) 0}.reveal-emotion-inline{font-size:1.25rem;font-weight:700;margin-bottom:var(--space-xs);animation:reveal-emotion-entrance .5s ease-out}.reveal-year-section .correct-year-label{font-size:.75rem;text-transform:uppercase;letter-spacing:.05em;color:var(--color-text-neon-muted);margin-bottom:var(--space-xs)}.reveal-year-section .correct-year{font-size:3rem}.personal-result-compact{display:flex;align-items:center;justify-content:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);background:#00f5ff1a;border:1px solid var(--color-border-neon);border-radius:var(--radius-md);margin-bottom:var(--space-sm)}.result-content-inline{font-size:.875rem;color:var(--color-text-white)}.artist-reveal-compact{display:flex;align-items:center;justify-content:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);background:var(--color-surface-dark);border:1px solid var(--color-border-neon);border-radius:var(--radius-md);margin-bottom:var(--space-sm)}.artist-reveal-icon{font-size:1rem}.artist-reveal-name-inline{font-weight:600;color:var(--color-accent-secondary)}.artist-reveal-winner-inline{font-size:.75rem;color:var(--color-text-neon-muted)}.artist-reveal-winner-inline:before{content:"\2022";margin-right:var(--space-xs)}.fun-fact-section{text-align:left}.fun-fact-section .fun-fact-text{font-size:.875rem;color:var(--color-text-white);line-height:1.5;margin-bottom:var(--space-sm)}.fun-fact-section .song-rich-info{font-size:.75rem;color:var(--color-text-neon-muted)}.section-content-padded{padding:0 var(--space-md) var(--space-md)}.card-section .section-content-padded{padding:0 0 var(--space-sm)}.guesses-section{text-align:left}.reveal-results-grid{width:100%}.personal-result-section{text-align:left}.personal-result-section .result-row{display:flex;justify-content:space-between;padding:var(--space-xs) 0;border-bottom:1px solid rgba(255,255,255,.05)}.personal-result-section .result-row:last-child{border-bottom:none}.artist-reveal-section{text-align:left}.artist-reveal-section .artist-reveal-name{font-size:1.25rem;font-weight:700;color:var(--color-accent-secondary);margin-bottom:var(--space-xs)}.artist-reveal-section .artist-reveal-winner{font-size:.875rem;color:var(--color-text-neon-muted)}.round-analytics-section{width:100%;background:var(--color-surface-dark);border:1px solid var(--color-border-neon);border-radius:var(--radius-md);overflow:hidden;text-align:left}.round-analytics-section .section-header-collapsible{display:flex;align-items:center;gap:var(--space-sm);width:100%;padding:var(--space-sm) var(--space-md);background:transparent;border:none;color:var(--color-text-white);font-size:.875rem;font-weight:600;cursor:pointer;text-align:left}.round-analytics-section .section-header-collapsible .section-icon{font-size:1rem}.round-analytics-section .section-header-collapsible .section-summary{margin-left:auto;font-size:.75rem;font-weight:400;color:var(--color-accent-secondary);background:#00f5ff1a;padding:2px 8px;border-radius:var(--radius-sm)}.round-analytics-section .section-header-collapsible .section-toggle{margin-left:var(--space-sm);font-size:.625rem;color:var(--color-text-neon-muted);transition:transform .2s ease}.round-analytics-section .section-content{padding:0 var(--space-md) var(--space-sm)}.round-analytics-section.collapsed .section-content{display:none}.round-analytics-section:not(.collapsed) .section-toggle{transform:rotate(180deg)}.reveal-round-info{font-size:var(--font-size-base);color:var(--color-text-muted);margin-bottom:var(--space-md)}.reveal-album{margin-bottom:var(--space-lg)}.reveal-album-cover{width:150px;height:150px;object-fit:cover;border-radius:var(--radius-lg);box-shadow:var(--shadow-lg)}.correct-year-container{margin-bottom:var(--space-md)}.correct-year-label{font-size:var(--font-size-md);color:var(--color-text-muted);margin-bottom:var(--space-sm)}.correct-year{font-size:var(--font-size-hero);font-weight:var(--font-weight-extrabold);color:var(--color-success);font-variant-numeric:tabular-nums;animation:reveal-pop var(--transition-slow) ease-out}@keyframes reveal-pop{0%{transform:scale(.5);opacity:0}70%{transform:scale(1.1)}to{transform:scale(1);opacity:1}}.song-info{margin-bottom:var(--space-md)}.song-title{font-size:var(--font-size-xl);font-weight:var(--font-weight-semibold);color:var(--color-text-primary);margin-bottom:var(--space-xs)}.song-artist{font-size:var(--font-size-md);color:var(--color-text-muted)}.fun-fact-container{display:flex;flex-direction:column;gap:var(--space-sm);background:var(--color-warning-light);padding:var(--space-md);border-radius:var(--radius-lg);margin-bottom:var(--space-lg);text-align:left;max-width:100%}.fun-fact-header{display:flex;align-items:flex-start;gap:var(--space-sm)}.fun-fact-icon{font-size:var(--font-size-xl);flex-shrink:0}.fun-fact-text{font-size:var(--font-size-base);color:#92400e;line-height:1.4}.fun-fact-header:empty,.fun-fact-text:empty{display:none}.song-rich-info{text-align:left}.song-rich-info:empty{display:none}.song-badges-row{display:flex;flex-wrap:wrap;justify-content:center;gap:var(--space-sm);margin-top:var(--space-sm);padding-top:var(--space-sm);border-top:1px solid rgba(120,53,15,.15)}.song-badges-row:first-child{border-top:none;padding-top:0}.song-badge{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);border-radius:20px;border:1px solid;box-shadow:0 1px 3px #0000001a;white-space:nowrap}.song-badge-icon{font-size:14px;line-height:1}.song-badge--chart{background:linear-gradient(135deg,#dbeafe,#bfdbfe);color:#1e40af;border-color:#93c5fd}.song-badge--chart .chart-weeks{font-weight:400;opacity:.8;font-size:11px}.song-badge--platinum{background:linear-gradient(135deg,#f1f5f9,#e2e8f0);color:#475569;border-color:#cbd5e1}.song-badge--gold{background:linear-gradient(135deg,#fef3c7,#fde68a);color:#92400e;border-color:#fcd34d}.song-badge--diamond{background:linear-gradient(135deg,#e0f2fe,#bae6fd);color:#0369a1;border-color:#7dd3fc}.song-badge--award{background:linear-gradient(135deg,#ffedd5,#fed7aa);color:#9a3412;border-color:#fdba74}.song-badge--grammy{background:linear-gradient(135deg,#fef3c7,#fde68a);color:#78350f;border-color:#f59e0b}.song-badge--eurovision{background:linear-gradient(135deg,#ede9fe,#ddd6fe);color:#5b21b6;border-color:#a78bfa}.song-badge--oscar,.song-badge--academy{background:linear-gradient(135deg,#fef3c7,#fde68a);color:#78350f;border-color:#f59e0b}.song-badge--halloffame{background:linear-gradient(135deg,#dbeafe,#bfdbfe);color:#1e40af;border-color:#60a5fa}.song-badges-more{font-size:var(--font-size-xs);color:#78350f;font-style:italic;opacity:.8}.song-difficulty{display:flex;align-items:center;gap:var(--space-sm);justify-content:center;margin-top:var(--space-sm);opacity:0;animation:fadeIn .5s ease-out forwards;animation-delay:.3s}.difficulty-stars{font-size:1.2rem;letter-spacing:.1em}.difficulty-1{color:var(--color-success-neon);text-shadow:0 0 10px var(--color-success-neon)}.difficulty-2{color:var(--color-warning);text-shadow:0 0 10px var(--color-warning)}.difficulty-3{color:var(--color-warning-alt);text-shadow:0 0 10px var(--color-warning-alt)}.difficulty-4{color:var(--color-accent-primary);text-shadow:0 0 10px var(--color-accent-primary)}.difficulty-label{font-weight:700;text-transform:uppercase;letter-spacing:.05em;font-size:var(--font-size-sm)}.difficulty-accuracy{font-size:.85em;opacity:.7}.superlatives-container{display:flex;flex-wrap:wrap;justify-content:center;gap:var(--space-md);margin:var(--space-lg) 0;padding:0 var(--space-md)}.superlative-card{display:flex;flex-direction:column;align-items:center;padding:var(--space-md);min-width:120px;max-width:160px;background:var(--color-dark-surface);border-radius:var(--radius-lg);border:1px solid rgba(255,255,255,.1);opacity:0;animation:superlativeSlideIn .5s ease-out forwards}@keyframes superlativeSlideIn{0%{opacity:0;transform:translateY(20px) scale(.9)}to{opacity:1;transform:translateY(0) scale(1)}}.superlative-emoji{font-size:2rem;margin-bottom:var(--space-xs)}.superlative-title{font-weight:700;text-transform:uppercase;letter-spacing:.05em;font-size:var(--font-size-xs);color:var(--color-accent-secondary);text-align:center;margin-bottom:var(--space-xs)}.superlative-player{font-weight:700;font-size:var(--font-size-base);color:var(--color-dark-text-primary);text-align:center;margin-bottom:var(--space-xs)}.superlative-value{font-size:var(--font-size-sm);color:var(--color-dark-text-secondary);text-align:center}.superlative-card--speed_demon{border-color:var(--color-warning);box-shadow:0 0 15px #f59e0b33}.superlative-card--lucky_streak{border-color:var(--color-error);box-shadow:0 0 15px #ef444433}.superlative-card--risk_taker{border-color:var(--color-purple-primary);box-shadow:0 0 15px #8b5cf633}.superlative-card--clutch_player{border-color:var(--color-success-neon);box-shadow:0 0 15px #39ff1433}.superlative-card--close_calls{border-color:var(--color-accent-secondary);box-shadow:0 0 15px #00f5ff33}.highlights-container{width:100%;margin-top:var(--space-lg);margin-bottom:var(--space-lg)}.highlights-header{font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);color:var(--color-text-white);text-align:center;margin-bottom:var(--space-md)}.highlights-list{display:flex;flex-direction:column;gap:var(--space-sm)}.highlight-card{display:flex;align-items:center;gap:var(--space-md);padding:var(--space-md);background:var(--color-dark-surface);border-radius:var(--radius-lg);border:1px solid rgba(255,255,255,.1);opacity:0;animation:highlightFadeIn .5s ease-out forwards}@keyframes highlightFadeIn{0%{opacity:0;transform:translate(-20px)}to{opacity:1;transform:translate(0)}}.highlight-emoji{font-size:1.8rem;flex-shrink:0;width:48px;text-align:center}.highlight-content{flex:1;min-width:0}.highlight-text{font-size:var(--font-size-base);color:var(--color-dark-text-primary);line-height:1.4}.highlight-round{font-size:var(--font-size-xs);color:var(--color-dark-text-secondary);margin-top:var(--space-xs)}@media(max-width:480px){.highlight-card{padding:var(--space-sm);gap:var(--space-sm)}.highlight-emoji{font-size:1.4rem;width:36px}.highlight-text{font-size:var(--font-size-sm)}}.round-analytics{width:100%;margin-top:var(--space-lg);margin-bottom:var(--space-lg);padding:var(--space-md);background:var(--color-dark-surface);border-radius:var(--radius-lg);text-align:center}.analytics-title{font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);color:var(--color-text-white);margin-bottom:var(--space-md)}.analytics-stats-row{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--space-lg);margin-bottom:var(--space-xs)}.stat-primary{text-align:left}.stat-primary .stat-label{font-size:var(--font-size-sm);color:var(--color-text-neon-muted);display:block;margin-bottom:var(--space-xs)}.stat-primary .stat-value{font-size:var(--font-size-2xl);font-weight:var(--font-weight-bold);color:var(--color-accent-secondary)}.stat-secondary{text-align:right}.stat-secondary .stat-value{font-size:var(--font-size-2xl);font-weight:var(--font-weight-bold);color:var(--color-success)}.stat-secondary .stat-label{font-size:var(--font-size-sm);color:var(--color-text-neon-muted);display:block}.stat-comparison-line{font-size:var(--font-size-sm);color:var(--color-text-neon-muted);margin-bottom:var(--space-md)}.analytics-histogram{margin-bottom:var(--space-lg)}.histogram-title{font-size:var(--font-size-base);color:var(--color-text-neon-muted);margin-bottom:var(--space-sm)}.dotaxis-wrap{margin:14px 0 16px}.dotaxis-axis{position:relative;height:88px;margin:0 14px}.dotaxis-line{position:absolute;left:0;right:0;top:52px;height:2px;background:#ffffff1f;border-radius:2px}.dotaxis-tick{position:absolute;top:48px;width:1px;height:10px;background:#ffffff2e}.dotaxis-tick-label{position:absolute;top:64px;font-size:9px;color:#ffffff80;transform:translate(-50%);letter-spacing:.3px;font-weight:500}.dotaxis-marker{position:absolute;top:4px;bottom:18px;width:2px;background:linear-gradient(180deg,transparent,var(--color-cyan, #00d4ff) 30%,var(--color-cyan, #00d4ff) 80%,transparent);box-shadow:0 0 8px var(--color-cyan, #00d4ff),0 0 16px #00d4ff99}.dotaxis-marker-label{position:absolute;top:-4px;left:50%;transform:translate(-50%);background:var(--color-cyan, #00d4ff);color:#0a0a0e;font-family:var(--font-family-display, "Outfit", sans-serif);font-weight:900;font-size:12px;padding:3px 8px;border-radius:6px;box-shadow:0 0 14px #00d4ff99;white-space:nowrap}.dotaxis-dot{position:absolute;top:39px;width:26px;height:26px;border-radius:50%;transform:translate(-50%);display:flex;align-items:center;justify-content:center;font-family:var(--font-family-display, "Outfit", sans-serif);font-weight:900;font-size:12px;color:#fff;text-shadow:0 1px 2px rgba(0,0,0,.5);box-shadow:0 0 0 3px var(--color-bg-primary, #0d0d12),0 4px 10px #0006;cursor:default}.dotaxis-dot--c1{background:linear-gradient(135deg,#ff6ec7,#d846a7)}.dotaxis-dot--c2{background:linear-gradient(135deg,#6e3bff,#4a25c8)}.dotaxis-dot--c3{background:linear-gradient(135deg,#ffd60a,#e6b800);color:#1a1a22;text-shadow:none}.dotaxis-dot--c4{background:linear-gradient(135deg,#00d4ff,#008abf)}.dotaxis-dot--correct{box-shadow:0 0 0 3px var(--color-bg-primary, #0d0d12),0 0 18px currentColor,0 4px 10px #0006}.dotaxis-dot--me{box-shadow:0 0 0 3px var(--color-bg-primary, #0d0d12),0 0 0 5px #ff9f4399,0 4px 10px #0006}.dotaxis-dot--correct.dotaxis-dot--me{box-shadow:0 0 0 3px var(--color-bg-primary, #0d0d12),0 0 0 5px #ff9f4399,0 0 22px currentColor,0 4px 10px #0006}.dotaxis-score{position:absolute;top:12px;transform:translate(-50%);font-family:var(--font-family-display, "Outfit", sans-serif);font-weight:800;font-size:11px;padding:2px 6px;border-radius:6px;background:#ffffff14;white-space:nowrap}.dotaxis-score--pos{background:#00d4ff2e;color:var(--color-cyan, #00d4ff)}.dotaxis-score--zero{color:#ffffff59}.dotaxis-legend{display:flex;flex-wrap:wrap;justify-content:center;gap:8px 14px;font-size:11px;color:#ffffffbf;margin-top:4px}.dotaxis-legend-entry{display:inline-flex;align-items:center;gap:5px}.dotaxis-legend-dot{display:inline-block;width:11px;height:11px;border-radius:50%;flex-shrink:0}.dotaxis-legend-medal{font-size:13px;line-height:1}.dotaxis-legend-me{color:#ff9f43;font-weight:700;font-size:10px;margin-left:2px;letter-spacing:.3px}.histogram-bars{display:flex;justify-content:space-between;align-items:flex-end;height:120px;gap:var(--space-xs);padding:0 var(--space-xs)}.histogram-bar-wrapper{flex:1;display:flex;flex-direction:column;align-items:center;height:100%;animation:histogram-fade-in .3s ease forwards;opacity:0}.histogram-bar{width:100%;max-width:40px;background:linear-gradient(180deg,var(--color-accent-primary),var(--color-accent-brand));border-radius:var(--radius-sm) var(--radius-sm) 0 0;display:flex;align-items:flex-start;justify-content:center;transition:height .5s ease;min-height:0}.histogram-bar.is-correct{background:linear-gradient(180deg,var(--color-success-neon),var(--color-success));box-shadow:var(--glow-success)}.bar-count{font-size:var(--font-size-xs);font-weight:var(--font-weight-bold);color:var(--color-text-white);padding-top:var(--space-xs)}.histogram-label{font-size:var(--font-size-xs);color:var(--color-text-neon-muted);margin-top:var(--space-xs)}@keyframes histogram-fade-in{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.analytics-achievements{display:flex;flex-direction:column;gap:var(--space-sm);text-align:left}.achievement-item{display:flex;align-items:center;gap:var(--space-sm);font-size:var(--font-size-sm);color:var(--color-text-white)}.achievement-emoji{font-size:var(--font-size-lg)}.achievement-label{color:var(--color-text-neon-muted)}.achievement-names{font-weight:var(--font-weight-semibold)}.achievement-value{color:var(--color-text-neon-muted)}.analytics-empty{text-align:center;color:var(--color-text-neon-muted);padding:var(--space-lg);font-style:italic}@media(prefers-reduced-motion:reduce){.histogram-bar-wrapper{animation:none;opacity:1}.histogram-bar{transition:none}}.reveal-emotion{text-align:center;font-size:var(--font-size-2xl);font-weight:var(--font-weight-bold);margin-bottom:var(--space-md);animation:reveal-emotion-entrance .5s ease-out}.reveal-emotion--exact{color:var(--color-success);text-shadow:0 0 20px var(--color-success)}.reveal-emotion--close{color:var(--color-warning);animation:reveal-emotion-entrance .5s ease-out,reveal-shake .5s ease-in-out .5s}.reveal-emotion--wrong{color:var(--color-text-muted)}.reveal-emotion--missed{color:var(--color-text-muted);opacity:.7}.reveal-emotion-subtitle{font-size:var(--font-size-base);font-weight:var(--font-weight-normal);margin-top:var(--space-xs);opacity:.8}@keyframes reveal-emotion-entrance{0%{opacity:0;transform:scale(.8)}50%{transform:scale(1.1)}to{opacity:1;transform:scale(1)}}@keyframes reveal-shake{0%,to{transform:translate(0)}20%,60%{transform:translate(-5px)}40%,80%{transform:translate(5px)}}.confetti-canvas{position:fixed;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:var(--z-modal)}body>canvas[style*="position: fixed"]{pointer-events:none!important}.personal-result.is-delayed{opacity:0;animation:fade-in-delay .5s ease-out 1s forwards}@keyframes fade-in-delay{to{opacity:1}}@media(prefers-reduced-motion:reduce){.reveal-emotion,.reveal-emotion--close{animation:none}.personal-result.is-delayed{opacity:1;animation:none}}.personal-result{width:100%;background:var(--color-bg-card-alt);padding:var(--space-md);border-radius:var(--radius-lg);margin-bottom:var(--space-lg)}.result-header{font-size:var(--font-size-base);font-weight:var(--font-weight-semibold);color:var(--color-text-muted);margin-bottom:var(--space-sm)}.result-content{display:flex;flex-direction:column;gap:var(--space-sm)}.result-row{display:flex;justify-content:space-between;align-items:center}.result-label{font-size:var(--font-size-base);color:var(--color-text-muted)}.result-value{font-size:var(--font-size-md);font-weight:var(--font-weight-semibold);color:var(--color-text-primary)}.result-value.is-exact{color:var(--color-success)}.result-value.is-close{color:var(--color-warning)}.result-value.is-far{color:var(--color-error)}.result-value.is-bonus{color:var(--color-warning);font-weight:var(--font-weight-bold)}.result-score{font-size:var(--font-size-4xl);font-weight:var(--font-weight-bold);color:var(--color-accent-brand);margin-top:var(--space-sm)}.result-missed{font-size:var(--font-size-md);color:var(--color-error);font-weight:var(--font-weight-semibold)}.result-value.is-streak{color:var(--color-error);font-weight:var(--font-weight-bold)}.streak-bonus-row{background:linear-gradient(90deg,var(--color-warning-light),#fde68a);padding:var(--space-sm) var(--space-md);border-radius:var(--radius-md);margin:var(--space-sm) 0;color:#1a1a1a}.result-total{font-size:var(--font-size-2xl);font-weight:var(--font-weight-bold);color:var(--color-success);margin-top:var(--space-sm);padding-top:var(--space-sm);border-top:2px dashed var(--color-border-light)}.streak-indicator{display:inline-flex;align-items:center;gap:2px;font-size:var(--font-size-sm);color:var(--color-warning);font-weight:var(--font-weight-semibold)}.streak-indicator:before{content:"\1f525"}.bet-container{margin-bottom:var(--space-md);position:relative;z-index:1}.bet-toggle{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-xl);background:var(--color-bg-card-alt);border:2px solid var(--color-border-medium);border-radius:var(--radius-lg);cursor:pointer;transition:background var(--transition-fast),border-color var(--transition-fast),color var(--transition-fast);font-size:var(--font-size-base);font-weight:var(--font-weight-semibold);color:var(--color-text-muted);width:100%;justify-content:center;-webkit-tap-highlight-color:transparent;-webkit-user-select:none;user-select:none;touch-action:manipulation}.bet-toggle:hover{border-color:var(--color-text-light)}.bet-toggle.is-active{background:var(--color-warning-light);border-color:var(--color-warning);color:#92400e}.bet-toggle.is-active .bet-icon{animation:dice-shake var(--transition-slow) ease}@keyframes dice-shake{0%,to{transform:rotate(0)}25%{transform:rotate(-10deg)}75%{transform:rotate(10deg)}}body.theme-dark .bet-toggle{background:#ffffff1a;border:1px solid rgba(255,255,255,.2);color:var(--color-text-white)}body.theme-dark .bet-toggle.is-active{background:var(--color-warning);border-color:var(--color-warning);color:var(--color-text-primary)}.bet-won-row{background:linear-gradient(90deg,var(--color-success-light),#a7f3d0);padding:var(--space-sm) var(--space-sm);border-radius:var(--radius-md);margin:var(--space-sm) 0}.bet-won-row .result-label,body.theme-dark .bet-won-row .result-label{color:#166534}.result-value.is-bet-won,body.theme-dark .result-value.is-bet-won{color:#166534;font-weight:var(--font-weight-bold)}.bet-lost-row{background:linear-gradient(90deg,var(--color-error-light),#fecaca);padding:var(--space-sm) var(--space-sm);border-radius:var(--radius-md);margin:var(--space-sm) 0}.bet-lost-row .result-label,body.theme-dark .bet-lost-row .result-label{color:#991b1b}.result-value.is-bet-lost,body.theme-dark .result-value.is-bet-lost{color:#991b1b;font-weight:var(--font-weight-bold)}.result-missed-container{display:flex;flex-direction:column;align-items:center;gap:var(--space-sm);padding:var(--space-md)}.result-missed-icon{font-size:var(--font-size-2xl)}.result-missed-text{font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);color:var(--color-text-muted)}.streak-broken{display:flex;align-items:center;gap:var(--space-sm);margin-top:var(--space-sm);padding:var(--space-sm) var(--space-md);background:var(--color-error-light);border-radius:var(--radius-md)}.streak-broken-icon{font-size:var(--font-size-xl)}.streak-broken-text{font-size:var(--font-size-base);font-weight:var(--font-weight-semibold);color:var(--color-error-dark)}.streak-shield-used{display:flex;align-items:center;gap:var(--space-sm);margin-top:var(--space-sm);padding:var(--space-sm) var(--space-md);background:var(--color-success-light);border-radius:var(--radius-md)}.streak-shield-icon{font-size:var(--font-size-xl)}.streak-shield-text{font-size:var(--font-size-base);font-weight:var(--font-weight-semibold);color:var(--color-success-hover)}.result-score.is-zero{color:var(--color-text-light);font-size:var(--font-size-2xl)}.leaderboard-section{width:100%;background:var(--color-surface-dark);border:1px solid var(--color-border-neon);border-radius:var(--radius-md);overflow:hidden}.leaderboard-section .section-header-collapsible{display:flex;align-items:center;gap:var(--space-sm);width:100%;padding:var(--space-sm) var(--space-md);background:transparent;border:none;color:var(--color-text-white);font-size:.875rem;font-weight:600;cursor:pointer;text-align:left}.leaderboard-section .section-header-collapsible .section-icon{font-size:1rem}.leaderboard-section .section-header-collapsible .section-summary{margin-left:auto;font-size:.75rem;font-weight:400;color:var(--color-accent-secondary);background:#00f5ff1a;padding:2px 8px;border-radius:var(--radius-sm)}.leaderboard-section .section-header-collapsible .section-toggle{margin-left:var(--space-sm);font-size:.625rem;color:var(--color-text-neon-muted);transition:transform .2s ease}.leaderboard-section .section-content{padding:0}.leaderboard-section .leaderboard-list{max-height:200px;overflow-y:auto}.leaderboard-section.collapsed .section-content{display:none}.leaderboard-section:not(.collapsed) .section-toggle{transform:rotate(180deg)}.leaderboard{background:var(--color-bg-white);border-radius:var(--radius-lg);box-shadow:var(--shadow-md);overflow:hidden;width:100%;margin-bottom:var(--space-md)}.leaderboard.is-compact .leaderboard-list{max-height:120px}.leaderboard.is-expanded .leaderboard-list{max-height:400px}.leaderboard.is-prominent{margin-top:var(--space-md)}.leaderboard.is-prominent .leaderboard-list{max-height:280px}.leaderboard-header{display:flex;justify-content:space-between;align-items:center;padding:var(--space-sm) var(--space-md);background:var(--color-bg-card-alt);border-bottom:1px solid var(--color-border-light)}.leaderboard-title{font-size:var(--font-size-base);font-weight:var(--font-weight-semibold);color:var(--color-text-secondary)}.leaderboard-toggle{background:none;border:none;cursor:pointer;padding:var(--space-xs);min-width:auto;min-height:auto;color:var(--color-text-muted)}.leaderboard-list{max-height:200px;overflow-y:auto;contain:layout style paint;will-change:transform}.leaderboard-spacer-top,.leaderboard-spacer-bottom{flex-shrink:0;pointer-events:none}.leaderboard-sentinel{flex-shrink:0;pointer-events:none;visibility:hidden}.leaderboard-entry{display:flex;align-items:center;gap:var(--space-sm);padding:10px var(--space-md);border-bottom:1px solid var(--color-bg-card-alt);transition:background var(--transition-fast);contain:content;height:48px;box-sizing:border-box}.leaderboard-entry:last-child{border-bottom:none}.leaderboard-entry.is-current{background:#eff6ff;border-left:3px solid var(--color-accent-blue)}.leaderboard-entry.is-top-1{background:linear-gradient(90deg,var(--color-warning-light),#fde68a)}.leaderboard-entry.is-top-1 .entry-rank{color:#b45309;font-weight:var(--font-weight-bold)}.leaderboard-entry.is-top-2{background:linear-gradient(90deg,var(--color-bg-card-alt),var(--color-border-light))}.leaderboard-entry.is-top-2 .entry-rank{color:var(--color-text-muted);font-weight:var(--font-weight-bold)}.leaderboard-entry.is-top-3{background:linear-gradient(90deg,#fed7aa,#fdba74)}.leaderboard-entry.is-top-3 .entry-rank{color:#c2410c;font-weight:var(--font-weight-bold)}.entry-rank{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-text-muted);min-width:28px}.entry-name{flex:1;font-size:var(--font-size-base);font-weight:var(--font-weight-medium);color:var(--color-text-primary);display:flex;align-items:center;gap:var(--space-xs);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.entry-meta{display:flex;align-items:center;gap:var(--space-xs)}.entry-score{font-size:var(--font-size-base);font-weight:var(--font-weight-bold);color:var(--color-accent-brand);min-width:40px;text-align:right}.rank-up{font-size:var(--font-size-xs);color:var(--color-success);font-weight:var(--font-weight-semibold)}.rank-down{font-size:var(--font-size-xs);color:var(--color-error);font-weight:var(--font-weight-semibold)}.leaderboard-entry--climbing{animation:leaderboard-climb .4s ease-out}.leaderboard-entry--falling{animation:leaderboard-fall .4s ease-out}.leaderboard-entry--disconnected{opacity:.5;transition:opacity .3s ease}@keyframes leaderboard-climb{0%{transform:translateY(10px);opacity:.7;background:#0f83}to{transform:translateY(0);opacity:1;background:transparent}}@keyframes leaderboard-fall{0%{transform:translateY(-10px);opacity:.7;background:#ff004033}to{transform:translateY(0);opacity:1;background:transparent}}.streak-indicator{font-size:var(--font-size-xs);color:var(--color-warning)}.streak-indicator--hot{text-shadow:0 0 8px var(--color-warning);animation:streak-pulse 1s ease-in-out infinite}@keyframes streak-pulse{0%,to{opacity:1}50%{opacity:.7}}.leaderboard-separator{text-align:center;padding:var(--space-xs) var(--space-md);color:var(--color-text-muted);font-size:var(--font-size-sm);border-bottom:1px solid var(--color-bg-card-alt)}@media(prefers-reduced-motion:reduce){.leaderboard-entry--climbing,.leaderboard-entry--falling,.streak-indicator--hot{animation:none}}.leaderboard-you{position:sticky;bottom:0;padding:var(--space-sm) var(--space-md);background:var(--color-accent-blue);color:var(--color-text-white);font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);text-align:center}.end-container{padding:var(--space-lg);max-width:480px;margin:0 auto;text-align:center}.end-header{margin-bottom:var(--space-lg)}.end-title{font-size:var(--font-size-4xl);font-weight:var(--font-weight-extrabold);color:var(--color-text-primary);margin-bottom:var(--space-sm)}.end-subtitle{font-size:var(--font-size-md);color:var(--color-text-muted);margin:0}.podium{display:flex;justify-content:center;align-items:flex-end;gap:var(--space-sm);margin-bottom:var(--space-xl)}.podium-place{display:flex;flex-direction:column;align-items:center;width:100px}.podium-medal{font-size:var(--font-size-4xl);margin-bottom:var(--space-sm)}.podium-name{font-size:var(--font-size-base);font-weight:var(--font-weight-semibold);color:var(--color-text-primary);margin-bottom:var(--space-xs);max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.podium-score{font-size:var(--font-size-sm);color:var(--color-text-muted);margin-bottom:var(--space-sm)}.podium-stand{width:100%;display:flex;align-items:center;justify-content:center;font-size:var(--font-size-2xl);font-weight:var(--font-weight-extrabold);color:var(--color-text-white);border-radius:var(--radius-md) var(--radius-md) 0 0}.podium-1 .podium-stand{height:80px;background:linear-gradient(180deg,#fbbf24,var(--color-warning-dark))}.podium-2 .podium-stand{height:60px;background:linear-gradient(180deg,var(--color-text-light),var(--color-text-muted))}.podium-3 .podium-stand{height:40px;background:linear-gradient(180deg,#fb923c,#c2410c)}.your-result{background:#eff6ff;border-radius:var(--radius-xl);padding:var(--space-lg);margin-bottom:var(--space-lg)}.your-result-header{font-size:var(--font-size-base);font-weight:var(--font-weight-semibold);color:var(--color-accent-blue);margin-bottom:var(--space-sm)}.your-result-rank{font-size:var(--font-size-2xl);font-weight:var(--font-weight-extrabold);color:var(--color-text-primary)}.your-result-score{font-size:var(--font-size-lg);color:var(--color-text-muted);margin-bottom:var(--space-md)}.your-result-stats{display:flex;justify-content:center;gap:var(--space-lg)}.stat{display:flex;flex-direction:column;align-items:center}.stat-value{font-size:var(--font-size-2xl);font-weight:var(--font-weight-bold);color:var(--color-accent-brand)}.stat-label{font-size:var(--font-size-sm);color:var(--color-text-muted)}.final-leaderboard{background:var(--color-bg-white);border-radius:var(--radius-lg);overflow:hidden;margin-bottom:var(--space-lg);box-shadow:var(--shadow-md)}.final-leaderboard-header{padding:var(--space-sm) var(--space-md);background:var(--color-bg-card-alt);font-size:var(--font-size-base);font-weight:var(--font-weight-semibold);color:var(--color-text-secondary);text-align:left}.final-leaderboard-list{max-height:200px;overflow-y:auto}.final-entry{display:flex;align-items:center;padding:10px var(--space-md);border-bottom:1px solid var(--color-bg-card-alt)}.final-entry:last-child{border-bottom:none}.final-entry.is-current{background:#eff6ff}.final-entry--disconnected{opacity:.5}.final-rank{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-text-muted);width:32px}.final-name{flex:1;font-size:var(--font-size-base);color:var(--color-text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.final-score{font-size:var(--font-size-base);font-weight:var(--font-weight-semibold);color:var(--color-accent-brand)}.end-admin-controls{display:flex;flex-direction:column;gap:var(--space-md);margin-bottom:var(--space-md)}.new-game-btn{width:100%;padding:var(--space-md) var(--space-xl);font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);color:var(--color-text-white);background:var(--color-success);border:none;border-radius:var(--radius-lg);cursor:pointer;transition:background var(--transition-fast);min-width:auto;min-height:auto}.new-game-btn:hover{background:var(--color-success-hover)}.new-game-btn:disabled{background:var(--color-text-light);cursor:not-allowed}.end-player-message{color:var(--color-text-muted)}.end-player-message p{margin:0 0 var(--space-sm) 0}.end-hint{font-size:var(--font-size-base)}.rejoin-hint{font-size:var(--font-size-base);color:var(--color-text-muted);margin-top:var(--space-sm)}.reveal-report-row{display:flex;justify-content:center;margin-top:var(--space-md)}.reveal-report-btn{background:none;border:none;padding:var(--space-xs) var(--space-sm);font-size:var(--font-size-sm);color:var(--color-text-muted);cursor:pointer;border-radius:var(--radius-sm);transition:color .15s ease,opacity .15s ease;opacity:.7}.reveal-report-btn:hover{color:var(--color-text-neon-muted);opacity:1}.reveal-report-btn:disabled{cursor:default;opacity:.5}.reveal-admin-controls{margin-top:var(--space-md)}.next-round-btn{padding:var(--space-md) var(--space-xl);font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);color:var(--color-text-white);background:var(--color-accent-brand);border:none;border-radius:var(--radius-lg);cursor:pointer;transition:all var(--transition-fast)}.next-round-btn:hover{background:var(--color-accent-brand-hover)}.next-round-btn:disabled{background:var(--color-text-light);cursor:not-allowed}.next-round-btn.is-final{background:var(--color-success)}.next-round-btn.is-final:hover{background:var(--color-success-hover)}.reveal-admin-buttons{display:flex;flex-direction:column;gap:var(--space-md);align-items:center}@media(min-width:480px){.reveal-admin-buttons{flex-direction:row;justify-content:center}}.invite-btn{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-lg);font-size:var(--font-size-md);font-weight:var(--font-weight-medium);color:var(--color-text-white);background:var(--color-bg-tertiary);border:1px solid var(--color-border-subtle);border-radius:var(--radius-lg);cursor:pointer;transition:all var(--transition-fast);min-height:44px;min-width:44px}.invite-btn:hover{background:var(--color-bg-secondary);border-color:var(--color-border-neon)}.invite-btn:active{transform:scale(.98)}.invite-btn-icon{font-size:var(--font-size-lg)}.invite-btn-label{white-space:nowrap}.invite-modal{position:fixed;inset:0;z-index:var(--z-modal);display:flex;align-items:center;justify-content:center}.invite-modal.hidden{display:none}.invite-modal-backdrop{position:absolute;inset:0;background:#000c}.invite-modal-content{position:relative;background:var(--color-bg-primary);border:1px solid var(--color-border-neon);padding:var(--space-lg);border-radius:var(--radius-xl);text-align:center;max-width:90vw;max-height:90vh;overflow-y:auto;animation:modalFadeIn var(--transition-normal) ease-out}@keyframes modalFadeIn{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.invite-modal-title{font-size:var(--font-size-xl);font-weight:var(--font-weight-bold);color:var(--color-text-white);margin:0 0 var(--space-xs)}.invite-modal-hint{font-size:var(--font-size-sm);color:var(--color-text-muted);margin:0 0 var(--space-md)}.invite-modal-code{display:inline-block;padding:var(--space-md);background:var(--color-bg-white);border-radius:var(--radius-md);margin-bottom:var(--space-md)}.invite-modal-code img{display:block;width:200px;height:200px}@media(min-width:480px){.invite-modal-code img{width:256px;height:256px}}.invite-modal-url-container{display:flex;gap:var(--space-xs);margin-bottom:var(--space-sm);max-width:100%}.invite-modal-url{flex:1;padding:var(--space-sm) var(--space-md);font-size:var(--font-size-sm);font-family:var(--font-family-mono);color:var(--color-text-primary);background:var(--color-bg-secondary);border:1px solid var(--color-border-subtle);border-radius:var(--radius-md);min-width:0;text-overflow:ellipsis}body.theme-dark .invite-modal-url{color:#e2e8f0;background:#ffffff1a;border-color:#ffffff26}.invite-copy-btn{display:flex;align-items:center;justify-content:center;padding:var(--space-sm);min-width:44px;min-height:44px;background:var(--color-accent-brand);border:none;border-radius:var(--radius-md);cursor:pointer;transition:all var(--transition-fast)}.invite-copy-btn:hover{background:var(--color-accent-brand-hover)}.invite-copy-btn:active{transform:scale(.95)}.invite-copy-icon{font-size:var(--font-size-lg)}.invite-copy-feedback{font-size:var(--font-size-sm);color:var(--color-success);margin:0 0 var(--space-md);animation:fadeInOut 2s ease-in-out}.invite-copy-feedback.hidden{display:none}@keyframes fadeInOut{0%,to{opacity:0}10%,80%{opacity:1}}.invite-modal-close{min-width:120px;min-height:48px}.reveal-results-cards{margin-top:var(--space-lg);width:100%;overflow:visible}.results-cards-header{font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);color:var(--color-text-secondary);margin-bottom:var(--space-sm);text-align:center}.results-cards-scroll{display:flex;flex-direction:row;flex-wrap:nowrap;gap:var(--space-sm);width:100%;overflow-x:auto;overflow-y:hidden;padding-bottom:var(--space-xs);-webkit-overflow-scrolling:touch}.results-cards-scroll::-webkit-scrollbar{height:3px}.results-cards-scroll::-webkit-scrollbar-thumb{background:var(--color-border-light);border-radius:2px}.result-card{background:var(--color-bg-card);border-radius:var(--radius-md);padding:var(--space-sm);text-align:center;border:2px solid var(--color-border-light);transition:all var(--transition-fast);flex:1 1 140px;min-width:140px;max-width:220px;box-sizing:border-box}.result-card.is-current{border-color:var(--color-accent-brand);background:#6366f11a}.result-card.is-score-high{border-color:var(--color-success);background:#10b9811a}.result-card.is-score-medium{border-color:var(--color-warning);background:#f59e0b1a}.result-card.is-score-zero{opacity:.6}.card-name{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-bottom:2px}.card-guess{font-size:var(--font-size-xl);font-weight:var(--font-weight-bold);color:var(--color-text-primary)}.card-accuracy{font-size:var(--font-size-xs);color:var(--color-text-muted)}.result-card.is-score-high .card-accuracy{color:var(--color-success);font-weight:var(--font-weight-semibold)}.card-score{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-success);margin-top:2px}.card-bet{margin-left:4px}body.theme-dark .result-card{background:#ffffff0d;border-color:#ffffff1a}body.theme-dark .result-card.is-current{border-color:var(--color-accent-neon);background:#00f5ff1a}body.theme-dark .result-card.is-score-high{border-color:var(--color-success-neon);background:#00ff881a}body.theme-dark .result-card.is-score-medium{border-color:var(--color-warning);background:#f59e0b26}body.theme-dark .card-name,body.theme-dark .card-guess{color:var(--color-text-white)}body.theme-dark .card-accuracy{color:var(--color-text-neon-muted)}body.theme-dark .result-card.is-score-high .card-accuracy,body.theme-dark .card-score{color:var(--color-success-neon)}.admin-control-bar{position:fixed;bottom:0;left:0;right:0;display:flex;justify-content:space-around;align-items:center;padding:var(--space-sm) var(--space-sm);padding-bottom:calc(var(--space-sm) + env(safe-area-inset-bottom));background:#000000e6;border-top:1px solid var(--color-border-dark);z-index:var(--z-control-bar)}.admin-control-bar.hidden{display:none}.control-btn{display:flex;flex-direction:column;align-items:center;justify-content:center;min-width:44px;min-height:44px;padding:var(--space-sm) var(--space-sm);background:#2a2a2a;border:none;border-radius:var(--radius-md);color:var(--color-text-white);cursor:pointer;transition:background var(--transition-fast),opacity var(--transition-fast)}.control-btn:hover:not(.is-disabled){background:#3a3a3a}.control-btn:active:not(.is-disabled){background:#4a4a4a}.control-btn.is-disabled{opacity:.4;cursor:not-allowed}.control-btn--danger{background:#7f1d1d}.control-btn--danger:hover:not(.is-disabled){background:#991b1b}.control-btn.is-stopped{background:var(--color-text-secondary);opacity:.7}.control-btn.is-stopped .control-icon{color:var(--color-success)}.volume-indicator{position:absolute;bottom:100%;left:50%;transform:translate(-50%);background:#000000e6;color:var(--color-text-white);padding:var(--space-sm) var(--space-md);border-radius:var(--radius-md);font-size:var(--font-size-base);font-weight:var(--font-weight-semibold);margin-bottom:var(--space-sm);opacity:0;transition:opacity var(--transition-normal);pointer-events:none;white-space:nowrap}.volume-indicator.is-visible{opacity:1}.control-btn.is-at-limit{opacity:.5}.control-btn.is-at-limit:active{transform:none}.control-icon{font-size:var(--font-size-xl);line-height:1}.control-icon.is-countdown{font-variant-numeric:tabular-nums;font-weight:700;min-width:1.5em;text-align:center}.control-label{font-size:var(--font-size-xs);margin-top:2px;text-transform:uppercase;letter-spacing:.5px}.has-control-bar .game-container,.has-control-bar .reveal-container,.has-control-bar .end-container{padding-bottom:140px}.reaction-bar{position:fixed;bottom:0;left:0;right:0;display:flex;justify-content:center;padding:var(--space-sm);padding-bottom:calc(var(--space-sm) + env(safe-area-inset-bottom));z-index:var(--z-reaction-bar);pointer-events:none}main:has(.admin-control-bar:not(.hidden)) .reaction-bar{bottom:70px}.reaction-bar.hidden{display:none}.reaction-bar-container{display:flex;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);background:#0009;border-radius:var(--radius-lg);border:1px solid rgba(255,255,255,.1);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);pointer-events:auto}.reaction-btn{font-size:1.5rem;padding:var(--space-sm);min-width:44px;min-height:44px;background:#1e1e2880;border:1px solid rgba(255,255,255,.15);border-radius:var(--radius-md);cursor:pointer;transition:transform var(--transition-fast),background var(--transition-fast)}.reaction-btn:hover{background:#32323cb3}.reaction-btn:active{transform:scale(.9)}.reaction-btn:disabled{cursor:default;opacity:.45}.reaction-btn.is-used{opacity:1;border-color:var(--color-accent-primary);box-shadow:0 0 12px var(--color-accent-primary)}@media(hover:none){.reaction-btn:active{box-shadow:0 0 15px var(--color-accent-primary)}}@media(prefers-reduced-motion:reduce){.reaction-btn{transition:none}.reaction-btn:active{transform:none}}.reaction-container{position:fixed;bottom:120px;left:0;right:0;pointer-events:none;z-index:99}main:has(.admin-control-bar:not(.hidden)) .reaction-container{bottom:180px}.reaction-bubble{position:absolute;font-size:1rem;font-weight:600;color:var(--color-text-white);text-shadow:0 0 8px var(--color-accent-primary);animation:reaction-float 3s ease-out forwards;white-space:nowrap}@keyframes reaction-float{0%{opacity:1;transform:translateY(0)}70%{opacity:1}to{opacity:0;transform:translateY(calc(-50vh + 60px))}}@media(prefers-reduced-motion:reduce){.reaction-bubble{animation:none;opacity:1}}.paused-container{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:var(--space-2xl) var(--space-lg);min-height:60vh;text-align:center}.paused-icon{font-size:var(--font-size-hero);margin-bottom:var(--space-lg);animation:pause-pulse 2s infinite}@keyframes pause-pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.6;transform:scale(.95)}}.paused-container h1{font-size:var(--font-size-3xl);font-weight:var(--font-weight-bold);color:var(--color-text-primary);margin-bottom:var(--space-md)}.paused-container>p{font-size:var(--font-size-md);color:var(--color-text-muted);margin-bottom:var(--space-sm)}.paused-spinner{margin:var(--space-xl) 0}.paused-hint{font-size:var(--font-size-base);color:var(--color-text-light)}.reconnecting-overlay{position:fixed;inset:0;background:#000c;display:flex;align-items:center;justify-content:center;z-index:var(--z-overlay)}.reconnecting-overlay.hidden{display:none}.reconnecting-content{text-align:center;color:var(--color-text-white)}.reconnecting-spinner .spinner{border-top-color:var(--color-text-white);width:48px;height:48px;margin:0 auto var(--space-md)}.reconnect-status{font-size:var(--font-size-md);color:var(--color-border-light)}.connection-lost-container{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:var(--space-2xl) var(--space-lg);min-height:60vh;text-align:center}.connection-lost-icon{font-size:var(--font-size-hero);margin-bottom:var(--space-lg)}.connection-lost-container h1{font-size:var(--font-size-3xl);font-weight:var(--font-weight-bold);color:var(--color-text-primary);margin-bottom:var(--space-md)}.connection-lost-container>p{font-size:var(--font-size-md);color:var(--color-text-muted);margin-bottom:var(--space-lg)}.connection-lost-hint{font-size:var(--font-size-base);color:var(--color-text-light);margin-top:var(--space-md)}@media(max-width:360px){.correct-year{font-size:var(--font-size-year)}.reveal-album-cover{width:120px;height:120px}}@media(min-width:768px){.reveal-album-cover{width:180px;height:180px}.correct-year{font-size:84px}}:focus-visible{outline:2px solid var(--color-accent-primary);outline-offset:2px}body.theme-dark :focus-visible{outline-color:var(--color-accent-primary);box-shadow:0 0 0 4px #ff2d6a4d}:focus:not(:focus-visible){outline:none}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}@media(prefers-color-scheme:light){body:not(.theme-dark){--color-bg-primary: #ffffff;--color-bg-surface: #f5f5f7;--color-bg-card: #ffffff;--color-bg-card-alt: #f8fafc;--color-text-primary: #1a1a1a;--color-text-muted: #666666;--color-text-light: #999999;--color-border-light: #e5e7eb}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.skip-link{position:absolute;top:-40px;left:0;background:var(--color-accent-primary);color:var(--color-text-white);padding:var(--space-sm) var(--space-md);z-index:var(--z-modal);transition:top var(--transition-fast)}.skip-link:focus{top:0}body.energy-calm .btn-glow:hover{box-shadow:none}body.energy-calm .wordmark-hero{text-shadow:none}body.energy-warmup .player-card{animation:energy-slide-in .3s ease-out}body.energy-warmup .qr-container{animation:energy-pulse-subtle 3s ease-in-out infinite}@keyframes energy-slide-in{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes energy-pulse-subtle{0%,to{opacity:1}50%{opacity:.85}}body.energy-party .album-cover{box-shadow:0 0 60px #ffffff1a}body.energy-party .submit-btn:not(:disabled){box-shadow:var(--glow-primary)}body.energy-party .year-display{text-shadow:0 0 20px rgba(255,45,106,.3)}.view{animation:screen-fade-in .3s ease-out}@keyframes screen-fade-in{0%{opacity:0}to{opacity:1}}@media(prefers-reduced-motion:reduce){body.energy-warmup .player-card,body.energy-warmup .qr-container,.view{animation:none}}.steal-btn{display:flex;align-items:center;justify-content:center;gap:var(--space-xs);width:100%;padding:var(--space-sm) var(--space-md);margin-top:var(--space-sm);background:linear-gradient(135deg,var(--color-purple-primary, #8b5cf6),var(--color-purple-secondary, #7c3aed));border:none;border-radius:var(--radius-lg);color:var(--color-text-white);font-size:var(--font-size-base);font-weight:var(--font-weight-bold);text-transform:uppercase;letter-spacing:.05em;cursor:pointer;box-shadow:0 0 20px #8b5cf666;transition:all var(--transition-fast)}.steal-btn:hover:not(:disabled){transform:scale(1.03);box-shadow:0 0 30px #8b5cf699}.steal-btn:disabled{opacity:.5;cursor:not-allowed}.steal-btn-icon{font-size:var(--font-size-lg)}.steal-modal{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;z-index:var(--z-modal)}.steal-modal-backdrop{position:absolute;inset:0;background:#000c;backdrop-filter:blur(4px)}.steal-modal-content{position:relative;background:var(--color-bg-card);border:2px solid var(--color-purple-primary, #8b5cf6);border-radius:var(--radius-xl);padding:var(--space-lg);max-width:320px;width:90%;text-align:center;box-shadow:0 0 40px #8b5cf64d}.steal-modal-title{font-size:var(--font-size-xl);font-weight:var(--font-weight-bold);color:var(--color-text-primary);margin-bottom:var(--space-xs)}.steal-modal-subtitle{font-size:var(--font-size-sm);color:var(--color-text-muted);margin-bottom:var(--space-md)}.steal-target-list{display:flex;flex-direction:column;gap:var(--space-sm);margin-bottom:var(--space-md)}.steal-target-btn{display:block;width:100%;padding:var(--space-sm) var(--space-md);background:var(--color-bg-surface);border:1px solid var(--color-accent-secondary);border-radius:var(--radius-md);color:var(--color-text-primary);font-size:var(--font-size-base);font-weight:var(--font-weight-semibold);cursor:pointer;transition:all var(--transition-fast)}.steal-target-btn:hover{background:var(--color-accent-secondary);color:var(--color-bg-primary);transform:scale(1.02)}.steal-no-targets{color:var(--color-text-muted);font-size:var(--font-size-sm);padding:var(--space-md)}.steal-modal-cancel{width:100%}.steal-confirmation{position:fixed;bottom:calc(var(--space-xl) + 60px);left:50%;transform:translate(-50%);display:flex;align-items:center;gap:var(--space-sm);background:linear-gradient(135deg,var(--color-purple-primary, #8b5cf6),var(--color-purple-secondary, #7c3aed));color:var(--color-text-white);padding:var(--space-sm) var(--space-lg);border-radius:var(--radius-full);font-weight:var(--font-weight-semibold);box-shadow:0 4px 20px #8b5cf680;animation:steal-toast-in .3s ease-out;z-index:var(--z-tooltip)}@keyframes steal-toast-in{0%{opacity:0;transform:translate(-50%) translateY(20px)}to{opacity:1;transform:translate(-50%) translateY(0)}}.steal-confirmation-icon{font-size:var(--font-size-lg)}.steal-badge{display:inline-flex;align-items:center;gap:var(--space-xs);background:#8b5cf633;border:1px solid var(--color-purple-primary, #8b5cf6);border-radius:var(--radius-full);padding:var(--space-xs) var(--space-sm);font-size:var(--font-size-xs);color:var(--color-purple-primary, #8b5cf6);margin-top:var(--space-xs)}.steal-badge-icon{font-size:.9em}.steal-badge-victim{background:#ef444433;border-color:var(--color-error);color:var(--color-error)}body.theme-dark .steal-modal-content{background:var(--color-bg-card)}body.theme-dark .steal-target-btn{background:#ffffff0d;border-color:var(--color-accent-secondary)}body.theme-dark .steal-target-btn:hover{background:var(--color-accent-secondary);color:var(--color-bg-primary)}@media(prefers-reduced-motion:reduce){.stat-badge--steal,.steal-confirmation{animation:none}}.intro-splash-modal{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;z-index:var(--z-modal)}.intro-splash-modal-backdrop{position:absolute;inset:0;background:#000c;backdrop-filter:blur(4px)}.intro-splash-modal-content{position:relative;background:var(--color-bg-card);border:2px solid var(--color-accent-primary, #1db954);border-radius:var(--radius-xl);padding:var(--space-lg);max-width:400px;width:90%;text-align:center;box-shadow:0 0 40px #1db9544d}.intro-splash-modal-emoji{font-size:3rem;margin-bottom:var(--space-sm)}.intro-splash-modal-title{font-size:var(--font-size-xl);font-weight:var(--font-weight-bold);color:var(--color-text-primary);margin-bottom:var(--space-xs)}.intro-splash-modal-desc{font-size:var(--font-size-base);color:var(--color-text-secondary);margin-bottom:var(--space-md)}.intro-splash-modal-waiting{font-size:var(--font-size-sm);color:var(--color-text-muted);margin-bottom:var(--space-sm)}.intro-splash-confirm-btn{width:100%;margin-top:var(--space-sm)}.score-animating{font-variant-numeric:tabular-nums}@keyframes score-pop{0%{transform:scale(1)}50%{transform:scale(1.3)}to{transform:scale(1)}}.score-pop{animation:score-pop .7s ease-out;display:inline-block}@keyframes score-shake{0%,to{transform:translate(0)}20%{transform:translate(-5px)}40%{transform:translate(5px)}60%{transform:translate(-3px)}80%{transform:translate(3px)}}.score-shake{animation:score-shake .4s ease-out;display:inline-block}@keyframes score-flash-red{0%,to{color:inherit}50%{color:var(--color-error)}}.score-flash-red{animation:score-flash-red .4s ease-out}@keyframes score-glow-gold{0%,to{text-shadow:0 0 0 transparent;color:inherit}50%{text-shadow:0 0 20px #ffd700,0 0 40px #ffd700;color:gold}}.score-glow-gold{animation:score-glow-gold .8s ease-out;display:inline-block}@keyframes score-burst{0%{transform:scale(1);text-shadow:0 0 0 transparent}30%{transform:scale(1.4);text-shadow:0 0 30px #ff6600}to{transform:scale(1);text-shadow:0 0 0 transparent}}.score-burst{animation:score-burst .7s ease-out;display:inline-block}@keyframes popup-float{0%{opacity:0;transform:translate(-50%)}20%{opacity:1}to{opacity:0;transform:translate(-50%,-30px)}}.points-popup{position:fixed;z-index:var(--z-toast);font-size:var(--font-size-lg);font-weight:var(--font-weight-bold);color:var(--color-success);pointer-events:none;animation:popup-float 1s ease-out forwards;transform:translate(-50%)}.points-popup--gold{color:gold;text-shadow:0 0 10px #ffd700}.points-popup--streak{color:#f60;text-shadow:0 0 10px #ff6600;font-size:var(--font-size-xl)}.leaderboard-entry--slide-up{animation:leaderboard-slide-up .5s ease-out}@keyframes leaderboard-slide-up{0%{transform:translateY(10px);background:#00ff884d}to{transform:translateY(0);background:transparent}}.leaderboard-entry--slide-down{animation:leaderboard-slide-down .5s ease-out}@keyframes leaderboard-slide-down{0%{transform:translateY(-10px);opacity:.6}to{transform:translateY(0);opacity:1}}@media(prefers-reduced-motion:reduce){.score-pop,.score-shake,.score-glow-gold,.score-burst,.score-flash-red{animation:none!important}.points-popup{animation:none!important;display:none!important}.leaderboard-entry--slide-up,.leaderboard-entry--slide-down{animation:none!important}}body.device-tier-low .leaderboard-entry--climbing,body.device-tier-low .leaderboard-entry--falling,body.device-tier-low .leaderboard-entry--slide-up,body.device-tier-low .leaderboard-entry--slide-down{animation:none!important}body.device-tier-low .neon-glow,body.device-tier-low .btn-glow:hover{box-shadow:none!important}body.device-tier-low .score-pop,body.device-tier-low .score-shake,body.device-tier-low .score-glow-gold,body.device-tier-low .score-burst{animation:none!important}body.device-tier-low .points-popup{display:none!important}body.device-tier-medium .leaderboard-entry--climbing,body.device-tier-medium .leaderboard-entry--falling{animation-duration:.2s!important}body.device-tier-medium .neon-glow{animation:none!important}body.device-tier-medium .score-pop,body.device-tier-medium .score-shake,body.device-tier-medium .score-glow-gold,body.device-tier-medium .score-burst{animation-duration:.2s!important}.reveal-skip-hint{position:absolute;bottom:var(--space-md);left:50%;transform:translate(-50%);font-size:var(--font-size-sm);color:var(--color-text-muted);opacity:0;animation:fadeInDelayed .3s ease-out 1s forwards}@keyframes fadeInDelayed{to{opacity:.6}}@media(prefers-reduced-motion:reduce){.reveal-skip-hint{animation:none;opacity:.6}}body.device-tier-low .reveal-skip-hint{animation:none;opacity:.6}.request-btn{margin-top:var(--space-md);gap:var(--space-xs)}.requests-list{display:flex;flex-direction:column;gap:var(--space-sm)}.request-item{display:flex;align-items:center;gap:var(--space-md);padding:var(--space-md);background:var(--color-surface-raised);border-radius:var(--radius-md);border:1px solid var(--color-border)}.request-item-thumbnail{width:40px;height:40px;min-width:40px;min-height:40px;max-width:40px;max-height:40px;border-radius:var(--radius-sm);object-fit:cover;flex-shrink:0}.request-item-thumbnail-placeholder{width:40px;height:40px;min-width:40px;min-height:40px;border-radius:var(--radius-sm);background:var(--color-surface);display:flex;align-items:center;justify-content:center;font-size:1.25rem;flex-shrink:0}.request-item-info{flex:1;min-width:0}.request-item-name{font-weight:600;font-size:var(--font-size-base);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.request-item-meta{font-size:var(--font-size-sm);color:var(--color-text-muted)}.request-status{display:inline-flex;align-items:center;gap:4px;padding:4px 8px;border-radius:var(--radius-full);font-size:var(--font-size-xs);font-weight:600;white-space:nowrap}.request-status--pending{background:#ffc10726;color:#ffc107}.request-status--ready{background:#4caf5026;color:#4caf50}.request-status--installed{background:transparent;color:#4caf50;border:1px solid #4caf50}.request-status--declined{background:#f4433626;color:#f44336}.request-update-btn{font-size:var(--font-size-xs);padding:6px 12px;white-space:nowrap}.text-input{width:100%;padding:var(--space-sm) var(--space-md);font-size:var(--font-size-base);background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);color:var(--color-text);transition:border-color .15s ease}.text-input:focus{outline:none;border-color:var(--color-primary)}.text-input.input-error{border-color:var(--color-error)}.info-box{background:var(--color-surface-raised);border-radius:var(--radius-md);padding:var(--space-md);margin-top:var(--space-md)}.info-box-title{font-weight:600;margin-bottom:var(--space-xs);color:var(--color-text-muted)}.info-box-list{margin:0;padding-left:0;list-style-position:inside;font-size:var(--font-size-sm);color:var(--color-text-muted)}.info-box-list li{margin-bottom:var(--space-xs)}.info-box-list li:last-child{margin-bottom:0}.info-box-note{margin-top:var(--space-sm);padding-top:var(--space-sm);border-top:1px solid var(--color-border);font-size:var(--font-size-sm);color:var(--color-text-muted)}.modal-content--success{text-align:center}.success-icon{font-size:3rem;margin-bottom:var(--space-sm)}.success-playlist-name{font-weight:600;font-size:var(--font-size-lg);margin-bottom:var(--space-xs)}.success-estimate{color:var(--color-text-muted);font-size:var(--font-size-sm)}.btn--loading{position:relative;color:transparent!important;pointer-events:none}.btn--loading:after{content:"";position:absolute;width:16px;height:16px;top:50%;left:50%;margin-left:-8px;margin-top:-8px;border:2px solid transparent;border-top-color:currentColor;border-radius:50%;animation:spin .6s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.share-container{margin:1.5rem 0;text-align:center}.share-header{font-size:1.2rem;font-weight:700;margin-bottom:1rem;color:var(--text-primary, #fff)}.share-card-preview{margin:12px auto;max-width:360px;width:100%;border-radius:16px;overflow:hidden;box-shadow:0 12px 36px #00000080,0 0 0 1px #ff2d6a40;background:#0a0a12}.share-card-image{display:block;width:100%;height:auto;aspect-ratio:1 / 1}.share-buttons{display:flex;gap:.75rem;justify-content:center;flex-wrap:wrap}.share-btn{padding:.6rem 1.2rem;border:none;border-radius:8px;font-size:.95rem;font-weight:600;cursor:pointer;background:var(--accent-color, #e94560);color:#fff;transition:opacity .2s,transform .1s}.share-btn:hover{opacity:.9}.share-btn:active{transform:scale(.97)}.share-toast{margin-top:.75rem;padding:.4rem 1rem;background:var(--success-color, #4caf50);color:#fff;border-radius:20px;display:inline-block;font-size:.85rem;font-weight:600;animation:shareToastIn .3s ease}@keyframes shareToastIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.admin-share-player-tabs{display:flex;flex-wrap:wrap;gap:.4rem;justify-content:center;margin-bottom:.75rem}.admin-share-tab{padding:.3rem .85rem;border-radius:20px;border:1px solid var(--color-border-light);background:transparent;color:var(--color-text-secondary);font-size:var(--font-size-sm);cursor:pointer;transition:all .15s ease}.admin-share-tab:hover{border-color:var(--color-accent-brand);color:var(--color-accent-brand)}.admin-share-tab.active{background:var(--color-accent-brand);border-color:var(--color-accent-brand);color:#fff;font-weight:var(--font-weight-semibold)}@media(max-width:480px){.share-buttons{flex-direction:column;align-items:center}.share-btn{width:100%;max-width:280px}.share-card-preview{max-width:320px}}@keyframes shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.skeleton{background:linear-gradient(90deg,var(--color-bg-card) 25%,#3a3a4e 50%,var(--color-bg-card) 75%);background-size:200% 100%;animation:shimmer 1.5s infinite;border-radius:var(--radius-md)}.skeleton-list{display:flex;flex-direction:column;gap:var(--space-sm);padding:var(--space-sm) 0}.skeleton-row{height:48px;width:100%}.skeleton-card{height:64px;width:100%}.player-header{position:relative}.connection-indicator{position:absolute;top:50%;right:var(--space-md);transform:translateY(-50%);display:flex;align-items:center;gap:4px;opacity:0;transition:opacity .3s ease}.connection-indicator--disconnected{opacity:1}.connection-dot{width:8px;height:8px;border-radius:50%;background:var(--color-error, #e94560);animation:pulse-dot 1.2s infinite}@keyframes pulse-dot{0%,to{opacity:1;transform:scale(1)}50%{opacity:.4;transform:scale(.7)}}.party-lights-picker{margin-top:12px}.party-lights-picker-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px;font-size:.85rem;color:var(--text-secondary, #aaa)}.party-lights-count{font-weight:500}.btn-link{background:none;border:none;color:var(--accent, #ff00ff);cursor:pointer;font-size:.85rem;padding:4px 8px}.btn-link:hover{text-decoration:underline}.party-lights-list{max-height:240px;overflow-y:auto;border-radius:8px;background:var(--card-bg, rgba(255,255,255,.05));margin-bottom:12px}.party-light-item{display:flex;align-items:center;gap:10px;padding:10px 12px;cursor:pointer;border-bottom:1px solid var(--border, rgba(255,255,255,.08));min-height:44px}.party-light-item:last-child{border-bottom:none}.party-light-item:hover{background:#ffffff08}.party-light-item input[type=checkbox]{width:18px;height:18px;flex-shrink:0;accent-color:var(--accent, #ff00ff)}.light-status{font-size:.75rem;flex-shrink:0}.light-name{flex:1;font-size:.9rem;color:var(--text-primary, #fff);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.light-cap-badge{font-size:.7rem;padding:2px 6px;border-radius:4px;background:#ffffff1a;color:var(--text-secondary, #aaa);flex-shrink:0;font-weight:500}.setting-row--vertical{flex-direction:column;align-items:flex-start;gap:var(--space-sm, 8px)}.wled-presets-grid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:var(--space-xs, 4px) var(--space-sm, 8px);width:100%}.wled-preset-item{display:flex;align-items:center;justify-content:space-between;gap:var(--space-xs, 4px);font-size:.8rem;color:var(--text-secondary, #aaa)}.wled-preset-item .input-sm{width:48px;padding:2px 4px;border:1px solid rgba(255,255,255,.15);border-radius:4px;background:#ffffff0d;color:var(--text-primary, #fff);font-size:.8rem;text-align:center}.admin-game-wrapper{max-width:480px;margin:0 auto}.admin-phase-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--space-md)}.round-badge{font-weight:600;font-size:1rem}.timer-badge{font-size:1.2rem;font-weight:700;font-variant-numeric:tabular-nums;min-width:3em;text-align:center}.timer-badge.timer-warning{color:var(--color-warning, #f59e0b)}.timer-badge.timer-critical{color:var(--color-danger, #ef4444);animation:pulse-critical .5s ease-in-out infinite alternate}@keyframes pulse-critical{0%{opacity:1}to{opacity:.5}}.admin-song-card{display:flex;align-items:center;gap:var(--space-md);background:var(--color-bg-card);border-radius:var(--radius-md);padding:var(--space-md);margin-bottom:var(--space-md)}.admin-album-art{width:64px;height:64px;border-radius:var(--radius-sm);object-fit:cover;flex-shrink:0}.admin-song-meta{min-width:0}.admin-song-title{font-weight:600;font-size:1rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.admin-song-artist{color:var(--text-secondary, #aaa);font-size:.9rem}.admin-song-details{text-align:center;margin-bottom:var(--space-sm, 8px)}.admin-song-year{font-size:.95rem;color:var(--color-primary, #1db954);font-weight:600}.admin-song-funfact{font-size:.85rem;color:var(--text-secondary, #aaa);font-style:italic;margin-top:4px;line-height:1.3}.admin-playing-banner{display:flex;align-items:center;gap:var(--space-sm, 8px);padding:var(--space-sm, 8px) var(--space-md, 16px);background:var(--bg-card, rgba(255, 255, 255, .05));border-bottom:2px solid var(--color-primary, #1db954);font-size:.9rem}.admin-playing-banner-icon{font-size:1.1rem;flex-shrink:0}.admin-playing-banner-text{flex:1;min-width:0}.admin-playing-banner-btn{flex-shrink:0;font-size:.8rem;padding:4px 10px;border-radius:var(--radius-sm, 8px)}.idle-halt-banner{display:flex;align-items:center;gap:var(--space-sm, 8px);margin:var(--space-md, 16px) auto;padding:var(--space-sm, 8px) var(--space-md, 16px);background:var(--bg-card, rgba(255, 255, 255, .06));border:1px solid var(--color-warning, #f5a623);border-radius:var(--radius-md, 12px);color:var(--color-warning, #f5a623);font-size:.9rem;line-height:1.35;max-width:540px}.idle-halt-icon{font-size:1.2rem;flex-shrink:0}.admin-pause-recovery{margin:var(--space-md, 16px);padding:var(--space-md, 16px) var(--space-lg, 20px);background:var(--bg-card, rgba(255, 255, 255, .06));border:2px solid var(--color-warning, #f5a623);border-radius:var(--radius-md, 12px)}.admin-pause-recovery-header{display:flex;align-items:center;gap:var(--space-sm, 8px);margin-bottom:var(--space-sm, 8px)}.admin-pause-recovery-icon{font-size:1.3rem;flex-shrink:0}.admin-pause-recovery-title{font-size:1rem;color:var(--color-warning, #f5a623)}.admin-pause-recovery-message{font-size:.95rem;line-height:1.4;margin:0 0 var(--space-sm, 8px) 0;color:var(--text-primary, #ffffff)}.admin-pause-recovery-detail{font-size:.8rem;line-height:1.3;margin:0 0 var(--space-md, 16px) 0;color:var(--text-secondary, rgba(255, 255, 255, .6));font-family:var(--font-monospace, monospace);word-break:break-word}.admin-pause-recovery-detail.hidden{display:none}.admin-pause-recovery-actions{display:flex;gap:var(--space-sm, 8px);flex-wrap:wrap}.admin-pause-recovery-actions .btn{flex:1;min-width:120px}.admin-personal-result-card{display:flex;flex-direction:column;gap:var(--space-xs, 4px)}.admin-personal-row{display:flex;justify-content:space-between;align-items:center;padding:var(--space-xs, 4px) 0}.admin-personal-label{color:var(--text-secondary, #aaa);font-size:.9rem}.admin-personal-value{font-weight:600;font-size:1rem}.admin-personal-score{color:var(--color-primary, #1db954);font-size:1.1rem}.artist-option--readonly{padding:10px 14px;background:var(--bg-card, rgba(255, 255, 255, .05));border:1px solid var(--color-border-dark, rgba(255, 255, 255, .1));border-radius:var(--radius-md, 12px);text-align:center;font-size:.9rem;opacity:.8}.admin-intro-splash{text-align:center;padding:var(--space-md);margin-bottom:var(--space-md);background:var(--bg-card, rgba(255, 255, 255, .05));border-radius:var(--radius-md, 12px);border:1px solid var(--color-primary, #1db954)}.intro-splash-info{font-size:1.1rem;font-weight:600;margin-bottom:var(--space-sm)}.intro-splash-icon{margin-right:6px}.btn-compact{padding:8px 12px;font-size:.85rem}.admin-player-panel{background:var(--color-bg-card);border-radius:var(--radius-md);padding:var(--space-md);margin-bottom:var(--space-md)}.admin-year-selector{text-align:center;margin-bottom:var(--space-md)}.admin-year-selector .year-display{display:block;font-size:2.5rem;font-weight:700;margin-bottom:var(--space-sm);font-variant-numeric:tabular-nums}.admin-year-selector .year-slider{width:100%;margin-bottom:var(--space-xs)}.year-range-labels{display:flex;justify-content:space-between;font-size:.75rem;color:var(--text-secondary, #aaa)}.last-round-banner{text-align:center;padding:var(--space-sm);background:var(--color-warning, #f59e0b);color:#000;border-radius:var(--radius-sm);font-weight:600;margin-bottom:var(--space-md)}.submission-status{text-align:center;color:var(--text-secondary, #aaa);font-size:.9rem;margin-top:var(--space-sm)}.submission-count{margin-bottom:6px}.submission-players{display:flex;flex-wrap:wrap;gap:6px;justify-content:center}.submission-player{display:inline-flex;align-items:center;gap:3px;padding:2px 8px;border-radius:12px;font-size:.8rem;background:var(--bg-card, rgba(255, 255, 255, .05))}.submission-player.is-submitted{color:var(--color-primary, #1db954)}.submission-player.is-waiting{opacity:.6}.reveal-year-display{font-size:2.5rem;font-weight:700;text-align:center;margin:var(--space-md) 0;color:var(--color-primary, #1db954)}.admin-personal-result{display:flex;justify-content:space-between;align-items:center;background:var(--color-bg-card);border-radius:var(--radius-md);padding:var(--space-md);margin-bottom:var(--space-md)}.score-badge{font-weight:700;color:var(--color-primary, #1db954)}.admin-leaderboard-container{margin-bottom:var(--space-md)}.admin-leaderboard{width:100%;border-collapse:collapse}.admin-leaderboard th{text-align:left;font-weight:600;padding:var(--space-xs) var(--space-sm);border-bottom:1px solid var(--color-border-light);font-size:.85rem;color:var(--text-secondary, #aaa)}.admin-leaderboard td{padding:var(--space-xs) var(--space-sm)}.admin-leaderboard tr.admin-highlight td{font-weight:600;color:var(--color-primary, #1db954)}.admin-winner-display{text-align:center;font-size:1.3rem;font-weight:600;padding:var(--space-lg) 0}.winner-trophy{font-size:2rem}.admin-end-actions{display:flex;gap:var(--space-sm);justify-content:center;margin-top:var(--space-md)}body.wizard-active>.admin-header,body.wizard-active>main.admin-content,body.wizard-active>.pwa-ios-hint{display:none}.wizard-takeover{position:fixed;inset:0;z-index:var(--z-overlay, 1100);background:var(--color-bg-primary);display:flex;flex-direction:column;overflow:hidden}.wizard-takeover.hidden{display:none}.wiz-bg{position:absolute;inset:0;background:radial-gradient(ellipse at top,rgba(255,45,106,.18),transparent 55%),radial-gradient(ellipse at bottom right,rgba(0,245,255,.12),transparent 40%);pointer-events:none}.wiz-top{padding:var(--space-md) var(--space-lg);display:flex;align-items:center;justify-content:space-between;gap:var(--space-md);border-bottom:1px solid var(--color-border-neon);position:relative;z-index:1}.wiz-step-count{font-family:var(--font-display);font-weight:600;font-size:var(--font-size-xs);letter-spacing:.14em;text-transform:uppercase;color:var(--color-text-dim, #6b6b7a);flex:1;text-align:center}.wiz-skip{font-family:var(--font-display);font-size:var(--font-size-sm);color:var(--color-text-neon-muted);background:none;border:none;font-weight:500;cursor:pointer;padding:var(--space-xs) var(--space-sm)}.wiz-skip:hover{color:var(--color-text-white)}.wiz-progress{display:flex;gap:var(--space-xs);padding:var(--space-sm) var(--space-lg);position:relative;z-index:1}.wiz-seg{flex:1;height:3px;background:var(--color-dark-surface);border-radius:var(--radius-full);overflow:hidden}.wiz-seg.filled{background:linear-gradient(90deg,var(--color-accent-primary),var(--color-accent-secondary));box-shadow:0 0 12px #ff2d6a80}.wiz-seg.active .wiz-seg-inner{height:100%;width:60%;background:linear-gradient(90deg,var(--color-accent-primary),var(--color-accent-secondary));box-shadow:0 0 12px #ff2d6a80;border-radius:var(--radius-full)}.wiz-frame{flex:1;overflow-y:auto;position:relative;z-index:1}.wiz-frame[hidden]{display:none}.wiz-body{padding:var(--space-lg);display:flex;flex-direction:column;gap:var(--space-md);max-width:720px;margin:0 auto}.wiz-eyebrow{font-family:var(--font-display);font-weight:700;font-size:var(--font-size-xs);letter-spacing:.14em;text-transform:uppercase;color:var(--color-accent-secondary)}.wiz-title{font-family:var(--font-display);font-weight:700;font-size:var(--font-size-3xl);line-height:1.15;letter-spacing:-.01em;color:var(--color-text-white)}.wiz-sub{color:var(--color-text-neon-muted);font-size:var(--font-size-base);line-height:1.5}.wiz-hint{font-size:var(--font-size-sm);margin-top:var(--space-xs)}.wiz-hint a{color:var(--color-accent-secondary);text-decoration:underline}.wiz-list{display:flex;flex-direction:column;gap:var(--space-sm)}.wiz-row{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);background:var(--color-dark-surface);border:1px solid var(--color-border-neon);border-radius:var(--radius-lg);cursor:pointer;transition:var(--transition-fast);color:var(--color-text-white);text-align:left;width:100%;font-family:var(--font-body)}.wiz-row:hover{background:var(--color-dark-surface-hover)}.wiz-row.selected{background:linear-gradient(90deg,#ff2d6a26,#00f5ff0d);border-color:var(--color-accent-primary);box-shadow:0 0 14px #ff2d6a40}.wiz-row-avatar{width:36px;height:36px;border-radius:var(--radius-md);background:linear-gradient(135deg,var(--color-accent-primary),var(--color-accent-brand));flex-shrink:0;display:grid;place-items:center;color:var(--color-bg-primary)}.wiz-row-avatar-icon{width:20px;height:20px}.wiz-row-text{flex:1;min-width:0}.wiz-row-name{font-family:var(--font-display);font-weight:600;font-size:var(--font-size-base);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.wiz-row-sub{font-size:var(--font-size-xs);color:var(--color-text-neon-muted);margin-top:2px}.wiz-row-check{color:var(--color-success-neon);text-shadow:var(--glow-success)}.wiz-provider-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:var(--space-sm)}.wiz-provider-chip{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-md);background:var(--color-dark-surface);border:1px solid var(--color-border-neon);border-radius:var(--radius-md);font-family:var(--font-display);font-weight:600;font-size:var(--font-size-base);cursor:pointer;color:var(--color-text-white);transition:var(--transition-fast)}.wiz-provider-chip:hover{background:var(--color-dark-surface-hover)}.wiz-provider-chip.active{border-color:var(--color-accent-primary);box-shadow:0 0 14px #ff2d6a40}.wiz-provider-chip.connected{border-color:var(--color-success-neon);background:#39ff141a}.wiz-provider-chip{justify-content:space-between}.wiz-provider-chip.disabled{opacity:.4;cursor:help;background:#ffffff05}.wiz-provider-chip.disabled:hover{opacity:.55;background:#ffffff0a}.wiz-provider-chip .chip-lock{width:14px;height:14px;opacity:.7;flex-shrink:0}.wiz-row-sub .cap-dot{width:4px;height:4px;border-radius:50%;background:var(--color-text-dim);display:inline-block;margin:0 6px;vertical-align:middle}.wiz-row-sub .cap-badge{font-family:var(--font-display);font-weight:600;font-size:10px;text-transform:uppercase;letter-spacing:.06em;padding:1px 6px;border-radius:var(--radius-sm);border:1px solid;vertical-align:middle;white-space:nowrap}.wiz-row-sub .cap-badge.full{color:var(--color-success-neon);background:#39ff1414;border-color:#39ff1466}.wiz-row-sub .cap-badge.partial{color:var(--color-warning-alt);background:#ff660014;border-color:#f606}.wiz-row-sub .cap-badge.none{color:var(--color-error-neon);background:#ff004014;border-color:#ff004066}.wiz-row-sub .cap-badge.summary{color:var(--color-text-dim);background:none;border:none;padding:0;text-transform:none;letter-spacing:0;font-weight:500}.wiz-explainer{margin-top:var(--space-md);padding:var(--space-lg);border-radius:var(--radius-lg);background:linear-gradient(135deg,#ff66000f,#00f5ff0a);border:1px solid rgba(255,102,0,.35)}.wiz-explainer[hidden]{display:none}.wiz-explainer-title{display:flex;align-items:center;gap:var(--space-sm);font-family:var(--font-display);font-weight:700;font-size:var(--font-size-md);margin:0 0 var(--space-sm)}.wiz-explainer-title .icon{font-size:18px}.wiz-explainer-body{font-size:var(--font-size-base);line-height:1.55;color:var(--color-text-neon-muted);margin:0 0 var(--space-md)}.wiz-explainer-steps{margin:0 0 var(--space-md);padding-left:var(--space-lg);font-size:var(--font-size-base);line-height:1.75;color:var(--color-text-neon-muted)}.wiz-explainer-steps li strong{color:var(--color-text-white)}.wiz-explainer-actions{display:flex;gap:var(--space-sm);flex-wrap:wrap}.wiz-explainer-footer{margin:var(--space-md) 0 0;padding-top:var(--space-sm);border-top:1px solid rgba(255,255,255,.06);font-size:var(--font-size-sm);color:var(--color-text-dim);font-style:italic}.wiz-lvl-card{display:flex;align-items:flex-start;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);background:var(--color-dark-surface);border:1px solid var(--color-border-neon);border-radius:var(--radius-lg);cursor:pointer;transition:var(--transition-fast)}.wiz-lvl-card.on{background:#00f5ff14;border-color:var(--color-accent-secondary)}.wiz-lvl-card.unavailable{opacity:.45;cursor:not-allowed}.wiz-lvl-text{flex:1}.wiz-lvl-title{font-family:var(--font-display);font-weight:600;font-size:var(--font-size-base);color:var(--color-text-white)}.wiz-lvl-desc{font-size:var(--font-size-xs);color:var(--color-text-neon-muted);margin-top:2px;line-height:1.4}.wiz-lvl-toggle{width:38px;height:22px;background:var(--color-dark-surface-hover);border-radius:var(--radius-full);border:1px solid var(--color-border-neon);position:relative;flex-shrink:0;margin-top:2px}.wiz-lvl-toggle:after{content:"";position:absolute;top:2px;left:2px;width:16px;height:16px;background:var(--color-text-neon-muted);border-radius:var(--radius-full);transition:var(--transition-fast)}.wiz-lvl-card.on .wiz-lvl-toggle{background:var(--color-accent-primary);border-color:var(--color-accent-primary)}.wiz-lvl-card.on .wiz-lvl-toggle:after{left:18px;background:var(--color-bg-primary)}.wiz-done{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-lg);text-align:center;padding:var(--space-xl);position:relative;z-index:1}.wiz-done-badge{font-family:var(--font-display);font-weight:700;font-size:var(--font-size-sm);letter-spacing:.14em;color:var(--color-success-neon);text-shadow:var(--glow-success)}.wiz-done-tag{font-family:var(--font-display);font-weight:600;font-size:var(--font-size-xl);color:var(--color-text-white)}.wiz-done-summary{display:flex;flex-direction:column;gap:var(--space-xs);width:100%;max-width:380px;padding:var(--space-md);background:var(--color-dark-surface);border:1px solid var(--color-border-neon);border-radius:var(--radius-lg)}.wiz-done-line{display:flex;justify-content:space-between;align-items:baseline;gap:var(--space-lg);font-family:var(--font-display);font-size:var(--font-size-sm);color:var(--color-text-neon-muted)}.wiz-done-line>span{letter-spacing:.08em;text-transform:uppercase;font-size:var(--font-size-xs);font-weight:600;flex-shrink:0}.wiz-done-line strong{color:var(--color-text-white);font-weight:600;text-align:right;word-break:break-word}.wiz-done-demo{width:100%;max-width:400px;aspect-ratio:16/9;border:1px solid var(--color-accent-primary);border-radius:var(--radius-xl);background:var(--color-bg-primary);position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;box-shadow:0 0 30px #ff2d6a4d}.wiz-done-demo-label{font-family:var(--font-display);font-size:var(--font-size-xs);font-weight:600;color:var(--color-text-neon-muted);letter-spacing:.14em;text-transform:uppercase}.wiz-done-demo-year{font-family:var(--font-display);font-weight:900;font-size:64px;line-height:.9;color:var(--color-accent-primary);text-shadow:0 0 24px rgba(255,45,106,.6);letter-spacing:-.03em}.wiz-done-demo-song{font-family:var(--font-display);font-size:var(--font-size-sm);font-weight:600;color:var(--color-text-neon-muted)}.wiz-cta{padding:var(--space-md) var(--space-lg);display:flex;gap:var(--space-sm);border-top:1px solid var(--color-border-neon);background:#0000004d;position:relative;z-index:1}.wiz-cta .btn{flex:1}.wiz-cta .wiz-back{flex:0 0 auto;min-width:80px}.wiz-frame-playlist:not([hidden])~.wiz-cta{display:none}.finish-setup-pill{font-family:var(--font-display);font-weight:600;font-size:var(--font-size-sm);color:var(--color-accent-primary);background:#ff2d6a1a;border:1px solid rgba(255,45,106,.4);border-radius:var(--radius-full);padding:var(--space-xs) var(--space-md);cursor:pointer;transition:var(--transition-fast)}.finish-setup-pill:hover{background:#ff2d6a33;box-shadow:var(--glow-primary)}.finish-setup-pill.hidden{display:none}@media(prefers-reduced-motion:reduce){.wizard-takeover,.wizard-takeover *{animation:none!important;transition:none!important}}.wiz-field{display:flex;flex-direction:column;gap:var(--space-xs)}.wiz-field-label{font-family:var(--font-display);font-weight:600;font-size:var(--font-size-xs);letter-spacing:.08em;text-transform:uppercase;color:var(--color-text-neon-muted)}.wiz-chip-group{display:flex;flex-wrap:wrap;gap:var(--space-xs)}.wiz-chip{padding:var(--space-sm) var(--space-md);background:var(--color-dark-surface);border:1px solid var(--color-border-neon);border-radius:var(--radius-full);font-family:var(--font-display);font-weight:600;font-size:var(--font-size-sm);color:var(--color-text-white);cursor:pointer;transition:var(--transition-fast)}.wiz-chip:hover{background:var(--color-dark-surface-hover)}.wiz-chip.active{background:var(--color-accent-primary);border-color:var(--color-accent-primary);color:var(--color-bg-primary);box-shadow:var(--glow-primary)}.wiz-request-playlist{margin-top:var(--space-md);align-self:flex-start}body.wizard-active .modal{z-index:calc(var(--z-overlay) + 10)}.wiz-difficulty-hint{margin-top:var(--space-sm);padding:var(--space-sm) var(--space-md);background:#00f5ff0f;border-left:2px solid var(--color-accent-secondary);border-radius:var(--radius-sm);color:var(--color-text-neon-muted);font-size:var(--font-size-sm);line-height:1.5;min-height:1.5em}.wiz-rounds-custom{display:flex;align-items:center;gap:var(--space-sm);margin-top:var(--space-sm)}.wiz-rounds-custom input{width:6em;padding:var(--space-sm) var(--space-md);background:var(--color-dark-surface);border:1px solid var(--color-border-neon);border-radius:var(--radius-sm);color:var(--color-text-white);font-family:var(--font-body);font-size:var(--font-size-base)}.wiz-rounds-custom input:focus{outline:none;border-color:var(--color-accent-primary)}.wiz-rounds-custom span{color:var(--color-text-neon-muted);font-size:var(--font-size-sm)}.wiz-lvl-card{flex-direction:column;align-items:stretch;padding:0}.wiz-lvl-head{display:flex;align-items:flex-start;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);cursor:pointer;user-select:none}.wiz-lvl-card.unavailable .wiz-lvl-head{cursor:not-allowed}.wiz-lvl-head:hover{background:#ffffff05}.wiz-lvl-card.on .wiz-lvl-head{border-bottom:1px solid var(--color-border-neon)}.wiz-detail{padding:var(--space-md);display:flex;flex-direction:column;gap:var(--space-md);background:#00000026}.wiz-detail-checks{display:flex;flex-direction:column;gap:var(--space-xs)}.wiz-detail-check{display:flex;align-items:center;gap:var(--space-sm);padding:6px 8px;border-radius:var(--radius-md);cursor:pointer}.wiz-detail-check:hover{background:#ffffff08}.wiz-detail-check input[type=checkbox]{accent-color:var(--color-accent-primary);width:16px;height:16px;flex-shrink:0}.wiz-detail-check-name{font-family:var(--font-display);font-weight:500;font-size:var(--font-size-sm);color:var(--color-text-white)}.wiz-detail-empty{font-size:var(--font-size-sm);color:var(--color-text-neon-muted);padding:var(--space-sm);background:var(--color-dark-surface);border:1px dashed var(--color-border-neon);border-radius:var(--radius-md);text-align:center}.wiz-detail-input{padding:var(--space-sm) var(--space-md);background:var(--color-bg-primary);border:1px solid var(--color-border-neon);border-radius:var(--radius-md);color:var(--color-text-white);font-family:ui-monospace,monospace;font-size:var(--font-size-sm)}.wiz-detail-input:focus{outline:none;border-color:var(--color-accent-secondary);box-shadow:0 0 0 3px #00f5ff26}.wiz-field-hint{font-size:var(--font-size-xs);color:var(--color-text-dim);line-height:1.4}body.home-mode #media-players,body.home-mode #music-service,body.home-mode #playlists,body.home-mode #game-settings,body.home-mode #party-lights,body.home-mode #tts-settings,body.home-mode .admin-content>.admin-actions{display:none!important}.home-view{display:none}.home-view.hidden{display:none!important}body.home-mode #home-view,body.home-mode .home-view{display:flex;flex-direction:column;min-height:calc(100vh - 120px);background:var(--color-bg-primary);border:1px solid var(--color-border-neon);border-radius:var(--radius-xl);overflow:hidden;margin-bottom:var(--space-md)}.home-stage{flex:1;position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-md);padding:var(--space-xl) var(--space-lg);text-align:center}.home-stage-bg{position:absolute;inset:0;pointer-events:none;background:radial-gradient(ellipse at center,rgba(255,45,106,.15),transparent 55%),radial-gradient(ellipse at bottom,rgba(0,245,255,.08),transparent 50%)}.home-eyebrow{position:relative;z-index:1;font-family:var(--font-display);font-weight:700;font-size:var(--font-size-sm);letter-spacing:.16em;text-transform:uppercase;color:var(--color-accent-secondary)}.home-headline{position:relative;z-index:1;font-family:var(--font-display);font-weight:900;font-size:var(--font-size-4xl);line-height:.95;letter-spacing:-.02em;margin:0;text-shadow:0 0 40px rgba(255,45,106,.35)}.home-headline-sub{display:block;font-weight:600;font-size:var(--font-size-xl);letter-spacing:.02em;text-shadow:none;color:var(--color-text-white);margin-top:4px}.home-hero-card{position:relative;z-index:1;padding:var(--space-lg);background:var(--color-dark-surface);border:1px solid var(--color-accent-primary);border-radius:var(--radius-2xl);box-shadow:0 0 32px #ff2d6a38;display:flex;flex-direction:column;align-items:center;gap:var(--space-sm);max-width:280px;width:100%}.home-qr-loading{font-family:var(--font-display);font-weight:600;font-size:var(--font-size-sm);color:var(--color-text-neon-muted);padding:var(--space-xl) 0;letter-spacing:.08em;text-transform:uppercase}.home-qr-loading.hidden{display:none}.home-qr-container{padding:8px;background:var(--color-bg-white);border-radius:var(--radius-md);display:grid;place-items:center;min-width:180px;min-height:180px}.home-qr-container:empty{display:none}.home-qr-container img,.home-qr-container canvas{display:block;max-width:180px;height:auto}.home-hero-title{font-family:var(--font-display);font-weight:700;font-size:var(--font-size-lg);color:var(--color-text-white);letter-spacing:-.01em}.home-hero-sub{font-size:var(--font-size-sm);color:var(--color-accent-secondary);font-family:ui-monospace,monospace;word-break:break-all;max-width:260px}.home-players{position:relative;z-index:1;display:grid;grid-template-columns:repeat(auto-fill,minmax(84px,1fr));gap:var(--space-sm);justify-items:center;width:100%;max-width:380px;margin-top:var(--space-lg)}.home-players:empty{display:none}.home-player-tile{position:relative;width:100%;aspect-ratio:1;padding:var(--space-sm);border-radius:var(--radius-lg);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;background:linear-gradient(135deg,var(--tile-from),var(--tile-to));border:1.5px solid var(--tile-border);box-shadow:0 0 14px var(--tile-glow);--tile-from: rgba(0, 245, 255, .32);--tile-to: rgba(0, 245, 255, .08);--tile-border: rgba(0, 245, 255, .7);--tile-glow: rgba(0, 245, 255, .35)}.home-player-tile-initial{font-family:var(--font-display);font-weight:900;font-size:28px;line-height:1;color:var(--color-text-white);text-shadow:0 2px 8px rgba(0,0,0,.4)}.home-player-tile-name{font-family:var(--font-display);font-weight:700;font-size:var(--font-size-xs);color:var(--color-text-white);max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding:0 2px}.home-player-tile--c2{--tile-from: rgba(57, 255, 20, .32);--tile-to: rgba(57, 255, 20, .08);--tile-border: rgba(57, 255, 20, .65);--tile-glow: rgba(57, 255, 20, .32)}.home-player-tile--c3{--tile-from: rgba(255, 102, 0, .32);--tile-to: rgba(255, 102, 0, .08);--tile-border: rgba(255, 102, 0, .65);--tile-glow: rgba(255, 102, 0, .32)}.home-player-tile--c4{--tile-from: rgba(0, 245, 255, .22);--tile-to: rgba(0, 245, 255, .04);--tile-border: rgba(0, 245, 255, .5);--tile-glow: rgba(0, 245, 255, .22)}.home-player-tile--host{--tile-from: rgba(255, 45, 106, .35);--tile-to: rgba(255, 45, 106, .08);--tile-border: rgba(255, 45, 106, .85);--tile-glow: rgba(255, 45, 106, .5);box-shadow:var(--glow-primary),0 0 22px #ff2d6a59}.home-player-tile-crown{position:absolute;top:-10px;right:-10px;font-size:20px;line-height:1;filter:drop-shadow(0 0 6px rgba(255,45,106,.8));pointer-events:none}.home-players-waiting{grid-column:1 / -1;padding:var(--space-md);border-radius:var(--radius-full);border:1px dashed var(--color-border-neon);background:transparent;color:var(--color-text-dim);font-family:var(--font-display);font-weight:500;font-size:var(--font-size-sm);text-align:center}.home-meta{position:relative;z-index:1;font-family:var(--font-display);font-weight:500;font-size:var(--font-size-xs);letter-spacing:.12em;text-transform:uppercase;color:var(--color-text-dim);max-width:320px;line-height:1.6}.home-cta-bar{display:flex;gap:var(--space-sm);padding:var(--space-md) var(--space-lg);background:#0000004d;border-top:1px solid var(--color-border-neon)}.home-cta-edit{padding:var(--space-sm) var(--space-md);font-size:var(--font-size-sm)}.home-cta-start{flex:1;padding:var(--space-md);font-size:var(--font-size-base);box-shadow:var(--glow-primary),0 0 40px #ff2d6a40}.home-cta-start.btn-ghost{box-shadow:none;flex:0 0 auto}.home-cta-join{width:100%;margin-top:var(--space-md);padding:var(--space-lg) var(--space-md);font-size:var(--font-size-xl);font-weight:700;letter-spacing:.02em;border-radius:var(--radius-xl);box-shadow:var(--glow-primary),0 0 48px #ff2d6a4d;display:inline-flex;align-items:center;justify-content:center;gap:var(--space-sm)}.home-cta-join svg{width:26px;height:26px;stroke-width:2.25}.home-cta-join.hidden{display:none}.wiz-mode-cards{display:flex;flex-direction:column;gap:var(--space-xs)}.wiz-mode-card{display:flex;align-items:flex-start;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);background:var(--color-dark-surface);border:1px solid var(--color-border-neon);border-radius:var(--radius-lg);cursor:pointer;transition:var(--transition-fast)}.wiz-mode-card:hover{background:var(--color-dark-surface-hover)}.wiz-mode-card.disabled{cursor:not-allowed;pointer-events:none}.wiz-mode-card.disabled .wiz-mode-icon,.wiz-mode-card.disabled .wiz-mode-title,.wiz-mode-card.disabled .wiz-lvl-toggle{opacity:.45}.wiz-mode-hint.gated{color:var(--color-warning);font-weight:600}.wiz-mode-card.on{background:#ff2d6a14;border-color:var(--color-accent-primary)}.wiz-mode-icon{font-size:22px;line-height:1;flex-shrink:0;margin-top:2px}.wiz-mode-body{flex:1;min-width:0}.wiz-mode-title{font-family:var(--font-display);font-weight:600;font-size:var(--font-size-base);color:var(--color-text-white)}.wiz-mode-hint{font-size:var(--font-size-xs);color:var(--color-text-neon-muted);margin-top:2px;line-height:1.45}.wiz-mode-card.on .wiz-lvl-toggle{background:var(--color-accent-primary);border-color:var(--color-accent-primary)}.wiz-mode-card.on .wiz-lvl-toggle:after{left:18px;background:var(--color-bg-primary)}.wiz-coremode-cards{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-sm)}.wiz-coremode-card{position:relative;display:flex;flex-direction:column;align-items:center;text-align:center;gap:6px;padding:var(--space-md) var(--space-sm);background:var(--color-dark-surface);border:1.5px solid var(--color-border-neon);border-radius:var(--radius-xl);cursor:pointer;overflow:hidden;transition:transform var(--transition-fast),box-shadow var(--transition-fast),background var(--transition-fast),border-color var(--transition-fast),opacity var(--transition-fast)}.wiz-coremode-card:hover{background:var(--color-dark-surface-hover)}.wiz-coremode-card .wiz-mode-icon{font-size:32px;margin-top:0}.wiz-coremode-card .wiz-mode-body{flex:none}.wiz-coremode-card .wiz-mode-title{font-weight:900;letter-spacing:.02em;text-transform:uppercase}.wiz-coremode-card .wiz-mode-hint{color:var(--color-text-dim)}.wiz-coremode-card.selected{transform:translateY(-2px)}.wiz-coremode-card--pink.selected{border-color:var(--color-accent-primary);background:radial-gradient(120% 100% at 50% 0%,#ff2d6a38,#ff2d6a0a);box-shadow:0 0 24px #ff2d6a4d}.wiz-coremode-card--cyan.selected{border-color:var(--color-accent-secondary);background:radial-gradient(120% 100% at 50% 0%,#00f5ff33,#00f5ff08);box-shadow:0 0 24px #00f5ff47}.wiz-coremode-card.dim{opacity:.5}.wiz-coremode-card.dim:hover{opacity:.8}.wiz-coremode-badge{position:absolute;top:8px;right:8px;font-family:var(--font-display);font-weight:800;font-size:9px;letter-spacing:.06em;text-transform:uppercase;padding:2px 7px;border-radius:var(--radius-full)}.wiz-coremode-card--pink .wiz-coremode-badge{background:var(--color-accent-primary);color:var(--color-text-white)}.wiz-coremode-card--cyan .wiz-coremode-badge{background:var(--color-accent-secondary);color:#04222a}@media(prefers-reduced-motion:reduce){.wiz-coremode-card{transition:none}.wiz-coremode-card.selected{transform:none}}.home-cast-link{display:inline-flex;align-items:center;gap:var(--space-xs);padding:var(--space-xs) var(--space-md);background:var(--color-dark-surface);border:1px solid var(--color-accent-secondary);border-radius:var(--radius-full);font-family:var(--font-display);font-weight:600;font-size:var(--font-size-sm);color:var(--color-accent-secondary);text-decoration:none;position:relative;z-index:1;transition:var(--transition-fast)}.home-cast-link:hover{background:#00f5ff14;box-shadow:var(--glow-secondary)}.home-cast-link.hidden{display:none}.wiz-detail-test{align-self:flex-start;margin-top:var(--space-xs);padding:var(--space-xs) var(--space-md);font-size:var(--font-size-xs)}.wiz-detail-test[disabled]{opacity:.5;cursor:not-allowed}.wiz-wled-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:var(--space-xs)}.wiz-wled-row{display:flex;align-items:center;gap:var(--space-xs)}.wiz-wled-phase{font-family:var(--font-display);font-weight:700;font-size:10px;letter-spacing:.1em;color:var(--color-text-dim);min-width:72px}.wiz-wled-input{width:60px;padding:4px 8px;text-align:center;font-family:ui-monospace,monospace;font-size:var(--font-size-sm)}.home-utility-row{display:flex;gap:var(--space-sm);flex-wrap:wrap;justify-content:center;position:relative;z-index:1}.home-utility-btn{display:inline-flex;align-items:center;gap:var(--space-xs);padding:var(--space-xs) var(--space-md);background:var(--color-dark-surface);border:1px solid var(--color-border-neon);border-radius:var(--radius-full);font-family:var(--font-display);font-weight:600;font-size:var(--font-size-sm);color:var(--color-text-neon-muted);cursor:pointer;transition:var(--transition-fast)}.home-utility-btn:hover{color:var(--color-text-white);border-color:var(--color-accent-secondary)}.home-utility-btn.hidden{display:none}.home-cta-end{border-color:#ff004066;color:var(--color-error-neon)}.home-cta-end:hover{background:#ff00401a;box-shadow:0 0 12px #ff00404d}.home-cta-end.hidden{display:none}.home-hero-card--setup{border-color:var(--color-border-neon);box-shadow:none;gap:var(--space-md)}.home-setup-glyph{width:56px;height:56px;display:grid;place-items:center;color:var(--color-accent-secondary);text-shadow:0 0 12px rgba(0,245,255,.4)}.home-setup-glyph svg{width:100%;height:100%}.home-hero-sub--plain{color:var(--color-text-neon-muted);font-family:var(--font-body);text-align:center;font-size:var(--font-size-sm);line-height:1.5;max-width:280px}.home-cta-setup{flex:1;padding:var(--space-md);font-size:var(--font-size-base);box-shadow:var(--glow-primary),0 0 40px #ff2d6a40}.home-cta-setup.hidden,body.is-learning-screen .player-header,body.is-ingame .player-header{display:none}#tour-view.view:not(.hidden){display:flex;flex-direction:column}.tour-container{min-height:100vh;padding:var(--space-xl) var(--space-md) var(--space-md);background:radial-gradient(circle at 50% 10%,rgba(255,45,106,.1),transparent 55%),radial-gradient(circle at 85% 90%,rgba(0,245,255,.08),transparent 55%),var(--color-bg-primary);display:flex;flex-direction:column}.tour-header-wiz{margin-bottom:var(--space-lg);display:flex;flex-direction:column;gap:var(--space-sm)}.tour-step-count{display:flex;align-items:center;justify-content:space-between;font-family:var(--font-body);font-size:var(--font-size-xs);font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--color-text-neon-muted)}.tour-step-count .of{color:var(--color-text-dim);font-weight:500}.tour-skip-link{font-family:var(--font-body);font-size:var(--font-size-sm);font-weight:500;color:var(--color-text-dim);background:transparent;border:0;cursor:pointer;padding:var(--space-xs) var(--space-sm);transition:color var(--transition-fast)}.tour-skip-link:hover,.tour-skip-link:focus-visible{color:var(--color-text-neon-muted);outline:none}.tour-wiz-progress{display:flex;gap:4px;width:100%}.tour-wiz-seg{flex:1;height:3px;background:#ffffff14;border-radius:var(--radius-full);overflow:hidden;position:relative}.tour-wiz-seg.filled{background:linear-gradient(90deg,var(--color-accent-primary),var(--color-accent-secondary));box-shadow:0 0 12px #ff2d6a80}.tour-wiz-seg.active .tour-wiz-seg-inner{height:100%;width:60%;background:linear-gradient(90deg,var(--color-accent-primary),var(--color-accent-secondary));box-shadow:0 0 12px #ff2d6a80;border-radius:var(--radius-full)}.tour-card{flex:1;display:flex;flex-direction:column;align-items:center;padding:var(--space-md) 0;animation:tour-card-enter var(--transition-slow) ease-out}@keyframes tour-card-enter{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}.tour-card.hidden{display:none}@media(prefers-reduced-motion:reduce){.tour-card{animation:none}}.tour-title{font-family:var(--font-display);font-weight:900;font-size:2.5rem;line-height:1;text-align:center;color:var(--color-text-white);letter-spacing:-.02em;margin-bottom:var(--space-sm)}.tour-caption{font-family:var(--font-body);font-weight:500;font-size:var(--font-size-lg);text-align:center;color:var(--color-text-neon-muted);margin-bottom:var(--space-xl);max-width:320px}.tour-preview{flex:1;width:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-md);margin-bottom:var(--space-md)}.tour-preview-album{width:88px;height:88px;border-radius:var(--radius-lg);background:linear-gradient(135deg,#2a1b4a,#1a1a24);border:1px solid rgba(255,255,255,.08);display:flex;align-items:center;justify-content:center;position:relative;overflow:hidden}.tour-preview-album:after{content:"";position:absolute;width:32px;height:32px;border-radius:50%;background:radial-gradient(circle,#0a0a12 28%,#2a2a3a 29% 62%,#0a0a12 63%);border:1px solid rgba(255,255,255,.08)}.tour-preview-album:before{content:"\266a";position:absolute;font-size:26px;color:var(--color-accent-secondary);opacity:.75;z-index:1}.tour-year-display{display:flex;align-items:center;justify-content:center;gap:var(--space-md)}.tour-year-adjust{width:38px;height:38px;border-radius:50%;border:1.5px solid rgba(255,255,255,.25);background:transparent;color:#fff9;font-size:var(--font-size-xl);font-weight:400;display:flex;align-items:center;justify-content:center}.tour-year-big{font-family:var(--font-display);font-weight:900;font-size:4.25rem;color:var(--color-accent-secondary);text-shadow:0 0 24px rgba(0,245,255,.6);line-height:1;letter-spacing:-.03em}.tour-preview-slider{width:100%;max-width:320px;display:flex;align-items:center;gap:var(--space-sm)}.tour-slider-label{font-family:var(--font-body);font-size:var(--font-size-sm);color:#ffffff80;min-width:34px;text-align:center}.tour-slider-track{flex:1;height:4px;background:#ffffff26;border-radius:2px;position:relative}.tour-slider-thumb{position:absolute;top:50%;left:45.3%;transform:translate(-50%,-50%);width:20px;height:20px;border-radius:50%;background:var(--color-accent-secondary);box-shadow:0 0 16px #00f5ffcc;border:2px solid var(--color-bg-primary)}.tour-bet-button{background:linear-gradient(135deg,#ff2d6a1f,#ff2d6a0f);border:2px solid var(--color-accent-primary);border-radius:var(--radius-xl);padding:var(--space-md) var(--space-lg);display:flex;align-items:center;gap:var(--space-sm);box-shadow:0 0 24px #ff2d6a59}.tour-bet-button .tour-bet-dice{font-size:30px;filter:drop-shadow(0 0 6px rgba(255,45,106,.6))}.tour-bet-button .tour-bet-label{font-family:var(--font-display);font-weight:700;font-size:var(--font-size-lg);color:var(--color-text-white)}.tour-bet-score{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);background:var(--color-bg-surface);border-radius:var(--radius-md);border:1px solid rgba(255,255,255,.06)}.tour-bet-score-base{font-family:var(--font-display);font-weight:700;font-size:var(--font-size-2xl);color:var(--color-text-neon-muted)}.tour-bet-score-op{color:var(--color-text-dim);font-size:var(--font-size-lg)}.tour-bet-score-multi{font-family:var(--font-display);font-weight:700;font-size:var(--font-size-2xl);color:var(--color-accent-primary)}.tour-bet-score-final{font-family:var(--font-display);font-weight:900;font-size:var(--font-size-4xl);color:var(--color-success-neon);text-shadow:0 0 12px rgba(57,255,20,.5)}.tour-steal-button{background:linear-gradient(135deg,#00f5ff1f,#00f5ff0a);border:2px solid var(--color-accent-secondary);border-radius:var(--radius-xl);padding:var(--space-md) var(--space-lg);display:flex;align-items:center;gap:var(--space-sm);box-shadow:0 0 24px #00f5ff66}.tour-steal-button .tour-steal-ninja{font-size:30px}.tour-steal-button .tour-steal-label{font-family:var(--font-display);font-weight:700;font-size:var(--font-size-lg);color:var(--color-text-white)}.tour-steal-targets{display:flex;gap:var(--space-sm);align-items:center}.tour-steal-target{background:var(--color-bg-surface);border-radius:var(--radius-md);padding:var(--space-sm) var(--space-md);font-family:var(--font-body);font-size:var(--font-size-sm);font-weight:500;color:var(--color-text-neon-muted);border:1px solid rgba(255,255,255,.06)}.tour-steal-target.highlighted{color:var(--color-text-white);border-color:var(--color-accent-secondary);box-shadow:0 0 12px #00f5ff59}.tour-hint{font-family:var(--font-body);font-size:var(--font-size-sm);color:#fff6;text-align:center;font-style:italic;margin-top:var(--space-xs)}.tour-ta-fields{display:flex;flex-direction:column;gap:var(--space-sm);width:100%}.tour-ta-field{display:flex;flex-direction:column;gap:4px;padding:10px 14px;background:linear-gradient(180deg,#ff2d6a0f,#ffffff05);border:1px solid rgba(255,45,106,.22);border-radius:var(--radius-lg);text-align:left}.tour-ta-field-label{font-family:var(--font-display);font-weight:700;font-size:var(--font-size-xs);letter-spacing:.08em;text-transform:uppercase;color:var(--color-text-neon-muted)}.tour-ta-field-val{font-family:var(--font-body);font-weight:600;font-size:var(--font-size-md);color:var(--color-text-white)}.tour-artist-prompt{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);background:var(--color-bg-surface);border-radius:var(--radius-md);border:1px solid rgba(255,255,255,.06);width:100%;max-width:320px}.tour-artist-prompt .tour-artist-mic{font-size:var(--font-size-xl)}.tour-artist-prompt .tour-artist-who{font-family:var(--font-body);font-size:var(--font-size-base);font-weight:500;color:var(--color-text-white)}.tour-artist-prompt .tour-artist-bonus{margin-left:auto;background:#22c55e26;color:var(--color-success);font-weight:700;font-size:var(--font-size-sm);padding:2px var(--space-sm);border-radius:var(--radius-full)}.tour-artist-grid{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-sm);width:100%;max-width:320px}.tour-artist-option{min-height:48px;padding:var(--space-sm) var(--space-md);border:2px solid rgba(255,255,255,.12);border-radius:var(--radius-md);background:var(--color-bg-surface);color:var(--color-text-white);font-family:var(--font-body);font-size:var(--font-size-base);font-weight:500;display:flex;align-items:center;justify-content:center;cursor:default}.tour-artist-option.is-winner{background:var(--color-success);border-color:var(--color-success);color:var(--color-text-white);box-shadow:var(--glow-primary)}.tour-footer{margin-top:auto;padding-top:var(--space-md);display:flex;gap:var(--space-sm);align-items:stretch}.btn-tour-skip{flex:1;background:transparent;color:var(--color-text-neon-muted);border:1.5px solid rgba(255,255,255,.15);border-radius:var(--radius-lg);padding:var(--space-md) var(--space-md);font-family:var(--font-body);font-weight:600;font-size:var(--font-size-md);cursor:pointer}.btn-tour-skip:hover,.btn-tour-skip:focus-visible{border-color:#ffffff4d;color:var(--color-text-white);outline:none}.btn-tour-next{flex:2;background:var(--color-accent-primary);color:var(--color-text-white);border:none;border-radius:var(--radius-lg);padding:var(--space-md) var(--space-lg);font-family:var(--font-display);font-weight:700;font-size:var(--font-size-lg);box-shadow:var(--glow-primary);cursor:pointer;display:flex;align-items:center;justify-content:center;gap:var(--space-sm)}.btn-tour-next .chev{opacity:.85}#ready-view.view:not(.hidden){display:flex;flex-direction:column}.ready-container{min-height:100vh;padding:var(--space-xl);background:radial-gradient(circle at 50% 30%,rgba(255,45,106,.1),transparent 55%),radial-gradient(circle at 85% 80%,rgba(0,245,255,.08),transparent 55%),var(--color-bg-primary);display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:var(--space-sm)}.ready-wordmark{font-family:var(--font-display);font-weight:900;font-size:5rem;letter-spacing:-.02em;margin-bottom:var(--space-sm);text-shadow:0 0 48px rgba(255,45,106,.55);animation:ready-wordmark-in .5s ease-out}.ready-wordmark .beat{color:var(--color-text-white)}.ready-wordmark .ify{background:linear-gradient(90deg,var(--color-accent-primary),var(--color-accent-secondary));-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:transparent}@keyframes ready-wordmark-in{0%{opacity:0;transform:translateY(16px)}to{opacity:1;transform:translateY(0)}}.ready-name{font-family:var(--font-display);font-weight:700;font-size:var(--font-size-3xl);color:var(--color-text-white);margin-bottom:var(--space-xs);animation:ready-fade-in .5s ease-out .1s both}.ready-subtitle{font-family:var(--font-body);font-size:var(--font-size-md);color:var(--color-text-neon-muted);margin-bottom:var(--space-2xl);animation:ready-fade-in .5s ease-out .2s both}@keyframes ready-fade-in{0%{opacity:0}to{opacity:1}}.ready-waiting{display:flex;flex-direction:column;align-items:center;gap:var(--space-md);animation:ready-fade-in .5s ease-out .3s both}.ready-pulse{position:relative;width:16px;height:16px;border-radius:50%;background:var(--color-accent-secondary);box-shadow:0 0 12px #00f5ffb3}.ready-pulse:before{content:"";position:absolute;inset:-8px;border-radius:50%;border:2px solid var(--color-accent-secondary);opacity:.6;animation:ready-pulse-ring 1.8s ease-out infinite}@keyframes ready-pulse-ring{0%{transform:scale(.6);opacity:.8}to{transform:scale(2.4);opacity:0}}@media(prefers-reduced-motion:reduce){.ready-wordmark,.ready-name,.ready-subtitle,.ready-waiting{animation:none}.ready-pulse:before{animation:none;opacity:0}}.ready-label{font-family:var(--font-body);font-size:var(--font-size-md);font-weight:500;color:var(--color-text-white)}.ready-count{font-family:var(--font-body);font-size:var(--font-size-sm);color:var(--color-text-dim)}.replay-tour-link{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);background:transparent;border:1px dashed rgba(255,45,106,.4);border-radius:var(--radius-md);color:var(--color-accent-primary);font-family:var(--font-body);font-size:var(--font-size-sm);font-weight:600;text-decoration:none;margin-bottom:var(--space-sm);cursor:pointer;width:100%;transition:all var(--transition-fast)}.replay-tour-link:hover,.replay-tour-link:focus-visible{border-color:var(--color-accent-primary);background:#ff2d6a0d;outline:none}.replay-tour-link .arrow{margin-left:auto}.home-player-tile--learning{border-style:dashed!important;opacity:.72}.home-player-tile-tour{position:absolute;top:-6px;right:-6px;background:#00f5ff1a;color:var(--color-accent-secondary);font-family:var(--font-body);font-size:9px;font-weight:700;letter-spacing:.06em;padding:2px 6px;border-radius:var(--radius-full);border:1px solid rgba(0,245,255,.4);box-shadow:0 0 8px #00f5ff40}.home-learning-warning{display:flex;align-items:center;justify-content:center;gap:var(--space-xs);padding:var(--space-sm) var(--space-md);margin-bottom:var(--space-sm);background:#ff660014;border:1px solid rgba(255,102,0,.25);border-radius:var(--radius-md);color:var(--color-warning-alt);font-family:var(--font-body);font-size:var(--font-size-sm);font-weight:500;text-align:center}.home-learning-warning.hidden{display:none}.player-tiles-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(84px,1fr));gap:var(--space-sm);justify-items:center;width:100%}.player-tiles-grid:empty{display:none}.player-tile{position:relative;width:100%;aspect-ratio:1;padding:var(--space-sm);border-radius:var(--radius-lg);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;background:linear-gradient(135deg,var(--tile-from),var(--tile-to));border:1.5px solid var(--tile-border);box-shadow:0 0 14px var(--tile-glow);--tile-from: rgba(0, 245, 255, .32);--tile-to: rgba(0, 245, 255, .08);--tile-border: rgba(0, 245, 255, .7);--tile-glow: rgba(0, 245, 255, .35);transition:box-shadow var(--transition-fast),border-color var(--transition-fast)}.player-tile-initial{font-family:var(--font-display);font-weight:900;font-size:var(--font-size-3xl);line-height:1;color:var(--color-text-white);text-shadow:0 2px 8px rgba(0,0,0,.4)}.player-tile-name{font-family:var(--font-display);font-weight:700;font-size:var(--font-size-xs);color:var(--color-text-white);max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding:0 2px}.player-tile--c2{--tile-from: rgba(57, 255, 20, .32);--tile-to: rgba(57, 255, 20, .08);--tile-border: rgba(57, 255, 20, .65);--tile-glow: rgba(57, 255, 20, .32)}.player-tile--c3{--tile-from: rgba(255, 102, 0, .32);--tile-to: rgba(255, 102, 0, .08);--tile-border: rgba(255, 102, 0, .65);--tile-glow: rgba(255, 102, 0, .32)}.player-tile--c4{--tile-from: rgba(0, 245, 255, .22);--tile-to: rgba(0, 245, 255, .04);--tile-border: rgba(0, 245, 255, .5);--tile-glow: rgba(0, 245, 255, .22)}.player-tile--host{--tile-from: rgba(255, 45, 106, .35);--tile-to: rgba(255, 45, 106, .08);--tile-border: rgba(255, 45, 106, .85);--tile-glow: rgba(255, 45, 106, .5);box-shadow:var(--glow-primary),0 0 22px #ff2d6a59}.player-tile-crown{position:absolute;top:-10px;right:-10px;font-size:20px;line-height:1;filter:drop-shadow(0 0 6px rgba(255,45,106,.8));pointer-events:none}.player-tile-you-chip{position:absolute;top:-10px;right:-10px;background:var(--color-accent-secondary);color:var(--color-bg-primary);font-family:var(--font-display);font-weight:900;font-size:9px;letter-spacing:.1em;padding:3px 7px;border-radius:var(--radius-full);box-shadow:0 0 12px #00f5ff99;pointer-events:none}.player-tile-away{position:absolute;bottom:-8px;left:50%;transform:translate(-50%);font-family:var(--font-body);font-size:9px;font-weight:600;text-transform:uppercase;letter-spacing:.08em;color:var(--color-text-dim);background:var(--color-bg-primary);padding:2px 6px;border-radius:var(--radius-full);border:1px solid rgba(255,255,255,.12);pointer-events:none}.player-tile--disconnected{opacity:.5;filter:grayscale(.4)}.player-tile.is-new{animation:player-tile-pop var(--transition-slow) ease-out}@keyframes player-tile-pop{0%{transform:scale(.6);opacity:0}60%{transform:scale(1.08);opacity:1}to{transform:scale(1);opacity:1}}@media(prefers-reduced-motion:reduce){.player-tile.is-new{animation:none}}.reveal-header-v2{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--space-md);gap:var(--space-sm)}.reveal-header-v2 .round-count{font-family:var(--font-body);font-size:var(--font-size-xs);font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--color-text-neon-muted);display:flex;align-items:center;gap:4px}.reveal-header-v2 .header-right{display:flex;align-items:center;gap:var(--space-sm)}.reveal-advance-pill{position:relative;width:32px;height:32px;flex-shrink:0;display:inline-flex;align-items:center;justify-content:center}.reveal-advance-pill.hidden{display:none}.reveal-advance-svg{width:100%;height:100%;transform:rotate(-90deg)}.reveal-advance-bg{fill:none;stroke:#ffffff1f;stroke-width:5}.reveal-advance-fg{fill:none;stroke:var(--color-accent-secondary);stroke-width:5;stroke-linecap:round;transition:stroke-dashoffset .5s linear;filter:drop-shadow(var(--glow-secondary))}.reveal-advance-num{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-family:var(--font-display);font-weight:900;font-size:13px;color:var(--color-accent-secondary)}.info-btn{width:28px;height:28px;border-radius:50%;border:1px solid rgba(255,255,255,.14);background:var(--color-bg-surface);color:var(--color-text-neon-muted);font-size:var(--font-size-base);font-weight:700;font-family:var(--font-display);display:flex;align-items:center;justify-content:center;cursor:pointer;transition:color var(--transition-fast),border-color var(--transition-fast);padding:0}.info-btn:hover,.info-btn:focus-visible{color:var(--color-text-white);border-color:#ffffff4d;outline:none}.song-strip{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-sm) var(--space-sm) var(--space-sm);background:#ffffff0a;border-radius:var(--radius-lg);border:1px solid rgba(255,255,255,.08);margin-bottom:var(--space-md)}.song-strip-cover{width:56px;height:56px;border-radius:var(--radius-md);object-fit:cover;flex-shrink:0;background:linear-gradient(135deg,#ff6b9a,#6366f1)}.song-strip-info{flex:1;min-width:0}.song-strip-title{font-family:var(--font-display);font-weight:700;font-size:var(--font-size-md);color:var(--color-text-white);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.song-strip-artist{font-family:var(--font-body);font-size:var(--font-size-sm);color:var(--color-text-neon-muted);margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chip-row{display:flex;gap:var(--space-xs);margin-bottom:var(--space-sm);flex-wrap:wrap}.chip-row.hidden{display:none}.chip-row .chip{display:inline-flex;align-items:center;gap:5px;padding:5px 10px;border-radius:var(--radius-full);font-family:var(--font-body);font-size:var(--font-size-xs);font-weight:700;letter-spacing:.04em}.chip-row .chip--bet-won{background:#ff2d6a1f;border:1px solid rgba(255,45,106,.5);color:var(--color-accent-primary);box-shadow:0 0 12px #ff2d6a33}.chip-row .chip--bet-lost{background:#ff004014;border:1px solid rgba(255,0,64,.4);color:var(--color-error-neon)}.chip-row .chip--streak{background:#ff66001f;border:1px solid rgba(255,102,0,.5);color:var(--color-warning-alt)}.duel{padding:var(--space-lg) var(--space-xs) var(--space-md);margin-bottom:var(--space-sm)}.duel-emotion{text-align:center;font-family:var(--font-display);font-weight:900;font-size:var(--font-size-2xl);letter-spacing:.06em;margin-bottom:var(--space-md);min-height:1.2em;transition:color var(--transition-normal)}.duel-emotion.hidden{visibility:hidden}.duel-emotion--exact{color:var(--color-success-neon);text-shadow:0 0 16px rgba(57,255,20,.55)}.duel-emotion--close{color:var(--color-success-neon);text-shadow:0 0 14px rgba(57,255,20,.45)}.duel-emotion--wrong{color:var(--color-error-neon);text-shadow:0 0 14px rgba(255,0,64,.45)}.duel-emotion--missed{color:var(--color-text-dim);text-shadow:none}.duel-row{display:grid;grid-template-columns:1fr auto 1fr;gap:var(--space-sm);align-items:center}.duel-side{text-align:center;min-width:0}.duel-label{font-family:var(--font-body);font-size:var(--font-size-xs);letter-spacing:.08em;text-transform:uppercase;color:var(--color-text-dim);font-weight:600;margin-bottom:var(--space-sm)}.duel-year{font-family:var(--font-display);font-weight:900;font-size:clamp(40px,12vw,64px);line-height:1;letter-spacing:-.03em}.duel-year.mine{color:var(--color-text-neon-muted)}.duel-year.correct{color:var(--color-accent-secondary);text-shadow:0 0 24px rgba(0,245,255,.6)}.duel-gap{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;min-width:48px}.duel-gap-x{font-family:var(--font-display);font-weight:700;font-size:var(--font-size-xl);color:var(--color-text-dim);opacity:.6;line-height:1}.duel-gap-n{font-family:var(--font-display);font-weight:900;font-size:var(--font-size-2xl);color:var(--color-error-neon);text-shadow:0 0 10px rgba(255,0,64,.35);line-height:1}.duel-gap--exact .duel-gap-n{color:var(--color-success-neon);text-shadow:0 0 10px rgba(57,255,20,.5)}.duel-gap--close .duel-gap-n{color:var(--color-success-neon);text-shadow:0 0 8px rgba(57,255,20,.35)}.duel-gap-unit{font-family:var(--font-body);font-size:9px;color:var(--color-text-dim);text-transform:uppercase;letter-spacing:.1em;margin-top:3px}.score-row{display:flex;align-items:center;justify-content:space-between;padding:14px 18px;background:var(--color-bg-surface);border-radius:var(--radius-lg);border:1px solid rgba(0,245,255,.25);box-shadow:0 0 14px #00f5ff1f;margin-bottom:var(--space-md);gap:var(--space-sm)}.score-row-left{font-family:var(--font-body);font-size:var(--font-size-xs);color:var(--color-text-neon-muted);font-weight:700;text-transform:uppercase;letter-spacing:.08em;display:flex;flex-direction:column;gap:3px;min-width:0}.score-row-subtitle{color:var(--color-text-white);font-size:var(--font-size-sm);font-weight:700;letter-spacing:0;text-transform:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.score-row-right{display:flex;align-items:center;gap:var(--space-sm);flex-shrink:0}.score-row-pts{font-family:var(--font-display);font-weight:900;font-size:38px;color:var(--color-accent-secondary);text-shadow:0 0 18px rgba(0,245,255,.5);line-height:1}.standings-section .leaderboard-list{display:flex;flex-direction:column;gap:6px}.sheet-backdrop{position:fixed;inset:0;z-index:400;display:flex;align-items:flex-end;justify-content:center}.sheet-backdrop.hidden{display:none}.sheet-dim{position:absolute;inset:0;background:#0a0a1299;backdrop-filter:blur(2px);animation:sheet-dim-in .2s ease-out}@keyframes sheet-dim-in{0%{opacity:0}to{opacity:1}}.sheet{position:relative;z-index:1;width:100%;max-width:520px;background:linear-gradient(180deg,#14141e,#0a0a12);border-top:1px solid rgba(0,245,255,.25);border-radius:var(--radius-2xl) var(--radius-2xl) 0 0;box-shadow:0 -12px 40px #00000080,0 -4px 16px #00f5ff1a;padding:14px 20px calc(28px + env(safe-area-inset-bottom,0));max-height:80vh;overflow-y:auto;animation:sheet-slide-up .32s cubic-bezier(.22,.8,.32,1)}@keyframes sheet-slide-up{0%{transform:translateY(100%)}to{transform:translateY(0)}}@media(prefers-reduced-motion:reduce){.sheet-dim,.sheet{animation:none}}.sheet-handle{width:40px;height:4px;border-radius:2px;background:#fff3;margin:0 auto 16px}.sheet-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--space-md)}.sheet-title{font-family:var(--font-display);font-weight:800;font-size:var(--font-size-lg);display:flex;align-items:center;gap:8px;color:var(--color-text-white)}.sheet-close{width:32px;height:32px;border-radius:50%;background:#ffffff14;border:0;color:var(--color-text-neon-muted);font-size:var(--font-size-base);font-weight:700;display:flex;align-items:center;justify-content:center;cursor:pointer}.sheet-close:hover,.sheet-close:focus-visible{color:var(--color-text-white);background:#ffffff24;outline:none}.breakdown-list{display:flex;flex-direction:column;margin-bottom:var(--space-md)}.breakdown-row{display:flex;align-items:center;justify-content:space-between;padding:10px 0;font-family:var(--font-body);font-size:var(--font-size-base)}.breakdown-row+.breakdown-row{border-top:1px solid rgba(255,255,255,.05)}.breakdown-row .label{color:var(--color-text-neon-muted);display:flex;align-items:center;gap:8px}.breakdown-row .label .emoji{font-size:var(--font-size-md)}.breakdown-row .value{font-family:var(--font-display);font-weight:800;font-size:var(--font-size-md)}.breakdown-row .value--positive{color:var(--color-success-neon)}.breakdown-row .value--multiplier{color:var(--color-accent-primary)}.breakdown-row .value--neutral{color:var(--color-text-white)}.breakdown-total{display:flex;align-items:center;justify-content:space-between;padding:var(--space-md);border-radius:var(--radius-lg);background:linear-gradient(90deg,#00f5ff14,#ff2d6a0d);border:1px solid rgba(0,245,255,.3)}.breakdown-total .label{font-family:var(--font-display);font-weight:700;font-size:var(--font-size-md);color:var(--color-text-white)}.breakdown-total .value{font-family:var(--font-display);font-weight:900;font-size:var(--font-size-3xl);color:var(--color-accent-secondary);text-shadow:0 0 16px rgba(0,245,255,.5)}.breakdown-total--zero .value{color:var(--color-text-dim);text-shadow:none}.breakdown-empty{text-align:center;padding:var(--space-md) 0}.breakdown-empty-icon{font-size:42px;margin-bottom:var(--space-sm)}.breakdown-empty-text{color:var(--color-text-neon-muted);font-family:var(--font-body);font-size:var(--font-size-base);margin-bottom:var(--space-md)}.difficulty-visual{display:flex;align-items:center;justify-content:space-between;padding:var(--space-md);background:#ff004014;border:1px solid rgba(255,0,64,.3);border-radius:var(--radius-md);margin-bottom:var(--space-sm);gap:var(--space-sm)}.difficulty-visual .left{font-family:var(--font-display);font-weight:800;font-size:var(--font-size-sm);color:var(--color-error-neon);min-width:0}.difficulty-visual .left .sub{font-family:var(--font-body);font-size:var(--font-size-xs);font-weight:500;color:var(--color-text-neon-muted);margin-top:3px}.difficulty-visual .stars{font-size:var(--font-size-md);letter-spacing:2px;white-space:nowrap}.difficulty-visual .star-filled{color:var(--color-warning-alt)}.difficulty-visual .star-empty{color:#ffffff26}.stats-grid{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-sm);margin-bottom:var(--space-sm)}.stats-card{padding:12px 14px;background:#ffffff0a;border:1px solid rgba(255,255,255,.08);border-radius:var(--radius-md)}.stats-card .lbl{font-family:var(--font-body);font-size:10px;color:var(--color-text-dim);font-weight:700;letter-spacing:.08em;text-transform:uppercase}.stats-card .val{font-family:var(--font-display);font-weight:800;font-size:var(--font-size-2xl);margin-top:4px;color:var(--color-text-white)}.stats-card .val.cyan{color:var(--color-accent-secondary)}.stats-card .val.success{color:var(--color-success-neon)}.stats-card .val.warn{color:var(--color-error-neon)}.stats-card .sub{font-family:var(--font-body);font-size:10px;color:var(--color-text-neon-muted);margin-top:2px}.furthest-list{display:flex;flex-direction:column;gap:6px}.furthest-row{display:flex;align-items:center;justify-content:space-between;padding:10px 12px;background:#ffffff08;border-radius:var(--radius-md);font-family:var(--font-body);font-size:var(--font-size-sm)}.furthest-row .name{font-weight:600;color:var(--color-text-white)}.furthest-row .off{color:var(--color-error-neon);font-family:var(--font-display);font-weight:700}.stats-empty{text-align:center;color:var(--color-text-dim);font-family:var(--font-body);font-size:var(--font-size-sm);padding:var(--space-md)}.game-container--arcade{padding:0;display:flex;flex-direction:column;gap:0}.arc-header{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);position:sticky;top:0;z-index:5;background:linear-gradient(180deg,rgba(10,10,18,.95),rgba(10,10,18,.82) 72%,transparent);backdrop-filter:blur(8px);margin-bottom:var(--space-md)}.timer-float{position:fixed;top:max(env(safe-area-inset-top,0px) + 8px,8px);right:12px;z-index:100;width:52px;height:52px;border-radius:50%;background:#0a0a12c7;border:2px solid var(--color-accent-primary);box-shadow:0 0 14px #ff2d6a73,inset 0 0 8px #ff2d6a40;display:flex;align-items:center;justify-content:center;font-family:var(--font-display);font-weight:900;font-size:22px;line-height:1;color:var(--color-accent-primary);text-shadow:0 0 8px rgba(255,45,106,.6);backdrop-filter:blur(8px);transition:opacity .2s ease-out,transform .2s ease-out;pointer-events:none}.timer-float.hidden{opacity:0;transform:scale(.7);pointer-events:none}.timer-float.timer-float--visible{opacity:1;transform:scale(1)}.timer-float.timer-float--warn{border-color:var(--color-error-neon, #ff0040);color:var(--color-error-neon, #ff0040);box-shadow:0 0 16px #ff004099,inset 0 0 8px #ff00404d;animation:arc-urgency .8s ease-in-out infinite}@media(prefers-reduced-motion:reduce){.timer-float{transition:none}.timer-float.timer-float--warn{animation:none}}.arc-pulse-orb{width:56px;height:56px;border-radius:50%;display:flex;align-items:center;justify-content:center;position:relative;overflow:hidden;background:linear-gradient(135deg,#ff6b9a,#6366f1);box-shadow:0 0 24px #ff2d6a80;flex-shrink:0}.arc-pulse-orb:before{content:"";position:absolute;inset:-4px;border-radius:50%;border:2px solid rgba(255,45,106,.5);animation:arc-orb-pulse 1.4s ease-out infinite;pointer-events:none}.arc-pulse-orb--steady:before{animation:none;opacity:0}@keyframes arc-orb-pulse{0%{opacity:.8;transform:scale(1)}to{opacity:0;transform:scale(1.25)}}@media(prefers-reduced-motion:reduce){.arc-pulse-orb:before{animation:none;opacity:0}}.arc-pulse-orb-img{width:100%;height:100%;object-fit:cover;border-radius:50%;z-index:1;filter:blur(12px);transform:scale(1.15);transition:filter .4s ease,transform .4s ease}.arc-round-center{text-align:center;font-family:var(--font-display);font-weight:800;font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--color-text-neon-muted);line-height:1.3;overflow:hidden}.arc-round-label{display:block}.arc-round-big{display:block;font-size:20px;color:var(--color-text-white);letter-spacing:0;text-transform:none;margin-top:2px}.arc-round-sep{color:var(--color-text-dim);margin:0 2px;font-weight:500}.timer-neon{width:72px;height:72px;border-radius:50%;background:var(--color-bg-primary);border:3px solid var(--color-accent-primary);box-shadow:var(--glow-primary),inset 0 0 12px #ff2d6a4d;display:flex;align-items:center;justify-content:center;font-family:var(--font-display);font-weight:900;font-size:30px;color:var(--color-accent-primary);text-shadow:0 0 10px rgba(255,45,106,.6);flex-shrink:0;line-height:1}.timer-neon .timer{color:inherit;font-family:inherit;font-size:inherit;font-weight:inherit}.timer-neon.timer-neon--warn{border-color:var(--color-error-neon);color:var(--color-error-neon);box-shadow:0 0 20px #ff004099,inset 0 0 12px #ff00404d;animation:arc-urgency .8s ease-in-out infinite}@keyframes arc-urgency{0%,to{transform:scale(1)}50%{transform:scale(1.06)}}.timer-neon.timer-neon--catchup{animation:timer-catchup-glow .4s ease-out}@keyframes timer-catchup-glow{0%{box-shadow:var(--glow-primary),inset 0 0 12px #ff2d6a4d}45%{box-shadow:0 0 26px #00f5ffb3,inset 0 0 16px #00f5ff59}to{box-shadow:var(--glow-primary),inset 0 0 12px #ff2d6a4d}}@media(prefers-reduced-motion:reduce){.timer-neon.timer-neon--warn,.timer-neon.timer-neon--catchup{animation:none}}.arc-chip-row{display:flex;gap:6px;flex-wrap:wrap;padding:0 var(--space-md);margin-bottom:var(--space-md)}.arc-chip-row.hidden{display:none}.arc-chip{display:inline-flex;align-items:center;gap:5px;padding:4px 10px;border-radius:var(--radius-full);font-family:var(--font-body);font-size:11px;font-weight:700;letter-spacing:.04em}.arc-chip--steal{color:var(--color-accent-secondary);background:#00f5ff14;border:1px solid rgba(0,245,255,.4)}.arc-chip--closest-wins{color:var(--color-success-neon);background:#39ff1414;border:1px solid rgba(57,255,20,.4)}.arc-chip--intro{color:var(--color-warning-alt);background:#ff66001f;border:1px solid rgba(255,102,0,.5)}.arc-chip--final{color:var(--color-accent-primary);background:#ff2d6a1f;border:1px solid rgba(255,45,106,.5);text-transform:uppercase}.year-xxl{text-align:center;font-family:var(--font-display);font-weight:900;font-size:clamp(96px,34vw,128px);line-height:1;letter-spacing:-.04em;background:linear-gradient(180deg,var(--color-text-white) 0%,rgba(0,245,255,.85) 100%);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;text-shadow:0 0 32px rgba(0,245,255,.35);margin:4px 0 var(--space-md);padding:0 var(--space-md);max-width:100%}.year-xxl--locked{background:linear-gradient(180deg,var(--color-success-neon) 0%,rgba(57,255,20,.7) 100%);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;text-shadow:0 0 28px rgba(57,255,20,.45)}.submitted-banner{margin:0 var(--space-md) var(--space-sm);padding:8px 14px;background:#39ff1414;border:1px solid rgba(57,255,20,.4);border-radius:var(--radius-md);font-family:var(--font-display);font-weight:800;font-size:14px;color:var(--color-success-neon);letter-spacing:.04em;display:flex;align-items:center;justify-content:center;gap:6px;text-align:center}.submitted-banner.hidden{display:none}.submitted-banner .check{width:18px;height:18px;border-radius:50%;background:var(--color-success-neon);color:var(--color-bg-primary);font-size:11px;font-weight:900;display:flex;align-items:center;justify-content:center;flex-shrink:0}.slider-arcade-wrap{padding:0 var(--space-md);margin-bottom:var(--space-md);position:relative}.slider-arcade{padding:10px;background:#ffffff0a;border-radius:var(--radius-lg);border:1px solid rgba(255,255,255,.08);display:flex;align-items:center;gap:12px}.slider-btn-year{width:44px;height:44px;border-radius:50%;background:var(--color-bg-primary);border:2px solid rgba(255,255,255,.15);color:var(--color-text-white);font-family:var(--font-display);font-weight:700;font-size:22px;line-height:1;flex-shrink:0;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all var(--transition-fast);touch-action:manipulation}.slider-btn-year:hover,.slider-btn-year:focus-visible{border-color:var(--color-accent-secondary);color:var(--color-accent-secondary);outline:none}.slider-btn-year:disabled{opacity:.4;cursor:not-allowed}.slider-btn-year--coarse{position:relative;width:36px;height:36px;font-size:13px;font-weight:800;letter-spacing:-.02em}.slider-btn-year--coarse:after{content:"";position:absolute;top:50%;left:50%;width:44px;height:44px;transform:translate(-50%,-50%)}.slider-arcade{gap:8px}.slider-arcade-track{flex:1;display:flex;flex-direction:column;align-items:stretch;gap:4px}.year-scale{position:relative;height:13px;margin:0 2px;pointer-events:none}.year-scale span{position:absolute;top:0;transform:translate(-50%);font-size:10px;font-weight:600;letter-spacing:.02em;color:var(--color-text-muted, rgba(255, 255, 255, .42));font-variant-numeric:tabular-nums;white-space:nowrap;user-select:none}.slider-arcade.slider-arcade--locked .year-scale{opacity:.5}.year-slider-arcade{-webkit-appearance:none;appearance:none;width:100%;height:10px;background:linear-gradient(90deg,#00f5ff26,#ff2d6a40,#39ff1426);border-radius:var(--radius-full);outline:none;cursor:pointer}.year-slider-arcade::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:32px;height:32px;border-radius:50%;background:var(--color-accent-primary);border:3px solid var(--color-bg-primary);box-shadow:var(--glow-primary);cursor:grab;transition:transform var(--transition-fast)}.year-slider-arcade::-webkit-slider-thumb:active{cursor:grabbing;transform:scale(1.05)}.year-slider-arcade::-moz-range-thumb{width:32px;height:32px;border-radius:50%;background:var(--color-accent-primary);border:3px solid var(--color-bg-primary);box-shadow:var(--glow-primary);cursor:grab}.slider-arcade.slider-arcade--locked{opacity:.55;pointer-events:none}.slider-arcade.slider-arcade--locked .year-slider-arcade::-webkit-slider-thumb{background:var(--color-success-neon);box-shadow:0 0 16px #39ff1499}.slider-arcade.slider-arcade--locked .year-slider-arcade::-moz-range-thumb{background:var(--color-success-neon);box-shadow:0 0 16px #39ff1499}.guess-lock-stamp{position:absolute;right:calc(var(--space-md) + 8px);top:-10px;padding:3px 10px;font-family:var(--font-display);font-weight:900;font-size:10px;color:var(--color-success-neon);background:var(--color-bg-primary);border:1px solid rgba(57,255,20,.4);border-radius:var(--radius-full);letter-spacing:.08em;text-transform:uppercase;box-shadow:0 0 8px #39ff1440}.guess-lock-stamp.hidden{display:none}.arc-tiles{padding:12px 14px;margin:0 var(--space-md) var(--space-md);background:linear-gradient(180deg,#00f5ff0a,#ffffff05);border:1px solid rgba(0,245,255,.18);border-radius:var(--radius-lg);box-shadow:inset 0 0 12px #00f5ff0a}.arc-tiles.hidden{display:none}.arc-tiles-header{display:flex;align-items:center;justify-content:space-between;font-family:var(--font-display);font-weight:700;font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--color-text-neon-muted);margin-bottom:10px;gap:var(--space-sm)}.arc-tiles-header>span:first-child{display:flex;align-items:center;gap:6px;min-width:0}.arc-tiles-bonus{background:#39ff1426;color:var(--color-success-neon);font-weight:900;font-size:11px;padding:2px 8px;border-radius:var(--radius-full);letter-spacing:.04em;flex-shrink:0}.arc-tiles-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}.arc-tiles-grid .artist-option-btn,.arc-tiles-grid .movie-option-btn{padding:14px 10px;background:#ffffff0d;border:2px solid rgba(255,255,255,.12);border-radius:var(--radius-lg);font-family:var(--font-display);font-weight:700;font-size:15px;text-align:center;color:var(--color-text-white);box-shadow:0 4px #0000004d;transition:transform var(--transition-fast),border-color var(--transition-fast),box-shadow var(--transition-fast);cursor:pointer;min-height:56px}.arc-tiles-grid .artist-option-btn:hover,.arc-tiles-grid .movie-option-btn:hover,.arc-tiles-grid .artist-option-btn:focus-visible,.arc-tiles-grid .movie-option-btn:focus-visible{border-color:#00f5ff8c;outline:none}.arc-tiles-grid .artist-option-btn:active,.arc-tiles-grid .movie-option-btn:active{transform:translateY(1px);box-shadow:0 2px #0000004d}.arc-tiles-grid .artist-option-btn.is-loading{background:linear-gradient(135deg,#00f5ff33,#00f5ff0d);border-color:var(--color-accent-secondary);color:var(--color-accent-secondary);animation:arc-tile-pulse 1s ease-in-out infinite}@keyframes arc-tile-pulse{0%,to{opacity:1}50%{opacity:.7}}.arc-tiles-grid .artist-option-btn.is-winner,.arc-tiles-grid .artist-option-btn.is-correct,.arc-tiles-grid .movie-option-btn.is-winner,.arc-tiles-grid .movie-option-btn.is-correct{background:linear-gradient(135deg,#39ff1440,#39ff1414);border-color:var(--color-success-neon);color:var(--color-success-neon);box-shadow:0 0 20px #39ff1480,0 4px #0000004d}.arc-tiles-grid .artist-option-btn.is-wrong,.arc-tiles-grid .artist-option-btn.is-wrong.is-selected,.arc-tiles-grid .movie-option-btn.is-wrong{opacity:.5;border-style:dashed}.arc-tiles-grid .artist-option-btn.is-disabled,.arc-tiles-grid .movie-option-btn.is-disabled{opacity:.6;cursor:not-allowed;box-shadow:none}@media(prefers-reduced-motion:reduce){.arc-tiles-grid .artist-option-btn.is-loading{animation:none}}.bonus-filler{padding:var(--space-md);margin:0 var(--space-md) var(--space-md);background:#ffffff05;border:1px dashed rgba(255,255,255,.1);border-radius:var(--radius-lg);text-align:center;font-family:var(--font-body);font-size:12px;color:var(--color-text-dim);font-style:italic;display:flex;align-items:center;justify-content:center;gap:6px}.bonus-filler.hidden{display:none}.arc-actions{display:grid;grid-template-columns:auto 1fr;gap:10px;padding:0 var(--space-md);margin-bottom:var(--space-md)}.bet-arc{width:72px;height:60px;background:transparent;border:2px solid rgba(255,45,106,.5);color:var(--color-accent-primary);border-radius:var(--radius-lg);font-family:var(--font-display);font-weight:700;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;box-shadow:0 4px #0000004d;cursor:pointer;transition:all var(--transition-fast)}.bet-arc .bet-icon{font-size:22px;line-height:1}.bet-arc .bet-label{font-size:9px;font-weight:800;letter-spacing:.08em;text-transform:uppercase}.bet-arc.is-active{background:#ff2d6a26;box-shadow:var(--glow-primary),0 4px #0000004d}.bet-arc:active{transform:translateY(2px);box-shadow:0 2px #0000004d}.bet-arc:disabled{opacity:.55;cursor:not-allowed}.submit-arc{background:linear-gradient(180deg,#ff4d82,var(--color-accent-primary));border:0;color:var(--color-text-white);border-radius:var(--radius-lg);padding:16px 20px;font-family:var(--font-display);font-weight:900;font-size:17px;letter-spacing:.08em;text-transform:uppercase;box-shadow:var(--glow-primary),0 6px #b4143c99;cursor:pointer;transition:transform var(--transition-fast);display:flex;align-items:center;justify-content:center;gap:8px}.submit-arc:active{transform:translateY(2px);box-shadow:var(--glow-primary),0 4px #b4143c99}.submit-arc:disabled{background:#ffffff0f;color:var(--color-text-neon-muted);box-shadow:0 4px #0000004d;cursor:not-allowed;text-shadow:none}.submit-arc.submit-arc--waiting{background:#ffffff0d;color:var(--color-text-neon-muted);box-shadow:0 4px #0000004d;text-shadow:none}.submit-arc .waiting-dot{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--color-accent-secondary);box-shadow:0 0 8px #00f5ff80;animation:arc-wait-pulse 1.2s ease-in-out infinite}@keyframes arc-wait-pulse{0%,to{opacity:.4}50%{opacity:1}}@media(prefers-reduced-motion:reduce){.submit-arc .waiting-dot{animation:none}}.steal-btn-full{margin:0 var(--space-md) var(--space-md);background:#00f5ff14;border:2px solid var(--color-accent-secondary);color:var(--color-accent-secondary);border-radius:var(--radius-lg);padding:14px;font-family:var(--font-display);font-weight:800;font-size:15px;letter-spacing:.06em;text-transform:uppercase;box-shadow:0 0 16px #00f5ff4d,0 4px #0000004d;display:flex;align-items:center;justify-content:center;gap:8px;cursor:pointer;transition:transform var(--transition-fast)}.steal-btn-full.hidden{display:none}.steal-btn-full:active{transform:translateY(2px);box-shadow:0 0 16px #00f5ff4d,0 2px #0000004d}.steal-btn-full .steal-btn-icon{font-size:18px}.powerup-btn-row{display:flex;gap:var(--space-md);margin:0 var(--space-md) var(--space-md)}.powerup-btn-row .steal-btn-full,.powerup-btn-row .sabotage-btn-full{flex:1;margin:0}.sabotage-btn-full{background:#ff2d5514;border:2px solid var(--color-danger, #ff2d55);color:var(--color-danger, #ff2d55);border-radius:var(--radius-lg);padding:14px;font-family:var(--font-display);font-weight:800;font-size:15px;letter-spacing:.06em;text-transform:uppercase;box-shadow:0 0 16px #ff2d554d,0 4px #0000004d;display:flex;align-items:center;justify-content:center;gap:8px;cursor:pointer;transition:transform var(--transition-fast)}.sabotage-btn-full.hidden{display:none}.sabotage-btn-full:active{transform:translateY(2px);box-shadow:0 0 16px #ff2d554d,0 2px #0000004d}.sabotage-btn-full .sabotage-btn-icon{font-size:18px}.arc-chip--sabotage{color:var(--color-danger, #ff2d55);background:#ff2d5514;border:1px solid rgba(255,45,85,.4)}.player-badge--sabotage{top:-2px;left:2px;background:linear-gradient(135deg,#ff2d55,#c1121f)}.sabotage-confirmation{background:linear-gradient(135deg,#ff2d55,#c1121f);box-shadow:0 4px 20px #ff2d5580}.sabotaged-banner{background:linear-gradient(135deg,#ff2d55,#7c1020);box-shadow:0 4px 20px #ff2d5599}.bet-arc--forced{opacity:.85;cursor:not-allowed}.submit-arc--frozen{opacity:.6;filter:grayscale(.4)}.arc-submission-strip{display:flex;align-items:center;justify-content:center;gap:8px;padding:8px var(--space-md) 12px;font-family:var(--font-body);font-size:11px;color:var(--color-text-dim);font-weight:600}.arc-submission-dots{display:flex;align-items:center;gap:6px}.arc-submission-dots .player-indicator{width:12px;height:12px;min-width:12px;padding:0;background:#ffffff2e;border:0;border-radius:50%;font-size:0;color:transparent;transition:all var(--transition-normal);flex:0 0 auto;overflow:hidden;display:block}.arc-submission-dots .player-indicator>*{display:none!important}.arc-submission-dots .player-indicator.is-submitted{background:var(--color-success-neon);box-shadow:0 0 6px #39ff1480}.arc-submission-dots .player-indicator.is-current-player,.arc-submission-dots .player-indicator.is-current{background:var(--color-accent-secondary);box-shadow:0 0 6px #00f5ff80}.arc-submission-dots .player-indicator.is-current-player.is-submitted{background:var(--color-success-neon);box-shadow:0 0 8px #39ff14b3}.arc-submission-count{color:var(--color-text-dim);font-weight:600}.submitted-confirmation.hidden{display:none}.closest-wins-splash{position:fixed;inset:0;z-index:50;display:flex;align-items:center;justify-content:center;background:#0a0a12b3;backdrop-filter:blur(4px);font-family:var(--font-display);font-weight:900;font-size:40px;color:var(--color-success-neon);letter-spacing:.08em;gap:12px;pointer-events:none;text-shadow:0 0 32px rgba(57,255,20,.55);animation:closest-wins-splash-in 1.6s ease-out both}.closest-wins-splash.hidden{display:none}@keyframes closest-wins-splash-in{0%{opacity:0;transform:scale(.8)}20%{opacity:1;transform:scale(1)}80%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(1.05)}}#round-indicator.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}body:has(#game-view:not(.hidden)) .player-header{display:none}body:has(#game-view:not(.hidden)) .player-container{padding-top:max(var(--space-xs),env(safe-area-inset-top))}body:has(#game-view:not(.hidden)) .arc-header{margin-bottom:var(--space-sm)}body:has(#game-view:not(.hidden)) .year-xxl{font-size:clamp(72px,26vw,104px);margin:2px 0 var(--space-sm)}body:has(#game-view:not(.hidden)) .slider-arcade-wrap{margin-bottom:var(--space-sm)}body:has(#game-view:not(.hidden)) .arc-tiles{padding:10px 12px;margin:0 var(--space-md) var(--space-sm)}body:has(#game-view:not(.hidden)) .arc-tiles-header{margin-bottom:6px}body:has(#game-view:not(.hidden)) .arc-tiles-grid{gap:8px}body:has(#game-view:not(.hidden)) .arc-tiles-grid .artist-option-btn,body:has(#game-view:not(.hidden)) .arc-tiles-grid .movie-option-btn{min-height:52px;padding:12px 10px}body:has(#game-view:not(.hidden)) .arc-actions{margin-bottom:var(--space-sm)}body:has(#game-view:not(.hidden)) .bonus-filler{padding:var(--space-sm) var(--space-md);margin:0 var(--space-md) var(--space-sm)}body.theme-dark .podium{display:grid;grid-template-columns:1fr 1fr;grid-template-areas:"hero hero" "second third";gap:var(--space-md);align-items:stretch;justify-content:stretch;margin-bottom:var(--space-xl);padding:0 var(--space-xs)}body.theme-dark .podium-place.podium-1{grid-area:hero;width:100%;padding:var(--space-lg) var(--space-md) var(--space-md);background:linear-gradient(135deg,#ff2d6a24,#00f5ff0f);border:1px solid rgba(255,45,106,.35);border-radius:var(--radius-xl);box-shadow:0 0 40px #ff2d6a2e;text-align:center;justify-content:center}body.theme-dark .podium-place.podium-1 .podium-medal{font-size:38px;margin-bottom:var(--space-xs);filter:drop-shadow(0 0 16px rgba(255,45,106,.6))}body.theme-dark .podium-place.podium-1 .podium-name{font-family:Outfit,sans-serif;font-weight:900;line-height:.92;letter-spacing:-.04em;margin:0 0 var(--space-sm);max-width:100%;white-space:normal;word-break:break-word;overflow:visible;text-overflow:clip;background:linear-gradient(90deg,var(--color-accent-primary),var(--color-accent-secondary));-webkit-background-clip:text;background-clip:text;color:transparent;filter:drop-shadow(0 0 24px rgba(255,45,106,.3));font-size:clamp(40px,14vw,64px)}body.theme-dark .podium-place.podium-1 .podium-score{font-family:Inter,sans-serif;font-weight:700;font-size:var(--font-size-3xl);color:var(--color-accent-secondary);font-variant-numeric:tabular-nums;text-shadow:0 0 14px rgba(0,245,255,.5);margin-bottom:0}body.theme-dark .podium-place.podium-1 .podium-stand{display:none}body.theme-dark .podium-place.podium-2,body.theme-dark .podium-place.podium-3{width:100%;min-width:0;padding:var(--space-md) var(--space-sm);background:var(--color-dark-surface);border:1px solid var(--color-border-neon);border-radius:var(--radius-lg);display:grid;grid-template-columns:auto minmax(0,1fr) auto;grid-template-rows:auto;align-items:center;gap:var(--space-sm);text-align:left}body.theme-dark .podium-place.podium-2{grid-area:second;border-color:#00f5ff47;box-shadow:0 0 18px #00f5ff1a}body.theme-dark .podium-place.podium-3{grid-area:third}body.theme-dark .podium-place.podium-2 .podium-medal,body.theme-dark .podium-place.podium-3 .podium-medal{font-size:22px;margin:0;line-height:1}body.theme-dark .podium-place.podium-2 .podium-name,body.theme-dark .podium-place.podium-3 .podium-name{font-family:Outfit,sans-serif;font-weight:800;font-size:var(--font-size-lg);color:var(--color-text-white);margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}body.theme-dark .podium-place.podium-2 .podium-score,body.theme-dark .podium-place.podium-3 .podium-score{font-family:Outfit,sans-serif;font-weight:900;font-size:var(--font-size-lg);color:var(--color-accent-secondary);font-variant-numeric:tabular-nums;text-shadow:0 0 8px rgba(0,245,255,.3);margin:0;white-space:nowrap}body.theme-dark .podium-place.podium-2 .podium-stand,body.theme-dark .podium-place.podium-3 .podium-stand{display:none}body.theme-dark .podium-place.podium-2.hidden~.podium-place.podium-3:not(.hidden){grid-area:second}body.theme-dark .your-result{background:linear-gradient(135deg,#ff2d6a1a,#00f5ff0a);border:1px solid rgba(255,45,106,.28);box-shadow:0 0 28px #ff2d6a1f}body.theme-dark .your-result-rank{font-family:Outfit,sans-serif;font-weight:900;font-size:var(--font-size-4xl);letter-spacing:-.03em}body.theme-dark .your-result-stats .stat-value{font-family:Outfit,sans-serif;font-weight:800}.plh-root{display:flex;flex-direction:column;min-height:100%;height:100%;background:var(--color-bg-primary);color:var(--color-text-white);font-family:var(--font-body);font-variant-numeric:tabular-nums;position:relative;isolation:isolate;overflow:hidden}.plh-root:before{content:"";position:absolute;inset:0;z-index:0;pointer-events:none;background:radial-gradient(ellipse 70% 25% at 50% 0%,rgba(255,45,106,.12),transparent 60%),radial-gradient(ellipse 60% 30% at 30% 60%,rgba(0,245,255,.06),transparent 60%)}.plh-header{position:sticky;top:0;z-index:5;background:#0a0a12d1;backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);padding:8px 14px 6px;border-bottom:1px solid rgba(255,255,255,.04)}.plh-titlebar{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px}.plh-wordmark{font-family:var(--font-display);font-weight:900;font-size:20px;letter-spacing:-.02em;line-height:1;background:linear-gradient(90deg,var(--color-accent-primary) 0%,var(--color-accent-secondary) 100%);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}.plh-search{position:relative;margin-bottom:10px}.plh-search input{width:100%;height:40px;padding:0 38px 0 40px;background:var(--color-bg-surface);border:1px solid var(--color-border-neon);border-radius:10px;color:var(--color-text-white);font-family:var(--font-body);font-weight:500;font-size:13px;outline:none;transition:border-color .15s,box-shadow .15s}.plh-search input:focus{border-color:var(--color-accent-secondary);box-shadow:0 0 0 3px #00f5ff26}.plh-search input::placeholder{color:var(--color-text-neon-muted);opacity:.6}.plh-search-icon{position:absolute;left:12px;top:50%;transform:translateY(-50%);color:var(--color-accent-secondary);opacity:.75}.plh-search-clear{position:absolute;right:8px;top:50%;transform:translateY(-50%);width:24px;height:24px;border-radius:50%;background:var(--color-dark-surface-hover);border:none;color:var(--color-text-neon-muted);font-family:var(--font-display);font-weight:900;font-size:13px;cursor:pointer;display:flex;align-items:center;justify-content:center}.plh-segmented{display:grid;grid-template-columns:1fr 1fr 1fr;gap:4px;padding:4px;background:var(--color-bg-surface);border:1px solid var(--color-border-neon);border-radius:10px;margin-bottom:10px}.plh-seg{background:transparent;border:none;padding:8px 4px;cursor:pointer;border-radius:7px;display:flex;flex-direction:column;gap:1px;align-items:center;line-height:1.1;font-family:var(--font-body);font-weight:700;font-size:12px;color:var(--color-text-neon-muted);letter-spacing:.04em;transition:background .15s,color .15s}.plh-seg .plh-seg-num{font-family:var(--font-display);font-weight:900;font-size:15px;color:var(--color-text-neon-muted)}.plh-seg .plh-seg-label{font-size:11px;letter-spacing:.1em;text-transform:uppercase}.plh-seg.active{background:linear-gradient(135deg,#ff2d6a38,#00f5ff24);color:var(--color-text-white);box-shadow:inset 0 0 0 1px #ff2d6a59,0 0 18px #ff2d6a2e}.plh-seg.active .plh-seg-num{color:var(--color-accent-primary)}.plh-seg-community.active{background:linear-gradient(135deg,#9d4edd40,#ff2d6a26);box-shadow:inset 0 0 0 1px #9d4edd73,0 0 18px #9d4edd38}.plh-seg-community.active .plh-seg-num{color:#c89af5}.plh-seg-mine.active{background:linear-gradient(135deg,#00f5ff2e,#ff2d6a1a);box-shadow:inset 0 0 0 1px #00f5ff66,0 0 18px #00f5ff2e}.plh-seg-mine.active .plh-seg-num{color:var(--color-accent-secondary)}.plh-chips{display:flex;gap:7px;overflow-x:auto;padding:0 0 6px;scrollbar-width:none}.plh-chips::-webkit-scrollbar{display:none}.plh-chip{flex-shrink:0;padding:7px 13px;background:var(--color-bg-surface);border:1px solid var(--color-border-neon);border-radius:999px;font-family:var(--font-body);font-weight:600;font-size:12px;color:var(--color-text-neon-muted);white-space:nowrap;cursor:pointer;letter-spacing:.01em;transition:background .15s,color .15s,border-color .15s}.plh-chip.active{background:var(--color-accent-primary);color:var(--color-text-white);border-color:transparent;font-weight:700;box-shadow:0 0 16px #ff2d6a73}.plh-list-view,.plh-mix-view{flex:1 1 0;min-height:0;display:flex;flex-direction:column}.plh-body{position:relative;z-index:1;flex:1;overflow-y:auto;padding:14px 0 110px}.plh-loading{padding:40px 20px;text-align:center;font-family:var(--font-body);font-weight:500;font-size:13px;color:var(--color-text-neon-muted)}.plh-section-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;padding:8px 18px 12px;margin:4px 0 8px;border-bottom:1px solid rgba(0,245,255,.12)}.plh-section-head-title{display:flex;align-items:center;gap:10px;font-family:var(--font-display);font-weight:900;font-size:22px;letter-spacing:-.02em;color:var(--color-text-white);line-height:1}.plh-section-head-emoji{font-size:22px;filter:drop-shadow(0 0 12px rgba(0,245,255,.3))}.plh-section-head-meta{font-family:var(--font-body);font-weight:600;font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:var(--color-text-neon-muted);flex-shrink:0}.plh-shelf{margin-bottom:22px}.plh-shelf-head{display:flex;align-items:baseline;justify-content:space-between;padding:0 18px 10px}.plh-shelf-title{font-family:var(--font-display);font-weight:800;font-size:18px;letter-spacing:-.01em;color:var(--color-text-white);display:flex;align-items:center;gap:6px}.plh-shelf-see{font-family:var(--font-body);font-weight:600;font-size:12px;color:var(--color-accent-secondary);letter-spacing:.02em;cursor:pointer;background:transparent;border:none;padding:0}.plh-local-dot{display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--color-success-neon);box-shadow:0 0 8px var(--color-success-neon);margin-right:8px;vertical-align:middle}.plh-local-badge{font-family:var(--font-body);font-weight:700;font-size:9px;letter-spacing:.14em;text-transform:uppercase;color:var(--color-success-neon);padding:2px 7px;background:#39ff141f;border:1px solid rgba(57,255,20,.4);border-radius:999px;margin-left:8px;vertical-align:middle}.plh-cards{display:flex;gap:12px;overflow-x:auto;padding:0 18px 4px;scrollbar-width:none}.plh-cards::-webkit-scrollbar{display:none}.plh-card{flex-shrink:0;width:160px;cursor:pointer;position:relative;background:transparent;border:none;padding:0;text-align:left;color:inherit;font:inherit}.plh-card .plh-cover{width:160px;height:160px;border-radius:12px;position:relative;overflow:hidden;box-shadow:0 10px 24px #00000080;isolation:isolate;display:flex;flex-direction:column;justify-content:flex-end;padding:10px}.plh-card .plh-cover:after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,transparent 55%,rgba(0,0,0,.45) 100%);pointer-events:none;z-index:1}.plh-cover-inner{position:relative;z-index:2;display:flex;flex-direction:column;justify-content:flex-end;height:100%}.plh-cover-glyph{font-family:var(--font-display);font-weight:900;font-size:42px;line-height:.9;letter-spacing:-.04em;color:#fff;text-shadow:0 2px 8px rgba(0,0,0,.4);max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.plh-cover-glyph-long{font-size:26px;letter-spacing:-.02em}.plh-cover-sub{font-family:var(--font-display);font-weight:700;font-size:12px;letter-spacing:.04em;text-transform:uppercase;color:#ffffffeb;margin-top:4px;line-height:1.15;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;overflow-wrap:break-word;word-break:break-word;max-width:100%}.plh-cover-badge{position:absolute;top:8px;right:8px;padding:3px 8px;background:#00000080;backdrop-filter:blur(6px);border-radius:999px;font-family:var(--font-body);font-weight:700;font-size:9px;letter-spacing:.14em;text-transform:uppercase;color:var(--color-text-white);z-index:3}.plh-cover-badge-purple{background:#9d4edd80}.plh-card-meta{padding:8px 2px 0}.plh-card-name{font-family:var(--font-body);font-weight:700;font-size:13px;line-height:1.25;color:var(--color-text-white);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.plh-card-sub{font-family:var(--font-body);font-weight:500;font-size:11px;color:var(--color-text-neon-muted);margin-top:2px;letter-spacing:.02em}.plh-card-sub b{color:var(--color-accent-secondary);font-weight:700}.plh-card-local{font-family:var(--font-body);font-weight:500;font-size:11px;color:var(--color-success-neon);margin-top:2px;letter-spacing:.02em}.plh-card-local b{color:var(--color-success-neon);font-weight:800}.plh-card-local-when{color:var(--color-text-neon-muted)}.plh-card-local-when b{color:var(--color-accent-secondary)}.plh-pill{position:absolute;top:8px;left:8px;z-index:4;display:inline-flex;align-items:center;gap:4px;padding:5px 10px 5px 8px;border-radius:999px;background:#ff2d6aeb;color:var(--color-text-white);font-family:var(--font-display);font-weight:800;font-size:10px;letter-spacing:.12em;text-transform:uppercase;cursor:pointer;border:1px solid rgba(255,255,255,.12);box-shadow:0 4px 12px #0006,0 0 14px #ff2d6a59;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);transition:background .15s,color .15s,box-shadow .15s,filter .15s}.plh-pill:hover{filter:brightness(1.1)}.plh-pill-label{line-height:1}.plh-card-selected .plh-pill{background:var(--color-success-neon);color:var(--color-bg-primary);border-color:transparent;box-shadow:0 4px 12px #0006,0 0 18px #39ff148c}.plh-card-selected .plh-cover{box-shadow:0 0 0 3px var(--color-success-neon),0 10px 24px #00000080}.plh-check{display:none}.plh-featured .plh-card,.plh-featured .plh-card .plh-cover{width:160px}.plh-featured .plh-card .plh-cover{height:200px;padding:2px;background:linear-gradient(135deg,var(--color-accent-primary),var(--color-accent-secondary));box-shadow:0 12px 30px #0009,0 0 24px #ff2d6a40}.plh-featured .plh-card .plh-cover:after{border-radius:10px;margin:2px;inset:2px}.plh-featured .plh-cover-inner{padding:10px}.plh-featured .plh-cover-glyph{font-size:48px}.plh-card-community .plh-cover{background:linear-gradient(135deg,#240046,#7209b7,#ff2d6a);box-shadow:0 12px 30px #0009,0 0 28px #9d4edd66}.plh-tint-pop{background:linear-gradient(135deg,#ff2d6a,#ff6b9d 60%,#ff8c42)}.plh-tint-rock{background:linear-gradient(135deg,#c1121f,#ff4d1c 60%,#ff8c42)}.plh-tint-hiphop{background:linear-gradient(135deg,#7209b7,#b5179e 60%,#ff2d6a)}.plh-tint-jazz{background:linear-gradient(135deg,#b08968,#e6a855 60%,#ffc94a)}.plh-tint-metal{background:linear-gradient(135deg,#1a0000,#6a040f 60%,#c1121f)}.plh-tint-eu{background:linear-gradient(135deg,#00b4d8,#0077b6 60%,#03045e)}.plh-tint-latin{background:linear-gradient(135deg,#f60,#ffb703 60%,#fdd85d)}.plh-tint-schlager{background:linear-gradient(135deg,#ff8fab,#ffc2d1 60%,#fae0e4)}.plh-tint-schlager .plh-cover-glyph,.plh-tint-schlager .plh-cover-sub{color:#2a0a1a;text-shadow:none}.plh-tint-soul{background:linear-gradient(135deg,#6a0572,#ab4287 60%,#fcbf49)}.plh-tint-purple{background:linear-gradient(135deg,#240046,#7209b7,#ff2d6a)}.plh-banner{margin:0 18px 18px;padding:14px 16px;border-radius:14px;background:linear-gradient(135deg,#9d4edd2e,#ff2d6a1a);border:1px solid rgba(157,78,221,.35);display:flex;align-items:center;gap:12px;cursor:pointer}.plh-banner-icon{width:40px;height:40px;border-radius:10px;background:linear-gradient(135deg,#7209b7,var(--color-accent-primary));display:flex;align-items:center;justify-content:center;font-size:20px;flex-shrink:0;box-shadow:0 0 14px #9d4edd80}.plh-banner-body{flex:1;min-width:0}.plh-banner-title{font-family:var(--font-display);font-weight:800;font-size:14px;color:var(--color-text-white);line-height:1.2}.plh-banner-sub{font-family:var(--font-body);font-weight:500;font-size:11px;color:var(--color-text-neon-muted);margin-top:2px;line-height:1.35}.plh-banner-arrow{font-family:var(--font-display);font-weight:900;font-size:22px;color:#c89af5}.plh-mine-empty{padding:30px 24px;text-align:center}.plh-empty-emoji{font-size:64px;margin-bottom:12px;filter:drop-shadow(0 0 24px rgba(0,245,255,.3))}.plh-mine-title{font-family:var(--font-display);font-weight:900;font-size:26px;color:var(--color-text-white);margin:0 0 8px;letter-spacing:-.01em;line-height:1.1}.plh-mine-body{font-family:var(--font-body);font-weight:500;font-size:14px;color:var(--color-text-neon-muted);margin:0 0 20px;line-height:1.5}.plh-mine-body b{color:var(--color-text-white);font-weight:700}.plh-request-cta{margin:0 0 16px;padding:20px;background:linear-gradient(135deg,#00f5ff1a,#ff2d6a0f);border:1px solid rgba(0,245,255,.35);border-radius:16px;text-align:left}.plh-request-head{display:flex;align-items:center;gap:12px;margin-bottom:14px}.plh-request-icon{width:44px;height:44px;border-radius:12px;background:linear-gradient(135deg,var(--color-accent-secondary),#0077b6);display:flex;align-items:center;justify-content:center;color:var(--color-bg-primary);font-family:var(--font-display);font-weight:900;font-size:22px;box-shadow:0 0 16px #00f5ff80}.plh-request-titles{flex:1;min-width:0}.plh-request-t1{font-family:var(--font-display);font-weight:800;font-size:16px;color:var(--color-text-white);line-height:1.2}.plh-request-t2{font-family:var(--font-body);font-weight:500;font-size:12px;color:var(--color-text-neon-muted);margin-top:2px;line-height:1.35}.plh-meanwhile{margin:12px 0 0;padding:14px 16px;background:var(--color-bg-surface);border:1px solid var(--color-border-neon);border-radius:12px;display:flex;align-items:center;gap:12px;cursor:pointer;text-align:left}.plh-meanwhile-icon{color:var(--color-accent-secondary);font-family:var(--font-display);font-weight:900;font-size:18px;flex-shrink:0}.plh-meanwhile-body{flex:1;min-width:0}.plh-meanwhile-t1{font-family:var(--font-display);font-weight:800;font-size:13px;color:var(--color-text-white);line-height:1.2}.plh-meanwhile-t2{font-family:var(--font-body);font-weight:500;font-size:11px;color:var(--color-text-neon-muted);margin-top:2px;line-height:1.35}.plh-meanwhile-arrow{color:var(--color-text-neon-muted);font-family:var(--font-display);font-weight:900;font-size:20px}.plh-mine-head{padding:14px 18px 6px;display:flex;align-items:baseline;justify-content:space-between}.plh-mine-count{font-family:var(--font-display);font-weight:800;font-size:13px;letter-spacing:.14em;text-transform:uppercase;color:var(--color-text-neon-muted)}.plh-mine-count b{color:var(--color-text-white);font-weight:900}.plh-new-request{margin:10px 18px 18px;display:flex;align-items:center;gap:12px;padding:14px;background:linear-gradient(90deg,#00f5ff1a,#ff2d6a14);border:1px dashed rgba(0,245,255,.4);border-radius:12px;cursor:pointer}.plh-new-plus{width:36px;height:36px;border-radius:10px;background:var(--color-accent-secondary);color:var(--color-bg-primary);display:flex;align-items:center;justify-content:center;font-family:var(--font-display);font-weight:900;font-size:20px;box-shadow:0 0 16px var(--color-accent-secondary);flex-shrink:0}.plh-new-t1{font-family:var(--font-display);font-weight:800;font-size:14px;color:var(--color-text-white);line-height:1.2}.plh-new-t2{font-family:var(--font-body);font-weight:500;font-size:11px;color:var(--color-text-neon-muted);margin-top:2px}.plh-req-list{padding:0 18px;display:flex;flex-direction:column;gap:10px}.plh-req-card{padding:14px 14px 14px 16px;background:var(--color-bg-surface);border:1px solid var(--color-border-neon);border-radius:14px;display:flex;flex-direction:column;gap:10px}.plh-req-card.plh-req-done{border-color:#39ff1459;background:linear-gradient(90deg,rgba(57,255,20,.06),transparent 75%)}.plh-req-card.plh-req-building{border-color:#00f5ff66;background:linear-gradient(90deg,rgba(0,245,255,.06),transparent 75%)}.plh-req-card.plh-req-declined{border-color:#ff2d6a59}.plh-req-row1{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}.plh-req-body{min-width:0;flex:1}.plh-req-name{font-family:var(--font-display);font-weight:800;font-size:15px;color:var(--color-text-white);line-height:1.2;letter-spacing:-.01em}.plh-req-desc{font-family:var(--font-body);font-weight:500;font-size:11.5px;color:var(--color-text-neon-muted);margin-top:3px;line-height:1.45;word-break:break-all;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.plh-req-meta{font-family:var(--font-body);font-weight:600;font-size:10px;color:var(--color-text-light);letter-spacing:.06em;text-transform:uppercase;margin-top:4px}.plh-req-meta b{color:var(--color-text-neon-muted);font-weight:700}.plh-req-link{color:var(--color-accent-secondary);font-weight:700;text-transform:none;letter-spacing:.02em;text-decoration:none}.plh-status-badge{flex-shrink:0;padding:4px 10px;border-radius:999px;font-family:var(--font-display);font-weight:800;font-size:10px;letter-spacing:.14em;text-transform:uppercase;display:flex;align-items:center;gap:5px}.plh-sb-dot{width:6px;height:6px;border-radius:50%;background:currentColor;box-shadow:0 0 6px currentColor}.plh-status-badge.pending{background:#f59e0b1f;border:1px solid rgba(245,158,11,.45);color:var(--color-warning)}.plh-status-badge.building{background:#00f5ff1f;border:1px solid rgba(0,245,255,.45);color:var(--color-accent-secondary)}.plh-status-badge.done{background:#39ff141f;border:1px solid rgba(57,255,20,.4);color:var(--color-success-neon)}.plh-status-badge.declined{background:#ff2d6a1f;border:1px solid rgba(255,45,106,.4);color:#ff7ca7}.plh-progress{display:flex;gap:3px;align-items:center}.plh-seg-pill{flex:1;height:3px;border-radius:2px;background:var(--color-border-neon)}.plh-seg-pill.filled-pending{background:var(--color-warning);box-shadow:0 0 6px var(--color-warning)}.plh-seg-pill.filled-building{background:var(--color-accent-secondary);box-shadow:0 0 6px var(--color-accent-secondary)}.plh-seg-pill.filled-done{background:var(--color-success-neon);box-shadow:0 0 6px var(--color-success-neon)}.plh-seg-pill.filled-declined{background:var(--color-accent-primary);box-shadow:0 0 6px var(--color-accent-primary)}.plh-steps-row{display:flex;justify-content:space-between;font-family:var(--font-body);font-weight:600;font-size:9px;color:var(--color-text-light);letter-spacing:.1em;text-transform:uppercase;margin-top:-4px}.plh-steps-row span.active{color:var(--color-text-white);font-weight:800}.plh-empty{padding:30px 28px;text-align:center;display:flex;flex-direction:column;align-items:center;gap:12px}.plh-empty-icon{width:96px;height:96px;border-radius:26px;display:flex;align-items:center;justify-content:center;background:var(--color-bg-surface);border:1px solid var(--color-border-neon);font-size:42px;position:relative}.plh-empty-icon-search{background:radial-gradient(circle,rgba(0,245,255,.12),var(--color-bg-surface) 60%)}.plh-empty-title{font-family:var(--font-display);font-weight:900;font-size:24px;color:var(--color-text-white);margin:0;letter-spacing:-.01em;line-height:1.15}.plh-empty-body{font-family:var(--font-body);font-weight:500;font-size:13px;color:var(--color-text-neon-muted);margin:0;line-height:1.55;max-width:280px}.plh-cyan{color:var(--color-accent-secondary)}.plh-action-stack{display:flex;flex-direction:column;gap:8px;width:100%;max-width:280px;margin-top:12px}.plh-btn{padding:13px 16px;border-radius:12px;font-weight:800;font-size:13px;letter-spacing:.04em;border:1px solid var(--color-border-neon);background:var(--color-bg-surface);color:var(--color-text-white);cursor:pointer;text-align:center;display:flex;align-items:center;justify-content:center;gap:8px;text-transform:uppercase;transition:all .15s;font-family:var(--font-display)}.plh-btn:hover{border-color:var(--color-accent-secondary)}.plh-btn-primary{background:linear-gradient(90deg,var(--color-accent-primary),#ff5fa4);border-color:transparent;color:var(--color-text-white);box-shadow:0 0 24px #ff2d6a73}.plh-btn-primary:hover{border-color:transparent;filter:brightness(1.1)}.plh-btn-cyan{background:linear-gradient(90deg,var(--color-accent-secondary),#0077b6);color:var(--color-bg-primary);border-color:transparent;box-shadow:0 0 22px #00f5ff73}.plh-btn-cyan:hover{border-color:transparent;filter:brightness(1.1)}.plh-btn-neon{background:linear-gradient(90deg,var(--color-success-neon),#7bf1ff);color:var(--color-bg-primary);border-color:transparent;box-shadow:0 0 24px #39ff1480}.plh-btn-ghost{background:transparent;color:var(--color-text-neon-muted)}.plh-sheet-host{position:fixed;inset:0;z-index:50;pointer-events:none;display:none}.plh-sheet-host.open{display:block;pointer-events:auto}.plh-scrim{position:absolute;inset:0;background:#05050ab8;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}.plh-sheet{position:absolute;left:0;right:0;bottom:0;background:linear-gradient(180deg,#14141e 0%,var(--color-bg-primary) 100%);border-top-left-radius:28px;border-top-right-radius:28px;box-shadow:0 -12px 40px #0009;max-height:80vh;display:flex;flex-direction:column;overflow:hidden;border-top:1px solid rgba(255,45,106,.25);animation:plh-sheet-in .25s ease-out}.plh-sheet-community{border-top-color:#9d4edd66}.plh-sheet:before{content:"";position:absolute;top:10px;left:50%;transform:translate(-50%);width:48px;height:4px;border-radius:999px;background:#fff3}@keyframes plh-sheet-in{0%{transform:translateY(100%)}to{transform:translateY(0)}}.plh-sheet-close{position:absolute;top:18px;right:18px;width:32px;height:32px;border-radius:50%;background:var(--color-bg-surface);border:1px solid var(--color-border-neon);color:var(--color-text-neon-muted);cursor:pointer;font-family:var(--font-display);font-weight:900;font-size:16px;line-height:1;z-index:5;display:flex;align-items:center;justify-content:center}.plh-sheet-head{padding:28px 20px 0;display:flex;gap:14px;align-items:flex-start;flex-shrink:0}.plh-sheet-cover{width:100px;height:100px;border-radius:14px;position:relative;overflow:hidden;flex-shrink:0;display:flex;flex-direction:column;justify-content:flex-end;padding:10px;box-shadow:0 12px 30px #00000080}.plh-sheet-cover-glyph{font-family:var(--font-display);font-weight:900;font-size:36px;line-height:.9;letter-spacing:-.04em;color:#fff;text-shadow:0 2px 8px rgba(0,0,0,.4)}.plh-sheet-cover-sub{font-family:var(--font-display);font-weight:700;font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:#ffffffe6;margin-top:2px}.plh-sheet-info{flex:1;min-width:0}.plh-sheet-title{font-family:var(--font-display);font-weight:900;font-size:22px;line-height:1.1;letter-spacing:-.02em;color:var(--color-text-white);margin:0}.plh-sheet-author{font-family:var(--font-body);font-weight:500;font-size:12px;color:var(--color-text-neon-muted);margin-top:4px}.plh-sheet-author b{color:var(--color-accent-secondary);font-weight:700}.plh-sheet-stats{display:flex;gap:0;padding:18px 20px 16px;border-bottom:1px solid rgba(255,255,255,.06);margin-top:18px;flex-shrink:0}.plh-stat{flex:1;text-align:center;position:relative}.plh-stat+.plh-stat:before{content:"";position:absolute;left:0;top:6px;bottom:6px;width:1px;background:var(--color-border-neon)}.plh-stat-val{font-family:var(--font-display);font-weight:900;font-size:22px;color:var(--color-text-white);letter-spacing:-.02em;line-height:1}.plh-stat-val-cyan{color:var(--color-accent-secondary)}.plh-stat-val-pink{color:var(--color-accent-primary)}.plh-stat-lbl{font-family:var(--font-body);font-weight:700;font-size:9px;letter-spacing:.16em;text-transform:uppercase;color:var(--color-text-light);margin-top:4px}.plh-sheet-scroll{flex:1;overflow-y:auto;padding:16px 20px 20px}.plh-sheet-sec-title{font-family:var(--font-display);font-weight:800;font-size:12px;letter-spacing:.18em;text-transform:uppercase;color:var(--color-text-neon-muted);margin:0 0 10px}.plh-sheet-desc{font-family:var(--font-body);font-weight:500;font-size:13px;color:var(--color-text-neon-muted);line-height:1.55;margin-bottom:16px;padding:14px;background:var(--color-bg-surface);border:1px solid var(--color-border-neon);border-radius:12px}.plh-sheet-tags{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:16px}.plh-sheet-tag{padding:5px 10px;background:var(--color-bg-surface);border:1px solid var(--color-border-neon);border-radius:6px;font-family:var(--font-body);font-weight:600;font-size:11px;color:var(--color-text-white);letter-spacing:.02em}.plh-sheet-providers{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:16px}.plh-sheet-provider{padding:6px 10px;background:var(--color-bg-surface);border:1px solid var(--color-border-neon);border-radius:8px;font-family:var(--font-body);font-weight:600;font-size:11px;color:var(--color-text-neon-muted)}.plh-sheet-provider b{color:var(--color-accent-secondary);font-weight:800}.plh-sheet-foot{padding:14px 20px calc(14px + env(safe-area-inset-bottom,0px)) 20px;background:#0a0a12f2;border-top:1px solid var(--color-border-neon);display:flex;gap:10px;align-items:center;flex-shrink:0}.plh-sheet-foot .plh-btn{flex:1}.plh-mix-cta:empty{display:none}.plh-cta-bar{position:absolute;left:12px;right:12px;bottom:12px;display:flex;gap:8px;padding:10px;background:#0a0a12e0;backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border:1px solid var(--color-border-neon);border-radius:16px;box-shadow:0 12px 40px #0009;align-items:center;z-index:10}.plh-cta-fab{width:44px;height:44px;border-radius:12px;background:linear-gradient(135deg,var(--color-accent-secondary) 0%,#0ea5c4 100%);border:none;color:var(--color-bg-primary);display:flex;align-items:center;justify-content:center;cursor:pointer;box-shadow:0 0 18px #00f5ff73,inset 0 1px #ffffff40;flex-shrink:0;transition:filter .15s}.plh-cta-fab:hover{filter:brightness(1.1)}.plh-cta-fab svg{stroke:#fff;fill:none}.plh-cta-back{flex-shrink:0;display:inline-flex;align-items:center;gap:4px;padding:0 12px;height:44px;border-radius:12px;background:var(--color-bg-surface);border:1px solid var(--color-border-neon);color:var(--color-text-white);font-family:var(--font-display);font-weight:700;font-size:13px;letter-spacing:.04em;text-transform:uppercase;cursor:pointer;transition:border-color .15s,background .15s}.plh-cta-back:hover{border-color:var(--color-accent-secondary)}.plh-cta-back svg{opacity:.85}.plh-cta-count{font-family:var(--font-display);font-weight:900;font-size:14px;color:var(--color-success-neon);padding:0 8px;letter-spacing:.04em;text-shadow:0 0 10px rgba(57,255,20,.5)}.plh-cta-start{flex:1;background:linear-gradient(90deg,var(--color-accent-primary),#ff5fa4);border:none;border-radius:12px;padding:12px;font-family:var(--font-display);font-weight:700;font-size:14px;color:var(--color-text-white);cursor:pointer;letter-spacing:.02em;box-shadow:0 0 24px #ff2d6a80;display:flex;align-items:center;justify-content:center;gap:8px}.plh-cta-start-count{display:none}.plh-cta-start-label{font-family:var(--font-display);font-weight:700}.plh-cta-start-arrow{opacity:.9;flex-shrink:0}.plh-cta-count-empty{opacity:.5}.plh-cta-count-btn{background:transparent;border:1px solid rgba(57,255,20,.35);border-radius:999px;cursor:pointer;transition:background .15s ease,border-color .15s ease,transform .1s ease}.plh-cta-count-btn:hover,.plh-cta-count-btn:focus-visible{background:#39ff141f;border-color:#39ff1499;outline:none}.plh-cta-count-btn:active{transform:scale(.96)}.plh-cta-start-disabled{opacity:.5;cursor:not-allowed;box-shadow:none}.plh-sheet-selected{border-top-color:#39ff1459}.plh-selected-head{padding:28px 20px 12px;flex-shrink:0}.plh-selected-title{font-family:var(--font-display);font-weight:900;font-size:20px;color:var(--color-text-white);margin:0 0 4px;letter-spacing:.01em}.plh-selected-subtitle{font-size:13px;color:var(--color-text-neon-muted);letter-spacing:.01em}.plh-selected-scroll{overflow-y:auto;padding:4px 16px 24px;flex:1;min-height:0}.plh-selected-row{display:flex;align-items:center;gap:12px;padding:10px 8px;border-bottom:1px solid rgba(255,255,255,.06)}.plh-selected-row:last-child{border-bottom:none}.plh-selected-thumb{width:44px;height:44px;border-radius:10px;display:flex;align-items:center;justify-content:center;flex-shrink:0;background:#ffffff0f}.plh-selected-glyph{font-size:20px}.plh-selected-meta{flex:1;min-width:0}.plh-selected-name{font-family:var(--font-display);font-weight:700;font-size:14px;color:var(--color-text-white);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.plh-selected-sub{font-size:12px;color:var(--color-text-neon-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-top:2px}.plh-selected-sub b{color:var(--color-text-white);font-weight:700}.plh-selected-remove{height:32px;padding:0 12px;border-radius:16px;background:var(--color-bg-surface);border:1px solid rgba(255,45,106,.35);color:#ff5fa4;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:6px;flex-shrink:0;font-family:var(--font-display);font-weight:700;font-size:12px;letter-spacing:.04em;text-transform:uppercase;transition:background .15s ease,color .15s ease,border-color .15s ease,transform .1s ease}.plh-selected-remove:hover,.plh-selected-remove:focus-visible{background:#ff2d6a2e;border-color:#ff2d6aa6;color:#ff7ab3;outline:none}.plh-selected-remove:active{transform:scale(.94)}.plh-selected-remove-label{line-height:1}.plh-selected-empty{text-align:center;padding:36px 20px;color:var(--color-text-neon-muted)}.plh-selected-empty-icon{font-size:36px;margin-bottom:8px}.plh-selected-empty-title{font-family:var(--font-display);font-weight:700;font-size:14px}@media(min-width:720px){.plh-cards{padding:0 24px 4px}.plh-header{padding:16px 24px 12px}.plh-shelf-head{padding:0 24px 10px}.plh-banner,.plh-new-request{margin-left:24px;margin-right:24px}.plh-req-list{padding:0 24px}.plh-mine-head{padding:14px 24px 6px}}.plg-host{position:fixed;inset:0;z-index:9000;display:flex;align-items:flex-start;justify-content:center;overflow:hidden}.plg-scrim{position:absolute;inset:0;background:#000000b8;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}.plg-modal{position:relative;z-index:1;margin:32px 16px;max-width:880px;width:100%;background:#0f1116;color:#f1f3f7;border-radius:16px;border:1px solid rgba(255,255,255,.08);box-shadow:0 30px 60px #0009;padding:24px 24px 20px;max-height:calc(100vh - 64px);overflow-y:auto;font-family:var(--font-body, system-ui)}.plg-close{position:absolute;top:12px;right:12px;width:32px;height:32px;border-radius:50%;background:#ffffff0f;color:#f1f3f7;border:0;font-size:16px;cursor:pointer}.plg-close:hover{background:#ffffff1f}.plg-title{margin:0 0 4px;font-size:20px;font-family:var(--font-display, system-ui);font-weight:700;letter-spacing:.02em}.plg-sub{margin:0 0 18px;color:#d8dce5;font-size:15px;line-height:1.55}.plg-guide{margin:0 0 18px;background:#14171f;border:1px solid rgba(255,255,255,.08);border-radius:12px;overflow:hidden}.plg-guide-toggle{display:flex;align-items:center;justify-content:space-between;width:100%;box-sizing:border-box;padding:12px 14px;background:transparent;border:0;color:#f1f3f7;font:inherit;font-size:14px;font-weight:700;letter-spacing:.01em;cursor:pointer;text-align:left}.plg-guide-toggle:hover{background:#ffffff08}.plg-guide-chevron{color:#8a92a3;font-size:13px;margin-left:12px}.plg-guide-body{padding:4px 14px 14px;border-top:1px solid rgba(255,255,255,.06)}.plg-guide-steps{list-style:none;margin:12px 0 14px;padding:0;display:flex;flex-direction:column;gap:12px}.plg-guide-step{display:flex;align-items:flex-start;gap:12px}.plg-guide-num{flex:0 0 auto;width:22px;height:22px;border-radius:50%;background:linear-gradient(180deg,#ff3a8c,#cf2e72);color:#fff;font-size:12px;font-weight:700;display:flex;align-items:center;justify-content:center;margin-top:1px}.plg-guide-text{color:#d8dce5;font-size:13.5px;line-height:1.5}.plg-guide-text b{color:#f1f3f7}.plg-guide-warn{display:flex;align-items:flex-start;gap:10px;background:#ffb80014;border:1px solid rgba(255,184,0,.35);border-radius:10px;padding:10px 12px}.plg-guide-warn-icon{flex:0 0 auto;font-size:14px;line-height:1.5}.plg-guide-warn-text{color:#f0d9a8;font-size:12.5px;line-height:1.55}.plg-guide-warn-text b{color:#ffd66b}.plg-label{display:block;margin:14px 0 6px;font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#8a92a3}.plg-input,.plg-textarea{width:100%;box-sizing:border-box;background:#181b24;color:#f1f3f7;border:1px solid rgba(255,255,255,.1);border-radius:10px;padding:10px 12px;font:inherit;font-size:14px;outline:none}.plg-input:focus,.plg-textarea:focus{border-color:#5cc8ff}.plg-textarea{min-height:200px;font-family:var(--font-mono, ui-monospace, SFMono-Regular, Menlo, monospace);font-size:12.5px;line-height:1.45;resize:vertical}.plg-row{display:flex;gap:10px;align-items:center;margin:8px 0 0;flex-wrap:wrap}.plg-hint{color:#8a92a3;font-size:12px}.plg-btn{appearance:none;-webkit-appearance:none;cursor:pointer;border-radius:999px;padding:9px 16px;font:inherit;font-size:13px;font-weight:600;border:0;background:#ffffff14;color:#f1f3f7}.plg-btn:disabled{cursor:not-allowed;opacity:.45}.plg-btn-primary{background:linear-gradient(180deg,#ff3a8c,#cf2e72);color:#fff}.plg-btn-secondary{background:#ffffff1a}.plg-btn-ghost{background:transparent;color:#aab0bd}.plg-btn-success{background:linear-gradient(180deg,#2dd66f,#20b659);color:#04140a}.plg-btn-disabled{background:#ffffff0a;color:#5a606e}.plg-actions{display:flex;gap:10px;margin:16px 0 0;flex-wrap:wrap}.plg-results{margin-top:16px}.plg-verdict{padding:10px 12px;border-radius:10px;margin:6px 0 12px;font-weight:700;font-size:13px}.plg-verdict-ok{background:#2dd66f29;color:#2dd66f;border:1px solid rgba(45,214,111,.4)}.plg-verdict-bad{background:#ff505024;color:#ff8a8a;border:1px solid rgba(255,80,80,.4)}.plg-block{background:#14171f;border:1px solid rgba(255,255,255,.06);border-radius:10px;padding:10px 12px;margin:8px 0}.plg-block h4{margin:0 0 6px;font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:#aab0bd}.plg-block ul{margin:0;padding-left:18px;font-size:13px;line-height:1.5}.plg-block-err{border-color:#ff505066}.plg-table-wrap{overflow-x:auto}.plg-table{width:100%;border-collapse:collapse;font-size:11px}.plg-table th,.plg-table td{padding:4px 6px;text-align:center}.plg-table th{color:#8a92a3;font-weight:600;letter-spacing:.04em;border-bottom:1px solid rgba(255,255,255,.08)}.plg-row-idx{color:#aab0bd;text-align:left;font-weight:700}.plg-cell-ok{color:#2dd66f}.plg-cell-bad{color:#ff8a8a;background:#ff50500f}.plg-row-bad{background:#ff50500a}.plg-row-details td{text-align:left;padding-left:24px}.plg-err-list{color:#ff8a8a}.plg-warn-list{color:#ffd66b}.plg-song-issue{padding:8px 0;border-top:1px solid rgba(255,255,255,.05)}.plg-song-issue:first-of-type{border-top:0;padding-top:4px}.plg-song-issue-head{font-weight:700;font-size:12px;margin:0 0 4px;color:#f1f3f7;letter-spacing:.02em}.plg-song-issue ul{margin:0;padding-left:18px;font-size:13px;line-height:1.5}.plg-err-item{color:#ff8a8a}.plg-warn-item{color:#ffd66b}.plg-results-actions{margin-top:0!important;margin-bottom:6px}.plg-hint-inline{font-style:italic}.plg-error{background:#ff50501f;border:1px solid rgba(255,80,80,.4);color:#ff8a8a;border-radius:10px;padding:12px;font-family:var(--font-mono, ui-monospace, SFMono-Regular, Menlo, monospace);font-size:12px}.plg-footer{margin-top:16px;border-top:1px solid rgba(255,255,255,.06);padding-top:10px;color:#8a92a3;font-size:12px;line-height:1.5}.plg-followup:empty{display:none}.plg-banner{margin-top:12px;padding:10px 12px;border-radius:10px;font-size:13px;line-height:1.5}.plg-banner p{margin:0 0 8px}.plg-banner .plg-row{margin-top:4px;flex-wrap:wrap}.plg-banner-ok{background:#2dd66f24;border:1px solid rgba(45,214,111,.4);color:#c8f3d8}.plg-banner-info{background:#6366f124;border:1px solid rgba(99,102,241,.4);color:#d6d8ff}.ta-reveal-truth{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:center;gap:8px;font-family:var(--font-display, inherit);font-size:var(--font-size-md, 1rem);margin-bottom:var(--space-sm, 8px)}.ta-truth-title{font-weight:800}.ta-truth-sep{opacity:.4}.ta-truth-artist{color:var(--color-text-neon-muted, #b3b3c2);font-family:var(--font-body, inherit);font-weight:600}.ta-reveal-own{display:flex;flex-direction:column;gap:6px;padding:10px 12px;background:#ffffff08;border:1px solid rgba(255,255,255,.07);border-radius:var(--radius-lg, 12px)}.ta-verdict{text-align:center;font-family:var(--font-display, inherit);font-weight:900;font-size:var(--font-size-lg, 1.125rem);letter-spacing:.01em;padding:8px 12px;margin-bottom:4px;border-radius:var(--radius-md, 8px)}.ta-verdict--win{color:var(--color-success-neon, #39ff14);background:#39ff1424;box-shadow:inset 0 0 18px #39ff141f;text-shadow:0 0 12px rgba(57,255,20,.5)}.ta-verdict--partial{color:var(--color-accent-secondary, #00f5ff);background:#00f5ff1a}.ta-verdict--pending{color:var(--color-accent-secondary, #00f5ff);background:#00f5ff12;font-weight:700;font-style:italic}.ta-verdict--miss{color:var(--color-text-neon-muted, #b3b3c2);background:#ffffff0d}.ta-own-row{display:flex;align-items:center;flex-wrap:wrap;gap:10px}.ta-own-label{color:var(--color-text-dim, #6b6b7a);font-size:var(--font-size-sm, .875rem);min-width:6em}.ta-own-guess{font-weight:600;flex:1 1 auto;word-break:break-word}.ta-own-row--none{color:var(--color-text-neon-muted, #b3b3c2);font-style:italic}.ta-pill{font-size:.72rem;font-weight:700;padding:2px 10px;border-radius:var(--radius-full, 999px);white-space:nowrap;letter-spacing:.02em}.ta-pill--exact,.ta-pill--fuzzy,.ta-pill--near-miss-accepted{background:#2ee59d29;color:#2ee59d}.ta-pill--near-miss{background:#ffb40029;color:#ffb400}.ta-pill--wrong{background:#ff004024;color:var(--color-error-neon, #ff0040)}.ta-pill--skipped{background:#ffffff14;color:var(--color-text-secondary, #b9b9c6)}.ta-voting{margin-top:var(--space-lg, 24px)}.ta-voting.hidden{display:none}.ta-voting-header{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:var(--space-md, 16px)}.ta-voting-header>span:not(.ta-voting-countdown){font-family:var(--font-display, inherit);font-weight:900;font-size:var(--font-size-sm, .875rem);letter-spacing:.1em;text-transform:uppercase;color:var(--color-text-white, #fff)}.ta-voting-countdown{flex-shrink:0;width:52px;height:52px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:18px;font-variant-numeric:tabular-nums;color:var(--color-accent-secondary, #00f5ff);background:radial-gradient(circle at center,var(--color-bg-primary, #0a0a12) 56%,transparent 57%),conic-gradient(var(--color-accent-secondary, #00f5ff) var(--ta-vote-progress, 360deg),rgba(255,255,255,.1) 0);box-shadow:var(--glow-secondary, 0 0 20px rgba(0, 245, 255, .5))}.ta-voting-countdown--closed{width:auto;height:auto;border-radius:var(--radius-full, 999px);padding:4px 12px;font-size:var(--font-size-sm, .875rem);font-weight:700;color:var(--color-text-neon-muted, #b3b3c2);background:#ffffff14;box-shadow:none}.ta-voting-cards{display:flex;flex-direction:column;gap:12px}.ta-vote-card{background:var(--color-bg-surface, rgba(255, 255, 255, .05));border:1px solid rgba(255,255,255,.08);border-radius:var(--radius-lg, 12px);padding:14px}.ta-vote-card--mine{border-color:#ff2d6a73;box-shadow:inset 0 0 16px #ff2d6a12}.ta-vote-card-head{display:flex;align-items:center;gap:10px;margin-bottom:10px}.ta-vote-avatar{flex-shrink:0;width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-family:var(--font-display, inherit);font-weight:800;font-size:13px;color:#fff;background:linear-gradient(135deg,var(--color-accent-primary, #ff2d6a),var(--color-neon-purple, #9d4edd))}.ta-vote-who{flex:1;font-weight:700;font-size:var(--font-size-md, 1rem);word-break:break-word}.ta-vote-field{flex-shrink:0;font-size:var(--font-size-xs, .625rem);font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--color-text-dim, #6b6b7a);background:#ffffff0f;padding:3px 8px;border-radius:var(--radius-full, 999px)}.ta-vote-guess{font-family:var(--font-display, inherit);font-weight:800;font-size:var(--font-size-lg, 1.125rem);margin:2px 0 12px;word-break:break-word}.ta-vote-tally{display:flex;flex-direction:column;gap:7px;margin-bottom:12px}.ta-tally-row{display:flex;align-items:center;gap:8px;font-size:var(--font-size-sm, .875rem);font-weight:700;font-variant-numeric:tabular-nums}.ta-tally-yes{color:var(--color-success-neon, #39ff14);min-width:48px}.ta-tally-no{color:var(--color-error-neon, #ff0040);min-width:48px}.ta-tally-track{flex:1;height:8px;border-radius:var(--radius-full, 999px);background:#ffffff12;overflow:hidden}.ta-tally-fill{display:block;height:100%;border-radius:var(--radius-full, 999px);transition:width var(--transition-normal, .3s) ease-out}.ta-tally-fill--yes{background:var(--color-success-neon, #39ff14);box-shadow:0 0 10px #39ff1480}.ta-tally-fill--no{background:var(--color-error-neon, #ff0040);box-shadow:0 0 10px #ff004073}.ta-vote-actions{display:flex;gap:10px}.ta-vote-btn{position:relative;flex:1;height:48px;border:1px solid rgba(255,255,255,.12);border-radius:var(--radius-lg, 12px);background:#ffffff0d;font-size:20px;cursor:pointer;transition:transform var(--transition-fast, .15s),box-shadow var(--transition-fast, .15s),opacity var(--transition-fast, .15s),background var(--transition-fast, .15s)}.ta-vote-btn--yes{background:#39ff141f;border-color:#39ff1466;color:var(--color-success-neon, #39ff14)}.ta-vote-btn--no{background:#ff00401a;border-color:#ff004061;color:var(--color-error-neon, #ff0040)}.ta-vote-btn.is-chosen{transform:translateY(-1px)}.ta-vote-btn--yes.is-chosen{background:#39ff1438;border-color:#39ff1499;box-shadow:var(--glow-success, 0 0 20px rgba(57, 255, 20, .5))}.ta-vote-btn--no.is-chosen{background:#ff004033;border-color:#ff00408c;box-shadow:var(--glow-error, 0 0 20px rgba(255, 0, 64, .5))}.ta-vote-actions--voted .ta-vote-btn{opacity:.34}.ta-vote-actions--voted .ta-vote-btn.is-chosen{opacity:1}.ta-vote-actions--voted .ta-vote-btn.is-chosen:after{content:"\2713";position:absolute;top:3px;right:8px;font-size:12px;font-weight:800}.ta-vote-btn--yes.is-chosen:after{color:var(--color-success-neon, #39ff14)}.ta-vote-btn--no.is-chosen:after{color:var(--color-error-neon, #ff0040)}.ta-voted-caption{margin-top:8px;text-align:center;font-size:var(--font-size-sm, .875rem);color:var(--color-text-neon-muted, #b3b3c2)}.ta-vote-own-note{text-align:center;font-size:var(--font-size-sm, .875rem);font-style:italic;color:var(--color-accent-primary, #ff2d6a);opacity:.85}.ta-override-actions{display:flex;align-items:center;gap:8px;margin-top:10px;padding-top:10px;border-top:1px solid rgba(255,255,255,.07)}.ta-override-label{margin-right:auto;font-size:var(--font-size-xs, .625rem);color:var(--color-text-dim, #6b6b7a)}.ta-override-btn{padding:6px 14px;border-radius:var(--radius-md, 8px);border:1px solid rgba(255,255,255,.14);background:#ffffff0d;color:var(--color-text-white, #fff);font-weight:700;font-size:var(--font-size-sm, .875rem);cursor:pointer}.ta-override-btn--accept.is-chosen{border-color:var(--color-success-neon, #39ff14);color:var(--color-success-neon, #39ff14)}.ta-override-btn--reject.is-chosen{border-color:var(--color-error-neon, #ff0040);color:var(--color-error-neon, #ff0040)}@media(prefers-reduced-motion:reduce){.ta-tally-fill,.ta-vote-btn{transition:none}}.ta-outcome-card{display:flex;align-items:center;gap:10px;background:var(--color-bg-surface, rgba(255, 255, 255, .05));border:1px solid rgba(255,255,255,.08);border-radius:var(--radius-lg, 12px);padding:11px 13px}.ta-outcome-card--accepted{border-color:#39ff144d}.ta-outcome-card--rejected{opacity:.72}.ta-outcome-avatar{flex-shrink:0;width:28px;height:28px;border-radius:50%;display:grid;place-items:center;font-family:var(--font-display, inherit);font-weight:800;font-size:12px;color:#fff;background:linear-gradient(135deg,var(--color-accent-primary, #ff2d6a),var(--color-neon-purple, #9d4edd))}.ta-outcome-main{flex:1;min-width:0}.ta-outcome-who{font-weight:700;font-size:var(--font-size-base, .875rem)}.ta-outcome-field{color:var(--color-text-dim, #6b6b7a);font-weight:600}.ta-outcome-guess{font-size:var(--font-size-sm, .875rem);color:var(--color-text-neon-muted, #b3b3c2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ta-outcome-tally{font-size:var(--font-size-xs, .625rem);color:var(--color-text-dim, #6b6b7a);font-variant-numeric:tabular-nums}.ta-outcome-verdict{flex-shrink:0;display:inline-flex;align-items:center;font-family:var(--font-display, inherit);font-weight:800;font-size:var(--font-size-base, .875rem);padding:5px 11px;border-radius:var(--radius-full, 999px);font-variant-numeric:tabular-nums}.ta-outcome-verdict--accepted{background:#39ff1429;color:var(--color-success-neon, #39ff14)}.ta-outcome-verdict--rejected{background:#ff00401f;color:var(--color-error-neon, #ff0040)}.ta-input-section{display:flex;flex-direction:column;gap:12px;padding:12px 14px;margin:0 var(--space-md) var(--space-md);background:linear-gradient(180deg,#ff2d6a0f,#ffffff05);border:1px solid rgba(255,45,106,.22);border-radius:var(--radius-lg);box-shadow:inset 0 0 12px #ff2d6a0d}.ta-input-section.hidden{display:none}.ta-input-field{display:flex;flex-direction:column;gap:6px}.ta-input-label{display:flex;align-items:center;gap:6px;font-family:var(--font-display);font-weight:700;font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--color-text-neon-muted)}.ta-input-points{margin-left:auto;flex-shrink:0;background:#39ff1426;color:var(--color-success-neon);font-weight:900;font-size:11px;letter-spacing:.04em;padding:2px 8px;border-radius:var(--radius-full)}.ta-text-input{width:100%;box-sizing:border-box;padding:12px 14px;background:#ffffff0d;border:2px solid rgba(255,255,255,.12);border-radius:var(--radius-lg);color:var(--color-text-white);font-family:var(--font-body);font-size:16px;line-height:1.3;transition:border-color var(--transition-fast),box-shadow var(--transition-fast)}.ta-text-input::placeholder{color:var(--color-text-neon-muted);opacity:.55}.ta-text-input:focus{outline:none;border-color:var(--color-accent-primary);box-shadow:0 0 0 3px #ff2d6a33}.ta-input-ack{margin-top:2px;text-align:center;font-family:var(--font-body);font-size:12px;color:var(--color-success-neon)}.ta-input-ack.hidden{display:none}#reveal-view .reveal-container--duel{position:relative;overflow:hidden;isolation:isolate}#reveal-view .reveal-backdrop{position:absolute;top:0;left:0;right:0;height:340px;z-index:0;background-size:cover;background-position:center;background-repeat:no-repeat;filter:blur(46px) saturate(1.15);transform:scale(1.15);transform-origin:top center;opacity:.5;pointer-events:none;-webkit-mask-image:linear-gradient(to bottom,#000 0%,#000 28%,transparent 70%);mask-image:linear-gradient(to bottom,#000 0%,#000 28%,transparent 70%)}#reveal-view .reveal-backdrop--synthetic{background-image:radial-gradient(circle at 28% 22%,#a82054f2,#a8205400 42%),radial-gradient(circle at 78% 14%,#601c96e6,#601c9600 46%),radial-gradient(circle at 18% 82%,#222878e6,#22287800 50%),conic-gradient(from 210deg at 52% 48%,#1a1038,#4a1240 70deg,#7a1e3c 130deg,#2a1454 200deg,#131642,#1a1038 360deg);filter:blur(54px) saturate(1.25)}#reveal-view .reveal-scrim{position:absolute;top:0;left:0;right:0;height:380px;z-index:0;pointer-events:none;background:linear-gradient(180deg,rgba(10,10,18,.78) 0%,rgba(10,10,18,.88) 55%,var(--color-bg-primary) 100%)}#reveal-view .reveal-scrim:after{content:"";position:absolute;inset:0;background:radial-gradient(ellipse 320px 360px at 50% 24%,#00f5ff21,#00f5ff00 62%)}#reveal-view .reveal-container--duel>*:not(.reveal-backdrop):not(.reveal-scrim):not(.confetti-canvas){position:relative;z-index:1}@media(prefers-reduced-motion:no-preference){#reveal-view .reveal-backdrop{transition:background-image .4s ease}}#reveal-view .song-strip,#reveal-view .score-row,#reveal-view .card-section,#reveal-view .duel-ticket{background:#ffffff0f;border:1px solid rgba(255,255,255,.12);-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);box-shadow:0 10px 30px #00000059;border-radius:var(--radius-lg)}#reveal-view .card-section:hover{background:#ffffff14;border-color:#ffffff29}#reveal-view .reveal-header-v2{margin-bottom:var(--space-sm)}#reveal-view .song-strip{padding:var(--space-sm) var(--space-md) var(--space-sm) var(--space-sm)}#reveal-view .song-strip-cover{box-shadow:0 2px 10px #00000080;border:1px solid rgba(255,255,255,.15)}#reveal-view .duel-emotion{font-size:30px;letter-spacing:.04em;margin-bottom:var(--space-sm);text-shadow:0 4px 18px rgba(0,0,0,.6)}#reveal-view .duel{padding:var(--space-md) var(--space-xs) var(--space-lg)}#reveal-view .duel-tickets{position:relative;display:flex;justify-content:center;align-items:stretch;gap:var(--space-md);padding-bottom:20px}#reveal-view .duel-ticket{flex:1 1 0;max-width:170px;padding:var(--space-md) var(--space-sm) var(--space-lg);text-align:center}#reveal-view .duel-ticket--you{transform:rotate(-3deg) translateY(4px);border-color:#ff2d6a59;box-shadow:0 14px 34px #00000073,0 0 24px #ff2d6a1f}#reveal-view .duel-ticket--truth{transform:rotate(3deg) translateY(4px);border-color:#00f5ff66;box-shadow:0 14px 34px #00000073,0 0 34px #00f5ff2e}#reveal-view .duel-ticket .duel-label{padding-bottom:var(--space-sm);margin:0 6px var(--space-sm);border-bottom:1.5px dashed rgba(255,255,255,.18)}#reveal-view .duel-ticket .duel-year{font-size:clamp(40px,13vw,54px)}#reveal-view .duel-ticket--you .duel-year.mine{color:var(--color-accent-primary);text-shadow:0 0 18px rgba(255,45,106,.45)}#reveal-view .duel-ticket--truth .duel-year.correct{color:var(--color-accent-secondary);text-shadow:0 0 14px rgba(0,245,255,.9),0 0 38px rgba(0,245,255,.45)}#reveal-view .duel-gap{position:absolute;left:50%;bottom:0;transform:translate(-50%);flex-direction:row;align-items:baseline;gap:5px;min-width:0;padding:6px 16px;border-radius:var(--radius-full);background:#ff660029;border:1px solid rgba(255,102,0,.55);-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);box-shadow:0 6px 18px #00000080,0 0 16px #f603;white-space:nowrap;z-index:3}#reveal-view .duel-gap-x{font-size:var(--font-size-md);color:var(--color-warning-alt);opacity:.9}#reveal-view .duel-gap-n{font-size:var(--font-size-lg);color:var(--color-warning-alt);text-shadow:none}#reveal-view .duel-gap-unit{margin-top:0;font-size:10px;color:var(--color-warning-alt)}#reveal-view .duel-gap--exact{background:#39ff1429;border-color:#39ff148c;box-shadow:0 6px 18px #00000080,0 0 16px #39ff1438}#reveal-view .duel-gap--exact .duel-gap-x,#reveal-view .duel-gap--exact .duel-gap-n,#reveal-view .duel-gap--exact .duel-gap-unit{color:var(--color-success-neon)}#reveal-view .duel-gap--wrong{background:#ff004024;border-color:#ff004080;box-shadow:0 6px 18px #00000080,0 0 16px #ff004033}#reveal-view .duel-gap--wrong .duel-gap-x,#reveal-view .duel-gap--wrong .duel-gap-n,#reveal-view .duel-gap--wrong .duel-gap-unit{color:var(--color-error-neon)}#reveal-view .score-row{border-color:#ffffff1f;box-shadow:0 10px 30px #00000059}#reveal-view .score-row-pts{color:var(--color-success-neon);text-shadow:0 0 16px rgba(57,255,20,.5);font-size:32px}#reveal-view .ta-vote-card,#reveal-view .ta-outcome-card{background:#ffffff0d;border:1px solid rgba(255,255,255,.1);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}#reveal-view .next-round-btn{background:linear-gradient(135deg,#ff2d6a,#ff4f86);border-radius:var(--radius-full);box-shadow:0 8px 24px #ff2d6a73,0 0 18px #ff2d6a4d}#reveal-view .next-round-btn:hover{background:linear-gradient(135deg,#ff4f86,#ff2d6a)}#reveal-view .next-round-btn.is-final{background:linear-gradient(135deg,#39ff14,#00f5ff);color:var(--color-bg-primary)}#reveal-view .invite-btn{background:#ffffff0f;border:1px solid rgba(255,255,255,.18);-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);border-radius:var(--radius-full)}#reveal-view .reveal-admin-buttons{align-items:stretch}#reveal-view .reveal-admin-buttons .invite-btn,#reveal-view .reveal-admin-buttons .next-round-btn{flex:1 1 0;min-width:0;max-width:260px;min-height:56px;padding:12px 20px;font-size:var(--font-size-md);display:inline-flex;align-items:center;justify-content:center;gap:var(--space-sm);text-align:center}#reveal-view #reveal-leaderboard-list{display:flex;flex-direction:column;gap:8px;max-height:none;overflow:visible}#reveal-view .rstand-row{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:12px;background:#ffffff08;border:1px solid rgba(255,255,255,.06)}#reveal-view .rstand-row--you{border:1px solid var(--color-accent-primary);background:#ff2d6a0f;box-shadow:0 0 16px #ff2d6a38}#reveal-view .rstand-row--taper1{opacity:.85}#reveal-view .rstand-row--taper2{opacity:.68}#reveal-view .rstand-rankcell{display:flex;flex-direction:column;align-items:center;width:26px;flex-shrink:0}#reveal-view .rstand-rank{font-family:var(--font-display);font-weight:800;font-size:20px;line-height:1;color:var(--color-text-white)}#reveal-view .rstand-row--taper1 .rstand-rank,#reveal-view .rstand-row--taper2 .rstand-rank{font-size:18px}#reveal-view .rstand-move{font-size:10px;font-weight:700;line-height:1;margin-top:3px}#reveal-view .rstand-move--up{color:var(--color-success-neon)}#reveal-view .rstand-move--down{color:var(--color-error-neon)}#reveal-view .rstand-move--flat{color:var(--color-text-neon-muted)}#reveal-view .rstand-avatar{width:34px;height:34px;border-radius:50%;flex-shrink:0;display:flex;align-items:center;justify-content:center;font-family:var(--font-display);font-weight:800;font-size:15px;color:var(--color-text-white);text-shadow:0 1px 2px rgba(0,0,0,.35);border:1px solid rgba(255,255,255,.15)}#reveal-view .rstand-ident{flex:1;min-width:0}#reveal-view .rstand-name{font-family:var(--font-body);font-weight:700;font-size:15px;line-height:1.1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:flex;align-items:center;gap:6px;color:var(--color-text-white)}#reveal-view .rstand-you{font-family:var(--font-display);font-weight:800;font-size:9px;letter-spacing:.06em;color:var(--color-accent-primary);background:#ff2d6a26;border:1px solid rgba(255,45,106,.4);border-radius:6px;padding:2px 5px;line-height:1;flex-shrink:0}#reveal-view .rstand-guess{font-size:11px;font-weight:500;color:var(--color-text-neon-muted);line-height:1.2;margin-top:3px;font-variant-numeric:tabular-nums;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#reveal-view .rstand-guess .rstand-exact{color:var(--color-success-neon);font-weight:600}#reveal-view .rstand-chips{display:flex;flex-wrap:wrap;gap:5px;margin-top:5px}#reveal-view .rstand-chip{font-size:10px;font-weight:600;color:var(--color-text-neon-muted);background:#ffffff0d;border:1px solid rgba(255,255,255,.08);border-radius:999px;padding:2px 7px;line-height:1.4;white-space:nowrap}#reveal-view .rstand-chip--fire{color:var(--color-warning-alt);border-color:#ff66004d;background:#ff660014}#reveal-view .rstand-chip--steal{color:var(--color-success-neon);border-color:#39ff1447;background:#39ff1412}#reveal-view .rstand-score{display:flex;flex-direction:column;align-items:flex-end;flex-shrink:0;margin-left:4px}#reveal-view .rstand-total{font-family:var(--font-display);font-weight:900;font-size:22px;line-height:1;color:var(--color-text-white);letter-spacing:-.01em}#reveal-view .rstand-row--taper1 .rstand-total{font-size:20px}#reveal-view .rstand-row--taper2 .rstand-total{font-size:19px}#reveal-view .rstand-delta{font-family:var(--font-body);font-weight:700;font-size:12px;line-height:1;margin-top:4px;color:var(--color-success-neon)}#reveal-view .rstand-delta--zero{color:var(--color-text-neon-muted)}#reveal-view .song-strip{flex-direction:column;align-items:stretch;gap:0;padding:0;overflow:hidden}#reveal-view .song-strip-main{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-md) var(--space-sm) var(--space-sm)}#reveal-view .artist-guess-row{display:flex;align-items:center;gap:8px;padding:9px var(--space-md) 9px var(--space-sm);border-top:1px solid rgba(255,255,255,.08)}#reveal-view .artist-guess-row.hidden{display:none}#reveal-view .artist-guess-ic{font-size:14px;flex-shrink:0}#reveal-view .artist-guess-name{font-family:var(--font-body);font-weight:700;font-size:14px;color:var(--color-text-white);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}#reveal-view .artist-reveal-winner{margin-left:auto;flex-shrink:0;font-family:var(--font-body);font-size:11px;font-weight:700;padding:3px 10px;border-radius:var(--radius-full);white-space:nowrap}#reveal-view .artist-reveal-winner.hidden{display:none}#reveal-view .artist-reveal-winner.is-you,#reveal-view .artist-reveal-winner.is-other{color:var(--color-success-neon);background:#39ff141f;border:1px solid rgba(57,255,20,.4)}#reveal-view .artist-reveal-winner.is-you{box-shadow:0 0 12px #39ff1433}#reveal-view .artist-reveal-winner.artist-reveal-no-winner{color:var(--color-text-neon-muted);background:#ffffff0f;border:1px solid rgba(255,255,255,.12)}#reveal-view #fun-fact-container .section-content-padded{display:flex;flex-direction:column;gap:11px}#reveal-view .song-rich-info .song-badges-row{display:flex;gap:8px}#reveal-view .song-rich-info .song-badge{flex:1;min-width:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;padding:11px 6px;border-radius:12px;background:#ffffff0d;border:1px solid rgba(255,255,255,.1);font-family:var(--font-body);font-size:11px;font-weight:700;line-height:1.2;text-align:center;white-space:normal}#reveal-view .song-rich-info .song-badge .song-badge-icon{font-size:20px}#reveal-view .song-rich-info .song-badges-more{flex:0 0 auto;align-self:center;font-size:11px;color:var(--color-text-neon-muted)}#reveal-view #fun-fact .fun-fact-text,#reveal-view .fun-fact-text{font-size:12px;line-height:1.4;color:var(--color-text-neon-muted);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.playlist-tabs{display:flex;gap:var(--space-lg);border-bottom:1px solid var(--color-border-neon);margin-bottom:var(--space-md)}.playlist-tab{appearance:none;background:none;border:none;padding:10px 2px;margin-bottom:-1px;font:inherit;font-weight:700;font-size:.95rem;color:var(--color-text-neon-muted);cursor:pointer;border-bottom:2px solid transparent;transition:color var(--transition-fast),border-color var(--transition-fast)}.playlist-tab:hover{color:var(--color-text-white)}.playlist-tab.active{color:var(--color-accent-secondary);border-bottom-color:var(--color-accent-secondary)}.playlist-panel.hidden{display:none}.mix-card{background:var(--color-surface-dark);border:1px solid var(--color-border-neon);border-radius:var(--radius-lg);padding:var(--space-lg)}.mix-card-head{display:flex;align-items:center;gap:var(--space-sm)}.mix-card-icon{font-size:1.25rem}.mix-card-title{margin:0;font-size:1.25rem;font-weight:800;color:var(--color-text-white)}.mix-card-sub{margin:6px 0 var(--space-lg);color:var(--color-text-neon-muted);font-size:.9rem}.mix-chip-cloud{display:flex;flex-direction:column;gap:var(--space-md)}.mix-chip-row{display:flex;flex-direction:column;gap:8px}.mix-chip-rowlabel{font-size:.7rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--color-text-neon-muted)}.mix-chip-group{display:flex;flex-wrap:wrap;gap:8px}.mix-chip{appearance:none;padding:6px 14px;border-radius:var(--radius-full);border:1px solid var(--color-border-neon);background:#ffffff0a;color:var(--color-text-neon-muted);font:inherit;font-size:.85rem;font-weight:600;cursor:pointer;transition:all var(--transition-fast)}.mix-chip:hover{border-color:#ffffff4d;color:var(--color-text-white)}.mix-chip-group[data-accent=cyan] .mix-chip.active{background:#00f5ff26;border-color:var(--color-accent-secondary);color:var(--color-accent-secondary)}.mix-chip-group[data-accent=pink] .mix-chip.active{background:#ff2d6a26;border-color:var(--color-accent-primary);color:var(--color-accent-primary)}.mix-chip-group[data-accent=indigo] .mix-chip.active{background:#6366f12e;border-color:var(--color-accent-brand);color:#a5b4fc}.mix-empty{color:var(--color-text-neon-muted);font-size:.9rem;margin:0}.mix-divider{height:1px;background:var(--color-border-neon);margin:var(--space-lg) 0}.mix-count-row{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md);flex-wrap:wrap}.mix-count-label{font-size:.7rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--color-text-neon-muted)}.mix-segmented{display:inline-flex;padding:4px;gap:4px;background:#ffffff0d;border:1px solid var(--color-border-neon);border-radius:10px}.mix-seg{appearance:none;min-width:56px;padding:8px 14px;border:none;border-radius:7px;background:transparent;color:var(--color-text-neon-muted);font:inherit;font-weight:700;cursor:pointer;transition:all var(--transition-fast)}.mix-seg:hover{color:var(--color-text-white)}.mix-seg.active{background:var(--color-accent-brand);color:var(--color-text-white);box-shadow:0 0 14px #6366f180}.mix-preview{display:flex;align-items:center;gap:10px;margin:var(--space-md) 0 var(--space-lg);padding:12px 16px;border-radius:var(--radius-md);background:#00f5ff0f;border:1px solid rgba(0,245,255,.15);color:var(--color-text-white);font-size:.9rem}.mix-preview-dot{width:8px;height:8px;border-radius:50%;background:#1ed760;box-shadow:0 0 8px #1ed760cc;flex-shrink:0}.mix-actions{display:flex;align-items:center;gap:var(--space-lg);flex-wrap:wrap}.mix-actions .btn-primary:disabled{opacity:.5;cursor:not-allowed;box-shadow:none}.mix-save-label{display:flex;align-items:center;gap:8px;font-size:.9rem;color:var(--color-text-neon-muted);cursor:pointer}#mix-error{margin-top:var(--space-md)}.mix-error-detail{display:block;margin-top:var(--space-xs);font-size:var(--font-size-sm);line-height:1.35;color:var(--color-text-light);word-break:break-word}.mix-tracklist-row{margin:var(--space-sm) 0}.mix-tracklist-row .btn-sm{font-size:.85rem;padding:6px 12px}.mix-tracklist{margin:var(--space-sm) 0 var(--space-md);max-height:280px;overflow-y:auto;border-radius:var(--radius-md);border:1px solid rgba(0,245,255,.15);background:#00f5ff0a}.mix-tracklist.hidden{display:none}.mix-tracklist-head{margin:0;padding:10px 14px;font-size:.8rem;font-weight:600;letter-spacing:.02em;text-transform:uppercase;color:var(--color-text-neon-muted);border-bottom:1px solid rgba(0,245,255,.12);position:sticky;top:0;background:#0a0c18eb}.mix-tracklist-empty{margin:0;padding:14px;font-size:.9rem;color:var(--color-text-neon-muted)}.mix-track-list{list-style:none;margin:0;padding:4px 0;counter-reset:mix-track}.mix-track{display:flex;align-items:baseline;gap:8px;padding:6px 14px;font-size:.88rem;color:var(--color-text-white)}.mix-track:before{counter-increment:mix-track;content:counter(mix-track);flex-shrink:0;min-width:1.8em;text-align:right;font-variant-numeric:tabular-nums;color:var(--color-text-neon-muted);opacity:.7}.mix-track-title{font-weight:500}.mix-track-artist{color:var(--color-text-neon-muted)}.mix-track-artist:before{content:"\2014 "}.mix-track-year{margin-left:auto;flex-shrink:0;color:var(--color-text-neon-muted);font-variant-numeric:tabular-nums;opacity:.7}.beatify-toast-container{position:fixed;top:var(--space-md);left:50%;transform:translate(-50%);z-index:var(--z-toast);display:flex;flex-direction:column;align-items:center;gap:var(--space-sm);width:min(92vw,440px);pointer-events:none}.beatify-toast{pointer-events:auto;width:100%;display:flex;align-items:flex-start;gap:var(--space-sm);position:relative;overflow:hidden;padding:var(--space-sm) var(--space-md);border-radius:var(--radius-lg);background:#141422f5;border:1px solid var(--color-error-neon);box-shadow:0 0 20px #ff004073,0 8px 32px #00000073;color:var(--color-text-white);font-family:var(--font-body);font-size:var(--font-size-base);font-weight:var(--font-weight-medium);opacity:0;transform:translateY(-12px);transition:opacity var(--transition-normal),transform var(--transition-normal)}.beatify-toast--in{opacity:1;transform:translateY(0)}.beatify-toast--leaving{opacity:0;transform:translateY(-12px)}.beatify-toast--info{border-color:var(--color-accent-secondary);box-shadow:0 0 20px #00f5ff66,0 8px 32px #00000073}.beatify-toast--success{border-color:var(--color-success-neon);box-shadow:0 0 20px #39ff1466,0 8px 32px #00000073}.beatify-toast-body{display:flex;align-items:flex-start;gap:var(--space-sm);flex:1 1 auto;min-width:0}.beatify-toast-icon{font-size:var(--font-size-lg);line-height:1.3;flex-shrink:0}.beatify-toast-text{line-height:1.35;word-break:break-word}.beatify-toast-close{flex-shrink:0;background:none;border:none;color:var(--color-text-neon-muted);font-size:var(--font-size-xl);line-height:1;cursor:pointer;padding:0 var(--space-xs);transition:color var(--transition-fast)}.beatify-toast-close:hover{color:var(--color-text-white)}.beatify-toast-progress{position:absolute;left:0;bottom:0;height:3px;width:100%;transform-origin:left center;background:var(--color-error-neon);box-shadow:0 0 8px var(--color-error-neon);animation:beatify-toast-drain linear forwards}.beatify-toast--info .beatify-toast-progress{background:var(--color-accent-secondary);box-shadow:0 0 8px var(--color-accent-secondary)}.beatify-toast--success .beatify-toast-progress{background:var(--color-success-neon);box-shadow:0 0 8px var(--color-success-neon)}@keyframes beatify-toast-drain{0%{transform:scaleX(1)}to{transform:scaleX(0)}}.beatify-banner{display:flex;align-items:flex-start;gap:var(--space-sm);margin-bottom:var(--space-md);padding:var(--space-sm) var(--space-md);border-radius:var(--radius-lg);background:#ff004014;border:1px solid var(--color-error-neon);box-shadow:inset 0 0 16px #ff00401f;color:var(--color-text-white);font-family:var(--font-body);font-size:var(--font-size-base);text-align:left}.beatify-banner--warning{background:#f59e0b1a;border-color:var(--color-warning);box-shadow:inset 0 0 16px #f59e0b1f}.beatify-banner--info{background:#00f5ff14;border-color:var(--color-accent-secondary);box-shadow:inset 0 0 16px #00f5ff1f}.beatify-banner-icon{font-size:var(--font-size-lg);line-height:1.2;flex-shrink:0}.beatify-banner-content{flex:1 1 auto;min-width:0}.beatify-banner-title{font-family:var(--font-display);font-weight:var(--font-weight-bold);margin-bottom:2px;color:var(--color-error-neon)}.beatify-banner--warning .beatify-banner-title{color:var(--color-warning)}.beatify-banner--info .beatify-banner-title{color:var(--color-accent-secondary)}.beatify-banner-text{line-height:1.4;color:var(--color-text-neon-muted);word-break:break-word}.beatify-banner-detail{margin-top:var(--space-xs);font-size:var(--font-size-sm);line-height:1.35;color:var(--color-text-light);word-break:break-word}.beatify-banner-action{margin-top:var(--space-xs);background:none;border:1px solid currentColor;border-radius:var(--radius-sm);color:var(--color-error-neon);font-family:var(--font-body);font-size:var(--font-size-sm);line-height:1.2;padding:6px var(--space-sm);cursor:pointer;transition:background var(--transition-fast),color var(--transition-fast)}.beatify-banner-action:hover{background:var(--color-error-neon);color:var(--color-bg-primary)}.beatify-banner--warning .beatify-banner-action{color:var(--color-warning)}.beatify-banner--warning .beatify-banner-action:hover{background:var(--color-warning)}.beatify-banner--info .beatify-banner-action{color:var(--color-accent-secondary)}.beatify-banner--info .beatify-banner-action:hover{background:var(--color-accent-secondary)}.beatify-banner-close{flex-shrink:0;background:none;border:none;color:var(--color-text-neon-muted);font-size:var(--font-size-xl);line-height:1;cursor:pointer;padding:0 var(--space-xs);transition:color var(--transition-fast)}.beatify-banner-close:hover{color:var(--color-text-white)}@media(prefers-reduced-motion:reduce){.beatify-toast{transition:none;opacity:1;transform:none}.beatify-toast-progress{animation:none}}.steal-target-row{display:flex;align-items:center;gap:var(--space-sm);text-align:left}.steal-target-rank{flex-shrink:0;width:24px;height:24px;display:inline-flex;align-items:center;justify-content:center;border-radius:var(--radius-full);background:var(--color-dark-surface);border:1px solid var(--color-border-neon);font-family:var(--font-display);font-weight:var(--font-weight-bold);font-size:var(--font-size-sm);color:var(--color-text-neon-muted)}.steal-target-name{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:var(--font-weight-semibold)}.steal-target-score{flex-shrink:0;font-family:var(--font-display);font-weight:var(--font-weight-bold);font-variant-numeric:tabular-nums;color:var(--color-accent-secondary);text-shadow:0 0 8px rgba(0,245,255,.5)}.steal-target-crown{flex-shrink:0;font-size:var(--font-size-md);line-height:1}.steal-target-row--leader{border-color:var(--color-warning);box-shadow:0 0 14px #f59e0b59,inset 0 0 10px #f59e0b1f}.steal-target-row--leader .steal-target-rank{border-color:var(--color-warning);color:var(--color-warning);box-shadow:0 0 8px #f59e0b66}.steal-target-row--leader .steal-target-score{color:var(--color-warning);text-shadow:0 0 8px rgba(245,158,11,.5)}.dotaxis-legend-acc{display:inline-flex;align-items:center;gap:3px;margin-left:4px;padding:1px 6px;border-radius:var(--radius-full);font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);border:1px solid currentColor;white-space:nowrap}.dotaxis-legend-acc-glyph{font-size:.95em;line-height:1}.dotaxis-legend-acc--exact{color:var(--color-accent-secondary)}.dotaxis-legend-acc--near{color:var(--color-warning)}.dotaxis-legend-acc--off{color:var(--color-text-neon-muted)}.player-tile-away{display:inline-flex;align-items:center;gap:3px}.player-tile-away-glyph{font-size:.9em;line-height:1}.timer-neon{position:relative}.timer-neon-ring{position:absolute;inset:3px;width:calc(100% - 6px);height:calc(100% - 6px);transform:rotate(-90deg);pointer-events:none}.timer-neon-ring-bg{fill:none;stroke:#ffffff1f;stroke-width:4}.timer-neon-ring-fg{fill:none;stroke:var(--color-accent-secondary);stroke-width:4;stroke-linecap:round;filter:drop-shadow(0 0 6px rgba(0,245,255,.6));transition:stroke-dashoffset 1s linear,stroke var(--transition-normal)}.timer-neon--warn .timer-neon-ring-fg,.timer-neon-ring--warn .timer-neon-ring-fg{stroke:var(--color-warning);filter:drop-shadow(0 0 6px rgba(245,158,11,.7))}.timer-neon-ring--critical .timer-neon-ring-fg{stroke:var(--color-error-neon);filter:drop-shadow(0 0 7px rgba(255,0,64,.8))}@media(prefers-reduced-motion:reduce){.timer-neon-ring-fg{transition:none}.arc-chip--elim{color:var(--color-error-neon);background:#ff00401f;border:1px solid rgba(255,0,64,.5);text-transform:uppercase}.sd-live-toggle{display:inline-flex;align-items:center;gap:7px;padding:5px 10px;border-radius:var(--radius-md);background:var(--color-bg-surface);border:1px solid rgba(255,255,255,.12);font-family:var(--font-body);font-size:12px;font-weight:600;color:var(--color-text-white);cursor:pointer;transition:border-color var(--transition-fast),box-shadow var(--transition-fast)}.sd-live-toggle:disabled{opacity:.4;cursor:not-allowed}.sd-live-toggle.is-on{border-color:var(--color-accent-primary);background:#ff2d6a14;box-shadow:var(--glow-primary)}.sd-live-toggle__switch{position:relative;width:30px;height:17px;border-radius:var(--radius-full);background:#ffffff26;flex:none}.sd-live-toggle.is-on .sd-live-toggle__switch{background:var(--color-accent-primary)}.sd-live-toggle__switch:after{content:"";position:absolute;width:13px;height:13px;border-radius:50%;background:#fff;top:2px;left:2px;transition:left var(--transition-fast)}.sd-live-toggle.is-on .sd-live-toggle__switch:after{left:15px}.eliminated-view{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:var(--space-sm);min-height:60vh;padding:var(--space-xl) var(--space-md)}.eliminated-orb{width:120px;height:120px;border-radius:var(--radius-full);overflow:hidden;filter:grayscale(1) brightness(.5);display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#2a2540,#16131f);margin-bottom:var(--space-md);position:relative}.eliminated-orb img{width:100%;height:100%;object-fit:cover}.eliminated-skull{font-size:46px;position:absolute}.eliminated-title{font-family:var(--font-display);font-weight:900;font-size:var(--font-size-4xl);color:var(--color-text-white);letter-spacing:-.02em}.eliminated-sub{color:var(--color-text-neon-muted);font-size:var(--font-size-base)}.eliminated-hint{color:var(--color-text-dim);font-size:var(--font-size-sm);margin-top:var(--space-md)}.cut-line{position:relative;height:0;border-top:2px solid var(--color-accent-primary);box-shadow:0 0 12px #ff2d6ab3;margin:var(--space-md) 0}.cut-line__label{position:absolute;top:-9px;left:50%;transform:translate(-50%);background:var(--color-bg-primary);padding:0 10px;font-family:var(--font-body);font-size:9px;font-weight:700;letter-spacing:.15em;color:var(--color-accent-primary)}.player-indicator.is-eliminated,.leaderboard-entry.is-eliminated{opacity:.45}.player-out-badge{font-size:10px;font-weight:700;color:var(--color-text-dim);letter-spacing:.04em}.sd-out-overlay{position:fixed;inset:0;z-index:900;display:none;flex-direction:column;align-items:center;justify-content:center;background:#06060cf5}.sd-out-overlay.show{display:flex;animation:sd-out-in var(--transition-slow) ease-out}.sd-out__word{font-family:var(--font-display);font-weight:900;font-size:clamp(120px,26vw,360px);line-height:.85;color:var(--color-error-neon);text-shadow:0 0 40px rgba(255,0,64,.7)}.sd-out__name{display:flex;align-items:center;gap:14px;margin-top:var(--space-md);font-family:var(--font-display);font-weight:900;font-size:var(--font-size-4xl);color:var(--color-text-white)}.sd-out__skull{font-size:40px}@keyframes sd-out-in{0%{opacity:0;transform:scale(.85)}to{opacity:1;transform:scale(1)}}.sd-final-banner{display:inline-flex;align-items:center;gap:8px;padding:8px 18px;border-radius:var(--radius-full);font-family:var(--font-display);font-weight:900;letter-spacing:.06em;color:var(--color-accent-primary);background:#ff2d6a1f;border:1px solid rgba(255,45,106,.5);box-shadow:0 0 16px #ff2d6a4d}.superlative-card--last_one_standing{box-shadow:0 0 18px #ff2d6a4d;border-color:#ff2d6a66}.sd-last-standing{display:flex;flex-direction:column;align-items:center;gap:var(--space-sm);text-align:center;margin-bottom:var(--space-lg)}.sd-last-standing__trophy{font-size:40px}.sd-last-standing__headline{font-family:var(--font-display);font-weight:900;font-size:var(--font-size-hero);letter-spacing:-.02em;background:linear-gradient(90deg,var(--color-accent-primary),var(--color-accent-secondary));-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;text-shadow:0 0 40px rgba(255,45,106,.5)}.sd-last-standing__winner{font-family:var(--font-body);font-weight:700;font-size:var(--font-size-xl);color:var(--color-text-white)}.sd-last-standing__sub{font-family:var(--font-body);font-weight:500;font-size:var(--font-size-sm);color:var(--color-text-neon-muted)}.sd-out-overlay.show{animation:none}} /*# sourceMappingURL=styles.min.css.map */ diff --git a/custom_components/beatify/www/css/styles.min.css.map b/custom_components/beatify/www/css/styles.min.css.map index aaae4469..0b4a0d97 100644 --- a/custom_components/beatify/www/css/styles.min.css.map +++ b/custom_components/beatify/www/css/styles.min.css.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["styles.css"], - "sourcesContent": ["/* Beatify - Mobile-first styles */\n\n/* ==========================================\n Design System Tokens (Story 9.1)\n ========================================== */\n\n:root {\n /* Color Tokens - Background */\n --color-bg-primary: #0a0a12;\n --color-bg-surface: rgba(255, 255, 255, 0.05);\n --color-bg-light: #f5f5f5;\n --color-bg-white: #ffffff;\n --color-bg-card: #f9fafb;\n --color-bg-card-alt: #f3f4f6;\n\n /* Color Tokens - Accent */\n --color-accent-primary: #ff2d6a;\n --color-accent-secondary: #00f5ff;\n --color-accent-brand: #6366f1;\n --color-accent-brand-hover: #4f46e5;\n --color-accent-blue: #3b82f6;\n --color-accent-blue-hover: #2563eb;\n\n /* Color Tokens - Semantic */\n --color-success: #10b981;\n --color-success-hover: #059669;\n --color-success-light: #d1fae5;\n --color-success-alt: #22c55e;\n --color-success-neon: #39ff14;\n --color-warning: #f59e0b;\n --color-warning-dark: #d97706;\n --color-warning-light: #fef3c7;\n --color-warning-alt: #ff6600;\n --color-error: #ef4444;\n --color-error-dark: #dc2626;\n --color-error-light: #fee2e2;\n --color-error-neon: #ff0040;\n\n /* Purple colors for steal power-up (Story 15.3) */\n --color-purple-primary: #8b5cf6;\n --color-purple-secondary: #7c3aed;\n --color-neon-purple: #9d4edd; /* Analytics accent color */\n\n /* Color Tokens - Badge Backgrounds (Story 14.1) */\n --color-success-bg: rgba(16, 185, 129, 0.15);\n --color-accent-brand-bg: rgba(99, 102, 241, 0.15);\n --color-error-bg: rgba(239, 68, 68, 0.15);\n\n /* Color Tokens - Text */\n --color-text-primary: #1f2937;\n --color-text-secondary: #374151;\n --color-text-muted: #6b7280;\n --color-text-light: #9ca3af;\n --color-text-white: #ffffff;\n --color-text-dark: #1a1a1a;\n --color-text-heading: #444444;\n --color-text-neon-muted: #b3b3c2;\n\n /* Color Tokens - Border */\n --color-border-light: #e5e7eb;\n --color-border-medium: #d1d5db;\n --color-border-dark: #333333;\n --color-border-neon: rgba(255, 255, 255, 0.1);\n\n /* Dark Theme Surface Colors */\n --color-dark-surface: rgba(255, 255, 255, 0.05);\n --color-dark-surface-hover: rgba(255, 255, 255, 0.08);\n --color-dark-card: rgba(255, 255, 255, 0.03);\n --color-surface-dark: #1a1a2e; /* Card background in dark mode */\n\n /* Spacing Tokens */\n --space-xs: 4px;\n --space-sm: 8px;\n --space-md: 16px;\n --space-lg: 24px;\n --space-xl: 32px;\n --space-2xl: 48px;\n\n /* Typography Tokens */\n --font-display: 'Outfit', system-ui, sans-serif;\n --font-body: 'Inter', system-ui, sans-serif;\n --font-system: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif;\n --font-mono: monospace;\n\n --font-size-xs: 10px;\n --font-size-sm: 12px;\n --font-size-base: 14px;\n --font-size-md: 16px;\n --font-size-lg: 18px;\n --font-size-xl: 20px;\n --font-size-2xl: 24px;\n --font-size-3xl: 28px;\n --font-size-4xl: 32px;\n --font-size-year: 56px;\n --font-size-timer: 64px;\n --font-size-hero: 72px;\n\n --font-weight-normal: 400;\n --font-weight-medium: 500;\n --font-weight-semibold: 600;\n --font-weight-bold: 700;\n --font-weight-extrabold: 800;\n\n /* Effect Tokens - Glow */\n --glow-primary: 0 0 20px var(--color-accent-primary);\n --glow-secondary: 0 0 20px var(--color-accent-secondary);\n --glow-success: 0 0 20px var(--color-success-neon);\n --glow-warning: 0 0 20px var(--color-warning);\n --glow-error: 0 0 20px var(--color-error);\n\n /* Effect Tokens - Shadow */\n --shadow-sm: 0 2px 4px rgba(0, 0, 0, 0.1);\n --shadow-md: 0 2px 8px rgba(0, 0, 0, 0.1);\n --shadow-lg: 0 4px 16px rgba(0, 0, 0, 0.1);\n --shadow-xl: 0 8px 32px rgba(0, 0, 0, 0.15);\n\n /* Border Radius Tokens */\n --radius-sm: 4px;\n --radius-md: 8px;\n --radius-lg: 12px;\n --radius-xl: 16px;\n --radius-2xl: 20px;\n --radius-full: 9999px;\n\n /* Transition Tokens */\n --transition-fast: 150ms ease;\n --transition-normal: 300ms ease;\n --transition-slow: 500ms ease;\n\n /* Z-Index Tokens */\n --z-control-bar: 100;\n --z-reaction-bar: 101; /* Story 18.9: Above control bar */\n --z-modal: 1000;\n --z-overlay: 1100;\n --z-toast: 1200; /* #1663 item 1: neon top-toast \u2014 above overlays/modals */\n}\n\n/* ==========================================\n Base Styles\n ========================================== */\n\n/* Base reset */\n* {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n}\n\nbody {\n font-family: var(--font-system);\n background: var(--color-bg-light);\n color: var(--color-text-secondary);\n line-height: 1.5;\n padding: var(--space-sm);\n min-height: 100vh;\n /* #865: lock iOS overscroll-bounce so the admin lobby (and any other\n short view) doesn't drag freely in all directions when the user\n touches the background. */\n overscroll-behavior: none;\n}\n\n/* ==========================================\n Brand Identity (Story 9.8)\n ========================================== */\n\n/* Wordmark styles */\n.wordmark {\n font-family: 'Outfit', var(--font-system);\n font-weight: 900;\n font-size: var(--font-size-hero);\n letter-spacing: -0.02em;\n line-height: 1;\n}\n\n.wordmark-beat {\n color: var(--color-text-white);\n}\n\n/* Light theme wordmark (admin page) */\nbody:not(.theme-dark) .wordmark-beat {\n color: var(--color-text-primary);\n}\n\n.wordmark-gradient {\n background: linear-gradient(90deg, var(--color-accent-primary), var(--color-accent-secondary));\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n background-clip: text;\n color: transparent;\n}\n\n.wordmark-hero {\n text-shadow: 0 0 40px rgba(255, 45, 106, 0.5);\n}\n\n/* Logo pulse animation for loading state */\n.logo-loading {\n animation: logo-pulse 2s ease-in-out infinite;\n}\n\n@keyframes logo-pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.7; }\n}\n\n/* Reduced motion support for logo */\n@media (prefers-reduced-motion: reduce) {\n .logo-loading {\n animation: none;\n }\n}\n\n/* ============================================================\n Cold-start vinyl loader (#1287)\n Animated vinyl disc + hype copy bridging the ~10-15s\n Music-Assistant speaker-connect before round 1. Shared by\n player.html (#starting-view) and dashboard.html\n (#dashboard-starting).\n ============================================================ */\n/* Outer: full-height column box that centers its single inner row both axes.\n Mirrors the proven .dashboard-centered pattern (no explicit width \u2192 stretches\n via the parent's align-items:stretch) so the group is always viewport-centered\n on the TV/dashboard and the phone. */\n.vinyl-starting {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n padding: 24px;\n box-sizing: border-box;\n}\n\n/* Inner: the disc-beside-copy row. Caps its own width and centers itself; wraps\n to stacked (disc over copy) on narrow phones. */\n.vinyl-row {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-wrap: wrap;\n gap: clamp(20px, 5vw, 56px);\n max-width: 100%;\n}\n\n.vinyl-loader {\n flex: 0 0 auto;\n width: clamp(130px, 28vw, 260px);\n height: clamp(130px, 28vw, 260px);\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 50%;\n /* Soft pink/cyan glow halo behind the disc */\n background: radial-gradient(circle at center,\n rgba(255, 45, 106, 0.18) 0%,\n rgba(99, 102, 241, 0.10) 45%,\n transparent 70%);\n}\n\n.vinyl-disc {\n position: relative;\n width: 78%;\n height: 78%;\n border-radius: 50%;\n /* Conic gradient = the spinning record */\n background: conic-gradient(from 0deg,\n var(--color-accent-primary),\n var(--color-accent-brand),\n var(--color-accent-secondary),\n var(--color-accent-brand),\n var(--color-accent-primary));\n box-shadow:\n 0 0 40px rgba(255, 45, 106, 0.35),\n 0 0 80px rgba(0, 245, 255, 0.18),\n inset 0 0 30px rgba(0, 0, 0, 0.45);\n animation: vinyl-spin 3s linear infinite;\n}\n\n.vinyl-ring {\n position: absolute;\n top: 18%;\n left: 18%;\n width: 64%;\n height: 64%;\n border-radius: 50%;\n border: 1.5px dashed rgba(255, 255, 255, 0.25);\n}\n\n.vinyl-hole {\n position: absolute;\n top: 50%;\n left: 50%;\n width: 14%;\n height: 14%;\n border-radius: 50%;\n background: var(--color-bg-primary);\n transform: translate(-50%, -50%);\n box-shadow: 0 0 0 4px rgba(0, 0, 0, 0.4);\n}\n\n.vinyl-copy {\n /* min-width:0 + width:min(100%,460px) keeps the copy inside its flex line\n on every surface: beside the disc on landscape (TV/dashboard) and on its\n own line when wrapped on a narrow phone \u2014 the text re-wraps, it never\n overflows the viewport. */\n flex: 1 1 280px;\n min-width: 0;\n width: min(100%, 460px);\n max-width: 460px;\n text-align: left;\n}\n\n.vinyl-copy .vinyl-headline,\n.vinyl-copy .vinyl-sub,\n.vinyl-copy .wordmark-hero {\n overflow-wrap: break-word;\n}\n\n.vinyl-copy .wordmark-hero {\n font-size: clamp(2rem, 5vw, 3.25rem);\n margin: 0 0 0.5em;\n}\n\n.vinyl-headline {\n font-size: clamp(1.5rem, 4vw, 2.5rem);\n font-weight: 800;\n color: var(--color-text-white);\n margin: 0 0 0.4em;\n}\n\n.vinyl-sub {\n font-size: clamp(0.95rem, 2.2vw, 1.2rem);\n line-height: 1.5;\n color: var(--color-text-muted);\n margin: 0 0 1.2em;\n}\n\n.vinyl-dots {\n display: flex;\n gap: 12px;\n}\n\n.vinyl-dots span {\n width: 12px;\n height: 12px;\n border-radius: 50%;\n background: var(--color-accent-primary);\n opacity: 0.3;\n animation: vinyl-dot-pulse 1.4s ease-in-out infinite;\n}\n\n.vinyl-dots span:nth-child(2) {\n animation-delay: 0.2s;\n}\n\n.vinyl-dots span:nth-child(3) {\n animation-delay: 0.4s;\n}\n\n@keyframes vinyl-spin {\n to { transform: rotate(360deg); }\n}\n\n@keyframes vinyl-dot-pulse {\n 0%, 100% { opacity: 0.3; transform: scale(1); }\n 40% { opacity: 1; transform: scale(1.25); }\n}\n\n/* Narrow / portrait (phone player): the row wraps to stacked, so center the\n copy under the disc and center the pulse dots \u2014 left-alignment only reads well\n in the landscape side-by-side layout. */\n@media (max-width: 640px) {\n .vinyl-copy { text-align: center; }\n .vinyl-dots { justify-content: center; }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .vinyl-disc { animation: none; }\n .vinyl-dots span { animation: none; opacity: 0.7; }\n}\n\n/* Header */\nheader {\n margin-bottom: var(--space-lg);\n}\n\nheader h1 {\n font-size: var(--font-size-2xl);\n font-weight: var(--font-weight-semibold);\n color: var(--color-text-dark);\n}\n\n/* Admin Header with Analytics Icon (Story 19.13) */\n.admin-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--space-md, 16px);\n}\n\n.admin-header h1 {\n margin: 0;\n}\n\n/* Player Header (centered, no analytics icon) */\n.player-header {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--space-md) var(--space-md) 0;\n}\n\n.player-header h1 {\n margin: 0;\n}\n\n/* Admin Main Content - Centered Layout (Story 19.13) */\n/* Scoped to admin-content to avoid affecting dashboard */\nbody.theme-dark main.admin-content {\n max-width: 800px;\n margin: 0 auto;\n padding: var(--space-md, 16px);\n}\n\n/* Analytics Icon Link (Story 19.13) */\n.analytics-icon-link {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 44px;\n height: 44px;\n border-radius: 50%;\n text-decoration: none;\n font-size: 1.5rem;\n transition: background-color 0.2s ease, transform 0.2s ease;\n}\n\nbody.theme-dark .analytics-icon-link {\n background: rgba(0, 245, 255, 0.1);\n}\n\nbody.theme-dark .analytics-icon-link:hover,\nbody.theme-dark .analytics-icon-link:focus {\n background: rgba(0, 245, 255, 0.2);\n transform: scale(1.1);\n outline: none;\n}\n\n/* Admin Header Actions wrapper (#226) */\n.admin-header-actions {\n display: flex;\n align-items: center;\n gap: var(--space-xs, 8px);\n}\n\n/* PWA Install Button (#226) */\n.pwa-install-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 44px;\n height: 44px;\n border-radius: 50%;\n border: none;\n background: rgba(0, 245, 255, 0.1);\n font-size: 1.5rem;\n cursor: pointer;\n transition: background-color 0.2s ease, transform 0.2s ease;\n padding: 0;\n}\n\n.pwa-install-btn:hover,\n.pwa-install-btn:focus {\n background: rgba(0, 245, 255, 0.2);\n transform: scale(1.1);\n outline: none;\n}\n\n/* Reset button (#777 follow-up \u2014 emergency escape hatch).\n Same 44px icon-button shape as the analytics + PWA install buttons,\n but neon-pink to signal \"destructive, last resort\". Stays subtle at\n rest so it doesn't read as a primary action. */\n.reset-icon-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 44px;\n height: 44px;\n border-radius: 50%;\n border: none;\n background: rgba(255, 45, 106, 0.1);\n color: var(--color-text-white);\n font-size: 1.5rem;\n cursor: pointer;\n padding: 0;\n transition: background-color 0.2s ease, transform 0.2s ease;\n}\n.reset-icon-btn:hover,\n.reset-icon-btn:focus {\n background: rgba(255, 45, 106, 0.25);\n transform: scale(1.1);\n outline: none;\n}\n\n/* PWA iOS Hint Modal (#226) */\n.pwa-ios-hint {\n position: fixed;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 1000;\n display: flex;\n justify-content: center;\n padding: var(--space-md, 16px);\n animation: slideUp 0.3s ease;\n}\n\n.pwa-ios-hint.hidden {\n display: none;\n}\n\n.pwa-ios-hint-content {\n position: relative;\n background: var(--color-bg-elevated, #2a2a3e);\n border-radius: var(--radius-lg, 12px);\n padding: var(--space-md, 16px) var(--space-lg, 24px);\n color: var(--color-text, #fff);\n text-align: center;\n max-width: 340px;\n box-shadow: 0 -2px 20px rgba(0, 0, 0, 0.3);\n}\n\n.pwa-ios-hint-close {\n position: absolute;\n top: 8px;\n right: 12px;\n background: none;\n border: none;\n color: var(--color-text, #fff);\n font-size: 1.4rem;\n cursor: pointer;\n opacity: 0.6;\n}\n\n.pwa-ios-hint-close:hover {\n opacity: 1;\n}\n\n.pwa-ios-share-icon {\n font-size: 1.2rem;\n}\n\n@keyframes slideUp {\n from { transform: translateY(100%); opacity: 0; }\n to { transform: translateY(0); opacity: 1; }\n}\n\n/* Sections */\n.status-section,\n.card-section {\n background: var(--color-bg-white);\n border-radius: var(--radius-lg);\n padding: var(--space-sm) var(--space-md);\n margin-bottom: var(--space-md);\n box-shadow: var(--shadow-sm);\n border: 1px solid transparent;\n transition: transform 0.2s ease, box-shadow 0.2s ease, border-color 0.2s ease;\n}\n\n.card-section:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n}\n\n/* Section Headers with Icons (Story 19.13) */\n.card-section .section-header {\n display: flex;\n align-items: center;\n gap: var(--space-sm, 8px);\n margin-bottom: var(--space-sm);\n font-size: var(--font-size-md);\n font-weight: var(--font-weight-semibold);\n color: var(--color-text-heading);\n}\n\n.card-section .section-icon {\n font-size: 1.25rem;\n}\n\n.status-section h2,\n.card-section h2:not(.section-header) {\n font-size: var(--font-size-md);\n font-weight: var(--font-weight-semibold);\n margin-bottom: var(--space-sm);\n color: var(--color-text-heading);\n}\n\n/* Status indicators */\n.status-connected {\n color: var(--color-success-alt);\n font-weight: var(--font-weight-medium);\n}\n\n.status-error {\n color: var(--color-error);\n font-weight: var(--font-weight-medium);\n}\n\n.status-warning {\n color: var(--color-warning);\n font-weight: var(--font-weight-medium);\n}\n\n/* List items */\n.list-item {\n padding: var(--space-sm);\n border-bottom: 1px solid var(--color-border-light);\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: var(--space-sm);\n transition: background-color 0.2s ease;\n}\n\n.list-item:last-child {\n border-bottom: none;\n}\n\n/* Dark mode list items (Story 19.13) */\nbody.theme-dark .list-item {\n border-bottom-color: var(--surface-border, #333);\n}\n\nbody.theme-dark .list-item:hover {\n background: rgba(157, 78, 221, 0.1);\n}\n\n.list-item .name {\n font-weight: var(--font-weight-medium);\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.list-item .meta {\n color: var(--color-text-muted);\n font-size: var(--font-size-base);\n flex-shrink: 0;\n}\n\n.list-item.is-invalid {\n background: var(--color-error-light);\n border-left: 3px solid var(--color-error);\n}\n\n/* Disabled playlist (no songs for selected provider) */\n.playlist-item.is-disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.playlist-item.is-disabled .checkbox-label {\n cursor: not-allowed;\n}\n\n.playlist-item.is-disabled .playlist-checkbox {\n cursor: not-allowed;\n}\n\n/* Playlist selection (Story 2.1) */\n.playlist-item.is-selectable {\n cursor: pointer;\n}\n\n/* Selected state for both playlists and media players */\n.playlist-item.is-selected,\n.media-player-item.is-selected {\n background: #eff6ff;\n border-left: 3px solid var(--color-accent-blue);\n}\n\n/* Dark mode selected state - neon styling (Story 19.13) */\nbody.theme-dark .playlist-item.is-selected,\nbody.theme-dark .media-player-item.is-selected {\n background: rgba(0, 245, 255, 0.1);\n border-left: 3px solid var(--color-accent-secondary);\n}\n\n/* Seasonal playlist suggestion chip (#1539, design option 2) \u2014\n highlighted first tile inside the playlist list. */\n.seasonal-suggestion {\n position: relative;\n margin-bottom: 12px;\n padding: 14px 16px;\n border-radius: 14px;\n background:\n linear-gradient(135deg, rgba(255, 45, 106, 0.14) 0%, rgba(99, 102, 241, 0.14) 100%),\n #12121c;\n border: 1px solid rgba(255, 45, 106, 0.45);\n box-shadow: 0 0 0 1px rgba(0, 245, 255, 0.08), 0 6px 18px rgba(0, 0, 0, 0.35);\n}\n\n.seasonal-suggestion__badge {\n display: inline-block;\n font-size: 11px;\n font-weight: 700;\n letter-spacing: 0.06em;\n text-transform: uppercase;\n color: var(--color-accent-secondary, #00f5ff);\n background: rgba(0, 245, 255, 0.1);\n border: 1px solid rgba(0, 245, 255, 0.3);\n border-radius: 999px;\n padding: 3px 10px;\n margin-bottom: 10px;\n}\n\n.seasonal-suggestion__title {\n font-size: 16px;\n font-weight: 700;\n color: #fff;\n margin-bottom: 4px;\n}\n\n.seasonal-suggestion__reason {\n font-size: 13px;\n line-height: 1.4;\n color: rgba(255, 255, 255, 0.72);\n margin-bottom: 12px;\n}\n\n.seasonal-suggestion__add {\n /* inherits .btn .btn-primary; just ensure it sits inline-block at the bottom */\n display: inline-block;\n}\n\n.seasonal-suggestion__dismiss {\n position: absolute;\n top: 8px;\n right: 10px;\n width: 28px;\n height: 28px;\n line-height: 1;\n font-size: 20px;\n color: rgba(255, 255, 255, 0.6);\n background: transparent;\n border: none;\n border-radius: 8px;\n cursor: pointer;\n}\n\n/* #1759: 44px tap target (visual stays 28px) so dismissing the banner doesn't\n risk hitting the banner CTA underneath. */\n.seasonal-suggestion__dismiss::after {\n content: '';\n position: absolute;\n top: 50%;\n left: 50%;\n width: 44px;\n height: 44px;\n transform: translate(-50%, -50%);\n}\n\n.seasonal-suggestion__dismiss:hover {\n color: #fff;\n background: rgba(255, 255, 255, 0.08);\n}\n\n/* Light theme fallback (admin defaults to dark, but keep it legible if not). */\nbody:not(.theme-dark) .seasonal-suggestion {\n background:\n linear-gradient(135deg, rgba(255, 45, 106, 0.08) 0%, rgba(99, 102, 241, 0.08) 100%),\n #fff;\n border: 1px solid rgba(255, 45, 106, 0.35);\n box-shadow: 0 4px 14px rgba(0, 0, 0, 0.08);\n}\n\nbody:not(.theme-dark) .seasonal-suggestion__title {\n color: #111;\n}\n\nbody:not(.theme-dark) .seasonal-suggestion__reason {\n color: #555;\n}\n\nbody:not(.theme-dark) .seasonal-suggestion__dismiss {\n color: #888;\n}\n\n/* Hide native checkbox, use row selection state */\n.playlist-checkbox {\n position: absolute;\n opacity: 0;\n width: 0;\n height: 0;\n pointer-events: none;\n}\n\n.checkbox-label {\n display: flex;\n align-items: center;\n flex: 1;\n min-width: 0;\n cursor: pointer;\n padding-left: var(--space-xs);\n}\n\n.playlist-name {\n font-weight: var(--font-weight-medium);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.selection-summary {\n padding: var(--space-sm) var(--space-md);\n background: #f0fdf4;\n border-radius: var(--radius-md);\n margin-top: var(--space-sm);\n font-weight: var(--font-weight-medium);\n color: #166534;\n}\n\n/* Selection summary counts - neon styling (Story 19.13) */\n.selection-summary #selected-count,\n.selection-summary #total-songs {\n font-family: 'Outfit', sans-serif;\n font-weight: 700;\n}\n\n/* Dark mode selection summary */\nbody.theme-dark .selection-summary {\n background: rgba(0, 245, 255, 0.1);\n border: 1px solid var(--color-accent-secondary);\n color: var(--color-text-white);\n}\n\nbody.theme-dark .selection-summary #selected-count,\nbody.theme-dark .selection-summary #total-songs {\n color: var(--color-accent-secondary);\n font-size: 1.1em;\n}\n\n/* Media player selection (Story 2.2) */\n.media-player-item.is-selectable {\n cursor: pointer;\n}\n\n/* Hide native radio, use row selection state */\n.media-player-radio {\n position: absolute;\n opacity: 0;\n width: 0;\n height: 0;\n pointer-events: none;\n}\n\n.radio-label {\n display: flex;\n align-items: center;\n flex: 1;\n min-width: 0;\n cursor: pointer;\n padding-left: var(--space-xs);\n}\n\n.player-name {\n font-weight: var(--font-weight-medium);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n/* State indicators */\n.state-dot {\n display: inline-block;\n width: var(--space-sm);\n height: var(--space-sm);\n border-radius: 50%;\n margin-right: 6px;\n}\n\n.state-dot.state-playing {\n background: var(--color-success-alt);\n}\n\n.state-dot.state-idle,\n.state-dot.state-paused,\n.state-dot.state-off {\n background: var(--color-text-light);\n}\n\n/* Buttons - Touch-friendly minimum 44x44px */\nbutton,\n.btn {\n min-width: 44px;\n min-height: 44px;\n padding: var(--space-sm) var(--space-lg);\n font-size: var(--font-size-md);\n font-weight: var(--font-weight-medium);\n border: none;\n border-radius: var(--radius-md);\n cursor: pointer;\n transition: background-color var(--transition-fast), opacity var(--transition-fast);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--space-sm);\n touch-action: manipulation;\n}\n\n.form-input {\n width: 100%;\n padding: var(--space-sm) var(--space-md);\n font-size: var(--font-size-sm);\n border: 1px solid var(--color-border-subtle);\n border-radius: var(--radius-md);\n background: var(--color-bg-secondary);\n color: var(--color-text-primary);\n margin-bottom: var(--space-sm);\n box-sizing: border-box;\n}\n\nbody.theme-dark .form-input {\n color: #e2e8f0;\n background: rgba(255, 255, 255, 0.1);\n border-color: rgba(255, 255, 255, 0.15);\n}\n\n.btn-primary {\n background: var(--color-accent-primary);\n color: #fff;\n}\n\n.btn-primary:hover {\n background: #e0245c;\n}\n\n.btn-primary:disabled {\n background: var(--color-text-light);\n cursor: not-allowed;\n opacity: 0.55;\n}\n\nbody.theme-dark .btn-primary {\n color: #fff;\n}\n\n.btn-secondary {\n background: var(--color-border-light);\n color: var(--color-text-secondary);\n}\n\n.btn-secondary:hover {\n background: var(--color-border-medium);\n}\n\n.btn-ghost {\n background: transparent;\n color: var(--color-accent-primary);\n border: 1.5px solid var(--color-accent-primary);\n}\n\n.btn-ghost:hover {\n background: rgba(255, 45, 106, 0.08);\n}\n\n.btn-ghost:disabled {\n opacity: 0.45;\n cursor: not-allowed;\n}\n\n.btn-outline {\n background: transparent;\n color: var(--color-text-secondary);\n border: 1.5px solid var(--color-border-medium);\n}\n\n.btn-outline:hover {\n background: var(--color-border-light);\n border-color: var(--color-text-secondary);\n}\n\n.btn-outline:disabled {\n opacity: 0.45;\n cursor: not-allowed;\n}\n\n.btn-danger {\n background: #dc2626;\n color: #fff;\n}\n\n.btn-danger:hover {\n background: #b91c1c;\n}\n\n/* Links */\na {\n color: var(--color-accent-blue);\n text-decoration: none;\n}\n\na:hover {\n text-decoration: underline;\n}\n\n/* Empty state */\n.empty-state {\n text-align: center;\n padding: var(--space-lg);\n color: var(--color-text-muted);\n}\n\n.empty-state p {\n margin-bottom: var(--space-sm);\n}\n\n/* Footer */\nfooter {\n margin-top: var(--space-lg);\n text-align: center;\n color: var(--color-text-light);\n font-size: var(--font-size-sm);\n}\n\n/* Utility classes */\n.hidden {\n display: none !important;\n}\n\n/* ==========================================\n Neon Party Mode Theme (Story 9.2)\n ========================================== */\n\n/* Dark theme body - applied to player page */\nbody.theme-dark {\n background: var(--color-bg-primary);\n color: var(--color-text-white);\n}\n\nbody.theme-dark .player-container {\n background: var(--color-bg-primary);\n}\n\n/* Admin page cards in dark mode - neon styling (Story 19.13) */\nbody.theme-dark .card-section {\n background: var(--color-surface-dark);\n border: 1px solid var(--color-border-neon);\n color: var(--color-text-white);\n}\n\n/* Consistent spacing for admin content sections */\n.admin-content .card-section {\n margin-bottom: var(--space-md);\n}\n\nbody.theme-dark .card-section:hover {\n box-shadow: 0 4px 20px rgba(157, 78, 221, 0.3);\n}\n\nbody.theme-dark .card-section h2,\nbody.theme-dark .card-section .section-header {\n color: var(--color-text-white);\n}\n\nbody.theme-dark .card-section p,\nbody.theme-dark .card-section .name,\nbody.theme-dark .card-section .player-name,\nbody.theme-dark .card-section .playlist-name,\nbody.theme-dark .card-section .list-item,\nbody.theme-dark .card-section .radio-label,\nbody.theme-dark .card-section .checkbox-label,\nbody.theme-dark .card-section strong,\nbody.theme-dark .card-section span {\n color: var(--color-text-white);\n}\n\nbody.theme-dark .card-section .meta {\n color: var(--color-text-neon-muted);\n}\n\nbody.theme-dark .game-info {\n background: rgba(255, 255, 255, 0.05);\n border: 1px solid var(--color-neon-purple);\n border-radius: var(--radius-md);\n color: var(--color-text-white);\n}\n\nbody.theme-dark .game-info p,\nbody.theme-dark .game-info strong,\nbody.theme-dark .game-info span {\n color: var(--color-text-white);\n}\n\n/* Ensure button text stays white in dark mode (override card-section span rule) */\nbody.theme-dark .btn-primary span,\nbody.theme-dark .btn-secondary span {\n color: inherit;\n}\n\n/* Badge colors are explicitly set per badge type - no dark mode override needed */\n\n/* Inactive selector buttons need dark text on light backgrounds (Story 19.13) */\nbody.theme-dark .lang-btn:not(.lang-btn--active),\nbody.theme-dark .timer-btn:not(.timer-btn--active),\nbody.theme-dark .difficulty-btn:not(.difficulty-btn--active) {\n color: var(--color-text-primary, #1a1a2e);\n}\n\nbody.theme-dark .lang-btn:not(.lang-btn--active) span,\nbody.theme-dark .timer-btn:not(.timer-btn--active) span,\nbody.theme-dark .difficulty-btn:not(.difficulty-btn--active) span {\n color: var(--color-text-primary, #1a1a2e);\n}\n\n/* Language Selector (Story 12.4) */\n.language-selector {\n display: flex;\n justify-content: center;\n gap: var(--space-sm);\n}\n\n.lang-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--space-xs);\n padding: var(--space-sm) var(--space-lg);\n border: 2px solid var(--color-border-medium);\n border-radius: var(--radius-md);\n background: var(--color-bg-white);\n color: var(--color-text-primary);\n font-size: var(--font-size-base);\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.lang-btn:hover {\n border-color: var(--color-accent-brand);\n background: var(--color-bg-card-alt);\n}\n\n.lang-btn--active {\n border-color: var(--color-accent-brand);\n background: var(--color-accent-brand);\n color: var(--color-text-white);\n}\n\n.lang-btn--active:hover {\n background: var(--color-accent-brand-hover);\n}\n\n.lang-flag {\n font-size: 1.25em;\n}\n\n.lang-name {\n font-weight: 600;\n}\n\n/* Timer Selector (Story 13.1) */\n.timer-selector {\n display: flex;\n justify-content: center;\n gap: var(--space-sm);\n}\n\n.timer-btn {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--space-2xs);\n padding: var(--space-sm) var(--space-md);\n min-width: 90px;\n border: 2px solid var(--color-border-neon);\n border-radius: var(--radius-md);\n background: var(--color-bg-card);\n color: var(--color-text-secondary);\n font-family: inherit;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.timer-btn:hover {\n border-color: var(--color-accent-brand);\n background: var(--color-bg-card-alt);\n}\n\n.timer-btn:focus {\n outline: none;\n border-color: var(--color-accent-brand);\n box-shadow: 0 0 0 3px rgba(30, 215, 96, 0.3);\n}\n\n.timer-btn:focus-visible {\n outline: 2px solid var(--color-accent-brand);\n outline-offset: 2px;\n}\n\n.timer-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n border-color: var(--color-border-neon);\n background: var(--color-bg-card);\n}\n\n.timer-btn:disabled:hover {\n border-color: var(--color-border-neon);\n background: var(--color-bg-card);\n}\n\n.timer-btn--active {\n border-color: var(--color-accent-brand);\n background: var(--color-accent-brand);\n color: var(--color-text-white);\n}\n\n.timer-btn--active:hover {\n background: var(--color-accent-brand-hover);\n}\n\n.timer-icon {\n font-size: 1.5em;\n}\n\n.timer-label {\n font-weight: 600;\n font-size: 0.875rem;\n}\n\n.timer-value {\n font-size: 0.75rem;\n opacity: 0.8;\n}\n\n.timer-btn--active .timer-value {\n opacity: 1;\n}\n\n/* Difficulty Selector (Story 14.1) */\n.difficulty-selector {\n display: flex;\n justify-content: center;\n gap: var(--space-sm);\n}\n\n.difficulty-btn {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--space-2xs);\n padding: var(--space-sm) var(--space-md);\n min-width: 90px;\n border: 2px solid var(--color-border-light);\n border-radius: var(--radius-md);\n background: var(--color-bg-card);\n color: var(--color-text-secondary);\n font-family: inherit;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.difficulty-btn:hover {\n border-color: var(--color-accent-brand);\n background: var(--color-bg-card-alt);\n}\n\n.difficulty-btn:focus {\n outline: none;\n border-color: var(--color-accent-brand);\n box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.3);\n}\n\n.difficulty-btn:focus-visible {\n outline: 2px solid var(--color-accent-brand);\n outline-offset: 2px;\n}\n\n.difficulty-btn--active {\n border-color: var(--color-accent-brand);\n background: var(--color-accent-brand);\n color: var(--color-text-white);\n}\n\n.difficulty-btn--active:hover {\n background: var(--color-accent-brand-hover);\n}\n\n.difficulty-icon {\n font-size: 1.5em;\n}\n\n.difficulty-label {\n font-weight: 600;\n font-size: 0.875rem;\n}\n\n.difficulty-description {\n text-align: center;\n font-size: 0.8125rem;\n color: var(--color-text-muted);\n margin-top: var(--space-sm);\n line-height: 1.5;\n max-width: 400px;\n margin-left: auto;\n margin-right: auto;\n}\n\n/* Artist Challenge Toggle (Story 20.7) */\n.toggle-option {\n display: flex;\n align-items: center;\n gap: var(--space-md);\n cursor: pointer;\n padding: var(--space-sm) 0;\n}\n\n.toggle-option input[type=\"checkbox\"] {\n position: absolute;\n opacity: 0;\n width: 0;\n height: 0;\n}\n\n.toggle-switch {\n position: relative;\n width: 48px;\n height: 26px;\n background: var(--color-border);\n border-radius: 13px;\n transition: background 0.2s ease;\n flex-shrink: 0;\n}\n\n.toggle-switch::after {\n content: '';\n position: absolute;\n top: 3px;\n left: 3px;\n width: 20px;\n height: 20px;\n background: white;\n border-radius: 50%;\n transition: transform 0.2s ease;\n}\n\n.toggle-option input:checked + .toggle-switch {\n background: var(--color-success);\n}\n\n.toggle-option input:checked + .toggle-switch::after {\n transform: translateX(22px);\n}\n\n.toggle-option input:focus-visible + .toggle-switch {\n outline: 2px solid var(--color-accent-primary);\n outline-offset: 2px;\n}\n\n.toggle-label {\n font-size: var(--font-size-md);\n font-weight: 500;\n color: var(--color-text);\n}\n\n.option-description {\n font-size: var(--font-size-sm);\n color: var(--color-text-muted);\n margin: var(--space-xs) 0 0 0;\n padding-left: calc(48px + var(--space-md));\n}\n\n/* Dark mode toggle */\nbody.theme-dark .toggle-switch {\n background: var(--color-dark-border, #333);\n}\n\n/* Provider Selector (Story 17.2) */\n.provider-selector {\n display: flex;\n justify-content: center;\n gap: var(--space-sm);\n}\n\n.provider-btn {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--space-2xs);\n padding: var(--space-sm) var(--space-md);\n min-width: 100px;\n border: 2px solid var(--color-border-light);\n border-radius: var(--radius-md);\n background: var(--color-bg-card);\n color: var(--color-text-secondary);\n font-family: inherit;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.provider-btn:hover:not(.provider-btn--disabled) {\n border-color: var(--color-accent-brand);\n background: var(--color-bg-card-alt);\n}\n\n.provider-btn:focus {\n outline: none;\n border-color: var(--color-accent-brand);\n box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.3);\n}\n\n.provider-btn:focus-visible {\n outline: 2px solid var(--color-accent-brand);\n outline-offset: 2px;\n}\n\n.provider-btn--active {\n border-color: var(--color-accent-brand);\n background: var(--color-accent-brand);\n color: var(--color-text-white);\n}\n\n.provider-btn--active:hover {\n background: var(--color-accent-brand-hover);\n}\n\n.provider-icon {\n font-size: 1.5em;\n}\n\n.provider-label {\n font-weight: 600;\n font-size: 0.875rem;\n}\n\n/* Playlist coverage warning (Story 17.2) */\n.playlist-coverage {\n font-size: 0.75rem;\n color: var(--color-text-muted);\n}\n\n.playlist-coverage--warning {\n color: var(--color-warning);\n}\n\n.playlist-coverage--none {\n color: var(--color-error);\n}\n\n/* Playlist Filter Bar (Issue #70) */\n.playlist-filter-bar {\n display: flex;\n flex-direction: column;\n gap: 0.75rem;\n padding: 0.75rem 0;\n margin-bottom: 0.5rem;\n border-bottom: 1px solid var(--color-border);\n}\n\n/* Dropdown filters container */\n.filter-dropdowns {\n display: flex;\n flex-wrap: wrap;\n gap: 0.5rem;\n}\n\n.filter-dropdown {\n padding: 0.5rem 2rem 0.5rem 0.75rem;\n background: var(--color-surface);\n border: 1px solid var(--color-border);\n border-radius: var(--radius-md, 6px);\n font-size: 0.875rem;\n font-weight: 500;\n color: var(--color-text-primary, #333);\n cursor: pointer;\n transition: all 0.15s ease;\n appearance: none;\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23666' d='M2 4l4 4 4-4'/%3E%3C/svg%3E\");\n background-repeat: no-repeat;\n background-position: right 0.75rem center;\n min-width: 120px;\n}\n\n.filter-dropdown:hover {\n border-color: var(--color-primary, #6c5ce7);\n}\n\n.filter-dropdown:focus {\n outline: none;\n border-color: var(--color-primary, #6c5ce7);\n box-shadow: 0 0 0 2px rgba(108, 92, 231, 0.2);\n}\n\n/* Dropdown with active selection */\n.filter-dropdown:not([value=\"\"]):has(option:checked:not([value=\"\"])) {\n border-color: var(--color-primary, #6c5ce7);\n background-color: rgba(108, 92, 231, 0.08);\n}\n\n/* Filter summary */\n.filter-summary {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n font-size: 0.8125rem;\n}\n\n.filter-summary-text {\n color: var(--color-text-secondary, #666);\n}\n\n.filter-clear {\n padding: 0.25rem 0.5rem;\n background: transparent;\n border: 1px solid var(--color-border);\n border-radius: var(--radius-sm, 4px);\n font-size: 0.75rem;\n color: var(--color-text-secondary, #666);\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.filter-clear:hover {\n background: var(--color-error, #e74c3c);\n border-color: var(--color-error, #e74c3c);\n color: white;\n}\n\n/* Dark theme */\nbody.theme-dark .filter-dropdown {\n background-color: rgba(255, 255, 255, 0.08);\n border-color: rgba(255, 255, 255, 0.15);\n color: rgba(255, 255, 255, 0.85);\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23999' d='M2 4l4 4 4-4'/%3E%3C/svg%3E\");\n}\n\nbody.theme-dark .filter-dropdown:hover,\nbody.theme-dark .filter-dropdown:focus {\n border-color: rgba(108, 92, 231, 0.6);\n}\n\nbody.theme-dark .filter-summary-text {\n color: rgba(255, 255, 255, 0.6);\n}\n\nbody.theme-dark .filter-clear {\n border-color: rgba(255, 255, 255, 0.2);\n color: rgba(255, 255, 255, 0.6);\n}\n\n/* Legacy filter-tag styles (kept for backwards compatibility) */\n.filter-tag {\n display: inline-flex;\n align-items: center;\n gap: 0.25rem;\n padding: 0.4375rem 0.875rem;\n background: var(--color-surface);\n border: 1px solid var(--color-border);\n border-radius: var(--radius-full);\n font-size: 0.8125rem;\n font-weight: 600;\n color: var(--color-text-primary, #333);\n cursor: pointer;\n transition: all 0.15s ease;\n white-space: nowrap;\n}\n\n.filter-tag .filter-count {\n font-size: 0.6875rem;\n opacity: 0.8;\n}\n\n/* Playlist Tags Display */\n.playlist-tags {\n display: flex;\n flex-wrap: wrap;\n gap: 0.25rem;\n margin-top: 0.375rem;\n}\n\n.playlist-tag {\n display: inline-block;\n padding: 0.1875rem 0.5rem;\n background: var(--color-primary-light, #e8e4f8);\n border: 1px solid var(--color-primary-border, #c9bff2);\n border-radius: var(--radius-full);\n font-size: 0.6875rem;\n font-weight: 500;\n color: var(--color-primary-dark, #5b4cad);\n max-width: 6rem;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.playlist-tag--more {\n background: transparent;\n border-color: var(--color-primary-border, #c9bff2);\n color: var(--color-text-secondary, #666);\n font-style: italic;\n}\n\nbody.theme-dark .playlist-tag {\n background: rgba(108, 92, 231, 0.2);\n border-color: rgba(108, 92, 231, 0.4);\n color: #b8acf6;\n}\n\nbody.theme-dark .playlist-tag--more {\n background: transparent;\n color: rgba(255, 255, 255, 0.5);\n}\n\n/* Difficulty Badge (Story 14.1) */\n.difficulty-badge {\n display: inline-block;\n padding: 0.125rem 0.5rem;\n border-radius: var(--radius-full);\n font-size: 0.75rem;\n font-weight: 600;\n margin-left: var(--space-xs);\n}\n\n.difficulty-badge--easy {\n background: var(--color-success-bg);\n color: var(--color-success);\n border: 1px solid var(--color-success);\n}\n\n.difficulty-badge--normal {\n background: var(--color-accent-brand-bg);\n color: var(--color-accent-brand);\n border: 1px solid var(--color-accent-brand);\n}\n\n.difficulty-badge--hard {\n background: var(--color-error-bg);\n color: var(--color-error);\n border: 1px solid var(--color-error);\n}\n\n/* Supported players hint below media player list */\n.supported-players-hint {\n font-size: 0.75rem;\n color: var(--color-text-muted);\n margin-top: var(--space-sm);\n padding-top: var(--space-sm);\n border-top: 1px solid var(--color-border-light);\n}\n\n.supported-players-hint a {\n color: var(--color-accent-primary);\n text-decoration: none;\n}\n\n.supported-players-hint a:hover {\n text-decoration: underline;\n}\n\nbody.theme-dark .supported-players-hint {\n color: var(--color-text-neon-muted);\n border-top-color: var(--color-border-neon);\n}\n\n/* Player info container - holds name and platform badge */\n.player-info {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n/* Platform badge on each player item */\n.platform-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 0.625rem;\n font-weight: 600;\n padding: 2px 6px;\n border-radius: var(--radius-sm);\n text-transform: uppercase;\n letter-spacing: 0.025em;\n background: rgba(128, 128, 128, 0.15);\n color: var(--color-text-muted);\n}\n\n.platform-badge--music_assistant {\n background: rgba(76, 175, 80, 0.15);\n color: #4caf50;\n}\n\n.platform-badge--sonos {\n background: rgba(255, 152, 0, 0.15);\n color: #ff9800;\n}\n\n.platform-badge--alexa_media,\n.platform-badge--alexa {\n background: rgba(0, 168, 225, 0.15);\n color: #00a8e1;\n}\n\nbody.theme-dark .platform-badge {\n background: rgba(255, 255, 255, 0.08);\n}\n\nbody.theme-dark .platform-badge--music_assistant {\n background: rgba(76, 175, 80, 0.2);\n color: #81c784;\n}\n\nbody.theme-dark .platform-badge--sonos {\n background: rgba(255, 152, 0, 0.2);\n color: #ffb74d;\n}\n\nbody.theme-dark .platform-badge--alexa_media,\nbody.theme-dark .platform-badge--alexa {\n background: rgba(0, 168, 225, 0.2);\n color: #4fc3f7;\n}\n\n/* No compatible players message */\n.no-players-message {\n text-align: center;\n padding: var(--space-lg);\n}\n\n.no-players-message h3 {\n font-size: 1.125rem;\n margin-bottom: var(--space-sm);\n}\n\n.no-players-message p {\n font-size: 0.875rem;\n color: var(--color-text-muted);\n margin-bottom: var(--space-sm);\n}\n\n.no-players-message .button-group {\n display: flex;\n flex-direction: column;\n gap: var(--space-sm);\n margin-top: var(--space-md);\n}\n\n/* Provider chips section */\n.provider-chips {\n justify-content: flex-start;\n}\n\n.provider-chips .chip {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n.provider-icon {\n font-size: 1rem;\n}\n\n/* Warning box styling */\n.warning-box {\n background: var(--color-warning-bg);\n border: 1px solid var(--color-warning);\n border-radius: var(--radius-sm);\n padding: var(--space-sm);\n margin-top: var(--space-sm);\n font-size: 0.875rem;\n}\n\n.warning-box p {\n margin: 0 0 var(--space-xs) 0;\n}\n\n.warning-box p:last-child {\n margin-bottom: 0;\n}\n\n.warning-caveat {\n font-size: 0.8125rem;\n opacity: 0.85;\n}\n\n/* Provider hint text */\n#provider-hint {\n font-size: 0.8125rem;\n color: var(--color-text-muted);\n margin-top: var(--space-sm);\n}\n\nbody.theme-dark #provider-hint {\n color: var(--color-text-neon-muted);\n}\n\n/* Disabled chip state (for provider/feature chips) */\n.chip--disabled,\n.provider-btn--disabled {\n opacity: 0.4;\n cursor: not-allowed;\n pointer-events: none;\n}\n\n/* Hint text styling */\n.hint-text {\n font-size: 0.75rem;\n color: var(--color-text-muted);\n margin: var(--space-xs) 0 0 calc(var(--space-md) + 24px);\n font-style: italic;\n}\n\nbody.theme-dark .hint-text {\n color: var(--color-text-neon-muted);\n}\n\n/* Modal content in dark mode needs dark text on light backgrounds */\nbody.theme-dark .modal-content {\n color: var(--color-text-primary);\n}\n\nbody.theme-dark .modal-content h2,\nbody.theme-dark .modal-content p {\n color: var(--color-text-primary);\n}\n\n/* Input fields inside modals need dark text on light background */\nbody.theme-dark .modal-content .name-input {\n background: var(--color-bg-white);\n border-color: var(--color-border-medium);\n color: var(--color-text-primary);\n}\n\nbody.theme-dark .modal-content .name-input::placeholder {\n color: var(--color-text-muted);\n}\n\nbody.theme-dark .modal-content .name-input:focus {\n border-color: var(--color-accent-blue);\n box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n}\n\n/* Card component classes */\n.card {\n background: var(--color-dark-surface);\n border-radius: var(--radius-lg);\n padding: var(--space-md);\n border: 1px solid var(--color-border-neon);\n}\n\n.card-glass {\n background: var(--color-dark-surface);\n backdrop-filter: blur(10px);\n -webkit-backdrop-filter: blur(10px);\n border: 1px solid var(--color-border-neon);\n border-radius: var(--radius-lg);\n}\n\n/* Neon Primary Button */\n.btn-neon {\n background: var(--color-accent-primary);\n color: var(--color-text-white);\n border: none;\n border-radius: var(--radius-md);\n padding: var(--space-md) var(--space-lg);\n font-weight: var(--font-weight-semibold);\n cursor: pointer;\n transition: all var(--transition-fast);\n}\n\n.btn-neon:hover {\n background: #ff4080;\n}\n\n.btn-neon:active {\n transform: scale(0.98);\n}\n\n/* Glow effect for buttons */\n.btn-glow {\n transition: box-shadow var(--transition-fast), transform var(--transition-fast);\n}\n\n.btn-glow:hover {\n box-shadow: var(--glow-primary);\n}\n\n.btn-glow:active {\n transform: scale(0.98);\n box-shadow: var(--glow-primary);\n}\n\n/* Secondary glow (cyan) */\n.btn-glow-secondary:hover {\n box-shadow: var(--glow-secondary);\n}\n\n/* Success glow */\n.btn-glow-success:hover {\n box-shadow: var(--glow-success);\n}\n\n/* Text glow utilities */\n.text-glow {\n text-shadow: 0 0 10px var(--color-accent-primary),\n 0 0 20px var(--color-accent-primary),\n 0 0 30px var(--color-accent-primary);\n}\n\n.text-glow-cyan {\n text-shadow: 0 0 10px var(--color-accent-secondary),\n 0 0 20px var(--color-accent-secondary),\n 0 0 30px var(--color-accent-secondary);\n}\n\n.text-glow-success {\n text-shadow: 0 0 10px var(--color-success-neon),\n 0 0 20px var(--color-success-neon),\n 0 0 30px var(--color-success-neon);\n}\n\n/* Dark theme text utilities */\n.text-neon-white {\n color: var(--color-text-white);\n}\n\n.text-neon-muted {\n color: var(--color-text-neon-muted);\n}\n\n.text-neon-primary {\n color: var(--color-accent-primary);\n}\n\n.text-neon-secondary {\n color: var(--color-accent-secondary);\n}\n\n/* Dark theme overrides for player views */\nbody.theme-dark .player-container h1,\nbody.theme-dark .lobby-header h1,\nbody.theme-dark .game-container h1,\nbody.theme-dark .reveal-container h1,\nbody.theme-dark .end-container h1 {\n color: var(--color-text-white);\n}\n\nbody.theme-dark .player-container p,\nbody.theme-dark .hint,\nbody.theme-dark .player-count {\n color: var(--color-text-neon-muted);\n}\n\nbody.theme-dark .join-form > p {\n color: var(--color-text-neon-muted);\n}\n\n/* Dark theme player cards */\nbody.theme-dark .player-card {\n background: var(--color-dark-surface);\n border-color: var(--color-border-neon);\n}\n\nbody.theme-dark .player-card--you {\n background: rgba(255, 45, 106, 0.1);\n border-color: var(--color-accent-primary);\n}\n\nbody.theme-dark .player-name {\n color: var(--color-text-white);\n}\n\nbody.theme-dark .you-badge {\n color: var(--color-accent-primary);\n}\n\n/* Dark theme form inputs */\nbody.theme-dark .name-input {\n background: var(--color-dark-surface);\n border-color: var(--color-border-neon);\n color: var(--color-text-white);\n}\n\nbody.theme-dark .name-input:focus {\n border-color: var(--color-accent-primary);\n box-shadow: 0 0 0 3px rgba(255, 45, 106, 0.2);\n}\n\nbody.theme-dark .name-input::placeholder {\n color: var(--color-text-neon-muted);\n}\n\n/* Dark theme join button */\nbody.theme-dark .join-btn {\n background: var(--color-accent-primary);\n color: var(--color-text-white);\n}\n\nbody.theme-dark .join-btn:hover {\n box-shadow: var(--glow-primary);\n}\n\n/* Dark theme QR area */\nbody.theme-dark .qr-share-area {\n background: var(--color-dark-surface);\n border: 1px solid var(--color-border-neon);\n}\n\nbody.theme-dark .qr-hint {\n color: var(--color-text-neon-muted);\n}\n\n/* Dark theme - QR collapsible (Story 18.8) */\nbody.theme-dark .qr-share-header {\n color: var(--color-text-white);\n}\n\nbody.theme-dark .qr-share-chevron {\n color: var(--color-text-neon-muted);\n}\n\n/* Dark theme lobby status */\nbody.theme-dark .lobby-status {\n color: var(--color-text-neon-muted);\n}\n\n/* Dark theme game container */\nbody.theme-dark .game-container {\n background: var(--color-bg-primary);\n}\n\nbody.theme-dark .round-indicator-text {\n color: var(--color-text-white);\n}\n\nbody.theme-dark .timer {\n color: var(--color-text-white);\n}\n\nbody.theme-dark .timer--warning {\n color: var(--color-warning);\n text-shadow: 0 0 10px var(--color-warning);\n animation: timer-pulse-subtle 1s ease-in-out infinite;\n}\n\nbody.theme-dark .timer--critical {\n color: var(--color-error-neon);\n text-shadow: 0 0 15px var(--color-error-neon);\n animation: timer-pulse-intense 0.5s ease-in-out infinite;\n}\n\n/* Dark theme submission tracker - inherits from base styles */\n\nbody.theme-dark .player-avatar {\n background: var(--color-dark-surface-hover);\n color: var(--color-text-neon-muted);\n}\n\nbody.theme-dark .player-indicator.is-submitted .player-avatar {\n background: var(--color-success-neon);\n color: var(--color-bg-primary);\n box-shadow: var(--glow-success);\n}\n\n/* Dark theme year selector */\nbody.theme-dark #selected-year {\n color: var(--color-text-white);\n}\n\nbody.theme-dark .slider-label {\n color: var(--color-text-neon-muted);\n}\n\nbody.theme-dark .year-slider {\n background: var(--color-dark-surface);\n}\n\nbody.theme-dark .year-slider::-webkit-slider-thumb {\n background: var(--color-accent-primary);\n box-shadow: var(--glow-primary);\n}\n\nbody.theme-dark .year-slider::-moz-range-thumb {\n background: var(--color-accent-primary);\n box-shadow: var(--glow-primary);\n}\n\n/* Dark theme submit button */\nbody.theme-dark .submit-btn {\n background: var(--color-accent-primary);\n}\n\nbody.theme-dark .submit-btn:hover {\n box-shadow: var(--glow-primary);\n}\n\n/* Dark theme submitted confirmation */\nbody.theme-dark .submitted-confirmation {\n background: var(--color-success-neon);\n color: var(--color-bg-primary);\n box-shadow: var(--glow-success);\n}\n\n/* Dark theme reveal container */\nbody.theme-dark .reveal-container {\n background: var(--color-bg-primary);\n}\n\nbody.theme-dark .reveal-round-info {\n color: var(--color-text-neon-muted);\n}\n\nbody.theme-dark .correct-year-label {\n color: var(--color-text-neon-muted);\n}\n\nbody.theme-dark .correct-year {\n color: var(--color-success-neon);\n text-shadow: 0 0 10px var(--color-success-neon),\n 0 0 20px var(--color-success-neon);\n}\n\nbody.theme-dark .song-title {\n color: var(--color-text-white);\n}\n\nbody.theme-dark .song-artist {\n color: var(--color-text-neon-muted);\n}\n\n/* Dark theme fun fact */\nbody.theme-dark .fun-fact-container {\n background: rgba(255, 102, 0, 0.15);\n border: 1px solid rgba(255, 102, 0, 0.3);\n}\n\nbody.theme-dark .fun-fact-text {\n color: var(--color-warning);\n}\n\n/* Dark theme reveal emotion (Story 9.4) */\nbody.theme-dark .reveal-emotion--exact {\n color: var(--color-success-neon);\n text-shadow: 0 0 20px var(--color-success-neon), 0 0 40px var(--color-success-neon);\n}\n\nbody.theme-dark .reveal-emotion--close {\n color: var(--color-warning);\n text-shadow: 0 0 15px var(--color-warning);\n}\n\nbody.theme-dark .reveal-emotion--wrong {\n color: var(--color-text-neon-muted);\n}\n\nbody.theme-dark .reveal-emotion--missed {\n color: var(--color-text-neon-muted);\n opacity: 0.6;\n}\n\n/* Dark theme personal result */\nbody.theme-dark .personal-result {\n background: var(--color-dark-surface);\n border: 1px solid var(--color-border-neon);\n}\n\nbody.theme-dark .result-header {\n color: var(--color-text-neon-muted);\n}\n\nbody.theme-dark .result-label {\n color: var(--color-text-neon-muted);\n}\n\nbody.theme-dark .result-value {\n color: var(--color-text-white);\n}\n\nbody.theme-dark .result-score {\n color: var(--color-accent-secondary);\n text-shadow: 0 0 10px var(--color-accent-secondary);\n}\n\n/* Dark theme leaderboard */\nbody.theme-dark .leaderboard {\n background: var(--color-dark-surface);\n border: 1px solid var(--color-border-neon);\n box-shadow: none;\n}\n\nbody.theme-dark .leaderboard-header {\n background: var(--color-dark-card);\n border-color: var(--color-border-neon);\n}\n\nbody.theme-dark .leaderboard-title {\n color: var(--color-text-white);\n}\n\nbody.theme-dark .leaderboard-entry {\n border-color: var(--color-border-neon);\n}\n\nbody.theme-dark .leaderboard-entry.is-current {\n background: rgba(255, 45, 106, 0.1);\n border-left-color: var(--color-accent-primary);\n}\n\nbody.theme-dark .entry-rank {\n color: var(--color-text-neon-muted);\n}\n\nbody.theme-dark .entry-name {\n color: var(--color-text-white);\n}\n\nbody.theme-dark .entry-score {\n color: var(--color-accent-secondary);\n}\n\n/* Dark theme leaderboard animations (Story 9.5) */\nbody.theme-dark .leaderboard-entry--climbing {\n animation: leaderboard-climb-dark 400ms ease-out;\n}\n\nbody.theme-dark .leaderboard-entry--falling {\n animation: leaderboard-fall-dark 400ms ease-out;\n}\n\n@keyframes leaderboard-climb-dark {\n 0% { transform: translateY(10px); opacity: 0.7; background: rgba(0, 255, 136, 0.15); }\n 100% { transform: translateY(0); opacity: 1; background: transparent; }\n}\n\n@keyframes leaderboard-fall-dark {\n 0% { transform: translateY(-10px); opacity: 0.7; background: rgba(255, 45, 106, 0.15); }\n 100% { transform: translateY(0); opacity: 1; background: transparent; }\n}\n\nbody.theme-dark .rank-up {\n color: var(--color-success-neon);\n text-shadow: 0 0 5px var(--color-success-neon);\n}\n\nbody.theme-dark .rank-down {\n color: var(--color-error-neon);\n text-shadow: 0 0 5px var(--color-error-neon);\n}\n\nbody.theme-dark .streak-indicator {\n color: var(--color-warning);\n}\n\nbody.theme-dark .streak-indicator--hot {\n text-shadow: 0 0 10px var(--color-warning), 0 0 20px var(--color-warning);\n}\n\nbody.theme-dark .leaderboard-separator {\n color: var(--color-text-neon-muted);\n border-color: var(--color-border-neon);\n}\n\n/* Dark theme top 3 styling (Story 9.5) */\nbody.theme-dark .leaderboard-entry.is-top-1 {\n background: linear-gradient(90deg, rgba(255, 215, 0, 0.15), rgba(255, 215, 0, 0.05));\n}\n\nbody.theme-dark .leaderboard-entry.is-top-1 .entry-rank {\n color: #ffd700;\n text-shadow: 0 0 10px rgba(255, 215, 0, 0.5);\n}\n\nbody.theme-dark .leaderboard-entry.is-top-2 {\n background: linear-gradient(90deg, rgba(192, 192, 192, 0.15), rgba(192, 192, 192, 0.05));\n}\n\nbody.theme-dark .leaderboard-entry.is-top-2 .entry-rank {\n color: #c0c0c0;\n text-shadow: 0 0 10px rgba(192, 192, 192, 0.5);\n}\n\nbody.theme-dark .leaderboard-entry.is-top-3 {\n background: linear-gradient(90deg, rgba(205, 127, 50, 0.15), rgba(205, 127, 50, 0.05));\n}\n\nbody.theme-dark .leaderboard-entry.is-top-3 .entry-rank {\n color: #cd7f32;\n text-shadow: 0 0 10px rgba(205, 127, 50, 0.5);\n}\n\n/* Dark theme end container */\nbody.theme-dark .end-container {\n background: var(--color-bg-primary);\n}\n\nbody.theme-dark .end-title {\n color: var(--color-text-white);\n}\n\nbody.theme-dark .end-subtitle {\n color: var(--color-text-neon-muted);\n}\n\nbody.theme-dark .your-result {\n background: var(--color-dark-surface);\n border: 1px solid var(--color-border-neon);\n}\n\nbody.theme-dark .your-result-header {\n color: var(--color-accent-primary);\n}\n\nbody.theme-dark .your-result-rank {\n color: var(--color-text-white);\n}\n\nbody.theme-dark .your-result-score {\n color: var(--color-text-neon-muted);\n}\n\nbody.theme-dark .stat-value {\n color: var(--color-accent-secondary);\n}\n\nbody.theme-dark .stat-label {\n color: var(--color-text-neon-muted);\n}\n\n/* Dark theme podium */\nbody.theme-dark .podium-name {\n color: var(--color-text-white);\n}\n\nbody.theme-dark .podium-score {\n color: var(--color-text-neon-muted);\n}\n\n/* Dark theme final leaderboard */\nbody.theme-dark .final-leaderboard {\n background: var(--color-dark-surface);\n border: 1px solid var(--color-border-neon);\n box-shadow: none;\n}\n\nbody.theme-dark .final-leaderboard-header {\n background: var(--color-dark-card);\n color: var(--color-text-white);\n}\n\nbody.theme-dark .final-entry {\n border-color: var(--color-border-neon);\n}\n\nbody.theme-dark .final-entry.is-current {\n background: rgba(255, 45, 106, 0.1);\n}\n\nbody.theme-dark .final-rank {\n color: var(--color-text-neon-muted);\n}\n\nbody.theme-dark .final-name {\n color: var(--color-text-white);\n}\n\nbody.theme-dark .final-score {\n color: var(--color-accent-secondary);\n}\n\n/* Dark theme new game button */\nbody.theme-dark .new-game-btn {\n background: var(--color-success-neon);\n color: var(--color-bg-primary);\n box-shadow: var(--glow-success);\n}\n\nbody.theme-dark .new-game-btn:hover {\n background: #4dff1f;\n}\n\n/* Dark theme end player message */\nbody.theme-dark .end-player-message {\n color: var(--color-text-neon-muted);\n}\n\nbody.theme-dark .rejoin-hint {\n color: var(--color-text-neon-muted);\n}\n\n/* Dark theme paused view */\nbody.theme-dark .paused-container {\n background: var(--color-bg-primary);\n}\n\nbody.theme-dark .paused-container h1 {\n color: var(--color-text-white);\n}\n\nbody.theme-dark .paused-container > p {\n color: var(--color-text-neon-muted);\n}\n\nbody.theme-dark .paused-hint {\n color: var(--color-text-neon-muted);\n}\n\n/* Dark theme connection lost view */\nbody.theme-dark .connection-lost-container h1 {\n color: var(--color-text-white);\n}\n\nbody.theme-dark .connection-lost-container > p {\n color: var(--color-text-neon-muted);\n}\n\nbody.theme-dark .connection-lost-hint {\n color: var(--color-text-neon-muted);\n}\n\n/* Dark theme modal */\nbody.theme-dark .qr-modal-content {\n background: var(--color-bg-primary);\n border: 1px solid var(--color-border-neon);\n}\n\nbody.theme-dark .qr-modal-label {\n color: var(--color-text-white);\n}\n\n/* ==========================================\n Lobby Section (Story 2.3)\n ========================================== */\n\n.qr-print-area {\n text-align: center;\n padding: var(--space-lg) 0;\n}\n\n.qr-container {\n display: inline-block;\n padding: var(--space-md);\n background: var(--color-bg-white);\n border-radius: var(--radius-md);\n box-shadow: var(--shadow-md);\n}\n\n#qr-code {\n display: inline-block;\n}\n\n#qr-code img {\n display: block;\n}\n\n.qr-instruction {\n font-size: var(--font-size-lg);\n font-weight: var(--font-weight-semibold);\n color: var(--color-text-primary);\n margin-top: var(--space-md);\n}\n\n.join-url {\n font-family: var(--font-mono);\n font-size: var(--font-size-base);\n color: var(--color-text-muted);\n margin-top: var(--space-sm);\n word-break: break-all;\n user-select: all;\n cursor: text;\n}\n\n.lobby-controls {\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n gap: var(--space-sm);\n margin: var(--space-md) 0;\n}\n\n/* Dashboard button styling (Story 16.4) */\n.btn-dashboard {\n display: flex;\n align-items: center;\n gap: var(--space-xs);\n}\n\n.player-list {\n margin-top: var(--space-md);\n border-top: 1px solid var(--color-border-light);\n padding-top: var(--space-md);\n}\n\n.game-controls-bar {\n display: flex;\n gap: var(--space-sm);\n justify-content: center;\n margin-top: var(--space-md);\n padding-top: var(--space-md);\n border-top: 1px solid var(--color-border-light);\n}\n\n/* Game Info Card (Story 2.3) */\n.game-info {\n background: var(--color-bg-card);\n border-radius: var(--radius-md);\n padding: var(--space-md);\n margin-bottom: var(--space-md);\n}\n\n.game-info p {\n margin-bottom: var(--space-sm);\n}\n\n.game-info p:last-child {\n margin-bottom: 0;\n}\n\n/* Print Styles (Story 2.3) */\n@media print {\n body * {\n visibility: hidden;\n }\n\n .qr-print-area,\n .qr-print-area * {\n visibility: visible;\n }\n\n .qr-print-area {\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n text-align: center;\n }\n\n #qr-code {\n width: 400px !important;\n height: 400px !important;\n }\n\n #qr-code img,\n #qr-code canvas {\n width: 400px !important;\n height: 400px !important;\n }\n\n .qr-instruction {\n font-size: var(--font-size-2xl);\n font-weight: var(--font-weight-bold);\n margin-top: var(--space-xl);\n }\n\n .join-url {\n font-size: var(--font-size-base);\n font-family: var(--font-mono);\n margin-top: var(--space-sm);\n }\n\n .no-print {\n display: none !important;\n }\n}\n\n/* ==========================================\n Player Page Styles (Story 2.4)\n ========================================== */\n\n.player-container {\n max-width: 500px;\n margin: 0 auto;\n /* Edge-to-edge layout with safe area support (Story 9.6) */\n padding-top: max(var(--space-md), env(safe-area-inset-top));\n padding-bottom: max(var(--space-md), env(safe-area-inset-bottom));\n padding-left: max(var(--space-sm), env(safe-area-inset-left));\n padding-right: max(var(--space-sm), env(safe-area-inset-right));\n text-align: center;\n min-height: 100vh;\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n}\n\n/* Tablet breakpoint - center content (Story 9.6) */\n@media (min-width: 768px) {\n .player-container {\n max-width: 480px;\n margin-left: auto;\n margin-right: auto;\n padding-left: var(--space-lg);\n padding-right: var(--space-lg);\n }\n}\n\n.view {\n display: block;\n overflow-x: hidden;\n}\n\n.view.hidden {\n display: none;\n}\n\n.error-icon {\n font-size: var(--font-size-timer);\n margin-bottom: var(--space-md);\n}\n\n.player-container h1 {\n margin-bottom: var(--space-sm);\n color: var(--color-text-primary);\n}\n\n.player-container p {\n color: var(--color-text-muted);\n margin-bottom: var(--space-sm);\n}\n\n.hint {\n font-size: var(--font-size-base);\n color: var(--color-text-light);\n}\n\n.coming-soon {\n font-style: italic;\n color: var(--color-text-muted);\n}\n\n.spinner {\n width: 40px;\n height: 40px;\n margin: 0 auto var(--space-md);\n border: 4px solid var(--color-bg-card-alt);\n border-top: 4px solid var(--color-accent-blue);\n border-radius: 50%;\n animation: spin 1s linear infinite;\n}\n\n@keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n}\n\n/* ==========================================\n Responsive QR Sizing (Story 2.4)\n ========================================== */\n\n/* Mobile default - minimum 250px */\n#qr-code {\n max-width: 100%;\n}\n\n#qr-code img,\n#qr-code canvas {\n max-width: 100%;\n height: auto;\n}\n\n/* Tablet (481-768px): 280px QR code */\n@media (min-width: 481px) and (max-width: 768px) {\n .qr-container {\n padding: var(--space-xl);\n }\n}\n\n/* Desktop (>768px): 350px QR code */\n@media (min-width: 769px) {\n .qr-container {\n padding: var(--space-lg);\n }\n}\n\n/* ==========================================\n Join Form Styles (Story 3.1)\n ========================================== */\n\n.join-form {\n max-width: 400px;\n margin: 0 auto;\n padding: var(--space-lg);\n text-align: center;\n}\n\n.join-form h1 {\n margin-bottom: var(--space-sm);\n font-size: var(--font-size-2xl);\n}\n\n.join-form > p {\n margin-bottom: var(--space-lg);\n color: var(--color-text-muted);\n}\n\n.form-group {\n margin-bottom: var(--space-md);\n}\n\n.name-input {\n width: 100%;\n padding: 14px var(--space-md);\n font-size: var(--font-size-lg);\n border: 2px solid var(--color-border-medium);\n border-radius: var(--radius-md);\n min-height: 48px;\n box-sizing: border-box;\n}\n\n.name-input:focus {\n border-color: var(--color-accent-blue);\n outline: none;\n box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n}\n\n.join-btn {\n width: 100%;\n min-height: 48px;\n font-size: var(--font-size-lg);\n font-weight: var(--font-weight-semibold);\n}\n\n.validation-msg {\n margin-top: var(--space-sm);\n font-size: var(--font-size-base);\n color: var(--color-error);\n text-align: left;\n}\n\n/* ==========================================\n Lobby Styles (Story 3.3)\n ========================================== */\n\n.lobby-container {\n max-width: 500px;\n margin: 0 auto;\n padding: var(--space-lg) var(--space-md);\n}\n\n.lobby-header {\n text-align: center;\n margin-bottom: var(--space-lg);\n}\n\n.lobby-header h1 {\n font-size: var(--font-size-2xl);\n margin-bottom: var(--space-sm);\n color: var(--color-text-primary);\n}\n\n.player-count {\n font-size: var(--font-size-md);\n color: var(--color-text-muted);\n}\n\n/* Player List */\n.player-list {\n display: flex;\n flex-direction: column;\n gap: var(--space-sm);\n margin-bottom: var(--space-lg);\n}\n\n.player-card {\n display: flex;\n align-items: center;\n padding: var(--space-sm) var(--space-md);\n min-height: 48px;\n background: var(--color-bg-card);\n border-radius: var(--radius-md);\n border: 1px solid var(--color-border-light);\n transition: all var(--transition-normal);\n}\n\n.player-card--you {\n background: #eff6ff;\n border-color: var(--color-accent-blue);\n}\n\n.player-card--disconnected {\n opacity: 0.5;\n filter: grayscale(0.3);\n transition: opacity 0.3s ease, filter 0.3s ease;\n}\n\n.away-badge {\n font-size: var(--font-size-sm);\n color: var(--color-text-muted);\n font-style: italic;\n margin-left: var(--space-xs);\n}\n\n.player-name {\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n font-size: var(--font-size-md);\n color: var(--color-text-primary);\n}\n\n.you-badge {\n font-size: var(--font-size-sm);\n color: var(--color-accent-blue);\n font-weight: var(--font-weight-medium);\n}\n\n/* New player animation */\n.player-card.is-new {\n animation: playerJoin var(--transition-slow) ease-out;\n background: #ecfdf5;\n border-color: var(--color-success);\n}\n\n@keyframes playerJoin {\n from {\n opacity: 0;\n transform: translateY(-10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n/* Story 18.2: Virtual scrolling for player lists */\n.player-list--virtual {\n position: relative;\n overflow-y: auto;\n max-height: 320px;\n -webkit-overflow-scrolling: touch;\n contain: layout style paint;\n}\n\n.player-list--virtual .virtual-spacer-top,\n.player-list--virtual .virtual-spacer-bottom {\n flex-shrink: 0;\n pointer-events: none;\n}\n\n.player-list--virtual .virtual-content-wrapper {\n display: flex;\n flex-direction: column;\n gap: var(--space-sm);\n}\n\n.player-list--virtual .player-card {\n flex-shrink: 0;\n height: 52px;\n box-sizing: border-box;\n}\n\n/* QR Share Area (Story 3.4) */\n.qr-share-area {\n text-align: center;\n padding: var(--space-lg) var(--space-md);\n background: var(--color-bg-card);\n border-radius: var(--radius-lg);\n margin-bottom: var(--space-md);\n}\n\n.qr-icon {\n font-size: var(--font-size-xl);\n}\n\n.qr-container {\n display: inline-block;\n padding: var(--space-sm);\n background: var(--color-bg-white);\n border-radius: var(--radius-md);\n box-shadow: var(--shadow-md);\n cursor: pointer;\n min-width: 150px;\n min-height: 150px;\n transition: transform var(--transition-fast);\n}\n\n.qr-container:hover,\n.qr-container:focus {\n transform: scale(1.02);\n outline: 2px solid var(--color-accent-blue);\n outline-offset: 2px;\n}\n\n.qr-container img {\n display: block;\n width: 100%;\n height: auto;\n}\n\n.qr-hint {\n margin-top: var(--space-sm);\n font-size: 13px;\n color: var(--color-text-muted);\n}\n\n/* QR Share Section - Collapsible (Story 18.8) */\n.qr-collapsible {\n /* Override base qr-share-area padding for collapsible */\n padding: 0;\n}\n\n.qr-share-header {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--space-sm);\n padding: var(--space-md);\n cursor: pointer;\n user-select: none;\n list-style: none; /* Remove default marker */\n font-size: var(--font-size-md);\n font-weight: 600;\n color: var(--color-text-primary);\n min-height: 44px; /* Touch target */\n}\n\n.qr-share-header::-webkit-details-marker {\n display: none; /* Hide Safari default marker */\n}\n\n.qr-share-chevron {\n margin-left: var(--space-sm);\n transition: transform var(--transition-normal);\n font-size: 0.8rem;\n color: var(--color-text-muted);\n}\n\n.qr-collapsible[open] .qr-share-chevron {\n transform: rotate(180deg);\n}\n\n.qr-share-content {\n padding: 0 var(--space-md) var(--space-lg);\n animation: qrSlideDown var(--transition-normal) ease-out;\n}\n\n@keyframes qrSlideDown {\n from {\n opacity: 0;\n transform: translateY(-8px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n/* Collapsed state - just show header */\n.qr-collapsible:not([open]) {\n padding-bottom: 0;\n}\n\n.qr-collapsible:not([open]) .qr-share-header {\n padding-bottom: var(--space-md);\n}\n\n/* Reduced motion preference */\n@media (prefers-reduced-motion: reduce) {\n .qr-share-chevron {\n transition: none;\n }\n .qr-share-content {\n animation: none;\n }\n}\n\n/* Dashboard Hint (Story 16.4) */\n.dashboard-hint-container {\n margin-top: var(--space-md);\n text-align: center;\n}\n\n.dashboard-hint-text {\n display: inline-flex;\n flex-direction: column;\n align-items: center;\n gap: var(--space-xs);\n font-size: var(--font-size-sm);\n color: #ffffff;\n background: var(--color-surface-dark);\n padding: var(--space-sm) var(--space-md);\n border-radius: var(--radius-md);\n margin: 0;\n}\n\n.dashboard-hint-label {\n display: flex;\n align-items: center;\n gap: var(--space-xs);\n color: white;\n}\n\n.dashboard-hint-icon {\n font-size: var(--font-size-base);\n}\n\n.dashboard-hint-url {\n font-family: monospace;\n color: var(--color-accent-secondary);\n font-size: var(--font-size-sm);\n}\n\n/* QR Modal (Story 3.4) */\n.qr-modal {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: var(--z-modal);\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.qr-modal.hidden {\n display: none;\n}\n\n.qr-modal-backdrop {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.75);\n}\n\n.qr-modal-content {\n position: relative;\n background: var(--color-bg-white);\n padding: var(--space-xl) var(--space-lg);\n border-radius: var(--radius-xl);\n text-align: center;\n max-width: 90vw;\n max-height: 90vh;\n animation: modalFadeIn var(--transition-fast);\n}\n\n@keyframes modalFadeIn {\n from {\n opacity: 0;\n transform: scale(0.95);\n }\n to {\n opacity: 1;\n transform: scale(1);\n }\n}\n\n.qr-modal-code {\n display: inline-block;\n padding: var(--space-md);\n background: var(--color-bg-white);\n border-radius: var(--radius-md);\n min-width: 250px;\n}\n\n.qr-modal-code img {\n display: block;\n width: 100%;\n max-width: 80vw;\n height: auto;\n}\n\n.qr-modal-label {\n margin: var(--space-md) 0;\n font-size: var(--font-size-lg);\n color: var(--color-text-primary);\n}\n\n.qr-modal-close {\n min-width: 120px;\n min-height: 48px;\n}\n\n/* Screen reader only */\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n border: 0;\n}\n\n/* Lobby Status */\n.lobby-status {\n text-align: center;\n padding: var(--space-md);\n color: var(--color-text-muted);\n}\n\n/* How to Play Section (Story 18.7) */\n.how-to-play {\n margin: var(--space-md) 0;\n background: var(--color-bg-card);\n border-radius: var(--radius-md);\n border: 1px solid var(--color-border-light);\n}\n\n.how-to-play-header {\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n padding: var(--space-md);\n cursor: pointer;\n user-select: none;\n list-style: none;\n font-weight: 600;\n color: var(--color-text-primary);\n min-height: 44px;\n}\n\n.how-to-play-header::-webkit-details-marker {\n display: none;\n}\n\n.how-to-play-icon {\n font-size: 1.2rem;\n}\n\n.how-to-play-chevron {\n margin-left: auto;\n transition: transform var(--transition-normal);\n font-size: 0.8rem;\n color: var(--color-text-secondary);\n}\n\n.how-to-play[open] .how-to-play-chevron {\n transform: rotate(180deg);\n}\n\n.how-to-play-content {\n padding: 0 var(--space-md) var(--space-md);\n animation: howToPlaySlideDown var(--transition-normal) ease-out;\n}\n\n.how-to-play-steps {\n margin: 0;\n padding: 0;\n list-style: none;\n color: var(--color-text-secondary);\n font-size: 0.9rem;\n line-height: 1.6;\n counter-reset: step-counter;\n}\n\n.how-to-play-steps li {\n margin-bottom: var(--space-sm);\n padding-left: var(--space-lg);\n position: relative;\n counter-increment: step-counter;\n}\n\n.how-to-play-steps li::before {\n content: counter(step-counter) \".\";\n position: absolute;\n left: 0;\n width: var(--space-md);\n text-align: right;\n font-weight: 600;\n color: var(--color-text-primary);\n}\n\n.how-to-play-steps li:last-child {\n margin-bottom: 0;\n}\n\n@keyframes howToPlaySlideDown {\n from {\n opacity: 0;\n transform: translateY(-8px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n/* Leave Game Container (Story 11.5, Story 18.6) */\n.leave-game-container {\n text-align: center;\n padding: var(--space-md);\n /* Story 18.6: Sticky positioning for mobile */\n position: sticky;\n bottom: 0;\n background: linear-gradient(to top, var(--color-bg-card), transparent);\n z-index: var(--z-controls, 10);\n}\n\n.leave-game-container.hidden {\n display: none;\n}\n\n/* Story 18.6: Remove gradient background in dark theme (matching admin-controls) */\nbody.theme-dark .leave-game-container {\n background: transparent;\n}\n\n.btn-leave {\n opacity: 0.7;\n transition: opacity 0.2s ease;\n}\n\n.btn-leave:hover {\n opacity: 1;\n}\n\n/* Admin Controls (Story 3.5) */\n.admin-controls {\n padding: var(--space-lg) var(--space-md);\n text-align: center;\n background: linear-gradient(to top, var(--color-bg-card), transparent);\n position: sticky;\n bottom: 0;\n}\n\n.admin-controls.hidden {\n display: none;\n}\n\n/* Story 9.10: Remove gradient background in dark theme */\nbody.theme-dark .admin-controls {\n background: transparent;\n}\n\n.btn-large {\n min-height: 56px;\n font-size: var(--font-size-xl);\n padding: var(--space-md) var(--space-xl);\n}\n\n.btn-full-width {\n width: 100%;\n}\n\n/* .btn-icon margin removed - .btn already uses flexbox gap for spacing */\n\n.admin-hint {\n margin-top: var(--space-sm);\n font-size: var(--font-size-base);\n color: var(--color-text-muted);\n}\n\n/* Admin page modal and actions */\n.admin-lobby-actions {\n text-align: center;\n margin-top: var(--space-lg);\n}\n\n/* Admin badge styling (Story 16.8) */\n.admin-badge {\n font-size: var(--font-size-sm);\n color: var(--color-warning);\n margin-left: var(--space-xs);\n}\n\n/* Player count styling for admin lobby (legacy - kept for backwards compat) */\n.lobby-player-count-container {\n text-align: center;\n margin-bottom: var(--space-md);\n}\n\n/* =====================================================\n Admin Lobby - Analytics Layout (Story 2.3 restructure)\n ===================================================== */\n\n/* Lobby Stats Grid - 2 column layout like analytics */\n.lobby-stats-grid {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: var(--space-md);\n margin-bottom: var(--space-lg);\n}\n\n/* Clickable stat card (dashboard link) */\n.stat-card--clickable {\n display: block;\n text-decoration: none;\n cursor: pointer;\n margin-bottom: var(--space-lg);\n}\n\n.stat-card--clickable:hover {\n border-color: var(--color-accent-secondary);\n}\n\n.dashboard-hint-card {\n background: rgba(0, 245, 255, 0.05);\n border-color: var(--color-accent-secondary);\n}\n\n/* QR Section - centered card with consistent styling */\n.qr-section {\n text-align: center;\n padding: var(--space-xl) var(--space-lg);\n background: var(--color-surface-dark);\n border: 1px solid var(--color-border-neon);\n border-radius: var(--radius-md);\n margin-bottom: var(--space-lg);\n}\n\n.qr-section .qr-container {\n display: inline-block;\n padding: var(--space-md);\n background: #ffffff;\n border-radius: var(--radius-md);\n margin-bottom: var(--space-md);\n}\n\n.qr-hint {\n font-size: 1rem;\n color: var(--color-text-neon-muted);\n margin-bottom: var(--space-sm);\n}\n\n.qr-url-display {\n font-family: 'Outfit', sans-serif;\n font-size: 1.125rem;\n font-weight: 600;\n color: var(--color-accent-secondary);\n word-break: break-all;\n}\n\n/* Player List Section - consistent with analytics sections */\n.player-list-section {\n background: var(--color-surface-dark);\n border: 1px solid var(--color-border-neon);\n border-radius: var(--radius-md);\n padding: var(--space-md);\n margin-bottom: var(--space-lg);\n}\n\n.section-subheader {\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n font-size: 1rem;\n font-weight: 600;\n color: var(--color-text-white);\n margin-bottom: var(--space-md);\n}\n\n.section-subheader .section-icon {\n font-size: 1.25rem;\n}\n\n/* Player Cards Grid - responsive grid layout */\n.player-cards-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));\n gap: var(--space-sm);\n}\n\n/* Player card in grid layout */\n.player-cards-grid .player-card {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: var(--space-md);\n min-height: 80px;\n background: var(--color-dark-surface);\n border: 1px solid var(--color-border-neon);\n border-radius: var(--radius-md);\n text-align: center;\n transition: transform 0.2s ease, box-shadow 0.2s ease, border-color 0.2s ease;\n}\n\n.player-cards-grid .player-card:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 12px rgba(157, 78, 221, 0.2);\n}\n\n.player-cards-grid .player-card.is-new {\n background: rgba(57, 255, 20, 0.1);\n border-color: var(--color-success-neon);\n animation: playerCardJoin 0.5s ease-out;\n}\n\n@keyframes playerCardJoin {\n from {\n opacity: 0;\n transform: scale(0.9);\n }\n to {\n opacity: 1;\n transform: scale(1);\n }\n}\n\n.player-cards-grid .player-card--disconnected {\n opacity: 0.5;\n filter: grayscale(0.3);\n}\n\n.player-cards-grid .player-name {\n font-size: var(--font-size-md);\n font-weight: 600;\n color: var(--color-text-white);\n margin-bottom: var(--space-xs);\n display: flex;\n align-items: center;\n gap: var(--space-xs);\n flex-wrap: wrap;\n justify-content: center;\n}\n\n.player-cards-grid .admin-badge {\n font-size: 1rem;\n}\n\n.player-cards-grid .away-badge {\n font-size: var(--font-size-xs);\n color: var(--color-text-neon-muted);\n display: block;\n width: 100%;\n}\n\n/* Kick player button for disconnected players (#659) */\n.kick-player-btn {\n position: relative;\n background: none;\n border: 1px solid var(--color-border-dark);\n color: var(--color-text-muted);\n width: 24px;\n height: 24px;\n border-radius: 50%;\n font-size: 1rem;\n line-height: 1;\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n margin-top: var(--space-xs);\n padding: 0;\n transition: all 0.15s ease;\n}\n\n/* #1759: expand the tap target to the 44px iOS/Android guideline without\n growing the 24px visual, so it's reliably hittable inside the tappable row. */\n.kick-player-btn::after {\n content: '';\n position: absolute;\n top: 50%;\n left: 50%;\n width: 44px;\n height: 44px;\n transform: translate(-50%, -50%);\n}\n\n.kick-player-btn:hover {\n background: var(--color-error);\n color: white;\n border-color: var(--color-error);\n}\n\n/* Lobby Actions */\n.lobby-actions {\n margin-top: var(--space-lg);\n padding-top: var(--space-md);\n border-top: 1px solid var(--color-border-dark);\n}\n\n/* =====================================================\n Mobile-Optimized Compact Lobby Layout\n ===================================================== */\n\n/* Compact header with inline badges */\n.lobby-header-compact {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n gap: var(--space-sm);\n margin-bottom: var(--space-md);\n text-align: left;\n}\n\n.section-header--inline {\n margin-bottom: 0;\n flex: 1;\n min-width: 120px;\n text-align: left;\n}\n\n/* Stat Badge Bar */\n.stat-badge-bar {\n display: flex;\n align-items: center;\n gap: var(--space-md);\n}\n\n.stat-badge {\n display: flex;\n align-items: center;\n gap: var(--space-xs);\n padding: var(--space-xs) var(--space-sm);\n background: rgba(255, 255, 255, 0.05);\n border: 1px solid var(--color-border-neon);\n border-radius: var(--radius-md);\n font-size: 0.875rem;\n}\n\n.stat-badge-icon {\n font-size: 1rem;\n}\n\n.stat-badge-value {\n font-weight: 600;\n color: var(--color-accent-secondary);\n}\n\n.stat-badge--status .stat-badge-value {\n color: var(--color-text-white);\n}\n\n/* Compact QR Section */\n.qr-section--compact {\n padding: var(--space-md);\n margin-bottom: var(--space-md);\n}\n\n.qr-section--compact .qr-container {\n padding: var(--space-sm);\n margin-bottom: var(--space-sm);\n}\n\n.qr-section--compact #qr-code {\n width: 180px !important;\n height: 180px !important;\n}\n\n.qr-section--compact #qr-code img,\n.qr-section--compact #qr-code canvas {\n width: 180px !important;\n height: 180px !important;\n}\n\n.qr-section--compact .qr-hint {\n font-size: 0.875rem;\n margin-bottom: var(--space-xs);\n}\n\n.qr-url-display--compact {\n font-size: 0.75rem;\n margin-bottom: var(--space-sm);\n}\n\n/* Inline Dashboard Link */\n.dashboard-link {\n display: inline-flex;\n align-items: center;\n gap: var(--space-xs);\n padding: var(--space-xs) var(--space-sm);\n background: rgba(0, 245, 255, 0.1);\n border: 1px solid var(--color-accent-secondary);\n border-radius: var(--radius-md);\n color: var(--color-accent-secondary);\n text-decoration: none;\n font-size: 0.875rem;\n transition: all 0.2s ease;\n}\n\n.dashboard-link:hover {\n background: rgba(0, 245, 255, 0.2);\n}\n\n.dashboard-link-arrow {\n opacity: 0.7;\n}\n\n/* Compact Player List */\n.player-list-section--compact {\n padding: var(--space-sm);\n margin-bottom: var(--space-sm);\n}\n\n.section-subheader--compact {\n font-size: 0.875rem;\n margin-bottom: var(--space-sm);\n}\n\n/* Inline Empty State */\n.empty-state-inline {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--space-sm);\n padding: var(--space-md);\n color: var(--color-text-neon-muted);\n font-size: 0.875rem;\n text-align: center;\n}\n\n/* Sticky Lobby Actions */\n.lobby-actions--sticky {\n position: sticky;\n bottom: 0;\n margin: 0 calc(-1 * var(--space-md));\n padding: var(--space-sm) var(--space-md);\n background: var(--color-bg-primary);\n border-top: 1px solid var(--color-border-dark);\n z-index: 10;\n display: flex;\n flex-direction: column;\n gap: var(--space-sm, 8px);\n}\n\n/* Desktop: Keep larger layout */\n@media (min-width: 481px) {\n .qr-section--compact #qr-code,\n .qr-section--compact #qr-code img,\n .qr-section--compact #qr-code canvas {\n width: 240px !important;\n height: 240px !important;\n }\n\n .qr-section--compact {\n padding: var(--space-lg);\n }\n\n .lobby-actions--sticky {\n position: relative;\n margin: var(--space-lg) 0 0 0;\n padding: var(--space-md) 0 0 0;\n background: transparent;\n }\n}\n\n/* =====================================================\n Lobby View - Shared Styles (Admin & Player)\n ===================================================== */\n\n/* Lobby Wordmark Header (without analytics icon) */\n.lobby-wordmark-header {\n display: flex;\n justify-content: center;\n align-items: center;\n padding: var(--space-md) var(--space-md) var(--space-sm);\n padding-top: env(safe-area-inset-top, 16px);\n}\n\n.lobby-wordmark-header .wordmark {\n font-size: 2rem;\n}\n\n/* Compact Lobby Container */\n.lobby-container--compact {\n flex: 1;\n padding: 0 var(--space-sm) var(--space-2xl);\n max-width: 500px;\n margin: 0 auto;\n width: 100%;\n}\n\n/* Lobby sections use the same collapsible pattern */\n.lobby-container--compact .section-collapsible {\n background: var(--color-surface-dark);\n border: 1px solid var(--color-border-neon);\n border-radius: var(--radius-md);\n margin-bottom: var(--space-md);\n overflow: hidden;\n}\n\n.lobby-container--compact .section-header-collapsible {\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n width: 100%;\n padding: var(--space-sm) var(--space-md);\n background: transparent;\n border: none;\n color: var(--color-text-white);\n font-size: 0.875rem;\n font-weight: 600;\n cursor: pointer;\n text-align: left;\n}\n\n.lobby-container--compact .section-header-collapsible .section-icon {\n font-size: 1rem;\n}\n\n.lobby-container--compact .section-summary {\n margin-left: auto;\n font-size: 0.75rem;\n font-weight: 400;\n color: var(--color-text-neon-muted);\n padding: 2px 8px;\n background: rgba(255, 255, 255, 0.05);\n border-radius: var(--radius-sm);\n}\n\n.lobby-container--compact .section-toggle {\n font-size: 0.625rem;\n color: var(--color-text-neon-muted);\n transition: transform 0.2s ease;\n margin-left: var(--space-sm);\n}\n\n/* Push toggle to right when no summary present (toggle is 3rd child) */\n.lobby-container--compact .section-header-collapsible > .section-toggle:nth-child(3) {\n margin-left: auto;\n}\n\n.lobby-container--compact .section-collapsible:not(.collapsed) .section-toggle {\n transform: rotate(180deg);\n}\n\n.lobby-container--compact .section-content {\n padding: 0 var(--space-md) var(--space-md);\n}\n\n.lobby-container--compact .section-collapsible.collapsed .section-content {\n display: none;\n}\n\n/* Compact Status (for non-admin players) */\n.lobby-status-compact {\n text-align: center;\n padding: var(--space-md);\n color: var(--color-text-neon-muted);\n font-size: 0.875rem;\n}\n\n/* Compact How to Play Steps */\n.how-to-play-steps-compact {\n list-style: decimal;\n padding-left: var(--space-lg);\n margin: 0;\n font-size: 0.875rem;\n color: var(--color-text-neon-muted);\n}\n\n.how-to-play-steps-compact li {\n padding: var(--space-xs) 0;\n}\n\n/* Stat Badge for Difficulty */\n.stat-badge--difficulty {\n font-size: 0.75rem;\n text-transform: uppercase;\n letter-spacing: 0.03em;\n}\n\n.stat-badge--difficulty:empty {\n display: none;\n}\n\n/* =====================================================\n Admin Page - Collapsible Sections & Compact Controls\n ===================================================== */\n\n/* Collapsible sections for admin (reuse analytics pattern) */\n.admin-content .section-collapsible {\n background: var(--color-surface-dark);\n border: 1px solid var(--color-border-neon);\n border-radius: var(--radius-md);\n margin-bottom: var(--space-md);\n overflow: hidden;\n}\n\n.admin-content .section-header-collapsible {\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n width: 100%;\n padding: var(--space-sm) var(--space-md);\n background: transparent;\n border: none;\n color: var(--color-text-white);\n font-size: 0.875rem;\n font-weight: 600;\n cursor: pointer;\n text-align: left;\n}\n\n.admin-content .section-header-collapsible .section-icon {\n font-size: 1rem;\n}\n\n.admin-content .section-header-collapsible .section-summary {\n margin-left: auto;\n font-size: 0.75rem;\n font-weight: 400;\n color: var(--color-accent-secondary);\n background: rgba(0, 245, 255, 0.1);\n padding: 2px 8px;\n border-radius: var(--radius-sm);\n}\n\n.admin-content .section-header-collapsible .section-toggle {\n margin-left: var(--space-sm);\n font-size: 0.625rem;\n color: var(--color-text-neon-muted);\n transition: transform 0.2s ease;\n}\n\n.admin-content .section-collapsible:not(.collapsed) .section-toggle {\n transform: rotate(180deg);\n}\n\n.admin-content .section-collapsible .section-content {\n padding: 0 var(--space-md) var(--space-md);\n}\n\n.admin-content .section-collapsible.collapsed .section-content {\n display: none;\n}\n\n/* Setting rows - compact horizontal layout */\n.setting-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: var(--space-xs) 0;\n border-bottom: 1px solid rgba(255, 255, 255, 0.05);\n}\n\n.setting-row:last-child {\n border-bottom: none;\n}\n\n.setting-group {\n border-bottom: 1px solid rgba(255, 255, 255, 0.05);\n padding-bottom: var(--space-sm);\n margin-bottom: var(--space-sm);\n}\n\n.setting-group:last-child {\n border-bottom: none;\n}\n\n.setting-group .setting-row {\n border-bottom: none;\n}\n\n.tts-group-title {\n font-size: 0.7rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--color-text-muted);\n margin: 0 0 var(--space-xs) 0;\n opacity: 0.8;\n}\n\n.setting-hint {\n font-size: 0.7rem;\n color: var(--color-text-muted);\n margin: 0 0 var(--space-xs) calc(var(--space-xs) + 24px);\n line-height: 1.3;\n opacity: 0.75;\n}\n\nbody.theme-dark .setting-hint {\n color: var(--color-text-neon-muted);\n}\n\n/* #1138 cleanup: .ha-entity-list rules removed with the legacy flat\n #ha-entities info section (deleted from admin.html). */\n\n.setting-label {\n display: flex;\n align-items: center;\n gap: var(--space-xs);\n font-size: 0.875rem;\n color: var(--color-text-white);\n}\n\n.setting-icon {\n font-size: 0.875rem;\n}\n\n/* Chip group - compact inline buttons */\n.chip-group {\n display: flex;\n gap: 4px;\n}\n\n.chip {\n padding: 4px 10px;\n font-size: 0.75rem;\n font-weight: 500;\n background: rgba(255, 255, 255, 0.05);\n border: 1px solid var(--color-border-neon);\n border-radius: var(--radius-sm);\n color: var(--color-text-neon-muted);\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.chip:hover {\n background: rgba(255, 255, 255, 0.1);\n color: var(--color-text-white);\n}\n\n.chip.chip--active {\n background: rgba(0, 245, 255, 0.2);\n border-color: var(--color-accent-secondary);\n color: var(--color-accent-secondary);\n}\n\n/* Compact toggle switch */\n.toggle-compact {\n display: flex;\n align-items: center;\n cursor: pointer;\n}\n\n.toggle-compact input {\n position: absolute;\n opacity: 0;\n width: 0;\n height: 0;\n}\n\n.toggle-switch-compact {\n width: 36px;\n height: 20px;\n background: rgba(255, 255, 255, 0.1);\n border-radius: 10px;\n position: relative;\n transition: background 0.2s ease;\n}\n\n.toggle-switch-compact::after {\n content: '';\n position: absolute;\n top: 2px;\n left: 2px;\n width: 16px;\n height: 16px;\n background: var(--color-text-neon-muted);\n border-radius: 50%;\n transition: all 0.2s ease;\n}\n\n.toggle-compact input:checked + .toggle-switch-compact {\n background: rgba(0, 245, 255, 0.3);\n}\n\n.toggle-compact input:checked + .toggle-switch-compact::after {\n left: 18px;\n background: var(--color-accent-secondary);\n}\n\n/* Admin actions - sticky footer */\n.admin-actions {\n position: sticky;\n bottom: 0;\n background: var(--color-bg-primary);\n padding: var(--space-sm) 0;\n margin-top: var(--space-sm);\n}\n\n.admin-actions .status-error {\n margin-bottom: var(--space-xs);\n font-size: 0.875rem;\n}\n\n/* Modal styles */\n.modal {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: var(--z-modal);\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.modal.hidden {\n display: none;\n}\n\n.modal-backdrop {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.5);\n}\n\n.modal-content {\n position: relative;\n background: var(--color-bg-white);\n padding: var(--space-lg);\n border-radius: var(--radius-lg);\n max-width: 400px;\n width: 90%;\n animation: modalFadeIn var(--transition-fast);\n}\n\n.modal-content h2 {\n margin-bottom: var(--space-sm);\n font-size: var(--font-size-xl);\n}\n\n.modal-content p {\n margin-bottom: var(--space-md);\n color: var(--color-text-muted);\n}\n\n.modal-actions {\n display: flex;\n gap: var(--space-sm);\n margin-top: var(--space-lg);\n}\n\n.modal-actions .btn {\n flex: 1;\n}\n\n/* Game placeholder (Epic 4 prep) */\n.game-placeholder {\n text-align: center;\n padding: var(--space-2xl) var(--space-lg);\n}\n\n.game-placeholder h1 {\n font-size: var(--font-size-3xl);\n margin-bottom: var(--space-md);\n color: var(--color-text-primary);\n}\n\n.game-placeholder p {\n font-size: var(--font-size-md);\n color: var(--color-text-muted);\n}\n\n/* Reveal placeholder (Story 3.6 / Epic 4 prep) */\n.reveal-placeholder {\n text-align: center;\n padding: var(--space-2xl) var(--space-lg);\n}\n\n.reveal-placeholder h1 {\n font-size: var(--font-size-4xl);\n margin-bottom: var(--space-md);\n color: var(--color-text-primary);\n}\n\n.reveal-placeholder p {\n font-size: var(--font-size-md);\n color: var(--color-text-muted);\n}\n\n/* End View (Story 3.6) */\n.end-container {\n text-align: center;\n padding: var(--space-2xl) var(--space-lg);\n}\n\n.end-icon {\n font-size: var(--font-size-timer);\n margin-bottom: var(--space-md);\n}\n\n.end-container h1 {\n font-size: var(--font-size-3xl);\n margin-bottom: var(--space-sm);\n color: var(--color-text-primary);\n}\n\n.end-message {\n font-size: var(--font-size-lg);\n color: #4b5563;\n margin-bottom: var(--space-sm);\n}\n\n/* ==========================================\n Game View Styles (Story 4.2)\n ========================================== */\n\n/* Game View Container */\n.game-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n /* Edge-to-edge with minimal padding (Story 9.6) */\n padding: var(--space-sm);\n padding-bottom: max(var(--space-md), env(safe-area-inset-bottom));\n max-width: 400px;\n margin: 0 auto;\n}\n\n/* Sticky bar: Round info + Timer always visible (Issue #654) */\n.game-sticky-bar {\n position: sticky;\n top: 0;\n z-index: 50;\n width: 100%;\n padding: var(--space-xs) var(--space-sm);\n background: var(--color-bg-light);\n border-bottom: 1px solid var(--color-border-light);\n}\n\nbody.theme-dark .game-sticky-bar {\n background: var(--color-bg-primary);\n border-bottom-color: var(--color-border-dark);\n}\n\n.game-sticky-bar .timer-container {\n margin-bottom: 0;\n}\n\n.game-sticky-bar .timer {\n font-size: 2rem;\n}\n\n/* Game Header - Compact (matches lobby header pattern) */\n.game-header-compact {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n margin-bottom: var(--space-sm);\n padding: 0 var(--space-xs);\n}\n\n.game-header-left {\n display: flex;\n align-items: center;\n gap: var(--space-xs);\n}\n\n.game-header-left .section-icon {\n font-size: 1rem;\n}\n\n.round-indicator-text {\n font-size: var(--font-size-sm);\n font-weight: 600;\n color: var(--color-text-white);\n}\n\n/* Steal badge styling */\n.stat-badge--steal {\n background: linear-gradient(135deg, var(--color-purple-primary), var(--color-purple-secondary, #9333ea));\n animation: steal-badge-pulse 2s ease-in-out infinite;\n}\n\n@keyframes steal-badge-pulse {\n 0%, 100% {\n box-shadow: 0 0 8px rgba(147, 51, 234, 0.5);\n }\n 50% {\n box-shadow: 0 0 12px rgba(147, 51, 234, 0.8);\n }\n}\n\n/* Last Round Banner - Inline */\n.last-round-banner {\n background: linear-gradient(135deg, var(--color-warning), var(--color-warning-dark));\n color: var(--color-text-white);\n padding: var(--space-xs) var(--space-md);\n border-radius: var(--radius-md);\n font-size: var(--font-size-sm);\n font-weight: var(--font-weight-semibold);\n margin-bottom: var(--space-sm);\n text-align: center;\n width: 100%;\n animation: pulse 2s infinite;\n}\n\n/* Intro Round Badge (Issue #23) */\n.intro-badge {\n display: inline-flex;\n align-items: center;\n gap: var(--space-sm);\n padding: var(--space-sm) var(--space-lg);\n background: linear-gradient(135deg, #ffd700, #ff6b00);\n color: #000;\n border-radius: var(--radius-pill);\n font-size: var(--font-size-lg);\n font-weight: var(--font-weight-bold);\n text-transform: uppercase;\n letter-spacing: 1px;\n animation: intro-pulse 1.5s ease-in-out infinite;\n margin-bottom: var(--space-md);\n box-shadow: 0 0 20px rgba(255, 215, 0, 0.5), 0 0 40px rgba(255, 107, 0, 0.3);\n}\n\n/* Intro Splash Overlay */\n.intro-splash {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: 9999;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(0, 0, 0, 0.85);\n animation: intro-splash-in 0.3s ease-out, intro-splash-out 0.5s ease-in 1.5s forwards;\n pointer-events: none;\n}\n\n.intro-splash-content {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n animation: intro-splash-scale 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);\n}\n\n.intro-splash-icon {\n font-size: 80px;\n filter: drop-shadow(0 0 30px rgba(255, 215, 0, 0.8));\n}\n\n.intro-splash-text {\n font-size: 36px;\n font-weight: 900;\n text-transform: uppercase;\n letter-spacing: 4px;\n background: linear-gradient(135deg, #ffd700, #ff6b00);\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n background-clip: text;\n text-shadow: none;\n}\n\n.intro-splash-hint {\n font-size: 18px;\n color: rgba(255, 255, 255, 0.7);\n letter-spacing: 1px;\n}\n\n@keyframes intro-splash-in {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n@keyframes intro-splash-out {\n from { opacity: 1; }\n to { opacity: 0; visibility: hidden; }\n}\n\n@keyframes intro-splash-scale {\n from { transform: scale(0.5); opacity: 0; }\n to { transform: scale(1); opacity: 1; }\n}\n\n.intro-badge-icon {\n font-size: var(--font-size-md);\n}\n\n.intro-badge--large {\n font-size: var(--font-size-lg);\n padding: var(--space-sm) var(--space-lg);\n margin-left: var(--space-md);\n}\n\n.intro-badge--large .intro-badge-icon {\n font-size: var(--font-size-xl);\n}\n\n.intro-badge--stopped {\n background: linear-gradient(135deg, #666, #444);\n color: var(--color-text-white);\n animation: none;\n}\n\n@keyframes intro-pulse {\n 0%, 100% { transform: scale(1); opacity: 1; }\n 50% { transform: scale(1.05); opacity: 0.9; }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .intro-badge {\n animation: none;\n }\n}\n\n/* Issue #442: Closest Wins badge */\n.closest-wins-badge {\n background: linear-gradient(135deg, #00c6ff, #0072ff);\n box-shadow: 0 0 20px rgba(0, 198, 255, 0.5), 0 0 40px rgba(0, 114, 255, 0.3);\n}\n\n/* Issue #442: Highlight closest winner in result cards */\n.result-card.is-closest-winner {\n border: 2px solid #00c6ff;\n box-shadow: 0 0 12px rgba(0, 198, 255, 0.4);\n}\n\n.closest-winner-badge {\n margin-left: var(--space-sm);\n font-size: var(--font-size-sm);\n}\n\n/* Album Cover (compact, matches reveal size) */\n.album-cover-container {\n position: relative;\n width: 150px;\n height: 150px;\n margin-bottom: var(--space-md);\n}\n\n.album-cover {\n width: 100%;\n height: 100%;\n object-fit: cover;\n border-radius: var(--radius-lg);\n box-shadow: var(--shadow-lg);\n filter: blur(20px);\n}\n\n/* Responsive album cover */\n@media (max-width: 360px) {\n .album-cover-container {\n width: 120px;\n height: 120px;\n }\n}\n\n@media (min-width: 768px) {\n .album-cover-container {\n width: 180px;\n height: 180px;\n }\n}\n\n.album-loading {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--color-bg-card-alt);\n border-radius: var(--radius-xl);\n}\n\n.loading-spinner {\n width: 40px;\n height: 40px;\n border: 4px solid var(--color-border-light);\n border-top-color: var(--color-accent-brand);\n border-radius: 50%;\n animation: spin 1s linear infinite;\n}\n\n/* Timer */\n.timer-container {\n margin-bottom: var(--space-lg);\n}\n\n.timer {\n font-size: var(--font-size-timer);\n font-weight: var(--font-weight-bold);\n color: var(--color-text-primary);\n font-variant-numeric: tabular-nums;\n transition: color var(--transition-normal);\n}\n\n.timer--warning {\n color: var(--color-warning);\n animation: timer-pulse-subtle 1s ease-in-out infinite;\n}\n\n.timer--critical {\n color: var(--color-error);\n animation: timer-pulse-intense 0.5s ease-in-out infinite;\n}\n\n/* Timer animations */\n@keyframes timer-pulse-subtle {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.8; }\n}\n\n@keyframes timer-pulse-intense {\n 0%, 100% { opacity: 1; transform: scale(1); }\n 50% { opacity: 0.9; transform: scale(1.05); }\n}\n\n/* Reduced motion support for timer */\n@media (prefers-reduced-motion: reduce) {\n .timer--warning,\n .timer--critical {\n animation: none;\n }\n}\n\n/* Submission Tracker (Story 4.4) - Aligned with analytics style */\n.submission-tracker {\n width: 100%;\n margin-bottom: var(--space-md);\n padding: var(--space-sm);\n background: var(--color-surface-dark);\n border: 1px solid var(--color-border-neon);\n border-radius: var(--radius-md);\n}\n\n/* Player Indicators Row */\n.submitted-players {\n display: flex;\n gap: var(--space-sm);\n overflow-x: auto;\n padding: var(--space-xs) 0;\n -webkit-overflow-scrolling: touch;\n scrollbar-width: none; /* Firefox */\n justify-content: center;\n flex-wrap: wrap;\n}\n\n.submitted-players::-webkit-scrollbar {\n display: none; /* Chrome, Safari */\n}\n\n/* Player Indicator */\n.player-indicator {\n display: flex;\n flex-direction: column;\n align-items: center;\n min-width: 48px;\n flex-shrink: 0;\n position: relative;\n}\n\n/* Player badges for bet and steal */\n.player-badge {\n position: absolute;\n width: 16px;\n height: 16px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 10px;\n z-index: 1;\n}\n\n/* Bet badge - upper right */\n.player-badge--bet {\n top: -2px;\n right: 2px;\n background: var(--color-warning);\n}\n\n/* Steal badge - upper left */\n.player-badge--steal {\n top: -2px;\n left: 2px;\n background: linear-gradient(135deg, var(--color-purple-primary), var(--color-purple-secondary, #9333ea));\n}\n\n.player-avatar {\n width: 36px;\n height: 36px;\n border-radius: 50%;\n background: var(--color-border-light);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: var(--font-size-base);\n font-weight: var(--font-weight-semibold);\n color: var(--color-text-muted);\n border: 2px solid transparent;\n transition: all var(--transition-normal);\n}\n\n.player-indicator.is-submitted .player-avatar {\n background: var(--color-success);\n color: var(--color-text-white);\n border-color: var(--color-success-hover);\n animation: submitted-pulse var(--transition-slow) ease-out;\n}\n\n.player-indicator.is-submitted .player-initials {\n display: none;\n}\n\n.player-indicator.is-submitted .player-avatar::after {\n content: '\u2713';\n font-size: var(--font-size-md);\n}\n\n@keyframes submitted-pulse {\n 0% { transform: scale(1); }\n 50% { transform: scale(1.2); }\n 100% { transform: scale(1); }\n}\n\n.player-indicator .player-name {\n font-size: var(--font-size-xs);\n color: var(--color-text-muted);\n max-width: 48px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n text-align: center;\n margin-top: var(--space-xs);\n}\n\n/* Current Player Highlight */\n.player-indicator.is-current-player .player-avatar {\n border-color: var(--color-accent-brand);\n}\n\n.player-indicator.is-current-player .player-name {\n font-weight: var(--font-weight-semibold);\n color: var(--color-accent-brand);\n}\n\n/* Disconnected player indicator (Story 11.4) */\n.player-indicator--disconnected {\n opacity: 0.4;\n}\n\n/* All Submitted State */\n.submission-tracker.all-submitted {\n border-color: var(--color-success);\n background: rgba(16, 185, 129, 0.1);\n}\n\n/* Artist Challenge (Story 20.5) - Uses card-section base */\n.artist-challenge {\n width: 100%;\n}\n\n.artist-challenge .section-header {\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n flex-wrap: wrap;\n}\n\n/* Bonus badge in header */\n.stat-badge--bonus {\n background: rgba(34, 197, 94, 0.15);\n color: var(--color-success);\n font-weight: 700;\n margin-left: auto;\n}\n\n/* Artist options grid */\n.artist-options-grid {\n display: grid;\n grid-template-columns: 1fr 1fr;\n grid-auto-rows: 1fr;\n gap: var(--space-sm);\n}\n\n@media (max-width: 320px) {\n .artist-options-grid {\n grid-template-columns: 1fr;\n }\n}\n\n.artist-option-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 72px;\n padding: var(--space-sm) var(--space-md);\n border: 2px solid var(--color-border);\n border-radius: var(--radius-md);\n background: var(--color-surface);\n color: var(--color-text);\n font-size: var(--font-size-md);\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s ease;\n position: relative;\n}\n\n.artist-option-btn:active {\n transform: scale(0.98);\n}\n\n.artist-option-btn.is-loading {\n animation: artistPulse 1s infinite;\n}\n\n@keyframes artistPulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.6; }\n}\n\n.artist-option-btn.is-correct,\n.artist-option-btn.is-winner {\n background: var(--color-success);\n border-color: var(--color-success);\n color: white;\n}\n\n.artist-option-btn.is-winner {\n box-shadow: var(--glow-primary);\n}\n\n.artist-option-btn.is-wrong {\n animation: artistWrongFlash 0.5s ease;\n}\n\n.artist-option-btn.is-wrong.is-selected {\n background: var(--color-error);\n border-color: var(--color-error);\n color: white;\n animation: none;\n opacity: 0.8;\n}\n\n@keyframes artistWrongFlash {\n 0%, 100% { background: var(--color-surface); }\n 50% { background: rgba(239, 68, 68, 0.3); }\n}\n\n.artist-option-btn.is-disabled {\n opacity: 0.5;\n pointer-events: none;\n}\n\n.artist-points-badge {\n position: absolute;\n right: var(--space-sm);\n font-size: var(--font-size-sm);\n font-weight: 700;\n color: white;\n background: rgba(0, 0, 0, 0.2);\n padding: 2px 6px;\n border-radius: var(--radius-sm);\n}\n\n.artist-result {\n margin-top: var(--space-md);\n padding: var(--space-sm) var(--space-md);\n border-radius: var(--radius-md);\n text-align: center;\n font-weight: 500;\n}\n\n.artist-result.is-winner {\n background: rgba(34, 197, 94, 0.15);\n color: var(--color-success);\n}\n\n.artist-result.is-late {\n background: var(--color-surface-alt, rgba(255, 255, 255, 0.05));\n color: var(--color-text-muted);\n}\n\n/* Dark mode - artist-challenge inherits from card-section */\nbody.theme-dark .artist-option-btn {\n background: rgba(255, 255, 255, 0.05);\n border-color: var(--color-border-neon);\n color: var(--color-text-white);\n}\n\nbody.theme-dark .artist-option-btn:hover {\n background: rgba(255, 255, 255, 0.1);\n}\n\n/* Reduced motion */\n@media (prefers-reduced-motion: reduce) {\n .artist-option-btn.is-loading {\n animation: none;\n opacity: 0.7;\n }\n\n .artist-option-btn.is-wrong {\n animation: none;\n opacity: 0.5;\n }\n}\n\n/* Artist Reveal Section (Story 20.6) */\n.artist-reveal-section {\n padding: var(--space-md);\n margin-bottom: var(--space-md);\n background: var(--color-surface-alt, rgba(255, 255, 255, 0.05));\n border-radius: var(--radius-lg);\n}\n\n/* Center the artist name and winner content, not the header */\n.artist-reveal-section .section-content-padded {\n text-align: center;\n}\n\n.artist-reveal-label {\n font-size: var(--font-size-sm);\n color: var(--color-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: var(--space-xs);\n}\n\n.artist-reveal-name {\n font-size: var(--font-size-xl);\n font-weight: 700;\n color: var(--color-text);\n margin-bottom: var(--space-sm);\n}\n\n.artist-reveal-winner {\n font-size: var(--font-size-md);\n padding: var(--space-xs) var(--space-md);\n border-radius: var(--radius-md);\n display: inline-block;\n}\n\n.artist-reveal-winner.is-you {\n background: rgba(34, 197, 94, 0.15);\n color: var(--color-success);\n font-weight: 600;\n}\n\n.artist-reveal-winner.is-other {\n color: var(--color-text-muted);\n}\n\n.artist-reveal-no-winner {\n color: var(--color-text-muted);\n font-style: italic;\n}\n\n/* Dark mode */\nbody.theme-dark .artist-reveal-section {\n background: var(--color-dark-surface-alt, #16213e);\n}\n\n/* Artist Bonus Row in Score Breakdown (Story 20.6) */\n.artist-bonus-row .result-value {\n color: var(--color-success);\n font-weight: 600;\n}\n\n/* Artist Badge on Player Cards (Story 20.6) */\n.player-card-artist-badge {\n font-size: var(--font-size-xs);\n color: var(--color-success);\n background: rgba(34, 197, 94, 0.1);\n padding: 2px 6px;\n border-radius: var(--radius-sm);\n margin-left: var(--space-xs);\n}\n\n/* ============================================\n Movie Challenge (Issue #28) - Uses card-section base\n ============================================ */\n.movie-challenge {\n width: 100%;\n}\n\n.movie-challenge .section-header {\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n flex-wrap: wrap;\n}\n\n/* Movie options grid - 1 column default (titles are longer) */\n.movie-options-grid {\n display: grid;\n grid-template-columns: 1fr;\n gap: var(--space-sm);\n}\n\n@media (min-width: 480px) {\n .movie-options-grid {\n grid-template-columns: 1fr 1fr;\n }\n}\n\n.movie-option-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 44px;\n padding: var(--space-sm) var(--space-md);\n border: 2px solid var(--color-border);\n border-radius: var(--radius-md);\n background: var(--color-surface);\n color: var(--color-text);\n font-size: var(--font-size-md);\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s ease;\n position: relative;\n text-align: center;\n}\n\n.movie-option-btn:active {\n transform: scale(0.98);\n}\n\n.movie-option-btn.is-loading {\n animation: moviePulse 1s infinite;\n}\n\n@keyframes moviePulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.6; }\n}\n\n.movie-option-btn.is-correct,\n.movie-option-btn.is-winner {\n background: var(--color-success);\n border-color: var(--color-success);\n color: white;\n}\n\n.movie-option-btn.is-winner {\n box-shadow: var(--glow-primary);\n}\n\n.movie-option-btn.is-wrong {\n animation: movieWrongFlash 0.5s ease;\n}\n\n.movie-option-btn.is-wrong.is-selected {\n background: var(--color-error);\n border-color: var(--color-error);\n color: white;\n animation: none;\n opacity: 0.8;\n}\n\n@keyframes movieWrongFlash {\n 0%, 100% { background: var(--color-surface); }\n 50% { background: rgba(239, 68, 68, 0.3); }\n}\n\n.movie-option-btn.is-disabled {\n opacity: 0.5;\n pointer-events: none;\n}\n\n.movie-rank-badge {\n position: absolute;\n right: var(--space-sm);\n font-size: var(--font-size-sm);\n font-weight: 700;\n color: white;\n background: rgba(0, 0, 0, 0.2);\n padding: 2px 6px;\n border-radius: var(--radius-sm);\n}\n\n.movie-result {\n margin-top: var(--space-md);\n padding: var(--space-sm) var(--space-md);\n border-radius: var(--radius-md);\n text-align: center;\n font-weight: 500;\n}\n\n.movie-result.is-winner {\n background: rgba(34, 197, 94, 0.15);\n color: var(--color-success);\n}\n\n.movie-result.is-late {\n background: var(--color-surface-alt, rgba(255, 255, 255, 0.05));\n color: var(--color-text-muted);\n}\n\n/* Dark mode - movie-challenge inherits from card-section */\nbody.theme-dark .movie-option-btn {\n background: rgba(255, 255, 255, 0.05);\n border-color: var(--color-border-neon);\n color: var(--color-text-white);\n}\n\nbody.theme-dark .movie-option-btn:hover {\n background: rgba(255, 255, 255, 0.1);\n}\n\n/* Reduced motion */\n@media (prefers-reduced-motion: reduce) {\n .movie-option-btn.is-loading {\n animation: none;\n opacity: 0.7;\n }\n\n .movie-option-btn.is-wrong {\n animation: none;\n opacity: 0.5;\n }\n}\n\n/* Movie Reveal Section (Issue #28) */\n.movie-reveal-section {\n padding: var(--space-md);\n margin-bottom: var(--space-md);\n background: var(--color-surface-alt, rgba(255, 255, 255, 0.05));\n border-radius: var(--radius-lg);\n}\n\n.movie-reveal-section .section-content-padded {\n text-align: center;\n}\n\n.movie-reveal-name {\n font-size: var(--font-size-xl);\n font-weight: 700;\n color: var(--color-text);\n margin-bottom: var(--space-sm);\n}\n\n.movie-reveal-winners {\n margin-top: var(--space-sm);\n}\n\n.movie-reveal-winners-title {\n font-size: var(--font-size-sm);\n color: var(--color-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: var(--space-xs);\n}\n\n.movie-reveal-winner-entry {\n font-size: var(--font-size-md);\n padding: var(--space-xs) var(--space-md);\n border-radius: var(--radius-md);\n display: inline-block;\n margin: 2px 4px;\n}\n\n.movie-reveal-winner-entry.is-you {\n background: rgba(34, 197, 94, 0.15);\n color: var(--color-success);\n font-weight: 600;\n}\n\n.movie-reveal-winner-entry.is-other {\n color: var(--color-text-muted);\n}\n\n.movie-reveal-no-winner {\n color: var(--color-text-muted);\n font-style: italic;\n font-size: var(--font-size-md);\n padding: var(--space-xs) var(--space-md);\n}\n\n/* Dark mode */\nbody.theme-dark .movie-reveal-section {\n background: var(--color-dark-surface-alt, #16213e);\n}\n\n/* Year Selector (Story 4.3) - Uses card-section base */\n.year-selector-section {\n width: 100%;\n /* Safe area for submit button (Story 9.6) */\n padding-bottom: max(var(--space-md), env(safe-area-inset-bottom));\n}\n\n.year-selector {\n width: 100%;\n}\n\n.year-display {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--space-sm);\n margin-bottom: var(--space-md);\n}\n\n/* +/- buttons for precise year adjustment (Issue #662) */\n.year-adjust-btn {\n width: 48px;\n height: 48px;\n border-radius: 50%;\n border: 2px solid var(--color-border-dark);\n background: transparent;\n color: var(--color-text-white);\n font-size: 1.5rem;\n font-weight: bold;\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n transition: all 0.15s ease;\n -webkit-tap-highlight-color: transparent;\n touch-action: manipulation;\n user-select: none;\n flex-shrink: 0;\n}\n\n.year-adjust-btn:active {\n background: var(--color-accent-primary);\n border-color: var(--color-accent-primary);\n transform: scale(0.95);\n}\n\n.year-adjust-btn:disabled {\n opacity: 0.3;\n pointer-events: none;\n}\n\n#selected-year {\n font-size: var(--font-size-year);\n font-weight: var(--font-weight-bold);\n color: var(--color-text-primary);\n font-variant-numeric: tabular-nums;\n}\n\n/* Slider Container */\n.slider-container {\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n margin-bottom: var(--space-lg);\n}\n\n.slider-label {\n font-size: var(--font-size-sm);\n color: var(--color-text-muted);\n min-width: 40px;\n}\n\n.slider-label--min {\n text-align: right;\n}\n\n.slider-label--max {\n text-align: left;\n}\n\n/* Custom Range Slider */\n.year-slider {\n -webkit-appearance: none;\n appearance: none;\n flex: 1;\n height: var(--space-sm);\n background: var(--color-border-light);\n border-radius: var(--radius-sm);\n outline: none;\n}\n\n.year-slider::-webkit-slider-thumb {\n -webkit-appearance: none;\n appearance: none;\n width: 44px;\n height: 44px;\n background: var(--color-accent-brand);\n border-radius: 50%;\n cursor: pointer;\n border: 4px solid var(--color-bg-white);\n box-shadow: var(--shadow-md);\n transition: transform 0.1s ease;\n}\n\n.year-slider::-webkit-slider-thumb:active {\n transform: scale(1.1);\n}\n\n.year-slider::-moz-range-thumb {\n width: 44px;\n height: 44px;\n background: var(--color-accent-brand);\n border-radius: 50%;\n cursor: pointer;\n border: 4px solid var(--color-bg-white);\n box-shadow: var(--shadow-md);\n}\n\n/* Submit Button */\n.submit-btn {\n width: 100%;\n padding: var(--space-lg) var(--space-lg);\n font-size: var(--font-size-lg);\n font-weight: var(--font-weight-semibold);\n color: var(--color-text-white);\n background: var(--color-accent-brand);\n border: none;\n border-radius: var(--radius-lg);\n cursor: pointer;\n transition: all var(--transition-fast);\n min-height: 56px;\n}\n\n.submit-btn:hover {\n background: var(--color-accent-brand-hover);\n}\n\n.submit-btn:active {\n transform: scale(0.98);\n}\n\n.submit-btn:disabled {\n background: var(--color-text-light);\n cursor: not-allowed;\n transform: none;\n}\n\n.submit-btn.is-loading {\n color: transparent;\n position: relative;\n}\n\n.submit-btn.is-loading::after {\n content: '';\n position: absolute;\n width: 24px;\n height: 24px;\n border: 3px solid var(--color-bg-white);\n border-top-color: transparent;\n border-radius: 50%;\n animation: spin 0.8s linear infinite;\n left: 50%;\n top: 50%;\n margin-left: -12px;\n margin-top: -12px;\n}\n\n.submit-btn.is-error {\n background: var(--color-error);\n}\n\n/* Submitted Confirmation */\n.submitted-confirmation {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--space-sm);\n padding: var(--space-md);\n background: var(--color-success);\n color: var(--color-text-white);\n border-radius: var(--radius-lg);\n font-size: var(--font-size-lg);\n font-weight: var(--font-weight-semibold);\n}\n\n.submitted-confirmation .checkmark {\n font-size: var(--font-size-2xl);\n}\n\n/* Submitted state for slider */\n.year-selector.is-submitted .year-slider {\n pointer-events: none;\n opacity: 0.5;\n}\n\n.year-selector.is-submitted #selected-year {\n color: var(--color-text-muted);\n}\n\n/* Responsive adjustments for Game View */\n@media (max-width: 360px) {\n .album-cover-container {\n max-width: 250px;\n }\n\n .timer {\n font-size: var(--font-size-2xl);\n }\n}\n\n@media (min-width: 768px) {\n .album-cover-container {\n max-width: 350px;\n }\n\n .timer {\n font-size: var(--font-size-hero);\n }\n}\n\n/* Tablet+ breakpoint (min-width for mobile-first) */\n@media (min-width: 768px) {\n body {\n max-width: 800px;\n margin: 0 auto;\n padding: var(--space-lg);\n }\n\n header h1 {\n font-size: var(--font-size-4xl);\n }\n\n .status-section h2,\n .card-section h2 {\n font-size: var(--font-size-lg);\n }\n\n .card-section {\n padding: var(--space-md) var(--space-lg);\n }\n}\n\n/* ============================================\n Reveal View (Story 4.6)\n ============================================ */\n\n.reveal-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: var(--space-lg);\n width: 100%;\n margin: 0 auto;\n text-align: center;\n}\n\n/* Compact Reveal Container */\n.reveal-container--compact {\n padding: var(--space-md);\n gap: var(--space-sm);\n align-items: stretch;\n}\n\n/* Duel Reveal Container (round-reveal v2) \u2014 same stretch/padding behavior as\n --compact so every card-section has the same width. Default .reveal-container\n uses align-items:center which makes cards size to their content. */\n.reveal-container--duel {\n padding: var(--space-md);\n gap: var(--space-sm);\n align-items: stretch;\n text-align: left;\n}\n\n/* Compact Header Bar */\n.reveal-header-compact {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: var(--space-xs) 0;\n margin-bottom: var(--space-xs);\n}\n\n.reveal-header-left {\n display: flex;\n align-items: center;\n gap: var(--space-xs);\n}\n\n.reveal-header-compact .section-icon {\n font-size: 1rem;\n}\n\n.reveal-header-compact .round-indicator-text {\n font-size: 0.875rem;\n color: var(--color-text-neon-muted);\n}\n\n/* Song Hero - Album + Info side by side */\n.reveal-song-hero {\n display: flex;\n align-items: center;\n gap: var(--space-md);\n padding: var(--space-sm);\n background: var(--color-surface-dark);\n border: 1px solid var(--color-border-neon);\n border-radius: var(--radius-md);\n margin-bottom: var(--space-sm);\n}\n\n.reveal-album-cover-compact {\n width: 80px;\n height: 80px;\n object-fit: cover;\n border-radius: var(--radius-md);\n flex-shrink: 0;\n}\n\n.reveal-song-info {\n flex: 1;\n min-width: 0;\n text-align: left;\n}\n\n.reveal-song-info .song-title {\n font-size: 1rem;\n font-weight: 600;\n color: var(--color-text-white);\n margin-bottom: 2px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.reveal-song-info .song-artist {\n font-size: 0.875rem;\n color: var(--color-text-neon-muted);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n/* Year Section with Emotion */\n.reveal-year-section {\n text-align: center;\n padding: var(--space-sm) 0;\n}\n\n.reveal-emotion-inline {\n font-size: 1.25rem;\n font-weight: 700;\n margin-bottom: var(--space-xs);\n animation: reveal-emotion-entrance 0.5s ease-out;\n}\n\n.reveal-year-section .correct-year-label {\n font-size: 0.75rem;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--color-text-neon-muted);\n margin-bottom: var(--space-xs);\n}\n\n.reveal-year-section .correct-year {\n font-size: 3rem;\n}\n\n/* Personal Result - Compact */\n.personal-result-compact {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--space-sm);\n padding: var(--space-sm) var(--space-md);\n background: rgba(0, 245, 255, 0.1);\n border: 1px solid var(--color-border-neon);\n border-radius: var(--radius-md);\n margin-bottom: var(--space-sm);\n}\n\n.result-content-inline {\n font-size: 0.875rem;\n color: var(--color-text-white);\n}\n\n/* Artist Reveal - Compact */\n.artist-reveal-compact {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--space-sm);\n padding: var(--space-sm) var(--space-md);\n background: var(--color-surface-dark);\n border: 1px solid var(--color-border-neon);\n border-radius: var(--radius-md);\n margin-bottom: var(--space-sm);\n}\n\n.artist-reveal-icon {\n font-size: 1rem;\n}\n\n.artist-reveal-name-inline {\n font-weight: 600;\n color: var(--color-accent-secondary);\n}\n\n.artist-reveal-winner-inline {\n font-size: 0.75rem;\n color: var(--color-text-neon-muted);\n}\n\n.artist-reveal-winner-inline::before {\n content: \"\u2022\";\n margin-right: var(--space-xs);\n}\n\n/* Fun Fact Card Section */\n.fun-fact-section {\n text-align: left;\n}\n\n.fun-fact-section .fun-fact-text {\n font-size: 0.875rem;\n color: var(--color-text-white);\n line-height: 1.5;\n margin-bottom: var(--space-sm);\n}\n\n.fun-fact-section .song-rich-info {\n font-size: 0.75rem;\n color: var(--color-text-neon-muted);\n}\n\n/* Consistent section content padding */\n.section-content-padded {\n padding: 0 var(--space-md) var(--space-md);\n}\n\n/* Remove side padding when inside card-section (card already has padding) */\n.card-section .section-content-padded {\n padding: 0 0 var(--space-sm);\n}\n\n/* All Guesses Card Section */\n.guesses-section {\n text-align: left;\n}\n\n.reveal-results-grid {\n width: 100%;\n}\n\n/* Personal Result Card Section */\n.personal-result-section {\n text-align: left;\n}\n\n.personal-result-section .result-row {\n display: flex;\n justify-content: space-between;\n padding: var(--space-xs) 0;\n border-bottom: 1px solid rgba(255, 255, 255, 0.05);\n}\n\n.personal-result-section .result-row:last-child {\n border-bottom: none;\n}\n\n/* Artist Reveal Card Section */\n.artist-reveal-section {\n text-align: left;\n}\n\n.artist-reveal-section .artist-reveal-name {\n font-size: 1.25rem;\n font-weight: 700;\n color: var(--color-accent-secondary);\n margin-bottom: var(--space-xs);\n}\n\n.artist-reveal-section .artist-reveal-winner {\n font-size: 0.875rem;\n color: var(--color-text-neon-muted);\n}\n\n/* Round Analytics Card Section */\n.round-analytics-section {\n width: 100%;\n background: var(--color-surface-dark);\n border: 1px solid var(--color-border-neon);\n border-radius: var(--radius-md);\n overflow: hidden;\n text-align: left;\n}\n\n.round-analytics-section .section-header-collapsible {\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n width: 100%;\n padding: var(--space-sm) var(--space-md);\n background: transparent;\n border: none;\n color: var(--color-text-white);\n font-size: 0.875rem;\n font-weight: 600;\n cursor: pointer;\n text-align: left;\n}\n\n.round-analytics-section .section-header-collapsible .section-icon {\n font-size: 1rem;\n}\n\n.round-analytics-section .section-header-collapsible .section-summary {\n margin-left: auto;\n font-size: 0.75rem;\n font-weight: 400;\n color: var(--color-accent-secondary);\n background: rgba(0, 245, 255, 0.1);\n padding: 2px 8px;\n border-radius: var(--radius-sm);\n}\n\n.round-analytics-section .section-header-collapsible .section-toggle {\n margin-left: var(--space-sm);\n font-size: 0.625rem;\n color: var(--color-text-neon-muted);\n transition: transform 0.2s ease;\n}\n\n.round-analytics-section .section-content {\n padding: 0 var(--space-md) var(--space-sm);\n}\n\n.round-analytics-section.collapsed .section-content {\n display: none;\n}\n\n.round-analytics-section:not(.collapsed) .section-toggle {\n transform: rotate(180deg);\n}\n\n/* Legacy styles preserved */\n.reveal-round-info {\n font-size: var(--font-size-base);\n color: var(--color-text-muted);\n margin-bottom: var(--space-md);\n}\n\n/* Album Cover (smaller for reveal) - legacy */\n.reveal-album {\n margin-bottom: var(--space-lg);\n}\n\n.reveal-album-cover {\n width: 150px;\n height: 150px;\n object-fit: cover;\n border-radius: var(--radius-lg);\n box-shadow: var(--shadow-lg);\n}\n\n/* Correct Year */\n.correct-year-container {\n margin-bottom: var(--space-md);\n}\n\n.correct-year-label {\n font-size: var(--font-size-md);\n color: var(--color-text-muted);\n margin-bottom: var(--space-sm);\n}\n\n.correct-year {\n font-size: var(--font-size-hero);\n font-weight: var(--font-weight-extrabold);\n color: var(--color-success);\n font-variant-numeric: tabular-nums;\n animation: reveal-pop var(--transition-slow) ease-out;\n}\n\n@keyframes reveal-pop {\n 0% {\n transform: scale(0.5);\n opacity: 0;\n }\n 70% {\n transform: scale(1.1);\n }\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n}\n\n/* Song Info */\n.song-info {\n margin-bottom: var(--space-md);\n}\n\n.song-title {\n font-size: var(--font-size-xl);\n font-weight: var(--font-weight-semibold);\n color: var(--color-text-primary);\n margin-bottom: var(--space-xs);\n}\n\n.song-artist {\n font-size: var(--font-size-md);\n color: var(--color-text-muted);\n}\n\n/* Fun Fact + Rich Song Info Container */\n.fun-fact-container {\n display: flex;\n flex-direction: column;\n gap: var(--space-sm);\n background: var(--color-warning-light);\n padding: var(--space-md);\n border-radius: var(--radius-lg);\n margin-bottom: var(--space-lg);\n text-align: left;\n max-width: 100%;\n}\n\n.fun-fact-header {\n display: flex;\n align-items: flex-start;\n gap: var(--space-sm);\n}\n\n.fun-fact-icon {\n font-size: var(--font-size-xl);\n flex-shrink: 0;\n}\n\n.fun-fact-text {\n font-size: var(--font-size-base);\n color: #92400e;\n line-height: 1.4;\n}\n\n/* Hide fun fact header when no fun fact text */\n.fun-fact-header:empty,\n.fun-fact-text:empty {\n display: none;\n}\n\n/* ============================================\n Rich Song Info (Story 14.3) - inside fun fact box\n ============================================ */\n\n.song-rich-info {\n text-align: left;\n}\n\n.song-rich-info:empty {\n display: none;\n}\n\n/* ============================================\n Song Info Badges - Unified Design\n All badges centered with consistent styling\n ============================================ */\n\n/* Shared badge container - centers all badge rows */\n.song-badges-row {\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n gap: var(--space-sm);\n margin-top: var(--space-sm);\n padding-top: var(--space-sm);\n border-top: 1px solid rgba(120, 53, 15, 0.15);\n}\n\n.song-badges-row:first-child {\n border-top: none;\n padding-top: 0;\n}\n\n/* Base badge style - shared by all badge types */\n.song-badge {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n font-size: var(--font-size-xs);\n font-weight: var(--font-weight-semibold);\n border-radius: 20px;\n border: 1px solid;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n white-space: nowrap;\n}\n\n.song-badge-icon {\n font-size: 14px;\n line-height: 1;\n}\n\n/* Chart position badge - blue theme */\n.song-badge--chart {\n background: linear-gradient(135deg, #dbeafe, #bfdbfe);\n color: #1e40af;\n border-color: #93c5fd;\n}\n\n.song-badge--chart .chart-weeks {\n font-weight: normal;\n opacity: 0.8;\n font-size: 11px;\n}\n\n/* Certification badges */\n.song-badge--platinum {\n background: linear-gradient(135deg, #f1f5f9, #e2e8f0);\n color: #475569;\n border-color: #cbd5e1;\n}\n\n.song-badge--gold {\n background: linear-gradient(135deg, #fef3c7, #fde68a);\n color: #92400e;\n border-color: #fcd34d;\n}\n\n.song-badge--diamond {\n background: linear-gradient(135deg, #e0f2fe, #bae6fd);\n color: #0369a1;\n border-color: #7dd3fc;\n}\n\n/* Award badges - warm orange/amber theme */\n.song-badge--award {\n background: linear-gradient(135deg, #ffedd5, #fed7aa);\n color: #9a3412;\n border-color: #fdba74;\n}\n\n/* Special award variants */\n.song-badge--grammy {\n background: linear-gradient(135deg, #fef3c7, #fde68a);\n color: #78350f;\n border-color: #f59e0b;\n}\n\n.song-badge--eurovision {\n background: linear-gradient(135deg, #ede9fe, #ddd6fe);\n color: #5b21b6;\n border-color: #a78bfa;\n}\n\n.song-badge--oscar,\n.song-badge--academy {\n background: linear-gradient(135deg, #fef3c7, #fde68a);\n color: #78350f;\n border-color: #f59e0b;\n}\n\n.song-badge--halloffame {\n background: linear-gradient(135deg, #dbeafe, #bfdbfe);\n color: #1e40af;\n border-color: #60a5fa;\n}\n\n/* More awards indicator */\n.song-badges-more {\n font-size: var(--font-size-xs);\n color: #78350f;\n font-style: italic;\n opacity: 0.8;\n}\n\n/* ============================================\n Song Difficulty Rating (Story 15.1)\n ============================================ */\n\n.song-difficulty {\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n justify-content: center;\n margin-top: var(--space-sm);\n opacity: 0;\n animation: fadeIn 0.5s ease-out forwards;\n animation-delay: 0.3s;\n}\n\n.difficulty-stars {\n font-size: 1.2rem;\n letter-spacing: 0.1em;\n}\n\n/* Easy (1-star): green glow */\n.difficulty-1 {\n color: var(--color-success-neon);\n text-shadow: 0 0 10px var(--color-success-neon);\n}\n\n/* Medium (2-star): yellow */\n.difficulty-2 {\n color: var(--color-warning);\n text-shadow: 0 0 10px var(--color-warning);\n}\n\n/* Hard (3-star): orange */\n.difficulty-3 {\n color: var(--color-warning-alt);\n text-shadow: 0 0 10px var(--color-warning-alt);\n}\n\n/* Extreme (4-star): red/pink neon */\n.difficulty-4 {\n color: var(--color-accent-primary);\n text-shadow: 0 0 10px var(--color-accent-primary);\n}\n\n.difficulty-label {\n font-weight: bold;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n font-size: var(--font-size-sm);\n}\n\n.difficulty-accuracy {\n font-size: 0.85em;\n opacity: 0.7;\n}\n\n/* ============================================\n Superlatives / Fun Awards (Story 15.2)\n ============================================ */\n\n.superlatives-container {\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n gap: var(--space-md);\n margin: var(--space-lg) 0;\n padding: 0 var(--space-md);\n}\n\n.superlative-card {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: var(--space-md);\n min-width: 120px;\n max-width: 160px;\n background: var(--color-dark-surface);\n border-radius: var(--radius-lg);\n border: 1px solid rgba(255, 255, 255, 0.1);\n opacity: 0;\n animation: superlativeSlideIn 0.5s ease-out forwards;\n}\n\n@keyframes superlativeSlideIn {\n from {\n opacity: 0;\n transform: translateY(20px) scale(0.9);\n }\n to {\n opacity: 1;\n transform: translateY(0) scale(1);\n }\n}\n\n.superlative-emoji {\n font-size: 2rem;\n margin-bottom: var(--space-xs);\n}\n\n.superlative-title {\n font-weight: bold;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n font-size: var(--font-size-xs);\n color: var(--color-accent-secondary);\n text-align: center;\n margin-bottom: var(--space-xs);\n}\n\n.superlative-player {\n font-weight: bold;\n font-size: var(--font-size-base);\n color: var(--color-dark-text-primary);\n text-align: center;\n margin-bottom: var(--space-xs);\n}\n\n.superlative-value {\n font-size: var(--font-size-sm);\n color: var(--color-dark-text-secondary);\n text-align: center;\n}\n\n/* Card-specific accent colors */\n.superlative-card--speed_demon {\n border-color: var(--color-warning);\n box-shadow: 0 0 15px rgba(245, 158, 11, 0.2);\n}\n\n.superlative-card--lucky_streak {\n border-color: var(--color-error);\n box-shadow: 0 0 15px rgba(239, 68, 68, 0.2);\n}\n\n.superlative-card--risk_taker {\n border-color: var(--color-purple-primary);\n box-shadow: 0 0 15px rgba(139, 92, 246, 0.2);\n}\n\n.superlative-card--clutch_player {\n border-color: var(--color-success-neon);\n box-shadow: 0 0 15px rgba(57, 255, 20, 0.2);\n}\n\n.superlative-card--close_calls {\n border-color: var(--color-accent-secondary);\n box-shadow: 0 0 15px rgba(0, 245, 255, 0.2);\n}\n\n/* ============================================\n Game Highlights Reel (Issue #75)\n ============================================ */\n\n.highlights-container {\n width: 100%;\n margin-top: var(--space-lg);\n margin-bottom: var(--space-lg);\n}\n\n.highlights-header {\n font-size: var(--font-size-lg);\n font-weight: var(--font-weight-semibold);\n color: var(--color-text-white);\n text-align: center;\n margin-bottom: var(--space-md);\n}\n\n.highlights-list {\n display: flex;\n flex-direction: column;\n gap: var(--space-sm);\n}\n\n.highlight-card {\n display: flex;\n align-items: center;\n gap: var(--space-md);\n padding: var(--space-md);\n background: var(--color-dark-surface);\n border-radius: var(--radius-lg);\n border: 1px solid rgba(255, 255, 255, 0.1);\n opacity: 0;\n animation: highlightFadeIn 0.5s ease-out forwards;\n}\n\n@keyframes highlightFadeIn {\n from {\n opacity: 0;\n transform: translateX(-20px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n}\n\n.highlight-emoji {\n font-size: 1.8rem;\n flex-shrink: 0;\n width: 48px;\n text-align: center;\n}\n\n.highlight-content {\n flex: 1;\n min-width: 0;\n}\n\n.highlight-text {\n font-size: var(--font-size-base);\n color: var(--color-dark-text-primary);\n line-height: 1.4;\n}\n\n.highlight-round {\n font-size: var(--font-size-xs);\n color: var(--color-dark-text-secondary);\n margin-top: var(--space-xs);\n}\n\n/* Mobile responsive */\n@media (max-width: 480px) {\n .highlight-card {\n padding: var(--space-sm);\n gap: var(--space-sm);\n }\n\n .highlight-emoji {\n font-size: 1.4rem;\n width: 36px;\n }\n\n .highlight-text {\n font-size: var(--font-size-sm);\n }\n}\n\n/* ============================================\n Round Analytics (Story 13.3)\n ============================================ */\n\n.round-analytics {\n width: 100%;\n margin-top: var(--space-lg);\n margin-bottom: var(--space-lg);\n padding: var(--space-md);\n background: var(--color-dark-surface);\n border-radius: var(--radius-lg);\n text-align: center;\n}\n\n.analytics-title {\n font-size: var(--font-size-lg);\n font-weight: var(--font-weight-semibold);\n color: var(--color-text-white);\n margin-bottom: var(--space-md);\n}\n\n/* Analytics stats - single row layout */\n.analytics-stats-row {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: var(--space-lg);\n margin-bottom: var(--space-xs);\n}\n\n.stat-primary {\n text-align: left;\n}\n\n.stat-primary .stat-label {\n font-size: var(--font-size-sm);\n color: var(--color-text-neon-muted);\n display: block;\n margin-bottom: var(--space-xs);\n}\n\n.stat-primary .stat-value {\n font-size: var(--font-size-2xl);\n font-weight: var(--font-weight-bold);\n color: var(--color-accent-secondary);\n}\n\n.stat-secondary {\n text-align: right;\n}\n\n.stat-secondary .stat-value {\n font-size: var(--font-size-2xl);\n font-weight: var(--font-weight-bold);\n color: var(--color-success);\n}\n\n.stat-secondary .stat-label {\n font-size: var(--font-size-sm);\n color: var(--color-text-neon-muted);\n display: block;\n}\n\n.stat-comparison-line {\n font-size: var(--font-size-sm);\n color: var(--color-text-neon-muted);\n margin-bottom: var(--space-md);\n}\n\n/* Histogram */\n.analytics-histogram {\n margin-bottom: var(--space-lg);\n}\n\n.histogram-title {\n font-size: var(--font-size-base);\n color: var(--color-text-neon-muted);\n margin-bottom: var(--space-sm);\n}\n\n/* #1178: per-player dot-axis (replaces aggregated histogram on phone reveal).\n Each player's guess is a colored dot at the exact year on a horizontal axis;\n the correct year is marked by a vertical cyan line. */\n.dotaxis-wrap {\n margin: 14px 0 16px;\n}\n.dotaxis-axis {\n position: relative;\n height: 88px;\n margin: 0 14px;\n}\n.dotaxis-line {\n position: absolute;\n left: 0; right: 0;\n top: 52px;\n height: 2px;\n background: rgba(255, 255, 255, 0.12);\n border-radius: 2px;\n}\n.dotaxis-tick {\n position: absolute;\n top: 48px;\n width: 1px;\n height: 10px;\n background: rgba(255, 255, 255, 0.18);\n}\n.dotaxis-tick-label {\n position: absolute;\n top: 64px;\n font-size: 9px;\n color: rgba(255, 255, 255, 0.5);\n transform: translateX(-50%);\n letter-spacing: 0.3px;\n font-weight: 500;\n}\n.dotaxis-marker {\n position: absolute;\n top: 4px;\n bottom: 18px;\n width: 2px;\n background: linear-gradient(180deg, transparent, var(--color-cyan, #00d4ff) 30%, var(--color-cyan, #00d4ff) 80%, transparent);\n box-shadow: 0 0 8px var(--color-cyan, #00d4ff), 0 0 16px rgba(0, 212, 255, 0.6);\n}\n.dotaxis-marker-label {\n position: absolute;\n top: -4px;\n left: 50%;\n transform: translateX(-50%);\n background: var(--color-cyan, #00d4ff);\n color: #0a0a0e;\n font-family: var(--font-family-display, 'Outfit', sans-serif);\n font-weight: 900;\n font-size: 12px;\n padding: 3px 8px;\n border-radius: 6px;\n box-shadow: 0 0 14px rgba(0, 212, 255, 0.6);\n white-space: nowrap;\n}\n.dotaxis-dot {\n position: absolute;\n top: 39px;\n width: 26px;\n height: 26px;\n border-radius: 50%;\n transform: translateX(-50%);\n display: flex;\n align-items: center;\n justify-content: center;\n font-family: var(--font-family-display, 'Outfit', sans-serif);\n font-weight: 900;\n font-size: 12px;\n color: #fff;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.5);\n box-shadow: 0 0 0 3px var(--color-bg-primary, #0d0d12), 0 4px 10px rgba(0, 0, 0, 0.4);\n cursor: default;\n}\n.dotaxis-dot--c1 { background: linear-gradient(135deg, #ff6ec7, #d846a7); }\n.dotaxis-dot--c2 { background: linear-gradient(135deg, #6e3bff, #4a25c8); }\n.dotaxis-dot--c3 { background: linear-gradient(135deg, #ffd60a, #e6b800); color: #1a1a22; text-shadow: none; }\n.dotaxis-dot--c4 { background: linear-gradient(135deg, #00d4ff, #008abf); }\n.dotaxis-dot--correct {\n box-shadow: 0 0 0 3px var(--color-bg-primary, #0d0d12), 0 0 18px currentColor, 0 4px 10px rgba(0, 0, 0, 0.4);\n}\n.dotaxis-dot--me {\n box-shadow: 0 0 0 3px var(--color-bg-primary, #0d0d12), 0 0 0 5px rgba(255, 159, 67, 0.6), 0 4px 10px rgba(0, 0, 0, 0.4);\n}\n.dotaxis-dot--correct.dotaxis-dot--me {\n box-shadow: 0 0 0 3px var(--color-bg-primary, #0d0d12), 0 0 0 5px rgba(255, 159, 67, 0.6), 0 0 22px currentColor, 0 4px 10px rgba(0, 0, 0, 0.4);\n}\n.dotaxis-score {\n position: absolute;\n top: 12px;\n transform: translateX(-50%);\n font-family: var(--font-family-display, 'Outfit', sans-serif);\n font-weight: 800;\n font-size: 11px;\n padding: 2px 6px;\n border-radius: 6px;\n background: rgba(255, 255, 255, 0.08);\n white-space: nowrap;\n}\n.dotaxis-score--pos {\n background: rgba(0, 212, 255, 0.18);\n color: var(--color-cyan, #00d4ff);\n}\n.dotaxis-score--zero {\n color: rgba(255, 255, 255, 0.35);\n}\n.dotaxis-legend {\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n gap: 8px 14px;\n font-size: 11px;\n color: rgba(255, 255, 255, 0.75);\n margin-top: 4px;\n}\n.dotaxis-legend-entry {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n}\n.dotaxis-legend-dot {\n display: inline-block;\n width: 11px;\n height: 11px;\n border-radius: 50%;\n flex-shrink: 0;\n}\n.dotaxis-legend-medal {\n font-size: 13px;\n line-height: 1;\n}\n.dotaxis-legend-me {\n color: rgba(255, 159, 67, 1);\n font-weight: 700;\n font-size: 10px;\n margin-left: 2px;\n letter-spacing: 0.3px;\n}\n\n.histogram-bars {\n display: flex;\n justify-content: space-between;\n align-items: flex-end;\n height: 120px;\n gap: var(--space-xs);\n padding: 0 var(--space-xs);\n}\n\n.histogram-bar-wrapper {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n height: 100%;\n animation: histogram-fade-in 0.3s ease forwards;\n opacity: 0;\n}\n\n.histogram-bar {\n width: 100%;\n max-width: 40px;\n background: linear-gradient(180deg, var(--color-accent-primary), var(--color-accent-brand));\n border-radius: var(--radius-sm) var(--radius-sm) 0 0;\n display: flex;\n align-items: flex-start;\n justify-content: center;\n transition: height 0.5s ease;\n min-height: 0;\n}\n\n.histogram-bar.is-correct {\n background: linear-gradient(180deg, var(--color-success-neon), var(--color-success));\n box-shadow: var(--glow-success);\n}\n\n.bar-count {\n font-size: var(--font-size-xs);\n font-weight: var(--font-weight-bold);\n color: var(--color-text-white);\n padding-top: var(--space-xs);\n}\n\n.histogram-label {\n font-size: var(--font-size-xs);\n color: var(--color-text-neon-muted);\n margin-top: var(--space-xs);\n}\n\n@keyframes histogram-fade-in {\n from {\n opacity: 0;\n transform: translateY(10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n/* Achievements */\n.analytics-achievements {\n display: flex;\n flex-direction: column;\n gap: var(--space-sm);\n text-align: left;\n}\n\n.achievement-item {\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n font-size: var(--font-size-sm);\n color: var(--color-text-white);\n}\n\n.achievement-emoji {\n font-size: var(--font-size-lg);\n}\n\n.achievement-label {\n color: var(--color-text-neon-muted);\n}\n\n.achievement-names {\n font-weight: var(--font-weight-semibold);\n}\n\n.achievement-value {\n color: var(--color-text-neon-muted);\n}\n\n/* Empty state */\n.analytics-empty {\n text-align: center;\n color: var(--color-text-neon-muted);\n padding: var(--space-lg);\n font-style: italic;\n}\n\n/* Reduced motion support (AC6) */\n@media (prefers-reduced-motion: reduce) {\n .histogram-bar-wrapper {\n animation: none;\n opacity: 1;\n }\n\n .histogram-bar {\n transition: none;\n }\n}\n\n/* Reveal Emotion (Story 9.4) */\n.reveal-emotion {\n text-align: center;\n font-size: var(--font-size-2xl);\n font-weight: var(--font-weight-bold);\n margin-bottom: var(--space-md);\n animation: reveal-emotion-entrance 0.5s ease-out;\n}\n\n.reveal-emotion--exact {\n color: var(--color-success);\n text-shadow: 0 0 20px var(--color-success);\n}\n\n.reveal-emotion--close {\n color: var(--color-warning);\n animation: reveal-emotion-entrance 0.5s ease-out, reveal-shake 0.5s ease-in-out 0.5s;\n}\n\n.reveal-emotion--wrong {\n color: var(--color-text-muted);\n}\n\n.reveal-emotion--missed {\n color: var(--color-text-muted);\n opacity: 0.7;\n}\n\n.reveal-emotion-subtitle {\n font-size: var(--font-size-base);\n font-weight: var(--font-weight-normal);\n margin-top: var(--space-xs);\n opacity: 0.8;\n}\n\n@keyframes reveal-emotion-entrance {\n 0% { opacity: 0; transform: scale(0.8); }\n 50% { transform: scale(1.1); }\n 100% { opacity: 1; transform: scale(1); }\n}\n\n@keyframes reveal-shake {\n 0%, 100% { transform: translateX(0); }\n 20%, 60% { transform: translateX(-5px); }\n 40%, 80% { transform: translateX(5px); }\n}\n\n/* Confetti Canvas (Story 9.4, Story 14.5) */\n.confetti-canvas {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n pointer-events: none;\n z-index: var(--z-modal);\n}\n\n/* canvas-confetti library creates canvas dynamically at body level - ensure non-blocking (AC6) */\n/* M2 fix: Scoped to body > canvas to avoid affecting other fixed canvases */\nbody > canvas[style*=\"position: fixed\"] {\n pointer-events: none !important;\n}\n\n/* Score breakdown fade-in delay (Story 9.4) */\n.personal-result.is-delayed {\n opacity: 0;\n animation: fade-in-delay 0.5s ease-out 1s forwards;\n}\n\n@keyframes fade-in-delay {\n to { opacity: 1; }\n}\n\n/* Reduced motion support for reveal */\n@media (prefers-reduced-motion: reduce) {\n .reveal-emotion,\n .reveal-emotion--close {\n animation: none;\n }\n .personal-result.is-delayed {\n opacity: 1;\n animation: none;\n }\n}\n\n/* Personal Result */\n.personal-result {\n width: 100%;\n background: var(--color-bg-card-alt);\n padding: var(--space-md);\n border-radius: var(--radius-lg);\n margin-bottom: var(--space-lg);\n}\n\n.result-header {\n font-size: var(--font-size-base);\n font-weight: var(--font-weight-semibold);\n color: var(--color-text-muted);\n margin-bottom: var(--space-sm);\n}\n\n.result-content {\n display: flex;\n flex-direction: column;\n gap: var(--space-sm);\n}\n\n.result-row {\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.result-label {\n font-size: var(--font-size-base);\n color: var(--color-text-muted);\n}\n\n.result-value {\n font-size: var(--font-size-md);\n font-weight: var(--font-weight-semibold);\n color: var(--color-text-primary);\n}\n\n.result-value.is-exact {\n color: var(--color-success);\n}\n\n.result-value.is-close {\n color: var(--color-warning);\n}\n\n.result-value.is-far {\n color: var(--color-error);\n}\n\n/* Speed bonus indicator (Story 5.1) */\n.result-value.is-bonus {\n color: var(--color-warning);\n font-weight: var(--font-weight-bold);\n}\n\n.result-score {\n font-size: var(--font-size-4xl);\n font-weight: var(--font-weight-bold);\n color: var(--color-accent-brand);\n margin-top: var(--space-sm);\n}\n\n.result-missed {\n font-size: var(--font-size-md);\n color: var(--color-error);\n font-weight: var(--font-weight-semibold);\n}\n\n/* Streak bonus styling (Story 5.2) */\n.result-value.is-streak {\n color: var(--color-error);\n font-weight: var(--font-weight-bold);\n}\n\n.streak-bonus-row {\n background: linear-gradient(90deg, var(--color-warning-light), #fde68a);\n padding: var(--space-sm) var(--space-md);\n border-radius: var(--radius-md);\n margin: var(--space-sm) 0;\n color: #1a1a1a;\n}\n\n.result-total {\n font-size: var(--font-size-2xl);\n font-weight: var(--font-weight-bold);\n color: var(--color-success);\n margin-top: var(--space-sm);\n padding-top: var(--space-sm);\n border-top: 2px dashed var(--color-border-light);\n}\n\n/* Leaderboard streak indicator (Story 5.2) */\n.streak-indicator {\n display: inline-flex;\n align-items: center;\n gap: 2px;\n font-size: var(--font-size-sm);\n color: var(--color-warning);\n font-weight: var(--font-weight-semibold);\n}\n\n.streak-indicator::before {\n content: \"\\01F525\";\n}\n\n/* Bet toggle (Story 5.3) */\n.bet-container {\n margin-bottom: var(--space-md);\n /* Fix Safari desktop click issue - establish stacking context */\n position: relative;\n z-index: 1;\n}\n\n.bet-toggle {\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n padding: var(--space-sm) var(--space-xl);\n background: var(--color-bg-card-alt);\n border: 2px solid var(--color-border-medium);\n border-radius: var(--radius-lg);\n cursor: pointer;\n /* Fix Safari: use specific properties instead of 'all' */\n transition: background var(--transition-fast), border-color var(--transition-fast), color var(--transition-fast);\n font-size: var(--font-size-base);\n font-weight: var(--font-weight-semibold);\n color: var(--color-text-muted);\n width: 100%;\n justify-content: center;\n /* Fix Safari desktop click handling */\n -webkit-tap-highlight-color: transparent;\n -webkit-user-select: none;\n user-select: none;\n touch-action: manipulation;\n}\n\n.bet-toggle:hover {\n border-color: var(--color-text-light);\n}\n\n.bet-toggle.is-active {\n background: var(--color-warning-light);\n border-color: var(--color-warning);\n color: #92400e;\n}\n\n.bet-toggle.is-active .bet-icon {\n animation: dice-shake var(--transition-slow) ease;\n}\n\n@keyframes dice-shake {\n 0%, 100% { transform: rotate(0deg); }\n 25% { transform: rotate(-10deg); }\n 75% { transform: rotate(10deg); }\n}\n\n/* Dark theme bet toggle (Story 9.10) */\nbody.theme-dark .bet-toggle {\n background: rgba(255, 255, 255, 0.1);\n border: 1px solid rgba(255, 255, 255, 0.2);\n color: var(--color-text-white);\n}\n\nbody.theme-dark .bet-toggle.is-active {\n background: var(--color-warning);\n border-color: var(--color-warning);\n color: var(--color-text-primary);\n}\n\n/* Bet outcomes */\n.bet-won-row {\n background: linear-gradient(90deg, var(--color-success-light), #a7f3d0);\n padding: var(--space-sm) var(--space-sm);\n border-radius: var(--radius-md);\n margin: var(--space-sm) 0;\n}\n\n/* Bet rows have light backgrounds - need dark text even in dark mode */\n.bet-won-row .result-label,\nbody.theme-dark .bet-won-row .result-label {\n color: #166534;\n}\n\n.result-value.is-bet-won,\nbody.theme-dark .result-value.is-bet-won {\n color: #166534;\n font-weight: var(--font-weight-bold);\n}\n\n.bet-lost-row {\n background: linear-gradient(90deg, var(--color-error-light), #fecaca);\n padding: var(--space-sm) var(--space-sm);\n border-radius: var(--radius-md);\n margin: var(--space-sm) 0;\n}\n\n/* Bet rows have light backgrounds - need dark text even in dark mode */\n.bet-lost-row .result-label,\nbody.theme-dark .bet-lost-row .result-label {\n color: #991b1b;\n}\n\n.result-value.is-bet-lost,\nbody.theme-dark .result-value.is-bet-lost {\n color: #991b1b;\n font-weight: var(--font-weight-bold);\n}\n\n/* Missed round styling (Story 5.4) */\n.result-missed-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--space-sm);\n padding: var(--space-md);\n}\n\n.result-missed-icon {\n font-size: var(--font-size-2xl);\n}\n\n.result-missed-text {\n font-size: var(--font-size-lg);\n font-weight: var(--font-weight-semibold);\n color: var(--color-text-muted);\n}\n\n.streak-broken {\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n margin-top: var(--space-sm);\n padding: var(--space-sm) var(--space-md);\n background: var(--color-error-light);\n border-radius: var(--radius-md);\n}\n\n.streak-broken-icon {\n font-size: var(--font-size-xl);\n}\n\n.streak-broken-text {\n font-size: var(--font-size-base);\n font-weight: var(--font-weight-semibold);\n color: var(--color-error-dark);\n}\n\n/* Streak-Shield (#1666) \u2014 the counterpart to .streak-broken above. Same\n shape on purpose: both explain what just happened to a streak, so they\n should read as one pair rather than two unrelated notices. Success colours\n because the run survived. */\n.streak-shield-used {\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n margin-top: var(--space-sm);\n padding: var(--space-sm) var(--space-md);\n background: var(--color-success-light);\n border-radius: var(--radius-md);\n}\n\n.streak-shield-icon {\n font-size: var(--font-size-xl);\n}\n\n.streak-shield-text {\n font-size: var(--font-size-base);\n font-weight: var(--font-weight-semibold);\n color: var(--color-success-hover);\n}\n\n.result-score.is-zero {\n color: var(--color-text-light);\n font-size: var(--font-size-2xl);\n}\n\n/* ============================================\n Leaderboard (Story 5.5)\n ============================================ */\n\n/* Game view leaderboard - uses collapsible section pattern */\n.leaderboard-section {\n width: 100%;\n background: var(--color-surface-dark);\n border: 1px solid var(--color-border-neon);\n border-radius: var(--radius-md);\n overflow: hidden;\n}\n\n.leaderboard-section .section-header-collapsible {\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n width: 100%;\n padding: var(--space-sm) var(--space-md);\n background: transparent;\n border: none;\n color: var(--color-text-white);\n font-size: 0.875rem;\n font-weight: 600;\n cursor: pointer;\n text-align: left;\n}\n\n.leaderboard-section .section-header-collapsible .section-icon {\n font-size: 1rem;\n}\n\n.leaderboard-section .section-header-collapsible .section-summary {\n margin-left: auto;\n font-size: 0.75rem;\n font-weight: 400;\n color: var(--color-accent-secondary);\n background: rgba(0, 245, 255, 0.1);\n padding: 2px 8px;\n border-radius: var(--radius-sm);\n}\n\n.leaderboard-section .section-header-collapsible .section-toggle {\n margin-left: var(--space-sm);\n font-size: 0.625rem;\n color: var(--color-text-neon-muted);\n transition: transform 0.2s ease;\n}\n\n.leaderboard-section .section-content {\n padding: 0;\n}\n\n.leaderboard-section .leaderboard-list {\n max-height: 200px;\n overflow-y: auto;\n}\n\n.leaderboard-section.collapsed .section-content {\n display: none;\n}\n\n.leaderboard-section:not(.collapsed) .section-toggle {\n transform: rotate(180deg);\n}\n\n/* Leaderboard container (legacy) */\n.leaderboard {\n background: var(--color-bg-white);\n border-radius: var(--radius-lg);\n box-shadow: var(--shadow-md);\n overflow: hidden;\n width: 100%;\n margin-bottom: var(--space-md);\n}\n\n.leaderboard.is-compact .leaderboard-list {\n max-height: 120px;\n}\n\n.leaderboard.is-expanded .leaderboard-list {\n max-height: 400px;\n}\n\n.leaderboard.is-prominent {\n margin-top: var(--space-md);\n}\n\n.leaderboard.is-prominent .leaderboard-list {\n max-height: 280px;\n}\n\n.leaderboard-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: var(--space-sm) var(--space-md);\n background: var(--color-bg-card-alt);\n border-bottom: 1px solid var(--color-border-light);\n}\n\n.leaderboard-title {\n font-size: var(--font-size-base);\n font-weight: var(--font-weight-semibold);\n color: var(--color-text-secondary);\n}\n\n.leaderboard-toggle {\n background: none;\n border: none;\n cursor: pointer;\n padding: var(--space-xs);\n min-width: auto;\n min-height: auto;\n color: var(--color-text-muted);\n}\n\n.leaderboard-list {\n max-height: 200px;\n overflow-y: auto;\n /* Story 18.1: CSS containment for scroll performance (layout style paint, not strict/size) */\n contain: layout style paint;\n will-change: transform;\n}\n\n/* Story 18.1: Spacer elements for lazy loading virtual scroll */\n.leaderboard-spacer-top,\n.leaderboard-spacer-bottom {\n flex-shrink: 0;\n pointer-events: none;\n}\n\n/* Story 18.1: Sentinel elements for IntersectionObserver */\n.leaderboard-sentinel {\n flex-shrink: 0;\n pointer-events: none;\n visibility: hidden;\n}\n\n/* Leaderboard entries */\n.leaderboard-entry {\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n padding: 10px var(--space-md);\n border-bottom: 1px solid var(--color-bg-card-alt);\n transition: background var(--transition-fast);\n /* Story 18.1: CSS containment for layout isolation */\n contain: content;\n height: 48px;\n box-sizing: border-box;\n}\n\n.leaderboard-entry:last-child {\n border-bottom: none;\n}\n\n.leaderboard-entry.is-current {\n background: #eff6ff;\n border-left: 3px solid var(--color-accent-blue);\n}\n\n/* Top 3 styling */\n.leaderboard-entry.is-top-1 {\n background: linear-gradient(90deg, var(--color-warning-light), #fde68a);\n}\n\n.leaderboard-entry.is-top-1 .entry-rank {\n color: #b45309;\n font-weight: var(--font-weight-bold);\n}\n\n.leaderboard-entry.is-top-2 {\n background: linear-gradient(90deg, var(--color-bg-card-alt), var(--color-border-light));\n}\n\n.leaderboard-entry.is-top-2 .entry-rank {\n color: var(--color-text-muted);\n font-weight: var(--font-weight-bold);\n}\n\n.leaderboard-entry.is-top-3 {\n background: linear-gradient(90deg, #fed7aa, #fdba74);\n}\n\n.leaderboard-entry.is-top-3 .entry-rank {\n color: #c2410c;\n font-weight: var(--font-weight-bold);\n}\n\n.entry-rank {\n font-size: var(--font-size-sm);\n font-weight: var(--font-weight-semibold);\n color: var(--color-text-muted);\n min-width: 28px;\n}\n\n.entry-name {\n flex: 1;\n font-size: var(--font-size-base);\n font-weight: var(--font-weight-medium);\n color: var(--color-text-primary);\n display: flex;\n align-items: center;\n gap: var(--space-xs);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.entry-meta {\n display: flex;\n align-items: center;\n gap: var(--space-xs);\n}\n\n.entry-score {\n font-size: var(--font-size-base);\n font-weight: var(--font-weight-bold);\n color: var(--color-accent-brand);\n min-width: 40px;\n text-align: right;\n}\n\n/* Rank change indicators */\n.rank-up {\n font-size: var(--font-size-xs);\n color: var(--color-success);\n font-weight: var(--font-weight-semibold);\n}\n\n.rank-down {\n font-size: var(--font-size-xs);\n color: var(--color-error);\n font-weight: var(--font-weight-semibold);\n}\n\n/* Rank change animations (Story 9.5) */\n.leaderboard-entry--climbing {\n animation: leaderboard-climb 400ms ease-out;\n}\n\n.leaderboard-entry--falling {\n animation: leaderboard-fall 400ms ease-out;\n}\n\n/* Disconnected player in leaderboard (Story 11.4) */\n.leaderboard-entry--disconnected {\n opacity: 0.5;\n transition: opacity 0.3s ease;\n}\n\n@keyframes leaderboard-climb {\n 0% { transform: translateY(10px); opacity: 0.7; background: rgba(0, 255, 136, 0.2); }\n 100% { transform: translateY(0); opacity: 1; background: transparent; }\n}\n\n@keyframes leaderboard-fall {\n 0% { transform: translateY(-10px); opacity: 0.7; background: rgba(255, 0, 64, 0.2); }\n 100% { transform: translateY(0); opacity: 1; background: transparent; }\n}\n\n/* Streak indicators (Story 9.5) */\n.streak-indicator {\n font-size: var(--font-size-xs);\n color: var(--color-warning);\n}\n\n.streak-indicator--hot {\n text-shadow: 0 0 8px var(--color-warning);\n animation: streak-pulse 1s ease-in-out infinite;\n}\n\n@keyframes streak-pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.7; }\n}\n\n/* Leaderboard separator (Story 9.5) */\n.leaderboard-separator {\n text-align: center;\n padding: var(--space-xs) var(--space-md);\n color: var(--color-text-muted);\n font-size: var(--font-size-sm);\n border-bottom: 1px solid var(--color-bg-card-alt);\n}\n\n/* Reduced motion support for leaderboard */\n@media (prefers-reduced-motion: reduce) {\n .leaderboard-entry--climbing,\n .leaderboard-entry--falling {\n animation: none;\n }\n .streak-indicator--hot {\n animation: none;\n }\n}\n\n/* Quick you indicator */\n.leaderboard-you {\n position: sticky;\n bottom: 0;\n padding: var(--space-sm) var(--space-md);\n background: var(--color-accent-blue);\n color: var(--color-text-white);\n font-size: var(--font-size-sm);\n font-weight: var(--font-weight-semibold);\n text-align: center;\n}\n\n/* ============================================\n Final Leaderboard / End View (Story 5.6)\n ============================================ */\n\n/* End view container */\n.end-container {\n padding: var(--space-lg);\n max-width: 480px;\n margin: 0 auto;\n text-align: center;\n}\n\n.end-header {\n margin-bottom: var(--space-lg);\n}\n\n.end-title {\n font-size: var(--font-size-4xl);\n font-weight: var(--font-weight-extrabold);\n color: var(--color-text-primary);\n margin-bottom: var(--space-sm);\n}\n\n.end-subtitle {\n font-size: var(--font-size-md);\n color: var(--color-text-muted);\n margin: 0;\n}\n\n/* Podium */\n.podium {\n display: flex;\n justify-content: center;\n align-items: flex-end;\n gap: var(--space-sm);\n margin-bottom: var(--space-xl);\n}\n\n.podium-place {\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100px;\n}\n\n.podium-medal {\n font-size: var(--font-size-4xl);\n margin-bottom: var(--space-sm);\n}\n\n.podium-name {\n font-size: var(--font-size-base);\n font-weight: var(--font-weight-semibold);\n color: var(--color-text-primary);\n margin-bottom: var(--space-xs);\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.podium-score {\n font-size: var(--font-size-sm);\n color: var(--color-text-muted);\n margin-bottom: var(--space-sm);\n}\n\n.podium-stand {\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: var(--font-size-2xl);\n font-weight: var(--font-weight-extrabold);\n color: var(--color-text-white);\n border-radius: var(--radius-md) var(--radius-md) 0 0;\n}\n\n.podium-1 .podium-stand {\n height: 80px;\n background: linear-gradient(180deg, #fbbf24, var(--color-warning-dark));\n}\n\n.podium-2 .podium-stand {\n height: 60px;\n background: linear-gradient(180deg, var(--color-text-light), var(--color-text-muted));\n}\n\n.podium-3 .podium-stand {\n height: 40px;\n background: linear-gradient(180deg, #fb923c, #c2410c);\n}\n\n/* Your result */\n.your-result {\n background: #eff6ff;\n border-radius: var(--radius-xl);\n padding: var(--space-lg);\n margin-bottom: var(--space-lg);\n}\n\n.your-result-header {\n font-size: var(--font-size-base);\n font-weight: var(--font-weight-semibold);\n color: var(--color-accent-blue);\n margin-bottom: var(--space-sm);\n}\n\n.your-result-rank {\n font-size: var(--font-size-2xl);\n font-weight: var(--font-weight-extrabold);\n color: var(--color-text-primary);\n}\n\n.your-result-score {\n font-size: var(--font-size-lg);\n color: var(--color-text-muted);\n margin-bottom: var(--space-md);\n}\n\n.your-result-stats {\n display: flex;\n justify-content: center;\n gap: var(--space-lg);\n}\n\n.stat {\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n\n.stat-value {\n font-size: var(--font-size-2xl);\n font-weight: var(--font-weight-bold);\n color: var(--color-accent-brand);\n}\n\n.stat-label {\n font-size: var(--font-size-sm);\n color: var(--color-text-muted);\n}\n\n/* Final leaderboard */\n.final-leaderboard {\n background: var(--color-bg-white);\n border-radius: var(--radius-lg);\n overflow: hidden;\n margin-bottom: var(--space-lg);\n box-shadow: var(--shadow-md);\n}\n\n.final-leaderboard-header {\n padding: var(--space-sm) var(--space-md);\n background: var(--color-bg-card-alt);\n font-size: var(--font-size-base);\n font-weight: var(--font-weight-semibold);\n color: var(--color-text-secondary);\n text-align: left;\n}\n\n.final-leaderboard-list {\n max-height: 200px;\n overflow-y: auto;\n}\n\n.final-entry {\n display: flex;\n align-items: center;\n padding: 10px var(--space-md);\n border-bottom: 1px solid var(--color-bg-card-alt);\n}\n\n.final-entry:last-child {\n border-bottom: none;\n}\n\n.final-entry.is-current {\n background: #eff6ff;\n}\n\n/* Disconnected player in final leaderboard (Story 11.4) */\n.final-entry--disconnected {\n opacity: 0.5;\n}\n\n.final-rank {\n font-size: var(--font-size-sm);\n font-weight: var(--font-weight-semibold);\n color: var(--color-text-muted);\n width: 32px;\n}\n\n.final-name {\n flex: 1;\n font-size: var(--font-size-base);\n color: var(--color-text-primary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.final-score {\n font-size: var(--font-size-base);\n font-weight: var(--font-weight-semibold);\n color: var(--color-accent-brand);\n}\n\n/* Admin controls for end */\n.end-admin-controls {\n display: flex;\n flex-direction: column;\n gap: var(--space-md);\n margin-bottom: var(--space-md);\n}\n\n.new-game-btn {\n width: 100%;\n padding: var(--space-md) var(--space-xl);\n font-size: var(--font-size-lg);\n font-weight: var(--font-weight-semibold);\n color: var(--color-text-white);\n background: var(--color-success);\n border: none;\n border-radius: var(--radius-lg);\n cursor: pointer;\n transition: background var(--transition-fast);\n min-width: auto;\n min-height: auto;\n}\n\n.new-game-btn:hover {\n background: var(--color-success-hover);\n}\n\n.new-game-btn:disabled {\n background: var(--color-text-light);\n cursor: not-allowed;\n}\n\n/* Player message */\n.end-player-message {\n color: var(--color-text-muted);\n}\n\n.end-player-message p {\n margin: 0 0 var(--space-sm) 0;\n}\n\n.end-hint {\n font-size: var(--font-size-base);\n}\n\n.rejoin-hint {\n font-size: var(--font-size-base);\n color: var(--color-text-muted);\n margin-top: var(--space-sm);\n}\n\n/* Admin Controls */\n.reveal-report-row {\n display: flex;\n justify-content: center;\n margin-top: var(--space-md);\n}\n\n.reveal-report-btn {\n background: none;\n border: none;\n padding: var(--space-xs) var(--space-sm);\n font-size: var(--font-size-sm);\n color: var(--color-text-muted);\n cursor: pointer;\n border-radius: var(--radius-sm);\n transition: color 0.15s ease, opacity 0.15s ease;\n opacity: 0.7;\n}\n\n.reveal-report-btn:hover {\n color: var(--color-text-neon-muted);\n opacity: 1;\n}\n\n.reveal-report-btn:disabled {\n cursor: default;\n opacity: 0.5;\n}\n\n.reveal-admin-controls {\n margin-top: var(--space-md);\n}\n\n.next-round-btn {\n padding: var(--space-md) var(--space-xl);\n font-size: var(--font-size-lg);\n font-weight: var(--font-weight-semibold);\n color: var(--color-text-white);\n background: var(--color-accent-brand);\n border: none;\n border-radius: var(--radius-lg);\n cursor: pointer;\n transition: all var(--transition-fast);\n}\n\n.next-round-btn:hover {\n background: var(--color-accent-brand-hover);\n}\n\n.next-round-btn:disabled {\n background: var(--color-text-light);\n cursor: not-allowed;\n}\n\n.next-round-btn.is-final {\n background: var(--color-success);\n}\n\n.next-round-btn.is-final:hover {\n background: var(--color-success-hover);\n}\n\n/* Reveal Admin Buttons Layout (Story 16.5) */\n.reveal-admin-buttons {\n display: flex;\n flex-direction: column;\n gap: var(--space-md);\n align-items: center;\n}\n\n@media (min-width: 480px) {\n .reveal-admin-buttons {\n flex-direction: row;\n justify-content: center;\n }\n}\n\n/* Invite Button (Story 16.5) */\n.invite-btn {\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n padding: var(--space-sm) var(--space-lg);\n font-size: var(--font-size-md);\n font-weight: var(--font-weight-medium);\n color: var(--color-text-white);\n background: var(--color-bg-tertiary);\n border: 1px solid var(--color-border-subtle);\n border-radius: var(--radius-lg);\n cursor: pointer;\n transition: all var(--transition-fast);\n min-height: 44px;\n min-width: 44px;\n}\n\n.invite-btn:hover {\n background: var(--color-bg-secondary);\n border-color: var(--color-border-neon);\n}\n\n.invite-btn:active {\n transform: scale(0.98);\n}\n\n.invite-btn-icon {\n font-size: var(--font-size-lg);\n}\n\n.invite-btn-label {\n white-space: nowrap;\n}\n\n/* Invite Modal (Story 16.5) */\n.invite-modal {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: var(--z-modal);\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.invite-modal.hidden {\n display: none;\n}\n\n.invite-modal-backdrop {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.8);\n}\n\n.invite-modal-content {\n position: relative;\n background: var(--color-bg-primary);\n border: 1px solid var(--color-border-neon);\n padding: var(--space-lg);\n border-radius: var(--radius-xl);\n text-align: center;\n max-width: 90vw;\n max-height: 90vh;\n overflow-y: auto;\n animation: modalFadeIn var(--transition-normal) ease-out;\n}\n\n@keyframes modalFadeIn {\n from {\n opacity: 0;\n transform: scale(0.95);\n }\n to {\n opacity: 1;\n transform: scale(1);\n }\n}\n\n.invite-modal-title {\n font-size: var(--font-size-xl);\n font-weight: var(--font-weight-bold);\n color: var(--color-text-white);\n margin: 0 0 var(--space-xs);\n}\n\n.invite-modal-hint {\n font-size: var(--font-size-sm);\n color: var(--color-text-muted);\n margin: 0 0 var(--space-md);\n}\n\n.invite-modal-code {\n display: inline-block;\n padding: var(--space-md);\n background: var(--color-bg-white);\n border-radius: var(--radius-md);\n margin-bottom: var(--space-md);\n}\n\n.invite-modal-code img {\n display: block;\n width: 200px;\n height: 200px;\n}\n\n@media (min-width: 480px) {\n .invite-modal-code img {\n width: 256px;\n height: 256px;\n }\n}\n\n.invite-modal-url-container {\n display: flex;\n gap: var(--space-xs);\n margin-bottom: var(--space-sm);\n max-width: 100%;\n}\n\n.invite-modal-url {\n flex: 1;\n padding: var(--space-sm) var(--space-md);\n font-size: var(--font-size-sm);\n font-family: var(--font-family-mono);\n color: var(--color-text-primary);\n background: var(--color-bg-secondary);\n border: 1px solid var(--color-border-subtle);\n border-radius: var(--radius-md);\n min-width: 0;\n text-overflow: ellipsis;\n}\n\nbody.theme-dark .invite-modal-url {\n color: #e2e8f0;\n background: rgba(255, 255, 255, 0.1);\n border-color: rgba(255, 255, 255, 0.15);\n}\n\n.invite-copy-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--space-sm);\n min-width: 44px;\n min-height: 44px;\n background: var(--color-accent-brand);\n border: none;\n border-radius: var(--radius-md);\n cursor: pointer;\n transition: all var(--transition-fast);\n}\n\n.invite-copy-btn:hover {\n background: var(--color-accent-brand-hover);\n}\n\n.invite-copy-btn:active {\n transform: scale(0.95);\n}\n\n.invite-copy-icon {\n font-size: var(--font-size-lg);\n}\n\n.invite-copy-feedback {\n font-size: var(--font-size-sm);\n color: var(--color-success);\n margin: 0 0 var(--space-md);\n animation: fadeInOut 2s ease-in-out;\n}\n\n.invite-copy-feedback.hidden {\n display: none;\n}\n\n@keyframes fadeInOut {\n 0%, 100% { opacity: 0; }\n 10%, 80% { opacity: 1; }\n}\n\n.invite-modal-close {\n min-width: 120px;\n min-height: 48px;\n}\n\n/* ============================================\n Player Result Cards (Story 9.10)\n ============================================ */\n\n.reveal-results-cards {\n margin-top: var(--space-lg);\n width: 100%;\n overflow: visible;\n}\n\n.results-cards-header {\n font-size: var(--font-size-lg);\n font-weight: var(--font-weight-semibold);\n color: var(--color-text-secondary);\n margin-bottom: var(--space-sm);\n text-align: center;\n}\n\n/* Horizontal row with overflow scroll (#355) */\n.results-cards-scroll {\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n gap: var(--space-sm);\n width: 100%;\n overflow-x: auto;\n overflow-y: hidden;\n padding-bottom: var(--space-xs);\n -webkit-overflow-scrolling: touch;\n}\n\n.results-cards-scroll::-webkit-scrollbar {\n height: 3px;\n}\n\n.results-cards-scroll::-webkit-scrollbar-thumb {\n background: var(--color-border-light);\n border-radius: 2px;\n}\n\n.result-card {\n background: var(--color-bg-card);\n border-radius: var(--radius-md);\n padding: var(--space-sm);\n text-align: center;\n border: 2px solid var(--color-border-light);\n transition: all var(--transition-fast);\n flex: 1 1 140px;\n min-width: 140px;\n max-width: 220px;\n box-sizing: border-box;\n}\n\n.result-card.is-current {\n border-color: var(--color-accent-brand);\n background: rgba(99, 102, 241, 0.1);\n}\n\n/* Score-based classes per AC #13 (Code Review fix) */\n.result-card.is-score-high {\n border-color: var(--color-success);\n background: rgba(16, 185, 129, 0.1);\n}\n\n.result-card.is-score-medium {\n border-color: var(--color-warning);\n background: rgba(245, 158, 11, 0.1);\n}\n\n.result-card.is-score-zero {\n opacity: 0.6;\n}\n\n.card-name {\n font-size: var(--font-size-sm);\n font-weight: var(--font-weight-semibold);\n color: var(--color-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n margin-bottom: 2px;\n}\n\n.card-guess {\n font-size: var(--font-size-xl);\n font-weight: var(--font-weight-bold);\n color: var(--color-text-primary);\n}\n\n.card-accuracy {\n font-size: var(--font-size-xs);\n color: var(--color-text-muted);\n}\n\n.result-card.is-score-high .card-accuracy {\n color: var(--color-success);\n font-weight: var(--font-weight-semibold);\n}\n\n.card-score {\n font-size: var(--font-size-sm);\n font-weight: var(--font-weight-semibold);\n color: var(--color-success);\n margin-top: 2px;\n}\n\n.card-bet {\n margin-left: 4px;\n}\n\n/* Dark theme result cards */\nbody.theme-dark .result-card {\n background: rgba(255, 255, 255, 0.05);\n border-color: rgba(255, 255, 255, 0.1);\n}\n\nbody.theme-dark .result-card.is-current {\n border-color: var(--color-accent-neon);\n background: rgba(0, 245, 255, 0.1);\n}\n\n/* Dark theme score-based classes (Code Review fix) */\nbody.theme-dark .result-card.is-score-high {\n border-color: var(--color-success-neon);\n background: rgba(0, 255, 136, 0.1);\n}\n\nbody.theme-dark .result-card.is-score-medium {\n border-color: var(--color-warning);\n background: rgba(245, 158, 11, 0.15);\n}\n\nbody.theme-dark .card-name,\nbody.theme-dark .card-guess {\n color: var(--color-text-white);\n}\n\nbody.theme-dark .card-accuracy {\n color: var(--color-text-neon-muted);\n}\n\nbody.theme-dark .result-card.is-score-high .card-accuracy {\n color: var(--color-success-neon);\n}\n\nbody.theme-dark .card-score {\n color: var(--color-success-neon);\n}\n\n/* ============================================\n Admin Control Bar (Story 6.1)\n ============================================ */\n\n.admin-control-bar {\n position: fixed;\n bottom: 0;\n left: 0;\n right: 0;\n display: flex;\n justify-content: space-around;\n align-items: center;\n padding: var(--space-sm) var(--space-sm);\n padding-bottom: calc(var(--space-sm) + env(safe-area-inset-bottom));\n background: rgba(0, 0, 0, 0.9);\n border-top: 1px solid var(--color-border-dark);\n z-index: var(--z-control-bar);\n}\n\n.admin-control-bar.hidden {\n display: none;\n}\n\n.control-btn {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n min-width: 44px;\n min-height: 44px;\n padding: var(--space-sm) var(--space-sm);\n background: #2a2a2a;\n border: none;\n border-radius: var(--radius-md);\n color: var(--color-text-white);\n cursor: pointer;\n transition: background var(--transition-fast), opacity var(--transition-fast);\n}\n\n.control-btn:hover:not(.is-disabled) {\n background: #3a3a3a;\n}\n\n.control-btn:active:not(.is-disabled) {\n background: #4a4a4a;\n}\n\n.control-btn.is-disabled {\n opacity: 0.4;\n cursor: not-allowed;\n}\n\n.control-btn--danger {\n background: #7f1d1d;\n}\n\n.control-btn--danger:hover:not(.is-disabled) {\n background: #991b1b;\n}\n\n.control-btn.is-stopped {\n background: var(--color-text-secondary);\n opacity: 0.7;\n}\n\n.control-btn.is-stopped .control-icon {\n color: var(--color-success);\n}\n\n/* Volume indicator popup (Story 6.4) */\n.volume-indicator {\n position: absolute;\n bottom: 100%;\n left: 50%;\n transform: translateX(-50%);\n background: rgba(0, 0, 0, 0.9);\n color: var(--color-text-white);\n padding: var(--space-sm) var(--space-md);\n border-radius: var(--radius-md);\n font-size: var(--font-size-base);\n font-weight: var(--font-weight-semibold);\n margin-bottom: var(--space-sm);\n opacity: 0;\n transition: opacity var(--transition-normal);\n pointer-events: none;\n white-space: nowrap;\n}\n\n.volume-indicator.is-visible {\n opacity: 1;\n}\n\n/* Volume button at limit (Story 6.4) */\n.control-btn.is-at-limit {\n opacity: 0.5;\n}\n\n.control-btn.is-at-limit:active {\n transform: none;\n}\n\n.control-icon {\n font-size: var(--font-size-xl);\n line-height: 1;\n}\n\n/* #1048: REVEAL auto-advance countdown \u2014 replaces the icon in the Next\n button with the remaining seconds while the auto-advance timer runs.\n Tabular numerals so 30 \u2192 29 \u2192 28 doesn't shift the layout. */\n.control-icon.is-countdown {\n font-variant-numeric: tabular-nums;\n font-weight: 700;\n min-width: 1.5em;\n text-align: center;\n}\n\n.control-label {\n font-size: var(--font-size-xs);\n margin-top: 2px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n/* Ensure game-view content doesn't get covered by control bar (M3 fix: conditional) */\n/* 80px admin bar + 60px reaction bar = 140px total clearance */\n.has-control-bar .game-container {\n padding-bottom: 140px;\n}\n\n.has-control-bar .reveal-container {\n padding-bottom: 140px;\n}\n\n.has-control-bar .end-container {\n padding-bottom: 140px;\n}\n\n/* ============================================\n Live Reactions Bar (Story 18.9)\n ============================================ */\n\n.reaction-bar {\n position: fixed;\n bottom: 0; /* Default: at bottom for regular players */\n left: 0;\n right: 0;\n display: flex;\n justify-content: center;\n padding: var(--space-sm);\n padding-bottom: calc(var(--space-sm) + env(safe-area-inset-bottom));\n z-index: var(--z-reaction-bar);\n pointer-events: none; /* Allow clicks through the bar */\n}\n\n/* When admin control bar is visible, position reaction bar above it */\nmain:has(.admin-control-bar:not(.hidden)) .reaction-bar {\n bottom: 70px;\n}\n\n.reaction-bar.hidden {\n display: none;\n}\n\n.reaction-bar-container {\n display: flex;\n gap: var(--space-sm);\n padding: var(--space-sm) var(--space-md);\n background: rgba(0, 0, 0, 0.6);\n border-radius: var(--radius-lg);\n border: 1px solid rgba(255, 255, 255, 0.1);\n backdrop-filter: blur(8px);\n -webkit-backdrop-filter: blur(8px);\n pointer-events: auto; /* Restore clicks on container */\n}\n\n.reaction-btn {\n font-size: 1.5rem;\n padding: var(--space-sm);\n min-width: 44px;\n min-height: 44px;\n background: rgba(30, 30, 40, 0.5);\n border: 1px solid rgba(255, 255, 255, 0.15);\n border-radius: var(--radius-md);\n cursor: pointer;\n transition: transform var(--transition-fast), background var(--transition-fast);\n}\n\n.reaction-btn:hover {\n background: rgba(50, 50, 60, 0.7);\n}\n\n.reaction-btn:active {\n transform: scale(0.9);\n}\n\n/* #1757: used-state feedback. Once a reaction is spent this phase the whole bar\n is disabled; the chosen emoji stays lit so the player sees what they sent. */\n.reaction-btn:disabled {\n cursor: default;\n opacity: 0.45;\n}\n\n.reaction-btn.is-used {\n opacity: 1;\n border-color: var(--color-accent-primary);\n box-shadow: 0 0 12px var(--color-accent-primary);\n}\n\n/* Neon glow effect on tap */\n@media (hover: none) {\n .reaction-btn:active {\n box-shadow: 0 0 15px var(--color-accent-primary);\n }\n}\n\n/* Accessibility: Respect reduced motion preference */\n@media (prefers-reduced-motion: reduce) {\n .reaction-btn {\n transition: none;\n }\n\n .reaction-btn:active {\n transform: none;\n }\n}\n\n/* Floating Reactions Display (Story 18.9) */\n.reaction-container {\n position: fixed;\n bottom: 120px; /* Above reaction bar */\n left: 0;\n right: 0;\n pointer-events: none;\n z-index: 99; /* Below reaction bar */\n}\n\n/* When admin control bar visible, adjust position */\nmain:has(.admin-control-bar:not(.hidden)) .reaction-container {\n bottom: 180px;\n}\n\n.reaction-bubble {\n position: absolute;\n font-size: 1rem;\n font-weight: 600;\n color: var(--color-text-white);\n text-shadow: 0 0 8px var(--color-accent-primary);\n animation: reaction-float 3s ease-out forwards;\n white-space: nowrap;\n}\n\n@keyframes reaction-float {\n 0% {\n opacity: 1;\n transform: translateY(0);\n }\n 70% {\n opacity: 1;\n }\n 100% {\n opacity: 0;\n transform: translateY(calc(-50vh + 60px));\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .reaction-bubble {\n animation: none;\n opacity: 1;\n }\n}\n\n/* ============================================\n Paused View (Story 7-1)\n ============================================ */\n\n.paused-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: var(--space-2xl) var(--space-lg);\n min-height: 60vh;\n text-align: center;\n}\n\n.paused-icon {\n font-size: var(--font-size-hero);\n margin-bottom: var(--space-lg);\n animation: pause-pulse 2s infinite;\n}\n\n@keyframes pause-pulse {\n 0%, 100% { opacity: 1; transform: scale(1); }\n 50% { opacity: 0.6; transform: scale(0.95); }\n}\n\n.paused-container h1 {\n font-size: var(--font-size-3xl);\n font-weight: var(--font-weight-bold);\n color: var(--color-text-primary);\n margin-bottom: var(--space-md);\n}\n\n.paused-container > p {\n font-size: var(--font-size-md);\n color: var(--color-text-muted);\n margin-bottom: var(--space-sm);\n}\n\n.paused-spinner {\n margin: var(--space-xl) 0;\n}\n\n.paused-hint {\n font-size: var(--font-size-base);\n color: var(--color-text-light);\n}\n\n/* ============================================\n Reconnecting Overlay (Story 7-3)\n ============================================ */\n\n.reconnecting-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.8);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: var(--z-overlay);\n}\n\n.reconnecting-overlay.hidden {\n display: none;\n}\n\n.reconnecting-content {\n text-align: center;\n color: var(--color-text-white);\n}\n\n.reconnecting-spinner .spinner {\n border-top-color: var(--color-text-white);\n width: 48px;\n height: 48px;\n margin: 0 auto var(--space-md);\n}\n\n.reconnect-status {\n font-size: var(--font-size-md);\n color: var(--color-border-light);\n}\n\n/* ============================================\n Connection Lost View (Story 7-4)\n ============================================ */\n\n.connection-lost-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: var(--space-2xl) var(--space-lg);\n min-height: 60vh;\n text-align: center;\n}\n\n.connection-lost-icon {\n font-size: var(--font-size-hero);\n margin-bottom: var(--space-lg);\n}\n\n.connection-lost-container h1 {\n font-size: var(--font-size-3xl);\n font-weight: var(--font-weight-bold);\n color: var(--color-text-primary);\n margin-bottom: var(--space-md);\n}\n\n.connection-lost-container > p {\n font-size: var(--font-size-md);\n color: var(--color-text-muted);\n margin-bottom: var(--space-lg);\n}\n\n.connection-lost-hint {\n font-size: var(--font-size-base);\n color: var(--color-text-light);\n margin-top: var(--space-md);\n}\n\n/* Responsive adjustments for Reveal View */\n@media (max-width: 360px) {\n .correct-year {\n font-size: var(--font-size-year);\n }\n\n .reveal-album-cover {\n width: 120px;\n height: 120px;\n }\n}\n\n@media (min-width: 768px) {\n .reveal-album-cover {\n width: 180px;\n height: 180px;\n }\n\n .correct-year {\n font-size: 84px;\n }\n}\n\n/* ============================================\n Accessibility & Reduced Motion (Story 9.7)\n ============================================ */\n\n/* Focus indicators for keyboard navigation */\n:focus-visible {\n outline: 2px solid var(--color-accent-primary);\n outline-offset: 2px;\n}\n\nbody.theme-dark :focus-visible {\n outline-color: var(--color-accent-primary);\n box-shadow: 0 0 0 4px rgba(255, 45, 106, 0.3);\n}\n\n/* Remove default outline for mouse users */\n:focus:not(:focus-visible) {\n outline: none;\n}\n\n/* Global reduced motion - disables all animations */\n@media (prefers-reduced-motion: reduce) {\n *,\n *::before,\n *::after {\n animation-duration: 0.01ms !important;\n animation-iteration-count: 1 !important;\n transition-duration: 0.01ms !important;\n scroll-behavior: auto !important;\n }\n}\n\n/* Day Mode fallback for prefers-color-scheme: light */\n@media (prefers-color-scheme: light) {\n body:not(.theme-dark) {\n --color-bg-primary: #ffffff;\n --color-bg-surface: #f5f5f7;\n --color-bg-card: #ffffff;\n --color-bg-card-alt: #f8fafc;\n --color-text-primary: #1a1a1a;\n --color-text-muted: #666666;\n --color-text-light: #999999;\n --color-border-light: #e5e7eb;\n /* Accents remain vibrant */\n }\n}\n\n/* Screen reader only utility */\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n\n/* Skip link for keyboard users */\n.skip-link {\n position: absolute;\n top: -40px;\n left: 0;\n background: var(--color-accent-primary);\n color: var(--color-text-white);\n padding: var(--space-sm) var(--space-md);\n z-index: var(--z-modal);\n transition: top var(--transition-fast);\n}\n\n.skip-link:focus {\n top: 0;\n}\n\n/* ============================================\n Energy Escalation Pattern (Story 9.9)\n ============================================ */\n\n/* Energy Level Classes - Applied to body */\n\n/* Calm - Join screen (minimal, focused) */\nbody.energy-calm .btn-glow:hover {\n box-shadow: none; /* No glow on calm screens */\n}\n\nbody.energy-calm .wordmark-hero {\n text-shadow: none; /* No hero glow on calm screens */\n}\n\n/* Warmup - Lobby (building excitement) */\nbody.energy-warmup .player-card {\n animation: energy-slide-in 0.3s ease-out;\n}\n\nbody.energy-warmup .qr-container {\n animation: energy-pulse-subtle 3s ease-in-out infinite;\n}\n\n@keyframes energy-slide-in {\n from { opacity: 0; transform: translateY(20px); }\n to { opacity: 1; transform: translateY(0); }\n}\n\n@keyframes energy-pulse-subtle {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.85; }\n}\n\n/* Party - Active gameplay (full effects) */\nbody.energy-party .album-cover {\n box-shadow: 0 0 60px rgba(255, 255, 255, 0.1);\n}\n\nbody.energy-party .submit-btn:not(:disabled) {\n box-shadow: var(--glow-primary);\n}\n\nbody.energy-party .year-display {\n text-shadow: 0 0 20px rgba(255, 45, 106, 0.3);\n}\n\n/* Screen Transitions */\n.view {\n animation: screen-fade-in 0.3s ease-out;\n}\n\n@keyframes screen-fade-in {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n/* Reduced motion - disable energy animations */\n@media (prefers-reduced-motion: reduce) {\n body.energy-warmup .player-card,\n body.energy-warmup .qr-container {\n animation: none;\n }\n .view {\n animation: none;\n }\n}\n\n/* ============================================\n Steal Power-up Styles (Story 15.3)\n ============================================ */\n\n/* Steal indicator now uses .stat-badge--steal in game header */\n\n/* Steal Button */\n.steal-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--space-xs);\n width: 100%;\n padding: var(--space-sm) var(--space-md);\n margin-top: var(--space-sm);\n background: linear-gradient(135deg, var(--color-purple-primary, #8b5cf6), var(--color-purple-secondary, #7c3aed));\n border: none;\n border-radius: var(--radius-lg);\n color: var(--color-text-white);\n font-size: var(--font-size-base);\n font-weight: var(--font-weight-bold);\n text-transform: uppercase;\n letter-spacing: 0.05em;\n cursor: pointer;\n box-shadow: 0 0 20px rgba(139, 92, 246, 0.4);\n transition: all var(--transition-fast);\n}\n\n.steal-btn:hover:not(:disabled) {\n transform: scale(1.03);\n box-shadow: 0 0 30px rgba(139, 92, 246, 0.6);\n}\n\n.steal-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.steal-btn-icon {\n font-size: var(--font-size-lg);\n}\n\n/* Steal Modal */\n.steal-modal {\n position: fixed;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: var(--z-modal);\n}\n\n.steal-modal-backdrop {\n position: absolute;\n inset: 0;\n background: rgba(0, 0, 0, 0.8);\n backdrop-filter: blur(4px);\n}\n\n.steal-modal-content {\n position: relative;\n background: var(--color-bg-card);\n border: 2px solid var(--color-purple-primary, #8b5cf6);\n border-radius: var(--radius-xl);\n padding: var(--space-lg);\n max-width: 320px;\n width: 90%;\n text-align: center;\n box-shadow: 0 0 40px rgba(139, 92, 246, 0.3);\n}\n\n.steal-modal-title {\n font-size: var(--font-size-xl);\n font-weight: var(--font-weight-bold);\n color: var(--color-text-primary);\n margin-bottom: var(--space-xs);\n}\n\n.steal-modal-subtitle {\n font-size: var(--font-size-sm);\n color: var(--color-text-muted);\n margin-bottom: var(--space-md);\n}\n\n.steal-target-list {\n display: flex;\n flex-direction: column;\n gap: var(--space-sm);\n margin-bottom: var(--space-md);\n}\n\n.steal-target-btn {\n display: block;\n width: 100%;\n padding: var(--space-sm) var(--space-md);\n background: var(--color-bg-surface);\n border: 1px solid var(--color-accent-secondary);\n border-radius: var(--radius-md);\n color: var(--color-text-primary);\n font-size: var(--font-size-base);\n font-weight: var(--font-weight-semibold);\n cursor: pointer;\n transition: all var(--transition-fast);\n}\n\n.steal-target-btn:hover {\n background: var(--color-accent-secondary);\n color: var(--color-bg-primary);\n transform: scale(1.02);\n}\n\n.steal-no-targets {\n color: var(--color-text-muted);\n font-size: var(--font-size-sm);\n padding: var(--space-md);\n}\n\n.steal-modal-cancel {\n width: 100%;\n}\n\n/* Steal Confirmation Toast */\n.steal-confirmation {\n position: fixed;\n bottom: calc(var(--space-xl) + 60px);\n left: 50%;\n transform: translateX(-50%);\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n background: linear-gradient(135deg, var(--color-purple-primary, #8b5cf6), var(--color-purple-secondary, #7c3aed));\n color: var(--color-text-white);\n padding: var(--space-sm) var(--space-lg);\n border-radius: var(--radius-full);\n font-weight: var(--font-weight-semibold);\n box-shadow: 0 4px 20px rgba(139, 92, 246, 0.5);\n animation: steal-toast-in 0.3s ease-out;\n z-index: var(--z-tooltip);\n}\n\n@keyframes steal-toast-in {\n from {\n opacity: 0;\n transform: translateX(-50%) translateY(20px);\n }\n to {\n opacity: 1;\n transform: translateX(-50%) translateY(0);\n }\n}\n\n.steal-confirmation-icon {\n font-size: var(--font-size-lg);\n}\n\n/* Steal badge in reveal view */\n.steal-badge {\n display: inline-flex;\n align-items: center;\n gap: var(--space-xs);\n background: rgba(139, 92, 246, 0.2);\n border: 1px solid var(--color-purple-primary, #8b5cf6);\n border-radius: var(--radius-full);\n padding: var(--space-xs) var(--space-sm);\n font-size: var(--font-size-xs);\n color: var(--color-purple-primary, #8b5cf6);\n margin-top: var(--space-xs);\n}\n\n.steal-badge-icon {\n font-size: 0.9em;\n}\n\n/* Victim variant - shows who was stolen from */\n.steal-badge-victim {\n background: rgba(239, 68, 68, 0.2);\n border-color: var(--color-error);\n color: var(--color-error);\n}\n\n/* Dark mode adjustments */\nbody.theme-dark .steal-modal-content {\n background: var(--color-bg-card);\n}\n\nbody.theme-dark .steal-target-btn {\n background: rgba(255, 255, 255, 0.05);\n border-color: var(--color-accent-secondary);\n}\n\nbody.theme-dark .steal-target-btn:hover {\n background: var(--color-accent-secondary);\n color: var(--color-bg-primary);\n}\n\n/* Reduced motion */\n@media (prefers-reduced-motion: reduce) {\n .stat-badge--steal {\n animation: none;\n }\n .steal-confirmation {\n animation: none;\n }\n}\n\n/* ============================================\n Intro Splash Modal (Issue #292)\n ============================================ */\n\n.intro-splash-modal {\n position: fixed;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: var(--z-modal);\n}\n\n.intro-splash-modal-backdrop {\n position: absolute;\n inset: 0;\n background: rgba(0, 0, 0, 0.8);\n backdrop-filter: blur(4px);\n}\n\n.intro-splash-modal-content {\n position: relative;\n background: var(--color-bg-card);\n border: 2px solid var(--color-accent-primary, #1db954);\n border-radius: var(--radius-xl);\n padding: var(--space-lg);\n max-width: 400px;\n width: 90%;\n text-align: center;\n box-shadow: 0 0 40px rgba(29, 185, 84, 0.3);\n}\n\n.intro-splash-modal-emoji {\n font-size: 3rem;\n margin-bottom: var(--space-sm);\n}\n\n.intro-splash-modal-title {\n font-size: var(--font-size-xl);\n font-weight: var(--font-weight-bold);\n color: var(--color-text-primary);\n margin-bottom: var(--space-xs);\n}\n\n.intro-splash-modal-desc {\n font-size: var(--font-size-base);\n color: var(--color-text-secondary);\n margin-bottom: var(--space-md);\n}\n\n.intro-splash-modal-waiting {\n font-size: var(--font-size-sm);\n color: var(--color-text-muted);\n margin-bottom: var(--space-sm);\n}\n\n.intro-splash-confirm-btn {\n width: 100%;\n margin-top: var(--space-sm);\n}\n\n/* ============================================\n Score Animations (Story 13.2)\n ============================================ */\n\n/* Tabular figures for score stability during animation */\n.score-animating {\n font-variant-numeric: tabular-nums;\n}\n\n/* Pop effect for big scores (20+ points) */\n@keyframes score-pop {\n 0% { transform: scale(1); }\n 50% { transform: scale(1.3); }\n 100% { transform: scale(1); }\n}\n\n.score-pop {\n animation: score-pop 700ms ease-out;\n display: inline-block; /* Required for transform */\n}\n\n/* Shake effect for bet loss */\n@keyframes score-shake {\n 0%, 100% { transform: translateX(0); }\n 20% { transform: translateX(-5px); }\n 40% { transform: translateX(5px); }\n 60% { transform: translateX(-3px); }\n 80% { transform: translateX(3px); }\n}\n\n.score-shake {\n animation: score-shake 400ms ease-out;\n display: inline-block;\n}\n\n/* Red flash for bet loss */\n@keyframes score-flash-red {\n 0%, 100% { color: inherit; }\n 50% { color: var(--color-error); }\n}\n\n.score-flash-red {\n animation: score-flash-red 400ms ease-out;\n}\n\n/* Golden glow for bet wins */\n@keyframes score-glow-gold {\n 0%, 100% {\n text-shadow: 0 0 0 transparent;\n color: inherit;\n }\n 50% {\n text-shadow: 0 0 20px #ffd700, 0 0 40px #ffd700;\n color: #ffd700;\n }\n}\n\n.score-glow-gold {\n animation: score-glow-gold 800ms ease-out;\n display: inline-block;\n}\n\n/* Burst effect for streak milestones */\n@keyframes score-burst {\n 0% {\n transform: scale(1);\n text-shadow: 0 0 0 transparent;\n }\n 30% {\n transform: scale(1.4);\n text-shadow: 0 0 30px #ff6600;\n }\n 100% {\n transform: scale(1);\n text-shadow: 0 0 0 transparent;\n }\n}\n\n.score-burst {\n animation: score-burst 700ms ease-out;\n display: inline-block;\n}\n\n/* ============================================\n Floating Points Popup (Story 13.2)\n ============================================ */\n\n@keyframes popup-float {\n 0% {\n opacity: 0;\n transform: translate(-50%, 0);\n }\n 20% {\n opacity: 1;\n }\n 100% {\n opacity: 0;\n transform: translate(-50%, -30px);\n }\n}\n\n.points-popup {\n position: fixed;\n z-index: var(--z-toast);\n font-size: var(--font-size-lg);\n font-weight: var(--font-weight-bold);\n color: var(--color-success);\n pointer-events: none;\n animation: popup-float 1000ms ease-out forwards;\n transform: translateX(-50%);\n}\n\n.points-popup--gold {\n color: #ffd700;\n text-shadow: 0 0 10px #ffd700;\n}\n\n.points-popup--streak {\n color: #ff6600;\n text-shadow: 0 0 10px #ff6600;\n font-size: var(--font-size-xl);\n}\n\n/* ============================================\n Leaderboard Slide Animations (Story 13.2)\n ============================================ */\n\n/* Enhanced climbing animation with green highlight */\n.leaderboard-entry--slide-up {\n animation: leaderboard-slide-up 500ms ease-out;\n}\n\n@keyframes leaderboard-slide-up {\n 0% {\n transform: translateY(10px);\n background: rgba(0, 255, 136, 0.3);\n }\n 100% {\n transform: translateY(0);\n background: transparent;\n }\n}\n\n/* Enhanced falling animation with opacity */\n.leaderboard-entry--slide-down {\n animation: leaderboard-slide-down 500ms ease-out;\n}\n\n@keyframes leaderboard-slide-down {\n 0% {\n transform: translateY(-10px);\n opacity: 0.6;\n }\n 100% {\n transform: translateY(0);\n opacity: 1;\n }\n}\n\n/* ============================================\n Reduced Motion Support (Story 13.2)\n ============================================ */\n\n@media (prefers-reduced-motion: reduce) {\n .score-pop,\n .score-shake,\n .score-glow-gold,\n .score-burst,\n .score-flash-red {\n animation: none !important;\n }\n\n .points-popup {\n animation: none !important;\n display: none !important;\n }\n\n .leaderboard-entry--slide-up,\n .leaderboard-entry--slide-down {\n animation: none !important;\n }\n}\n\n/* ============================================\n Device Tier Performance Optimizations (Story 18.3)\n ============================================ */\n\n/* Low-end device optimizations - disable complex animations */\nbody.device-tier-low .leaderboard-entry--climbing,\nbody.device-tier-low .leaderboard-entry--falling,\nbody.device-tier-low .leaderboard-entry--slide-up,\nbody.device-tier-low .leaderboard-entry--slide-down {\n animation: none !important;\n}\n\nbody.device-tier-low .neon-glow,\nbody.device-tier-low .btn-glow:hover {\n box-shadow: none !important;\n}\n\nbody.device-tier-low .score-pop,\nbody.device-tier-low .score-shake,\nbody.device-tier-low .score-glow-gold,\nbody.device-tier-low .score-burst {\n animation: none !important;\n}\n\nbody.device-tier-low .points-popup {\n display: none !important;\n}\n\n/* Medium-tier device optimizations - simplify animations */\nbody.device-tier-medium .leaderboard-entry--climbing,\nbody.device-tier-medium .leaderboard-entry--falling {\n animation-duration: 0.2s !important;\n}\n\nbody.device-tier-medium .neon-glow {\n animation: none !important;\n}\n\nbody.device-tier-medium .score-pop,\nbody.device-tier-medium .score-shake,\nbody.device-tier-medium .score-glow-gold,\nbody.device-tier-medium .score-burst {\n animation-duration: 0.2s !important;\n}\n\n/* Tap-to-skip hint for reveal view (Story 18.3) */\n.reveal-skip-hint {\n position: absolute;\n bottom: var(--space-md);\n left: 50%;\n transform: translateX(-50%);\n font-size: var(--font-size-sm);\n color: var(--color-text-muted);\n opacity: 0;\n animation: fadeInDelayed 0.3s ease-out 1s forwards;\n}\n\n@keyframes fadeInDelayed {\n to {\n opacity: 0.6;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .reveal-skip-hint {\n animation: none;\n opacity: 0.6;\n }\n}\n\nbody.device-tier-low .reveal-skip-hint {\n animation: none;\n opacity: 0.6;\n}\n\n/* ========================================\n Playlist Request Feature (Story 44)\n ======================================== */\n\n/* Request button in playlists section */\n.request-btn {\n margin-top: var(--space-md);\n gap: var(--space-xs);\n}\n\n/* Requests list */\n.requests-list {\n display: flex;\n flex-direction: column;\n gap: var(--space-sm);\n}\n\n/* Individual request item */\n.request-item {\n display: flex;\n align-items: center;\n gap: var(--space-md);\n padding: var(--space-md);\n background: var(--color-surface-raised);\n border-radius: var(--radius-md);\n border: 1px solid var(--color-border);\n}\n\n.request-item-thumbnail {\n width: 40px;\n height: 40px;\n min-width: 40px;\n min-height: 40px;\n max-width: 40px;\n max-height: 40px;\n border-radius: var(--radius-sm);\n object-fit: cover;\n flex-shrink: 0;\n}\n\n.request-item-thumbnail-placeholder {\n width: 40px;\n height: 40px;\n min-width: 40px;\n min-height: 40px;\n border-radius: var(--radius-sm);\n background: var(--color-surface);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 1.25rem;\n flex-shrink: 0;\n}\n\n.request-item-info {\n flex: 1;\n min-width: 0;\n}\n\n.request-item-name {\n font-weight: 600;\n font-size: var(--font-size-base);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.request-item-meta {\n font-size: var(--font-size-sm);\n color: var(--color-text-muted);\n}\n\n/* Status badges */\n.request-status {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 4px 8px;\n border-radius: var(--radius-full);\n font-size: var(--font-size-xs);\n font-weight: 600;\n white-space: nowrap;\n}\n\n.request-status--pending {\n background: rgba(255, 193, 7, 0.15);\n color: #ffc107;\n}\n\n.request-status--ready {\n background: rgba(76, 175, 80, 0.15);\n color: #4caf50;\n}\n\n.request-status--installed {\n background: transparent;\n color: #4caf50;\n border: 1px solid #4caf50;\n}\n\n.request-status--declined {\n background: rgba(244, 67, 54, 0.15);\n color: #f44336;\n}\n\n/* Update button for ready status */\n.request-update-btn {\n font-size: var(--font-size-xs);\n padding: 6px 12px;\n white-space: nowrap;\n}\n\n/* Modal text input */\n.text-input {\n width: 100%;\n padding: var(--space-sm) var(--space-md);\n font-size: var(--font-size-base);\n background: var(--color-surface);\n border: 1px solid var(--color-border);\n border-radius: var(--radius-md);\n color: var(--color-text);\n transition: border-color 0.15s ease;\n}\n\n.text-input:focus {\n outline: none;\n border-color: var(--color-primary);\n}\n\n.text-input.input-error {\n border-color: var(--color-error);\n}\n\n/* Info box */\n.info-box {\n background: var(--color-surface-raised);\n border-radius: var(--radius-md);\n padding: var(--space-md);\n margin-top: var(--space-md);\n}\n\n.info-box-title {\n font-weight: 600;\n margin-bottom: var(--space-xs);\n color: var(--color-text-muted);\n}\n\n.info-box-list {\n margin: 0;\n padding-left: 0;\n list-style-position: inside;\n font-size: var(--font-size-sm);\n color: var(--color-text-muted);\n}\n\n.info-box-list li {\n margin-bottom: var(--space-xs);\n}\n\n.info-box-list li:last-child {\n margin-bottom: 0;\n}\n\n.info-box-note {\n margin-top: var(--space-sm);\n padding-top: var(--space-sm);\n border-top: 1px solid var(--color-border);\n font-size: var(--font-size-sm);\n color: var(--color-text-muted);\n}\n\n/* Success modal */\n.modal-content--success {\n text-align: center;\n}\n\n.success-icon {\n font-size: 3rem;\n margin-bottom: var(--space-sm);\n}\n\n.success-playlist-name {\n font-weight: 600;\n font-size: var(--font-size-lg);\n margin-bottom: var(--space-xs);\n}\n\n.success-estimate {\n color: var(--color-text-muted);\n font-size: var(--font-size-sm);\n}\n\n/* Loading state for submit button */\n.btn--loading {\n position: relative;\n color: transparent !important;\n pointer-events: none;\n}\n\n.btn--loading::after {\n content: '';\n position: absolute;\n width: 16px;\n height: 16px;\n top: 50%;\n left: 50%;\n margin-left: -8px;\n margin-top: -8px;\n border: 2px solid transparent;\n border-top-color: currentColor;\n border-radius: 50%;\n animation: spin 0.6s linear infinite;\n}\n\n@keyframes spin {\n to { transform: rotate(360deg); }\n}\n\n/* ============================================\n Shareable Result Cards (Issue #120)\n ============================================ */\n\n.share-container {\n margin: 1.5rem 0;\n text-align: center;\n}\n\n.share-header {\n font-size: 1.2rem;\n font-weight: 700;\n margin-bottom: 1rem;\n color: var(--text-primary, #fff);\n}\n\n.share-card-preview {\n margin: 12px auto;\n max-width: 360px;\n width: 100%;\n border-radius: 16px;\n overflow: hidden;\n box-shadow: 0 12px 36px rgba(0, 0, 0, 0.5), 0 0 0 1px rgba(255, 45, 106, 0.25);\n background: #0a0a12;\n}\n\n.share-card-image {\n display: block;\n width: 100%;\n height: auto;\n aspect-ratio: 1 / 1;\n}\n\n.share-buttons {\n display: flex;\n gap: 0.75rem;\n justify-content: center;\n flex-wrap: wrap;\n}\n\n.share-btn {\n padding: 0.6rem 1.2rem;\n border: none;\n border-radius: 8px;\n font-size: 0.95rem;\n font-weight: 600;\n cursor: pointer;\n background: var(--accent-color, #e94560);\n color: #fff;\n transition: opacity 0.2s, transform 0.1s;\n}\n\n.share-btn:hover {\n opacity: 0.9;\n}\n\n.share-btn:active {\n transform: scale(0.97);\n}\n\n.share-toast {\n margin-top: 0.75rem;\n padding: 0.4rem 1rem;\n background: var(--success-color, #4caf50);\n color: #fff;\n border-radius: 20px;\n display: inline-block;\n font-size: 0.85rem;\n font-weight: 600;\n animation: shareToastIn 0.3s ease;\n}\n\n@keyframes shareToastIn {\n from { opacity: 0; transform: translateY(8px); }\n to { opacity: 1; transform: translateY(0); }\n}\n\n/* Admin share player tabs (Issue #208) */\n.admin-share-player-tabs {\n display: flex;\n flex-wrap: wrap;\n gap: 0.4rem;\n justify-content: center;\n margin-bottom: 0.75rem;\n}\n\n.admin-share-tab {\n padding: 0.3rem 0.85rem;\n border-radius: 20px;\n border: 1px solid var(--color-border-light);\n background: transparent;\n color: var(--color-text-secondary);\n font-size: var(--font-size-sm);\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.admin-share-tab:hover {\n border-color: var(--color-accent-brand);\n color: var(--color-accent-brand);\n}\n\n.admin-share-tab.active {\n background: var(--color-accent-brand);\n border-color: var(--color-accent-brand);\n color: #fff;\n font-weight: var(--font-weight-semibold);\n}\n\n@media (max-width: 480px) {\n .share-buttons {\n flex-direction: column;\n align-items: center;\n }\n .share-btn {\n width: 100%;\n max-width: 280px;\n }\n .share-card-preview {\n max-width: 320px;\n }\n}\n\n/* ============================================\n Skeleton Loading States (#240)\n ============================================ */\n@keyframes shimmer {\n 0% { background-position: 200% 0; }\n 100% { background-position: -200% 0; }\n}\n\n.skeleton {\n background: linear-gradient(90deg, var(--color-bg-card) 25%, #3a3a4e 50%, var(--color-bg-card) 75%);\n background-size: 200% 100%;\n animation: shimmer 1.5s infinite;\n border-radius: var(--radius-md);\n}\n\n.skeleton-list {\n display: flex;\n flex-direction: column;\n gap: var(--space-sm);\n padding: var(--space-sm) 0;\n}\n\n/* Media player rows \u2014 match the height of a radio option */\n.skeleton-row {\n height: 48px;\n width: 100%;\n}\n\n/* Playlist cards \u2014 taller to match playlist card height */\n.skeleton-card {\n height: 64px;\n width: 100%;\n}\n\n/* ============================================\n Connection Status Indicator (#238)\n ============================================ */\n.player-header {\n position: relative;\n}\n\n.connection-indicator {\n position: absolute;\n top: 50%;\n right: var(--space-md);\n transform: translateY(-50%);\n display: flex;\n align-items: center;\n gap: 4px;\n opacity: 0;\n transition: opacity 0.3s ease;\n}\n\n/* Only visible when disconnected/reconnecting */\n.connection-indicator--disconnected {\n opacity: 1;\n}\n\n.connection-dot {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: var(--color-error, #e94560);\n animation: pulse-dot 1.2s infinite;\n}\n\n@keyframes pulse-dot {\n 0%, 100% { opacity: 1; transform: scale(1); }\n 50% { opacity: 0.4; transform: scale(0.7); }\n}\n\n/* ============================================\n Party Lights (#331)\n ============================================ */\n\n.party-lights-picker {\n margin-top: 12px;\n}\n\n.party-lights-picker-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 8px;\n font-size: 0.85rem;\n color: var(--text-secondary, #aaa);\n}\n\n.party-lights-count {\n font-weight: 500;\n}\n\n.btn-link {\n background: none;\n border: none;\n color: var(--accent, #ff00ff);\n cursor: pointer;\n font-size: 0.85rem;\n padding: 4px 8px;\n}\n\n.btn-link:hover {\n text-decoration: underline;\n}\n\n.party-lights-list {\n max-height: 240px;\n overflow-y: auto;\n border-radius: 8px;\n background: var(--card-bg, rgba(255,255,255,0.05));\n margin-bottom: 12px;\n}\n\n.party-light-item {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 12px;\n cursor: pointer;\n border-bottom: 1px solid var(--border, rgba(255,255,255,0.08));\n min-height: 44px;\n}\n\n.party-light-item:last-child {\n border-bottom: none;\n}\n\n.party-light-item:hover {\n background: rgba(255,255,255,0.03);\n}\n\n.party-light-item input[type=\"checkbox\"] {\n width: 18px;\n height: 18px;\n flex-shrink: 0;\n accent-color: var(--accent, #ff00ff);\n}\n\n.light-status {\n font-size: 0.75rem;\n flex-shrink: 0;\n}\n\n.light-name {\n flex: 1;\n font-size: 0.9rem;\n color: var(--text-primary, #fff);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.light-cap-badge {\n font-size: 0.7rem;\n padding: 2px 6px;\n border-radius: 4px;\n background: rgba(255,255,255,0.1);\n color: var(--text-secondary, #aaa);\n flex-shrink: 0;\n font-weight: 500;\n}\n\n/* ============================================\n Issue #550: WLED Presets & Light Mode UI\n ============================================ */\n\n.setting-row--vertical {\n flex-direction: column;\n align-items: flex-start;\n gap: var(--space-sm, 8px);\n}\n\n.wled-presets-grid {\n display: grid;\n grid-template-columns: 1fr 1fr 1fr;\n gap: var(--space-xs, 4px) var(--space-sm, 8px);\n width: 100%;\n}\n\n.wled-preset-item {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--space-xs, 4px);\n font-size: 0.8rem;\n color: var(--text-secondary, #aaa);\n}\n\n.wled-preset-item .input-sm {\n width: 48px;\n padding: 2px 4px;\n border: 1px solid rgba(255,255,255,0.15);\n border-radius: 4px;\n background: rgba(255,255,255,0.05);\n color: var(--text-primary, #fff);\n font-size: 0.8rem;\n text-align: center;\n}\n\n/* ============================================\n Issue #477: Admin Game Phase Views\n ============================================ */\n\n.admin-game-wrapper {\n max-width: 480px;\n margin: 0 auto;\n}\n\n.admin-phase-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: var(--space-md);\n}\n\n.round-badge {\n font-weight: 600;\n font-size: 1rem;\n}\n\n.timer-badge {\n font-size: 1.2rem;\n font-weight: 700;\n font-variant-numeric: tabular-nums;\n min-width: 3em;\n text-align: center;\n}\n\n.timer-badge.timer-warning {\n color: var(--color-warning, #f59e0b);\n}\n\n.timer-badge.timer-critical {\n color: var(--color-danger, #ef4444);\n animation: pulse-critical 0.5s ease-in-out infinite alternate;\n}\n\n@keyframes pulse-critical {\n from { opacity: 1; }\n to { opacity: 0.5; }\n}\n\n.admin-song-card {\n display: flex;\n align-items: center;\n gap: var(--space-md);\n background: var(--color-bg-card);\n border-radius: var(--radius-md);\n padding: var(--space-md);\n margin-bottom: var(--space-md);\n}\n\n.admin-album-art {\n width: 64px;\n height: 64px;\n border-radius: var(--radius-sm);\n object-fit: cover;\n flex-shrink: 0;\n}\n\n.admin-song-meta {\n min-width: 0;\n}\n\n.admin-song-title {\n font-weight: 600;\n font-size: 1rem;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.admin-song-artist {\n color: var(--text-secondary, #aaa);\n font-size: 0.9rem;\n}\n\n/* #653: Admin-only song details (below large album cover) */\n.admin-song-details {\n text-align: center;\n margin-bottom: var(--space-sm, 8px);\n}\n\n.admin-song-year {\n font-size: 0.95rem;\n color: var(--color-primary, #1db954);\n font-weight: 600;\n}\n\n.admin-song-funfact {\n font-size: 0.85rem;\n color: var(--text-secondary, #aaa);\n font-style: italic;\n margin-top: 4px;\n line-height: 1.3;\n}\n\n/* #660: Admin playing-mode banner */\n.admin-playing-banner {\n display: flex;\n align-items: center;\n gap: var(--space-sm, 8px);\n padding: var(--space-sm, 8px) var(--space-md, 16px);\n background: var(--bg-card, rgba(255, 255, 255, 0.05));\n border-bottom: 2px solid var(--color-primary, #1db954);\n font-size: 0.9rem;\n}\n\n.admin-playing-banner-icon {\n font-size: 1.1rem;\n flex-shrink: 0;\n}\n\n.admin-playing-banner-text {\n flex: 1;\n min-width: 0;\n}\n\n.admin-playing-banner-btn {\n flex-shrink: 0;\n font-size: 0.8rem;\n padding: 4px 10px;\n border-radius: var(--radius-sm, 8px);\n}\n\n/* #1012 follow-up: Idle-halt banner \u2014 shown on REVEAL when a round\n ended with zero guesses, so the screen doesn't look generically stuck. */\n.idle-halt-banner {\n display: flex;\n align-items: center;\n gap: var(--space-sm, 8px);\n margin: var(--space-md, 16px) auto;\n padding: var(--space-sm, 8px) var(--space-md, 16px);\n background: var(--bg-card, rgba(255, 255, 255, 0.06));\n border: 1px solid var(--color-warning, #f5a623);\n border-radius: var(--radius-md, 12px);\n color: var(--color-warning, #f5a623);\n font-size: 0.9rem;\n line-height: 1.35;\n max-width: 540px;\n}\n\n.idle-halt-icon {\n font-size: 1.2rem;\n flex-shrink: 0;\n}\n\n/* #805: Recovery banner shown when game pauses due to playback error. */\n.admin-pause-recovery {\n margin: var(--space-md, 16px);\n padding: var(--space-md, 16px) var(--space-lg, 20px);\n background: var(--bg-card, rgba(255, 255, 255, 0.06));\n border: 2px solid var(--color-warning, #f5a623);\n border-radius: var(--radius-md, 12px);\n}\n\n.admin-pause-recovery-header {\n display: flex;\n align-items: center;\n gap: var(--space-sm, 8px);\n margin-bottom: var(--space-sm, 8px);\n}\n\n.admin-pause-recovery-icon {\n font-size: 1.3rem;\n flex-shrink: 0;\n}\n\n.admin-pause-recovery-title {\n font-size: 1rem;\n color: var(--color-warning, #f5a623);\n}\n\n.admin-pause-recovery-message {\n font-size: 0.95rem;\n line-height: 1.4;\n margin: 0 0 var(--space-sm, 8px) 0;\n color: var(--text-primary, #ffffff);\n}\n\n.admin-pause-recovery-detail {\n font-size: 0.8rem;\n line-height: 1.3;\n margin: 0 0 var(--space-md, 16px) 0;\n color: var(--text-secondary, rgba(255, 255, 255, 0.6));\n font-family: var(--font-monospace, monospace);\n word-break: break-word;\n}\n\n.admin-pause-recovery-detail.hidden {\n display: none;\n}\n\n.admin-pause-recovery-actions {\n display: flex;\n gap: var(--space-sm, 8px);\n flex-wrap: wrap;\n}\n\n.admin-pause-recovery-actions .btn {\n flex: 1;\n min-width: 120px;\n}\n\n/* #660: Admin personal result card (reveal phase) */\n.admin-personal-result-card {\n display: flex;\n flex-direction: column;\n gap: var(--space-xs, 4px);\n}\n\n.admin-personal-row {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: var(--space-xs, 4px) 0;\n}\n\n.admin-personal-label {\n color: var(--text-secondary, #aaa);\n font-size: 0.9rem;\n}\n\n.admin-personal-value {\n font-weight: 600;\n font-size: 1rem;\n}\n\n.admin-personal-score {\n color: var(--color-primary, #1db954);\n font-size: 1.1rem;\n}\n\n/* Admin read-only challenge options */\n.artist-option--readonly {\n padding: 10px 14px;\n background: var(--bg-card, rgba(255, 255, 255, 0.05));\n border: 1px solid var(--color-border-dark, rgba(255, 255, 255, 0.1));\n border-radius: var(--radius-md, 12px);\n text-align: center;\n font-size: 0.9rem;\n opacity: 0.8;\n}\n\n/* Admin intro splash confirm */\n.admin-intro-splash {\n text-align: center;\n padding: var(--space-md);\n margin-bottom: var(--space-md);\n background: var(--bg-card, rgba(255, 255, 255, 0.05));\n border-radius: var(--radius-md, 12px);\n border: 1px solid var(--color-primary, #1db954);\n}\n\n.intro-splash-info {\n font-size: 1.1rem;\n font-weight: 600;\n margin-bottom: var(--space-sm);\n}\n\n.intro-splash-icon {\n margin-right: 6px;\n}\n\n.btn-compact {\n padding: 8px 12px;\n font-size: 0.85rem;\n}\n\n.admin-player-panel {\n background: var(--color-bg-card);\n border-radius: var(--radius-md);\n padding: var(--space-md);\n margin-bottom: var(--space-md);\n}\n\n.admin-year-selector {\n text-align: center;\n margin-bottom: var(--space-md);\n}\n\n.admin-year-selector .year-display {\n display: block;\n font-size: 2.5rem;\n font-weight: 700;\n margin-bottom: var(--space-sm);\n font-variant-numeric: tabular-nums;\n}\n\n.admin-year-selector .year-slider {\n width: 100%;\n margin-bottom: var(--space-xs);\n}\n\n.year-range-labels {\n display: flex;\n justify-content: space-between;\n font-size: 0.75rem;\n color: var(--text-secondary, #aaa);\n}\n\n.last-round-banner {\n text-align: center;\n padding: var(--space-sm);\n background: var(--color-warning, #f59e0b);\n color: #000;\n border-radius: var(--radius-sm);\n font-weight: 600;\n margin-bottom: var(--space-md);\n}\n\n.submission-status {\n text-align: center;\n color: var(--text-secondary, #aaa);\n font-size: 0.9rem;\n margin-top: var(--space-sm);\n}\n\n.submission-count {\n margin-bottom: 6px;\n}\n\n.submission-players {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n justify-content: center;\n}\n\n.submission-player {\n display: inline-flex;\n align-items: center;\n gap: 3px;\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 0.8rem;\n background: var(--bg-card, rgba(255, 255, 255, 0.05));\n}\n\n.submission-player.is-submitted {\n color: var(--color-primary, #1db954);\n}\n\n.submission-player.is-waiting {\n opacity: 0.6;\n}\n\n/* Reveal */\n.reveal-year-display {\n font-size: 2.5rem;\n font-weight: 700;\n text-align: center;\n margin: var(--space-md) 0;\n color: var(--color-primary, #1db954);\n}\n\n.admin-personal-result {\n display: flex;\n justify-content: space-between;\n align-items: center;\n background: var(--color-bg-card);\n border-radius: var(--radius-md);\n padding: var(--space-md);\n margin-bottom: var(--space-md);\n}\n\n.score-badge {\n font-weight: 700;\n color: var(--color-primary, #1db954);\n}\n\n/* Leaderboard */\n.admin-leaderboard-container {\n margin-bottom: var(--space-md);\n}\n\n.admin-leaderboard {\n width: 100%;\n border-collapse: collapse;\n}\n\n.admin-leaderboard th {\n text-align: left;\n font-weight: 600;\n padding: var(--space-xs) var(--space-sm);\n border-bottom: 1px solid var(--color-border-light);\n font-size: 0.85rem;\n color: var(--text-secondary, #aaa);\n}\n\n.admin-leaderboard td {\n padding: var(--space-xs) var(--space-sm);\n}\n\n.admin-leaderboard tr.admin-highlight td {\n font-weight: 600;\n color: var(--color-primary, #1db954);\n}\n\n/* End */\n.admin-winner-display {\n text-align: center;\n font-size: 1.3rem;\n font-weight: 600;\n padding: var(--space-lg) 0;\n}\n\n.winner-trophy {\n font-size: 2rem;\n}\n\n.admin-end-actions {\n display: flex;\n gap: var(--space-sm);\n justify-content: center;\n margin-top: var(--space-md);\n}\n\n/* ==========================================\n First-run wizard (DESIGN.md ## Patterns)\n ========================================== */\n\n/* Takeover: when active, hide the rest of the admin chrome */\nbody.wizard-active > .admin-header,\nbody.wizard-active > main.admin-content,\nbody.wizard-active > .pwa-ios-hint {\n display: none;\n}\n\n.wizard-takeover {\n position: fixed;\n inset: 0;\n z-index: var(--z-overlay, 1100);\n background: var(--color-bg-primary);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n.wizard-takeover.hidden { display: none; }\n\n.wiz-bg {\n position: absolute;\n inset: 0;\n background:\n radial-gradient(ellipse at top, rgba(255, 45, 106, 0.18), transparent 55%),\n radial-gradient(ellipse at bottom right, rgba(0, 245, 255, 0.12), transparent 40%);\n pointer-events: none;\n}\n\n.wiz-top {\n padding: var(--space-md) var(--space-lg);\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--space-md);\n border-bottom: 1px solid var(--color-border-neon);\n position: relative;\n z-index: 1;\n}\n.wiz-step-count {\n font-family: var(--font-display);\n font-weight: 600;\n font-size: var(--font-size-xs);\n letter-spacing: 0.14em;\n text-transform: uppercase;\n color: var(--color-text-dim, #6b6b7a);\n flex: 1;\n text-align: center;\n}\n.wiz-skip {\n font-family: var(--font-display);\n font-size: var(--font-size-sm);\n color: var(--color-text-neon-muted);\n background: none;\n border: none;\n font-weight: 500;\n cursor: pointer;\n padding: var(--space-xs) var(--space-sm);\n}\n.wiz-skip:hover { color: var(--color-text-white); }\n\n.wiz-progress {\n display: flex;\n gap: var(--space-xs);\n padding: var(--space-sm) var(--space-lg);\n position: relative;\n z-index: 1;\n}\n.wiz-seg {\n flex: 1;\n height: 3px;\n background: var(--color-dark-surface);\n border-radius: var(--radius-full);\n overflow: hidden;\n}\n.wiz-seg.filled {\n background: linear-gradient(90deg, var(--color-accent-primary), var(--color-accent-secondary));\n box-shadow: 0 0 12px rgba(255, 45, 106, 0.5);\n}\n.wiz-seg.active .wiz-seg-inner {\n height: 100%;\n width: 60%;\n background: linear-gradient(90deg, var(--color-accent-primary), var(--color-accent-secondary));\n box-shadow: 0 0 12px rgba(255, 45, 106, 0.5);\n border-radius: var(--radius-full);\n}\n\n.wiz-frame {\n flex: 1;\n overflow-y: auto;\n position: relative;\n z-index: 1;\n}\n.wiz-frame[hidden] { display: none; }\n\n.wiz-body {\n padding: var(--space-lg);\n display: flex;\n flex-direction: column;\n gap: var(--space-md);\n max-width: 720px;\n margin: 0 auto;\n}\n\n.wiz-eyebrow {\n font-family: var(--font-display);\n font-weight: 700;\n font-size: var(--font-size-xs);\n letter-spacing: 0.14em;\n text-transform: uppercase;\n color: var(--color-accent-secondary);\n}\n.wiz-title {\n font-family: var(--font-display);\n font-weight: 700;\n font-size: var(--font-size-3xl);\n line-height: 1.15;\n letter-spacing: -0.01em;\n color: var(--color-text-white);\n}\n.wiz-sub {\n color: var(--color-text-neon-muted);\n font-size: var(--font-size-base);\n line-height: 1.5;\n}\n.wiz-hint { font-size: var(--font-size-sm); margin-top: var(--space-xs); }\n.wiz-hint a { color: var(--color-accent-secondary); text-decoration: underline; }\n\n.wiz-list {\n display: flex;\n flex-direction: column;\n gap: var(--space-sm);\n}\n\n/* Speaker / playlist rows */\n.wiz-row {\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n padding: var(--space-sm) var(--space-md);\n background: var(--color-dark-surface);\n border: 1px solid var(--color-border-neon);\n border-radius: var(--radius-lg);\n cursor: pointer;\n transition: var(--transition-fast);\n color: var(--color-text-white);\n text-align: left;\n width: 100%;\n font-family: var(--font-body);\n}\n.wiz-row:hover { background: var(--color-dark-surface-hover); }\n.wiz-row.selected {\n background: linear-gradient(90deg, rgba(255, 45, 106, 0.15), rgba(0, 245, 255, 0.05));\n border-color: var(--color-accent-primary);\n box-shadow: 0 0 14px rgba(255, 45, 106, 0.25);\n}\n.wiz-row-avatar {\n width: 36px;\n height: 36px;\n border-radius: var(--radius-md);\n background: linear-gradient(135deg, var(--color-accent-primary), var(--color-accent-brand));\n flex-shrink: 0;\n display: grid;\n place-items: center;\n color: var(--color-bg-primary);\n}\n.wiz-row-avatar-icon {\n width: 20px;\n height: 20px;\n}\n.wiz-row-text { flex: 1; min-width: 0; }\n.wiz-row-name {\n font-family: var(--font-display);\n font-weight: 600;\n font-size: var(--font-size-base);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.wiz-row-sub {\n font-size: var(--font-size-xs);\n color: var(--color-text-neon-muted);\n margin-top: 2px;\n}\n.wiz-row-check {\n color: var(--color-success-neon);\n text-shadow: var(--glow-success);\n}\n\n/* Provider grid (Step 2) */\n.wiz-provider-grid {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: var(--space-sm);\n}\n.wiz-provider-chip {\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n padding: var(--space-md);\n background: var(--color-dark-surface);\n border: 1px solid var(--color-border-neon);\n border-radius: var(--radius-md);\n font-family: var(--font-display);\n font-weight: 600;\n font-size: var(--font-size-base);\n cursor: pointer;\n color: var(--color-text-white);\n transition: var(--transition-fast);\n}\n.wiz-provider-chip:hover { background: var(--color-dark-surface-hover); }\n.wiz-provider-chip.active {\n border-color: var(--color-accent-primary);\n box-shadow: 0 0 14px rgba(255, 45, 106, 0.25);\n}\n.wiz-provider-chip.connected {\n border-color: var(--color-success-neon);\n background: rgba(57, 255, 20, 0.1);\n}\n\n/* Dimmed chip: provider not supported on the selected speaker (#772).\n Visible but obviously unavailable \u2014 clicking opens the explainer card. */\n.wiz-provider-chip {\n justify-content: space-between;\n}\n.wiz-provider-chip.disabled {\n opacity: 0.4;\n cursor: help;\n background: rgba(255, 255, 255, 0.02);\n}\n.wiz-provider-chip.disabled:hover {\n opacity: 0.55;\n background: rgba(255, 255, 255, 0.04);\n}\n.wiz-provider-chip .chip-lock {\n width: 14px;\n height: 14px;\n opacity: 0.7;\n flex-shrink: 0;\n}\n\n/* Capability badge under the speaker platform label (Step 1, #772). */\n.wiz-row-sub .cap-dot {\n width: 4px;\n height: 4px;\n border-radius: 50%;\n background: var(--color-text-dim);\n display: inline-block;\n margin: 0 6px;\n vertical-align: middle;\n}\n.wiz-row-sub .cap-badge {\n font-family: var(--font-display);\n font-weight: 600;\n font-size: 10px;\n text-transform: uppercase;\n letter-spacing: 0.06em;\n padding: 1px 6px;\n border-radius: var(--radius-sm);\n border: 1px solid;\n vertical-align: middle;\n /* #1319: the badge text itself never wraps \u2014 summaries keep it short, the\n accent cases (\"Spotify only\") are short by construction. */\n white-space: nowrap;\n}\n.wiz-row-sub .cap-badge.full {\n color: var(--color-success-neon);\n background: rgba(57, 255, 20, 0.08);\n border-color: rgba(57, 255, 20, 0.4);\n}\n.wiz-row-sub .cap-badge.partial {\n color: var(--color-warning-alt);\n background: rgba(255, 102, 0, 0.08);\n border-color: rgba(255, 102, 0, 0.4);\n}\n.wiz-row-sub .cap-badge.none {\n color: var(--color-error-neon);\n background: rgba(255, 0, 64, 0.08);\n border-color: rgba(255, 0, 64, 0.4);\n}\n/* #1319: multi-service capability is static info, not actionable \u2014 drop the\n orange/uppercase/pill chrome so the speaker name stays the hero. Muted,\n borderless, plain-case secondary text. The full list lives on the tooltip. */\n.wiz-row-sub .cap-badge.summary {\n color: var(--color-text-dim);\n background: none;\n border: none;\n padding: 0;\n text-transform: none;\n letter-spacing: 0;\n font-weight: 500;\n}\n\n/* Explainer card shown when user clicks a dimmed provider chip (#772). */\n.wiz-explainer {\n margin-top: var(--space-md);\n padding: var(--space-lg);\n border-radius: var(--radius-lg);\n background: linear-gradient(135deg, rgba(255, 102, 0, 0.06), rgba(0, 245, 255, 0.04));\n border: 1px solid rgba(255, 102, 0, 0.35);\n}\n.wiz-explainer[hidden] { display: none; }\n.wiz-explainer-title {\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n font-family: var(--font-display);\n font-weight: 700;\n font-size: var(--font-size-md);\n margin: 0 0 var(--space-sm);\n}\n.wiz-explainer-title .icon { font-size: 18px; }\n.wiz-explainer-body {\n font-size: var(--font-size-base);\n line-height: 1.55;\n color: var(--color-text-neon-muted);\n margin: 0 0 var(--space-md);\n}\n.wiz-explainer-steps {\n margin: 0 0 var(--space-md);\n padding-left: var(--space-lg);\n font-size: var(--font-size-base);\n line-height: 1.75;\n color: var(--color-text-neon-muted);\n}\n.wiz-explainer-steps li strong { color: var(--color-text-white); }\n.wiz-explainer-actions {\n display: flex;\n gap: var(--space-sm);\n flex-wrap: wrap;\n}\n.wiz-explainer-footer {\n margin: var(--space-md) 0 0;\n padding-top: var(--space-sm);\n border-top: 1px solid rgba(255, 255, 255, 0.06);\n font-size: var(--font-size-sm);\n color: var(--color-text-dim);\n font-style: italic;\n}\n\n/* Level-up cards (Step 4) */\n.wiz-lvl-card {\n display: flex;\n align-items: flex-start;\n gap: var(--space-sm);\n padding: var(--space-sm) var(--space-md);\n background: var(--color-dark-surface);\n border: 1px solid var(--color-border-neon);\n border-radius: var(--radius-lg);\n cursor: pointer;\n transition: var(--transition-fast);\n}\n.wiz-lvl-card.on {\n background: rgba(0, 245, 255, 0.08);\n border-color: var(--color-accent-secondary);\n}\n.wiz-lvl-card.unavailable {\n opacity: 0.45;\n cursor: not-allowed;\n}\n.wiz-lvl-text { flex: 1; }\n.wiz-lvl-title {\n font-family: var(--font-display);\n font-weight: 600;\n font-size: var(--font-size-base);\n color: var(--color-text-white);\n}\n.wiz-lvl-desc {\n font-size: var(--font-size-xs);\n color: var(--color-text-neon-muted);\n margin-top: 2px;\n line-height: 1.4;\n}\n.wiz-lvl-toggle {\n width: 38px;\n height: 22px;\n background: var(--color-dark-surface-hover);\n border-radius: var(--radius-full);\n border: 1px solid var(--color-border-neon);\n position: relative;\n flex-shrink: 0;\n margin-top: 2px;\n}\n.wiz-lvl-toggle::after {\n content: '';\n position: absolute;\n top: 2px;\n left: 2px;\n width: 16px;\n height: 16px;\n background: var(--color-text-neon-muted);\n border-radius: var(--radius-full);\n transition: var(--transition-fast);\n}\n.wiz-lvl-card.on .wiz-lvl-toggle {\n background: var(--color-accent-primary);\n border-color: var(--color-accent-primary);\n}\n.wiz-lvl-card.on .wiz-lvl-toggle::after {\n left: 18px;\n background: var(--color-bg-primary);\n}\n\n/* Done screen */\n.wiz-done {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--space-lg);\n text-align: center;\n padding: var(--space-xl);\n position: relative;\n z-index: 1;\n}\n.wiz-done-badge {\n font-family: var(--font-display);\n font-weight: 700;\n font-size: var(--font-size-sm);\n letter-spacing: 0.14em;\n color: var(--color-success-neon);\n text-shadow: var(--glow-success);\n}\n.wiz-done-tag {\n font-family: var(--font-display);\n font-weight: 600;\n font-size: var(--font-size-xl);\n color: var(--color-text-white);\n}\n.wiz-done-summary {\n display: flex;\n flex-direction: column;\n gap: var(--space-xs);\n width: 100%;\n max-width: 380px;\n padding: var(--space-md);\n background: var(--color-dark-surface);\n border: 1px solid var(--color-border-neon);\n border-radius: var(--radius-lg);\n}\n.wiz-done-line {\n display: flex;\n justify-content: space-between;\n align-items: baseline;\n gap: var(--space-lg);\n font-family: var(--font-display);\n font-size: var(--font-size-sm);\n color: var(--color-text-neon-muted);\n}\n.wiz-done-line > span {\n letter-spacing: 0.08em;\n text-transform: uppercase;\n font-size: var(--font-size-xs);\n font-weight: 600;\n flex-shrink: 0;\n}\n.wiz-done-line strong {\n color: var(--color-text-white);\n font-weight: 600;\n text-align: right;\n word-break: break-word;\n}\n.wiz-done-demo {\n width: 100%;\n max-width: 400px;\n aspect-ratio: 16/9;\n border: 1px solid var(--color-accent-primary);\n border-radius: var(--radius-xl);\n background: var(--color-bg-primary);\n position: relative;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 6px;\n box-shadow: 0 0 30px rgba(255, 45, 106, 0.3);\n}\n.wiz-done-demo-label {\n font-family: var(--font-display);\n font-size: var(--font-size-xs);\n font-weight: 600;\n color: var(--color-text-neon-muted);\n letter-spacing: 0.14em;\n text-transform: uppercase;\n}\n.wiz-done-demo-year {\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 64px;\n line-height: 0.9;\n color: var(--color-accent-primary);\n text-shadow: 0 0 24px rgba(255, 45, 106, 0.6);\n letter-spacing: -0.03em;\n}\n.wiz-done-demo-song {\n font-family: var(--font-display);\n font-size: var(--font-size-sm);\n font-weight: 600;\n color: var(--color-text-neon-muted);\n}\n\n/* CTA bar */\n.wiz-cta {\n padding: var(--space-md) var(--space-lg);\n display: flex;\n gap: var(--space-sm);\n border-top: 1px solid var(--color-border-neon);\n background: rgba(0, 0, 0, 0.3);\n position: relative;\n z-index: 1;\n}\n.wiz-cta .btn { flex: 1; }\n.wiz-cta .wiz-back { flex: 0 0 auto; min-width: 80px; }\n\n/* On step 3 the Playlist Hub renders its own CTA + detail sheet flush\n to the viewport bottom. wizard.js hides the legacy wiz-next/wiz-back\n buttons individually, but the wrapper itself stays visible \u2014 a ~33px\n tall empty band with padding + border + semi-opaque background pinned\n to the viewport bottom. Because `.wiz-cta` (z-1) is later in the DOM\n than `.wiz-frame` (z-1) at the same z-index inside `.wizard-takeover`,\n it paints on top of the wiz-frame subtree, including the playlist\n hub's `.plh-sheet-host`. (The host's z-50 only counts inside\n `.plh-root`'s `isolation: isolate` stacking context, not against\n wiz-cta.) The detail sheet's footer button at viewport bottom\n appeared clipped by the band. Drop the band on step 3 \u2014 the hub\n owns the chrome there. */\n.wiz-frame-playlist:not([hidden]) ~ .wiz-cta {\n display: none;\n}\n\n/* Finish-setup pill in admin header */\n.finish-setup-pill {\n font-family: var(--font-display);\n font-weight: 600;\n font-size: var(--font-size-sm);\n color: var(--color-accent-primary);\n background: rgba(255, 45, 106, 0.1);\n border: 1px solid rgba(255, 45, 106, 0.4);\n border-radius: var(--radius-full);\n padding: var(--space-xs) var(--space-md);\n cursor: pointer;\n transition: var(--transition-fast);\n}\n.finish-setup-pill:hover {\n background: rgba(255, 45, 106, 0.2);\n box-shadow: var(--glow-primary);\n}\n.finish-setup-pill.hidden { display: none; }\n\n/* Reduced-motion: collapse glow pulses to a single static state */\n@media (prefers-reduced-motion: reduce) {\n .wizard-takeover,\n .wizard-takeover * {\n animation: none !important;\n transition: none !important;\n }\n}\n\n/* Wizard Step 3 \u2014 game-mode form fields */\n.wiz-field {\n display: flex;\n flex-direction: column;\n gap: var(--space-xs);\n}\n.wiz-field-label {\n font-family: var(--font-display);\n font-weight: 600;\n font-size: var(--font-size-xs);\n letter-spacing: 0.08em;\n text-transform: uppercase;\n color: var(--color-text-neon-muted);\n}\n.wiz-chip-group {\n display: flex;\n flex-wrap: wrap;\n gap: var(--space-xs);\n}\n.wiz-chip {\n padding: var(--space-sm) var(--space-md);\n background: var(--color-dark-surface);\n border: 1px solid var(--color-border-neon);\n border-radius: var(--radius-full);\n font-family: var(--font-display);\n font-weight: 600;\n font-size: var(--font-size-sm);\n color: var(--color-text-white);\n cursor: pointer;\n transition: var(--transition-fast);\n}\n.wiz-chip:hover { background: var(--color-dark-surface-hover); }\n.wiz-chip.active {\n background: var(--color-accent-primary);\n border-color: var(--color-accent-primary);\n color: var(--color-bg-primary);\n box-shadow: var(--glow-primary);\n}\n\n/* Step 3 \u2014 \"Request new playlist\" CTA below the playlist list */\n.wiz-request-playlist {\n margin-top: var(--space-md);\n align-self: flex-start;\n}\n\n/* When wizard is active, lift modals above the takeover overlay */\nbody.wizard-active .modal { z-index: calc(var(--z-overlay) + 10); }\n\n.wiz-difficulty-hint {\n margin-top: var(--space-sm);\n padding: var(--space-sm) var(--space-md);\n background: rgba(0, 245, 255, 0.06);\n border-left: 2px solid var(--color-accent-secondary);\n border-radius: var(--radius-sm);\n color: var(--color-text-neon-muted);\n font-size: var(--font-size-sm);\n line-height: 1.5;\n min-height: 1.5em;\n}\n\n/* #1475 \u2014 number field revealed by the \"Custom\" round-count chip */\n.wiz-rounds-custom {\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n margin-top: var(--space-sm);\n}\n\n.wiz-rounds-custom input {\n width: 6em;\n padding: var(--space-sm) var(--space-md);\n background: var(--color-dark-surface);\n border: 1px solid var(--color-border-neon);\n border-radius: var(--radius-sm);\n color: var(--color-text-white);\n font-family: var(--font-body);\n font-size: var(--font-size-base);\n}\n\n.wiz-rounds-custom input:focus {\n outline: none;\n border-color: var(--color-accent-primary);\n}\n\n.wiz-rounds-custom span {\n color: var(--color-text-neon-muted);\n font-size: var(--font-size-sm);\n}\n\n/* Wizard Step 5 \u2014 expandable detail panels under level-up toggles */\n.wiz-lvl-card {\n flex-direction: column;\n align-items: stretch;\n padding: 0;\n}\n.wiz-lvl-head {\n display: flex;\n align-items: flex-start;\n gap: var(--space-sm);\n padding: var(--space-sm) var(--space-md);\n cursor: pointer;\n user-select: none;\n}\n.wiz-lvl-card.unavailable .wiz-lvl-head { cursor: not-allowed; }\n.wiz-lvl-head:hover { background: rgba(255,255,255,0.02); }\n.wiz-lvl-card.on .wiz-lvl-head { border-bottom: 1px solid var(--color-border-neon); }\n\n.wiz-detail {\n padding: var(--space-md);\n display: flex;\n flex-direction: column;\n gap: var(--space-md);\n background: rgba(0,0,0,0.15);\n}\n.wiz-detail-checks {\n display: flex;\n flex-direction: column;\n gap: var(--space-xs);\n}\n.wiz-detail-check {\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n padding: 6px 8px;\n border-radius: var(--radius-md);\n cursor: pointer;\n}\n.wiz-detail-check:hover { background: rgba(255,255,255,0.03); }\n.wiz-detail-check input[type=\"checkbox\"] {\n accent-color: var(--color-accent-primary);\n width: 16px;\n height: 16px;\n flex-shrink: 0;\n}\n.wiz-detail-check-name {\n font-family: var(--font-display);\n font-weight: 500;\n font-size: var(--font-size-sm);\n color: var(--color-text-white);\n}\n.wiz-detail-empty {\n font-size: var(--font-size-sm);\n color: var(--color-text-neon-muted);\n padding: var(--space-sm);\n background: var(--color-dark-surface);\n border: 1px dashed var(--color-border-neon);\n border-radius: var(--radius-md);\n text-align: center;\n}\n.wiz-detail-input {\n padding: var(--space-sm) var(--space-md);\n background: var(--color-bg-primary);\n border: 1px solid var(--color-border-neon);\n border-radius: var(--radius-md);\n color: var(--color-text-white);\n font-family: ui-monospace, monospace;\n font-size: var(--font-size-sm);\n}\n.wiz-detail-input:focus {\n outline: none;\n border-color: var(--color-accent-secondary);\n box-shadow: 0 0 0 3px rgba(0,245,255,0.15);\n}\n.wiz-field-hint {\n font-size: var(--font-size-xs);\n color: var(--color-text-dim);\n line-height: 1.4;\n}\n\n/* ==========================================\n Home view (post-wizard lobby landing)\n ========================================== */\n\n/* When body is in home-mode: show the home-view card, hide only the setup/config sections.\n Runtime views (#admin-playing-*, #admin-reveal-*, #admin-end-*) stay untouched \u2014\n home-mode is exited before any of those show anyway. */\n/* #1138 cleanup: #my-requests + #ha-entities selectors removed \u2014 those legacy\n flat sections were deleted from admin.html. */\nbody.home-mode #media-players,\nbody.home-mode #music-service,\nbody.home-mode #playlists,\nbody.home-mode #game-settings,\nbody.home-mode #party-lights,\nbody.home-mode #tts-settings,\nbody.home-mode .admin-content > .admin-actions {\n display: none !important;\n}\n/* Variant A \u2014 QR Hero aesthetic for the home-view.\n Centered stage, glowing hero card, dual CTA bar. QR + player chips render\n inline via BeatifyHome.renderSession once Start game creates the session. */\n.home-view { display: none; }\n.home-view.hidden { display: none !important; }\nbody.home-mode #home-view,\nbody.home-mode .home-view {\n display: flex;\n flex-direction: column;\n min-height: calc(100vh - 120px);\n background: var(--color-bg-primary);\n border: 1px solid var(--color-border-neon);\n border-radius: var(--radius-xl);\n overflow: hidden;\n margin-bottom: var(--space-md);\n}\n\n.home-stage {\n flex: 1;\n position: relative;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--space-md);\n padding: var(--space-xl) var(--space-lg);\n text-align: center;\n}\n.home-stage-bg {\n position: absolute;\n inset: 0;\n pointer-events: none;\n background:\n radial-gradient(ellipse at center, rgba(255, 45, 106, 0.15), transparent 55%),\n radial-gradient(ellipse at bottom, rgba(0, 245, 255, 0.08), transparent 50%);\n}\n\n.home-eyebrow {\n position: relative;\n z-index: 1;\n font-family: var(--font-display);\n font-weight: 700;\n font-size: var(--font-size-sm);\n letter-spacing: 0.16em;\n text-transform: uppercase;\n color: var(--color-accent-secondary);\n}\n\n.home-headline {\n position: relative;\n z-index: 1;\n font-family: var(--font-display);\n font-weight: 900;\n font-size: var(--font-size-4xl);\n line-height: 0.95;\n letter-spacing: -0.02em;\n margin: 0;\n text-shadow: 0 0 40px rgba(255, 45, 106, 0.35);\n}\n.home-headline-sub {\n display: block;\n font-weight: 600;\n font-size: var(--font-size-xl);\n letter-spacing: 0.02em;\n text-shadow: none;\n color: var(--color-text-white);\n margin-top: 4px;\n}\n\n/* Hero card \u2014 visual placeholder for the QR that appears after Start */\n.home-hero-card {\n position: relative;\n z-index: 1;\n padding: var(--space-lg);\n background: var(--color-dark-surface);\n border: 1px solid var(--color-accent-primary);\n border-radius: var(--radius-2xl);\n box-shadow: 0 0 32px rgba(255, 45, 106, 0.22);\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--space-sm);\n max-width: 280px;\n width: 100%;\n}\n.home-qr-loading {\n font-family: var(--font-display);\n font-weight: 600;\n font-size: var(--font-size-sm);\n color: var(--color-text-neon-muted);\n padding: var(--space-xl) 0;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n}\n.home-qr-loading.hidden { display: none; }\n.home-qr-container {\n padding: 8px;\n background: var(--color-bg-white);\n border-radius: var(--radius-md);\n display: grid;\n place-items: center;\n min-width: 180px;\n min-height: 180px;\n}\n.home-qr-container:empty { display: none; }\n.home-qr-container img, .home-qr-container canvas {\n display: block;\n max-width: 180px;\n height: auto;\n}\n.home-hero-title {\n font-family: var(--font-display);\n font-weight: 700;\n font-size: var(--font-size-lg);\n color: var(--color-text-white);\n letter-spacing: -0.01em;\n}\n.home-hero-sub {\n font-size: var(--font-size-sm);\n color: var(--color-accent-secondary);\n font-family: ui-monospace, monospace;\n word-break: break-all;\n max-width: 260px;\n}\n\n/* Live player tiles \u2014 Jackbox-style grid. Host wears the pink-primary\n \"leader\" treatment (DESIGN.md); guests cycle through the brand neon\n palette (cyan \u2192 green \u2192 orange) so each player reads distinctly. */\n.home-players {\n position: relative;\n z-index: 1;\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(84px, 1fr));\n gap: var(--space-sm);\n justify-items: center;\n width: 100%;\n max-width: 380px;\n margin-top: var(--space-lg);\n}\n.home-players:empty { display: none; }\n\n.home-player-tile {\n position: relative;\n width: 100%;\n aspect-ratio: 1;\n padding: var(--space-sm);\n border-radius: var(--radius-lg);\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 6px;\n background: linear-gradient(135deg, var(--tile-from), var(--tile-to));\n border: 1.5px solid var(--tile-border);\n box-shadow: 0 0 14px var(--tile-glow);\n /* Guest default = cyan (c1). Variants override via custom props. */\n --tile-from: rgba(0, 245, 255, 0.32);\n --tile-to: rgba(0, 245, 255, 0.08);\n --tile-border: rgba(0, 245, 255, 0.7);\n --tile-glow: rgba(0, 245, 255, 0.35);\n}\n.home-player-tile-initial {\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 28px;\n line-height: 1;\n color: var(--color-text-white);\n text-shadow: 0 2px 8px rgba(0, 0, 0, 0.4);\n}\n.home-player-tile-name {\n font-family: var(--font-display);\n font-weight: 700;\n font-size: var(--font-size-xs);\n color: var(--color-text-white);\n max-width: 100%;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n padding: 0 2px;\n}\n/* Guest color variants cycle through brand neon palette (no purple \u2014\n reserved for analytics/steal per DESIGN.md). */\n.home-player-tile--c2 {\n --tile-from: rgba(57, 255, 20, 0.32);\n --tile-to: rgba(57, 255, 20, 0.08);\n --tile-border: rgba(57, 255, 20, 0.65);\n --tile-glow: rgba(57, 255, 20, 0.32);\n}\n.home-player-tile--c3 {\n --tile-from: rgba(255, 102, 0, 0.32);\n --tile-to: rgba(255, 102, 0, 0.08);\n --tile-border: rgba(255, 102, 0, 0.65);\n --tile-glow: rgba(255, 102, 0, 0.32);\n}\n.home-player-tile--c4 {\n --tile-from: rgba(0, 245, 255, 0.22);\n --tile-to: rgba(0, 245, 255, 0.04);\n --tile-border: rgba(0, 245, 255, 0.5);\n --tile-glow: rgba(0, 245, 255, 0.22);\n}\n/* Host tile \u2014 pink primary + glow-primary (DESIGN.md \"leader highlights\"). */\n.home-player-tile--host {\n --tile-from: rgba(255, 45, 106, 0.35);\n --tile-to: rgba(255, 45, 106, 0.08);\n --tile-border: rgba(255, 45, 106, 0.85);\n --tile-glow: rgba(255, 45, 106, 0.5);\n box-shadow: var(--glow-primary), 0 0 22px rgba(255, 45, 106, 0.35);\n}\n.home-player-tile-crown {\n position: absolute;\n top: -10px;\n right: -10px;\n font-size: 20px;\n line-height: 1;\n filter: drop-shadow(0 0 6px rgba(255, 45, 106, 0.8));\n pointer-events: none;\n}\n/* Empty-state: single full-width dashed pill (not a tile, to keep the\n \"no one here yet\" vibe distinct from \"someone is here\"). */\n.home-players-waiting {\n grid-column: 1 / -1;\n padding: var(--space-md);\n border-radius: var(--radius-full);\n border: 1px dashed var(--color-border-neon);\n background: transparent;\n color: var(--color-text-dim);\n font-family: var(--font-display);\n font-weight: 500;\n font-size: var(--font-size-sm);\n text-align: center;\n}\n\n.home-meta {\n position: relative;\n z-index: 1;\n font-family: var(--font-display);\n font-weight: 500;\n font-size: var(--font-size-xs);\n letter-spacing: 0.12em;\n text-transform: uppercase;\n color: var(--color-text-dim);\n max-width: 320px;\n line-height: 1.6;\n}\n\n/* Sticky CTA bar at the bottom of the home card */\n.home-cta-bar {\n display: flex;\n gap: var(--space-sm);\n padding: var(--space-md) var(--space-lg);\n background: rgba(0, 0, 0, 0.3);\n border-top: 1px solid var(--color-border-neon);\n}\n.home-cta-edit {\n padding: var(--space-sm) var(--space-md);\n font-size: var(--font-size-sm);\n}\n.home-cta-start {\n flex: 1;\n padding: var(--space-md);\n font-size: var(--font-size-base);\n box-shadow: var(--glow-primary), 0 0 40px rgba(255, 45, 106, 0.25);\n}\n/* When Start game is demoted (admin hasn't joined yet), drop its glow so the eye\n lands on the prominent \"Join as player\" CTA instead. */\n.home-cta-start.btn-ghost { box-shadow: none; flex: 0 0 auto; }\n\n/* Prominent Join-as-player CTA \u2014 lives above the Back/Start row inside the\n home-stage column. Full-width + oversized so the admin's next step is\n unmissable (it's the single most important action on the home-view). */\n.home-cta-join {\n width: 100%;\n margin-top: var(--space-md);\n padding: var(--space-lg) var(--space-md);\n font-size: var(--font-size-xl);\n font-weight: 700;\n letter-spacing: 0.02em;\n border-radius: var(--radius-xl);\n box-shadow: var(--glow-primary), 0 0 48px rgba(255, 45, 106, 0.3);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--space-sm);\n}\n.home-cta-join svg {\n width: 26px;\n height: 26px;\n stroke-width: 2.25;\n}\n.home-cta-join.hidden { display: none; }\n\n/* Wizard Step 4 \u2014 game mode cards (Artist Challenge / Intro Mode / Closest Wins) */\n.wiz-mode-cards {\n display: flex;\n flex-direction: column;\n gap: var(--space-xs);\n}\n.wiz-mode-card {\n display: flex;\n align-items: flex-start;\n gap: var(--space-sm);\n padding: var(--space-sm) var(--space-md);\n background: var(--color-dark-surface);\n border: 1px solid var(--color-border-neon);\n border-radius: var(--radius-lg);\n cursor: pointer;\n transition: var(--transition-fast);\n}\n.wiz-mode-card:hover { background: var(--color-dark-surface-hover); }\n/* Issue #827: a mode card disabled by an unmet requirement (e.g. Sudden Death\n below the 3-player floor) is dimmed and non-interactive.\n Issue #1799: the dimming used to sit on the card itself, which also dimmed\n the line explaining WHY it is blocked \u2014 the one line that has to stay\n readable. Dim the card's own content instead and leave .wiz-mode-hint.gated\n at full contrast. */\n.wiz-mode-card.disabled {\n cursor: not-allowed;\n pointer-events: none;\n}\n.wiz-mode-card.disabled .wiz-mode-icon,\n.wiz-mode-card.disabled .wiz-mode-title,\n.wiz-mode-card.disabled .wiz-lvl-toggle {\n opacity: 0.45;\n}\n/* Issue #1799: the gating requirement, shown in place of the mode hint. It is\n the only visible explanation on touch (no hover \u2192 no title tooltip). */\n.wiz-mode-hint.gated {\n color: var(--color-warning);\n font-weight: 600;\n}\n.wiz-mode-card.on {\n background: rgba(255, 45, 106, 0.08);\n border-color: var(--color-accent-primary);\n}\n.wiz-mode-icon {\n font-size: 22px;\n line-height: 1;\n flex-shrink: 0;\n margin-top: 2px;\n}\n.wiz-mode-body { flex: 1; min-width: 0; }\n.wiz-mode-title {\n font-family: var(--font-display);\n font-weight: 600;\n font-size: var(--font-size-base);\n color: var(--color-text-white);\n}\n.wiz-mode-hint {\n font-size: var(--font-size-xs);\n color: var(--color-text-neon-muted);\n margin-top: 2px;\n line-height: 1.45;\n}\n.wiz-mode-card.on .wiz-lvl-toggle {\n background: var(--color-accent-primary);\n border-color: var(--color-accent-primary);\n}\n.wiz-mode-card.on .wiz-lvl-toggle::after {\n left: 18px;\n background: var(--color-bg-primary);\n}\n\n/* Wizard Step 4 \u2014 core game-mode selector (#1180).\n \"Pick your game\" split: two poster panels, each with its own accent\n (year = pink, title&artist = cyan). The chosen one lifts + glows and shows a\n \"Playing\" badge; the other dims. Shared .wiz-mode-* type rules are overridden\n only inside .wiz-coremode-card so the bonus-mode cards are unaffected. */\n.wiz-coremode-cards {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: var(--space-sm);\n}\n.wiz-coremode-card {\n position: relative;\n display: flex;\n flex-direction: column;\n align-items: center;\n text-align: center;\n gap: 6px;\n padding: var(--space-md) var(--space-sm);\n background: var(--color-dark-surface);\n border: 1.5px solid var(--color-border-neon);\n border-radius: var(--radius-xl);\n cursor: pointer;\n overflow: hidden;\n transition: transform var(--transition-fast), box-shadow var(--transition-fast),\n background var(--transition-fast), border-color var(--transition-fast),\n opacity var(--transition-fast);\n}\n.wiz-coremode-card:hover { background: var(--color-dark-surface-hover); }\n.wiz-coremode-card .wiz-mode-icon {\n font-size: 32px;\n margin-top: 0;\n}\n.wiz-coremode-card .wiz-mode-body { flex: none; }\n.wiz-coremode-card .wiz-mode-title {\n font-weight: 900;\n letter-spacing: 0.02em;\n text-transform: uppercase;\n}\n.wiz-coremode-card .wiz-mode-hint { color: var(--color-text-dim); }\n\n/* Selected \u2014 accent fill + lift + glow, per mode. */\n.wiz-coremode-card.selected { transform: translateY(-2px); }\n.wiz-coremode-card--pink.selected {\n border-color: var(--color-accent-primary);\n background: radial-gradient(120% 100% at 50% 0%, rgba(255, 45, 106, 0.22), rgba(255, 45, 106, 0.04));\n box-shadow: 0 0 24px rgba(255, 45, 106, 0.30);\n}\n.wiz-coremode-card--cyan.selected {\n border-color: var(--color-accent-secondary);\n background: radial-gradient(120% 100% at 50% 0%, rgba(0, 245, 255, 0.20), rgba(0, 245, 255, 0.03));\n box-shadow: 0 0 24px rgba(0, 245, 255, 0.28);\n}\n\n/* Unselected \u2014 dimmed, but lifts toward full on hover so it still feels pickable. */\n.wiz-coremode-card.dim { opacity: 0.5; }\n.wiz-coremode-card.dim:hover { opacity: 0.8; }\n\n/* \"Playing\" badge, top-right, tinted to the panel's accent. */\n.wiz-coremode-badge {\n position: absolute;\n top: 8px;\n right: 8px;\n font-family: var(--font-display);\n font-weight: 800;\n font-size: 9px;\n letter-spacing: 0.06em;\n text-transform: uppercase;\n padding: 2px 7px;\n border-radius: var(--radius-full);\n}\n.wiz-coremode-card--pink .wiz-coremode-badge {\n background: var(--color-accent-primary);\n color: var(--color-text-white);\n}\n.wiz-coremode-card--cyan .wiz-coremode-badge {\n background: var(--color-accent-secondary);\n color: #04222a;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .wiz-coremode-card { transition: none; }\n .wiz-coremode-card.selected { transform: none; }\n}\n\n/* Home-view: Cast to TV link */\n.home-cast-link {\n display: inline-flex;\n align-items: center;\n gap: var(--space-xs);\n padding: var(--space-xs) var(--space-md);\n background: var(--color-dark-surface);\n border: 1px solid var(--color-accent-secondary);\n border-radius: var(--radius-full);\n font-family: var(--font-display);\n font-weight: 600;\n font-size: var(--font-size-sm);\n color: var(--color-accent-secondary);\n text-decoration: none;\n position: relative;\n z-index: 1;\n transition: var(--transition-fast);\n}\n.home-cast-link:hover {\n background: rgba(0, 245, 255, 0.08);\n box-shadow: var(--glow-secondary);\n}\n.home-cast-link.hidden { display: none; }\n\n/* Wizard Step 5: TTS test button */\n.wiz-detail-test {\n align-self: flex-start;\n margin-top: var(--space-xs);\n padding: var(--space-xs) var(--space-md);\n font-size: var(--font-size-xs);\n}\n.wiz-detail-test[disabled] { opacity: 0.5; cursor: not-allowed; }\n\n/* Wizard Step 5: WLED phase preset grid */\n.wiz-wled-grid {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: var(--space-xs);\n}\n.wiz-wled-row {\n display: flex;\n align-items: center;\n gap: var(--space-xs);\n}\n.wiz-wled-phase {\n font-family: var(--font-display);\n font-weight: 700;\n font-size: 10px;\n letter-spacing: 0.1em;\n color: var(--color-text-dim);\n min-width: 72px;\n}\n.wiz-wled-input {\n width: 60px;\n padding: 4px 8px;\n text-align: center;\n font-family: ui-monospace, monospace;\n font-size: var(--font-size-sm);\n}\n\n\n/* Home-view utility row \u2014 Cast to TV + Print QR sit side-by-side */\n.home-utility-row {\n display: flex;\n gap: var(--space-sm);\n flex-wrap: wrap;\n justify-content: center;\n position: relative;\n z-index: 1;\n}\n.home-utility-btn {\n display: inline-flex;\n align-items: center;\n gap: var(--space-xs);\n padding: var(--space-xs) var(--space-md);\n background: var(--color-dark-surface);\n border: 1px solid var(--color-border-neon);\n border-radius: var(--radius-full);\n font-family: var(--font-display);\n font-weight: 600;\n font-size: var(--font-size-sm);\n color: var(--color-text-neon-muted);\n cursor: pointer;\n transition: var(--transition-fast);\n}\n.home-utility-btn:hover {\n color: var(--color-text-white);\n border-color: var(--color-accent-secondary);\n}\n.home-utility-btn.hidden { display: none; }\n\n/* End game button \u2014 only visible when a LOBBY session exists. Red-neon tint. */\n.home-cta-end {\n border-color: rgba(255, 0, 64, 0.4);\n color: var(--color-error-neon);\n}\n.home-cta-end:hover {\n background: rgba(255, 0, 64, 0.1);\n box-shadow: 0 0 12px rgba(255, 0, 64, 0.3);\n}\n.home-cta-end.hidden { display: none; }\n\n/* Home-view unconfigured state \u2014 setup prompt hero */\n.home-hero-card--setup {\n border-color: var(--color-border-neon);\n box-shadow: none;\n gap: var(--space-md);\n}\n.home-setup-glyph {\n width: 56px;\n height: 56px;\n display: grid;\n place-items: center;\n color: var(--color-accent-secondary);\n text-shadow: 0 0 12px rgba(0, 245, 255, 0.4);\n}\n.home-setup-glyph svg { width: 100%; height: 100%; }\n.home-hero-sub--plain {\n color: var(--color-text-neon-muted);\n font-family: var(--font-body);\n text-align: center;\n font-size: var(--font-size-sm);\n line-height: 1.5;\n max-width: 280px;\n}\n\n/* Setup-mode CTA takes the full width of the bar */\n.home-cta-setup {\n flex: 1;\n padding: var(--space-md);\n font-size: var(--font-size-base);\n box-shadow: var(--glow-primary), 0 0 40px rgba(255, 45, 106, 0.25);\n}\n.home-cta-setup.hidden { display: none; }\n\n/* ==========================================================================\n Player Onboarding v2 (DESIGN.md \u00A7 Player onboarding \u2014 post-QR education)\n ========================================================================== */\n\n/* Hide the outer .player-header (wordmark + connection indicator) on the\n tour/ready screens so they run full-screen \u2014 the ready view has its own\n wordmark hero and the tour has its own step-progress header. */\nbody.is-learning-screen .player-header { display: none; }\n/* During active play (the guessing round + the reveal) the big wordmark is\n redundant chrome and just eats vertical space, so hide the outer header \u2014\n the game/reveal cards carry their own context. Branding stays on the\n join / lobby / end screens. */\nbody.is-ingame .player-header { display: none; }\n\n/* Tour view \u2014 full-screen takeover, dark stage + dual-radial glow */\n#tour-view.view:not(.hidden) {\n display: flex;\n flex-direction: column;\n}\n.tour-container {\n min-height: 100vh;\n padding: var(--space-xl) var(--space-md) var(--space-md);\n background:\n radial-gradient(circle at 50% 10%, rgba(255, 45, 106, 0.10), transparent 55%),\n radial-gradient(circle at 85% 90%, rgba(0, 245, 255, 0.08), transparent 55%),\n var(--color-bg-primary);\n display: flex;\n flex-direction: column;\n}\n\n/* Wizard-style progress header (matches admin first-run wizard pattern) */\n.tour-header-wiz {\n margin-bottom: var(--space-lg);\n display: flex;\n flex-direction: column;\n gap: var(--space-sm);\n}\n.tour-step-count {\n display: flex;\n align-items: center;\n justify-content: space-between;\n font-family: var(--font-body);\n font-size: var(--font-size-xs);\n font-weight: 600;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n color: var(--color-text-neon-muted);\n}\n.tour-step-count .of { color: var(--color-text-dim); font-weight: 500; }\n.tour-skip-link {\n font-family: var(--font-body);\n font-size: var(--font-size-sm);\n font-weight: 500;\n color: var(--color-text-dim);\n background: transparent;\n border: 0;\n cursor: pointer;\n padding: var(--space-xs) var(--space-sm);\n transition: color var(--transition-fast);\n}\n.tour-skip-link:hover,\n.tour-skip-link:focus-visible {\n color: var(--color-text-neon-muted);\n outline: none;\n}\n.tour-wiz-progress {\n display: flex;\n gap: 4px;\n width: 100%;\n}\n.tour-wiz-seg {\n flex: 1;\n height: 3px;\n background: rgba(255, 255, 255, 0.08);\n border-radius: var(--radius-full);\n overflow: hidden;\n position: relative;\n}\n.tour-wiz-seg.filled {\n background: linear-gradient(90deg, var(--color-accent-primary), var(--color-accent-secondary));\n box-shadow: 0 0 12px rgba(255, 45, 106, 0.5);\n}\n.tour-wiz-seg.active .tour-wiz-seg-inner {\n height: 100%;\n width: 60%;\n background: linear-gradient(90deg, var(--color-accent-primary), var(--color-accent-secondary));\n box-shadow: 0 0 12px rgba(255, 45, 106, 0.5);\n border-radius: var(--radius-full);\n}\n\n/* Tour card \u2014 one per step */\n.tour-card {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: var(--space-md) 0;\n animation: tour-card-enter var(--transition-slow) ease-out;\n}\n@keyframes tour-card-enter {\n from { opacity: 0; transform: translateY(12px); }\n to { opacity: 1; transform: translateY(0); }\n}\n.tour-card.hidden { display: none; }\n@media (prefers-reduced-motion: reduce) {\n .tour-card { animation: none; }\n}\n\n.tour-title {\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 2.5rem; /* ~40px \u2014 scales between 4xl and display */\n line-height: 1.0;\n text-align: center;\n color: var(--color-text-white);\n letter-spacing: -0.02em;\n margin-bottom: var(--space-sm);\n}\n.tour-caption {\n font-family: var(--font-body);\n font-weight: 500;\n font-size: var(--font-size-lg);\n text-align: center;\n color: var(--color-text-neon-muted);\n margin-bottom: var(--space-xl);\n max-width: 320px;\n}\n\n.tour-preview {\n flex: 1;\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--space-md);\n margin-bottom: var(--space-md);\n}\n\n/* Preview: year slider (card 1) */\n.tour-preview-album {\n width: 88px; height: 88px;\n border-radius: var(--radius-lg);\n background: linear-gradient(135deg, #2a1b4a 0%, #1a1a24 100%);\n border: 1px solid rgba(255, 255, 255, 0.08);\n display: flex; align-items: center; justify-content: center;\n position: relative;\n overflow: hidden;\n}\n.tour-preview-album::after {\n content: '';\n position: absolute;\n width: 32px; height: 32px;\n border-radius: 50%;\n background: radial-gradient(circle, #0a0a12 28%, #2a2a3a 29%, #2a2a3a 62%, #0a0a12 63%);\n border: 1px solid rgba(255, 255, 255, 0.08);\n}\n.tour-preview-album::before {\n content: '\u266A';\n position: absolute;\n font-size: 26px;\n color: var(--color-accent-secondary);\n opacity: 0.75;\n z-index: 1;\n}\n.tour-year-display {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--space-md);\n}\n.tour-year-adjust {\n width: 38px; height: 38px;\n border-radius: 50%;\n border: 1.5px solid rgba(255, 255, 255, 0.25);\n background: transparent;\n color: rgba(255, 255, 255, 0.6);\n font-size: var(--font-size-xl);\n font-weight: 400;\n display: flex; align-items: center; justify-content: center;\n}\n.tour-year-big {\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 4.25rem; /* ~68px \u2014 below year reveal's 56px per DESIGN.md rationale */\n color: var(--color-accent-secondary);\n text-shadow: 0 0 24px rgba(0, 245, 255, 0.6);\n line-height: 1;\n letter-spacing: -0.03em;\n}\n.tour-preview-slider {\n width: 100%;\n max-width: 320px;\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n}\n.tour-slider-label {\n font-family: var(--font-body);\n font-size: var(--font-size-sm);\n color: rgba(255, 255, 255, 0.5);\n min-width: 34px;\n text-align: center;\n}\n.tour-slider-track {\n flex: 1;\n height: 4px;\n background: rgba(255, 255, 255, 0.15);\n border-radius: 2px;\n position: relative;\n}\n.tour-slider-thumb {\n position: absolute;\n top: 50%;\n left: 45.3%;\n transform: translate(-50%, -50%);\n width: 20px; height: 20px;\n border-radius: 50%;\n background: var(--color-accent-secondary);\n box-shadow: 0 0 16px rgba(0, 245, 255, 0.8);\n border: 2px solid var(--color-bg-primary);\n}\n\n/* Preview: bet (card 2) */\n.tour-bet-button {\n background: linear-gradient(135deg, rgba(255, 45, 106, 0.12), rgba(255, 45, 106, 0.06));\n border: 2px solid var(--color-accent-primary);\n border-radius: var(--radius-xl);\n padding: var(--space-md) var(--space-lg);\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n box-shadow: 0 0 24px rgba(255, 45, 106, 0.35);\n}\n.tour-bet-button .tour-bet-dice {\n font-size: 30px;\n filter: drop-shadow(0 0 6px rgba(255, 45, 106, 0.6));\n}\n.tour-bet-button .tour-bet-label {\n font-family: var(--font-display);\n font-weight: 700;\n font-size: var(--font-size-lg);\n color: var(--color-text-white);\n}\n.tour-bet-score {\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n padding: var(--space-sm) var(--space-md);\n background: var(--color-bg-surface);\n border-radius: var(--radius-md);\n border: 1px solid rgba(255, 255, 255, 0.06);\n}\n.tour-bet-score-base {\n font-family: var(--font-display);\n font-weight: 700;\n font-size: var(--font-size-2xl);\n color: var(--color-text-neon-muted);\n}\n.tour-bet-score-op { color: var(--color-text-dim); font-size: var(--font-size-lg); }\n.tour-bet-score-multi {\n font-family: var(--font-display);\n font-weight: 700;\n font-size: var(--font-size-2xl);\n color: var(--color-accent-primary);\n}\n.tour-bet-score-final {\n font-family: var(--font-display);\n font-weight: 900;\n font-size: var(--font-size-4xl);\n color: var(--color-success-neon);\n text-shadow: 0 0 12px rgba(57, 255, 20, 0.5);\n}\n\n/* Preview: steal (card 3) */\n.tour-steal-button {\n background: linear-gradient(135deg, rgba(0, 245, 255, 0.12), rgba(0, 245, 255, 0.04));\n border: 2px solid var(--color-accent-secondary);\n border-radius: var(--radius-xl);\n padding: var(--space-md) var(--space-lg);\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n box-shadow: 0 0 24px rgba(0, 245, 255, 0.4);\n}\n.tour-steal-button .tour-steal-ninja { font-size: 30px; }\n.tour-steal-button .tour-steal-label {\n font-family: var(--font-display);\n font-weight: 700;\n font-size: var(--font-size-lg);\n color: var(--color-text-white);\n}\n.tour-steal-targets {\n display: flex;\n gap: var(--space-sm);\n align-items: center;\n}\n.tour-steal-target {\n background: var(--color-bg-surface);\n border-radius: var(--radius-md);\n padding: var(--space-sm) var(--space-md);\n font-family: var(--font-body);\n font-size: var(--font-size-sm);\n font-weight: 500;\n color: var(--color-text-neon-muted);\n border: 1px solid rgba(255, 255, 255, 0.06);\n}\n.tour-steal-target.highlighted {\n color: var(--color-text-white);\n border-color: var(--color-accent-secondary);\n box-shadow: 0 0 12px rgba(0, 245, 255, 0.35);\n}\n.tour-hint {\n font-family: var(--font-body);\n font-size: var(--font-size-sm);\n color: rgba(255, 255, 255, 0.4);\n text-align: center;\n font-style: italic;\n margin-top: var(--space-xs);\n}\n\n/* Preview: Title & Artist mode (card 5, #1180) */\n.tour-ta-fields {\n display: flex;\n flex-direction: column;\n gap: var(--space-sm);\n width: 100%;\n}\n.tour-ta-field {\n display: flex;\n flex-direction: column;\n gap: 4px;\n padding: 10px 14px;\n background: linear-gradient(180deg, rgba(255, 45, 106, 0.06), rgba(255, 255, 255, 0.02));\n border: 1px solid rgba(255, 45, 106, 0.22);\n border-radius: var(--radius-lg);\n text-align: left;\n}\n.tour-ta-field-label {\n font-family: var(--font-display);\n font-weight: 700;\n font-size: var(--font-size-xs);\n letter-spacing: 0.08em;\n text-transform: uppercase;\n color: var(--color-text-neon-muted);\n}\n.tour-ta-field-val {\n font-family: var(--font-body);\n font-weight: 600;\n font-size: var(--font-size-md);\n color: var(--color-text-white);\n}\n\n/* Preview: artist (card 4) */\n.tour-artist-prompt {\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n padding: var(--space-sm) var(--space-md);\n background: var(--color-bg-surface);\n border-radius: var(--radius-md);\n border: 1px solid rgba(255, 255, 255, 0.06);\n width: 100%;\n max-width: 320px;\n}\n.tour-artist-prompt .tour-artist-mic { font-size: var(--font-size-xl); }\n.tour-artist-prompt .tour-artist-who {\n font-family: var(--font-body);\n font-size: var(--font-size-base);\n font-weight: 500;\n color: var(--color-text-white);\n}\n.tour-artist-prompt .tour-artist-bonus {\n margin-left: auto;\n background: rgba(34, 197, 94, 0.15);\n color: var(--color-success);\n font-weight: 700;\n font-size: var(--font-size-sm);\n padding: 2px var(--space-sm);\n border-radius: var(--radius-full);\n}\n.tour-artist-grid {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: var(--space-sm);\n width: 100%;\n max-width: 320px;\n}\n.tour-artist-option {\n min-height: 48px;\n padding: var(--space-sm) var(--space-md);\n border: 2px solid rgba(255, 255, 255, 0.12);\n border-radius: var(--radius-md);\n background: var(--color-bg-surface);\n color: var(--color-text-white);\n font-family: var(--font-body);\n font-size: var(--font-size-base);\n font-weight: 500;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: default;\n}\n.tour-artist-option.is-winner {\n background: var(--color-success);\n border-color: var(--color-success);\n color: var(--color-text-white);\n box-shadow: var(--glow-primary);\n}\n\n/* Tour footer: Skip + Next buttons */\n.tour-footer {\n margin-top: auto;\n padding-top: var(--space-md);\n display: flex;\n gap: var(--space-sm);\n align-items: stretch;\n}\n.btn-tour-skip {\n flex: 1;\n background: transparent;\n color: var(--color-text-neon-muted);\n border: 1.5px solid rgba(255, 255, 255, 0.15);\n border-radius: var(--radius-lg);\n padding: var(--space-md) var(--space-md);\n font-family: var(--font-body);\n font-weight: 600;\n font-size: var(--font-size-md);\n cursor: pointer;\n}\n.btn-tour-skip:hover,\n.btn-tour-skip:focus-visible {\n border-color: rgba(255, 255, 255, 0.3);\n color: var(--color-text-white);\n outline: none;\n}\n.btn-tour-next {\n flex: 2;\n background: var(--color-accent-primary);\n color: var(--color-text-white);\n border: none;\n border-radius: var(--radius-lg);\n padding: var(--space-md) var(--space-lg);\n font-family: var(--font-display);\n font-weight: 700;\n font-size: var(--font-size-lg);\n box-shadow: var(--glow-primary);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--space-sm);\n}\n.btn-tour-next .chev { opacity: 0.85; }\n\n/* Ready view \u2014 showtime transition between tour and lobby */\n#ready-view.view:not(.hidden) {\n display: flex;\n flex-direction: column;\n}\n.ready-container {\n min-height: 100vh;\n padding: var(--space-xl);\n background:\n radial-gradient(circle at 50% 30%, rgba(255, 45, 106, 0.10), transparent 55%),\n radial-gradient(circle at 85% 80%, rgba(0, 245, 255, 0.08), transparent 55%),\n var(--color-bg-primary);\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n gap: var(--space-sm);\n}\n.ready-wordmark {\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 5rem; /* ~80px \u2014 at hero scale */\n letter-spacing: -0.02em;\n margin-bottom: var(--space-sm);\n text-shadow: 0 0 48px rgba(255, 45, 106, 0.55);\n animation: ready-wordmark-in 0.5s ease-out;\n}\n.ready-wordmark .beat { color: var(--color-text-white); }\n.ready-wordmark .ify {\n background: linear-gradient(90deg, var(--color-accent-primary), var(--color-accent-secondary));\n -webkit-background-clip: text;\n background-clip: text;\n -webkit-text-fill-color: transparent;\n color: transparent;\n}\n@keyframes ready-wordmark-in {\n from { opacity: 0; transform: translateY(16px); }\n to { opacity: 1; transform: translateY(0); }\n}\n.ready-name {\n font-family: var(--font-display);\n font-weight: 700;\n font-size: var(--font-size-3xl);\n color: var(--color-text-white);\n margin-bottom: var(--space-xs);\n animation: ready-fade-in 0.5s ease-out 0.1s both;\n}\n.ready-subtitle {\n font-family: var(--font-body);\n font-size: var(--font-size-md);\n color: var(--color-text-neon-muted);\n margin-bottom: var(--space-2xl);\n animation: ready-fade-in 0.5s ease-out 0.2s both;\n}\n@keyframes ready-fade-in {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n.ready-waiting {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--space-md);\n animation: ready-fade-in 0.5s ease-out 0.3s both;\n}\n.ready-pulse {\n position: relative;\n width: 16px; height: 16px;\n border-radius: 50%;\n background: var(--color-accent-secondary);\n box-shadow: 0 0 12px rgba(0, 245, 255, 0.7);\n}\n.ready-pulse::before {\n content: '';\n position: absolute;\n inset: -8px;\n border-radius: 50%;\n border: 2px solid var(--color-accent-secondary);\n opacity: 0.6;\n animation: ready-pulse-ring 1.8s ease-out infinite;\n}\n@keyframes ready-pulse-ring {\n 0% { transform: scale(0.6); opacity: 0.8; }\n 100% { transform: scale(2.4); opacity: 0; }\n}\n@media (prefers-reduced-motion: reduce) {\n .ready-wordmark, .ready-name, .ready-subtitle, .ready-waiting { animation: none; }\n .ready-pulse::before { animation: none; opacity: 0; }\n}\n.ready-label {\n font-family: var(--font-body);\n font-size: var(--font-size-md);\n font-weight: 500;\n color: var(--color-text-white);\n}\n.ready-count {\n font-family: var(--font-body);\n font-size: var(--font-size-sm);\n color: var(--color-text-dim);\n}\n\n/* Lobby: Replay-tour link */\n.replay-tour-link {\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n padding: var(--space-sm) var(--space-md);\n background: transparent;\n border: 1px dashed rgba(255, 45, 106, 0.4);\n border-radius: var(--radius-md);\n color: var(--color-accent-primary);\n font-family: var(--font-body);\n font-size: var(--font-size-sm);\n font-weight: 600;\n text-decoration: none;\n margin-bottom: var(--space-sm);\n cursor: pointer;\n width: 100%;\n transition: all var(--transition-fast);\n}\n.replay-tour-link:hover,\n.replay-tour-link:focus-visible {\n border-color: var(--color-accent-primary);\n background: rgba(255, 45, 106, 0.05);\n outline: none;\n}\n.replay-tour-link .arrow { margin-left: auto; }\n\n/* Admin home-view: LEARNING player state */\n.home-player-tile--learning {\n border-style: dashed !important;\n opacity: 0.72;\n}\n.home-player-tile-tour {\n position: absolute;\n top: -6px;\n right: -6px;\n background: rgba(0, 245, 255, 0.1);\n color: var(--color-accent-secondary);\n font-family: var(--font-body);\n font-size: 9px;\n font-weight: 700;\n letter-spacing: 0.06em;\n padding: 2px 6px;\n border-radius: var(--radius-full);\n border: 1px solid rgba(0, 245, 255, 0.4);\n box-shadow: 0 0 8px rgba(0, 245, 255, 0.25);\n}\n.home-learning-warning {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--space-xs);\n padding: var(--space-sm) var(--space-md);\n margin-bottom: var(--space-sm);\n background: rgba(255, 102, 0, 0.08);\n border: 1px solid rgba(255, 102, 0, 0.25);\n border-radius: var(--radius-md);\n color: var(--color-warning-alt);\n font-family: var(--font-body);\n font-size: var(--font-size-sm);\n font-weight: 500;\n text-align: center;\n}\n.home-learning-warning.hidden { display: none; }\n\n/* ==========================================================================\n Player lobby \u2014 tile grid (mirrors admin .home-player-tile)\n Jackbox-style tiles replace the legacy flat .player-card chips. Host wears\n pink + crown; guests cycle cyan \u2192 green \u2192 orange \u2192 dim-cyan in join order;\n current player gets a cyan \"YOU\" chip in the same top-right slot as the\n crown (they never collide \u2014 is_admin resolves to crown first).\n ========================================================================== */\n.player-tiles-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(84px, 1fr));\n gap: var(--space-sm);\n justify-items: center;\n width: 100%;\n}\n.player-tiles-grid:empty { display: none; }\n\n.player-tile {\n position: relative;\n width: 100%;\n aspect-ratio: 1;\n padding: var(--space-sm);\n border-radius: var(--radius-lg);\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 6px;\n background: linear-gradient(135deg, var(--tile-from), var(--tile-to));\n border: 1.5px solid var(--tile-border);\n box-shadow: 0 0 14px var(--tile-glow);\n /* Guest default (c1) = cyan. Variants override via custom props. */\n --tile-from: rgba(0, 245, 255, 0.32);\n --tile-to: rgba(0, 245, 255, 0.08);\n --tile-border: rgba(0, 245, 255, 0.7);\n --tile-glow: rgba(0, 245, 255, 0.35);\n transition: box-shadow var(--transition-fast), border-color var(--transition-fast);\n}\n.player-tile-initial {\n font-family: var(--font-display);\n font-weight: 900;\n font-size: var(--font-size-3xl);\n line-height: 1;\n color: var(--color-text-white);\n text-shadow: 0 2px 8px rgba(0, 0, 0, 0.4);\n}\n.player-tile-name {\n font-family: var(--font-display);\n font-weight: 700;\n font-size: var(--font-size-xs);\n color: var(--color-text-white);\n max-width: 100%;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n padding: 0 2px;\n}\n.player-tile--c2 {\n --tile-from: rgba(57, 255, 20, 0.32);\n --tile-to: rgba(57, 255, 20, 0.08);\n --tile-border: rgba(57, 255, 20, 0.65);\n --tile-glow: rgba(57, 255, 20, 0.32);\n}\n.player-tile--c3 {\n --tile-from: rgba(255, 102, 0, 0.32);\n --tile-to: rgba(255, 102, 0, 0.08);\n --tile-border: rgba(255, 102, 0, 0.65);\n --tile-glow: rgba(255, 102, 0, 0.32);\n}\n.player-tile--c4 {\n --tile-from: rgba(0, 245, 255, 0.22);\n --tile-to: rgba(0, 245, 255, 0.04);\n --tile-border: rgba(0, 245, 255, 0.5);\n --tile-glow: rgba(0, 245, 255, 0.22);\n}\n.player-tile--host {\n --tile-from: rgba(255, 45, 106, 0.35);\n --tile-to: rgba(255, 45, 106, 0.08);\n --tile-border: rgba(255, 45, 106, 0.85);\n --tile-glow: rgba(255, 45, 106, 0.5);\n box-shadow: var(--glow-primary), 0 0 22px rgba(255, 45, 106, 0.35);\n}\n\n/* Host marker \u2014 crown, top-right */\n.player-tile-crown {\n position: absolute;\n top: -10px;\n right: -10px;\n font-size: 20px;\n line-height: 1;\n filter: drop-shadow(0 0 6px rgba(255, 45, 106, 0.8));\n pointer-events: none;\n}\n\n/* Current-player marker \u2014 cyan YOU chip, top-right (only shows when NOT host) */\n.player-tile-you-chip {\n position: absolute;\n top: -10px;\n right: -10px;\n background: var(--color-accent-secondary);\n color: var(--color-bg-primary);\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 9px;\n letter-spacing: 0.1em;\n padding: 3px 7px;\n border-radius: var(--radius-full);\n box-shadow: 0 0 12px rgba(0, 245, 255, 0.6);\n pointer-events: none;\n}\n\n/* Away badge \u2014 for disconnected players */\n.player-tile-away {\n position: absolute;\n bottom: -8px;\n left: 50%;\n transform: translateX(-50%);\n font-family: var(--font-body);\n font-size: 9px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.08em;\n color: var(--color-text-dim);\n background: var(--color-bg-primary);\n padding: 2px 6px;\n border-radius: var(--radius-full);\n border: 1px solid rgba(255, 255, 255, 0.12);\n pointer-events: none;\n}\n.player-tile--disconnected {\n opacity: 0.5;\n filter: grayscale(0.4);\n}\n\n/* New-join animation (carried over from .player-card.is-new) */\n.player-tile.is-new {\n animation: player-tile-pop var(--transition-slow) ease-out;\n}\n@keyframes player-tile-pop {\n 0% { transform: scale(0.6); opacity: 0; }\n 60% { transform: scale(1.08); opacity: 1; }\n 100% { transform: scale(1); opacity: 1; }\n}\n@media (prefers-reduced-motion: reduce) {\n .player-tile.is-new { animation: none; }\n}\n\n/* ==========================================================================\n Round-reveal v2 \u2014 Duel layout + breakdown + stats sheets (DESIGN.md)\n ========================================================================== */\n\n/* Header v2: round count + difficulty badge + \u24D8 */\n.reveal-header-v2 {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: var(--space-md);\n gap: var(--space-sm);\n}\n.reveal-header-v2 .round-count {\n font-family: var(--font-body);\n font-size: var(--font-size-xs);\n font-weight: 600;\n letter-spacing: 0.06em;\n text-transform: uppercase;\n color: var(--color-text-neon-muted);\n display: flex; align-items: center; gap: 4px;\n}\n.reveal-header-v2 .header-right {\n display: flex; align-items: center; gap: var(--space-sm);\n}\n/* Auto-advance countdown ring on the player reveal (mirrors admin #1048 /\n dashboard #1185). Cyan per DESIGN.md \u2014 timer = --color-accent-secondary. */\n.reveal-advance-pill {\n position: relative;\n width: 32px; height: 32px;\n flex-shrink: 0;\n display: inline-flex; align-items: center; justify-content: center;\n}\n.reveal-advance-pill.hidden { display: none; }\n.reveal-advance-svg {\n width: 100%; height: 100%;\n transform: rotate(-90deg);\n}\n.reveal-advance-bg {\n fill: none;\n stroke: rgba(255, 255, 255, 0.12);\n stroke-width: 5;\n}\n.reveal-advance-fg {\n fill: none;\n stroke: var(--color-accent-secondary);\n stroke-width: 5;\n stroke-linecap: round;\n transition: stroke-dashoffset 0.5s linear;\n filter: drop-shadow(var(--glow-secondary));\n}\n.reveal-advance-num {\n position: absolute; inset: 0;\n display: flex; align-items: center; justify-content: center;\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 13px;\n color: var(--color-accent-secondary);\n}\n.info-btn {\n width: 28px; height: 28px;\n border-radius: 50%;\n border: 1px solid rgba(255, 255, 255, 0.14);\n background: var(--color-bg-surface);\n color: var(--color-text-neon-muted);\n font-size: var(--font-size-base);\n font-weight: 700;\n font-family: var(--font-display);\n display: flex; align-items: center; justify-content: center;\n cursor: pointer;\n transition: color var(--transition-fast), border-color var(--transition-fast);\n padding: 0;\n}\n.info-btn:hover,\n.info-btn:focus-visible {\n color: var(--color-text-white);\n border-color: rgba(255, 255, 255, 0.3);\n outline: none;\n}\n\n/* Song strip */\n.song-strip {\n display: flex; align-items: center; gap: var(--space-sm);\n padding: var(--space-sm) var(--space-sm) var(--space-sm) var(--space-sm);\n background: rgba(255, 255, 255, 0.04);\n border-radius: var(--radius-lg);\n border: 1px solid rgba(255, 255, 255, 0.08);\n margin-bottom: var(--space-md);\n}\n.song-strip-cover {\n width: 56px; height: 56px;\n border-radius: var(--radius-md);\n object-fit: cover;\n flex-shrink: 0;\n background: linear-gradient(135deg, #ff6b9a, #6366f1);\n}\n.song-strip-info { flex: 1; min-width: 0; }\n.song-strip-title {\n font-family: var(--font-display);\n font-weight: 700;\n font-size: var(--font-size-md);\n color: var(--color-text-white);\n overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\n}\n.song-strip-artist {\n font-family: var(--font-body);\n font-size: var(--font-size-sm);\n color: var(--color-text-neon-muted);\n margin-top: 2px;\n overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\n}\n\n/* Chip row (bet / streak) */\n.chip-row {\n display: flex; gap: var(--space-xs);\n margin-bottom: var(--space-sm);\n flex-wrap: wrap;\n}\n.chip-row.hidden { display: none; }\n.chip-row .chip {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 5px 10px;\n border-radius: var(--radius-full);\n font-family: var(--font-body);\n font-size: var(--font-size-xs);\n font-weight: 700;\n letter-spacing: 0.04em;\n}\n.chip-row .chip--bet-won {\n background: rgba(255, 45, 106, 0.12);\n border: 1px solid rgba(255, 45, 106, 0.5);\n color: var(--color-accent-primary);\n box-shadow: 0 0 12px rgba(255, 45, 106, 0.2);\n}\n.chip-row .chip--bet-lost {\n background: rgba(255, 0, 64, 0.08);\n border: 1px solid rgba(255, 0, 64, 0.4);\n color: var(--color-error-neon);\n}\n.chip-row .chip--streak {\n background: rgba(255, 102, 0, 0.12);\n border: 1px solid rgba(255, 102, 0, 0.5);\n color: var(--color-warning-alt);\n}\n\n/* Duel */\n.duel {\n padding: var(--space-lg) var(--space-xs) var(--space-md);\n margin-bottom: var(--space-sm);\n}\n.duel-emotion {\n text-align: center;\n font-family: var(--font-display);\n font-weight: 900;\n font-size: var(--font-size-2xl);\n letter-spacing: 0.06em;\n margin-bottom: var(--space-md);\n min-height: 1.2em;\n transition: color var(--transition-normal);\n}\n.duel-emotion.hidden { visibility: hidden; }\n.duel-emotion--exact {\n color: var(--color-success-neon);\n text-shadow: 0 0 16px rgba(57, 255, 20, 0.55);\n}\n.duel-emotion--close {\n color: var(--color-success-neon);\n text-shadow: 0 0 14px rgba(57, 255, 20, 0.45);\n}\n.duel-emotion--wrong {\n color: var(--color-error-neon);\n text-shadow: 0 0 14px rgba(255, 0, 64, 0.45);\n}\n.duel-emotion--missed {\n color: var(--color-text-dim);\n text-shadow: none;\n}\n.duel-row {\n display: grid;\n grid-template-columns: 1fr auto 1fr;\n gap: var(--space-sm);\n align-items: center;\n}\n.duel-side { text-align: center; min-width: 0; }\n.duel-label {\n font-family: var(--font-body);\n font-size: var(--font-size-xs);\n letter-spacing: 0.08em;\n text-transform: uppercase;\n color: var(--color-text-dim);\n font-weight: 600;\n margin-bottom: var(--space-sm);\n}\n.duel-year {\n font-family: var(--font-display);\n font-weight: 900;\n /* Issue #1072: scale down on narrow viewports so a 4-digit year never overflows\n its 1fr track and pushes the duel-row past the screen edge. */\n font-size: clamp(40px, 12vw, 64px);\n line-height: 1;\n letter-spacing: -0.03em;\n}\n.duel-year.mine { color: var(--color-text-neon-muted); }\n.duel-year.correct {\n color: var(--color-accent-secondary);\n text-shadow: 0 0 24px rgba(0, 245, 255, 0.6);\n}\n.duel-gap {\n display: flex; flex-direction: column; align-items: center; justify-content: center;\n gap: 2px;\n min-width: 48px;\n}\n.duel-gap-x {\n font-family: var(--font-display);\n font-weight: 700;\n font-size: var(--font-size-xl);\n color: var(--color-text-dim);\n opacity: 0.6;\n line-height: 1;\n}\n.duel-gap-n {\n font-family: var(--font-display);\n font-weight: 900;\n font-size: var(--font-size-2xl);\n color: var(--color-error-neon);\n text-shadow: 0 0 10px rgba(255, 0, 64, 0.35);\n line-height: 1;\n}\n.duel-gap--exact .duel-gap-n {\n color: var(--color-success-neon);\n text-shadow: 0 0 10px rgba(57, 255, 20, 0.5);\n}\n.duel-gap--close .duel-gap-n {\n color: var(--color-success-neon);\n text-shadow: 0 0 8px rgba(57, 255, 20, 0.35);\n}\n.duel-gap-unit {\n font-family: var(--font-body);\n font-size: 9px;\n color: var(--color-text-dim);\n text-transform: uppercase;\n letter-spacing: 0.1em;\n margin-top: 3px;\n}\n\n/* Score row */\n.score-row {\n display: flex; align-items: center; justify-content: space-between;\n padding: 14px 18px;\n background: var(--color-bg-surface);\n border-radius: var(--radius-lg);\n border: 1px solid rgba(0, 245, 255, 0.25);\n box-shadow: 0 0 14px rgba(0, 245, 255, 0.12);\n margin-bottom: var(--space-md);\n gap: var(--space-sm);\n}\n.score-row-left {\n font-family: var(--font-body);\n font-size: var(--font-size-xs);\n color: var(--color-text-neon-muted);\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.08em;\n display: flex; flex-direction: column; gap: 3px;\n min-width: 0;\n}\n.score-row-subtitle {\n color: var(--color-text-white);\n font-size: var(--font-size-sm);\n font-weight: 700;\n letter-spacing: 0;\n text-transform: none;\n overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\n}\n.score-row-right {\n display: flex; align-items: center; gap: var(--space-sm);\n flex-shrink: 0;\n}\n.score-row-pts {\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 38px;\n color: var(--color-accent-secondary);\n text-shadow: 0 0 18px rgba(0, 245, 255, 0.5);\n line-height: 1;\n}\n\n/* Standings (compact list inside a card-section) */\n.standings-section .leaderboard-list {\n display: flex; flex-direction: column; gap: 6px;\n}\n\n/* ==========================================================================\n Bottom-sheet modal (used for points breakdown + round stats)\n ========================================================================== */\n.sheet-backdrop {\n position: fixed;\n inset: 0;\n z-index: 400;\n display: flex;\n align-items: flex-end;\n justify-content: center;\n}\n.sheet-backdrop.hidden { display: none; }\n.sheet-dim {\n position: absolute; inset: 0;\n background: rgba(10, 10, 18, 0.6);\n backdrop-filter: blur(2px);\n animation: sheet-dim-in 200ms ease-out;\n}\n@keyframes sheet-dim-in { from { opacity: 0; } to { opacity: 1; } }\n.sheet {\n position: relative;\n z-index: 1;\n width: 100%;\n max-width: 520px;\n background: linear-gradient(180deg, #14141e, #0a0a12);\n border-top: 1px solid rgba(0, 245, 255, 0.25);\n border-radius: var(--radius-2xl) var(--radius-2xl) 0 0;\n box-shadow: 0 -12px 40px rgba(0, 0, 0, 0.5), 0 -4px 16px rgba(0, 245, 255, 0.1);\n padding: 14px 20px calc(28px + env(safe-area-inset-bottom, 0));\n max-height: 80vh;\n overflow-y: auto;\n animation: sheet-slide-up 320ms cubic-bezier(0.22, 0.8, 0.32, 1);\n}\n@keyframes sheet-slide-up {\n from { transform: translateY(100%); }\n to { transform: translateY(0); }\n}\n@media (prefers-reduced-motion: reduce) {\n .sheet-dim { animation: none; }\n .sheet { animation: none; }\n}\n.sheet-handle {\n width: 40px; height: 4px; border-radius: 2px;\n background: rgba(255, 255, 255, 0.2);\n margin: 0 auto 16px;\n}\n.sheet-header {\n display: flex; align-items: center; justify-content: space-between;\n margin-bottom: var(--space-md);\n}\n.sheet-title {\n font-family: var(--font-display);\n font-weight: 800;\n font-size: var(--font-size-lg);\n display: flex; align-items: center; gap: 8px;\n color: var(--color-text-white);\n}\n.sheet-close {\n width: 32px; height: 32px; border-radius: 50%;\n background: rgba(255, 255, 255, 0.08);\n border: 0;\n color: var(--color-text-neon-muted);\n font-size: var(--font-size-base);\n font-weight: 700;\n display: flex; align-items: center; justify-content: center;\n cursor: pointer;\n}\n.sheet-close:hover,\n.sheet-close:focus-visible {\n color: var(--color-text-white);\n background: rgba(255, 255, 255, 0.14);\n outline: none;\n}\n\n/* Points breakdown content */\n.breakdown-list {\n display: flex; flex-direction: column;\n margin-bottom: var(--space-md);\n}\n.breakdown-row {\n display: flex; align-items: center; justify-content: space-between;\n padding: 10px 0;\n font-family: var(--font-body);\n font-size: var(--font-size-base);\n}\n.breakdown-row + .breakdown-row { border-top: 1px solid rgba(255, 255, 255, 0.05); }\n.breakdown-row .label {\n color: var(--color-text-neon-muted);\n display: flex; align-items: center; gap: 8px;\n}\n.breakdown-row .label .emoji { font-size: var(--font-size-md); }\n.breakdown-row .value {\n font-family: var(--font-display);\n font-weight: 800;\n font-size: var(--font-size-md);\n}\n.breakdown-row .value--positive { color: var(--color-success-neon); }\n.breakdown-row .value--multiplier { color: var(--color-accent-primary); }\n.breakdown-row .value--neutral { color: var(--color-text-white); }\n.breakdown-total {\n display: flex; align-items: center; justify-content: space-between;\n padding: var(--space-md);\n border-radius: var(--radius-lg);\n background: linear-gradient(90deg, rgba(0, 245, 255, 0.08), rgba(255, 45, 106, 0.05));\n border: 1px solid rgba(0, 245, 255, 0.3);\n}\n.breakdown-total .label {\n font-family: var(--font-display);\n font-weight: 700;\n font-size: var(--font-size-md);\n color: var(--color-text-white);\n}\n.breakdown-total .value {\n font-family: var(--font-display);\n font-weight: 900;\n font-size: var(--font-size-3xl);\n color: var(--color-accent-secondary);\n text-shadow: 0 0 16px rgba(0, 245, 255, 0.5);\n}\n.breakdown-total--zero .value { color: var(--color-text-dim); text-shadow: none; }\n.breakdown-empty {\n text-align: center;\n padding: var(--space-md) 0;\n}\n.breakdown-empty-icon { font-size: 42px; margin-bottom: var(--space-sm); }\n.breakdown-empty-text {\n color: var(--color-text-neon-muted);\n font-family: var(--font-body);\n font-size: var(--font-size-base);\n margin-bottom: var(--space-md);\n}\n\n/* Round stats content */\n.difficulty-visual {\n display: flex; align-items: center; justify-content: space-between;\n padding: var(--space-md);\n background: rgba(255, 0, 64, 0.08);\n border: 1px solid rgba(255, 0, 64, 0.3);\n border-radius: var(--radius-md);\n margin-bottom: var(--space-sm);\n gap: var(--space-sm);\n}\n.difficulty-visual .left {\n font-family: var(--font-display);\n font-weight: 800;\n font-size: var(--font-size-sm);\n color: var(--color-error-neon);\n min-width: 0;\n}\n.difficulty-visual .left .sub {\n font-family: var(--font-body);\n font-size: var(--font-size-xs);\n font-weight: 500;\n color: var(--color-text-neon-muted);\n margin-top: 3px;\n}\n.difficulty-visual .stars { font-size: var(--font-size-md); letter-spacing: 2px; white-space: nowrap; }\n.difficulty-visual .star-filled { color: var(--color-warning-alt); }\n.difficulty-visual .star-empty { color: rgba(255, 255, 255, 0.15); }\n\n.stats-grid {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: var(--space-sm);\n margin-bottom: var(--space-sm);\n}\n.stats-card {\n padding: 12px 14px;\n background: rgba(255, 255, 255, 0.04);\n border: 1px solid rgba(255, 255, 255, 0.08);\n border-radius: var(--radius-md);\n}\n.stats-card .lbl {\n font-family: var(--font-body);\n font-size: 10px;\n color: var(--color-text-dim);\n font-weight: 700;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n}\n.stats-card .val {\n font-family: var(--font-display);\n font-weight: 800;\n font-size: var(--font-size-2xl);\n margin-top: 4px;\n color: var(--color-text-white);\n}\n.stats-card .val.cyan { color: var(--color-accent-secondary); }\n.stats-card .val.success { color: var(--color-success-neon); }\n.stats-card .val.warn { color: var(--color-error-neon); }\n.stats-card .sub {\n font-family: var(--font-body);\n font-size: 10px;\n color: var(--color-text-neon-muted);\n margin-top: 2px;\n}\n\n.furthest-list { display: flex; flex-direction: column; gap: 6px; }\n.furthest-row {\n display: flex; align-items: center; justify-content: space-between;\n padding: 10px 12px;\n background: rgba(255, 255, 255, 0.03);\n border-radius: var(--radius-md);\n font-family: var(--font-body);\n font-size: var(--font-size-sm);\n}\n.furthest-row .name { font-weight: 600; color: var(--color-text-white); }\n.furthest-row .off {\n color: var(--color-error-neon);\n font-family: var(--font-display);\n font-weight: 700;\n}\n\n.stats-empty {\n text-align: center;\n color: var(--color-text-dim);\n font-family: var(--font-body);\n font-size: var(--font-size-sm);\n padding: var(--space-md);\n}\n\n/* ==========================================================================\n Gameplay v3 \u2014 Arcade layout (DESIGN.md Variant D)\n Massive year \u00B7 tappable tiles \u00B7 neon timer \u00B7 3D buttons.\n Supersedes legacy .album-cover-container, .year-display, .slider-container,\n .bet-container, .submit-btn, .steal-btn, .submitted-confirmation, and the\n .game-sticky-bar + .game-header-compact header.\n ========================================================================== */\n\n.game-container--arcade {\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: 0;\n}\n\n/* Arcade header: pulse-orb album + \"Round N of M\" + neon timer */\n.arc-header {\n display: grid;\n grid-template-columns: auto 1fr auto;\n align-items: center;\n gap: var(--space-sm);\n padding: var(--space-sm) var(--space-md);\n position: sticky;\n top: 0;\n z-index: 5;\n background: linear-gradient(180deg, rgba(10, 10, 18, 0.95), rgba(10, 10, 18, 0.82) 72%, transparent);\n backdrop-filter: blur(8px);\n margin-bottom: var(--space-md);\n}\n\n/* #817: floating mini-timer \u2014 always visible during PLAYING when the main\n neon timer scrolls out of view. Position-fixed so it works regardless of\n any sticky-positioning quirks on iOS Safari. Smaller and quieter than\n the main timer so it doesn't overwhelm the lower content (slider,\n challenges, submit button) once it's revealed. Syncing with the main\n timer + show/hide via IntersectionObserver lives in player-game.js. */\n.timer-float {\n position: fixed;\n top: max(env(safe-area-inset-top, 0px) + 8px, 8px);\n right: 12px;\n z-index: 100;\n width: 52px;\n height: 52px;\n border-radius: 50%;\n background: rgba(10, 10, 18, 0.78);\n border: 2px solid var(--color-accent-primary);\n box-shadow: 0 0 14px rgba(255, 45, 106, 0.45),\n inset 0 0 8px rgba(255, 45, 106, 0.25);\n display: flex;\n align-items: center;\n justify-content: center;\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 22px;\n line-height: 1;\n color: var(--color-accent-primary);\n text-shadow: 0 0 8px rgba(255, 45, 106, 0.6);\n backdrop-filter: blur(8px);\n transition: opacity 0.2s ease-out, transform 0.2s ease-out;\n pointer-events: none;\n /* Default: hidden via .hidden override below. Becomes visible when\n JS adds .timer-float--visible (gated on the main timer being\n offscreen + game-view being active). */\n}\n.timer-float.hidden {\n opacity: 0;\n transform: scale(0.7);\n pointer-events: none;\n}\n.timer-float.timer-float--visible {\n opacity: 1;\n transform: scale(1);\n}\n.timer-float.timer-float--warn {\n border-color: var(--color-error-neon, #ff0040);\n color: var(--color-error-neon, #ff0040);\n box-shadow: 0 0 16px rgba(255, 0, 64, 0.6),\n inset 0 0 8px rgba(255, 0, 64, 0.3);\n animation: arc-urgency 0.8s ease-in-out infinite;\n}\n@media (prefers-reduced-motion: reduce) {\n .timer-float { transition: none; }\n .timer-float.timer-float--warn { animation: none; }\n}\n\n.arc-pulse-orb {\n width: 56px; height: 56px; border-radius: 50%;\n display: flex; align-items: center; justify-content: center;\n position: relative;\n overflow: hidden;\n background: linear-gradient(135deg, #ff6b9a, #6366f1);\n box-shadow: 0 0 24px rgba(255, 45, 106, 0.5);\n flex-shrink: 0;\n}\n.arc-pulse-orb::before {\n content: '';\n position: absolute; inset: -4px;\n border-radius: 50%;\n border: 2px solid rgba(255, 45, 106, 0.5);\n animation: arc-orb-pulse 1.4s ease-out infinite;\n pointer-events: none;\n}\n.arc-pulse-orb--steady::before { animation: none; opacity: 0; }\n@keyframes arc-orb-pulse {\n 0% { opacity: 0.8; transform: scale(1); }\n 100% { opacity: 0; transform: scale(1.25); }\n}\n@media (prefers-reduced-motion: reduce) {\n .arc-pulse-orb::before { animation: none; opacity: 0; }\n}\n.arc-pulse-orb-img {\n width: 100%; height: 100%;\n object-fit: cover;\n border-radius: 50%;\n z-index: 1;\n /* #850: blur cover during PLAYING so readable text on artwork (album titles,\n years, artist names) can't leak the year-guess answer. Colour/vibe is\n preserved. At REVEAL, the larger #reveal-album-cover (player.html:481) is\n rendered crisp \u2014 that element is unaffected by this rule. */\n filter: blur(12px);\n transform: scale(1.15);\n transition: filter 0.4s ease, transform 0.4s ease;\n}\n\n.arc-round-center {\n text-align: center;\n font-family: var(--font-display);\n font-weight: 800;\n font-size: 11px;\n letter-spacing: 0.12em;\n text-transform: uppercase;\n color: var(--color-text-neon-muted);\n line-height: 1.3;\n overflow: hidden;\n}\n.arc-round-label { display: block; }\n.arc-round-big {\n display: block;\n font-size: 20px;\n color: var(--color-text-white);\n letter-spacing: 0;\n text-transform: none;\n margin-top: 2px;\n}\n.arc-round-sep {\n color: var(--color-text-dim);\n margin: 0 2px;\n font-weight: 500;\n}\n\n.timer-neon {\n width: 72px; height: 72px;\n border-radius: 50%;\n background: var(--color-bg-primary);\n border: 3px solid var(--color-accent-primary);\n box-shadow: var(--glow-primary), inset 0 0 12px rgba(255, 45, 106, 0.3);\n display: flex; align-items: center; justify-content: center;\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 30px;\n color: var(--color-accent-primary);\n text-shadow: 0 0 10px rgba(255, 45, 106, 0.6);\n flex-shrink: 0;\n line-height: 1;\n}\n.timer-neon .timer { color: inherit; font-family: inherit; font-size: inherit; font-weight: inherit; }\n.timer-neon.timer-neon--warn {\n border-color: var(--color-error-neon);\n color: var(--color-error-neon);\n box-shadow: 0 0 20px rgba(255, 0, 64, 0.6), inset 0 0 12px rgba(255, 0, 64, 0.3);\n animation: arc-urgency 0.8s ease-in-out infinite;\n}\n@keyframes arc-urgency {\n 0%, 100% { transform: scale(1); }\n 50% { transform: scale(1.06); }\n}\n/* #1273 AC#3 \u2014 ghost-ring catch-up glow. Briefly applied while the countdown\n eases to the server's authoritative remaining-time (V1 Smooth Correct), so a\n drift correction reads as a deliberate glow pulse in the existing ring\n language rather than a jarring number jump. */\n.timer-neon.timer-neon--catchup {\n animation: timer-catchup-glow 0.4s ease-out;\n}\n@keyframes timer-catchup-glow {\n 0% { box-shadow: var(--glow-primary), inset 0 0 12px rgba(255, 45, 106, 0.3); }\n 45% { box-shadow: 0 0 26px rgba(0, 245, 255, 0.7), inset 0 0 16px rgba(0, 245, 255, 0.35); }\n 100% { box-shadow: var(--glow-primary), inset 0 0 12px rgba(255, 45, 106, 0.3); }\n}\n@media (prefers-reduced-motion: reduce) {\n .timer-neon.timer-neon--warn { animation: none; }\n .timer-neon.timer-neon--catchup { animation: none; }\n}\n\n/* Chip row \u2014 steal / closest-wins / intro / final (conditional) */\n.arc-chip-row {\n display: flex;\n gap: 6px;\n flex-wrap: wrap;\n padding: 0 var(--space-md);\n margin-bottom: var(--space-md);\n}\n.arc-chip-row.hidden { display: none; }\n.arc-chip {\n display: inline-flex; align-items: center; gap: 5px;\n padding: 4px 10px;\n border-radius: var(--radius-full);\n font-family: var(--font-body);\n font-size: 11px;\n font-weight: 700;\n letter-spacing: 0.04em;\n}\n.arc-chip--steal {\n color: var(--color-accent-secondary);\n background: rgba(0, 245, 255, 0.08);\n border: 1px solid rgba(0, 245, 255, 0.4);\n}\n.arc-chip--closest-wins {\n color: var(--color-success-neon);\n background: rgba(57, 255, 20, 0.08);\n border: 1px solid rgba(57, 255, 20, 0.4);\n}\n.arc-chip--intro {\n color: var(--color-warning-alt);\n background: rgba(255, 102, 0, 0.12);\n border: 1px solid rgba(255, 102, 0, 0.5);\n}\n.arc-chip--final {\n color: var(--color-accent-primary);\n background: rgba(255, 45, 106, 0.12);\n border: 1px solid rgba(255, 45, 106, 0.5);\n text-transform: uppercase;\n}\n\n/* Year XXL */\n.year-xxl {\n text-align: center;\n font-family: var(--font-display);\n font-weight: 900;\n font-size: clamp(96px, 34vw, 128px);\n line-height: 1;\n letter-spacing: -0.04em;\n background: linear-gradient(180deg, var(--color-text-white) 0%, rgba(0, 245, 255, 0.85) 100%);\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n background-clip: text;\n text-shadow: 0 0 32px rgba(0, 245, 255, 0.35);\n margin: 4px 0 var(--space-md);\n padding: 0 var(--space-md);\n max-width: 100%;\n}\n.year-xxl--locked {\n background: linear-gradient(180deg, var(--color-success-neon) 0%, rgba(57, 255, 20, 0.7) 100%);\n -webkit-background-clip: text;\n background-clip: text;\n -webkit-text-fill-color: transparent;\n text-shadow: 0 0 28px rgba(57, 255, 20, 0.45);\n}\n\n/* Submitted banner */\n.submitted-banner {\n margin: 0 var(--space-md) var(--space-sm);\n padding: 8px 14px;\n background: rgba(57, 255, 20, 0.08);\n border: 1px solid rgba(57, 255, 20, 0.4);\n border-radius: var(--radius-md);\n font-family: var(--font-display);\n font-weight: 800;\n font-size: 14px;\n color: var(--color-success-neon);\n letter-spacing: 0.04em;\n display: flex; align-items: center; justify-content: center; gap: 6px;\n text-align: center;\n}\n.submitted-banner.hidden { display: none; }\n.submitted-banner .check {\n width: 18px; height: 18px; border-radius: 50%;\n background: var(--color-success-neon);\n color: var(--color-bg-primary);\n font-size: 11px; font-weight: 900;\n display: flex; align-items: center; justify-content: center;\n flex-shrink: 0;\n}\n\n/* Arcade slider */\n.slider-arcade-wrap {\n padding: 0 var(--space-md);\n margin-bottom: var(--space-md);\n position: relative;\n}\n.slider-arcade {\n padding: 10px;\n background: rgba(255, 255, 255, 0.04);\n border-radius: var(--radius-lg);\n border: 1px solid rgba(255, 255, 255, 0.08);\n display: flex; align-items: center; gap: 12px;\n}\n.slider-btn-year {\n width: 44px; height: 44px; border-radius: 50%;\n background: var(--color-bg-primary);\n border: 2px solid rgba(255, 255, 255, 0.15);\n color: var(--color-text-white);\n font-family: var(--font-display);\n font-weight: 700;\n font-size: 22px;\n line-height: 1;\n flex-shrink: 0;\n display: flex; align-items: center; justify-content: center;\n cursor: pointer;\n transition: all var(--transition-fast);\n touch-action: manipulation;\n}\n.slider-btn-year:hover,\n.slider-btn-year:focus-visible {\n border-color: var(--color-accent-secondary);\n color: var(--color-accent-secondary);\n outline: none;\n}\n.slider-btn-year:disabled {\n opacity: 0.4; cursor: not-allowed;\n}\n/* #851 coarse-step variant: smaller +5/-5 buttons next to the main +/-. */\n.slider-btn-year--coarse {\n position: relative;\n width: 36px; height: 36px;\n font-size: 13px;\n font-weight: 800;\n letter-spacing: -0.02em;\n}\n/* #1759: mid-round +/-5 buttons sit next to 44px fine-step siblings under time\n pressure; expand the hit target to 44px (visual stays 36px) so a mis-tap\n doesn't land on the fine button and cost points. */\n.slider-btn-year--coarse::after {\n content: '';\n position: absolute;\n top: 50%;\n left: 50%;\n width: 44px;\n height: 44px;\n transform: translate(-50%, -50%);\n}\n.slider-arcade { gap: 8px; } /* tighten gap so 5 children fit on narrow screens */\n.slider-arcade-track { flex: 1; display: flex; align-items: center; }\n.year-slider-arcade {\n -webkit-appearance: none;\n appearance: none;\n width: 100%;\n height: 10px;\n background: linear-gradient(90deg,\n rgba(0, 245, 255, 0.15),\n rgba(255, 45, 106, 0.25),\n rgba(57, 255, 20, 0.15));\n border-radius: var(--radius-full);\n outline: none;\n cursor: pointer;\n}\n.year-slider-arcade::-webkit-slider-thumb {\n -webkit-appearance: none;\n appearance: none;\n width: 32px; height: 32px;\n border-radius: 50%;\n background: var(--color-accent-primary);\n border: 3px solid var(--color-bg-primary);\n box-shadow: var(--glow-primary);\n cursor: grab;\n transition: transform var(--transition-fast);\n}\n.year-slider-arcade::-webkit-slider-thumb:active { cursor: grabbing; transform: scale(1.05); }\n.year-slider-arcade::-moz-range-thumb {\n width: 32px; height: 32px;\n border-radius: 50%;\n background: var(--color-accent-primary);\n border: 3px solid var(--color-bg-primary);\n box-shadow: var(--glow-primary);\n cursor: grab;\n}\n\n/* Locked state for the slider (after submit) */\n.slider-arcade.slider-arcade--locked {\n opacity: 0.55;\n pointer-events: none;\n}\n.slider-arcade.slider-arcade--locked .year-slider-arcade::-webkit-slider-thumb {\n background: var(--color-success-neon);\n box-shadow: 0 0 16px rgba(57, 255, 20, 0.6);\n}\n.slider-arcade.slider-arcade--locked .year-slider-arcade::-moz-range-thumb {\n background: var(--color-success-neon);\n box-shadow: 0 0 16px rgba(57, 255, 20, 0.6);\n}\n.guess-lock-stamp {\n position: absolute;\n right: calc(var(--space-md) + 8px);\n top: -10px;\n padding: 3px 10px;\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 10px;\n color: var(--color-success-neon);\n background: var(--color-bg-primary);\n border: 1px solid rgba(57, 255, 20, 0.4);\n border-radius: var(--radius-full);\n letter-spacing: 0.08em;\n text-transform: uppercase;\n box-shadow: 0 0 8px rgba(57, 255, 20, 0.25);\n}\n.guess-lock-stamp.hidden { display: none; }\n\n/* Arcade tiles (artist + movie challenge).\n Wrapped in a subtle card container so the challenge reads as a distinct\n \"quiz card\" element. Outer wrapper has a thin border + soft bg; tiles\n themselves keep their 3D shadow treatment so they still pop. */\n.arc-tiles {\n padding: 12px 14px;\n margin: 0 var(--space-md) var(--space-md);\n background: linear-gradient(180deg, rgba(0, 245, 255, 0.04), rgba(255, 255, 255, 0.02));\n border: 1px solid rgba(0, 245, 255, 0.18);\n border-radius: var(--radius-lg);\n box-shadow: inset 0 0 12px rgba(0, 245, 255, 0.04);\n}\n.arc-tiles.hidden { display: none; }\n.arc-tiles-header {\n display: flex; align-items: center; justify-content: space-between;\n font-family: var(--font-display);\n font-weight: 700;\n font-size: 12px;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n color: var(--color-text-neon-muted);\n margin-bottom: 10px;\n gap: var(--space-sm);\n}\n.arc-tiles-header > span:first-child {\n display: flex; align-items: center; gap: 6px;\n min-width: 0;\n}\n.arc-tiles-bonus {\n background: rgba(57, 255, 20, 0.15);\n color: var(--color-success-neon);\n font-weight: 900;\n font-size: 11px;\n padding: 2px 8px;\n border-radius: var(--radius-full);\n letter-spacing: 0.04em;\n flex-shrink: 0;\n}\n.arc-tiles-grid {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 10px;\n}\n/* Re-style the existing .artist-option-btn / .movie-option-btn with arcade feel.\n These classes are generated by player-game.js \u2014 don't change the JS, just\n restyle the DOM they emit. */\n.arc-tiles-grid .artist-option-btn,\n.arc-tiles-grid .movie-option-btn {\n padding: 14px 10px;\n background: rgba(255, 255, 255, 0.05);\n border: 2px solid rgba(255, 255, 255, 0.12);\n border-radius: var(--radius-lg);\n font-family: var(--font-display);\n font-weight: 700;\n font-size: 15px;\n text-align: center;\n color: var(--color-text-white);\n box-shadow: 0 4px 0 rgba(0, 0, 0, 0.3);\n transition: transform var(--transition-fast), border-color var(--transition-fast), box-shadow var(--transition-fast);\n cursor: pointer;\n min-height: 56px;\n}\n.arc-tiles-grid .artist-option-btn:hover,\n.arc-tiles-grid .movie-option-btn:hover,\n.arc-tiles-grid .artist-option-btn:focus-visible,\n.arc-tiles-grid .movie-option-btn:focus-visible {\n border-color: rgba(0, 245, 255, 0.55);\n outline: none;\n}\n.arc-tiles-grid .artist-option-btn:active,\n.arc-tiles-grid .movie-option-btn:active {\n transform: translateY(1px);\n box-shadow: 0 2px 0 rgba(0, 0, 0, 0.3);\n}\n.arc-tiles-grid .artist-option-btn.is-loading {\n background: linear-gradient(135deg, rgba(0, 245, 255, 0.2), rgba(0, 245, 255, 0.05));\n border-color: var(--color-accent-secondary);\n color: var(--color-accent-secondary);\n animation: arc-tile-pulse 1s ease-in-out infinite;\n}\n@keyframes arc-tile-pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.7; } }\n.arc-tiles-grid .artist-option-btn.is-winner,\n.arc-tiles-grid .artist-option-btn.is-correct,\n.arc-tiles-grid .movie-option-btn.is-winner,\n.arc-tiles-grid .movie-option-btn.is-correct {\n background: linear-gradient(135deg, rgba(57, 255, 20, 0.25), rgba(57, 255, 20, 0.08));\n border-color: var(--color-success-neon);\n color: var(--color-success-neon);\n box-shadow: 0 0 20px rgba(57, 255, 20, 0.5), 0 4px 0 rgba(0, 0, 0, 0.3);\n}\n.arc-tiles-grid .artist-option-btn.is-wrong,\n.arc-tiles-grid .artist-option-btn.is-wrong.is-selected,\n.arc-tiles-grid .movie-option-btn.is-wrong {\n opacity: 0.5;\n border-style: dashed;\n}\n.arc-tiles-grid .artist-option-btn.is-disabled,\n.arc-tiles-grid .movie-option-btn.is-disabled {\n opacity: 0.6;\n cursor: not-allowed;\n box-shadow: none;\n}\n@media (prefers-reduced-motion: reduce) {\n .arc-tiles-grid .artist-option-btn.is-loading { animation: none; }\n}\n\n/* No-bonus filler */\n.bonus-filler {\n padding: var(--space-md);\n margin: 0 var(--space-md) var(--space-md);\n background: rgba(255, 255, 255, 0.02);\n border: 1px dashed rgba(255, 255, 255, 0.1);\n border-radius: var(--radius-lg);\n text-align: center;\n font-family: var(--font-body);\n font-size: 12px;\n color: var(--color-text-dim);\n font-style: italic;\n display: flex; align-items: center; justify-content: center; gap: 6px;\n}\n.bonus-filler.hidden { display: none; }\n\n/* Actions row (bet + submit) */\n.arc-actions {\n display: grid;\n grid-template-columns: auto 1fr;\n gap: 10px;\n padding: 0 var(--space-md);\n margin-bottom: var(--space-md);\n}\n.bet-arc {\n width: 72px; height: 60px;\n background: transparent;\n border: 2px solid rgba(255, 45, 106, 0.5);\n color: var(--color-accent-primary);\n border-radius: var(--radius-lg);\n font-family: var(--font-display);\n font-weight: 700;\n display: flex; flex-direction: column; align-items: center; justify-content: center;\n gap: 2px;\n box-shadow: 0 4px 0 rgba(0, 0, 0, 0.3);\n cursor: pointer;\n transition: all var(--transition-fast);\n}\n.bet-arc .bet-icon { font-size: 22px; line-height: 1; }\n.bet-arc .bet-label { font-size: 9px; font-weight: 800; letter-spacing: 0.08em; text-transform: uppercase; }\n.bet-arc.is-active {\n background: rgba(255, 45, 106, 0.15);\n box-shadow: var(--glow-primary), 0 4px 0 rgba(0, 0, 0, 0.3);\n}\n.bet-arc:active { transform: translateY(2px); box-shadow: 0 2px 0 rgba(0, 0, 0, 0.3); }\n.bet-arc:disabled { opacity: 0.55; cursor: not-allowed; }\n\n.submit-arc {\n background: linear-gradient(180deg, #ff4d82, var(--color-accent-primary));\n border: 0;\n color: var(--color-text-white);\n border-radius: var(--radius-lg);\n padding: 16px 20px;\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 17px;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n box-shadow: var(--glow-primary), 0 6px 0 rgba(180, 20, 60, 0.6);\n cursor: pointer;\n transition: transform var(--transition-fast);\n display: flex; align-items: center; justify-content: center; gap: 8px;\n}\n.submit-arc:active { transform: translateY(2px); box-shadow: var(--glow-primary), 0 4px 0 rgba(180, 20, 60, 0.6); }\n.submit-arc:disabled {\n background: rgba(255, 255, 255, 0.06);\n color: var(--color-text-neon-muted);\n box-shadow: 0 4px 0 rgba(0, 0, 0, 0.3);\n cursor: not-allowed;\n text-shadow: none;\n}\n.submit-arc.submit-arc--waiting {\n background: rgba(255, 255, 255, 0.05);\n color: var(--color-text-neon-muted);\n box-shadow: 0 4px 0 rgba(0, 0, 0, 0.3);\n text-shadow: none;\n}\n.submit-arc .waiting-dot {\n display: inline-block;\n width: 8px; height: 8px; border-radius: 50%;\n background: var(--color-accent-secondary);\n box-shadow: 0 0 8px rgba(0, 245, 255, 0.5);\n animation: arc-wait-pulse 1.2s ease-in-out infinite;\n}\n@keyframes arc-wait-pulse { 0%, 100% { opacity: 0.4; } 50% { opacity: 1; } }\n@media (prefers-reduced-motion: reduce) {\n .submit-arc .waiting-dot { animation: none; }\n}\n\n/* Steal full-width button */\n.steal-btn-full {\n margin: 0 var(--space-md) var(--space-md);\n background: rgba(0, 245, 255, 0.08);\n border: 2px solid var(--color-accent-secondary);\n color: var(--color-accent-secondary);\n border-radius: var(--radius-lg);\n padding: 14px;\n font-family: var(--font-display);\n font-weight: 800;\n font-size: 15px;\n letter-spacing: 0.06em;\n text-transform: uppercase;\n box-shadow: 0 0 16px rgba(0, 245, 255, 0.3), 0 4px 0 rgba(0, 0, 0, 0.3);\n display: flex; align-items: center; justify-content: center; gap: 8px;\n cursor: pointer;\n transition: transform var(--transition-fast);\n}\n.steal-btn-full.hidden { display: none; }\n.steal-btn-full:active { transform: translateY(2px); box-shadow: 0 0 16px rgba(0, 245, 255, 0.3), 0 2px 0 rgba(0, 0, 0, 0.3); }\n.steal-btn-full .steal-btn-icon { font-size: 18px; }\n\n/* #1665: Sabotage power-up \u2014 twin of the steal button, red-tinted. The flex row\n keeps a lone button full-width and puts them side-by-side when both are up. */\n.powerup-btn-row {\n display: flex;\n gap: var(--space-md);\n margin: 0 var(--space-md) var(--space-md);\n}\n.powerup-btn-row .steal-btn-full,\n.powerup-btn-row .sabotage-btn-full {\n flex: 1;\n margin: 0;\n}\n.sabotage-btn-full {\n background: rgba(255, 45, 85, 0.08);\n border: 2px solid var(--color-danger, #ff2d55);\n color: var(--color-danger, #ff2d55);\n border-radius: var(--radius-lg);\n padding: 14px;\n font-family: var(--font-display);\n font-weight: 800;\n font-size: 15px;\n letter-spacing: 0.06em;\n text-transform: uppercase;\n box-shadow: 0 0 16px rgba(255, 45, 85, 0.3), 0 4px 0 rgba(0, 0, 0, 0.3);\n display: flex; align-items: center; justify-content: center; gap: 8px;\n cursor: pointer;\n transition: transform var(--transition-fast);\n}\n.sabotage-btn-full.hidden { display: none; }\n.sabotage-btn-full:active { transform: translateY(2px); box-shadow: 0 0 16px rgba(255, 45, 85, 0.3), 0 2px 0 rgba(0, 0, 0, 0.3); }\n.sabotage-btn-full .sabotage-btn-icon { font-size: 18px; }\n/* #1665: sabotage arc-chip + leaderboard badge + toasts + effect locks */\n.arc-chip--sabotage {\n color: var(--color-danger, #ff2d55);\n background: rgba(255, 45, 85, 0.08);\n border: 1px solid rgba(255, 45, 85, 0.4);\n}\n.player-badge--sabotage {\n top: -2px;\n left: 2px;\n background: linear-gradient(135deg, #ff2d55, #c1121f);\n}\n.sabotage-confirmation {\n background: linear-gradient(135deg, #ff2d55, #c1121f);\n box-shadow: 0 4px 20px rgba(255, 45, 85, 0.5);\n}\n.sabotaged-banner {\n background: linear-gradient(135deg, #ff2d55, #7c1020);\n box-shadow: 0 4px 20px rgba(255, 45, 85, 0.6);\n}\n.bet-arc--forced { opacity: 0.85; cursor: not-allowed; }\n.submit-arc--frozen { opacity: 0.6; filter: grayscale(0.4); }\n\n/* Submission strip (dots + count) */\n.arc-submission-strip {\n display: flex; align-items: center; justify-content: center; gap: 8px;\n padding: 8px var(--space-md) 12px;\n font-family: var(--font-body);\n font-size: 11px;\n color: var(--color-text-dim);\n font-weight: 600;\n}\n.arc-submission-dots {\n display: flex; align-items: center; gap: 6px;\n}\n.arc-submission-dots .player-indicator {\n /* existing class from renderSubmissionTracker \u2014 override to a small dot.\n The renderer emits a nested .player-avatar + .player-initials + .player-name\n + badges; we collapse ALL children to make the parent itself the dot. */\n width: 12px; height: 12px;\n min-width: 12px;\n padding: 0;\n background: rgba(255, 255, 255, 0.18);\n border: 0;\n border-radius: 50%;\n font-size: 0;\n color: transparent;\n transition: all var(--transition-normal);\n flex: 0 0 auto;\n overflow: hidden;\n display: block;\n}\n/* Collapse every child element \u2014 avatars, initials, names, badges \u2014 so the\n parent behaves as a solid dot. Without this the legacy .player-avatar\n width/height (~40px) leaks through. */\n.arc-submission-dots .player-indicator > * { display: none !important; }\n.arc-submission-dots .player-indicator.is-submitted {\n background: var(--color-success-neon);\n box-shadow: 0 0 6px rgba(57, 255, 20, 0.5);\n}\n.arc-submission-dots .player-indicator.is-current-player,\n.arc-submission-dots .player-indicator.is-current {\n background: var(--color-accent-secondary);\n box-shadow: 0 0 6px rgba(0, 245, 255, 0.5);\n}\n.arc-submission-dots .player-indicator.is-current-player.is-submitted {\n background: var(--color-success-neon);\n box-shadow: 0 0 8px rgba(57, 255, 20, 0.7);\n}\n.arc-submission-count { color: var(--color-text-dim); font-weight: 600; }\n\n/* Legacy \"Submitted!\" stamp \u2014 hidden in arcade but kept for any residual path */\n.submitted-confirmation.hidden { display: none; }\n\n/* Closest-wins ephemeral splash (rc30 parity) */\n.closest-wins-splash {\n position: fixed; inset: 0;\n z-index: 50;\n display: flex; align-items: center; justify-content: center;\n background: rgba(10, 10, 18, 0.7);\n backdrop-filter: blur(4px);\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 40px;\n color: var(--color-success-neon);\n letter-spacing: 0.08em;\n gap: 12px;\n pointer-events: none;\n text-shadow: 0 0 32px rgba(57, 255, 20, 0.55);\n animation: closest-wins-splash-in 1.6s ease-out both;\n}\n.closest-wins-splash.hidden { display: none; }\n@keyframes closest-wins-splash-in {\n 0% { opacity: 0; transform: scale(0.8); }\n 20% { opacity: 1; transform: scale(1); }\n 80% { opacity: 1; transform: scale(1); }\n 100% { opacity: 0; transform: scale(1.05); }\n}\n\n/* sr-only helper (if not already in the stylesheet) */\n#round-indicator.sr-only {\n position: absolute;\n width: 1px; height: 1px; padding: 0; margin: -1px;\n overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0;\n}\n\n/* ============================================\n #1076: Compact game-view layout for mobile.\n On 360-411 CSS-px phones the artist/movie challenge tiles\n and Submit button were rendering below the fold, so every\n round players had to scroll before they could vote. Scoped\n to body:has(#game-view:not(.hidden)) so it only fires while\n game-view is the active screen \u2014 lobby/reveal/end keep the\n original spacing. :has() degrades gracefully: browsers that\n don't support it fall back to the looser pre-fix layout.\n ============================================ */\nbody:has(#game-view:not(.hidden)) .player-header { display: none; }\nbody:has(#game-view:not(.hidden)) .player-container {\n padding-top: max(var(--space-xs), env(safe-area-inset-top));\n}\nbody:has(#game-view:not(.hidden)) .arc-header {\n margin-bottom: var(--space-sm);\n}\nbody:has(#game-view:not(.hidden)) .year-xxl {\n font-size: clamp(72px, 26vw, 104px);\n margin: 2px 0 var(--space-sm);\n}\nbody:has(#game-view:not(.hidden)) .slider-arcade-wrap {\n margin-bottom: var(--space-sm);\n}\nbody:has(#game-view:not(.hidden)) .arc-tiles {\n padding: 10px 12px;\n margin: 0 var(--space-md) var(--space-sm);\n}\nbody:has(#game-view:not(.hidden)) .arc-tiles-header {\n margin-bottom: 6px;\n}\nbody:has(#game-view:not(.hidden)) .arc-tiles-grid { gap: 8px; }\nbody:has(#game-view:not(.hidden)) .arc-tiles-grid .artist-option-btn,\nbody:has(#game-view:not(.hidden)) .arc-tiles-grid .movie-option-btn {\n min-height: 52px;\n padding: 12px 10px;\n}\nbody:has(#game-view:not(.hidden)) .arc-actions {\n margin-bottom: var(--space-sm);\n}\nbody:has(#game-view:not(.hidden)) .bonus-filler {\n padding: var(--space-sm) var(--space-md);\n margin: 0 var(--space-md) var(--space-sm);\n}\n\n/* ============================================\n End-of-Game Podium v2 \u2014 Hero Winner (rc31)\n Scoped under body.theme-dark so player.html end-view\n is restyled from a 3-column stands layout into a\n poster-style hero for #1 + compact chips for #2/#3.\n DOM (player.html #494-522) is unchanged \u2014 existing\n IDs (podium-{N}-name / -score) keep their JS bindings.\n ============================================ */\n\nbody.theme-dark .podium {\n display: grid;\n grid-template-columns: 1fr 1fr;\n grid-template-areas:\n \"hero hero\"\n \"second third\";\n gap: var(--space-md);\n align-items: stretch;\n justify-content: stretch;\n margin-bottom: var(--space-xl);\n padding: 0 var(--space-xs);\n}\n\n/* Winner hero \u2014 full-width poster, gradient wordmark name */\nbody.theme-dark .podium-place.podium-1 {\n grid-area: hero;\n width: 100%;\n padding: var(--space-lg) var(--space-md) var(--space-md);\n background: linear-gradient(135deg, rgba(255, 45, 106, 0.14), rgba(0, 245, 255, 0.06));\n border: 1px solid rgba(255, 45, 106, 0.35);\n border-radius: var(--radius-xl);\n box-shadow: 0 0 40px rgba(255, 45, 106, 0.18);\n text-align: center;\n justify-content: center;\n}\n\nbody.theme-dark .podium-place.podium-1 .podium-medal {\n font-size: 38px;\n margin-bottom: var(--space-xs);\n filter: drop-shadow(0 0 16px rgba(255, 45, 106, 0.6));\n}\n\nbody.theme-dark .podium-place.podium-1 .podium-name {\n font-family: 'Outfit', sans-serif;\n font-weight: 900;\n line-height: 0.92;\n letter-spacing: -0.04em;\n margin: 0 0 var(--space-sm);\n max-width: 100%;\n white-space: normal;\n word-break: break-word;\n overflow: visible;\n text-overflow: clip;\n background: linear-gradient(90deg, var(--color-accent-primary), var(--color-accent-secondary));\n -webkit-background-clip: text;\n background-clip: text;\n color: transparent;\n filter: drop-shadow(0 0 24px rgba(255, 45, 106, 0.3));\n font-size: clamp(40px, 14vw, 64px);\n}\n\nbody.theme-dark .podium-place.podium-1 .podium-score {\n font-family: 'Inter', sans-serif;\n font-weight: 700;\n font-size: var(--font-size-3xl);\n color: var(--color-accent-secondary);\n font-variant-numeric: tabular-nums;\n text-shadow: 0 0 14px rgba(0, 245, 255, 0.5);\n margin-bottom: 0;\n}\n\nbody.theme-dark .podium-place.podium-1 .podium-stand {\n display: none;\n}\n\n/* Runners-up chips \u2014 2nd + 3rd share the bottom row */\nbody.theme-dark .podium-place.podium-2,\nbody.theme-dark .podium-place.podium-3 {\n width: 100%;\n min-width: 0;\n padding: var(--space-md) var(--space-sm);\n background: var(--color-dark-surface);\n border: 1px solid var(--color-border-neon);\n border-radius: var(--radius-lg);\n display: grid;\n /* minmax(0, 1fr) lets the name column shrink below its intrinsic width\n so short chip columns can ellipsis gracefully without forcing \"No\u2026\". */\n grid-template-columns: auto minmax(0, 1fr) auto;\n grid-template-rows: auto;\n align-items: center;\n gap: var(--space-sm);\n text-align: left;\n}\n\nbody.theme-dark .podium-place.podium-2 {\n grid-area: second;\n border-color: rgba(0, 245, 255, 0.28);\n box-shadow: 0 0 18px rgba(0, 245, 255, 0.1);\n}\n\nbody.theme-dark .podium-place.podium-3 {\n grid-area: third;\n}\n\nbody.theme-dark .podium-place.podium-2 .podium-medal,\nbody.theme-dark .podium-place.podium-3 .podium-medal {\n font-size: 22px;\n margin: 0;\n line-height: 1;\n}\n\nbody.theme-dark .podium-place.podium-2 .podium-name,\nbody.theme-dark .podium-place.podium-3 .podium-name {\n font-family: 'Outfit', sans-serif;\n font-weight: 800;\n font-size: var(--font-size-lg);\n color: var(--color-text-white);\n margin: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\nbody.theme-dark .podium-place.podium-2 .podium-score,\nbody.theme-dark .podium-place.podium-3 .podium-score {\n font-family: 'Outfit', sans-serif;\n font-weight: 900;\n font-size: var(--font-size-lg);\n color: var(--color-accent-secondary);\n font-variant-numeric: tabular-nums;\n text-shadow: 0 0 8px rgba(0, 245, 255, 0.3);\n margin: 0;\n white-space: nowrap;\n}\n\nbody.theme-dark .podium-place.podium-2 .podium-stand,\nbody.theme-dark .podium-place.podium-3 .podium-stand {\n display: none;\n}\n\n/* Graceful collapse for 1/2-player games (JS toggles .hidden on empty slots).\n If #2 is hidden but #3 isn't, promote #3 to the 'second' slot so it\n doesn't look orphaned on the right. */\nbody.theme-dark .podium-place.podium-2.hidden ~ .podium-place.podium-3:not(.hidden) {\n grid-area: second;\n}\n\n/* \"Your Result\" card \u2014 celebratory pink-leaning treatment, larger rank. */\nbody.theme-dark .your-result {\n background: linear-gradient(135deg, rgba(255, 45, 106, 0.10), rgba(0, 245, 255, 0.04));\n border: 1px solid rgba(255, 45, 106, 0.28);\n box-shadow: 0 0 28px rgba(255, 45, 106, 0.12);\n}\n\nbody.theme-dark .your-result-rank {\n font-family: 'Outfit', sans-serif;\n font-weight: 900;\n font-size: var(--font-size-4xl);\n letter-spacing: -0.03em;\n}\n\nbody.theme-dark .your-result-stats .stat-value {\n font-family: 'Outfit', sans-serif;\n font-weight: 800;\n}\n\n/* =====================================================================\n Playlist Hub (v3.3) \u2014 .plh-* namespace\n Replaces wizard step 3 playlist picker. Mobile-first 390px target.\n All tokens inherited from :root design system.\n ===================================================================== */\n\n.plh-root {\n display: flex;\n flex-direction: column;\n min-height: 100%;\n height: 100%;\n background: var(--color-bg-primary);\n color: var(--color-text-white);\n font-family: var(--font-body);\n font-variant-numeric: tabular-nums;\n position: relative;\n isolation: isolate;\n overflow: hidden;\n}\n\n.plh-root::before {\n content: '';\n position: absolute;\n inset: 0;\n z-index: 0;\n pointer-events: none;\n background:\n radial-gradient(ellipse 70% 25% at 50% 0%, rgba(255, 45, 106, 0.12), transparent 60%),\n radial-gradient(ellipse 60% 30% at 30% 60%, rgba(0, 245, 255, 0.06), transparent 60%);\n}\n\n.plh-header {\n position: sticky;\n top: 0;\n z-index: 5;\n background: rgba(10, 10, 18, 0.82);\n backdrop-filter: blur(14px);\n -webkit-backdrop-filter: blur(14px);\n /* #821: tightened from 12px 18px 10px \u2192 8px 14px 6px so the playlist\n cards below get more vertical room above the fold. The header still\n has its blurred backdrop + bottom border for visual separation. */\n padding: 8px 14px 6px;\n border-bottom: 1px solid rgba(255, 255, 255, 0.04);\n}\n\n.plh-titlebar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n /* #821: was 10px \u2014 tightened so chrome compresses and cards get more\n breathing room. */\n margin-bottom: 6px;\n}\n\n.plh-wordmark {\n font-family: var(--font-display);\n font-weight: 900;\n /* #821: was 24px \u2014 small reduction shifts visual focus to the cards\n below without losing branding presence. */\n font-size: 20px;\n letter-spacing: -0.02em;\n line-height: 1;\n background: linear-gradient(90deg, var(--color-accent-primary) 0%, var(--color-accent-secondary) 100%);\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n background-clip: text;\n}\n\n.plh-search {\n position: relative;\n margin-bottom: 10px;\n}\n\n.plh-search input {\n width: 100%;\n height: 40px;\n padding: 0 38px 0 40px;\n background: var(--color-bg-surface);\n border: 1px solid var(--color-border-neon);\n border-radius: 10px;\n color: var(--color-text-white);\n font-family: var(--font-body);\n font-weight: 500;\n font-size: 13px;\n outline: none;\n transition: border-color 0.15s, box-shadow 0.15s;\n}\n\n.plh-search input:focus {\n border-color: var(--color-accent-secondary);\n box-shadow: 0 0 0 3px rgba(0, 245, 255, 0.15);\n}\n\n.plh-search input::placeholder {\n color: var(--color-text-neon-muted);\n opacity: 0.6;\n}\n\n.plh-search-icon {\n position: absolute;\n left: 12px;\n top: 50%;\n transform: translateY(-50%);\n color: var(--color-accent-secondary);\n opacity: 0.75;\n}\n\n.plh-search-clear {\n position: absolute;\n right: 8px;\n top: 50%;\n transform: translateY(-50%);\n width: 24px;\n height: 24px;\n border-radius: 50%;\n background: var(--color-dark-surface-hover);\n border: none;\n color: var(--color-text-neon-muted);\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 13px;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.plh-segmented {\n display: grid;\n grid-template-columns: 1fr 1fr 1fr;\n gap: 4px;\n padding: 4px;\n background: var(--color-bg-surface);\n border: 1px solid var(--color-border-neon);\n border-radius: 10px;\n margin-bottom: 10px;\n}\n\n.plh-seg {\n background: transparent;\n border: none;\n padding: 8px 4px;\n cursor: pointer;\n border-radius: 7px;\n display: flex;\n flex-direction: column;\n gap: 1px;\n align-items: center;\n line-height: 1.1;\n font-family: var(--font-body);\n font-weight: 700;\n font-size: 12px;\n color: var(--color-text-neon-muted);\n letter-spacing: 0.04em;\n transition: background 0.15s, color 0.15s;\n}\n\n.plh-seg .plh-seg-num {\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 15px;\n color: var(--color-text-neon-muted);\n}\n\n.plh-seg .plh-seg-label {\n font-size: 11px;\n letter-spacing: 0.1em;\n text-transform: uppercase;\n}\n\n.plh-seg.active {\n background: linear-gradient(135deg, rgba(255, 45, 106, 0.22), rgba(0, 245, 255, 0.14));\n color: var(--color-text-white);\n box-shadow: inset 0 0 0 1px rgba(255, 45, 106, 0.35), 0 0 18px rgba(255, 45, 106, 0.18);\n}\n\n.plh-seg.active .plh-seg-num { color: var(--color-accent-primary); }\n\n.plh-seg-community.active {\n background: linear-gradient(135deg, rgba(157, 78, 221, 0.25), rgba(255, 45, 106, 0.15));\n box-shadow: inset 0 0 0 1px rgba(157, 78, 221, 0.45), 0 0 18px rgba(157, 78, 221, 0.22);\n}\n\n.plh-seg-community.active .plh-seg-num { color: #c89af5; }\n\n.plh-seg-mine.active {\n background: linear-gradient(135deg, rgba(0, 245, 255, 0.18), rgba(255, 45, 106, 0.1));\n box-shadow: inset 0 0 0 1px rgba(0, 245, 255, 0.4), 0 0 18px rgba(0, 245, 255, 0.18);\n}\n\n.plh-seg-mine.active .plh-seg-num { color: var(--color-accent-secondary); }\n\n.plh-chips {\n display: flex;\n gap: 7px;\n overflow-x: auto;\n padding: 0 0 6px;\n scrollbar-width: none;\n}\n\n.plh-chips::-webkit-scrollbar { display: none; }\n\n.plh-chip {\n flex-shrink: 0;\n padding: 7px 13px;\n background: var(--color-bg-surface);\n border: 1px solid var(--color-border-neon);\n border-radius: 999px;\n font-family: var(--font-body);\n font-weight: 600;\n font-size: 12px;\n color: var(--color-text-neon-muted);\n white-space: nowrap;\n cursor: pointer;\n letter-spacing: 0.01em;\n transition: background 0.15s, color 0.15s, border-color 0.15s;\n}\n\n.plh-chip.active {\n background: var(--color-accent-primary);\n color: var(--color-text-white);\n border-color: transparent;\n font-weight: 700;\n box-shadow: 0 0 16px rgba(255, 45, 106, 0.45);\n}\n\n/* #1569 follow-up: the Playlists/Mix tab-panel wrappers must fill the hub's\n remaining height (under the sticky tab strip) so their inner .plh-body can\n scroll. Without this they size to content and overflow .plh-root\n (height:100%; overflow:hidden), clipping everything below the fold. */\n.plh-list-view,\n.plh-mix-view {\n flex: 1 1 0;\n min-height: 0;\n display: flex;\n flex-direction: column;\n}\n\n.plh-body {\n position: relative;\n z-index: 1;\n flex: 1;\n overflow-y: auto;\n padding: 14px 0 110px;\n}\n\n.plh-loading {\n padding: 40px 20px;\n text-align: center;\n font-family: var(--font-body);\n font-weight: 500;\n font-size: 13px;\n color: var(--color-text-neon-muted);\n}\n\n/* Section dividers \u2014 group related shelves under a prominent header.\n Currently used by the \"\uD83C\uDF0D By Country\" block in the Community tab so\n the per-language shelves read as one organized section instead of\n a scattered list. */\n.plh-section-head {\n display: flex;\n align-items: baseline;\n justify-content: space-between;\n gap: 12px;\n padding: 8px 18px 12px;\n margin: 4px 0 8px;\n border-bottom: 1px solid rgba(0, 245, 255, 0.12);\n}\n\n.plh-section-head-title {\n display: flex;\n align-items: center;\n gap: 10px;\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 22px;\n letter-spacing: -0.02em;\n color: var(--color-text-white);\n line-height: 1;\n}\n\n.plh-section-head-emoji {\n font-size: 22px;\n filter: drop-shadow(0 0 12px rgba(0, 245, 255, 0.3));\n}\n\n.plh-section-head-meta {\n font-family: var(--font-body);\n font-weight: 600;\n font-size: 10px;\n letter-spacing: 0.16em;\n text-transform: uppercase;\n color: var(--color-text-neon-muted);\n flex-shrink: 0;\n}\n\n/* Shelves */\n\n.plh-shelf {\n margin-bottom: 22px;\n}\n\n.plh-shelf-head {\n display: flex;\n align-items: baseline;\n justify-content: space-between;\n padding: 0 18px 10px;\n}\n\n.plh-shelf-title {\n font-family: var(--font-display);\n font-weight: 800;\n font-size: 18px;\n letter-spacing: -0.01em;\n color: var(--color-text-white);\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.plh-shelf-see {\n font-family: var(--font-body);\n font-weight: 600;\n font-size: 12px;\n color: var(--color-accent-secondary);\n letter-spacing: 0.02em;\n cursor: pointer;\n background: transparent;\n border: none;\n padding: 0;\n}\n\n.plh-local-dot {\n display: inline-block;\n width: 7px;\n height: 7px;\n border-radius: 50%;\n background: var(--color-success-neon);\n box-shadow: 0 0 8px var(--color-success-neon);\n margin-right: 8px;\n vertical-align: middle;\n}\n\n.plh-local-badge {\n font-family: var(--font-body);\n font-weight: 700;\n font-size: 9px;\n letter-spacing: 0.14em;\n text-transform: uppercase;\n color: var(--color-success-neon);\n padding: 2px 7px;\n background: rgba(57, 255, 20, 0.12);\n border: 1px solid rgba(57, 255, 20, 0.4);\n border-radius: 999px;\n margin-left: 8px;\n vertical-align: middle;\n}\n\n/* Cards (horizontal scroll shelf) */\n\n.plh-cards {\n display: flex;\n gap: 12px;\n overflow-x: auto;\n padding: 0 18px 4px;\n scrollbar-width: none;\n}\n\n.plh-cards::-webkit-scrollbar { display: none; }\n\n.plh-card {\n flex-shrink: 0;\n /* #821: bumped from 136px \u2192 160px (~17% bigger area). Makes the\n playlist cards the visual centerpiece of the hub instead of feeling\n small relative to the surrounding chrome (header, search, stats,\n chips, action bar). Stays under 50% viewport width on the smallest\n phones (e.g. 375px) so two cards still fit side-by-side. */\n width: 160px;\n cursor: pointer;\n position: relative;\n background: transparent;\n border: none;\n padding: 0;\n text-align: left;\n color: inherit;\n font: inherit;\n}\n\n.plh-card .plh-cover {\n /* #821: matched to .plh-card width; keeps the 1:1 aspect ratio. */\n width: 160px;\n height: 160px;\n border-radius: 12px;\n position: relative;\n overflow: hidden;\n box-shadow: 0 10px 24px rgba(0, 0, 0, 0.5);\n isolation: isolate;\n display: flex;\n flex-direction: column;\n justify-content: flex-end;\n padding: 10px;\n}\n\n.plh-card .plh-cover::after {\n content: '';\n position: absolute;\n inset: 0;\n background: linear-gradient(180deg, transparent 55%, rgba(0, 0, 0, 0.45) 100%);\n pointer-events: none;\n z-index: 1;\n}\n\n.plh-cover-inner {\n position: relative;\n z-index: 2;\n display: flex;\n flex-direction: column;\n justify-content: flex-end;\n height: 100%;\n}\n\n.plh-cover-glyph {\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 42px;\n line-height: 0.9;\n letter-spacing: -0.04em;\n color: #fff;\n text-shadow: 0 2px 8px rgba(0, 0, 0, 0.4);\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n/* When the glyph falls back to word-initials (e.g. \"GMS\") or a longer\n abbreviation, scale it down so it doesn't crowd the sub-title. */\n.plh-cover-glyph-long { font-size: 26px; letter-spacing: -0.02em; }\n\n.plh-cover-sub {\n font-family: var(--font-display);\n font-weight: 700;\n font-size: 12px;\n letter-spacing: 0.04em;\n text-transform: uppercase;\n color: rgba(255, 255, 255, 0.92);\n margin-top: 4px;\n line-height: 1.15;\n /* Two-line clamp so \"Top 100 Dutch Classics\" fits cleanly instead of\n showing \"Top 100 Dutch Classi\u2026\". */\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n overflow-wrap: break-word;\n word-break: break-word;\n max-width: 100%;\n}\n\n.plh-cover-badge {\n position: absolute;\n top: 8px;\n right: 8px;\n padding: 3px 8px;\n background: rgba(0, 0, 0, 0.5);\n backdrop-filter: blur(6px);\n border-radius: 999px;\n font-family: var(--font-body);\n font-weight: 700;\n font-size: 9px;\n letter-spacing: 0.14em;\n text-transform: uppercase;\n color: var(--color-text-white);\n z-index: 3;\n}\n\n.plh-cover-badge-purple {\n background: rgba(157, 78, 221, 0.5);\n}\n\n.plh-card-meta { padding: 8px 2px 0; }\n\n.plh-card-name {\n font-family: var(--font-body);\n font-weight: 700;\n font-size: 13px;\n line-height: 1.25;\n color: var(--color-text-white);\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n\n.plh-card-sub {\n font-family: var(--font-body);\n font-weight: 500;\n font-size: 11px;\n color: var(--color-text-neon-muted);\n margin-top: 2px;\n letter-spacing: 0.02em;\n}\n\n.plh-card-sub b { color: var(--color-accent-secondary); font-weight: 700; }\n\n.plh-card-local {\n font-family: var(--font-body);\n font-weight: 500;\n font-size: 11px;\n color: var(--color-success-neon);\n margin-top: 2px;\n letter-spacing: 0.02em;\n}\n\n.plh-card-local b { color: var(--color-success-neon); font-weight: 800; }\n\n.plh-card-local-when { color: var(--color-text-neon-muted); }\n.plh-card-local-when b { color: var(--color-accent-secondary); }\n\n/* rc3: replaces the faint corner circle (.plh-check) with a labeled pill.\n Unselected = pink \"+ Add\", selected = neon-green \"\u2713 Added\". Sits on the\n top-LEFT so it doesn't collide with cover-badge (which lives top-right on\n featured / community / recently-added cards). */\n.plh-pill {\n position: absolute;\n top: 8px;\n left: 8px;\n z-index: 4;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 5px 10px 5px 8px;\n border-radius: 999px;\n background: rgba(255, 45, 106, 0.92);\n color: var(--color-text-white);\n font-family: var(--font-display);\n font-weight: 800;\n font-size: 10px;\n letter-spacing: 0.12em;\n text-transform: uppercase;\n cursor: pointer;\n border: 1px solid rgba(255, 255, 255, 0.12);\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4), 0 0 14px rgba(255, 45, 106, 0.35);\n backdrop-filter: blur(6px);\n -webkit-backdrop-filter: blur(6px);\n transition: background 0.15s, color 0.15s, box-shadow 0.15s, filter 0.15s;\n}\n\n.plh-pill:hover { filter: brightness(1.1); }\n\n.plh-pill-label { line-height: 1; }\n\n.plh-card-selected .plh-pill {\n background: var(--color-success-neon);\n color: var(--color-bg-primary);\n border-color: transparent;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4), 0 0 18px rgba(57, 255, 20, 0.55);\n}\n\n.plh-card-selected .plh-cover {\n box-shadow: 0 0 0 3px var(--color-success-neon), 0 10px 24px rgba(0, 0, 0, 0.5);\n}\n\n/* Legacy rc1/rc2 corner circle \u2014 kept as a no-op guard in case any stale\n cached markup survives the CACHE_VERSION bump. New markup uses .plh-pill. */\n.plh-check { display: none; }\n\n/* Featured shelf \u2014 bigger cards + gradient frame */\n\n.plh-featured .plh-card,\n.plh-featured .plh-card .plh-cover { width: 160px; }\n\n.plh-featured .plh-card .plh-cover {\n height: 200px;\n padding: 2px;\n background: linear-gradient(135deg, var(--color-accent-primary), var(--color-accent-secondary));\n box-shadow: 0 12px 30px rgba(0, 0, 0, 0.6), 0 0 24px rgba(255, 45, 106, 0.25);\n}\n\n.plh-featured .plh-card .plh-cover::after {\n border-radius: 10px;\n margin: 2px;\n inset: 2px;\n}\n\n.plh-featured .plh-cover-inner { padding: 10px; }\n.plh-featured .plh-cover-glyph { font-size: 48px; }\n\n.plh-card-community .plh-cover {\n background: linear-gradient(135deg, #240046 0%, #7209b7 50%, #ff2d6a 100%);\n box-shadow: 0 12px 30px rgba(0, 0, 0, 0.6), 0 0 28px rgba(157, 78, 221, 0.4);\n}\n\n/* Cover gradient tints */\n.plh-tint-pop { background: linear-gradient(135deg, #ff2d6a 0%, #ff6b9d 60%, #ff8c42 100%); }\n.plh-tint-rock { background: linear-gradient(135deg, #c1121f 0%, #ff4d1c 60%, #ff8c42 100%); }\n.plh-tint-hiphop { background: linear-gradient(135deg, #7209b7 0%, #b5179e 60%, #ff2d6a 100%); }\n.plh-tint-jazz { background: linear-gradient(135deg, #b08968 0%, #e6a855 60%, #ffc94a 100%); }\n.plh-tint-metal { background: linear-gradient(135deg, #1a0000 0%, #6a040f 60%, #c1121f 100%); }\n.plh-tint-eu { background: linear-gradient(135deg, #00b4d8 0%, #0077b6 60%, #03045e 100%); }\n.plh-tint-latin { background: linear-gradient(135deg, #ff6600 0%, #ffb703 60%, #fdd85d 100%); }\n.plh-tint-schlager { background: linear-gradient(135deg, #ff8fab 0%, #ffc2d1 60%, #fae0e4 100%); }\n.plh-tint-schlager .plh-cover-glyph,\n.plh-tint-schlager .plh-cover-sub { color: #2a0a1a; text-shadow: none; }\n.plh-tint-soul { background: linear-gradient(135deg, #6a0572 0%, #ab4287 60%, #fcbf49 100%); }\n.plh-tint-purple { background: linear-gradient(135deg, #240046 0%, #7209b7 50%, #ff2d6a 100%); }\n\n/* Community request banner */\n\n.plh-banner {\n margin: 0 18px 18px;\n padding: 14px 16px;\n border-radius: 14px;\n background: linear-gradient(135deg, rgba(157, 78, 221, 0.18), rgba(255, 45, 106, 0.1));\n border: 1px solid rgba(157, 78, 221, 0.35);\n display: flex;\n align-items: center;\n gap: 12px;\n cursor: pointer;\n}\n\n.plh-banner-icon {\n width: 40px;\n height: 40px;\n border-radius: 10px;\n background: linear-gradient(135deg, #7209b7, var(--color-accent-primary));\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 20px;\n flex-shrink: 0;\n box-shadow: 0 0 14px rgba(157, 78, 221, 0.5);\n}\n\n.plh-banner-body { flex: 1; min-width: 0; }\n\n.plh-banner-title {\n font-family: var(--font-display);\n font-weight: 800;\n font-size: 14px;\n color: var(--color-text-white);\n line-height: 1.2;\n}\n\n.plh-banner-sub {\n font-family: var(--font-body);\n font-weight: 500;\n font-size: 11px;\n color: var(--color-text-neon-muted);\n margin-top: 2px;\n line-height: 1.35;\n}\n\n.plh-banner-arrow {\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 22px;\n color: #c89af5;\n}\n\n/* Mine empty + populated */\n\n.plh-mine-empty { padding: 30px 24px; text-align: center; }\n\n.plh-empty-emoji { font-size: 64px; margin-bottom: 12px; filter: drop-shadow(0 0 24px rgba(0, 245, 255, 0.3)); }\n\n.plh-mine-title {\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 26px;\n color: var(--color-text-white);\n margin: 0 0 8px;\n letter-spacing: -0.01em;\n line-height: 1.1;\n}\n\n.plh-mine-body {\n font-family: var(--font-body);\n font-weight: 500;\n font-size: 14px;\n color: var(--color-text-neon-muted);\n margin: 0 0 20px;\n line-height: 1.5;\n}\n\n.plh-mine-body b { color: var(--color-text-white); font-weight: 700; }\n\n.plh-request-cta {\n margin: 0 0 16px;\n padding: 20px;\n background: linear-gradient(135deg, rgba(0, 245, 255, 0.1), rgba(255, 45, 106, 0.06));\n border: 1px solid rgba(0, 245, 255, 0.35);\n border-radius: 16px;\n text-align: left;\n}\n\n.plh-request-head {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 14px;\n}\n\n.plh-request-icon {\n width: 44px;\n height: 44px;\n border-radius: 12px;\n background: linear-gradient(135deg, var(--color-accent-secondary), #0077b6);\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--color-bg-primary);\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 22px;\n box-shadow: 0 0 16px rgba(0, 245, 255, 0.5);\n}\n\n.plh-request-titles { flex: 1; min-width: 0; }\n\n.plh-request-t1 {\n font-family: var(--font-display);\n font-weight: 800;\n font-size: 16px;\n color: var(--color-text-white);\n line-height: 1.2;\n}\n\n.plh-request-t2 {\n font-family: var(--font-body);\n font-weight: 500;\n font-size: 12px;\n color: var(--color-text-neon-muted);\n margin-top: 2px;\n line-height: 1.35;\n}\n\n.plh-meanwhile {\n margin: 12px 0 0;\n padding: 14px 16px;\n background: var(--color-bg-surface);\n border: 1px solid var(--color-border-neon);\n border-radius: 12px;\n display: flex;\n align-items: center;\n gap: 12px;\n cursor: pointer;\n text-align: left;\n}\n\n.plh-meanwhile-icon {\n color: var(--color-accent-secondary);\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 18px;\n flex-shrink: 0;\n}\n\n.plh-meanwhile-body { flex: 1; min-width: 0; }\n\n.plh-meanwhile-t1 {\n font-family: var(--font-display);\n font-weight: 800;\n font-size: 13px;\n color: var(--color-text-white);\n line-height: 1.2;\n}\n\n.plh-meanwhile-t2 {\n font-family: var(--font-body);\n font-weight: 500;\n font-size: 11px;\n color: var(--color-text-neon-muted);\n margin-top: 2px;\n line-height: 1.35;\n}\n\n.plh-meanwhile-arrow {\n color: var(--color-text-neon-muted);\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 20px;\n}\n\n.plh-mine-head { padding: 14px 18px 6px; display: flex; align-items: baseline; justify-content: space-between; }\n\n.plh-mine-count {\n font-family: var(--font-display);\n font-weight: 800;\n font-size: 13px;\n letter-spacing: 0.14em;\n text-transform: uppercase;\n color: var(--color-text-neon-muted);\n}\n\n.plh-mine-count b { color: var(--color-text-white); font-weight: 900; }\n\n.plh-new-request {\n margin: 10px 18px 18px;\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 14px;\n background: linear-gradient(90deg, rgba(0, 245, 255, 0.1), rgba(255, 45, 106, 0.08));\n border: 1px dashed rgba(0, 245, 255, 0.4);\n border-radius: 12px;\n cursor: pointer;\n}\n\n.plh-new-plus {\n width: 36px;\n height: 36px;\n border-radius: 10px;\n background: var(--color-accent-secondary);\n color: var(--color-bg-primary);\n display: flex;\n align-items: center;\n justify-content: center;\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 20px;\n box-shadow: 0 0 16px var(--color-accent-secondary);\n flex-shrink: 0;\n}\n\n.plh-new-t1 {\n font-family: var(--font-display);\n font-weight: 800;\n font-size: 14px;\n color: var(--color-text-white);\n line-height: 1.2;\n}\n\n.plh-new-t2 {\n font-family: var(--font-body);\n font-weight: 500;\n font-size: 11px;\n color: var(--color-text-neon-muted);\n margin-top: 2px;\n}\n\n.plh-req-list {\n padding: 0 18px;\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.plh-req-card {\n padding: 14px 14px 14px 16px;\n background: var(--color-bg-surface);\n border: 1px solid var(--color-border-neon);\n border-radius: 14px;\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.plh-req-card.plh-req-done { border-color: rgba(57, 255, 20, 0.35); background: linear-gradient(90deg, rgba(57, 255, 20, 0.06), transparent 75%); }\n.plh-req-card.plh-req-building { border-color: rgba(0, 245, 255, 0.4); background: linear-gradient(90deg, rgba(0, 245, 255, 0.06), transparent 75%); }\n.plh-req-card.plh-req-declined { border-color: rgba(255, 45, 106, 0.35); }\n\n.plh-req-row1 { display: flex; align-items: flex-start; justify-content: space-between; gap: 10px; }\n\n.plh-req-body { min-width: 0; flex: 1; }\n\n.plh-req-name {\n font-family: var(--font-display);\n font-weight: 800;\n font-size: 15px;\n color: var(--color-text-white);\n line-height: 1.2;\n letter-spacing: -0.01em;\n}\n\n.plh-req-desc {\n font-family: var(--font-body);\n font-weight: 500;\n font-size: 11.5px;\n color: var(--color-text-neon-muted);\n margin-top: 3px;\n line-height: 1.45;\n word-break: break-all;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n\n.plh-req-meta {\n font-family: var(--font-body);\n font-weight: 600;\n font-size: 10px;\n color: var(--color-text-light);\n letter-spacing: 0.06em;\n text-transform: uppercase;\n margin-top: 4px;\n}\n\n.plh-req-meta b { color: var(--color-text-neon-muted); font-weight: 700; }\n\n.plh-req-link {\n color: var(--color-accent-secondary);\n font-weight: 700;\n text-transform: none;\n letter-spacing: 0.02em;\n text-decoration: none;\n}\n\n.plh-status-badge {\n flex-shrink: 0;\n padding: 4px 10px;\n border-radius: 999px;\n font-family: var(--font-display);\n font-weight: 800;\n font-size: 10px;\n letter-spacing: 0.14em;\n text-transform: uppercase;\n display: flex;\n align-items: center;\n gap: 5px;\n}\n\n.plh-sb-dot { width: 6px; height: 6px; border-radius: 50%; background: currentColor; box-shadow: 0 0 6px currentColor; }\n\n.plh-status-badge.pending { background: rgba(245, 158, 11, 0.12); border: 1px solid rgba(245, 158, 11, 0.45); color: var(--color-warning); }\n.plh-status-badge.building { background: rgba(0, 245, 255, 0.12); border: 1px solid rgba(0, 245, 255, 0.45); color: var(--color-accent-secondary); }\n.plh-status-badge.done { background: rgba(57, 255, 20, 0.12); border: 1px solid rgba(57, 255, 20, 0.4); color: var(--color-success-neon); }\n.plh-status-badge.declined { background: rgba(255, 45, 106, 0.12); border: 1px solid rgba(255, 45, 106, 0.4); color: #ff7ca7; }\n\n.plh-progress { display: flex; gap: 3px; align-items: center; }\n\n.plh-seg-pill {\n flex: 1;\n height: 3px;\n border-radius: 2px;\n background: var(--color-border-neon);\n}\n\n.plh-seg-pill.filled-pending { background: var(--color-warning); box-shadow: 0 0 6px var(--color-warning); }\n.plh-seg-pill.filled-building { background: var(--color-accent-secondary); box-shadow: 0 0 6px var(--color-accent-secondary); }\n.plh-seg-pill.filled-done { background: var(--color-success-neon); box-shadow: 0 0 6px var(--color-success-neon); }\n.plh-seg-pill.filled-declined { background: var(--color-accent-primary); box-shadow: 0 0 6px var(--color-accent-primary); }\n\n.plh-steps-row {\n display: flex;\n justify-content: space-between;\n font-family: var(--font-body);\n font-weight: 600;\n font-size: 9px;\n color: var(--color-text-light);\n letter-spacing: 0.1em;\n text-transform: uppercase;\n margin-top: -4px;\n}\n\n.plh-steps-row span.active { color: var(--color-text-white); font-weight: 800; }\n\n/* Empty state layout */\n\n.plh-empty {\n padding: 30px 28px;\n text-align: center;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n}\n\n.plh-empty-icon {\n width: 96px;\n height: 96px;\n border-radius: 26px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--color-bg-surface);\n border: 1px solid var(--color-border-neon);\n font-size: 42px;\n position: relative;\n}\n\n.plh-empty-icon-search { background: radial-gradient(circle, rgba(0, 245, 255, 0.12), var(--color-bg-surface) 60%); }\n\n.plh-empty-title {\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 24px;\n color: var(--color-text-white);\n margin: 0;\n letter-spacing: -0.01em;\n line-height: 1.15;\n}\n\n.plh-empty-body {\n font-family: var(--font-body);\n font-weight: 500;\n font-size: 13px;\n color: var(--color-text-neon-muted);\n margin: 0;\n line-height: 1.55;\n max-width: 280px;\n}\n\n.plh-cyan { color: var(--color-accent-secondary); }\n\n.plh-action-stack {\n display: flex;\n flex-direction: column;\n gap: 8px;\n width: 100%;\n max-width: 280px;\n margin-top: 12px;\n}\n\n/* Buttons */\n\n.plh-btn {\n padding: 13px 16px;\n border-radius: 12px;\n font-family: var(--font-display);\n font-weight: 800;\n font-size: 13px;\n letter-spacing: 0.04em;\n border: 1px solid var(--color-border-neon);\n background: var(--color-bg-surface);\n color: var(--color-text-white);\n cursor: pointer;\n text-align: center;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n text-transform: uppercase;\n transition: all 0.15s;\n font-family: var(--font-display);\n}\n\n.plh-btn:hover { border-color: var(--color-accent-secondary); }\n\n.plh-btn-primary {\n background: linear-gradient(90deg, var(--color-accent-primary), #ff5fa4);\n border-color: transparent;\n color: var(--color-text-white);\n box-shadow: 0 0 24px rgba(255, 45, 106, 0.45);\n}\n\n.plh-btn-primary:hover { border-color: transparent; filter: brightness(1.1); }\n\n.plh-btn-cyan {\n background: linear-gradient(90deg, var(--color-accent-secondary), #0077b6);\n color: var(--color-bg-primary);\n border-color: transparent;\n box-shadow: 0 0 22px rgba(0, 245, 255, 0.45);\n}\n\n.plh-btn-cyan:hover { border-color: transparent; filter: brightness(1.1); }\n\n.plh-btn-neon {\n background: linear-gradient(90deg, var(--color-success-neon), #7bf1ff);\n color: var(--color-bg-primary);\n border-color: transparent;\n box-shadow: 0 0 24px rgba(57, 255, 20, 0.5);\n}\n\n.plh-btn-ghost {\n background: transparent;\n color: var(--color-text-neon-muted);\n}\n\n/* Detail sheet (bottom-sheet modal) */\n\n.plh-sheet-host {\n position: fixed;\n inset: 0;\n z-index: 50;\n pointer-events: none;\n display: none;\n}\n\n.plh-sheet-host.open {\n display: block;\n pointer-events: auto;\n}\n\n.plh-scrim {\n position: absolute;\n inset: 0;\n background: rgba(5, 5, 10, 0.72);\n backdrop-filter: blur(4px);\n -webkit-backdrop-filter: blur(4px);\n}\n\n.plh-sheet {\n position: absolute;\n left: 0;\n right: 0;\n bottom: 0;\n background: linear-gradient(180deg, #14141e 0%, var(--color-bg-primary) 100%);\n border-top-left-radius: 28px;\n border-top-right-radius: 28px;\n box-shadow: 0 -12px 40px rgba(0, 0, 0, 0.6);\n max-height: 80vh;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n border-top: 1px solid rgba(255, 45, 106, 0.25);\n animation: plh-sheet-in 0.25s ease-out;\n}\n\n.plh-sheet-community { border-top-color: rgba(157, 78, 221, 0.4); }\n\n.plh-sheet::before {\n content: '';\n position: absolute;\n top: 10px;\n left: 50%;\n transform: translateX(-50%);\n width: 48px;\n height: 4px;\n border-radius: 999px;\n background: rgba(255, 255, 255, 0.2);\n}\n\n@keyframes plh-sheet-in {\n from { transform: translateY(100%); }\n to { transform: translateY(0); }\n}\n\n.plh-sheet-close {\n position: absolute;\n top: 18px;\n right: 18px;\n width: 32px;\n height: 32px;\n border-radius: 50%;\n background: var(--color-bg-surface);\n border: 1px solid var(--color-border-neon);\n color: var(--color-text-neon-muted);\n cursor: pointer;\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 16px;\n line-height: 1;\n z-index: 5;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.plh-sheet-head { padding: 28px 20px 0; display: flex; gap: 14px; align-items: flex-start; flex-shrink: 0; }\n\n.plh-sheet-cover {\n width: 100px;\n height: 100px;\n border-radius: 14px;\n position: relative;\n overflow: hidden;\n flex-shrink: 0;\n display: flex;\n flex-direction: column;\n justify-content: flex-end;\n padding: 10px;\n box-shadow: 0 12px 30px rgba(0, 0, 0, 0.5);\n}\n\n.plh-sheet-cover-glyph {\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 36px;\n line-height: 0.9;\n letter-spacing: -0.04em;\n color: #fff;\n text-shadow: 0 2px 8px rgba(0, 0, 0, 0.4);\n}\n\n.plh-sheet-cover-sub {\n font-family: var(--font-display);\n font-weight: 700;\n font-size: 11px;\n letter-spacing: 0.06em;\n text-transform: uppercase;\n color: rgba(255, 255, 255, 0.9);\n margin-top: 2px;\n}\n\n.plh-sheet-info { flex: 1; min-width: 0; }\n\n.plh-sheet-title {\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 22px;\n line-height: 1.1;\n letter-spacing: -0.02em;\n color: var(--color-text-white);\n margin: 0;\n}\n\n.plh-sheet-author {\n font-family: var(--font-body);\n font-weight: 500;\n font-size: 12px;\n color: var(--color-text-neon-muted);\n margin-top: 4px;\n}\n\n.plh-sheet-author b { color: var(--color-accent-secondary); font-weight: 700; }\n\n.plh-sheet-stats {\n display: flex;\n gap: 0;\n padding: 18px 20px 16px;\n border-bottom: 1px solid rgba(255, 255, 255, 0.06);\n margin-top: 18px;\n flex-shrink: 0;\n}\n\n.plh-stat { flex: 1; text-align: center; position: relative; }\n\n.plh-stat + .plh-stat::before {\n content: '';\n position: absolute;\n left: 0;\n top: 6px;\n bottom: 6px;\n width: 1px;\n background: var(--color-border-neon);\n}\n\n.plh-stat-val {\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 22px;\n color: var(--color-text-white);\n letter-spacing: -0.02em;\n line-height: 1;\n}\n\n.plh-stat-val-cyan { color: var(--color-accent-secondary); }\n.plh-stat-val-pink { color: var(--color-accent-primary); }\n\n.plh-stat-lbl {\n font-family: var(--font-body);\n font-weight: 700;\n font-size: 9px;\n letter-spacing: 0.16em;\n text-transform: uppercase;\n color: var(--color-text-light);\n margin-top: 4px;\n}\n\n.plh-sheet-scroll {\n flex: 1;\n overflow-y: auto;\n padding: 16px 20px 20px;\n}\n\n.plh-sheet-sec-title {\n font-family: var(--font-display);\n font-weight: 800;\n font-size: 12px;\n letter-spacing: 0.18em;\n text-transform: uppercase;\n color: var(--color-text-neon-muted);\n margin: 0 0 10px;\n}\n\n.plh-sheet-desc {\n font-family: var(--font-body);\n font-weight: 500;\n font-size: 13px;\n color: var(--color-text-neon-muted);\n line-height: 1.55;\n margin-bottom: 16px;\n padding: 14px;\n background: var(--color-bg-surface);\n border: 1px solid var(--color-border-neon);\n border-radius: 12px;\n}\n\n.plh-sheet-tags { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 16px; }\n\n.plh-sheet-tag {\n padding: 5px 10px;\n background: var(--color-bg-surface);\n border: 1px solid var(--color-border-neon);\n border-radius: 6px;\n font-family: var(--font-body);\n font-weight: 600;\n font-size: 11px;\n color: var(--color-text-white);\n letter-spacing: 0.02em;\n}\n\n.plh-sheet-providers { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 16px; }\n\n.plh-sheet-provider {\n padding: 6px 10px;\n background: var(--color-bg-surface);\n border: 1px solid var(--color-border-neon);\n border-radius: 8px;\n font-family: var(--font-body);\n font-weight: 600;\n font-size: 11px;\n color: var(--color-text-neon-muted);\n}\n\n.plh-sheet-provider b { color: var(--color-accent-secondary); font-weight: 800; }\n\n.plh-sheet-foot {\n padding: 14px 20px calc(14px + env(safe-area-inset-bottom, 0px)) 20px;\n background: rgba(10, 10, 18, 0.95);\n border-top: 1px solid var(--color-border-neon);\n display: flex;\n gap: 10px;\n align-items: center;\n flex-shrink: 0;\n}\n\n.plh-sheet-foot .plh-btn { flex: 1; }\n\n/* Bottom CTA bar */\n\n/* #1625: the Mix tab reuses the sticky CTA bar (Back + \"Weiter \u2192\") so the setup\n wizard can advance from a built mix. It renders empty outside the wizard\n (no onContinue) \u2014 collapse it so no bare floating bar shows. */\n.plh-mix-cta:empty {\n display: none;\n}\n\n.plh-cta-bar {\n position: absolute;\n left: 12px;\n right: 12px;\n bottom: 12px;\n display: flex;\n gap: 8px;\n padding: 10px;\n background: rgba(10, 10, 18, 0.88);\n backdrop-filter: blur(20px);\n -webkit-backdrop-filter: blur(20px);\n border: 1px solid var(--color-border-neon);\n border-radius: 16px;\n box-shadow: 0 12px 40px rgba(0, 0, 0, 0.6);\n align-items: center;\n z-index: 10;\n}\n\n/* Request-a-playlist FAB inside the CTA bar. rc1/rc2 used a\n near-transparent fill which made the envelope icon invisible against\n the dark sticky bar. rc3: solid cyan button with a dark icon so the\n affordance reads at a glance. */\n.plh-cta-fab {\n width: 44px;\n height: 44px;\n border-radius: 12px;\n background: linear-gradient(135deg, var(--color-accent-secondary) 0%, #0ea5c4 100%);\n border: none;\n color: var(--color-bg-primary);\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n box-shadow: 0 0 18px rgba(0, 245, 255, 0.45), inset 0 1px 0 rgba(255, 255, 255, 0.25);\n flex-shrink: 0;\n transition: filter 0.15s;\n}\n\n.plh-cta-fab:hover { filter: brightness(1.1); }\n\n/* #1054: pin the FAB SVG stroke to a literal hex white. The earlier\n rc3 fix used var(--color-bg-primary), but some Safari/Webkit versions\n also fail to resolve CSS variables into the SVG `stroke` property,\n not just into inherited `currentColor`. A literal hex value bypasses\n the variable resolver entirely; white on cyan gives max contrast. */\n.plh-cta-fab svg {\n stroke: #ffffff;\n fill: none;\n}\n\n.plh-cta-back {\n flex-shrink: 0;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 0 12px;\n height: 44px;\n border-radius: 12px;\n background: var(--color-bg-surface);\n border: 1px solid var(--color-border-neon);\n color: var(--color-text-white);\n font-family: var(--font-display);\n font-weight: 700;\n font-size: 13px;\n letter-spacing: 0.04em;\n text-transform: uppercase;\n cursor: pointer;\n transition: border-color 0.15s, background 0.15s;\n}\n\n.plh-cta-back:hover { border-color: var(--color-accent-secondary); }\n.plh-cta-back svg { opacity: 0.85; }\n\n.plh-cta-count {\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 14px;\n color: var(--color-success-neon);\n padding: 0 8px;\n letter-spacing: 0.04em;\n text-shadow: 0 0 10px rgba(57, 255, 20, 0.5);\n}\n\n.plh-cta-start {\n flex: 1;\n background: linear-gradient(90deg, var(--color-accent-primary), #ff5fa4);\n border: none;\n border-radius: 12px;\n padding: 12px;\n font-family: var(--font-display);\n font-weight: 700;\n font-size: 14px;\n color: var(--color-text-white);\n cursor: pointer;\n letter-spacing: 0.02em;\n box-shadow: 0 0 24px rgba(255, 45, 106, 0.5);\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n}\n\n/* Legacy count pill \u2014 v3.3.0-rc1 rendered it next to the Continue label.\n rc2 drops it (count already shown in the green pill on the left).\n Kept as a no-op class guard in case any stale cached markup shows up. */\n.plh-cta-start-count { display: none; }\n\n.plh-cta-start-label { font-family: var(--font-display); font-weight: 700; }\n.plh-cta-start-arrow { opacity: 0.9; flex-shrink: 0; }\n.plh-cta-count-empty { opacity: 0.5; }\n\n.plh-cta-count-btn {\n background: transparent;\n border: 1px solid rgba(57, 255, 20, 0.35);\n border-radius: 999px;\n cursor: pointer;\n transition: background 0.15s ease, border-color 0.15s ease, transform 0.1s ease;\n}\n.plh-cta-count-btn:hover,\n.plh-cta-count-btn:focus-visible {\n background: rgba(57, 255, 20, 0.12);\n border-color: rgba(57, 255, 20, 0.6);\n outline: none;\n}\n.plh-cta-count-btn:active { transform: scale(0.96); }\n\n.plh-cta-start-disabled {\n opacity: 0.5;\n cursor: not-allowed;\n box-shadow: none;\n}\n\n/* Selected-playlists sheet (issue #1074) */\n.plh-sheet-selected { border-top-color: rgba(57, 255, 20, 0.35); }\n.plh-selected-head {\n padding: 28px 20px 12px;\n flex-shrink: 0;\n}\n.plh-selected-title {\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 20px;\n color: var(--color-text-white);\n margin: 0 0 4px;\n letter-spacing: 0.01em;\n}\n.plh-selected-subtitle {\n font-size: 13px;\n color: var(--color-text-neon-muted);\n letter-spacing: 0.01em;\n}\n.plh-selected-scroll {\n overflow-y: auto;\n padding: 4px 16px 24px;\n flex: 1;\n min-height: 0;\n}\n.plh-selected-row {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 8px;\n border-bottom: 1px solid rgba(255, 255, 255, 0.06);\n}\n.plh-selected-row:last-child { border-bottom: none; }\n.plh-selected-thumb {\n width: 44px;\n height: 44px;\n border-radius: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n background: rgba(255, 255, 255, 0.06);\n}\n.plh-selected-glyph { font-size: 20px; }\n.plh-selected-meta {\n flex: 1;\n min-width: 0;\n}\n.plh-selected-name {\n font-family: var(--font-display);\n font-weight: 700;\n font-size: 14px;\n color: var(--color-text-white);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.plh-selected-sub {\n font-size: 12px;\n color: var(--color-text-neon-muted);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n margin-top: 2px;\n}\n.plh-selected-sub b { color: var(--color-text-white); font-weight: 700; }\n.plh-selected-remove {\n height: 32px;\n padding: 0 12px;\n border-radius: 16px;\n background: var(--color-bg-surface);\n border: 1px solid rgba(255, 45, 106, 0.35);\n color: #ff5fa4;\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n flex-shrink: 0;\n font-family: var(--font-display);\n font-weight: 700;\n font-size: 12px;\n letter-spacing: 0.04em;\n text-transform: uppercase;\n transition: background 0.15s ease, color 0.15s ease, border-color 0.15s ease, transform 0.1s ease;\n}\n.plh-selected-remove:hover,\n.plh-selected-remove:focus-visible {\n background: rgba(255, 45, 106, 0.18);\n border-color: rgba(255, 45, 106, 0.65);\n color: #ff7ab3;\n outline: none;\n}\n.plh-selected-remove:active { transform: scale(0.94); }\n.plh-selected-remove-label { line-height: 1; }\n.plh-selected-empty {\n text-align: center;\n padding: 36px 20px;\n color: var(--color-text-neon-muted);\n}\n.plh-selected-empty-icon { font-size: 36px; margin-bottom: 8px; }\n.plh-selected-empty-title {\n font-family: var(--font-display);\n font-weight: 700;\n font-size: 14px;\n}\n\n/* Wider viewport: widen cards a touch, keep layout stable */\n\n@media (min-width: 720px) {\n .plh-cards { padding: 0 24px 4px; }\n .plh-header { padding: 16px 24px 12px; }\n .plh-shelf-head { padding: 0 24px 10px; }\n .plh-banner, .plh-new-request { margin-left: 24px; margin-right: 24px; }\n .plh-req-list { padding: 0 24px; }\n .plh-mine-head { padding: 14px 24px 6px; }\n}\n\n/* ------------------------------------------------------------------\n * Playlist Generator (#1052) \u2014 modal that bridges Spotify URL \u2192 LLM\n * prompt \u2192 validated bundled-format JSON. Lives under .plg-* namespace.\n * Built to match the dark playlist-hub look + admin tokens.\n * ------------------------------------------------------------------ */\n.plg-host {\n position: fixed;\n inset: 0;\n z-index: 9000;\n display: flex;\n align-items: flex-start;\n justify-content: center;\n overflow: hidden;\n}\n.plg-scrim {\n position: absolute;\n inset: 0;\n background: rgba(0, 0, 0, 0.72);\n backdrop-filter: blur(6px);\n -webkit-backdrop-filter: blur(6px);\n}\n.plg-modal {\n position: relative;\n z-index: 1;\n margin: 32px 16px;\n max-width: 880px;\n width: 100%;\n background: #0f1116;\n color: #f1f3f7;\n border-radius: 16px;\n border: 1px solid rgba(255, 255, 255, 0.08);\n box-shadow: 0 30px 60px rgba(0, 0, 0, 0.6);\n padding: 24px 24px 20px;\n max-height: calc(100vh - 64px);\n overflow-y: auto;\n font-family: var(--font-body, system-ui);\n}\n.plg-close {\n position: absolute;\n top: 12px;\n right: 12px;\n width: 32px;\n height: 32px;\n border-radius: 50%;\n background: rgba(255, 255, 255, 0.06);\n color: #f1f3f7;\n border: 0;\n font-size: 16px;\n cursor: pointer;\n}\n.plg-close:hover { background: rgba(255, 255, 255, 0.12); }\n.plg-title {\n margin: 0 0 4px;\n font-size: 20px;\n font-family: var(--font-display, system-ui);\n font-weight: 700;\n letter-spacing: 0.02em;\n}\n.plg-sub {\n margin: 0 0 18px;\n color: #d8dce5;\n font-size: 15px;\n line-height: 1.55;\n}\n/* Inline step-by-step guide accordion (#1286) */\n.plg-guide {\n margin: 0 0 18px;\n background: #14171f;\n border: 1px solid rgba(255, 255, 255, 0.08);\n border-radius: 12px;\n overflow: hidden;\n}\n.plg-guide-toggle {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n box-sizing: border-box;\n padding: 12px 14px;\n background: transparent;\n border: 0;\n color: #f1f3f7;\n font: inherit;\n font-size: 14px;\n font-weight: 700;\n letter-spacing: 0.01em;\n cursor: pointer;\n text-align: left;\n}\n.plg-guide-toggle:hover { background: rgba(255, 255, 255, 0.03); }\n.plg-guide-chevron { color: #8a92a3; font-size: 13px; margin-left: 12px; }\n.plg-guide-body {\n padding: 4px 14px 14px;\n border-top: 1px solid rgba(255, 255, 255, 0.06);\n}\n.plg-guide-steps {\n list-style: none;\n margin: 12px 0 14px;\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n.plg-guide-step {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n}\n.plg-guide-num {\n flex: 0 0 auto;\n width: 22px;\n height: 22px;\n border-radius: 50%;\n background: linear-gradient(180deg, #ff3a8c, #cf2e72);\n color: #fff;\n font-size: 12px;\n font-weight: 700;\n display: flex;\n align-items: center;\n justify-content: center;\n margin-top: 1px;\n}\n.plg-guide-text {\n color: #d8dce5;\n font-size: 13.5px;\n line-height: 1.5;\n}\n.plg-guide-text b { color: #f1f3f7; }\n.plg-guide-warn {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n background: rgba(255, 184, 0, 0.08);\n border: 1px solid rgba(255, 184, 0, 0.35);\n border-radius: 10px;\n padding: 10px 12px;\n}\n.plg-guide-warn-icon { flex: 0 0 auto; font-size: 14px; line-height: 1.5; }\n.plg-guide-warn-text {\n color: #f0d9a8;\n font-size: 12.5px;\n line-height: 1.55;\n}\n.plg-guide-warn-text b { color: #ffd66b; }\n.plg-label {\n display: block;\n margin: 14px 0 6px;\n font-size: 11px;\n font-weight: 700;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n color: #8a92a3;\n}\n.plg-input,\n.plg-textarea {\n width: 100%;\n box-sizing: border-box;\n background: #181b24;\n color: #f1f3f7;\n border: 1px solid rgba(255, 255, 255, 0.1);\n border-radius: 10px;\n padding: 10px 12px;\n font: inherit;\n font-size: 14px;\n outline: none;\n}\n.plg-input:focus,\n.plg-textarea:focus { border-color: #5cc8ff; }\n.plg-textarea {\n min-height: 200px;\n font-family: var(--font-mono, ui-monospace, SFMono-Regular, Menlo, monospace);\n font-size: 12.5px;\n line-height: 1.45;\n resize: vertical;\n}\n.plg-row {\n display: flex;\n gap: 10px;\n align-items: center;\n margin: 8px 0 0;\n flex-wrap: wrap;\n}\n.plg-hint {\n color: #8a92a3;\n font-size: 12px;\n}\n.plg-btn {\n appearance: none;\n -webkit-appearance: none;\n cursor: pointer;\n border-radius: 999px;\n padding: 9px 16px;\n font: inherit;\n font-size: 13px;\n font-weight: 600;\n border: 0;\n background: rgba(255, 255, 255, 0.08);\n color: #f1f3f7;\n}\n.plg-btn:disabled { cursor: not-allowed; opacity: 0.45; }\n.plg-btn-primary { background: linear-gradient(180deg, #ff3a8c, #cf2e72); color: #fff; }\n.plg-btn-secondary { background: rgba(255, 255, 255, 0.1); }\n.plg-btn-ghost { background: transparent; color: #aab0bd; }\n.plg-btn-success { background: linear-gradient(180deg, #2dd66f, #20b659); color: #04140a; }\n.plg-btn-disabled { background: rgba(255, 255, 255, 0.04); color: #5a606e; }\n.plg-actions {\n display: flex;\n gap: 10px;\n margin: 16px 0 0;\n flex-wrap: wrap;\n}\n.plg-results {\n margin-top: 16px;\n}\n.plg-verdict {\n padding: 10px 12px;\n border-radius: 10px;\n margin: 6px 0 12px;\n font-weight: 700;\n font-size: 13px;\n}\n.plg-verdict-ok { background: rgba(45, 214, 111, 0.16); color: #2dd66f; border: 1px solid rgba(45, 214, 111, 0.4); }\n.plg-verdict-bad { background: rgba(255, 80, 80, 0.14); color: #ff8a8a; border: 1px solid rgba(255, 80, 80, 0.4); }\n.plg-block {\n background: #14171f;\n border: 1px solid rgba(255, 255, 255, 0.06);\n border-radius: 10px;\n padding: 10px 12px;\n margin: 8px 0;\n}\n.plg-block h4 { margin: 0 0 6px; font-size: 12px; letter-spacing: 0.06em; text-transform: uppercase; color: #aab0bd; }\n.plg-block ul { margin: 0; padding-left: 18px; font-size: 13px; line-height: 1.5; }\n.plg-block-err { border-color: rgba(255, 80, 80, 0.4); }\n.plg-table-wrap { overflow-x: auto; }\n.plg-table { width: 100%; border-collapse: collapse; font-size: 11px; }\n.plg-table th, .plg-table td { padding: 4px 6px; text-align: center; }\n.plg-table th { color: #8a92a3; font-weight: 600; letter-spacing: 0.04em; border-bottom: 1px solid rgba(255, 255, 255, 0.08); }\n.plg-row-idx { color: #aab0bd; text-align: left; font-weight: 700; }\n.plg-cell-ok { color: #2dd66f; }\n.plg-cell-bad { color: #ff8a8a; background: rgba(255, 80, 80, 0.06); }\n.plg-row-bad { background: rgba(255, 80, 80, 0.04); }\n.plg-row-details td { text-align: left; padding-left: 24px; }\n.plg-err-list { color: #ff8a8a; }\n.plg-warn-list { color: #ffd66b; }\n.plg-song-issue { padding: 8px 0; border-top: 1px solid rgba(255, 255, 255, 0.05); }\n.plg-song-issue:first-of-type { border-top: 0; padding-top: 4px; }\n.plg-song-issue-head { font-weight: 700; font-size: 12px; margin: 0 0 4px; color: #f1f3f7; letter-spacing: 0.02em; }\n.plg-song-issue ul { margin: 0; padding-left: 18px; font-size: 13px; line-height: 1.5; }\n.plg-err-item { color: #ff8a8a; }\n.plg-warn-item { color: #ffd66b; }\n.plg-results-actions { margin-top: 0 !important; margin-bottom: 6px; }\n.plg-hint-inline { font-style: italic; }\n.plg-error {\n background: rgba(255, 80, 80, 0.12);\n border: 1px solid rgba(255, 80, 80, 0.4);\n color: #ff8a8a;\n border-radius: 10px;\n padding: 12px;\n font-family: var(--font-mono, ui-monospace, SFMono-Regular, Menlo, monospace);\n font-size: 12px;\n}\n.plg-footer {\n margin-top: 16px;\n border-top: 1px solid rgba(255, 255, 255, 0.06);\n padding-top: 10px;\n color: #8a92a3;\n font-size: 12px;\n line-height: 1.5;\n}\n.plg-followup:empty { display: none; }\n.plg-banner {\n margin-top: 12px;\n padding: 10px 12px;\n border-radius: 10px;\n font-size: 13px;\n line-height: 1.5;\n}\n.plg-banner p { margin: 0 0 8px; }\n.plg-banner .plg-row { margin-top: 4px; flex-wrap: wrap; }\n.plg-banner-ok {\n background: rgba(45, 214, 111, 0.14);\n border: 1px solid rgba(45, 214, 111, 0.4);\n color: #c8f3d8;\n}\n.plg-banner-info {\n background: rgba(99, 102, 241, 0.14);\n border: 1px solid rgba(99, 102, 241, 0.4);\n color: #d6d8ff;\n}\n\n/* ============================================\n Title & Artist reveal (#1180)\n ============================================ */\n/* Crowd Court layout (#1180): truth + own result collapse into a compact\n header so the community voting below becomes the hero of the screen. */\n.ta-reveal-truth {\n display: flex;\n flex-wrap: wrap;\n align-items: baseline;\n justify-content: center;\n gap: 8px;\n font-family: var(--font-display, inherit);\n font-size: var(--font-size-md, 1rem);\n margin-bottom: var(--space-sm, 8px);\n}\n.ta-truth-title { font-weight: 800; }\n.ta-truth-sep { opacity: 0.4; }\n.ta-truth-artist {\n color: var(--color-text-neon-muted, #b3b3c2);\n font-family: var(--font-body, inherit);\n font-weight: 600;\n}\n\n.ta-reveal-own {\n display: flex;\n flex-direction: column;\n gap: 6px;\n padding: 10px 12px;\n background: rgba(255, 255, 255, 0.03);\n border: 1px solid rgba(255, 255, 255, 0.07);\n border-radius: var(--radius-lg, 12px);\n}\n/* Emotional verdict banner above the own-result (#1180). */\n.ta-verdict {\n text-align: center;\n font-family: var(--font-display, inherit);\n font-weight: 900;\n font-size: var(--font-size-lg, 1.125rem);\n letter-spacing: 0.01em;\n padding: 8px 12px;\n margin-bottom: 4px;\n border-radius: var(--radius-md, 8px);\n}\n.ta-verdict--win {\n color: var(--color-success-neon, #39ff14);\n background: rgba(57, 255, 20, 0.14);\n box-shadow: inset 0 0 18px rgba(57, 255, 20, 0.12);\n text-shadow: 0 0 12px rgba(57, 255, 20, 0.5);\n}\n.ta-verdict--partial {\n color: var(--color-accent-secondary, #00f5ff);\n background: rgba(0, 245, 255, 0.1);\n}\n.ta-verdict--pending {\n color: var(--color-accent-secondary, #00f5ff);\n background: rgba(0, 245, 255, 0.07);\n font-weight: 700;\n font-style: italic;\n}\n.ta-verdict--miss {\n color: var(--color-text-neon-muted, #b3b3c2);\n background: rgba(255, 255, 255, 0.05);\n}\n.ta-own-row {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 10px;\n}\n.ta-own-label {\n color: var(--color-text-dim, #6b6b7a);\n font-size: var(--font-size-sm, 0.875rem);\n min-width: 6em;\n}\n.ta-own-guess {\n font-weight: 600;\n flex: 1 1 auto;\n word-break: break-word;\n}\n.ta-own-row--none {\n color: var(--color-text-neon-muted, #b3b3c2);\n font-style: italic;\n}\n.ta-pill {\n font-size: 0.72rem;\n font-weight: 700;\n padding: 2px 10px;\n border-radius: var(--radius-full, 999px);\n white-space: nowrap;\n letter-spacing: 0.02em;\n}\n.ta-pill--exact,\n.ta-pill--fuzzy,\n.ta-pill--near-miss-accepted {\n background: rgba(46, 229, 157, 0.16);\n color: #2ee59d;\n}\n.ta-pill--near-miss {\n background: rgba(255, 180, 0, 0.16);\n color: #ffb400;\n}\n.ta-pill--wrong {\n background: rgba(255, 0, 64, 0.14);\n color: var(--color-error-neon, #ff0040);\n}\n.ta-pill--skipped {\n background: rgba(255, 255, 255, 0.08);\n color: var(--color-text-secondary, #b9b9c6);\n}\n\n/* ---- Crowd Court community voting (#1180) ---- */\n.ta-voting {\n margin-top: var(--space-lg, 24px);\n}\n.ta-voting.hidden { display: none; }\n.ta-voting-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n margin-bottom: var(--space-md, 16px);\n}\n.ta-voting-header > span:not(.ta-voting-countdown) {\n font-family: var(--font-display, inherit);\n font-weight: 900;\n font-size: var(--font-size-sm, 0.875rem);\n letter-spacing: 0.1em;\n text-transform: uppercase;\n color: var(--color-text-white, #fff);\n}\n/* Countdown ring: hollow centre via a radial mask over a draining conic arc. */\n.ta-voting-countdown {\n flex-shrink: 0;\n width: 52px;\n height: 52px;\n border-radius: 50%;\n display: grid;\n place-items: center;\n font-weight: 800;\n font-size: 18px;\n font-variant-numeric: tabular-nums;\n color: var(--color-accent-secondary, #00f5ff);\n background:\n radial-gradient(circle at center, var(--color-bg-primary, #0a0a12) 56%, transparent 57%),\n conic-gradient(var(--color-accent-secondary, #00f5ff) var(--ta-vote-progress, 360deg), rgba(255, 255, 255, 0.1) 0);\n box-shadow: var(--glow-secondary, 0 0 20px rgba(0, 245, 255, 0.5));\n}\n.ta-voting-countdown--closed {\n width: auto;\n height: auto;\n border-radius: var(--radius-full, 999px);\n padding: 4px 12px;\n font-size: var(--font-size-sm, 0.875rem);\n font-weight: 700;\n color: var(--color-text-neon-muted, #b3b3c2);\n background: rgba(255, 255, 255, 0.08);\n box-shadow: none;\n}\n\n.ta-voting-cards {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n.ta-vote-card {\n background: var(--color-bg-surface, rgba(255, 255, 255, 0.05));\n border: 1px solid rgba(255, 255, 255, 0.08);\n border-radius: var(--radius-lg, 12px);\n padding: 14px;\n}\n.ta-vote-card--mine {\n border-color: rgba(255, 45, 106, 0.45);\n box-shadow: inset 0 0 16px rgba(255, 45, 106, 0.07);\n}\n.ta-vote-card-head {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-bottom: 10px;\n}\n.ta-vote-avatar {\n flex-shrink: 0;\n width: 30px;\n height: 30px;\n border-radius: 50%;\n display: grid;\n place-items: center;\n font-family: var(--font-display, inherit);\n font-weight: 800;\n font-size: 13px;\n color: #fff;\n background: linear-gradient(135deg, var(--color-accent-primary, #ff2d6a), var(--color-neon-purple, #9d4edd));\n}\n.ta-vote-who {\n flex: 1;\n font-weight: 700;\n font-size: var(--font-size-md, 1rem);\n word-break: break-word;\n}\n.ta-vote-field {\n flex-shrink: 0;\n font-size: var(--font-size-xs, 0.625rem);\n font-weight: 700;\n letter-spacing: 0.06em;\n text-transform: uppercase;\n color: var(--color-text-dim, #6b6b7a);\n background: rgba(255, 255, 255, 0.06);\n padding: 3px 8px;\n border-radius: var(--radius-full, 999px);\n}\n.ta-vote-guess {\n font-family: var(--font-display, inherit);\n font-weight: 800;\n font-size: var(--font-size-lg, 1.125rem);\n margin: 2px 0 12px;\n word-break: break-word;\n}\n.ta-vote-tally {\n display: flex;\n flex-direction: column;\n gap: 7px;\n margin-bottom: 12px;\n}\n.ta-tally-row {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: var(--font-size-sm, 0.875rem);\n font-weight: 700;\n font-variant-numeric: tabular-nums;\n}\n.ta-tally-yes { color: var(--color-success-neon, #39ff14); min-width: 48px; }\n.ta-tally-no { color: var(--color-error-neon, #ff0040); min-width: 48px; }\n.ta-tally-track {\n flex: 1;\n height: 8px;\n border-radius: var(--radius-full, 999px);\n background: rgba(255, 255, 255, 0.07);\n overflow: hidden;\n}\n.ta-tally-fill {\n display: block;\n height: 100%;\n border-radius: var(--radius-full, 999px);\n transition: width var(--transition-normal, 300ms) ease-out;\n}\n.ta-tally-fill--yes {\n background: var(--color-success-neon, #39ff14);\n box-shadow: 0 0 10px rgba(57, 255, 20, 0.5);\n}\n.ta-tally-fill--no {\n background: var(--color-error-neon, #ff0040);\n box-shadow: 0 0 10px rgba(255, 0, 64, 0.45);\n}\n.ta-vote-actions {\n display: flex;\n gap: 10px;\n}\n.ta-vote-btn {\n position: relative;\n flex: 1;\n height: 48px;\n border: 1px solid rgba(255, 255, 255, 0.12);\n border-radius: var(--radius-lg, 12px);\n background: rgba(255, 255, 255, 0.05);\n font-size: 20px;\n cursor: pointer;\n transition: transform var(--transition-fast, 150ms),\n box-shadow var(--transition-fast, 150ms),\n opacity var(--transition-fast, 150ms),\n background var(--transition-fast, 150ms);\n}\n.ta-vote-btn--yes {\n background: rgba(57, 255, 20, 0.12);\n border-color: rgba(57, 255, 20, 0.4);\n color: var(--color-success-neon, #39ff14);\n}\n.ta-vote-btn--no {\n background: rgba(255, 0, 64, 0.1);\n border-color: rgba(255, 0, 64, 0.38);\n color: var(--color-error-neon, #ff0040);\n}\n/* Voted state: chosen button lights up + \u2713, the other dims but stays\n tappable (the server lets a player change their vote). */\n.ta-vote-btn.is-chosen { transform: translateY(-1px); }\n.ta-vote-btn--yes.is-chosen {\n background: rgba(57, 255, 20, 0.22);\n border-color: rgba(57, 255, 20, 0.6);\n box-shadow: var(--glow-success, 0 0 20px rgba(57, 255, 20, 0.5));\n}\n.ta-vote-btn--no.is-chosen {\n background: rgba(255, 0, 64, 0.2);\n border-color: rgba(255, 0, 64, 0.55);\n box-shadow: var(--glow-error, 0 0 20px rgba(255, 0, 64, 0.5));\n}\n.ta-vote-actions--voted .ta-vote-btn { opacity: 0.34; }\n.ta-vote-actions--voted .ta-vote-btn.is-chosen { opacity: 1; }\n.ta-vote-actions--voted .ta-vote-btn.is-chosen::after {\n content: \"\u2713\";\n position: absolute;\n top: 3px;\n right: 8px;\n font-size: 12px;\n font-weight: 800;\n}\n.ta-vote-btn--yes.is-chosen::after { color: var(--color-success-neon, #39ff14); }\n.ta-vote-btn--no.is-chosen::after { color: var(--color-error-neon, #ff0040); }\n.ta-voted-caption {\n margin-top: 8px;\n text-align: center;\n font-size: var(--font-size-sm, 0.875rem);\n color: var(--color-text-neon-muted, #b3b3c2);\n}\n.ta-vote-own-note {\n text-align: center;\n font-size: var(--font-size-sm, 0.875rem);\n font-style: italic;\n color: var(--color-accent-primary, #ff2d6a);\n opacity: 0.85;\n}\n.ta-override-actions {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 10px;\n padding-top: 10px;\n border-top: 1px solid rgba(255, 255, 255, 0.07);\n}\n.ta-override-label {\n margin-right: auto;\n font-size: var(--font-size-xs, 0.625rem);\n color: var(--color-text-dim, #6b6b7a);\n}\n.ta-override-btn {\n padding: 6px 14px;\n border-radius: var(--radius-md, 8px);\n border: 1px solid rgba(255, 255, 255, 0.14);\n background: rgba(255, 255, 255, 0.05);\n color: var(--color-text-white, #fff);\n font-weight: 700;\n font-size: var(--font-size-sm, 0.875rem);\n cursor: pointer;\n}\n.ta-override-btn--accept.is-chosen {\n border-color: var(--color-success-neon, #39ff14);\n color: var(--color-success-neon, #39ff14);\n}\n.ta-override-btn--reject.is-chosen {\n border-color: var(--color-error-neon, #ff0040);\n color: var(--color-error-neon, #ff0040);\n}\n\n@media (prefers-reduced-motion: reduce) {\n .ta-tally-fill,\n .ta-vote-btn { transition: none; }\n}\n\n/* ---- Resolution moment: \"Close calls \u2014 decided\" (#1180, #1243) ----\n Outcome cards render inside #ta-voting-cards, which already lays out a\n gapped column, so no extra wrapper is needed. */\n.ta-outcome-card {\n display: flex;\n align-items: center;\n gap: 10px;\n background: var(--color-bg-surface, rgba(255, 255, 255, 0.05));\n border: 1px solid rgba(255, 255, 255, 0.08);\n border-radius: var(--radius-lg, 12px);\n padding: 11px 13px;\n}\n.ta-outcome-card--accepted { border-color: rgba(57, 255, 20, 0.3); }\n.ta-outcome-card--rejected { opacity: 0.72; }\n.ta-outcome-avatar {\n flex-shrink: 0;\n width: 28px;\n height: 28px;\n border-radius: 50%;\n display: grid;\n place-items: center;\n font-family: var(--font-display, inherit);\n font-weight: 800;\n font-size: 12px;\n color: #fff;\n background: linear-gradient(135deg, var(--color-accent-primary, #ff2d6a), var(--color-neon-purple, #9d4edd));\n}\n.ta-outcome-main { flex: 1; min-width: 0; }\n.ta-outcome-who {\n font-weight: 700;\n font-size: var(--font-size-base, 0.875rem);\n}\n.ta-outcome-field { color: var(--color-text-dim, #6b6b7a); font-weight: 600; }\n.ta-outcome-guess {\n font-size: var(--font-size-sm, 0.875rem);\n color: var(--color-text-neon-muted, #b3b3c2);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.ta-outcome-tally {\n font-size: var(--font-size-xs, 0.625rem);\n color: var(--color-text-dim, #6b6b7a);\n font-variant-numeric: tabular-nums;\n}\n.ta-outcome-verdict {\n flex-shrink: 0;\n display: inline-flex;\n align-items: center;\n font-family: var(--font-display, inherit);\n font-weight: 800;\n font-size: var(--font-size-base, 0.875rem);\n padding: 5px 11px;\n border-radius: var(--radius-full, 999px);\n font-variant-numeric: tabular-nums;\n}\n.ta-outcome-verdict--accepted {\n background: rgba(57, 255, 20, 0.16);\n color: var(--color-success-neon, #39ff14);\n}\n.ta-outcome-verdict--rejected {\n background: rgba(255, 0, 64, 0.12);\n color: var(--color-error-neon, #ff0040);\n}\n\n/* Title & Artist guessing inputs (#1180) \u2014 primary-round input card.\n Echoes the .arc-tiles bonus card but with the pink (primary) accent, and\n stacks each label above a full-width input so the two fields align cleanly. */\n.ta-input-section {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 12px 14px;\n margin: 0 var(--space-md) var(--space-md);\n background: linear-gradient(180deg, rgba(255, 45, 106, 0.06), rgba(255, 255, 255, 0.02));\n border: 1px solid rgba(255, 45, 106, 0.22);\n border-radius: var(--radius-lg);\n box-shadow: inset 0 0 12px rgba(255, 45, 106, 0.05);\n}\n.ta-input-section.hidden { display: none; }\n.ta-input-field {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n.ta-input-label {\n display: flex;\n align-items: center;\n gap: 6px;\n font-family: var(--font-display);\n font-weight: 700;\n font-size: 12px;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n color: var(--color-text-neon-muted);\n}\n.ta-input-points {\n margin-left: auto;\n flex-shrink: 0;\n background: rgba(57, 255, 20, 0.15);\n color: var(--color-success-neon);\n font-weight: 900;\n font-size: 11px;\n letter-spacing: 0.04em;\n padding: 2px 8px;\n border-radius: var(--radius-full);\n}\n.ta-text-input {\n width: 100%;\n box-sizing: border-box;\n padding: 12px 14px;\n background: rgba(255, 255, 255, 0.05);\n border: 2px solid rgba(255, 255, 255, 0.12);\n border-radius: var(--radius-lg);\n color: var(--color-text-white);\n font-family: var(--font-body);\n font-size: 16px;\n line-height: 1.3;\n transition: border-color var(--transition-fast), box-shadow var(--transition-fast);\n}\n.ta-text-input::placeholder { color: var(--color-text-neon-muted); opacity: 0.55; }\n.ta-text-input:focus {\n outline: none;\n border-color: var(--color-accent-primary);\n box-shadow: 0 0 0 3px rgba(255, 45, 106, 0.20);\n}\n.ta-input-ack {\n margin-top: 2px;\n text-align: center;\n font-family: var(--font-body);\n font-size: 12px;\n color: var(--color-success-neon);\n}\n.ta-input-ack.hidden { display: none; }\n\n/* ==========================================================================\n Spotlight Stage \u2014 player reveal skin\n --------------------------------------------------------------------------\n A frosted-glass reskin of the reveal view: the song's album art, blurred,\n acts as a \"stage\" behind the top of the screen; every panel floats on\n frosted glass; the duel is two facing tickets bridged by a delta pill.\n\n EVERYTHING here is scoped under #reveal-view on purpose. Several classes\n used on this screen (.card-section, .section-header, .info-btn, .chip,\n .leaderboard-list) are shared with the launcher, lobby, end and admin\n surfaces \u2014 scoping keeps those untouched. Source order + the #id give\n these rules the specificity to win over the base reveal styles above.\n ========================================================================== */\n\n/* Stage: own stacking context + clip the backdrop's blur bleed. */\n#reveal-view .reveal-container--duel {\n position: relative;\n overflow: hidden;\n isolation: isolate;\n}\n\n/* --- Album-art backdrop + scrim (scrolls with the content) --- */\n#reveal-view .reveal-backdrop {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n height: 340px;\n z-index: 0;\n background-size: cover;\n background-position: center;\n background-repeat: no-repeat;\n filter: blur(46px) saturate(1.15);\n transform: scale(1.15);\n transform-origin: top center;\n opacity: 0.5;\n pointer-events: none;\n /* Fade the art to nothing well before its box ends, so the blurred/scaled\n tail never reads as a hard bright band below the duel cards (the rc1\n #1462 regression mholzi flagged). The glow dissolves into the stage. */\n -webkit-mask-image: linear-gradient(to bottom, #000 0%, #000 28%, transparent 70%);\n mask-image: linear-gradient(to bottom, #000 0%, #000 28%, transparent 70%);\n}\n/* Synthetic fallback when album art is missing or its proxy URL has expired. */\n#reveal-view .reveal-backdrop--synthetic {\n background-image:\n radial-gradient(circle at 28% 22%, rgba(168, 32, 84, 0.95) 0%, rgba(168, 32, 84, 0) 42%),\n radial-gradient(circle at 78% 14%, rgba(96, 28, 150, 0.9) 0%, rgba(96, 28, 150, 0) 46%),\n radial-gradient(circle at 18% 82%, rgba(34, 40, 120, 0.9) 0%, rgba(34, 40, 120, 0) 50%),\n conic-gradient(from 210deg at 52% 48%,\n #1a1038 0deg, #4a1240 70deg, #7a1e3c 130deg,\n #2a1454 200deg, #131642 280deg, #1a1038 360deg);\n filter: blur(54px) saturate(1.25);\n}\n#reveal-view .reveal-scrim {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n height: 380px;\n z-index: 0;\n pointer-events: none;\n background: linear-gradient(180deg,\n rgba(10, 10, 18, 0.78) 0%,\n rgba(10, 10, 18, 0.88) 55%,\n var(--color-bg-primary) 100%);\n}\n/* One cyan spotlight from the upper centre. */\n#reveal-view .reveal-scrim::after {\n content: '';\n position: absolute;\n inset: 0;\n background: radial-gradient(ellipse 320px 360px at 50% 24%,\n rgba(0, 245, 255, 0.13) 0%, rgba(0, 245, 255, 0) 62%);\n}\n/* Lift every real child above the backdrop/scrim \u2014 but NOT the confetti\n canvas, which must keep its own `position: fixed` (full-screen overlay).\n Without this exclusion the canvas drops into normal flow and adds a tall\n empty gap between the duel and the score row. */\n#reveal-view .reveal-container--duel > *:not(.reveal-backdrop):not(.reveal-scrim):not(.confetti-canvas) {\n position: relative;\n z-index: 1;\n}\n@media (prefers-reduced-motion: no-preference) {\n #reveal-view .reveal-backdrop {\n transition: background-image 0.4s ease;\n }\n}\n\n/* --- Frosted-glass recipe for the floating panels --- */\n#reveal-view .song-strip,\n#reveal-view .score-row,\n#reveal-view .card-section,\n#reveal-view .duel-ticket {\n background: rgba(255, 255, 255, 0.06);\n border: 1px solid rgba(255, 255, 255, 0.12);\n -webkit-backdrop-filter: blur(20px);\n backdrop-filter: blur(20px);\n box-shadow: 0 10px 30px rgba(0, 0, 0, 0.35);\n border-radius: var(--radius-lg);\n}\n/* Keep the glass on hover (base .card-section:hover changes the background). */\n#reveal-view .card-section:hover {\n background: rgba(255, 255, 255, 0.08);\n border-color: rgba(255, 255, 255, 0.16);\n}\n\n/* --- Top chrome floats, no panel (already borderless; just sits on top) --- */\n#reveal-view .reveal-header-v2 {\n margin-bottom: var(--space-sm);\n}\n\n/* --- Song identity strip --- */\n#reveal-view .song-strip {\n padding: var(--space-sm) var(--space-md) var(--space-sm) var(--space-sm);\n}\n#reveal-view .song-strip-cover {\n box-shadow: 0 2px 10px rgba(0, 0, 0, 0.5);\n border: 1px solid rgba(255, 255, 255, 0.15);\n}\n\n/* --- Center stage: emotion headline + duel tickets --- */\n#reveal-view .duel-emotion {\n font-size: 30px;\n letter-spacing: 0.04em;\n margin-bottom: var(--space-sm);\n text-shadow: 0 4px 18px rgba(0, 0, 0, 0.6);\n}\n#reveal-view .duel {\n padding: var(--space-md) var(--space-xs) var(--space-lg);\n}\n#reveal-view .duel-tickets {\n position: relative;\n display: flex;\n justify-content: center;\n align-items: stretch;\n gap: var(--space-md);\n padding-bottom: 20px;\n}\n#reveal-view .duel-ticket {\n flex: 1 1 0;\n max-width: 170px;\n padding: var(--space-md) var(--space-sm) var(--space-lg);\n text-align: center;\n}\n#reveal-view .duel-ticket--you {\n transform: rotate(-3deg) translateY(4px);\n border-color: rgba(255, 45, 106, 0.35);\n box-shadow: 0 14px 34px rgba(0, 0, 0, 0.45), 0 0 24px rgba(255, 45, 106, 0.12);\n}\n#reveal-view .duel-ticket--truth {\n transform: rotate(3deg) translateY(4px);\n border-color: rgba(0, 245, 255, 0.4);\n box-shadow: 0 14px 34px rgba(0, 0, 0, 0.45), 0 0 34px rgba(0, 245, 255, 0.18);\n}\n#reveal-view .duel-ticket .duel-label {\n padding-bottom: var(--space-sm);\n margin: 0 6px var(--space-sm);\n border-bottom: 1.5px dashed rgba(255, 255, 255, 0.18);\n}\n#reveal-view .duel-ticket .duel-year {\n font-size: clamp(40px, 13vw, 54px);\n}\n#reveal-view .duel-ticket--you .duel-year.mine {\n color: var(--color-accent-primary);\n text-shadow: 0 0 18px rgba(255, 45, 106, 0.45);\n}\n#reveal-view .duel-ticket--truth .duel-year.correct {\n color: var(--color-accent-secondary);\n text-shadow: 0 0 14px rgba(0, 245, 255, 0.9), 0 0 38px rgba(0, 245, 255, 0.45);\n}\n/* The gap becomes a delta pill overlapping the tickets' base. */\n#reveal-view .duel-gap {\n position: absolute;\n left: 50%;\n bottom: 0;\n transform: translateX(-50%);\n flex-direction: row;\n align-items: baseline;\n gap: 5px;\n min-width: 0;\n padding: 6px 16px;\n border-radius: var(--radius-full);\n background: rgba(255, 102, 0, 0.16);\n border: 1px solid rgba(255, 102, 0, 0.55);\n -webkit-backdrop-filter: blur(20px);\n backdrop-filter: blur(20px);\n box-shadow: 0 6px 18px rgba(0, 0, 0, 0.5), 0 0 16px rgba(255, 102, 0, 0.2);\n white-space: nowrap;\n z-index: 3;\n}\n#reveal-view .duel-gap-x {\n font-size: var(--font-size-md);\n color: var(--color-warning-alt);\n opacity: 0.9;\n}\n#reveal-view .duel-gap-n {\n font-size: var(--font-size-lg);\n color: var(--color-warning-alt);\n text-shadow: none;\n}\n#reveal-view .duel-gap-unit {\n margin-top: 0;\n font-size: 10px;\n color: var(--color-warning-alt);\n}\n#reveal-view .duel-gap--exact {\n background: rgba(57, 255, 20, 0.16);\n border-color: rgba(57, 255, 20, 0.55);\n box-shadow: 0 6px 18px rgba(0, 0, 0, 0.5), 0 0 16px rgba(57, 255, 20, 0.22);\n}\n#reveal-view .duel-gap--exact .duel-gap-x,\n#reveal-view .duel-gap--exact .duel-gap-n,\n#reveal-view .duel-gap--exact .duel-gap-unit {\n color: var(--color-success-neon);\n}\n#reveal-view .duel-gap--wrong {\n background: rgba(255, 0, 64, 0.14);\n border-color: rgba(255, 0, 64, 0.5);\n box-shadow: 0 6px 18px rgba(0, 0, 0, 0.5), 0 0 16px rgba(255, 0, 64, 0.2);\n}\n#reveal-view .duel-gap--wrong .duel-gap-x,\n#reveal-view .duel-gap--wrong .duel-gap-n,\n#reveal-view .duel-gap--wrong .duel-gap-unit {\n color: var(--color-error-neon);\n}\n\n/* --- Score / points bar: green gain per DESIGN.md, glass surface --- */\n#reveal-view .score-row {\n border-color: rgba(255, 255, 255, 0.12);\n box-shadow: 0 10px 30px rgba(0, 0, 0, 0.35);\n}\n#reveal-view .score-row-pts {\n color: var(--color-success-neon);\n text-shadow: 0 0 16px rgba(57, 255, 20, 0.5);\n font-size: 32px;\n}\n\n/* --- Title & Artist vote cards float as glass chips --- */\n#reveal-view .ta-vote-card,\n#reveal-view .ta-outcome-card {\n background: rgba(255, 255, 255, 0.05);\n border: 1px solid rgba(255, 255, 255, 0.1);\n -webkit-backdrop-filter: blur(12px);\n backdrop-filter: blur(12px);\n}\n\n/* --- Footer: pink primary CTA, ghost-glass invite --- */\n#reveal-view .next-round-btn {\n background: linear-gradient(135deg, #ff2d6a 0%, #ff4f86 100%);\n border-radius: var(--radius-full);\n box-shadow: 0 8px 24px rgba(255, 45, 106, 0.45), 0 0 18px rgba(255, 45, 106, 0.3);\n}\n#reveal-view .next-round-btn:hover {\n background: linear-gradient(135deg, #ff4f86 0%, #ff2d6a 100%);\n}\n#reveal-view .next-round-btn.is-final {\n background: linear-gradient(135deg, #39ff14 0%, #00f5ff 100%);\n color: var(--color-bg-primary);\n}\n#reveal-view .invite-btn {\n background: rgba(255, 255, 255, 0.06);\n border: 1px solid rgba(255, 255, 255, 0.18);\n -webkit-backdrop-filter: blur(20px);\n backdrop-filter: blur(20px);\n border-radius: var(--radius-full);\n}\n/* Equalise the two footer buttons \u2014 same box metrics + equal width, so\n \"Spieler einladen\" and \"N\u00E4chste Runde\" match (only their colour differs). */\n#reveal-view .reveal-admin-buttons { align-items: stretch; }\n#reveal-view .reveal-admin-buttons .invite-btn,\n#reveal-view .reveal-admin-buttons .next-round-btn {\n flex: 1 1 0;\n min-width: 0;\n max-width: 260px;\n min-height: 56px;\n padding: 12px 20px;\n font-size: var(--font-size-md);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--space-sm);\n text-align: center;\n}\n\n/* ==========================================================================\n Reveal standings \u2014 \"Round-Delta Ledger\" (design-shotgun A)\n --------------------------------------------------------------------------\n Replaces the plain leaderboard list inside the reveal's Standings card with\n rows that fuse the overall standing (rank + movement + big total) with this\n round's outcome (guessed year, streak/steal/bet chips, +round delta). Own\n `rstand-` prefix + `#reveal-view` scope so the shared `.leaderboard-entry`\n styling (used by the in-game leaderboard + dashboard) is untouched.\n Rendered by renderRevealStandings() in player-reveal.js.\n ========================================================================== */\n#reveal-view #reveal-leaderboard-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n /* The reveal standings show every player (taper-dim lower ranks), so undo\n the shared .leaderboard-list scroll box (max-height:200px; overflow:auto)\n the in-game lazy leaderboard uses \u2014 otherwise rows 4+ get clipped. */\n max-height: none;\n overflow: visible;\n}\n#reveal-view .rstand-row {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 12px;\n border-radius: 12px;\n background: rgba(255, 255, 255, 0.03);\n border: 1px solid rgba(255, 255, 255, 0.06);\n}\n#reveal-view .rstand-row--you {\n border: 1px solid var(--color-accent-primary);\n background: rgba(255, 45, 106, 0.06);\n box-shadow: 0 0 16px rgba(255, 45, 106, 0.22);\n}\n/* Taper-dim lower ranks (matches the Arcade taper grammar). */\n#reveal-view .rstand-row--taper1 { opacity: 0.85; }\n#reveal-view .rstand-row--taper2 { opacity: 0.68; }\n\n#reveal-view .rstand-rankcell {\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 26px;\n flex-shrink: 0;\n}\n#reveal-view .rstand-rank {\n font-family: var(--font-display);\n font-weight: 800;\n font-size: 20px;\n line-height: 1;\n color: var(--color-text-white);\n}\n#reveal-view .rstand-row--taper1 .rstand-rank,\n#reveal-view .rstand-row--taper2 .rstand-rank { font-size: 18px; }\n#reveal-view .rstand-move {\n font-size: 10px;\n font-weight: 700;\n line-height: 1;\n margin-top: 3px;\n}\n#reveal-view .rstand-move--up { color: var(--color-success-neon); }\n#reveal-view .rstand-move--down { color: var(--color-error-neon); }\n#reveal-view .rstand-move--flat { color: var(--color-text-neon-muted); }\n\n#reveal-view .rstand-avatar {\n width: 34px;\n height: 34px;\n border-radius: 50%;\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n font-family: var(--font-display);\n font-weight: 800;\n font-size: 15px;\n color: var(--color-text-white);\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.35);\n border: 1px solid rgba(255, 255, 255, 0.15);\n}\n\n#reveal-view .rstand-ident { flex: 1; min-width: 0; }\n#reveal-view .rstand-name {\n font-family: var(--font-body);\n font-weight: 700;\n font-size: 15px;\n line-height: 1.1;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: flex;\n align-items: center;\n gap: 6px;\n color: var(--color-text-white);\n}\n#reveal-view .rstand-you {\n font-family: var(--font-display);\n font-weight: 800;\n font-size: 9px;\n letter-spacing: 0.06em;\n color: var(--color-accent-primary);\n background: rgba(255, 45, 106, 0.15);\n border: 1px solid rgba(255, 45, 106, 0.4);\n border-radius: 6px;\n padding: 2px 5px;\n line-height: 1;\n flex-shrink: 0;\n}\n#reveal-view .rstand-guess {\n font-size: 11px;\n font-weight: 500;\n color: var(--color-text-neon-muted);\n line-height: 1.2;\n margin-top: 3px;\n font-variant-numeric: tabular-nums;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n#reveal-view .rstand-guess .rstand-exact { color: var(--color-success-neon); font-weight: 600; }\n#reveal-view .rstand-chips {\n display: flex;\n flex-wrap: wrap;\n gap: 5px;\n margin-top: 5px;\n}\n#reveal-view .rstand-chip {\n font-size: 10px;\n font-weight: 600;\n color: var(--color-text-neon-muted);\n background: rgba(255, 255, 255, 0.05);\n border: 1px solid rgba(255, 255, 255, 0.08);\n border-radius: 999px;\n padding: 2px 7px;\n line-height: 1.4;\n white-space: nowrap;\n}\n#reveal-view .rstand-chip--fire { color: var(--color-warning-alt); border-color: rgba(255, 102, 0, 0.3); background: rgba(255, 102, 0, 0.08); }\n#reveal-view .rstand-chip--steal { color: var(--color-success-neon); border-color: rgba(57, 255, 20, 0.28); background: rgba(57, 255, 20, 0.07); }\n\n#reveal-view .rstand-score {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n flex-shrink: 0;\n margin-left: 4px;\n}\n#reveal-view .rstand-total {\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 22px;\n line-height: 1;\n color: var(--color-text-white);\n letter-spacing: -0.01em;\n}\n#reveal-view .rstand-row--taper1 .rstand-total { font-size: 20px; }\n#reveal-view .rstand-row--taper2 .rstand-total { font-size: 19px; }\n#reveal-view .rstand-delta {\n font-family: var(--font-body);\n font-weight: 700;\n font-size: 12px;\n line-height: 1;\n margin-top: 4px;\n color: var(--color-success-neon);\n}\n#reveal-view .rstand-delta--zero { color: var(--color-text-neon-muted); }\n\n/* ==========================================================================\n Reveal artist-result + fun-fact (design-shotgun B: inline artist chip +\n badges-first fun fact)\n --------------------------------------------------------------------------\n The artist-challenge result folds into the song-strip card as a slim inline\n row (no standalone card). The fun-fact card leads with the chart/cert/award\n badges as prominent tiles, then a trimmed (2-line) prose hook. Scoped under\n #reveal-view. renderArtistReveal still drives #artist-reveal-* element ids.\n ========================================================================== */\n/* Song strip becomes a column: main identity row + optional artist row. */\n#reveal-view .song-strip {\n flex-direction: column;\n align-items: stretch;\n gap: 0;\n padding: 0;\n overflow: hidden;\n}\n#reveal-view .song-strip-main {\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n padding: var(--space-sm) var(--space-md) var(--space-sm) var(--space-sm);\n}\n/* Inline artist-challenge result row (relocated #artist-reveal-section). */\n#reveal-view .artist-guess-row {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 9px var(--space-md) 9px var(--space-sm);\n border-top: 1px solid rgba(255, 255, 255, 0.08);\n}\n#reveal-view .artist-guess-row.hidden { display: none; }\n#reveal-view .artist-guess-ic { font-size: 14px; flex-shrink: 0; }\n#reveal-view .artist-guess-name {\n font-family: var(--font-body);\n font-weight: 700;\n font-size: 14px;\n color: var(--color-text-white);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n min-width: 0;\n}\n#reveal-view .artist-reveal-winner {\n margin-left: auto;\n flex-shrink: 0;\n font-family: var(--font-body);\n font-size: 11px;\n font-weight: 700;\n padding: 3px 10px;\n border-radius: var(--radius-full);\n white-space: nowrap;\n}\n#reveal-view .artist-reveal-winner.hidden { display: none; }\n#reveal-view .artist-reveal-winner.is-you,\n#reveal-view .artist-reveal-winner.is-other {\n color: var(--color-success-neon);\n background: rgba(57, 255, 20, 0.12);\n border: 1px solid rgba(57, 255, 20, 0.4);\n}\n#reveal-view .artist-reveal-winner.is-you {\n box-shadow: 0 0 12px rgba(57, 255, 20, 0.2);\n}\n#reveal-view .artist-reveal-winner.artist-reveal-no-winner {\n color: var(--color-text-neon-muted);\n background: rgba(255, 255, 255, 0.06);\n border: 1px solid rgba(255, 255, 255, 0.12);\n}\n\n/* Fun fact: badges as prominent tiles first, prose trimmed below. */\n#reveal-view #fun-fact-container .section-content-padded {\n display: flex;\n flex-direction: column;\n gap: 11px;\n}\n#reveal-view .song-rich-info .song-badges-row {\n display: flex;\n gap: 8px;\n}\n#reveal-view .song-rich-info .song-badge {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 4px;\n padding: 11px 6px;\n border-radius: 12px;\n background: rgba(255, 255, 255, 0.05);\n border: 1px solid rgba(255, 255, 255, 0.1);\n font-family: var(--font-body);\n font-size: 11px;\n font-weight: 700;\n line-height: 1.2;\n text-align: center;\n white-space: normal;\n}\n#reveal-view .song-rich-info .song-badge .song-badge-icon { font-size: 20px; }\n#reveal-view .song-rich-info .song-badges-more {\n flex: 0 0 auto;\n align-self: center;\n font-size: 11px;\n color: var(--color-text-neon-muted);\n}\n#reveal-view #fun-fact .fun-fact-text,\n#reveal-view .fun-fact-text {\n font-size: 12px;\n line-height: 1.4;\n color: var(--color-text-neon-muted);\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n\n/* ==========================================================================\n Smart Playlist Mixer \u2014 \"Mix\" tab (#1538, design option 1 \"chip-cloud\")\n Reuses the Beatify dark look (bg #0a0a12, pink #ff2d6a, cyan #00f5ff,\n indigo #6366f1). Tokens: --color-accent-primary/secondary/brand,\n --color-surface-dark, --color-border-neon, --color-text-neon-muted.\n ========================================================================== */\n\n/* Playlist / Mix tab strip (sits above the playlist panels). */\n.playlist-tabs {\n display: flex;\n gap: var(--space-lg);\n border-bottom: 1px solid var(--color-border-neon);\n margin-bottom: var(--space-md);\n}\n\n.playlist-tab {\n appearance: none;\n background: none;\n border: none;\n padding: 10px 2px;\n margin-bottom: -1px;\n font: inherit;\n font-weight: 700;\n font-size: 0.95rem;\n color: var(--color-text-neon-muted);\n cursor: pointer;\n border-bottom: 2px solid transparent;\n transition: color var(--transition-fast), border-color var(--transition-fast);\n}\n\n.playlist-tab:hover {\n color: var(--color-text-white);\n}\n\n.playlist-tab.active {\n color: var(--color-accent-secondary);\n border-bottom-color: var(--color-accent-secondary);\n}\n\n.playlist-panel.hidden {\n display: none;\n}\n\n/* Mix card */\n.mix-card {\n background: var(--color-surface-dark);\n border: 1px solid var(--color-border-neon);\n border-radius: var(--radius-lg);\n padding: var(--space-lg);\n}\n\n.mix-card-head {\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n}\n\n.mix-card-icon {\n font-size: 1.25rem;\n}\n\n.mix-card-title {\n margin: 0;\n font-size: 1.25rem;\n font-weight: 800;\n color: var(--color-text-white);\n}\n\n.mix-card-sub {\n margin: 6px 0 var(--space-lg);\n color: var(--color-text-neon-muted);\n font-size: 0.9rem;\n}\n\n/* Chip-cloud rows (Decade / Style / Region / Special) */\n.mix-chip-cloud {\n display: flex;\n flex-direction: column;\n gap: var(--space-md);\n}\n\n.mix-chip-row {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.mix-chip-rowlabel {\n font-size: 0.7rem;\n font-weight: 700;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n color: var(--color-text-neon-muted);\n}\n\n.mix-chip-group {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n}\n\n.mix-chip {\n appearance: none;\n padding: 6px 14px;\n border-radius: var(--radius-full);\n border: 1px solid var(--color-border-neon);\n background: rgba(255, 255, 255, 0.04);\n color: var(--color-text-neon-muted);\n font: inherit;\n font-size: 0.85rem;\n font-weight: 600;\n cursor: pointer;\n transition: all var(--transition-fast);\n}\n\n.mix-chip:hover {\n border-color: rgba(255, 255, 255, 0.3);\n color: var(--color-text-white);\n}\n\n/* Active accents per category, matching the option-1 mockup. */\n.mix-chip-group[data-accent=\"cyan\"] .mix-chip.active {\n background: rgba(0, 245, 255, 0.15);\n border-color: var(--color-accent-secondary);\n color: var(--color-accent-secondary);\n}\n\n.mix-chip-group[data-accent=\"pink\"] .mix-chip.active {\n background: rgba(255, 45, 106, 0.15);\n border-color: var(--color-accent-primary);\n color: var(--color-accent-primary);\n}\n\n.mix-chip-group[data-accent=\"indigo\"] .mix-chip.active {\n background: rgba(99, 102, 241, 0.18);\n border-color: var(--color-accent-brand);\n color: #a5b4fc;\n}\n\n.mix-empty {\n color: var(--color-text-neon-muted);\n font-size: 0.9rem;\n margin: 0;\n}\n\n.mix-divider {\n height: 1px;\n background: var(--color-border-neon);\n margin: var(--space-lg) 0;\n}\n\n/* Target-count segmented control (30 / 50 / 100) */\n.mix-count-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--space-md);\n flex-wrap: wrap;\n}\n\n.mix-count-label {\n font-size: 0.7rem;\n font-weight: 700;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n color: var(--color-text-neon-muted);\n}\n\n.mix-segmented {\n display: inline-flex;\n padding: 4px;\n gap: 4px;\n background: rgba(255, 255, 255, 0.05);\n border: 1px solid var(--color-border-neon);\n border-radius: 10px;\n}\n\n.mix-seg {\n appearance: none;\n min-width: 56px;\n padding: 8px 14px;\n border: none;\n border-radius: 7px;\n background: transparent;\n color: var(--color-text-neon-muted);\n font: inherit;\n font-weight: 700;\n cursor: pointer;\n transition: all var(--transition-fast);\n}\n\n.mix-seg:hover {\n color: var(--color-text-white);\n}\n\n.mix-seg.active {\n background: var(--color-accent-brand);\n color: var(--color-text-white);\n box-shadow: 0 0 14px rgba(99, 102, 241, 0.5);\n}\n\n/* Live preview line */\n.mix-preview {\n display: flex;\n align-items: center;\n gap: 10px;\n margin: var(--space-md) 0 var(--space-lg);\n padding: 12px 16px;\n border-radius: var(--radius-md);\n background: rgba(0, 245, 255, 0.06);\n border: 1px solid rgba(0, 245, 255, 0.15);\n color: var(--color-text-white);\n font-size: 0.9rem;\n}\n\n.mix-preview-dot {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: #1ed760;\n box-shadow: 0 0 8px rgba(30, 215, 96, 0.8);\n flex-shrink: 0;\n}\n\n/* Actions row */\n.mix-actions {\n display: flex;\n align-items: center;\n gap: var(--space-lg);\n flex-wrap: wrap;\n}\n\n.mix-actions .btn-primary:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n box-shadow: none;\n}\n\n.mix-save-label {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 0.9rem;\n color: var(--color-text-neon-muted);\n cursor: pointer;\n}\n\n#mix-error {\n margin-top: var(--space-md);\n}\n/* #2294: the server's own reason under the translated headline. Inline-block\n with display:block because #mix-error is a

and cannot hold a

. */\n.mix-error-detail {\n display: block;\n margin-top: var(--space-xs);\n font-size: var(--font-size-sm);\n line-height: 1.35;\n color: var(--color-text-light);\n word-break: break-word;\n}\n\n/* Tracklist preview (#1586) */\n.mix-tracklist-row {\n margin: var(--space-sm) 0;\n}\n\n.mix-tracklist-row .btn-sm {\n font-size: 0.85rem;\n padding: 6px 12px;\n}\n\n.mix-tracklist {\n margin: var(--space-sm) 0 var(--space-md);\n max-height: 280px;\n overflow-y: auto;\n border-radius: var(--radius-md);\n border: 1px solid rgba(0, 245, 255, 0.15);\n background: rgba(0, 245, 255, 0.04);\n}\n\n.mix-tracklist.hidden {\n display: none;\n}\n\n.mix-tracklist-head {\n margin: 0;\n padding: 10px 14px;\n font-size: 0.8rem;\n font-weight: 600;\n letter-spacing: 0.02em;\n text-transform: uppercase;\n color: var(--color-text-neon-muted);\n border-bottom: 1px solid rgba(0, 245, 255, 0.12);\n position: sticky;\n top: 0;\n background: rgba(10, 12, 24, 0.92);\n}\n\n.mix-tracklist-empty {\n margin: 0;\n padding: 14px;\n font-size: 0.9rem;\n color: var(--color-text-neon-muted);\n}\n\n.mix-track-list {\n list-style: none;\n margin: 0;\n padding: 4px 0;\n counter-reset: mix-track;\n}\n\n.mix-track {\n display: flex;\n align-items: baseline;\n gap: 8px;\n padding: 6px 14px;\n font-size: 0.88rem;\n color: var(--color-text-white);\n}\n\n.mix-track::before {\n counter-increment: mix-track;\n content: counter(mix-track);\n flex-shrink: 0;\n min-width: 1.8em;\n text-align: right;\n font-variant-numeric: tabular-nums;\n color: var(--color-text-neon-muted);\n opacity: 0.7;\n}\n\n.mix-track-title {\n font-weight: 500;\n}\n\n.mix-track-artist {\n color: var(--color-text-neon-muted);\n}\n\n.mix-track-artist::before {\n content: \"\u2014 \";\n}\n\n.mix-track-year {\n margin-left: auto;\n flex-shrink: 0;\n color: var(--color-text-neon-muted);\n font-variant-numeric: tabular-nums;\n opacity: 0.7;\n}\n\n/* ==========================================================================\n #1663 item 1 \u2014 Non-blocking notices (Toast + Inline Banner)\n Replaces the old blocking alert(). Neon top-toast for transient notices,\n inline panel-banner for setup/validation errors. Dark-neon tokens only.\n ========================================================================== */\n\n/* --- Neon Top-Toast (Variant A): top-center, auto-dismiss, glowing bar --- */\n.beatify-toast-container {\n position: fixed;\n top: var(--space-md);\n left: 50%;\n transform: translateX(-50%);\n z-index: var(--z-toast);\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--space-sm);\n width: min(92vw, 440px);\n pointer-events: none; /* let taps fall through the gaps; toasts re-enable */\n}\n\n.beatify-toast {\n pointer-events: auto;\n width: 100%;\n display: flex;\n align-items: flex-start;\n gap: var(--space-sm);\n position: relative;\n overflow: hidden;\n padding: var(--space-sm) var(--space-md);\n border-radius: var(--radius-lg);\n background: rgba(20, 20, 34, 0.96);\n border: 1px solid var(--color-error-neon);\n box-shadow: 0 0 20px rgba(255, 0, 64, 0.45), 0 8px 32px rgba(0, 0, 0, 0.45);\n color: var(--color-text-white);\n font-family: var(--font-body);\n font-size: var(--font-size-base);\n font-weight: var(--font-weight-medium);\n /* Enter/leave transition (gated under reduced-motion below). */\n opacity: 0;\n transform: translateY(-12px);\n transition: opacity var(--transition-normal), transform var(--transition-normal);\n}\n.beatify-toast--in { opacity: 1; transform: translateY(0); }\n.beatify-toast--leaving { opacity: 0; transform: translateY(-12px); }\n\n.beatify-toast--info {\n border-color: var(--color-accent-secondary);\n box-shadow: 0 0 20px rgba(0, 245, 255, 0.4), 0 8px 32px rgba(0, 0, 0, 0.45);\n}\n.beatify-toast--success {\n border-color: var(--color-success-neon);\n box-shadow: 0 0 20px rgba(57, 255, 20, 0.4), 0 8px 32px rgba(0, 0, 0, 0.45);\n}\n\n.beatify-toast-body {\n display: flex;\n align-items: flex-start;\n gap: var(--space-sm);\n flex: 1 1 auto;\n min-width: 0;\n}\n.beatify-toast-icon { font-size: var(--font-size-lg); line-height: 1.3; flex-shrink: 0; }\n.beatify-toast-text { line-height: 1.35; word-break: break-word; }\n\n.beatify-toast-close {\n flex-shrink: 0;\n background: none;\n border: none;\n color: var(--color-text-neon-muted);\n font-size: var(--font-size-xl);\n line-height: 1;\n cursor: pointer;\n padding: 0 var(--space-xs);\n transition: color var(--transition-fast);\n}\n.beatify-toast-close:hover { color: var(--color-text-white); }\n\n/* Glowing progress bar that drains over the auto-dismiss window. */\n.beatify-toast-progress {\n position: absolute;\n left: 0;\n bottom: 0;\n height: 3px;\n width: 100%;\n transform-origin: left center;\n background: var(--color-error-neon);\n box-shadow: 0 0 8px var(--color-error-neon);\n animation: beatify-toast-drain linear forwards;\n}\n.beatify-toast--info .beatify-toast-progress {\n background: var(--color-accent-secondary);\n box-shadow: 0 0 8px var(--color-accent-secondary);\n}\n.beatify-toast--success .beatify-toast-progress {\n background: var(--color-success-neon);\n box-shadow: 0 0 8px var(--color-success-neon);\n}\n@keyframes beatify-toast-drain {\n from { transform: scaleX(1); }\n to { transform: scaleX(0); }\n}\n\n/* --- Inline Panel-Banner (Variant C): docked above the primary action --- */\n.beatify-banner {\n display: flex;\n align-items: flex-start;\n gap: var(--space-sm);\n margin-bottom: var(--space-md);\n padding: var(--space-sm) var(--space-md);\n border-radius: var(--radius-lg);\n background: rgba(255, 0, 64, 0.08);\n border: 1px solid var(--color-error-neon);\n box-shadow: inset 0 0 16px rgba(255, 0, 64, 0.12);\n color: var(--color-text-white);\n font-family: var(--font-body);\n font-size: var(--font-size-base);\n text-align: left;\n}\n.beatify-banner--warning {\n background: rgba(245, 158, 11, 0.1);\n border-color: var(--color-warning);\n box-shadow: inset 0 0 16px rgba(245, 158, 11, 0.12);\n}\n.beatify-banner--info {\n background: rgba(0, 245, 255, 0.08);\n border-color: var(--color-accent-secondary);\n box-shadow: inset 0 0 16px rgba(0, 245, 255, 0.12);\n}\n.beatify-banner-icon { font-size: var(--font-size-lg); line-height: 1.2; flex-shrink: 0; }\n.beatify-banner-content { flex: 1 1 auto; min-width: 0; }\n.beatify-banner-title {\n font-family: var(--font-display);\n font-weight: var(--font-weight-bold);\n margin-bottom: 2px;\n color: var(--color-error-neon);\n}\n.beatify-banner--warning .beatify-banner-title { color: var(--color-warning); }\n.beatify-banner--info .beatify-banner-title { color: var(--color-accent-secondary); }\n.beatify-banner-text { line-height: 1.4; color: var(--color-text-neon-muted); word-break: break-word; }\n/* #2294: the server's own reason, under the translated headline. Dimmer and\n smaller so it reads as a detail rather than a competing message. */\n.beatify-banner-detail {\n margin-top: var(--space-xs);\n font-size: var(--font-size-sm);\n line-height: 1.35;\n color: var(--color-text-light);\n word-break: break-word;\n}\n.beatify-banner-action {\n margin-top: var(--space-xs);\n background: none;\n border: 1px solid currentColor;\n border-radius: var(--radius-sm);\n color: var(--color-error-neon);\n font-family: var(--font-body);\n font-size: var(--font-size-sm);\n line-height: 1.2;\n padding: 6px var(--space-sm);\n cursor: pointer;\n transition: background var(--transition-fast), color var(--transition-fast);\n}\n.beatify-banner-action:hover { background: var(--color-error-neon); color: var(--color-bg-primary); }\n.beatify-banner--warning .beatify-banner-action { color: var(--color-warning); }\n.beatify-banner--warning .beatify-banner-action:hover { background: var(--color-warning); }\n.beatify-banner--info .beatify-banner-action { color: var(--color-accent-secondary); }\n.beatify-banner--info .beatify-banner-action:hover { background: var(--color-accent-secondary); }\n.beatify-banner-close {\n flex-shrink: 0;\n background: none;\n border: none;\n color: var(--color-text-neon-muted);\n font-size: var(--font-size-xl);\n line-height: 1;\n cursor: pointer;\n padding: 0 var(--space-xs);\n transition: color var(--transition-fast);\n}\n.beatify-banner-close:hover { color: var(--color-text-white); }\n\n@media (prefers-reduced-motion: reduce) {\n .beatify-toast { transition: none; opacity: 1; transform: none; }\n .beatify-toast-progress { animation: none; }\n}\n\n/* ==========================================================================\n #1663 item 2 \u2014 Steal modal Mini-Leaderboard-Row (Variant B)\n Each steal target becomes a rank + name + score row; the overall leader\n (rank 1) gets a crown + glow. Extends the existing .steal-target-btn.\n ========================================================================== */\n.steal-target-row {\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n text-align: left;\n}\n.steal-target-rank {\n flex-shrink: 0;\n width: 24px;\n height: 24px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border-radius: var(--radius-full);\n background: var(--color-dark-surface);\n border: 1px solid var(--color-border-neon);\n font-family: var(--font-display);\n font-weight: var(--font-weight-bold);\n font-size: var(--font-size-sm);\n color: var(--color-text-neon-muted);\n}\n.steal-target-name {\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-weight: var(--font-weight-semibold);\n}\n.steal-target-score {\n flex-shrink: 0;\n font-family: var(--font-display);\n font-weight: var(--font-weight-bold);\n font-variant-numeric: tabular-nums;\n color: var(--color-accent-secondary);\n text-shadow: 0 0 8px rgba(0, 245, 255, 0.5);\n}\n.steal-target-crown { flex-shrink: 0; font-size: var(--font-size-md); line-height: 1; }\n.steal-target-row--leader {\n border-color: var(--color-warning);\n box-shadow: 0 0 14px rgba(245, 158, 11, 0.35), inset 0 0 10px rgba(245, 158, 11, 0.12);\n}\n.steal-target-row--leader .steal-target-rank {\n border-color: var(--color-warning);\n color: var(--color-warning);\n box-shadow: 0 0 8px rgba(245, 158, 11, 0.4);\n}\n.steal-target-row--leader .steal-target-score {\n color: var(--color-warning);\n text-shadow: 0 0 8px rgba(245, 158, 11, 0.5);\n}\n\n/* ==========================================================================\n #1663 item 3 \u2014 A11y: Icon+Text accuracy chips on the reveal dot-axis legend\n Glyph + word per state (\u25CE exact / \u2248 near / \u2715 off); colour is reinforcement.\n ========================================================================== */\n.dotaxis-legend-acc {\n display: inline-flex;\n align-items: center;\n gap: 3px;\n margin-left: 4px;\n padding: 1px 6px;\n border-radius: var(--radius-full);\n font-size: var(--font-size-xs);\n font-weight: var(--font-weight-semibold);\n border: 1px solid currentColor;\n white-space: nowrap;\n}\n.dotaxis-legend-acc-glyph { font-size: 0.95em; line-height: 1; }\n.dotaxis-legend-acc--exact { color: var(--color-accent-secondary); }\n.dotaxis-legend-acc--near { color: var(--color-warning); }\n.dotaxis-legend-acc--off { color: var(--color-text-neon-muted); }\n\n/* Lobby away chip: glyph + word (A11y \u2014 not colour/border alone). */\n.player-tile-away { display: inline-flex; align-items: center; gap: 3px; }\n.player-tile-away-glyph { font-size: 0.9em; line-height: 1; }\n\n/* ==========================================================================\n #1663 item 4 \u2014 Depleting Ring-Countdown (Variant C)\n SVG ring inside the arcade neon timer that drains cyan\u2192red as time runs out,\n mirroring the reveal auto-advance ring. Additive to the existing frame; the\n number's warning/critical classes (arc-urgency) are untouched.\n ========================================================================== */\n.timer-neon { position: relative; }\n.timer-neon-ring {\n position: absolute;\n inset: 3px; /* sit just inside the neon frame */\n width: calc(100% - 6px);\n height: calc(100% - 6px);\n transform: rotate(-90deg); /* start the drain from 12 o'clock */\n pointer-events: none;\n}\n.timer-neon-ring-bg {\n fill: none;\n stroke: rgba(255, 255, 255, 0.12);\n stroke-width: 4;\n}\n.timer-neon-ring-fg {\n fill: none;\n stroke: var(--color-accent-secondary);\n stroke-width: 4;\n stroke-linecap: round;\n filter: drop-shadow(0 0 6px rgba(0, 245, 255, 0.6));\n transition: stroke-dashoffset 1s linear, stroke var(--transition-normal);\n}\n.timer-neon--warn .timer-neon-ring-fg,\n.timer-neon-ring--warn .timer-neon-ring-fg {\n stroke: var(--color-warning);\n filter: drop-shadow(0 0 6px rgba(245, 158, 11, 0.7));\n}\n.timer-neon-ring--critical .timer-neon-ring-fg {\n stroke: var(--color-error-neon);\n filter: drop-shadow(0 0 7px rgba(255, 0, 64, 0.8));\n}\n@media (prefers-reduced-motion: reduce) {\n /* Opt-out: keep the numeric+colour cue, drop the animated drain. */\n .timer-neon-ring-fg { transition: none; }\n/* =====================================================================\n Sudden Death mode (Issue #827)\n ===================================================================== */\n\n/* --- Admin reveal: elimination + final arc chips --- */\n.arc-chip--elim {\n color: var(--color-error-neon);\n background: rgba(255, 0, 64, 0.12);\n border: 1px solid rgba(255, 0, 64, 0.5);\n text-transform: uppercase;\n}\n\n/* --- Admin control-bar live toggle (S7-A) --- */\n.sd-live-toggle {\n display: inline-flex;\n align-items: center;\n gap: 7px;\n padding: 5px 10px;\n border-radius: var(--radius-md);\n background: var(--color-bg-surface);\n border: 1px solid rgba(255, 255, 255, 0.12);\n font-family: var(--font-body);\n font-size: 12px;\n font-weight: 600;\n color: var(--color-text-white);\n cursor: pointer;\n transition: border-color var(--transition-fast), box-shadow var(--transition-fast);\n}\n.sd-live-toggle:disabled { opacity: 0.4; cursor: not-allowed; }\n.sd-live-toggle.is-on {\n border-color: var(--color-accent-primary);\n background: rgba(255, 45, 106, 0.08);\n box-shadow: var(--glow-primary);\n}\n.sd-live-toggle__switch {\n position: relative;\n width: 30px; height: 17px;\n border-radius: var(--radius-full);\n background: rgba(255, 255, 255, 0.15);\n flex: none;\n}\n.sd-live-toggle.is-on .sd-live-toggle__switch {\n background: var(--color-accent-primary);\n}\n.sd-live-toggle__switch::after {\n content: \"\"; position: absolute;\n width: 13px; height: 13px; border-radius: 50%;\n background: #fff; top: 2px; left: 2px;\n transition: left var(--transition-fast);\n}\n.sd-live-toggle.is-on .sd-live-toggle__switch::after { left: 15px; }\n\n/* --- Player eliminated view (S2-A Stark Blackout) --- */\n.eliminated-view {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n gap: var(--space-sm);\n min-height: 60vh;\n padding: var(--space-xl) var(--space-md);\n}\n.eliminated-orb {\n width: 120px; height: 120px;\n border-radius: var(--radius-full);\n overflow: hidden;\n filter: grayscale(1) brightness(0.5);\n display: flex; align-items: center; justify-content: center;\n background: linear-gradient(135deg, #2a2540, #16131f);\n margin-bottom: var(--space-md);\n position: relative;\n}\n.eliminated-orb img { width: 100%; height: 100%; object-fit: cover; }\n.eliminated-skull { font-size: 46px; position: absolute; }\n.eliminated-title {\n font-family: var(--font-display);\n font-weight: 900;\n font-size: var(--font-size-4xl);\n color: var(--color-text-white);\n letter-spacing: -0.02em;\n}\n.eliminated-sub { color: var(--color-text-neon-muted); font-size: var(--font-size-base); }\n.eliminated-hint { color: var(--color-text-dim); font-size: var(--font-size-sm); margin-top: var(--space-md); }\n\n/* --- Player leaderboard cut line (S3-A) --- */\n.cut-line {\n position: relative;\n height: 0;\n border-top: 2px solid var(--color-accent-primary);\n box-shadow: 0 0 12px rgba(255, 45, 106, 0.7);\n margin: var(--space-md) 0;\n}\n.cut-line__label {\n position: absolute;\n top: -9px; left: 50%;\n transform: translateX(-50%);\n background: var(--color-bg-primary);\n padding: 0 10px;\n font-family: var(--font-body);\n font-size: 9px;\n font-weight: 700;\n letter-spacing: 0.15em;\n color: var(--color-accent-primary);\n}\n.player-indicator.is-eliminated,\n.leaderboard-entry.is-eliminated { opacity: 0.45; }\n.player-out-badge {\n font-size: 10px;\n font-weight: 700;\n color: var(--color-text-dim);\n letter-spacing: 0.04em;\n}\n\n/* --- Spectator TV: full-bleed \"OUT\" takeover (S4-C) --- */\n.sd-out-overlay {\n position: fixed;\n inset: 0;\n z-index: 900;\n display: none;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n background: rgba(6, 6, 12, 0.96);\n}\n.sd-out-overlay.show { display: flex; animation: sd-out-in var(--transition-slow) ease-out; }\n.sd-out__word {\n font-family: var(--font-display);\n font-weight: 900;\n font-size: clamp(120px, 26vw, 360px);\n line-height: 0.85;\n color: var(--color-error-neon);\n text-shadow: 0 0 40px rgba(255, 0, 64, 0.7);\n}\n.sd-out__name {\n display: flex; align-items: center; gap: 14px;\n margin-top: var(--space-md);\n font-family: var(--font-display);\n font-weight: 900;\n font-size: var(--font-size-4xl);\n color: var(--color-text-white);\n}\n.sd-out__skull { font-size: 40px; }\n@keyframes sd-out-in {\n from { opacity: 0; transform: scale(0.85); }\n to { opacity: 1; transform: scale(1); }\n}\n\n/* --- Spectator TV: FINAL banner (S5-C arena) --- */\n.sd-final-banner {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 8px 18px;\n border-radius: var(--radius-full);\n font-family: var(--font-display);\n font-weight: 900;\n letter-spacing: 0.06em;\n color: var(--color-accent-primary);\n background: rgba(255, 45, 106, 0.12);\n border: 1px solid rgba(255, 45, 106, 0.5);\n box-shadow: 0 0 16px rgba(255, 45, 106, 0.3);\n}\n\n/* --- END: Last One Standing superlative + trophy hero (S6-C) --- */\n.superlative-card--last_one_standing {\n box-shadow: 0 0 18px rgba(255, 45, 106, 0.3);\n border-color: rgba(255, 45, 106, 0.4);\n}\n.sd-last-standing {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--space-sm);\n text-align: center;\n margin-bottom: var(--space-lg);\n}\n.sd-last-standing__trophy { font-size: 40px; }\n.sd-last-standing__headline {\n font-family: var(--font-display);\n font-weight: 900;\n font-size: var(--font-size-hero);\n letter-spacing: -0.02em;\n background: linear-gradient(90deg, var(--color-accent-primary), var(--color-accent-secondary));\n -webkit-background-clip: text;\n background-clip: text;\n -webkit-text-fill-color: transparent;\n text-shadow: 0 0 40px rgba(255, 45, 106, 0.5);\n}\n.sd-last-standing__winner {\n font-family: var(--font-body);\n font-weight: 700;\n font-size: var(--font-size-xl);\n color: var(--color-text-white);\n}\n/* #2105: the line that explains a points win \u2014 deliberately quiet, it is\n context for the name above it, not a second headline. */\n.sd-last-standing__sub {\n font-family: var(--font-body);\n font-weight: 500;\n font-size: var(--font-size-sm);\n color: var(--color-text-neon-muted);\n}\n\n@media (prefers-reduced-motion: reduce) {\n .sd-out-overlay.show { animation: none; }\n}\n"], - "mappings": "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", + "sourcesContent": ["/* Beatify - Mobile-first styles */\n\n/* ==========================================\n Design System Tokens (Story 9.1)\n ========================================== */\n\n:root {\n /* Color Tokens - Background */\n --color-bg-primary: #0a0a12;\n --color-bg-surface: rgba(255, 255, 255, 0.05);\n --color-bg-light: #f5f5f5;\n --color-bg-white: #ffffff;\n --color-bg-card: #f9fafb;\n --color-bg-card-alt: #f3f4f6;\n\n /* Color Tokens - Accent */\n --color-accent-primary: #ff2d6a;\n --color-accent-secondary: #00f5ff;\n --color-accent-brand: #6366f1;\n --color-accent-brand-hover: #4f46e5;\n --color-accent-blue: #3b82f6;\n --color-accent-blue-hover: #2563eb;\n\n /* Color Tokens - Semantic */\n --color-success: #10b981;\n --color-success-hover: #059669;\n --color-success-light: #d1fae5;\n --color-success-alt: #22c55e;\n --color-success-neon: #39ff14;\n --color-warning: #f59e0b;\n --color-warning-dark: #d97706;\n --color-warning-light: #fef3c7;\n --color-warning-alt: #ff6600;\n --color-error: #ef4444;\n --color-error-dark: #dc2626;\n --color-error-light: #fee2e2;\n --color-error-neon: #ff0040;\n\n /* Purple colors for steal power-up (Story 15.3) */\n --color-purple-primary: #8b5cf6;\n --color-purple-secondary: #7c3aed;\n --color-neon-purple: #9d4edd; /* Analytics accent color */\n\n /* Color Tokens - Badge Backgrounds (Story 14.1) */\n --color-success-bg: rgba(16, 185, 129, 0.15);\n --color-accent-brand-bg: rgba(99, 102, 241, 0.15);\n --color-error-bg: rgba(239, 68, 68, 0.15);\n\n /* Color Tokens - Text */\n --color-text-primary: #1f2937;\n --color-text-secondary: #374151;\n --color-text-muted: #6b7280;\n --color-text-light: #9ca3af;\n --color-text-white: #ffffff;\n --color-text-dark: #1a1a1a;\n --color-text-heading: #444444;\n --color-text-neon-muted: #b3b3c2;\n\n /* Color Tokens - Border */\n --color-border-light: #e5e7eb;\n --color-border-medium: #d1d5db;\n --color-border-dark: #333333;\n --color-border-neon: rgba(255, 255, 255, 0.1);\n\n /* Dark Theme Surface Colors */\n --color-dark-surface: rgba(255, 255, 255, 0.05);\n --color-dark-surface-hover: rgba(255, 255, 255, 0.08);\n --color-dark-card: rgba(255, 255, 255, 0.03);\n --color-surface-dark: #1a1a2e; /* Card background in dark mode */\n\n /* Spacing Tokens */\n --space-xs: 4px;\n --space-sm: 8px;\n --space-md: 16px;\n --space-lg: 24px;\n --space-xl: 32px;\n --space-2xl: 48px;\n\n /* Typography Tokens */\n --font-display: 'Outfit', system-ui, sans-serif;\n --font-body: 'Inter', system-ui, sans-serif;\n --font-system: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif;\n --font-mono: monospace;\n\n --font-size-xs: 10px;\n --font-size-sm: 12px;\n --font-size-base: 14px;\n --font-size-md: 16px;\n --font-size-lg: 18px;\n --font-size-xl: 20px;\n --font-size-2xl: 24px;\n --font-size-3xl: 28px;\n --font-size-4xl: 32px;\n --font-size-year: 56px;\n --font-size-timer: 64px;\n --font-size-hero: 72px;\n\n --font-weight-normal: 400;\n --font-weight-medium: 500;\n --font-weight-semibold: 600;\n --font-weight-bold: 700;\n --font-weight-extrabold: 800;\n\n /* Effect Tokens - Glow */\n --glow-primary: 0 0 20px var(--color-accent-primary);\n --glow-secondary: 0 0 20px var(--color-accent-secondary);\n --glow-success: 0 0 20px var(--color-success-neon);\n --glow-warning: 0 0 20px var(--color-warning);\n --glow-error: 0 0 20px var(--color-error);\n\n /* Effect Tokens - Shadow */\n --shadow-sm: 0 2px 4px rgba(0, 0, 0, 0.1);\n --shadow-md: 0 2px 8px rgba(0, 0, 0, 0.1);\n --shadow-lg: 0 4px 16px rgba(0, 0, 0, 0.1);\n --shadow-xl: 0 8px 32px rgba(0, 0, 0, 0.15);\n\n /* Border Radius Tokens */\n --radius-sm: 4px;\n --radius-md: 8px;\n --radius-lg: 12px;\n --radius-xl: 16px;\n --radius-2xl: 20px;\n --radius-full: 9999px;\n\n /* Transition Tokens */\n --transition-fast: 150ms ease;\n --transition-normal: 300ms ease;\n --transition-slow: 500ms ease;\n\n /* Z-Index Tokens */\n --z-control-bar: 100;\n --z-reaction-bar: 101; /* Story 18.9: Above control bar */\n --z-modal: 1000;\n --z-overlay: 1100;\n --z-toast: 1200; /* #1663 item 1: neon top-toast \u2014 above overlays/modals */\n}\n\n/* ==========================================\n Base Styles\n ========================================== */\n\n/* Base reset */\n* {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n}\n\nbody {\n font-family: var(--font-system);\n background: var(--color-bg-light);\n color: var(--color-text-secondary);\n line-height: 1.5;\n padding: var(--space-sm);\n min-height: 100vh;\n /* #865: lock iOS overscroll-bounce so the admin lobby (and any other\n short view) doesn't drag freely in all directions when the user\n touches the background. */\n overscroll-behavior: none;\n}\n\n/* ==========================================\n Brand Identity (Story 9.8)\n ========================================== */\n\n/* Wordmark styles */\n.wordmark {\n font-family: 'Outfit', var(--font-system);\n font-weight: 900;\n font-size: var(--font-size-hero);\n letter-spacing: -0.02em;\n line-height: 1;\n}\n\n.wordmark-beat {\n color: var(--color-text-white);\n}\n\n/* Light theme wordmark (admin page) */\nbody:not(.theme-dark) .wordmark-beat {\n color: var(--color-text-primary);\n}\n\n.wordmark-gradient {\n background: linear-gradient(90deg, var(--color-accent-primary), var(--color-accent-secondary));\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n background-clip: text;\n color: transparent;\n}\n\n.wordmark-hero {\n text-shadow: 0 0 40px rgba(255, 45, 106, 0.5);\n}\n\n/* Logo pulse animation for loading state */\n.logo-loading {\n animation: logo-pulse 2s ease-in-out infinite;\n}\n\n@keyframes logo-pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.7; }\n}\n\n/* Reduced motion support for logo */\n@media (prefers-reduced-motion: reduce) {\n .logo-loading {\n animation: none;\n }\n}\n\n/* ============================================================\n Cold-start vinyl loader (#1287)\n Animated vinyl disc + hype copy bridging the ~10-15s\n Music-Assistant speaker-connect before round 1. Shared by\n player.html (#starting-view) and dashboard.html\n (#dashboard-starting).\n ============================================================ */\n/* Outer: full-height column box that centers its single inner row both axes.\n Mirrors the proven .dashboard-centered pattern (no explicit width \u2192 stretches\n via the parent's align-items:stretch) so the group is always viewport-centered\n on the TV/dashboard and the phone. */\n.vinyl-starting {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n padding: 24px;\n box-sizing: border-box;\n}\n\n/* Inner: the disc-beside-copy row. Caps its own width and centers itself; wraps\n to stacked (disc over copy) on narrow phones. */\n.vinyl-row {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-wrap: wrap;\n gap: clamp(20px, 5vw, 56px);\n max-width: 100%;\n}\n\n.vinyl-loader {\n flex: 0 0 auto;\n width: clamp(130px, 28vw, 260px);\n height: clamp(130px, 28vw, 260px);\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 50%;\n /* Soft pink/cyan glow halo behind the disc */\n background: radial-gradient(circle at center,\n rgba(255, 45, 106, 0.18) 0%,\n rgba(99, 102, 241, 0.10) 45%,\n transparent 70%);\n}\n\n.vinyl-disc {\n position: relative;\n width: 78%;\n height: 78%;\n border-radius: 50%;\n /* Conic gradient = the spinning record */\n background: conic-gradient(from 0deg,\n var(--color-accent-primary),\n var(--color-accent-brand),\n var(--color-accent-secondary),\n var(--color-accent-brand),\n var(--color-accent-primary));\n box-shadow:\n 0 0 40px rgba(255, 45, 106, 0.35),\n 0 0 80px rgba(0, 245, 255, 0.18),\n inset 0 0 30px rgba(0, 0, 0, 0.45);\n animation: vinyl-spin 3s linear infinite;\n}\n\n.vinyl-ring {\n position: absolute;\n top: 18%;\n left: 18%;\n width: 64%;\n height: 64%;\n border-radius: 50%;\n border: 1.5px dashed rgba(255, 255, 255, 0.25);\n}\n\n.vinyl-hole {\n position: absolute;\n top: 50%;\n left: 50%;\n width: 14%;\n height: 14%;\n border-radius: 50%;\n background: var(--color-bg-primary);\n transform: translate(-50%, -50%);\n box-shadow: 0 0 0 4px rgba(0, 0, 0, 0.4);\n}\n\n.vinyl-copy {\n /* min-width:0 + width:min(100%,460px) keeps the copy inside its flex line\n on every surface: beside the disc on landscape (TV/dashboard) and on its\n own line when wrapped on a narrow phone \u2014 the text re-wraps, it never\n overflows the viewport. */\n flex: 1 1 280px;\n min-width: 0;\n width: min(100%, 460px);\n max-width: 460px;\n text-align: left;\n}\n\n.vinyl-copy .vinyl-headline,\n.vinyl-copy .vinyl-sub,\n.vinyl-copy .wordmark-hero {\n overflow-wrap: break-word;\n}\n\n.vinyl-copy .wordmark-hero {\n font-size: clamp(2rem, 5vw, 3.25rem);\n margin: 0 0 0.5em;\n}\n\n.vinyl-headline {\n font-size: clamp(1.5rem, 4vw, 2.5rem);\n font-weight: 800;\n color: var(--color-text-white);\n margin: 0 0 0.4em;\n}\n\n.vinyl-sub {\n font-size: clamp(0.95rem, 2.2vw, 1.2rem);\n line-height: 1.5;\n color: var(--color-text-muted);\n margin: 0 0 1.2em;\n}\n\n.vinyl-dots {\n display: flex;\n gap: 12px;\n}\n\n.vinyl-dots span {\n width: 12px;\n height: 12px;\n border-radius: 50%;\n background: var(--color-accent-primary);\n opacity: 0.3;\n animation: vinyl-dot-pulse 1.4s ease-in-out infinite;\n}\n\n.vinyl-dots span:nth-child(2) {\n animation-delay: 0.2s;\n}\n\n.vinyl-dots span:nth-child(3) {\n animation-delay: 0.4s;\n}\n\n@keyframes vinyl-spin {\n to { transform: rotate(360deg); }\n}\n\n@keyframes vinyl-dot-pulse {\n 0%, 100% { opacity: 0.3; transform: scale(1); }\n 40% { opacity: 1; transform: scale(1.25); }\n}\n\n/* Narrow / portrait (phone player): the row wraps to stacked, so center the\n copy under the disc and center the pulse dots \u2014 left-alignment only reads well\n in the landscape side-by-side layout. */\n@media (max-width: 640px) {\n .vinyl-copy { text-align: center; }\n .vinyl-dots { justify-content: center; }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .vinyl-disc { animation: none; }\n .vinyl-dots span { animation: none; opacity: 0.7; }\n}\n\n/* Header */\nheader {\n margin-bottom: var(--space-lg);\n}\n\nheader h1 {\n font-size: var(--font-size-2xl);\n font-weight: var(--font-weight-semibold);\n color: var(--color-text-dark);\n}\n\n/* Admin Header with Analytics Icon (Story 19.13) */\n.admin-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--space-md, 16px);\n}\n\n.admin-header h1 {\n margin: 0;\n}\n\n/* Player Header (centered, no analytics icon) */\n.player-header {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--space-md) var(--space-md) 0;\n}\n\n.player-header h1 {\n margin: 0;\n}\n\n/* Admin Main Content - Centered Layout (Story 19.13) */\n/* Scoped to admin-content to avoid affecting dashboard */\nbody.theme-dark main.admin-content {\n max-width: 800px;\n margin: 0 auto;\n padding: var(--space-md, 16px);\n}\n\n/* Analytics Icon Link (Story 19.13) */\n.analytics-icon-link {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 44px;\n height: 44px;\n border-radius: 50%;\n text-decoration: none;\n font-size: 1.5rem;\n transition: background-color 0.2s ease, transform 0.2s ease;\n}\n\nbody.theme-dark .analytics-icon-link {\n background: rgba(0, 245, 255, 0.1);\n}\n\nbody.theme-dark .analytics-icon-link:hover,\nbody.theme-dark .analytics-icon-link:focus {\n background: rgba(0, 245, 255, 0.2);\n transform: scale(1.1);\n outline: none;\n}\n\n/* Admin Header Actions wrapper (#226) */\n.admin-header-actions {\n display: flex;\n align-items: center;\n gap: var(--space-xs, 8px);\n}\n\n/* PWA Install Button (#226) */\n.pwa-install-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 44px;\n height: 44px;\n border-radius: 50%;\n border: none;\n background: rgba(0, 245, 255, 0.1);\n font-size: 1.5rem;\n cursor: pointer;\n transition: background-color 0.2s ease, transform 0.2s ease;\n padding: 0;\n}\n\n.pwa-install-btn:hover,\n.pwa-install-btn:focus {\n background: rgba(0, 245, 255, 0.2);\n transform: scale(1.1);\n outline: none;\n}\n\n/* Reset button (#777 follow-up \u2014 emergency escape hatch).\n Same 44px icon-button shape as the analytics + PWA install buttons,\n but neon-pink to signal \"destructive, last resort\". Stays subtle at\n rest so it doesn't read as a primary action. */\n.reset-icon-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 44px;\n height: 44px;\n border-radius: 50%;\n border: none;\n background: rgba(255, 45, 106, 0.1);\n color: var(--color-text-white);\n font-size: 1.5rem;\n cursor: pointer;\n padding: 0;\n transition: background-color 0.2s ease, transform 0.2s ease;\n}\n.reset-icon-btn:hover,\n.reset-icon-btn:focus {\n background: rgba(255, 45, 106, 0.25);\n transform: scale(1.1);\n outline: none;\n}\n\n/* PWA iOS Hint Modal (#226) */\n.pwa-ios-hint {\n position: fixed;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 1000;\n display: flex;\n justify-content: center;\n padding: var(--space-md, 16px);\n animation: slideUp 0.3s ease;\n}\n\n.pwa-ios-hint.hidden {\n display: none;\n}\n\n.pwa-ios-hint-content {\n position: relative;\n background: var(--color-bg-elevated, #2a2a3e);\n border-radius: var(--radius-lg, 12px);\n padding: var(--space-md, 16px) var(--space-lg, 24px);\n color: var(--color-text, #fff);\n text-align: center;\n max-width: 340px;\n box-shadow: 0 -2px 20px rgba(0, 0, 0, 0.3);\n}\n\n.pwa-ios-hint-close {\n position: absolute;\n top: 8px;\n right: 12px;\n background: none;\n border: none;\n color: var(--color-text, #fff);\n font-size: 1.4rem;\n cursor: pointer;\n opacity: 0.6;\n}\n\n.pwa-ios-hint-close:hover {\n opacity: 1;\n}\n\n.pwa-ios-share-icon {\n font-size: 1.2rem;\n}\n\n@keyframes slideUp {\n from { transform: translateY(100%); opacity: 0; }\n to { transform: translateY(0); opacity: 1; }\n}\n\n/* Sections */\n.status-section,\n.card-section {\n background: var(--color-bg-white);\n border-radius: var(--radius-lg);\n padding: var(--space-sm) var(--space-md);\n margin-bottom: var(--space-md);\n box-shadow: var(--shadow-sm);\n border: 1px solid transparent;\n transition: transform 0.2s ease, box-shadow 0.2s ease, border-color 0.2s ease;\n}\n\n.card-section:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n}\n\n/* Section Headers with Icons (Story 19.13) */\n.card-section .section-header {\n display: flex;\n align-items: center;\n gap: var(--space-sm, 8px);\n margin-bottom: var(--space-sm);\n font-size: var(--font-size-md);\n font-weight: var(--font-weight-semibold);\n color: var(--color-text-heading);\n}\n\n.card-section .section-icon {\n font-size: 1.25rem;\n}\n\n.status-section h2,\n.card-section h2:not(.section-header) {\n font-size: var(--font-size-md);\n font-weight: var(--font-weight-semibold);\n margin-bottom: var(--space-sm);\n color: var(--color-text-heading);\n}\n\n/* Status indicators */\n.status-connected {\n color: var(--color-success-alt);\n font-weight: var(--font-weight-medium);\n}\n\n.status-error {\n color: var(--color-error);\n font-weight: var(--font-weight-medium);\n}\n\n.status-warning {\n color: var(--color-warning);\n font-weight: var(--font-weight-medium);\n}\n\n/* List items */\n.list-item {\n padding: var(--space-sm);\n border-bottom: 1px solid var(--color-border-light);\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: var(--space-sm);\n transition: background-color 0.2s ease;\n}\n\n.list-item:last-child {\n border-bottom: none;\n}\n\n/* Dark mode list items (Story 19.13) */\nbody.theme-dark .list-item {\n border-bottom-color: var(--surface-border, #333);\n}\n\nbody.theme-dark .list-item:hover {\n background: rgba(157, 78, 221, 0.1);\n}\n\n.list-item .name {\n font-weight: var(--font-weight-medium);\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.list-item .meta {\n color: var(--color-text-muted);\n font-size: var(--font-size-base);\n flex-shrink: 0;\n}\n\n.list-item.is-invalid {\n background: var(--color-error-light);\n border-left: 3px solid var(--color-error);\n}\n\n/* Disabled playlist (no songs for selected provider) */\n.playlist-item.is-disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.playlist-item.is-disabled .checkbox-label {\n cursor: not-allowed;\n}\n\n.playlist-item.is-disabled .playlist-checkbox {\n cursor: not-allowed;\n}\n\n/* Playlist selection (Story 2.1) */\n.playlist-item.is-selectable {\n cursor: pointer;\n}\n\n/* Selected state for both playlists and media players */\n.playlist-item.is-selected,\n.media-player-item.is-selected {\n background: #eff6ff;\n border-left: 3px solid var(--color-accent-blue);\n}\n\n/* Dark mode selected state - neon styling (Story 19.13) */\nbody.theme-dark .playlist-item.is-selected,\nbody.theme-dark .media-player-item.is-selected {\n background: rgba(0, 245, 255, 0.1);\n border-left: 3px solid var(--color-accent-secondary);\n}\n\n/* Seasonal playlist suggestion chip (#1539, design option 2) \u2014\n highlighted first tile inside the playlist list. */\n.seasonal-suggestion {\n position: relative;\n margin-bottom: 12px;\n padding: 14px 16px;\n border-radius: 14px;\n background:\n linear-gradient(135deg, rgba(255, 45, 106, 0.14) 0%, rgba(99, 102, 241, 0.14) 100%),\n #12121c;\n border: 1px solid rgba(255, 45, 106, 0.45);\n box-shadow: 0 0 0 1px rgba(0, 245, 255, 0.08), 0 6px 18px rgba(0, 0, 0, 0.35);\n}\n\n.seasonal-suggestion__badge {\n display: inline-block;\n font-size: 11px;\n font-weight: 700;\n letter-spacing: 0.06em;\n text-transform: uppercase;\n color: var(--color-accent-secondary, #00f5ff);\n background: rgba(0, 245, 255, 0.1);\n border: 1px solid rgba(0, 245, 255, 0.3);\n border-radius: 999px;\n padding: 3px 10px;\n margin-bottom: 10px;\n}\n\n.seasonal-suggestion__title {\n font-size: 16px;\n font-weight: 700;\n color: #fff;\n margin-bottom: 4px;\n}\n\n.seasonal-suggestion__reason {\n font-size: 13px;\n line-height: 1.4;\n color: rgba(255, 255, 255, 0.72);\n margin-bottom: 12px;\n}\n\n.seasonal-suggestion__add {\n /* inherits .btn .btn-primary; just ensure it sits inline-block at the bottom */\n display: inline-block;\n}\n\n.seasonal-suggestion__dismiss {\n position: absolute;\n top: 8px;\n right: 10px;\n width: 28px;\n height: 28px;\n line-height: 1;\n font-size: 20px;\n color: rgba(255, 255, 255, 0.6);\n background: transparent;\n border: none;\n border-radius: 8px;\n cursor: pointer;\n}\n\n/* #1759: 44px tap target (visual stays 28px) so dismissing the banner doesn't\n risk hitting the banner CTA underneath. */\n.seasonal-suggestion__dismiss::after {\n content: '';\n position: absolute;\n top: 50%;\n left: 50%;\n width: 44px;\n height: 44px;\n transform: translate(-50%, -50%);\n}\n\n.seasonal-suggestion__dismiss:hover {\n color: #fff;\n background: rgba(255, 255, 255, 0.08);\n}\n\n/* Light theme fallback (admin defaults to dark, but keep it legible if not). */\nbody:not(.theme-dark) .seasonal-suggestion {\n background:\n linear-gradient(135deg, rgba(255, 45, 106, 0.08) 0%, rgba(99, 102, 241, 0.08) 100%),\n #fff;\n border: 1px solid rgba(255, 45, 106, 0.35);\n box-shadow: 0 4px 14px rgba(0, 0, 0, 0.08);\n}\n\nbody:not(.theme-dark) .seasonal-suggestion__title {\n color: #111;\n}\n\nbody:not(.theme-dark) .seasonal-suggestion__reason {\n color: #555;\n}\n\nbody:not(.theme-dark) .seasonal-suggestion__dismiss {\n color: #888;\n}\n\n/* Hide native checkbox, use row selection state */\n.playlist-checkbox {\n position: absolute;\n opacity: 0;\n width: 0;\n height: 0;\n pointer-events: none;\n}\n\n.checkbox-label {\n display: flex;\n align-items: center;\n flex: 1;\n min-width: 0;\n cursor: pointer;\n padding-left: var(--space-xs);\n}\n\n.playlist-name {\n font-weight: var(--font-weight-medium);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.selection-summary {\n padding: var(--space-sm) var(--space-md);\n background: #f0fdf4;\n border-radius: var(--radius-md);\n margin-top: var(--space-sm);\n font-weight: var(--font-weight-medium);\n color: #166534;\n}\n\n/* Selection summary counts - neon styling (Story 19.13) */\n.selection-summary #selected-count,\n.selection-summary #total-songs {\n font-family: 'Outfit', sans-serif;\n font-weight: 700;\n}\n\n/* Dark mode selection summary */\nbody.theme-dark .selection-summary {\n background: rgba(0, 245, 255, 0.1);\n border: 1px solid var(--color-accent-secondary);\n color: var(--color-text-white);\n}\n\nbody.theme-dark .selection-summary #selected-count,\nbody.theme-dark .selection-summary #total-songs {\n color: var(--color-accent-secondary);\n font-size: 1.1em;\n}\n\n/* Media player selection (Story 2.2) */\n.media-player-item.is-selectable {\n cursor: pointer;\n}\n\n/* Hide native radio, use row selection state */\n.media-player-radio {\n position: absolute;\n opacity: 0;\n width: 0;\n height: 0;\n pointer-events: none;\n}\n\n.radio-label {\n display: flex;\n align-items: center;\n flex: 1;\n min-width: 0;\n cursor: pointer;\n padding-left: var(--space-xs);\n}\n\n.player-name {\n font-weight: var(--font-weight-medium);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n/* State indicators */\n.state-dot {\n display: inline-block;\n width: var(--space-sm);\n height: var(--space-sm);\n border-radius: 50%;\n margin-right: 6px;\n}\n\n.state-dot.state-playing {\n background: var(--color-success-alt);\n}\n\n.state-dot.state-idle,\n.state-dot.state-paused,\n.state-dot.state-off {\n background: var(--color-text-light);\n}\n\n/* Buttons - Touch-friendly minimum 44x44px */\nbutton,\n.btn {\n min-width: 44px;\n min-height: 44px;\n padding: var(--space-sm) var(--space-lg);\n font-size: var(--font-size-md);\n font-weight: var(--font-weight-medium);\n border: none;\n border-radius: var(--radius-md);\n cursor: pointer;\n transition: background-color var(--transition-fast), opacity var(--transition-fast);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--space-sm);\n touch-action: manipulation;\n}\n\n.form-input {\n width: 100%;\n padding: var(--space-sm) var(--space-md);\n font-size: var(--font-size-sm);\n border: 1px solid var(--color-border-subtle);\n border-radius: var(--radius-md);\n background: var(--color-bg-secondary);\n color: var(--color-text-primary);\n margin-bottom: var(--space-sm);\n box-sizing: border-box;\n}\n\nbody.theme-dark .form-input {\n color: #e2e8f0;\n background: rgba(255, 255, 255, 0.1);\n border-color: rgba(255, 255, 255, 0.15);\n}\n\n.btn-primary {\n background: var(--color-accent-primary);\n color: #fff;\n}\n\n.btn-primary:hover {\n background: #e0245c;\n}\n\n.btn-primary:disabled {\n background: var(--color-text-light);\n cursor: not-allowed;\n opacity: 0.55;\n}\n\nbody.theme-dark .btn-primary {\n color: #fff;\n}\n\n.btn-secondary {\n background: var(--color-border-light);\n color: var(--color-text-secondary);\n}\n\n.btn-secondary:hover {\n background: var(--color-border-medium);\n}\n\n.btn-ghost {\n background: transparent;\n color: var(--color-accent-primary);\n border: 1.5px solid var(--color-accent-primary);\n}\n\n.btn-ghost:hover {\n background: rgba(255, 45, 106, 0.08);\n}\n\n.btn-ghost:disabled {\n opacity: 0.45;\n cursor: not-allowed;\n}\n\n.btn-outline {\n background: transparent;\n color: var(--color-text-secondary);\n border: 1.5px solid var(--color-border-medium);\n}\n\n.btn-outline:hover {\n background: var(--color-border-light);\n border-color: var(--color-text-secondary);\n}\n\n.btn-outline:disabled {\n opacity: 0.45;\n cursor: not-allowed;\n}\n\n.btn-danger {\n background: #dc2626;\n color: #fff;\n}\n\n.btn-danger:hover {\n background: #b91c1c;\n}\n\n/* Links */\na {\n color: var(--color-accent-blue);\n text-decoration: none;\n}\n\na:hover {\n text-decoration: underline;\n}\n\n/* Empty state */\n.empty-state {\n text-align: center;\n padding: var(--space-lg);\n color: var(--color-text-muted);\n}\n\n.empty-state p {\n margin-bottom: var(--space-sm);\n}\n\n/* Footer */\nfooter {\n margin-top: var(--space-lg);\n text-align: center;\n color: var(--color-text-light);\n font-size: var(--font-size-sm);\n}\n\n/* Utility classes */\n.hidden {\n display: none !important;\n}\n\n/* ==========================================\n Neon Party Mode Theme (Story 9.2)\n ========================================== */\n\n/* Dark theme body - applied to player page */\nbody.theme-dark {\n background: var(--color-bg-primary);\n color: var(--color-text-white);\n}\n\nbody.theme-dark .player-container {\n background: var(--color-bg-primary);\n}\n\n/* Admin page cards in dark mode - neon styling (Story 19.13) */\nbody.theme-dark .card-section {\n background: var(--color-surface-dark);\n border: 1px solid var(--color-border-neon);\n color: var(--color-text-white);\n}\n\n/* Consistent spacing for admin content sections */\n.admin-content .card-section {\n margin-bottom: var(--space-md);\n}\n\nbody.theme-dark .card-section:hover {\n box-shadow: 0 4px 20px rgba(157, 78, 221, 0.3);\n}\n\nbody.theme-dark .card-section h2,\nbody.theme-dark .card-section .section-header {\n color: var(--color-text-white);\n}\n\nbody.theme-dark .card-section p,\nbody.theme-dark .card-section .name,\nbody.theme-dark .card-section .player-name,\nbody.theme-dark .card-section .playlist-name,\nbody.theme-dark .card-section .list-item,\nbody.theme-dark .card-section .radio-label,\nbody.theme-dark .card-section .checkbox-label,\nbody.theme-dark .card-section strong,\nbody.theme-dark .card-section span {\n color: var(--color-text-white);\n}\n\nbody.theme-dark .card-section .meta {\n color: var(--color-text-neon-muted);\n}\n\nbody.theme-dark .game-info {\n background: rgba(255, 255, 255, 0.05);\n border: 1px solid var(--color-neon-purple);\n border-radius: var(--radius-md);\n color: var(--color-text-white);\n}\n\nbody.theme-dark .game-info p,\nbody.theme-dark .game-info strong,\nbody.theme-dark .game-info span {\n color: var(--color-text-white);\n}\n\n/* Ensure button text stays white in dark mode (override card-section span rule) */\nbody.theme-dark .btn-primary span,\nbody.theme-dark .btn-secondary span {\n color: inherit;\n}\n\n/* Badge colors are explicitly set per badge type - no dark mode override needed */\n\n/* Inactive selector buttons need dark text on light backgrounds (Story 19.13) */\nbody.theme-dark .lang-btn:not(.lang-btn--active),\nbody.theme-dark .timer-btn:not(.timer-btn--active),\nbody.theme-dark .difficulty-btn:not(.difficulty-btn--active) {\n color: var(--color-text-primary, #1a1a2e);\n}\n\nbody.theme-dark .lang-btn:not(.lang-btn--active) span,\nbody.theme-dark .timer-btn:not(.timer-btn--active) span,\nbody.theme-dark .difficulty-btn:not(.difficulty-btn--active) span {\n color: var(--color-text-primary, #1a1a2e);\n}\n\n/* Language Selector (Story 12.4) */\n.language-selector {\n display: flex;\n justify-content: center;\n gap: var(--space-sm);\n}\n\n.lang-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--space-xs);\n padding: var(--space-sm) var(--space-lg);\n border: 2px solid var(--color-border-medium);\n border-radius: var(--radius-md);\n background: var(--color-bg-white);\n color: var(--color-text-primary);\n font-size: var(--font-size-base);\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.lang-btn:hover {\n border-color: var(--color-accent-brand);\n background: var(--color-bg-card-alt);\n}\n\n.lang-btn--active {\n border-color: var(--color-accent-brand);\n background: var(--color-accent-brand);\n color: var(--color-text-white);\n}\n\n.lang-btn--active:hover {\n background: var(--color-accent-brand-hover);\n}\n\n.lang-flag {\n font-size: 1.25em;\n}\n\n.lang-name {\n font-weight: 600;\n}\n\n/* Timer Selector (Story 13.1) */\n.timer-selector {\n display: flex;\n justify-content: center;\n gap: var(--space-sm);\n}\n\n.timer-btn {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--space-2xs);\n padding: var(--space-sm) var(--space-md);\n min-width: 90px;\n border: 2px solid var(--color-border-neon);\n border-radius: var(--radius-md);\n background: var(--color-bg-card);\n color: var(--color-text-secondary);\n font-family: inherit;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.timer-btn:hover {\n border-color: var(--color-accent-brand);\n background: var(--color-bg-card-alt);\n}\n\n.timer-btn:focus {\n outline: none;\n border-color: var(--color-accent-brand);\n box-shadow: 0 0 0 3px rgba(30, 215, 96, 0.3);\n}\n\n.timer-btn:focus-visible {\n outline: 2px solid var(--color-accent-brand);\n outline-offset: 2px;\n}\n\n.timer-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n border-color: var(--color-border-neon);\n background: var(--color-bg-card);\n}\n\n.timer-btn:disabled:hover {\n border-color: var(--color-border-neon);\n background: var(--color-bg-card);\n}\n\n.timer-btn--active {\n border-color: var(--color-accent-brand);\n background: var(--color-accent-brand);\n color: var(--color-text-white);\n}\n\n.timer-btn--active:hover {\n background: var(--color-accent-brand-hover);\n}\n\n.timer-icon {\n font-size: 1.5em;\n}\n\n.timer-label {\n font-weight: 600;\n font-size: 0.875rem;\n}\n\n.timer-value {\n font-size: 0.75rem;\n opacity: 0.8;\n}\n\n.timer-btn--active .timer-value {\n opacity: 1;\n}\n\n/* Difficulty Selector (Story 14.1) */\n.difficulty-selector {\n display: flex;\n justify-content: center;\n gap: var(--space-sm);\n}\n\n.difficulty-btn {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--space-2xs);\n padding: var(--space-sm) var(--space-md);\n min-width: 90px;\n border: 2px solid var(--color-border-light);\n border-radius: var(--radius-md);\n background: var(--color-bg-card);\n color: var(--color-text-secondary);\n font-family: inherit;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.difficulty-btn:hover {\n border-color: var(--color-accent-brand);\n background: var(--color-bg-card-alt);\n}\n\n.difficulty-btn:focus {\n outline: none;\n border-color: var(--color-accent-brand);\n box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.3);\n}\n\n.difficulty-btn:focus-visible {\n outline: 2px solid var(--color-accent-brand);\n outline-offset: 2px;\n}\n\n.difficulty-btn--active {\n border-color: var(--color-accent-brand);\n background: var(--color-accent-brand);\n color: var(--color-text-white);\n}\n\n.difficulty-btn--active:hover {\n background: var(--color-accent-brand-hover);\n}\n\n.difficulty-icon {\n font-size: 1.5em;\n}\n\n.difficulty-label {\n font-weight: 600;\n font-size: 0.875rem;\n}\n\n.difficulty-description {\n text-align: center;\n font-size: 0.8125rem;\n color: var(--color-text-muted);\n margin-top: var(--space-sm);\n line-height: 1.5;\n max-width: 400px;\n margin-left: auto;\n margin-right: auto;\n}\n\n/* Artist Challenge Toggle (Story 20.7) */\n.toggle-option {\n display: flex;\n align-items: center;\n gap: var(--space-md);\n cursor: pointer;\n padding: var(--space-sm) 0;\n}\n\n.toggle-option input[type=\"checkbox\"] {\n position: absolute;\n opacity: 0;\n width: 0;\n height: 0;\n}\n\n.toggle-switch {\n position: relative;\n width: 48px;\n height: 26px;\n background: var(--color-border);\n border-radius: 13px;\n transition: background 0.2s ease;\n flex-shrink: 0;\n}\n\n.toggle-switch::after {\n content: '';\n position: absolute;\n top: 3px;\n left: 3px;\n width: 20px;\n height: 20px;\n background: white;\n border-radius: 50%;\n transition: transform 0.2s ease;\n}\n\n.toggle-option input:checked + .toggle-switch {\n background: var(--color-success);\n}\n\n.toggle-option input:checked + .toggle-switch::after {\n transform: translateX(22px);\n}\n\n.toggle-option input:focus-visible + .toggle-switch {\n outline: 2px solid var(--color-accent-primary);\n outline-offset: 2px;\n}\n\n.toggle-label {\n font-size: var(--font-size-md);\n font-weight: 500;\n color: var(--color-text);\n}\n\n.option-description {\n font-size: var(--font-size-sm);\n color: var(--color-text-muted);\n margin: var(--space-xs) 0 0 0;\n padding-left: calc(48px + var(--space-md));\n}\n\n/* Dark mode toggle */\nbody.theme-dark .toggle-switch {\n background: var(--color-dark-border, #333);\n}\n\n/* Provider Selector (Story 17.2) */\n.provider-selector {\n display: flex;\n justify-content: center;\n gap: var(--space-sm);\n}\n\n.provider-btn {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--space-2xs);\n padding: var(--space-sm) var(--space-md);\n min-width: 100px;\n border: 2px solid var(--color-border-light);\n border-radius: var(--radius-md);\n background: var(--color-bg-card);\n color: var(--color-text-secondary);\n font-family: inherit;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.provider-btn:hover:not(.provider-btn--disabled) {\n border-color: var(--color-accent-brand);\n background: var(--color-bg-card-alt);\n}\n\n.provider-btn:focus {\n outline: none;\n border-color: var(--color-accent-brand);\n box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.3);\n}\n\n.provider-btn:focus-visible {\n outline: 2px solid var(--color-accent-brand);\n outline-offset: 2px;\n}\n\n.provider-btn--active {\n border-color: var(--color-accent-brand);\n background: var(--color-accent-brand);\n color: var(--color-text-white);\n}\n\n.provider-btn--active:hover {\n background: var(--color-accent-brand-hover);\n}\n\n.provider-icon {\n font-size: 1.5em;\n}\n\n.provider-label {\n font-weight: 600;\n font-size: 0.875rem;\n}\n\n/* Playlist coverage warning (Story 17.2) */\n.playlist-coverage {\n font-size: 0.75rem;\n color: var(--color-text-muted);\n}\n\n.playlist-coverage--warning {\n color: var(--color-warning);\n}\n\n.playlist-coverage--none {\n color: var(--color-error);\n}\n\n/* Playlist Filter Bar (Issue #70) */\n.playlist-filter-bar {\n display: flex;\n flex-direction: column;\n gap: 0.75rem;\n padding: 0.75rem 0;\n margin-bottom: 0.5rem;\n border-bottom: 1px solid var(--color-border);\n}\n\n/* Dropdown filters container */\n.filter-dropdowns {\n display: flex;\n flex-wrap: wrap;\n gap: 0.5rem;\n}\n\n.filter-dropdown {\n padding: 0.5rem 2rem 0.5rem 0.75rem;\n background: var(--color-surface);\n border: 1px solid var(--color-border);\n border-radius: var(--radius-md, 6px);\n font-size: 0.875rem;\n font-weight: 500;\n color: var(--color-text-primary, #333);\n cursor: pointer;\n transition: all 0.15s ease;\n appearance: none;\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23666' d='M2 4l4 4 4-4'/%3E%3C/svg%3E\");\n background-repeat: no-repeat;\n background-position: right 0.75rem center;\n min-width: 120px;\n}\n\n.filter-dropdown:hover {\n border-color: var(--color-primary, #6c5ce7);\n}\n\n.filter-dropdown:focus {\n outline: none;\n border-color: var(--color-primary, #6c5ce7);\n box-shadow: 0 0 0 2px rgba(108, 92, 231, 0.2);\n}\n\n/* Dropdown with active selection */\n.filter-dropdown:not([value=\"\"]):has(option:checked:not([value=\"\"])) {\n border-color: var(--color-primary, #6c5ce7);\n background-color: rgba(108, 92, 231, 0.08);\n}\n\n/* Filter summary */\n.filter-summary {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n font-size: 0.8125rem;\n}\n\n.filter-summary-text {\n color: var(--color-text-secondary, #666);\n}\n\n.filter-clear {\n padding: 0.25rem 0.5rem;\n background: transparent;\n border: 1px solid var(--color-border);\n border-radius: var(--radius-sm, 4px);\n font-size: 0.75rem;\n color: var(--color-text-secondary, #666);\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.filter-clear:hover {\n background: var(--color-error, #e74c3c);\n border-color: var(--color-error, #e74c3c);\n color: white;\n}\n\n/* Dark theme */\nbody.theme-dark .filter-dropdown {\n background-color: rgba(255, 255, 255, 0.08);\n border-color: rgba(255, 255, 255, 0.15);\n color: rgba(255, 255, 255, 0.85);\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23999' d='M2 4l4 4 4-4'/%3E%3C/svg%3E\");\n}\n\nbody.theme-dark .filter-dropdown:hover,\nbody.theme-dark .filter-dropdown:focus {\n border-color: rgba(108, 92, 231, 0.6);\n}\n\nbody.theme-dark .filter-summary-text {\n color: rgba(255, 255, 255, 0.6);\n}\n\nbody.theme-dark .filter-clear {\n border-color: rgba(255, 255, 255, 0.2);\n color: rgba(255, 255, 255, 0.6);\n}\n\n/* Legacy filter-tag styles (kept for backwards compatibility) */\n.filter-tag {\n display: inline-flex;\n align-items: center;\n gap: 0.25rem;\n padding: 0.4375rem 0.875rem;\n background: var(--color-surface);\n border: 1px solid var(--color-border);\n border-radius: var(--radius-full);\n font-size: 0.8125rem;\n font-weight: 600;\n color: var(--color-text-primary, #333);\n cursor: pointer;\n transition: all 0.15s ease;\n white-space: nowrap;\n}\n\n.filter-tag .filter-count {\n font-size: 0.6875rem;\n opacity: 0.8;\n}\n\n/* Playlist Tags Display */\n.playlist-tags {\n display: flex;\n flex-wrap: wrap;\n gap: 0.25rem;\n margin-top: 0.375rem;\n}\n\n.playlist-tag {\n display: inline-block;\n padding: 0.1875rem 0.5rem;\n background: var(--color-primary-light, #e8e4f8);\n border: 1px solid var(--color-primary-border, #c9bff2);\n border-radius: var(--radius-full);\n font-size: 0.6875rem;\n font-weight: 500;\n color: var(--color-primary-dark, #5b4cad);\n max-width: 6rem;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.playlist-tag--more {\n background: transparent;\n border-color: var(--color-primary-border, #c9bff2);\n color: var(--color-text-secondary, #666);\n font-style: italic;\n}\n\nbody.theme-dark .playlist-tag {\n background: rgba(108, 92, 231, 0.2);\n border-color: rgba(108, 92, 231, 0.4);\n color: #b8acf6;\n}\n\nbody.theme-dark .playlist-tag--more {\n background: transparent;\n color: rgba(255, 255, 255, 0.5);\n}\n\n/* Difficulty Badge (Story 14.1) */\n.difficulty-badge {\n display: inline-block;\n padding: 0.125rem 0.5rem;\n border-radius: var(--radius-full);\n font-size: 0.75rem;\n font-weight: 600;\n margin-left: var(--space-xs);\n}\n\n.difficulty-badge--easy {\n background: var(--color-success-bg);\n color: var(--color-success);\n border: 1px solid var(--color-success);\n}\n\n.difficulty-badge--normal {\n background: var(--color-accent-brand-bg);\n color: var(--color-accent-brand);\n border: 1px solid var(--color-accent-brand);\n}\n\n.difficulty-badge--hard {\n background: var(--color-error-bg);\n color: var(--color-error);\n border: 1px solid var(--color-error);\n}\n\n/* Supported players hint below media player list */\n.supported-players-hint {\n font-size: 0.75rem;\n color: var(--color-text-muted);\n margin-top: var(--space-sm);\n padding-top: var(--space-sm);\n border-top: 1px solid var(--color-border-light);\n}\n\n.supported-players-hint a {\n color: var(--color-accent-primary);\n text-decoration: none;\n}\n\n.supported-players-hint a:hover {\n text-decoration: underline;\n}\n\nbody.theme-dark .supported-players-hint {\n color: var(--color-text-neon-muted);\n border-top-color: var(--color-border-neon);\n}\n\n/* Player info container - holds name and platform badge */\n.player-info {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n/* Platform badge on each player item */\n.platform-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 0.625rem;\n font-weight: 600;\n padding: 2px 6px;\n border-radius: var(--radius-sm);\n text-transform: uppercase;\n letter-spacing: 0.025em;\n background: rgba(128, 128, 128, 0.15);\n color: var(--color-text-muted);\n}\n\n.platform-badge--music_assistant {\n background: rgba(76, 175, 80, 0.15);\n color: #4caf50;\n}\n\n.platform-badge--sonos {\n background: rgba(255, 152, 0, 0.15);\n color: #ff9800;\n}\n\n.platform-badge--alexa_media,\n.platform-badge--alexa {\n background: rgba(0, 168, 225, 0.15);\n color: #00a8e1;\n}\n\nbody.theme-dark .platform-badge {\n background: rgba(255, 255, 255, 0.08);\n}\n\nbody.theme-dark .platform-badge--music_assistant {\n background: rgba(76, 175, 80, 0.2);\n color: #81c784;\n}\n\nbody.theme-dark .platform-badge--sonos {\n background: rgba(255, 152, 0, 0.2);\n color: #ffb74d;\n}\n\nbody.theme-dark .platform-badge--alexa_media,\nbody.theme-dark .platform-badge--alexa {\n background: rgba(0, 168, 225, 0.2);\n color: #4fc3f7;\n}\n\n/* No compatible players message */\n.no-players-message {\n text-align: center;\n padding: var(--space-lg);\n}\n\n.no-players-message h3 {\n font-size: 1.125rem;\n margin-bottom: var(--space-sm);\n}\n\n.no-players-message p {\n font-size: 0.875rem;\n color: var(--color-text-muted);\n margin-bottom: var(--space-sm);\n}\n\n.no-players-message .button-group {\n display: flex;\n flex-direction: column;\n gap: var(--space-sm);\n margin-top: var(--space-md);\n}\n\n/* Provider chips section */\n.provider-chips {\n justify-content: flex-start;\n}\n\n.provider-chips .chip {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n.provider-icon {\n font-size: 1rem;\n}\n\n/* Warning box styling */\n.warning-box {\n background: var(--color-warning-bg);\n border: 1px solid var(--color-warning);\n border-radius: var(--radius-sm);\n padding: var(--space-sm);\n margin-top: var(--space-sm);\n font-size: 0.875rem;\n}\n\n.warning-box p {\n margin: 0 0 var(--space-xs) 0;\n}\n\n.warning-box p:last-child {\n margin-bottom: 0;\n}\n\n.warning-caveat {\n font-size: 0.8125rem;\n opacity: 0.85;\n}\n\n/* Provider hint text */\n#provider-hint {\n font-size: 0.8125rem;\n color: var(--color-text-muted);\n margin-top: var(--space-sm);\n}\n\nbody.theme-dark #provider-hint {\n color: var(--color-text-neon-muted);\n}\n\n/* Disabled chip state (for provider/feature chips) */\n.chip--disabled,\n.provider-btn--disabled {\n opacity: 0.4;\n cursor: not-allowed;\n pointer-events: none;\n}\n\n/* Hint text styling */\n.hint-text {\n font-size: 0.75rem;\n color: var(--color-text-muted);\n margin: var(--space-xs) 0 0 calc(var(--space-md) + 24px);\n font-style: italic;\n}\n\nbody.theme-dark .hint-text {\n color: var(--color-text-neon-muted);\n}\n\n/* Modal content in dark mode needs dark text on light backgrounds */\nbody.theme-dark .modal-content {\n color: var(--color-text-primary);\n}\n\nbody.theme-dark .modal-content h2,\nbody.theme-dark .modal-content p {\n color: var(--color-text-primary);\n}\n\n/* Input fields inside modals need dark text on light background */\nbody.theme-dark .modal-content .name-input {\n background: var(--color-bg-white);\n border-color: var(--color-border-medium);\n color: var(--color-text-primary);\n}\n\nbody.theme-dark .modal-content .name-input::placeholder {\n color: var(--color-text-muted);\n}\n\nbody.theme-dark .modal-content .name-input:focus {\n border-color: var(--color-accent-blue);\n box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n}\n\n/* Card component classes */\n.card {\n background: var(--color-dark-surface);\n border-radius: var(--radius-lg);\n padding: var(--space-md);\n border: 1px solid var(--color-border-neon);\n}\n\n.card-glass {\n background: var(--color-dark-surface);\n backdrop-filter: blur(10px);\n -webkit-backdrop-filter: blur(10px);\n border: 1px solid var(--color-border-neon);\n border-radius: var(--radius-lg);\n}\n\n/* Neon Primary Button */\n.btn-neon {\n background: var(--color-accent-primary);\n color: var(--color-text-white);\n border: none;\n border-radius: var(--radius-md);\n padding: var(--space-md) var(--space-lg);\n font-weight: var(--font-weight-semibold);\n cursor: pointer;\n transition: all var(--transition-fast);\n}\n\n.btn-neon:hover {\n background: #ff4080;\n}\n\n.btn-neon:active {\n transform: scale(0.98);\n}\n\n/* Glow effect for buttons */\n.btn-glow {\n transition: box-shadow var(--transition-fast), transform var(--transition-fast);\n}\n\n.btn-glow:hover {\n box-shadow: var(--glow-primary);\n}\n\n.btn-glow:active {\n transform: scale(0.98);\n box-shadow: var(--glow-primary);\n}\n\n/* Secondary glow (cyan) */\n.btn-glow-secondary:hover {\n box-shadow: var(--glow-secondary);\n}\n\n/* Success glow */\n.btn-glow-success:hover {\n box-shadow: var(--glow-success);\n}\n\n/* Text glow utilities */\n.text-glow {\n text-shadow: 0 0 10px var(--color-accent-primary),\n 0 0 20px var(--color-accent-primary),\n 0 0 30px var(--color-accent-primary);\n}\n\n.text-glow-cyan {\n text-shadow: 0 0 10px var(--color-accent-secondary),\n 0 0 20px var(--color-accent-secondary),\n 0 0 30px var(--color-accent-secondary);\n}\n\n.text-glow-success {\n text-shadow: 0 0 10px var(--color-success-neon),\n 0 0 20px var(--color-success-neon),\n 0 0 30px var(--color-success-neon);\n}\n\n/* Dark theme text utilities */\n.text-neon-white {\n color: var(--color-text-white);\n}\n\n.text-neon-muted {\n color: var(--color-text-neon-muted);\n}\n\n.text-neon-primary {\n color: var(--color-accent-primary);\n}\n\n.text-neon-secondary {\n color: var(--color-accent-secondary);\n}\n\n/* Dark theme overrides for player views */\nbody.theme-dark .player-container h1,\nbody.theme-dark .lobby-header h1,\nbody.theme-dark .game-container h1,\nbody.theme-dark .reveal-container h1,\nbody.theme-dark .end-container h1 {\n color: var(--color-text-white);\n}\n\nbody.theme-dark .player-container p,\nbody.theme-dark .hint,\nbody.theme-dark .player-count {\n color: var(--color-text-neon-muted);\n}\n\nbody.theme-dark .join-form > p {\n color: var(--color-text-neon-muted);\n}\n\n/* Dark theme player cards */\nbody.theme-dark .player-card {\n background: var(--color-dark-surface);\n border-color: var(--color-border-neon);\n}\n\nbody.theme-dark .player-card--you {\n background: rgba(255, 45, 106, 0.1);\n border-color: var(--color-accent-primary);\n}\n\nbody.theme-dark .player-name {\n color: var(--color-text-white);\n}\n\nbody.theme-dark .you-badge {\n color: var(--color-accent-primary);\n}\n\n/* Dark theme form inputs */\nbody.theme-dark .name-input {\n background: var(--color-dark-surface);\n border-color: var(--color-border-neon);\n color: var(--color-text-white);\n}\n\nbody.theme-dark .name-input:focus {\n border-color: var(--color-accent-primary);\n box-shadow: 0 0 0 3px rgba(255, 45, 106, 0.2);\n}\n\nbody.theme-dark .name-input::placeholder {\n color: var(--color-text-neon-muted);\n}\n\n/* Dark theme join button */\nbody.theme-dark .join-btn {\n background: var(--color-accent-primary);\n color: var(--color-text-white);\n}\n\nbody.theme-dark .join-btn:hover {\n box-shadow: var(--glow-primary);\n}\n\n/* Dark theme QR area */\nbody.theme-dark .qr-share-area {\n background: var(--color-dark-surface);\n border: 1px solid var(--color-border-neon);\n}\n\nbody.theme-dark .qr-hint {\n color: var(--color-text-neon-muted);\n}\n\n/* Dark theme - QR collapsible (Story 18.8) */\nbody.theme-dark .qr-share-header {\n color: var(--color-text-white);\n}\n\nbody.theme-dark .qr-share-chevron {\n color: var(--color-text-neon-muted);\n}\n\n/* Dark theme lobby status */\nbody.theme-dark .lobby-status {\n color: var(--color-text-neon-muted);\n}\n\n/* Dark theme game container */\nbody.theme-dark .game-container {\n background: var(--color-bg-primary);\n}\n\nbody.theme-dark .round-indicator-text {\n color: var(--color-text-white);\n}\n\nbody.theme-dark .timer {\n color: var(--color-text-white);\n}\n\nbody.theme-dark .timer--warning {\n color: var(--color-warning);\n text-shadow: 0 0 10px var(--color-warning);\n animation: timer-pulse-subtle 1s ease-in-out infinite;\n}\n\nbody.theme-dark .timer--critical {\n color: var(--color-error-neon);\n text-shadow: 0 0 15px var(--color-error-neon);\n animation: timer-pulse-intense 0.5s ease-in-out infinite;\n}\n\n/* Dark theme submission tracker - inherits from base styles */\n\nbody.theme-dark .player-avatar {\n background: var(--color-dark-surface-hover);\n color: var(--color-text-neon-muted);\n}\n\nbody.theme-dark .player-indicator.is-submitted .player-avatar {\n background: var(--color-success-neon);\n color: var(--color-bg-primary);\n box-shadow: var(--glow-success);\n}\n\n/* Dark theme year selector */\nbody.theme-dark #selected-year {\n color: var(--color-text-white);\n}\n\nbody.theme-dark .slider-label {\n color: var(--color-text-neon-muted);\n}\n\nbody.theme-dark .year-slider {\n background: var(--color-dark-surface);\n}\n\nbody.theme-dark .year-slider::-webkit-slider-thumb {\n background: var(--color-accent-primary);\n box-shadow: var(--glow-primary);\n}\n\nbody.theme-dark .year-slider::-moz-range-thumb {\n background: var(--color-accent-primary);\n box-shadow: var(--glow-primary);\n}\n\n/* Dark theme submit button */\nbody.theme-dark .submit-btn {\n background: var(--color-accent-primary);\n}\n\nbody.theme-dark .submit-btn:hover {\n box-shadow: var(--glow-primary);\n}\n\n/* Dark theme submitted confirmation */\nbody.theme-dark .submitted-confirmation {\n background: var(--color-success-neon);\n color: var(--color-bg-primary);\n box-shadow: var(--glow-success);\n}\n\n/* Dark theme reveal container */\nbody.theme-dark .reveal-container {\n background: var(--color-bg-primary);\n}\n\nbody.theme-dark .reveal-round-info {\n color: var(--color-text-neon-muted);\n}\n\nbody.theme-dark .correct-year-label {\n color: var(--color-text-neon-muted);\n}\n\nbody.theme-dark .correct-year {\n color: var(--color-success-neon);\n text-shadow: 0 0 10px var(--color-success-neon),\n 0 0 20px var(--color-success-neon);\n}\n\nbody.theme-dark .song-title {\n color: var(--color-text-white);\n}\n\nbody.theme-dark .song-artist {\n color: var(--color-text-neon-muted);\n}\n\n/* Dark theme fun fact */\nbody.theme-dark .fun-fact-container {\n background: rgba(255, 102, 0, 0.15);\n border: 1px solid rgba(255, 102, 0, 0.3);\n}\n\nbody.theme-dark .fun-fact-text {\n color: var(--color-warning);\n}\n\n/* Dark theme reveal emotion (Story 9.4) */\nbody.theme-dark .reveal-emotion--exact {\n color: var(--color-success-neon);\n text-shadow: 0 0 20px var(--color-success-neon), 0 0 40px var(--color-success-neon);\n}\n\nbody.theme-dark .reveal-emotion--close {\n color: var(--color-warning);\n text-shadow: 0 0 15px var(--color-warning);\n}\n\nbody.theme-dark .reveal-emotion--wrong {\n color: var(--color-text-neon-muted);\n}\n\nbody.theme-dark .reveal-emotion--missed {\n color: var(--color-text-neon-muted);\n opacity: 0.6;\n}\n\n/* Dark theme personal result */\nbody.theme-dark .personal-result {\n background: var(--color-dark-surface);\n border: 1px solid var(--color-border-neon);\n}\n\nbody.theme-dark .result-header {\n color: var(--color-text-neon-muted);\n}\n\nbody.theme-dark .result-label {\n color: var(--color-text-neon-muted);\n}\n\nbody.theme-dark .result-value {\n color: var(--color-text-white);\n}\n\nbody.theme-dark .result-score {\n color: var(--color-accent-secondary);\n text-shadow: 0 0 10px var(--color-accent-secondary);\n}\n\n/* Dark theme leaderboard */\nbody.theme-dark .leaderboard {\n background: var(--color-dark-surface);\n border: 1px solid var(--color-border-neon);\n box-shadow: none;\n}\n\nbody.theme-dark .leaderboard-header {\n background: var(--color-dark-card);\n border-color: var(--color-border-neon);\n}\n\nbody.theme-dark .leaderboard-title {\n color: var(--color-text-white);\n}\n\nbody.theme-dark .leaderboard-entry {\n border-color: var(--color-border-neon);\n}\n\nbody.theme-dark .leaderboard-entry.is-current {\n background: rgba(255, 45, 106, 0.1);\n border-left-color: var(--color-accent-primary);\n}\n\nbody.theme-dark .entry-rank {\n color: var(--color-text-neon-muted);\n}\n\nbody.theme-dark .entry-name {\n color: var(--color-text-white);\n}\n\nbody.theme-dark .entry-score {\n color: var(--color-accent-secondary);\n}\n\n/* Dark theme leaderboard animations (Story 9.5) */\nbody.theme-dark .leaderboard-entry--climbing {\n animation: leaderboard-climb-dark 400ms ease-out;\n}\n\nbody.theme-dark .leaderboard-entry--falling {\n animation: leaderboard-fall-dark 400ms ease-out;\n}\n\n@keyframes leaderboard-climb-dark {\n 0% { transform: translateY(10px); opacity: 0.7; background: rgba(0, 255, 136, 0.15); }\n 100% { transform: translateY(0); opacity: 1; background: transparent; }\n}\n\n@keyframes leaderboard-fall-dark {\n 0% { transform: translateY(-10px); opacity: 0.7; background: rgba(255, 45, 106, 0.15); }\n 100% { transform: translateY(0); opacity: 1; background: transparent; }\n}\n\nbody.theme-dark .rank-up {\n color: var(--color-success-neon);\n text-shadow: 0 0 5px var(--color-success-neon);\n}\n\nbody.theme-dark .rank-down {\n color: var(--color-error-neon);\n text-shadow: 0 0 5px var(--color-error-neon);\n}\n\nbody.theme-dark .streak-indicator {\n color: var(--color-warning);\n}\n\nbody.theme-dark .streak-indicator--hot {\n text-shadow: 0 0 10px var(--color-warning), 0 0 20px var(--color-warning);\n}\n\nbody.theme-dark .leaderboard-separator {\n color: var(--color-text-neon-muted);\n border-color: var(--color-border-neon);\n}\n\n/* Dark theme top 3 styling (Story 9.5) */\nbody.theme-dark .leaderboard-entry.is-top-1 {\n background: linear-gradient(90deg, rgba(255, 215, 0, 0.15), rgba(255, 215, 0, 0.05));\n}\n\nbody.theme-dark .leaderboard-entry.is-top-1 .entry-rank {\n color: #ffd700;\n text-shadow: 0 0 10px rgba(255, 215, 0, 0.5);\n}\n\nbody.theme-dark .leaderboard-entry.is-top-2 {\n background: linear-gradient(90deg, rgba(192, 192, 192, 0.15), rgba(192, 192, 192, 0.05));\n}\n\nbody.theme-dark .leaderboard-entry.is-top-2 .entry-rank {\n color: #c0c0c0;\n text-shadow: 0 0 10px rgba(192, 192, 192, 0.5);\n}\n\nbody.theme-dark .leaderboard-entry.is-top-3 {\n background: linear-gradient(90deg, rgba(205, 127, 50, 0.15), rgba(205, 127, 50, 0.05));\n}\n\nbody.theme-dark .leaderboard-entry.is-top-3 .entry-rank {\n color: #cd7f32;\n text-shadow: 0 0 10px rgba(205, 127, 50, 0.5);\n}\n\n/* Dark theme end container */\nbody.theme-dark .end-container {\n background: var(--color-bg-primary);\n}\n\nbody.theme-dark .end-title {\n color: var(--color-text-white);\n}\n\nbody.theme-dark .end-subtitle {\n color: var(--color-text-neon-muted);\n}\n\nbody.theme-dark .your-result {\n background: var(--color-dark-surface);\n border: 1px solid var(--color-border-neon);\n}\n\nbody.theme-dark .your-result-header {\n color: var(--color-accent-primary);\n}\n\nbody.theme-dark .your-result-rank {\n color: var(--color-text-white);\n}\n\nbody.theme-dark .your-result-score {\n color: var(--color-text-neon-muted);\n}\n\nbody.theme-dark .stat-value {\n color: var(--color-accent-secondary);\n}\n\nbody.theme-dark .stat-label {\n color: var(--color-text-neon-muted);\n}\n\n/* Dark theme podium */\nbody.theme-dark .podium-name {\n color: var(--color-text-white);\n}\n\nbody.theme-dark .podium-score {\n color: var(--color-text-neon-muted);\n}\n\n/* Dark theme final leaderboard */\nbody.theme-dark .final-leaderboard {\n background: var(--color-dark-surface);\n border: 1px solid var(--color-border-neon);\n box-shadow: none;\n}\n\nbody.theme-dark .final-leaderboard-header {\n background: var(--color-dark-card);\n color: var(--color-text-white);\n}\n\nbody.theme-dark .final-entry {\n border-color: var(--color-border-neon);\n}\n\nbody.theme-dark .final-entry.is-current {\n background: rgba(255, 45, 106, 0.1);\n}\n\nbody.theme-dark .final-rank {\n color: var(--color-text-neon-muted);\n}\n\nbody.theme-dark .final-name {\n color: var(--color-text-white);\n}\n\nbody.theme-dark .final-score {\n color: var(--color-accent-secondary);\n}\n\n/* Dark theme new game button */\nbody.theme-dark .new-game-btn {\n background: var(--color-success-neon);\n color: var(--color-bg-primary);\n box-shadow: var(--glow-success);\n}\n\nbody.theme-dark .new-game-btn:hover {\n background: #4dff1f;\n}\n\n/* Dark theme end player message */\nbody.theme-dark .end-player-message {\n color: var(--color-text-neon-muted);\n}\n\nbody.theme-dark .rejoin-hint {\n color: var(--color-text-neon-muted);\n}\n\n/* Dark theme paused view */\nbody.theme-dark .paused-container {\n background: var(--color-bg-primary);\n}\n\nbody.theme-dark .paused-container h1 {\n color: var(--color-text-white);\n}\n\nbody.theme-dark .paused-container > p {\n color: var(--color-text-neon-muted);\n}\n\nbody.theme-dark .paused-hint {\n color: var(--color-text-neon-muted);\n}\n\n/* Dark theme connection lost view */\nbody.theme-dark .connection-lost-container h1 {\n color: var(--color-text-white);\n}\n\nbody.theme-dark .connection-lost-container > p {\n color: var(--color-text-neon-muted);\n}\n\nbody.theme-dark .connection-lost-hint {\n color: var(--color-text-neon-muted);\n}\n\n/* Dark theme modal */\nbody.theme-dark .qr-modal-content {\n background: var(--color-bg-primary);\n border: 1px solid var(--color-border-neon);\n}\n\nbody.theme-dark .qr-modal-label {\n color: var(--color-text-white);\n}\n\n/* ==========================================\n Lobby Section (Story 2.3)\n ========================================== */\n\n.qr-print-area {\n text-align: center;\n padding: var(--space-lg) 0;\n}\n\n.qr-container {\n display: inline-block;\n padding: var(--space-md);\n background: var(--color-bg-white);\n border-radius: var(--radius-md);\n box-shadow: var(--shadow-md);\n}\n\n#qr-code {\n display: inline-block;\n}\n\n#qr-code img {\n display: block;\n}\n\n.qr-instruction {\n font-size: var(--font-size-lg);\n font-weight: var(--font-weight-semibold);\n color: var(--color-text-primary);\n margin-top: var(--space-md);\n}\n\n.join-url {\n font-family: var(--font-mono);\n font-size: var(--font-size-base);\n color: var(--color-text-muted);\n margin-top: var(--space-sm);\n word-break: break-all;\n user-select: all;\n cursor: text;\n}\n\n.lobby-controls {\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n gap: var(--space-sm);\n margin: var(--space-md) 0;\n}\n\n/* Dashboard button styling (Story 16.4) */\n.btn-dashboard {\n display: flex;\n align-items: center;\n gap: var(--space-xs);\n}\n\n.player-list {\n margin-top: var(--space-md);\n border-top: 1px solid var(--color-border-light);\n padding-top: var(--space-md);\n}\n\n.game-controls-bar {\n display: flex;\n gap: var(--space-sm);\n justify-content: center;\n margin-top: var(--space-md);\n padding-top: var(--space-md);\n border-top: 1px solid var(--color-border-light);\n}\n\n/* Game Info Card (Story 2.3) */\n.game-info {\n background: var(--color-bg-card);\n border-radius: var(--radius-md);\n padding: var(--space-md);\n margin-bottom: var(--space-md);\n}\n\n.game-info p {\n margin-bottom: var(--space-sm);\n}\n\n.game-info p:last-child {\n margin-bottom: 0;\n}\n\n/* Print Styles (Story 2.3) */\n@media print {\n body * {\n visibility: hidden;\n }\n\n .qr-print-area,\n .qr-print-area * {\n visibility: visible;\n }\n\n .qr-print-area {\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n text-align: center;\n }\n\n #qr-code {\n width: 400px !important;\n height: 400px !important;\n }\n\n #qr-code img,\n #qr-code canvas {\n width: 400px !important;\n height: 400px !important;\n }\n\n .qr-instruction {\n font-size: var(--font-size-2xl);\n font-weight: var(--font-weight-bold);\n margin-top: var(--space-xl);\n }\n\n .join-url {\n font-size: var(--font-size-base);\n font-family: var(--font-mono);\n margin-top: var(--space-sm);\n }\n\n .no-print {\n display: none !important;\n }\n}\n\n/* ==========================================\n Player Page Styles (Story 2.4)\n ========================================== */\n\n.player-container {\n max-width: 500px;\n margin: 0 auto;\n /* Edge-to-edge layout with safe area support (Story 9.6) */\n padding-top: max(var(--space-md), env(safe-area-inset-top));\n padding-bottom: max(var(--space-md), env(safe-area-inset-bottom));\n padding-left: max(var(--space-sm), env(safe-area-inset-left));\n padding-right: max(var(--space-sm), env(safe-area-inset-right));\n text-align: center;\n min-height: 100vh;\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n}\n\n/* Tablet breakpoint - center content (Story 9.6) */\n@media (min-width: 768px) {\n .player-container {\n max-width: 480px;\n margin-left: auto;\n margin-right: auto;\n padding-left: var(--space-lg);\n padding-right: var(--space-lg);\n }\n}\n\n.view {\n display: block;\n overflow-x: hidden;\n}\n\n.view.hidden {\n display: none;\n}\n\n.error-icon {\n font-size: var(--font-size-timer);\n margin-bottom: var(--space-md);\n}\n\n.player-container h1 {\n margin-bottom: var(--space-sm);\n color: var(--color-text-primary);\n}\n\n.player-container p {\n color: var(--color-text-muted);\n margin-bottom: var(--space-sm);\n}\n\n.hint {\n font-size: var(--font-size-base);\n color: var(--color-text-light);\n}\n\n.coming-soon {\n font-style: italic;\n color: var(--color-text-muted);\n}\n\n.spinner {\n width: 40px;\n height: 40px;\n margin: 0 auto var(--space-md);\n border: 4px solid var(--color-bg-card-alt);\n border-top: 4px solid var(--color-accent-blue);\n border-radius: 50%;\n animation: spin 1s linear infinite;\n}\n\n@keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n}\n\n/* ==========================================\n Responsive QR Sizing (Story 2.4)\n ========================================== */\n\n/* Mobile default - minimum 250px */\n#qr-code {\n max-width: 100%;\n}\n\n#qr-code img,\n#qr-code canvas {\n max-width: 100%;\n height: auto;\n}\n\n/* Tablet (481-768px): 280px QR code */\n@media (min-width: 481px) and (max-width: 768px) {\n .qr-container {\n padding: var(--space-xl);\n }\n}\n\n/* Desktop (>768px): 350px QR code */\n@media (min-width: 769px) {\n .qr-container {\n padding: var(--space-lg);\n }\n}\n\n/* ==========================================\n Join Form Styles (Story 3.1)\n ========================================== */\n\n.join-form {\n max-width: 400px;\n margin: 0 auto;\n padding: var(--space-lg);\n text-align: center;\n}\n\n.join-form h1 {\n margin-bottom: var(--space-sm);\n font-size: var(--font-size-2xl);\n}\n\n.join-form > p {\n margin-bottom: var(--space-lg);\n color: var(--color-text-muted);\n}\n\n.form-group {\n margin-bottom: var(--space-md);\n}\n\n.name-input {\n width: 100%;\n padding: 14px var(--space-md);\n font-size: var(--font-size-lg);\n border: 2px solid var(--color-border-medium);\n border-radius: var(--radius-md);\n min-height: 48px;\n box-sizing: border-box;\n}\n\n.name-input:focus {\n border-color: var(--color-accent-blue);\n outline: none;\n box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n}\n\n.join-btn {\n width: 100%;\n min-height: 48px;\n font-size: var(--font-size-lg);\n font-weight: var(--font-weight-semibold);\n}\n\n.validation-msg {\n margin-top: var(--space-sm);\n font-size: var(--font-size-base);\n color: var(--color-error);\n text-align: left;\n}\n\n/* ==========================================\n Lobby Styles (Story 3.3)\n ========================================== */\n\n.lobby-container {\n max-width: 500px;\n margin: 0 auto;\n padding: var(--space-lg) var(--space-md);\n}\n\n.lobby-header {\n text-align: center;\n margin-bottom: var(--space-lg);\n}\n\n.lobby-header h1 {\n font-size: var(--font-size-2xl);\n margin-bottom: var(--space-sm);\n color: var(--color-text-primary);\n}\n\n.player-count {\n font-size: var(--font-size-md);\n color: var(--color-text-muted);\n}\n\n/* Player List */\n.player-list {\n display: flex;\n flex-direction: column;\n gap: var(--space-sm);\n margin-bottom: var(--space-lg);\n}\n\n.player-card {\n display: flex;\n align-items: center;\n padding: var(--space-sm) var(--space-md);\n min-height: 48px;\n background: var(--color-bg-card);\n border-radius: var(--radius-md);\n border: 1px solid var(--color-border-light);\n transition: all var(--transition-normal);\n}\n\n.player-card--you {\n background: #eff6ff;\n border-color: var(--color-accent-blue);\n}\n\n.player-card--disconnected {\n opacity: 0.5;\n filter: grayscale(0.3);\n transition: opacity 0.3s ease, filter 0.3s ease;\n}\n\n.away-badge {\n font-size: var(--font-size-sm);\n color: var(--color-text-muted);\n font-style: italic;\n margin-left: var(--space-xs);\n}\n\n.player-name {\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n font-size: var(--font-size-md);\n color: var(--color-text-primary);\n}\n\n.you-badge {\n font-size: var(--font-size-sm);\n color: var(--color-accent-blue);\n font-weight: var(--font-weight-medium);\n}\n\n/* New player animation */\n.player-card.is-new {\n animation: playerJoin var(--transition-slow) ease-out;\n background: #ecfdf5;\n border-color: var(--color-success);\n}\n\n@keyframes playerJoin {\n from {\n opacity: 0;\n transform: translateY(-10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n/* Story 18.2: Virtual scrolling for player lists */\n.player-list--virtual {\n position: relative;\n overflow-y: auto;\n max-height: 320px;\n -webkit-overflow-scrolling: touch;\n contain: layout style paint;\n}\n\n.player-list--virtual .virtual-spacer-top,\n.player-list--virtual .virtual-spacer-bottom {\n flex-shrink: 0;\n pointer-events: none;\n}\n\n.player-list--virtual .virtual-content-wrapper {\n display: flex;\n flex-direction: column;\n gap: var(--space-sm);\n}\n\n.player-list--virtual .player-card {\n flex-shrink: 0;\n height: 52px;\n box-sizing: border-box;\n}\n\n/* QR Share Area (Story 3.4) */\n.qr-share-area {\n text-align: center;\n padding: var(--space-lg) var(--space-md);\n background: var(--color-bg-card);\n border-radius: var(--radius-lg);\n margin-bottom: var(--space-md);\n}\n\n.qr-icon {\n font-size: var(--font-size-xl);\n}\n\n.qr-container {\n display: inline-block;\n padding: var(--space-sm);\n background: var(--color-bg-white);\n border-radius: var(--radius-md);\n box-shadow: var(--shadow-md);\n cursor: pointer;\n min-width: 150px;\n min-height: 150px;\n transition: transform var(--transition-fast);\n}\n\n.qr-container:hover,\n.qr-container:focus {\n transform: scale(1.02);\n outline: 2px solid var(--color-accent-blue);\n outline-offset: 2px;\n}\n\n.qr-container img {\n display: block;\n width: 100%;\n height: auto;\n}\n\n.qr-hint {\n margin-top: var(--space-sm);\n font-size: 13px;\n color: var(--color-text-muted);\n}\n\n/* QR Share Section - Collapsible (Story 18.8) */\n.qr-collapsible {\n /* Override base qr-share-area padding for collapsible */\n padding: 0;\n}\n\n.qr-share-header {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--space-sm);\n padding: var(--space-md);\n cursor: pointer;\n user-select: none;\n list-style: none; /* Remove default marker */\n font-size: var(--font-size-md);\n font-weight: 600;\n color: var(--color-text-primary);\n min-height: 44px; /* Touch target */\n}\n\n.qr-share-header::-webkit-details-marker {\n display: none; /* Hide Safari default marker */\n}\n\n.qr-share-chevron {\n margin-left: var(--space-sm);\n transition: transform var(--transition-normal);\n font-size: 0.8rem;\n color: var(--color-text-muted);\n}\n\n.qr-collapsible[open] .qr-share-chevron {\n transform: rotate(180deg);\n}\n\n.qr-share-content {\n padding: 0 var(--space-md) var(--space-lg);\n animation: qrSlideDown var(--transition-normal) ease-out;\n}\n\n@keyframes qrSlideDown {\n from {\n opacity: 0;\n transform: translateY(-8px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n/* Collapsed state - just show header */\n.qr-collapsible:not([open]) {\n padding-bottom: 0;\n}\n\n.qr-collapsible:not([open]) .qr-share-header {\n padding-bottom: var(--space-md);\n}\n\n/* Reduced motion preference */\n@media (prefers-reduced-motion: reduce) {\n .qr-share-chevron {\n transition: none;\n }\n .qr-share-content {\n animation: none;\n }\n}\n\n/* Dashboard Hint (Story 16.4) */\n.dashboard-hint-container {\n margin-top: var(--space-md);\n text-align: center;\n}\n\n.dashboard-hint-text {\n display: inline-flex;\n flex-direction: column;\n align-items: center;\n gap: var(--space-xs);\n font-size: var(--font-size-sm);\n color: #ffffff;\n background: var(--color-surface-dark);\n padding: var(--space-sm) var(--space-md);\n border-radius: var(--radius-md);\n margin: 0;\n}\n\n.dashboard-hint-label {\n display: flex;\n align-items: center;\n gap: var(--space-xs);\n color: white;\n}\n\n.dashboard-hint-icon {\n font-size: var(--font-size-base);\n}\n\n.dashboard-hint-url {\n font-family: monospace;\n color: var(--color-accent-secondary);\n font-size: var(--font-size-sm);\n}\n\n/* QR Modal (Story 3.4) */\n.qr-modal {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: var(--z-modal);\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.qr-modal.hidden {\n display: none;\n}\n\n.qr-modal-backdrop {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.75);\n}\n\n.qr-modal-content {\n position: relative;\n background: var(--color-bg-white);\n padding: var(--space-xl) var(--space-lg);\n border-radius: var(--radius-xl);\n text-align: center;\n max-width: 90vw;\n max-height: 90vh;\n animation: modalFadeIn var(--transition-fast);\n}\n\n@keyframes modalFadeIn {\n from {\n opacity: 0;\n transform: scale(0.95);\n }\n to {\n opacity: 1;\n transform: scale(1);\n }\n}\n\n.qr-modal-code {\n display: inline-block;\n padding: var(--space-md);\n background: var(--color-bg-white);\n border-radius: var(--radius-md);\n min-width: 250px;\n}\n\n.qr-modal-code img {\n display: block;\n width: 100%;\n max-width: 80vw;\n height: auto;\n}\n\n.qr-modal-label {\n margin: var(--space-md) 0;\n font-size: var(--font-size-lg);\n color: var(--color-text-primary);\n}\n\n.qr-modal-close {\n min-width: 120px;\n min-height: 48px;\n}\n\n/* Screen reader only */\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n border: 0;\n}\n\n/* Lobby Status */\n.lobby-status {\n text-align: center;\n padding: var(--space-md);\n color: var(--color-text-muted);\n}\n\n/* How to Play Section (Story 18.7) */\n.how-to-play {\n margin: var(--space-md) 0;\n background: var(--color-bg-card);\n border-radius: var(--radius-md);\n border: 1px solid var(--color-border-light);\n}\n\n.how-to-play-header {\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n padding: var(--space-md);\n cursor: pointer;\n user-select: none;\n list-style: none;\n font-weight: 600;\n color: var(--color-text-primary);\n min-height: 44px;\n}\n\n.how-to-play-header::-webkit-details-marker {\n display: none;\n}\n\n.how-to-play-icon {\n font-size: 1.2rem;\n}\n\n.how-to-play-chevron {\n margin-left: auto;\n transition: transform var(--transition-normal);\n font-size: 0.8rem;\n color: var(--color-text-secondary);\n}\n\n.how-to-play[open] .how-to-play-chevron {\n transform: rotate(180deg);\n}\n\n.how-to-play-content {\n padding: 0 var(--space-md) var(--space-md);\n animation: howToPlaySlideDown var(--transition-normal) ease-out;\n}\n\n.how-to-play-steps {\n margin: 0;\n padding: 0;\n list-style: none;\n color: var(--color-text-secondary);\n font-size: 0.9rem;\n line-height: 1.6;\n counter-reset: step-counter;\n}\n\n.how-to-play-steps li {\n margin-bottom: var(--space-sm);\n padding-left: var(--space-lg);\n position: relative;\n counter-increment: step-counter;\n}\n\n.how-to-play-steps li::before {\n content: counter(step-counter) \".\";\n position: absolute;\n left: 0;\n width: var(--space-md);\n text-align: right;\n font-weight: 600;\n color: var(--color-text-primary);\n}\n\n.how-to-play-steps li:last-child {\n margin-bottom: 0;\n}\n\n@keyframes howToPlaySlideDown {\n from {\n opacity: 0;\n transform: translateY(-8px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n/* Leave Game Container (Story 11.5, Story 18.6) */\n.leave-game-container {\n text-align: center;\n padding: var(--space-md);\n /* Story 18.6: Sticky positioning for mobile */\n position: sticky;\n bottom: 0;\n background: linear-gradient(to top, var(--color-bg-card), transparent);\n z-index: var(--z-controls, 10);\n}\n\n.leave-game-container.hidden {\n display: none;\n}\n\n/* Story 18.6: Remove gradient background in dark theme (matching admin-controls) */\nbody.theme-dark .leave-game-container {\n background: transparent;\n}\n\n.btn-leave {\n opacity: 0.7;\n transition: opacity 0.2s ease;\n}\n\n.btn-leave:hover {\n opacity: 1;\n}\n\n/* Admin Controls (Story 3.5) */\n.admin-controls {\n padding: var(--space-lg) var(--space-md);\n text-align: center;\n background: linear-gradient(to top, var(--color-bg-card), transparent);\n position: sticky;\n bottom: 0;\n}\n\n.admin-controls.hidden {\n display: none;\n}\n\n/* Story 9.10: Remove gradient background in dark theme */\nbody.theme-dark .admin-controls {\n background: transparent;\n}\n\n.btn-large {\n min-height: 56px;\n font-size: var(--font-size-xl);\n padding: var(--space-md) var(--space-xl);\n}\n\n.btn-full-width {\n width: 100%;\n}\n\n/* .btn-icon margin removed - .btn already uses flexbox gap for spacing */\n\n.admin-hint {\n margin-top: var(--space-sm);\n font-size: var(--font-size-base);\n color: var(--color-text-muted);\n}\n\n/* Admin page modal and actions */\n.admin-lobby-actions {\n text-align: center;\n margin-top: var(--space-lg);\n}\n\n/* Admin badge styling (Story 16.8) */\n.admin-badge {\n font-size: var(--font-size-sm);\n color: var(--color-warning);\n margin-left: var(--space-xs);\n}\n\n/* Player count styling for admin lobby (legacy - kept for backwards compat) */\n.lobby-player-count-container {\n text-align: center;\n margin-bottom: var(--space-md);\n}\n\n/* =====================================================\n Admin Lobby - Analytics Layout (Story 2.3 restructure)\n ===================================================== */\n\n/* Lobby Stats Grid - 2 column layout like analytics */\n.lobby-stats-grid {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: var(--space-md);\n margin-bottom: var(--space-lg);\n}\n\n/* Clickable stat card (dashboard link) */\n.stat-card--clickable {\n display: block;\n text-decoration: none;\n cursor: pointer;\n margin-bottom: var(--space-lg);\n}\n\n.stat-card--clickable:hover {\n border-color: var(--color-accent-secondary);\n}\n\n.dashboard-hint-card {\n background: rgba(0, 245, 255, 0.05);\n border-color: var(--color-accent-secondary);\n}\n\n/* QR Section - centered card with consistent styling */\n.qr-section {\n text-align: center;\n padding: var(--space-xl) var(--space-lg);\n background: var(--color-surface-dark);\n border: 1px solid var(--color-border-neon);\n border-radius: var(--radius-md);\n margin-bottom: var(--space-lg);\n}\n\n.qr-section .qr-container {\n display: inline-block;\n padding: var(--space-md);\n background: #ffffff;\n border-radius: var(--radius-md);\n margin-bottom: var(--space-md);\n}\n\n.qr-hint {\n font-size: 1rem;\n color: var(--color-text-neon-muted);\n margin-bottom: var(--space-sm);\n}\n\n.qr-url-display {\n font-family: 'Outfit', sans-serif;\n font-size: 1.125rem;\n font-weight: 600;\n color: var(--color-accent-secondary);\n word-break: break-all;\n}\n\n/* Player List Section - consistent with analytics sections */\n.player-list-section {\n background: var(--color-surface-dark);\n border: 1px solid var(--color-border-neon);\n border-radius: var(--radius-md);\n padding: var(--space-md);\n margin-bottom: var(--space-lg);\n}\n\n.section-subheader {\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n font-size: 1rem;\n font-weight: 600;\n color: var(--color-text-white);\n margin-bottom: var(--space-md);\n}\n\n.section-subheader .section-icon {\n font-size: 1.25rem;\n}\n\n/* Player Cards Grid - responsive grid layout */\n.player-cards-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));\n gap: var(--space-sm);\n}\n\n/* Player card in grid layout */\n.player-cards-grid .player-card {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: var(--space-md);\n min-height: 80px;\n background: var(--color-dark-surface);\n border: 1px solid var(--color-border-neon);\n border-radius: var(--radius-md);\n text-align: center;\n transition: transform 0.2s ease, box-shadow 0.2s ease, border-color 0.2s ease;\n}\n\n.player-cards-grid .player-card:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 12px rgba(157, 78, 221, 0.2);\n}\n\n.player-cards-grid .player-card.is-new {\n background: rgba(57, 255, 20, 0.1);\n border-color: var(--color-success-neon);\n animation: playerCardJoin 0.5s ease-out;\n}\n\n@keyframes playerCardJoin {\n from {\n opacity: 0;\n transform: scale(0.9);\n }\n to {\n opacity: 1;\n transform: scale(1);\n }\n}\n\n.player-cards-grid .player-card--disconnected {\n opacity: 0.5;\n filter: grayscale(0.3);\n}\n\n.player-cards-grid .player-name {\n font-size: var(--font-size-md);\n font-weight: 600;\n color: var(--color-text-white);\n margin-bottom: var(--space-xs);\n display: flex;\n align-items: center;\n gap: var(--space-xs);\n flex-wrap: wrap;\n justify-content: center;\n}\n\n.player-cards-grid .admin-badge {\n font-size: 1rem;\n}\n\n.player-cards-grid .away-badge {\n font-size: var(--font-size-xs);\n color: var(--color-text-neon-muted);\n display: block;\n width: 100%;\n}\n\n/* Kick player button for disconnected players (#659) */\n.kick-player-btn {\n position: relative;\n background: none;\n border: 1px solid var(--color-border-dark);\n color: var(--color-text-muted);\n width: 24px;\n height: 24px;\n border-radius: 50%;\n font-size: 1rem;\n line-height: 1;\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n margin-top: var(--space-xs);\n padding: 0;\n transition: all 0.15s ease;\n}\n\n/* #1759: expand the tap target to the 44px iOS/Android guideline without\n growing the 24px visual, so it's reliably hittable inside the tappable row. */\n.kick-player-btn::after {\n content: '';\n position: absolute;\n top: 50%;\n left: 50%;\n width: 44px;\n height: 44px;\n transform: translate(-50%, -50%);\n}\n\n.kick-player-btn:hover {\n background: var(--color-error);\n color: white;\n border-color: var(--color-error);\n}\n\n/* Lobby Actions */\n.lobby-actions {\n margin-top: var(--space-lg);\n padding-top: var(--space-md);\n border-top: 1px solid var(--color-border-dark);\n}\n\n/* =====================================================\n Mobile-Optimized Compact Lobby Layout\n ===================================================== */\n\n/* Compact header with inline badges */\n.lobby-header-compact {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n gap: var(--space-sm);\n margin-bottom: var(--space-md);\n text-align: left;\n}\n\n.section-header--inline {\n margin-bottom: 0;\n flex: 1;\n min-width: 120px;\n text-align: left;\n}\n\n/* Stat Badge Bar */\n.stat-badge-bar {\n display: flex;\n align-items: center;\n gap: var(--space-md);\n}\n\n.stat-badge {\n display: flex;\n align-items: center;\n gap: var(--space-xs);\n padding: var(--space-xs) var(--space-sm);\n background: rgba(255, 255, 255, 0.05);\n border: 1px solid var(--color-border-neon);\n border-radius: var(--radius-md);\n font-size: 0.875rem;\n}\n\n.stat-badge-icon {\n font-size: 1rem;\n}\n\n.stat-badge-value {\n font-weight: 600;\n color: var(--color-accent-secondary);\n}\n\n.stat-badge--status .stat-badge-value {\n color: var(--color-text-white);\n}\n\n/* Compact QR Section */\n.qr-section--compact {\n padding: var(--space-md);\n margin-bottom: var(--space-md);\n}\n\n.qr-section--compact .qr-container {\n padding: var(--space-sm);\n margin-bottom: var(--space-sm);\n}\n\n.qr-section--compact #qr-code {\n width: 180px !important;\n height: 180px !important;\n}\n\n.qr-section--compact #qr-code img,\n.qr-section--compact #qr-code canvas {\n width: 180px !important;\n height: 180px !important;\n}\n\n.qr-section--compact .qr-hint {\n font-size: 0.875rem;\n margin-bottom: var(--space-xs);\n}\n\n.qr-url-display--compact {\n font-size: 0.75rem;\n margin-bottom: var(--space-sm);\n}\n\n/* Inline Dashboard Link */\n.dashboard-link {\n display: inline-flex;\n align-items: center;\n gap: var(--space-xs);\n padding: var(--space-xs) var(--space-sm);\n background: rgba(0, 245, 255, 0.1);\n border: 1px solid var(--color-accent-secondary);\n border-radius: var(--radius-md);\n color: var(--color-accent-secondary);\n text-decoration: none;\n font-size: 0.875rem;\n transition: all 0.2s ease;\n}\n\n.dashboard-link:hover {\n background: rgba(0, 245, 255, 0.2);\n}\n\n.dashboard-link-arrow {\n opacity: 0.7;\n}\n\n/* Compact Player List */\n.player-list-section--compact {\n padding: var(--space-sm);\n margin-bottom: var(--space-sm);\n}\n\n.section-subheader--compact {\n font-size: 0.875rem;\n margin-bottom: var(--space-sm);\n}\n\n/* Inline Empty State */\n.empty-state-inline {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--space-sm);\n padding: var(--space-md);\n color: var(--color-text-neon-muted);\n font-size: 0.875rem;\n text-align: center;\n}\n\n/* Sticky Lobby Actions */\n.lobby-actions--sticky {\n position: sticky;\n bottom: 0;\n margin: 0 calc(-1 * var(--space-md));\n padding: var(--space-sm) var(--space-md);\n background: var(--color-bg-primary);\n border-top: 1px solid var(--color-border-dark);\n z-index: 10;\n display: flex;\n flex-direction: column;\n gap: var(--space-sm, 8px);\n}\n\n/* Desktop: Keep larger layout */\n@media (min-width: 481px) {\n .qr-section--compact #qr-code,\n .qr-section--compact #qr-code img,\n .qr-section--compact #qr-code canvas {\n width: 240px !important;\n height: 240px !important;\n }\n\n .qr-section--compact {\n padding: var(--space-lg);\n }\n\n .lobby-actions--sticky {\n position: relative;\n margin: var(--space-lg) 0 0 0;\n padding: var(--space-md) 0 0 0;\n background: transparent;\n }\n}\n\n/* =====================================================\n Lobby View - Shared Styles (Admin & Player)\n ===================================================== */\n\n/* Lobby Wordmark Header (without analytics icon) */\n.lobby-wordmark-header {\n display: flex;\n justify-content: center;\n align-items: center;\n padding: var(--space-md) var(--space-md) var(--space-sm);\n padding-top: env(safe-area-inset-top, 16px);\n}\n\n.lobby-wordmark-header .wordmark {\n font-size: 2rem;\n}\n\n/* Compact Lobby Container */\n.lobby-container--compact {\n flex: 1;\n padding: 0 var(--space-sm) var(--space-2xl);\n max-width: 500px;\n margin: 0 auto;\n width: 100%;\n}\n\n/* Lobby sections use the same collapsible pattern */\n.lobby-container--compact .section-collapsible {\n background: var(--color-surface-dark);\n border: 1px solid var(--color-border-neon);\n border-radius: var(--radius-md);\n margin-bottom: var(--space-md);\n overflow: hidden;\n}\n\n.lobby-container--compact .section-header-collapsible {\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n width: 100%;\n padding: var(--space-sm) var(--space-md);\n background: transparent;\n border: none;\n color: var(--color-text-white);\n font-size: 0.875rem;\n font-weight: 600;\n cursor: pointer;\n text-align: left;\n}\n\n.lobby-container--compact .section-header-collapsible .section-icon {\n font-size: 1rem;\n}\n\n.lobby-container--compact .section-summary {\n margin-left: auto;\n font-size: 0.75rem;\n font-weight: 400;\n color: var(--color-text-neon-muted);\n padding: 2px 8px;\n background: rgba(255, 255, 255, 0.05);\n border-radius: var(--radius-sm);\n}\n\n.lobby-container--compact .section-toggle {\n font-size: 0.625rem;\n color: var(--color-text-neon-muted);\n transition: transform 0.2s ease;\n margin-left: var(--space-sm);\n}\n\n/* Push toggle to right when no summary present (toggle is 3rd child) */\n.lobby-container--compact .section-header-collapsible > .section-toggle:nth-child(3) {\n margin-left: auto;\n}\n\n.lobby-container--compact .section-collapsible:not(.collapsed) .section-toggle {\n transform: rotate(180deg);\n}\n\n.lobby-container--compact .section-content {\n padding: 0 var(--space-md) var(--space-md);\n}\n\n.lobby-container--compact .section-collapsible.collapsed .section-content {\n display: none;\n}\n\n/* Compact Status (for non-admin players) */\n.lobby-status-compact {\n text-align: center;\n padding: var(--space-md);\n color: var(--color-text-neon-muted);\n font-size: 0.875rem;\n}\n\n/* Compact How to Play Steps */\n.how-to-play-steps-compact {\n list-style: decimal;\n padding-left: var(--space-lg);\n margin: 0;\n font-size: 0.875rem;\n color: var(--color-text-neon-muted);\n}\n\n.how-to-play-steps-compact li {\n padding: var(--space-xs) 0;\n}\n\n/* Stat Badge for Difficulty */\n.stat-badge--difficulty {\n font-size: 0.75rem;\n text-transform: uppercase;\n letter-spacing: 0.03em;\n}\n\n.stat-badge--difficulty:empty {\n display: none;\n}\n\n/* =====================================================\n Admin Page - Collapsible Sections & Compact Controls\n ===================================================== */\n\n/* Collapsible sections for admin (reuse analytics pattern) */\n.admin-content .section-collapsible {\n background: var(--color-surface-dark);\n border: 1px solid var(--color-border-neon);\n border-radius: var(--radius-md);\n margin-bottom: var(--space-md);\n overflow: hidden;\n}\n\n.admin-content .section-header-collapsible {\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n width: 100%;\n padding: var(--space-sm) var(--space-md);\n background: transparent;\n border: none;\n color: var(--color-text-white);\n font-size: 0.875rem;\n font-weight: 600;\n cursor: pointer;\n text-align: left;\n}\n\n.admin-content .section-header-collapsible .section-icon {\n font-size: 1rem;\n}\n\n.admin-content .section-header-collapsible .section-summary {\n margin-left: auto;\n font-size: 0.75rem;\n font-weight: 400;\n color: var(--color-accent-secondary);\n background: rgba(0, 245, 255, 0.1);\n padding: 2px 8px;\n border-radius: var(--radius-sm);\n}\n\n.admin-content .section-header-collapsible .section-toggle {\n margin-left: var(--space-sm);\n font-size: 0.625rem;\n color: var(--color-text-neon-muted);\n transition: transform 0.2s ease;\n}\n\n.admin-content .section-collapsible:not(.collapsed) .section-toggle {\n transform: rotate(180deg);\n}\n\n.admin-content .section-collapsible .section-content {\n padding: 0 var(--space-md) var(--space-md);\n}\n\n.admin-content .section-collapsible.collapsed .section-content {\n display: none;\n}\n\n/* Setting rows - compact horizontal layout */\n.setting-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: var(--space-xs) 0;\n border-bottom: 1px solid rgba(255, 255, 255, 0.05);\n}\n\n.setting-row:last-child {\n border-bottom: none;\n}\n\n.setting-group {\n border-bottom: 1px solid rgba(255, 255, 255, 0.05);\n padding-bottom: var(--space-sm);\n margin-bottom: var(--space-sm);\n}\n\n.setting-group:last-child {\n border-bottom: none;\n}\n\n.setting-group .setting-row {\n border-bottom: none;\n}\n\n.tts-group-title {\n font-size: 0.7rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--color-text-muted);\n margin: 0 0 var(--space-xs) 0;\n opacity: 0.8;\n}\n\n.setting-hint {\n font-size: 0.7rem;\n color: var(--color-text-muted);\n margin: 0 0 var(--space-xs) calc(var(--space-xs) + 24px);\n line-height: 1.3;\n opacity: 0.75;\n}\n\nbody.theme-dark .setting-hint {\n color: var(--color-text-neon-muted);\n}\n\n/* #1138 cleanup: .ha-entity-list rules removed with the legacy flat\n #ha-entities info section (deleted from admin.html). */\n\n.setting-label {\n display: flex;\n align-items: center;\n gap: var(--space-xs);\n font-size: 0.875rem;\n color: var(--color-text-white);\n}\n\n.setting-icon {\n font-size: 0.875rem;\n}\n\n/* Chip group - compact inline buttons */\n.chip-group {\n display: flex;\n gap: 4px;\n}\n\n.chip {\n padding: 4px 10px;\n font-size: 0.75rem;\n font-weight: 500;\n background: rgba(255, 255, 255, 0.05);\n border: 1px solid var(--color-border-neon);\n border-radius: var(--radius-sm);\n color: var(--color-text-neon-muted);\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.chip:hover {\n background: rgba(255, 255, 255, 0.1);\n color: var(--color-text-white);\n}\n\n.chip.chip--active {\n background: rgba(0, 245, 255, 0.2);\n border-color: var(--color-accent-secondary);\n color: var(--color-accent-secondary);\n}\n\n/* Compact toggle switch */\n.toggle-compact {\n display: flex;\n align-items: center;\n cursor: pointer;\n}\n\n.toggle-compact input {\n position: absolute;\n opacity: 0;\n width: 0;\n height: 0;\n}\n\n.toggle-switch-compact {\n width: 36px;\n height: 20px;\n background: rgba(255, 255, 255, 0.1);\n border-radius: 10px;\n position: relative;\n transition: background 0.2s ease;\n}\n\n.toggle-switch-compact::after {\n content: '';\n position: absolute;\n top: 2px;\n left: 2px;\n width: 16px;\n height: 16px;\n background: var(--color-text-neon-muted);\n border-radius: 50%;\n transition: all 0.2s ease;\n}\n\n.toggle-compact input:checked + .toggle-switch-compact {\n background: rgba(0, 245, 255, 0.3);\n}\n\n.toggle-compact input:checked + .toggle-switch-compact::after {\n left: 18px;\n background: var(--color-accent-secondary);\n}\n\n/* Admin actions - sticky footer */\n.admin-actions {\n position: sticky;\n bottom: 0;\n background: var(--color-bg-primary);\n padding: var(--space-sm) 0;\n margin-top: var(--space-sm);\n}\n\n.admin-actions .status-error {\n margin-bottom: var(--space-xs);\n font-size: 0.875rem;\n}\n\n/* Modal styles */\n.modal {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: var(--z-modal);\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.modal.hidden {\n display: none;\n}\n\n.modal-backdrop {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.5);\n}\n\n.modal-content {\n position: relative;\n background: var(--color-bg-white);\n padding: var(--space-lg);\n border-radius: var(--radius-lg);\n max-width: 400px;\n width: 90%;\n animation: modalFadeIn var(--transition-fast);\n}\n\n.modal-content h2 {\n margin-bottom: var(--space-sm);\n font-size: var(--font-size-xl);\n}\n\n.modal-content p {\n margin-bottom: var(--space-md);\n color: var(--color-text-muted);\n}\n\n.modal-actions {\n display: flex;\n gap: var(--space-sm);\n margin-top: var(--space-lg);\n}\n\n.modal-actions .btn {\n flex: 1;\n}\n\n/* Game placeholder (Epic 4 prep) */\n.game-placeholder {\n text-align: center;\n padding: var(--space-2xl) var(--space-lg);\n}\n\n.game-placeholder h1 {\n font-size: var(--font-size-3xl);\n margin-bottom: var(--space-md);\n color: var(--color-text-primary);\n}\n\n.game-placeholder p {\n font-size: var(--font-size-md);\n color: var(--color-text-muted);\n}\n\n/* Reveal placeholder (Story 3.6 / Epic 4 prep) */\n.reveal-placeholder {\n text-align: center;\n padding: var(--space-2xl) var(--space-lg);\n}\n\n.reveal-placeholder h1 {\n font-size: var(--font-size-4xl);\n margin-bottom: var(--space-md);\n color: var(--color-text-primary);\n}\n\n.reveal-placeholder p {\n font-size: var(--font-size-md);\n color: var(--color-text-muted);\n}\n\n/* End View (Story 3.6) */\n.end-container {\n text-align: center;\n padding: var(--space-2xl) var(--space-lg);\n}\n\n.end-icon {\n font-size: var(--font-size-timer);\n margin-bottom: var(--space-md);\n}\n\n.end-container h1 {\n font-size: var(--font-size-3xl);\n margin-bottom: var(--space-sm);\n color: var(--color-text-primary);\n}\n\n.end-message {\n font-size: var(--font-size-lg);\n color: #4b5563;\n margin-bottom: var(--space-sm);\n}\n\n/* ==========================================\n Game View Styles (Story 4.2)\n ========================================== */\n\n/* Game View Container */\n.game-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n /* Edge-to-edge with minimal padding (Story 9.6) */\n padding: var(--space-sm);\n padding-bottom: max(var(--space-md), env(safe-area-inset-bottom));\n max-width: 400px;\n margin: 0 auto;\n}\n\n/* Sticky bar: Round info + Timer always visible (Issue #654) */\n.game-sticky-bar {\n position: sticky;\n top: 0;\n z-index: 50;\n width: 100%;\n padding: var(--space-xs) var(--space-sm);\n background: var(--color-bg-light);\n border-bottom: 1px solid var(--color-border-light);\n}\n\nbody.theme-dark .game-sticky-bar {\n background: var(--color-bg-primary);\n border-bottom-color: var(--color-border-dark);\n}\n\n.game-sticky-bar .timer-container {\n margin-bottom: 0;\n}\n\n.game-sticky-bar .timer {\n font-size: 2rem;\n}\n\n/* Game Header - Compact (matches lobby header pattern) */\n.game-header-compact {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n margin-bottom: var(--space-sm);\n padding: 0 var(--space-xs);\n}\n\n.game-header-left {\n display: flex;\n align-items: center;\n gap: var(--space-xs);\n}\n\n.game-header-left .section-icon {\n font-size: 1rem;\n}\n\n.round-indicator-text {\n font-size: var(--font-size-sm);\n font-weight: 600;\n color: var(--color-text-white);\n}\n\n/* Steal badge styling */\n.stat-badge--steal {\n background: linear-gradient(135deg, var(--color-purple-primary), var(--color-purple-secondary, #9333ea));\n animation: steal-badge-pulse 2s ease-in-out infinite;\n}\n\n@keyframes steal-badge-pulse {\n 0%, 100% {\n box-shadow: 0 0 8px rgba(147, 51, 234, 0.5);\n }\n 50% {\n box-shadow: 0 0 12px rgba(147, 51, 234, 0.8);\n }\n}\n\n/* Last Round Banner - Inline */\n.last-round-banner {\n background: linear-gradient(135deg, var(--color-warning), var(--color-warning-dark));\n color: var(--color-text-white);\n padding: var(--space-xs) var(--space-md);\n border-radius: var(--radius-md);\n font-size: var(--font-size-sm);\n font-weight: var(--font-weight-semibold);\n margin-bottom: var(--space-sm);\n text-align: center;\n width: 100%;\n animation: pulse 2s infinite;\n}\n\n/* Intro Round Badge (Issue #23) */\n.intro-badge {\n display: inline-flex;\n align-items: center;\n gap: var(--space-sm);\n padding: var(--space-sm) var(--space-lg);\n background: linear-gradient(135deg, #ffd700, #ff6b00);\n color: #000;\n border-radius: var(--radius-pill);\n font-size: var(--font-size-lg);\n font-weight: var(--font-weight-bold);\n text-transform: uppercase;\n letter-spacing: 1px;\n animation: intro-pulse 1.5s ease-in-out infinite;\n margin-bottom: var(--space-md);\n box-shadow: 0 0 20px rgba(255, 215, 0, 0.5), 0 0 40px rgba(255, 107, 0, 0.3);\n}\n\n/* Intro Splash Overlay */\n.intro-splash {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: 9999;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(0, 0, 0, 0.85);\n animation: intro-splash-in 0.3s ease-out, intro-splash-out 0.5s ease-in 1.5s forwards;\n pointer-events: none;\n}\n\n.intro-splash-content {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n animation: intro-splash-scale 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);\n}\n\n.intro-splash-icon {\n font-size: 80px;\n filter: drop-shadow(0 0 30px rgba(255, 215, 0, 0.8));\n}\n\n.intro-splash-text {\n font-size: 36px;\n font-weight: 900;\n text-transform: uppercase;\n letter-spacing: 4px;\n background: linear-gradient(135deg, #ffd700, #ff6b00);\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n background-clip: text;\n text-shadow: none;\n}\n\n.intro-splash-hint {\n font-size: 18px;\n color: rgba(255, 255, 255, 0.7);\n letter-spacing: 1px;\n}\n\n@keyframes intro-splash-in {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n@keyframes intro-splash-out {\n from { opacity: 1; }\n to { opacity: 0; visibility: hidden; }\n}\n\n@keyframes intro-splash-scale {\n from { transform: scale(0.5); opacity: 0; }\n to { transform: scale(1); opacity: 1; }\n}\n\n.intro-badge-icon {\n font-size: var(--font-size-md);\n}\n\n.intro-badge--large {\n font-size: var(--font-size-lg);\n padding: var(--space-sm) var(--space-lg);\n margin-left: var(--space-md);\n}\n\n.intro-badge--large .intro-badge-icon {\n font-size: var(--font-size-xl);\n}\n\n.intro-badge--stopped {\n background: linear-gradient(135deg, #666, #444);\n color: var(--color-text-white);\n animation: none;\n}\n\n@keyframes intro-pulse {\n 0%, 100% { transform: scale(1); opacity: 1; }\n 50% { transform: scale(1.05); opacity: 0.9; }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .intro-badge {\n animation: none;\n }\n}\n\n/* Issue #442: Closest Wins badge */\n.closest-wins-badge {\n background: linear-gradient(135deg, #00c6ff, #0072ff);\n box-shadow: 0 0 20px rgba(0, 198, 255, 0.5), 0 0 40px rgba(0, 114, 255, 0.3);\n}\n\n/* Issue #442: Highlight closest winner in result cards */\n.result-card.is-closest-winner {\n border: 2px solid #00c6ff;\n box-shadow: 0 0 12px rgba(0, 198, 255, 0.4);\n}\n\n.closest-winner-badge {\n margin-left: var(--space-sm);\n font-size: var(--font-size-sm);\n}\n\n/* Album Cover (compact, matches reveal size) */\n.album-cover-container {\n position: relative;\n width: 150px;\n height: 150px;\n margin-bottom: var(--space-md);\n}\n\n.album-cover {\n width: 100%;\n height: 100%;\n object-fit: cover;\n border-radius: var(--radius-lg);\n box-shadow: var(--shadow-lg);\n filter: blur(20px);\n}\n\n/* Responsive album cover */\n@media (max-width: 360px) {\n .album-cover-container {\n width: 120px;\n height: 120px;\n }\n}\n\n@media (min-width: 768px) {\n .album-cover-container {\n width: 180px;\n height: 180px;\n }\n}\n\n.album-loading {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--color-bg-card-alt);\n border-radius: var(--radius-xl);\n}\n\n.loading-spinner {\n width: 40px;\n height: 40px;\n border: 4px solid var(--color-border-light);\n border-top-color: var(--color-accent-brand);\n border-radius: 50%;\n animation: spin 1s linear infinite;\n}\n\n/* Timer */\n.timer-container {\n margin-bottom: var(--space-lg);\n}\n\n.timer {\n font-size: var(--font-size-timer);\n font-weight: var(--font-weight-bold);\n color: var(--color-text-primary);\n font-variant-numeric: tabular-nums;\n transition: color var(--transition-normal);\n}\n\n.timer--warning {\n color: var(--color-warning);\n animation: timer-pulse-subtle 1s ease-in-out infinite;\n}\n\n.timer--critical {\n color: var(--color-error);\n animation: timer-pulse-intense 0.5s ease-in-out infinite;\n}\n\n/* Timer animations */\n@keyframes timer-pulse-subtle {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.8; }\n}\n\n@keyframes timer-pulse-intense {\n 0%, 100% { opacity: 1; transform: scale(1); }\n 50% { opacity: 0.9; transform: scale(1.05); }\n}\n\n/* Reduced motion support for timer */\n@media (prefers-reduced-motion: reduce) {\n .timer--warning,\n .timer--critical {\n animation: none;\n }\n}\n\n/* Submission Tracker (Story 4.4) - Aligned with analytics style */\n.submission-tracker {\n width: 100%;\n margin-bottom: var(--space-md);\n padding: var(--space-sm);\n background: var(--color-surface-dark);\n border: 1px solid var(--color-border-neon);\n border-radius: var(--radius-md);\n}\n\n/* Player Indicators Row */\n.submitted-players {\n display: flex;\n gap: var(--space-sm);\n overflow-x: auto;\n padding: var(--space-xs) 0;\n -webkit-overflow-scrolling: touch;\n scrollbar-width: none; /* Firefox */\n justify-content: center;\n flex-wrap: wrap;\n}\n\n.submitted-players::-webkit-scrollbar {\n display: none; /* Chrome, Safari */\n}\n\n/* Player Indicator */\n.player-indicator {\n display: flex;\n flex-direction: column;\n align-items: center;\n min-width: 48px;\n flex-shrink: 0;\n position: relative;\n}\n\n/* Player badges for bet and steal */\n.player-badge {\n position: absolute;\n width: 16px;\n height: 16px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 10px;\n z-index: 1;\n}\n\n/* Bet badge - upper right */\n.player-badge--bet {\n top: -2px;\n right: 2px;\n background: var(--color-warning);\n}\n\n/* Steal badge - upper left */\n.player-badge--steal {\n top: -2px;\n left: 2px;\n background: linear-gradient(135deg, var(--color-purple-primary), var(--color-purple-secondary, #9333ea));\n}\n\n.player-avatar {\n width: 36px;\n height: 36px;\n border-radius: 50%;\n background: var(--color-border-light);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: var(--font-size-base);\n font-weight: var(--font-weight-semibold);\n color: var(--color-text-muted);\n border: 2px solid transparent;\n transition: all var(--transition-normal);\n}\n\n.player-indicator.is-submitted .player-avatar {\n background: var(--color-success);\n color: var(--color-text-white);\n border-color: var(--color-success-hover);\n animation: submitted-pulse var(--transition-slow) ease-out;\n}\n\n.player-indicator.is-submitted .player-initials {\n display: none;\n}\n\n.player-indicator.is-submitted .player-avatar::after {\n content: '\u2713';\n font-size: var(--font-size-md);\n}\n\n@keyframes submitted-pulse {\n 0% { transform: scale(1); }\n 50% { transform: scale(1.2); }\n 100% { transform: scale(1); }\n}\n\n.player-indicator .player-name {\n font-size: var(--font-size-xs);\n color: var(--color-text-muted);\n max-width: 48px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n text-align: center;\n margin-top: var(--space-xs);\n}\n\n/* Current Player Highlight */\n.player-indicator.is-current-player .player-avatar {\n border-color: var(--color-accent-brand);\n}\n\n.player-indicator.is-current-player .player-name {\n font-weight: var(--font-weight-semibold);\n color: var(--color-accent-brand);\n}\n\n/* Disconnected player indicator (Story 11.4) */\n.player-indicator--disconnected {\n opacity: 0.4;\n}\n\n/* All Submitted State */\n.submission-tracker.all-submitted {\n border-color: var(--color-success);\n background: rgba(16, 185, 129, 0.1);\n}\n\n/* Artist Challenge (Story 20.5) - Uses card-section base */\n.artist-challenge {\n width: 100%;\n}\n\n.artist-challenge .section-header {\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n flex-wrap: wrap;\n}\n\n/* Bonus badge in header */\n.stat-badge--bonus {\n background: rgba(34, 197, 94, 0.15);\n color: var(--color-success);\n font-weight: 700;\n margin-left: auto;\n}\n\n/* Artist options grid */\n.artist-options-grid {\n display: grid;\n grid-template-columns: 1fr 1fr;\n grid-auto-rows: 1fr;\n gap: var(--space-sm);\n}\n\n@media (max-width: 320px) {\n .artist-options-grid {\n grid-template-columns: 1fr;\n }\n}\n\n.artist-option-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 72px;\n padding: var(--space-sm) var(--space-md);\n border: 2px solid var(--color-border);\n border-radius: var(--radius-md);\n background: var(--color-surface);\n color: var(--color-text);\n font-size: var(--font-size-md);\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s ease;\n position: relative;\n}\n\n.artist-option-btn:active {\n transform: scale(0.98);\n}\n\n.artist-option-btn.is-loading {\n animation: artistPulse 1s infinite;\n}\n\n@keyframes artistPulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.6; }\n}\n\n.artist-option-btn.is-correct,\n.artist-option-btn.is-winner {\n background: var(--color-success);\n border-color: var(--color-success);\n color: white;\n}\n\n.artist-option-btn.is-winner {\n box-shadow: var(--glow-primary);\n}\n\n.artist-option-btn.is-wrong {\n animation: artistWrongFlash 0.5s ease;\n}\n\n.artist-option-btn.is-wrong.is-selected {\n background: var(--color-error);\n border-color: var(--color-error);\n color: white;\n animation: none;\n opacity: 0.8;\n}\n\n@keyframes artistWrongFlash {\n 0%, 100% { background: var(--color-surface); }\n 50% { background: rgba(239, 68, 68, 0.3); }\n}\n\n.artist-option-btn.is-disabled {\n opacity: 0.5;\n pointer-events: none;\n}\n\n.artist-points-badge {\n position: absolute;\n right: var(--space-sm);\n font-size: var(--font-size-sm);\n font-weight: 700;\n color: white;\n background: rgba(0, 0, 0, 0.2);\n padding: 2px 6px;\n border-radius: var(--radius-sm);\n}\n\n.artist-result {\n margin-top: var(--space-md);\n padding: var(--space-sm) var(--space-md);\n border-radius: var(--radius-md);\n text-align: center;\n font-weight: 500;\n}\n\n.artist-result.is-winner {\n background: rgba(34, 197, 94, 0.15);\n color: var(--color-success);\n}\n\n.artist-result.is-late {\n background: var(--color-surface-alt, rgba(255, 255, 255, 0.05));\n color: var(--color-text-muted);\n}\n\n/* Dark mode - artist-challenge inherits from card-section */\nbody.theme-dark .artist-option-btn {\n background: rgba(255, 255, 255, 0.05);\n border-color: var(--color-border-neon);\n color: var(--color-text-white);\n}\n\nbody.theme-dark .artist-option-btn:hover {\n background: rgba(255, 255, 255, 0.1);\n}\n\n/* Reduced motion */\n@media (prefers-reduced-motion: reduce) {\n .artist-option-btn.is-loading {\n animation: none;\n opacity: 0.7;\n }\n\n .artist-option-btn.is-wrong {\n animation: none;\n opacity: 0.5;\n }\n}\n\n/* Artist Reveal Section (Story 20.6) */\n.artist-reveal-section {\n padding: var(--space-md);\n margin-bottom: var(--space-md);\n background: var(--color-surface-alt, rgba(255, 255, 255, 0.05));\n border-radius: var(--radius-lg);\n}\n\n/* Center the artist name and winner content, not the header */\n.artist-reveal-section .section-content-padded {\n text-align: center;\n}\n\n.artist-reveal-label {\n font-size: var(--font-size-sm);\n color: var(--color-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: var(--space-xs);\n}\n\n.artist-reveal-name {\n font-size: var(--font-size-xl);\n font-weight: 700;\n color: var(--color-text);\n margin-bottom: var(--space-sm);\n}\n\n.artist-reveal-winner {\n font-size: var(--font-size-md);\n padding: var(--space-xs) var(--space-md);\n border-radius: var(--radius-md);\n display: inline-block;\n}\n\n.artist-reveal-winner.is-you {\n background: rgba(34, 197, 94, 0.15);\n color: var(--color-success);\n font-weight: 600;\n}\n\n.artist-reveal-winner.is-other {\n color: var(--color-text-muted);\n}\n\n.artist-reveal-no-winner {\n color: var(--color-text-muted);\n font-style: italic;\n}\n\n/* Dark mode */\nbody.theme-dark .artist-reveal-section {\n background: var(--color-dark-surface-alt, #16213e);\n}\n\n/* Artist Bonus Row in Score Breakdown (Story 20.6) */\n.artist-bonus-row .result-value {\n color: var(--color-success);\n font-weight: 600;\n}\n\n/* Artist Badge on Player Cards (Story 20.6) */\n.player-card-artist-badge {\n font-size: var(--font-size-xs);\n color: var(--color-success);\n background: rgba(34, 197, 94, 0.1);\n padding: 2px 6px;\n border-radius: var(--radius-sm);\n margin-left: var(--space-xs);\n}\n\n/* ============================================\n Movie Challenge (Issue #28) - Uses card-section base\n ============================================ */\n.movie-challenge {\n width: 100%;\n}\n\n.movie-challenge .section-header {\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n flex-wrap: wrap;\n}\n\n/* Movie options grid - 1 column default (titles are longer) */\n.movie-options-grid {\n display: grid;\n grid-template-columns: 1fr;\n gap: var(--space-sm);\n}\n\n@media (min-width: 480px) {\n .movie-options-grid {\n grid-template-columns: 1fr 1fr;\n }\n}\n\n.movie-option-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 44px;\n padding: var(--space-sm) var(--space-md);\n border: 2px solid var(--color-border);\n border-radius: var(--radius-md);\n background: var(--color-surface);\n color: var(--color-text);\n font-size: var(--font-size-md);\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s ease;\n position: relative;\n text-align: center;\n}\n\n.movie-option-btn:active {\n transform: scale(0.98);\n}\n\n.movie-option-btn.is-loading {\n animation: moviePulse 1s infinite;\n}\n\n@keyframes moviePulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.6; }\n}\n\n.movie-option-btn.is-correct,\n.movie-option-btn.is-winner {\n background: var(--color-success);\n border-color: var(--color-success);\n color: white;\n}\n\n.movie-option-btn.is-winner {\n box-shadow: var(--glow-primary);\n}\n\n.movie-option-btn.is-wrong {\n animation: movieWrongFlash 0.5s ease;\n}\n\n.movie-option-btn.is-wrong.is-selected {\n background: var(--color-error);\n border-color: var(--color-error);\n color: white;\n animation: none;\n opacity: 0.8;\n}\n\n@keyframes movieWrongFlash {\n 0%, 100% { background: var(--color-surface); }\n 50% { background: rgba(239, 68, 68, 0.3); }\n}\n\n.movie-option-btn.is-disabled {\n opacity: 0.5;\n pointer-events: none;\n}\n\n.movie-rank-badge {\n position: absolute;\n right: var(--space-sm);\n font-size: var(--font-size-sm);\n font-weight: 700;\n color: white;\n background: rgba(0, 0, 0, 0.2);\n padding: 2px 6px;\n border-radius: var(--radius-sm);\n}\n\n.movie-result {\n margin-top: var(--space-md);\n padding: var(--space-sm) var(--space-md);\n border-radius: var(--radius-md);\n text-align: center;\n font-weight: 500;\n}\n\n.movie-result.is-winner {\n background: rgba(34, 197, 94, 0.15);\n color: var(--color-success);\n}\n\n.movie-result.is-late {\n background: var(--color-surface-alt, rgba(255, 255, 255, 0.05));\n color: var(--color-text-muted);\n}\n\n/* Dark mode - movie-challenge inherits from card-section */\nbody.theme-dark .movie-option-btn {\n background: rgba(255, 255, 255, 0.05);\n border-color: var(--color-border-neon);\n color: var(--color-text-white);\n}\n\nbody.theme-dark .movie-option-btn:hover {\n background: rgba(255, 255, 255, 0.1);\n}\n\n/* Reduced motion */\n@media (prefers-reduced-motion: reduce) {\n .movie-option-btn.is-loading {\n animation: none;\n opacity: 0.7;\n }\n\n .movie-option-btn.is-wrong {\n animation: none;\n opacity: 0.5;\n }\n}\n\n/* Movie Reveal Section (Issue #28) */\n.movie-reveal-section {\n padding: var(--space-md);\n margin-bottom: var(--space-md);\n background: var(--color-surface-alt, rgba(255, 255, 255, 0.05));\n border-radius: var(--radius-lg);\n}\n\n.movie-reveal-section .section-content-padded {\n text-align: center;\n}\n\n.movie-reveal-name {\n font-size: var(--font-size-xl);\n font-weight: 700;\n color: var(--color-text);\n margin-bottom: var(--space-sm);\n}\n\n.movie-reveal-winners {\n margin-top: var(--space-sm);\n}\n\n.movie-reveal-winners-title {\n font-size: var(--font-size-sm);\n color: var(--color-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: var(--space-xs);\n}\n\n.movie-reveal-winner-entry {\n font-size: var(--font-size-md);\n padding: var(--space-xs) var(--space-md);\n border-radius: var(--radius-md);\n display: inline-block;\n margin: 2px 4px;\n}\n\n.movie-reveal-winner-entry.is-you {\n background: rgba(34, 197, 94, 0.15);\n color: var(--color-success);\n font-weight: 600;\n}\n\n.movie-reveal-winner-entry.is-other {\n color: var(--color-text-muted);\n}\n\n.movie-reveal-no-winner {\n color: var(--color-text-muted);\n font-style: italic;\n font-size: var(--font-size-md);\n padding: var(--space-xs) var(--space-md);\n}\n\n/* Dark mode */\nbody.theme-dark .movie-reveal-section {\n background: var(--color-dark-surface-alt, #16213e);\n}\n\n/* Year Selector (Story 4.3) - Uses card-section base */\n.year-selector-section {\n width: 100%;\n /* Safe area for submit button (Story 9.6) */\n padding-bottom: max(var(--space-md), env(safe-area-inset-bottom));\n}\n\n.year-selector {\n width: 100%;\n}\n\n.year-display {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--space-sm);\n margin-bottom: var(--space-md);\n}\n\n/* +/- buttons for precise year adjustment (Issue #662) */\n.year-adjust-btn {\n width: 48px;\n height: 48px;\n border-radius: 50%;\n border: 2px solid var(--color-border-dark);\n background: transparent;\n color: var(--color-text-white);\n font-size: 1.5rem;\n font-weight: bold;\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n transition: all 0.15s ease;\n -webkit-tap-highlight-color: transparent;\n touch-action: manipulation;\n user-select: none;\n flex-shrink: 0;\n}\n\n.year-adjust-btn:active {\n background: var(--color-accent-primary);\n border-color: var(--color-accent-primary);\n transform: scale(0.95);\n}\n\n.year-adjust-btn:disabled {\n opacity: 0.3;\n pointer-events: none;\n}\n\n#selected-year {\n font-size: var(--font-size-year);\n font-weight: var(--font-weight-bold);\n color: var(--color-text-primary);\n font-variant-numeric: tabular-nums;\n}\n\n/* Slider Container */\n.slider-container {\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n margin-bottom: var(--space-lg);\n}\n\n.slider-label {\n font-size: var(--font-size-sm);\n color: var(--color-text-muted);\n min-width: 40px;\n}\n\n.slider-label--min {\n text-align: right;\n}\n\n.slider-label--max {\n text-align: left;\n}\n\n/* Custom Range Slider */\n.year-slider {\n -webkit-appearance: none;\n appearance: none;\n flex: 1;\n height: var(--space-sm);\n background: var(--color-border-light);\n border-radius: var(--radius-sm);\n outline: none;\n}\n\n.year-slider::-webkit-slider-thumb {\n -webkit-appearance: none;\n appearance: none;\n width: 44px;\n height: 44px;\n background: var(--color-accent-brand);\n border-radius: 50%;\n cursor: pointer;\n border: 4px solid var(--color-bg-white);\n box-shadow: var(--shadow-md);\n transition: transform 0.1s ease;\n}\n\n.year-slider::-webkit-slider-thumb:active {\n transform: scale(1.1);\n}\n\n.year-slider::-moz-range-thumb {\n width: 44px;\n height: 44px;\n background: var(--color-accent-brand);\n border-radius: 50%;\n cursor: pointer;\n border: 4px solid var(--color-bg-white);\n box-shadow: var(--shadow-md);\n}\n\n/* Submit Button */\n.submit-btn {\n width: 100%;\n padding: var(--space-lg) var(--space-lg);\n font-size: var(--font-size-lg);\n font-weight: var(--font-weight-semibold);\n color: var(--color-text-white);\n background: var(--color-accent-brand);\n border: none;\n border-radius: var(--radius-lg);\n cursor: pointer;\n transition: all var(--transition-fast);\n min-height: 56px;\n}\n\n.submit-btn:hover {\n background: var(--color-accent-brand-hover);\n}\n\n.submit-btn:active {\n transform: scale(0.98);\n}\n\n.submit-btn:disabled {\n background: var(--color-text-light);\n cursor: not-allowed;\n transform: none;\n}\n\n.submit-btn.is-loading {\n color: transparent;\n position: relative;\n}\n\n.submit-btn.is-loading::after {\n content: '';\n position: absolute;\n width: 24px;\n height: 24px;\n border: 3px solid var(--color-bg-white);\n border-top-color: transparent;\n border-radius: 50%;\n animation: spin 0.8s linear infinite;\n left: 50%;\n top: 50%;\n margin-left: -12px;\n margin-top: -12px;\n}\n\n.submit-btn.is-error {\n background: var(--color-error);\n}\n\n/* Submitted Confirmation */\n.submitted-confirmation {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--space-sm);\n padding: var(--space-md);\n background: var(--color-success);\n color: var(--color-text-white);\n border-radius: var(--radius-lg);\n font-size: var(--font-size-lg);\n font-weight: var(--font-weight-semibold);\n}\n\n.submitted-confirmation .checkmark {\n font-size: var(--font-size-2xl);\n}\n\n/* Submitted state for slider */\n.year-selector.is-submitted .year-slider {\n pointer-events: none;\n opacity: 0.5;\n}\n\n.year-selector.is-submitted #selected-year {\n color: var(--color-text-muted);\n}\n\n/* Responsive adjustments for Game View */\n@media (max-width: 360px) {\n .album-cover-container {\n max-width: 250px;\n }\n\n .timer {\n font-size: var(--font-size-2xl);\n }\n}\n\n@media (min-width: 768px) {\n .album-cover-container {\n max-width: 350px;\n }\n\n .timer {\n font-size: var(--font-size-hero);\n }\n}\n\n/* Tablet+ breakpoint (min-width for mobile-first) */\n@media (min-width: 768px) {\n body {\n max-width: 800px;\n margin: 0 auto;\n padding: var(--space-lg);\n }\n\n header h1 {\n font-size: var(--font-size-4xl);\n }\n\n .status-section h2,\n .card-section h2 {\n font-size: var(--font-size-lg);\n }\n\n .card-section {\n padding: var(--space-md) var(--space-lg);\n }\n}\n\n/* ============================================\n Reveal View (Story 4.6)\n ============================================ */\n\n.reveal-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: var(--space-lg);\n width: 100%;\n margin: 0 auto;\n text-align: center;\n}\n\n/* Compact Reveal Container */\n.reveal-container--compact {\n padding: var(--space-md);\n gap: var(--space-sm);\n align-items: stretch;\n}\n\n/* Duel Reveal Container (round-reveal v2) \u2014 same stretch/padding behavior as\n --compact so every card-section has the same width. Default .reveal-container\n uses align-items:center which makes cards size to their content. */\n.reveal-container--duel {\n padding: var(--space-md);\n gap: var(--space-sm);\n align-items: stretch;\n text-align: left;\n}\n\n/* Compact Header Bar */\n.reveal-header-compact {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: var(--space-xs) 0;\n margin-bottom: var(--space-xs);\n}\n\n.reveal-header-left {\n display: flex;\n align-items: center;\n gap: var(--space-xs);\n}\n\n.reveal-header-compact .section-icon {\n font-size: 1rem;\n}\n\n.reveal-header-compact .round-indicator-text {\n font-size: 0.875rem;\n color: var(--color-text-neon-muted);\n}\n\n/* Song Hero - Album + Info side by side */\n.reveal-song-hero {\n display: flex;\n align-items: center;\n gap: var(--space-md);\n padding: var(--space-sm);\n background: var(--color-surface-dark);\n border: 1px solid var(--color-border-neon);\n border-radius: var(--radius-md);\n margin-bottom: var(--space-sm);\n}\n\n.reveal-album-cover-compact {\n width: 80px;\n height: 80px;\n object-fit: cover;\n border-radius: var(--radius-md);\n flex-shrink: 0;\n}\n\n.reveal-song-info {\n flex: 1;\n min-width: 0;\n text-align: left;\n}\n\n.reveal-song-info .song-title {\n font-size: 1rem;\n font-weight: 600;\n color: var(--color-text-white);\n margin-bottom: 2px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.reveal-song-info .song-artist {\n font-size: 0.875rem;\n color: var(--color-text-neon-muted);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n/* Year Section with Emotion */\n.reveal-year-section {\n text-align: center;\n padding: var(--space-sm) 0;\n}\n\n.reveal-emotion-inline {\n font-size: 1.25rem;\n font-weight: 700;\n margin-bottom: var(--space-xs);\n animation: reveal-emotion-entrance 0.5s ease-out;\n}\n\n.reveal-year-section .correct-year-label {\n font-size: 0.75rem;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--color-text-neon-muted);\n margin-bottom: var(--space-xs);\n}\n\n.reveal-year-section .correct-year {\n font-size: 3rem;\n}\n\n/* Personal Result - Compact */\n.personal-result-compact {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--space-sm);\n padding: var(--space-sm) var(--space-md);\n background: rgba(0, 245, 255, 0.1);\n border: 1px solid var(--color-border-neon);\n border-radius: var(--radius-md);\n margin-bottom: var(--space-sm);\n}\n\n.result-content-inline {\n font-size: 0.875rem;\n color: var(--color-text-white);\n}\n\n/* Artist Reveal - Compact */\n.artist-reveal-compact {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--space-sm);\n padding: var(--space-sm) var(--space-md);\n background: var(--color-surface-dark);\n border: 1px solid var(--color-border-neon);\n border-radius: var(--radius-md);\n margin-bottom: var(--space-sm);\n}\n\n.artist-reveal-icon {\n font-size: 1rem;\n}\n\n.artist-reveal-name-inline {\n font-weight: 600;\n color: var(--color-accent-secondary);\n}\n\n.artist-reveal-winner-inline {\n font-size: 0.75rem;\n color: var(--color-text-neon-muted);\n}\n\n.artist-reveal-winner-inline::before {\n content: \"\u2022\";\n margin-right: var(--space-xs);\n}\n\n/* Fun Fact Card Section */\n.fun-fact-section {\n text-align: left;\n}\n\n.fun-fact-section .fun-fact-text {\n font-size: 0.875rem;\n color: var(--color-text-white);\n line-height: 1.5;\n margin-bottom: var(--space-sm);\n}\n\n.fun-fact-section .song-rich-info {\n font-size: 0.75rem;\n color: var(--color-text-neon-muted);\n}\n\n/* Consistent section content padding */\n.section-content-padded {\n padding: 0 var(--space-md) var(--space-md);\n}\n\n/* Remove side padding when inside card-section (card already has padding) */\n.card-section .section-content-padded {\n padding: 0 0 var(--space-sm);\n}\n\n/* All Guesses Card Section */\n.guesses-section {\n text-align: left;\n}\n\n.reveal-results-grid {\n width: 100%;\n}\n\n/* Personal Result Card Section */\n.personal-result-section {\n text-align: left;\n}\n\n.personal-result-section .result-row {\n display: flex;\n justify-content: space-between;\n padding: var(--space-xs) 0;\n border-bottom: 1px solid rgba(255, 255, 255, 0.05);\n}\n\n.personal-result-section .result-row:last-child {\n border-bottom: none;\n}\n\n/* Artist Reveal Card Section */\n.artist-reveal-section {\n text-align: left;\n}\n\n.artist-reveal-section .artist-reveal-name {\n font-size: 1.25rem;\n font-weight: 700;\n color: var(--color-accent-secondary);\n margin-bottom: var(--space-xs);\n}\n\n.artist-reveal-section .artist-reveal-winner {\n font-size: 0.875rem;\n color: var(--color-text-neon-muted);\n}\n\n/* Round Analytics Card Section */\n.round-analytics-section {\n width: 100%;\n background: var(--color-surface-dark);\n border: 1px solid var(--color-border-neon);\n border-radius: var(--radius-md);\n overflow: hidden;\n text-align: left;\n}\n\n.round-analytics-section .section-header-collapsible {\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n width: 100%;\n padding: var(--space-sm) var(--space-md);\n background: transparent;\n border: none;\n color: var(--color-text-white);\n font-size: 0.875rem;\n font-weight: 600;\n cursor: pointer;\n text-align: left;\n}\n\n.round-analytics-section .section-header-collapsible .section-icon {\n font-size: 1rem;\n}\n\n.round-analytics-section .section-header-collapsible .section-summary {\n margin-left: auto;\n font-size: 0.75rem;\n font-weight: 400;\n color: var(--color-accent-secondary);\n background: rgba(0, 245, 255, 0.1);\n padding: 2px 8px;\n border-radius: var(--radius-sm);\n}\n\n.round-analytics-section .section-header-collapsible .section-toggle {\n margin-left: var(--space-sm);\n font-size: 0.625rem;\n color: var(--color-text-neon-muted);\n transition: transform 0.2s ease;\n}\n\n.round-analytics-section .section-content {\n padding: 0 var(--space-md) var(--space-sm);\n}\n\n.round-analytics-section.collapsed .section-content {\n display: none;\n}\n\n.round-analytics-section:not(.collapsed) .section-toggle {\n transform: rotate(180deg);\n}\n\n/* Legacy styles preserved */\n.reveal-round-info {\n font-size: var(--font-size-base);\n color: var(--color-text-muted);\n margin-bottom: var(--space-md);\n}\n\n/* Album Cover (smaller for reveal) - legacy */\n.reveal-album {\n margin-bottom: var(--space-lg);\n}\n\n.reveal-album-cover {\n width: 150px;\n height: 150px;\n object-fit: cover;\n border-radius: var(--radius-lg);\n box-shadow: var(--shadow-lg);\n}\n\n/* Correct Year */\n.correct-year-container {\n margin-bottom: var(--space-md);\n}\n\n.correct-year-label {\n font-size: var(--font-size-md);\n color: var(--color-text-muted);\n margin-bottom: var(--space-sm);\n}\n\n.correct-year {\n font-size: var(--font-size-hero);\n font-weight: var(--font-weight-extrabold);\n color: var(--color-success);\n font-variant-numeric: tabular-nums;\n animation: reveal-pop var(--transition-slow) ease-out;\n}\n\n@keyframes reveal-pop {\n 0% {\n transform: scale(0.5);\n opacity: 0;\n }\n 70% {\n transform: scale(1.1);\n }\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n}\n\n/* Song Info */\n.song-info {\n margin-bottom: var(--space-md);\n}\n\n.song-title {\n font-size: var(--font-size-xl);\n font-weight: var(--font-weight-semibold);\n color: var(--color-text-primary);\n margin-bottom: var(--space-xs);\n}\n\n.song-artist {\n font-size: var(--font-size-md);\n color: var(--color-text-muted);\n}\n\n/* Fun Fact + Rich Song Info Container */\n.fun-fact-container {\n display: flex;\n flex-direction: column;\n gap: var(--space-sm);\n background: var(--color-warning-light);\n padding: var(--space-md);\n border-radius: var(--radius-lg);\n margin-bottom: var(--space-lg);\n text-align: left;\n max-width: 100%;\n}\n\n.fun-fact-header {\n display: flex;\n align-items: flex-start;\n gap: var(--space-sm);\n}\n\n.fun-fact-icon {\n font-size: var(--font-size-xl);\n flex-shrink: 0;\n}\n\n.fun-fact-text {\n font-size: var(--font-size-base);\n color: #92400e;\n line-height: 1.4;\n}\n\n/* Hide fun fact header when no fun fact text */\n.fun-fact-header:empty,\n.fun-fact-text:empty {\n display: none;\n}\n\n/* ============================================\n Rich Song Info (Story 14.3) - inside fun fact box\n ============================================ */\n\n.song-rich-info {\n text-align: left;\n}\n\n.song-rich-info:empty {\n display: none;\n}\n\n/* ============================================\n Song Info Badges - Unified Design\n All badges centered with consistent styling\n ============================================ */\n\n/* Shared badge container - centers all badge rows */\n.song-badges-row {\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n gap: var(--space-sm);\n margin-top: var(--space-sm);\n padding-top: var(--space-sm);\n border-top: 1px solid rgba(120, 53, 15, 0.15);\n}\n\n.song-badges-row:first-child {\n border-top: none;\n padding-top: 0;\n}\n\n/* Base badge style - shared by all badge types */\n.song-badge {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n font-size: var(--font-size-xs);\n font-weight: var(--font-weight-semibold);\n border-radius: 20px;\n border: 1px solid;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n white-space: nowrap;\n}\n\n.song-badge-icon {\n font-size: 14px;\n line-height: 1;\n}\n\n/* Chart position badge - blue theme */\n.song-badge--chart {\n background: linear-gradient(135deg, #dbeafe, #bfdbfe);\n color: #1e40af;\n border-color: #93c5fd;\n}\n\n.song-badge--chart .chart-weeks {\n font-weight: normal;\n opacity: 0.8;\n font-size: 11px;\n}\n\n/* Certification badges */\n.song-badge--platinum {\n background: linear-gradient(135deg, #f1f5f9, #e2e8f0);\n color: #475569;\n border-color: #cbd5e1;\n}\n\n.song-badge--gold {\n background: linear-gradient(135deg, #fef3c7, #fde68a);\n color: #92400e;\n border-color: #fcd34d;\n}\n\n.song-badge--diamond {\n background: linear-gradient(135deg, #e0f2fe, #bae6fd);\n color: #0369a1;\n border-color: #7dd3fc;\n}\n\n/* Award badges - warm orange/amber theme */\n.song-badge--award {\n background: linear-gradient(135deg, #ffedd5, #fed7aa);\n color: #9a3412;\n border-color: #fdba74;\n}\n\n/* Special award variants */\n.song-badge--grammy {\n background: linear-gradient(135deg, #fef3c7, #fde68a);\n color: #78350f;\n border-color: #f59e0b;\n}\n\n.song-badge--eurovision {\n background: linear-gradient(135deg, #ede9fe, #ddd6fe);\n color: #5b21b6;\n border-color: #a78bfa;\n}\n\n.song-badge--oscar,\n.song-badge--academy {\n background: linear-gradient(135deg, #fef3c7, #fde68a);\n color: #78350f;\n border-color: #f59e0b;\n}\n\n.song-badge--halloffame {\n background: linear-gradient(135deg, #dbeafe, #bfdbfe);\n color: #1e40af;\n border-color: #60a5fa;\n}\n\n/* More awards indicator */\n.song-badges-more {\n font-size: var(--font-size-xs);\n color: #78350f;\n font-style: italic;\n opacity: 0.8;\n}\n\n/* ============================================\n Song Difficulty Rating (Story 15.1)\n ============================================ */\n\n.song-difficulty {\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n justify-content: center;\n margin-top: var(--space-sm);\n opacity: 0;\n animation: fadeIn 0.5s ease-out forwards;\n animation-delay: 0.3s;\n}\n\n.difficulty-stars {\n font-size: 1.2rem;\n letter-spacing: 0.1em;\n}\n\n/* Easy (1-star): green glow */\n.difficulty-1 {\n color: var(--color-success-neon);\n text-shadow: 0 0 10px var(--color-success-neon);\n}\n\n/* Medium (2-star): yellow */\n.difficulty-2 {\n color: var(--color-warning);\n text-shadow: 0 0 10px var(--color-warning);\n}\n\n/* Hard (3-star): orange */\n.difficulty-3 {\n color: var(--color-warning-alt);\n text-shadow: 0 0 10px var(--color-warning-alt);\n}\n\n/* Extreme (4-star): red/pink neon */\n.difficulty-4 {\n color: var(--color-accent-primary);\n text-shadow: 0 0 10px var(--color-accent-primary);\n}\n\n.difficulty-label {\n font-weight: bold;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n font-size: var(--font-size-sm);\n}\n\n.difficulty-accuracy {\n font-size: 0.85em;\n opacity: 0.7;\n}\n\n/* ============================================\n Superlatives / Fun Awards (Story 15.2)\n ============================================ */\n\n.superlatives-container {\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n gap: var(--space-md);\n margin: var(--space-lg) 0;\n padding: 0 var(--space-md);\n}\n\n.superlative-card {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: var(--space-md);\n min-width: 120px;\n max-width: 160px;\n background: var(--color-dark-surface);\n border-radius: var(--radius-lg);\n border: 1px solid rgba(255, 255, 255, 0.1);\n opacity: 0;\n animation: superlativeSlideIn 0.5s ease-out forwards;\n}\n\n@keyframes superlativeSlideIn {\n from {\n opacity: 0;\n transform: translateY(20px) scale(0.9);\n }\n to {\n opacity: 1;\n transform: translateY(0) scale(1);\n }\n}\n\n.superlative-emoji {\n font-size: 2rem;\n margin-bottom: var(--space-xs);\n}\n\n.superlative-title {\n font-weight: bold;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n font-size: var(--font-size-xs);\n color: var(--color-accent-secondary);\n text-align: center;\n margin-bottom: var(--space-xs);\n}\n\n.superlative-player {\n font-weight: bold;\n font-size: var(--font-size-base);\n color: var(--color-dark-text-primary);\n text-align: center;\n margin-bottom: var(--space-xs);\n}\n\n.superlative-value {\n font-size: var(--font-size-sm);\n color: var(--color-dark-text-secondary);\n text-align: center;\n}\n\n/* Card-specific accent colors */\n.superlative-card--speed_demon {\n border-color: var(--color-warning);\n box-shadow: 0 0 15px rgba(245, 158, 11, 0.2);\n}\n\n.superlative-card--lucky_streak {\n border-color: var(--color-error);\n box-shadow: 0 0 15px rgba(239, 68, 68, 0.2);\n}\n\n.superlative-card--risk_taker {\n border-color: var(--color-purple-primary);\n box-shadow: 0 0 15px rgba(139, 92, 246, 0.2);\n}\n\n.superlative-card--clutch_player {\n border-color: var(--color-success-neon);\n box-shadow: 0 0 15px rgba(57, 255, 20, 0.2);\n}\n\n.superlative-card--close_calls {\n border-color: var(--color-accent-secondary);\n box-shadow: 0 0 15px rgba(0, 245, 255, 0.2);\n}\n\n/* ============================================\n Game Highlights Reel (Issue #75)\n ============================================ */\n\n.highlights-container {\n width: 100%;\n margin-top: var(--space-lg);\n margin-bottom: var(--space-lg);\n}\n\n.highlights-header {\n font-size: var(--font-size-lg);\n font-weight: var(--font-weight-semibold);\n color: var(--color-text-white);\n text-align: center;\n margin-bottom: var(--space-md);\n}\n\n.highlights-list {\n display: flex;\n flex-direction: column;\n gap: var(--space-sm);\n}\n\n.highlight-card {\n display: flex;\n align-items: center;\n gap: var(--space-md);\n padding: var(--space-md);\n background: var(--color-dark-surface);\n border-radius: var(--radius-lg);\n border: 1px solid rgba(255, 255, 255, 0.1);\n opacity: 0;\n animation: highlightFadeIn 0.5s ease-out forwards;\n}\n\n@keyframes highlightFadeIn {\n from {\n opacity: 0;\n transform: translateX(-20px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n}\n\n.highlight-emoji {\n font-size: 1.8rem;\n flex-shrink: 0;\n width: 48px;\n text-align: center;\n}\n\n.highlight-content {\n flex: 1;\n min-width: 0;\n}\n\n.highlight-text {\n font-size: var(--font-size-base);\n color: var(--color-dark-text-primary);\n line-height: 1.4;\n}\n\n.highlight-round {\n font-size: var(--font-size-xs);\n color: var(--color-dark-text-secondary);\n margin-top: var(--space-xs);\n}\n\n/* Mobile responsive */\n@media (max-width: 480px) {\n .highlight-card {\n padding: var(--space-sm);\n gap: var(--space-sm);\n }\n\n .highlight-emoji {\n font-size: 1.4rem;\n width: 36px;\n }\n\n .highlight-text {\n font-size: var(--font-size-sm);\n }\n}\n\n/* ============================================\n Round Analytics (Story 13.3)\n ============================================ */\n\n.round-analytics {\n width: 100%;\n margin-top: var(--space-lg);\n margin-bottom: var(--space-lg);\n padding: var(--space-md);\n background: var(--color-dark-surface);\n border-radius: var(--radius-lg);\n text-align: center;\n}\n\n.analytics-title {\n font-size: var(--font-size-lg);\n font-weight: var(--font-weight-semibold);\n color: var(--color-text-white);\n margin-bottom: var(--space-md);\n}\n\n/* Analytics stats - single row layout */\n.analytics-stats-row {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: var(--space-lg);\n margin-bottom: var(--space-xs);\n}\n\n.stat-primary {\n text-align: left;\n}\n\n.stat-primary .stat-label {\n font-size: var(--font-size-sm);\n color: var(--color-text-neon-muted);\n display: block;\n margin-bottom: var(--space-xs);\n}\n\n.stat-primary .stat-value {\n font-size: var(--font-size-2xl);\n font-weight: var(--font-weight-bold);\n color: var(--color-accent-secondary);\n}\n\n.stat-secondary {\n text-align: right;\n}\n\n.stat-secondary .stat-value {\n font-size: var(--font-size-2xl);\n font-weight: var(--font-weight-bold);\n color: var(--color-success);\n}\n\n.stat-secondary .stat-label {\n font-size: var(--font-size-sm);\n color: var(--color-text-neon-muted);\n display: block;\n}\n\n.stat-comparison-line {\n font-size: var(--font-size-sm);\n color: var(--color-text-neon-muted);\n margin-bottom: var(--space-md);\n}\n\n/* Histogram */\n.analytics-histogram {\n margin-bottom: var(--space-lg);\n}\n\n.histogram-title {\n font-size: var(--font-size-base);\n color: var(--color-text-neon-muted);\n margin-bottom: var(--space-sm);\n}\n\n/* #1178: per-player dot-axis (replaces aggregated histogram on phone reveal).\n Each player's guess is a colored dot at the exact year on a horizontal axis;\n the correct year is marked by a vertical cyan line. */\n.dotaxis-wrap {\n margin: 14px 0 16px;\n}\n.dotaxis-axis {\n position: relative;\n height: 88px;\n margin: 0 14px;\n}\n.dotaxis-line {\n position: absolute;\n left: 0; right: 0;\n top: 52px;\n height: 2px;\n background: rgba(255, 255, 255, 0.12);\n border-radius: 2px;\n}\n.dotaxis-tick {\n position: absolute;\n top: 48px;\n width: 1px;\n height: 10px;\n background: rgba(255, 255, 255, 0.18);\n}\n.dotaxis-tick-label {\n position: absolute;\n top: 64px;\n font-size: 9px;\n color: rgba(255, 255, 255, 0.5);\n transform: translateX(-50%);\n letter-spacing: 0.3px;\n font-weight: 500;\n}\n.dotaxis-marker {\n position: absolute;\n top: 4px;\n bottom: 18px;\n width: 2px;\n background: linear-gradient(180deg, transparent, var(--color-cyan, #00d4ff) 30%, var(--color-cyan, #00d4ff) 80%, transparent);\n box-shadow: 0 0 8px var(--color-cyan, #00d4ff), 0 0 16px rgba(0, 212, 255, 0.6);\n}\n.dotaxis-marker-label {\n position: absolute;\n top: -4px;\n left: 50%;\n transform: translateX(-50%);\n background: var(--color-cyan, #00d4ff);\n color: #0a0a0e;\n font-family: var(--font-family-display, 'Outfit', sans-serif);\n font-weight: 900;\n font-size: 12px;\n padding: 3px 8px;\n border-radius: 6px;\n box-shadow: 0 0 14px rgba(0, 212, 255, 0.6);\n white-space: nowrap;\n}\n.dotaxis-dot {\n position: absolute;\n top: 39px;\n width: 26px;\n height: 26px;\n border-radius: 50%;\n transform: translateX(-50%);\n display: flex;\n align-items: center;\n justify-content: center;\n font-family: var(--font-family-display, 'Outfit', sans-serif);\n font-weight: 900;\n font-size: 12px;\n color: #fff;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.5);\n box-shadow: 0 0 0 3px var(--color-bg-primary, #0d0d12), 0 4px 10px rgba(0, 0, 0, 0.4);\n cursor: default;\n}\n.dotaxis-dot--c1 { background: linear-gradient(135deg, #ff6ec7, #d846a7); }\n.dotaxis-dot--c2 { background: linear-gradient(135deg, #6e3bff, #4a25c8); }\n.dotaxis-dot--c3 { background: linear-gradient(135deg, #ffd60a, #e6b800); color: #1a1a22; text-shadow: none; }\n.dotaxis-dot--c4 { background: linear-gradient(135deg, #00d4ff, #008abf); }\n.dotaxis-dot--correct {\n box-shadow: 0 0 0 3px var(--color-bg-primary, #0d0d12), 0 0 18px currentColor, 0 4px 10px rgba(0, 0, 0, 0.4);\n}\n.dotaxis-dot--me {\n box-shadow: 0 0 0 3px var(--color-bg-primary, #0d0d12), 0 0 0 5px rgba(255, 159, 67, 0.6), 0 4px 10px rgba(0, 0, 0, 0.4);\n}\n.dotaxis-dot--correct.dotaxis-dot--me {\n box-shadow: 0 0 0 3px var(--color-bg-primary, #0d0d12), 0 0 0 5px rgba(255, 159, 67, 0.6), 0 0 22px currentColor, 0 4px 10px rgba(0, 0, 0, 0.4);\n}\n.dotaxis-score {\n position: absolute;\n top: 12px;\n transform: translateX(-50%);\n font-family: var(--font-family-display, 'Outfit', sans-serif);\n font-weight: 800;\n font-size: 11px;\n padding: 2px 6px;\n border-radius: 6px;\n background: rgba(255, 255, 255, 0.08);\n white-space: nowrap;\n}\n.dotaxis-score--pos {\n background: rgba(0, 212, 255, 0.18);\n color: var(--color-cyan, #00d4ff);\n}\n.dotaxis-score--zero {\n color: rgba(255, 255, 255, 0.35);\n}\n.dotaxis-legend {\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n gap: 8px 14px;\n font-size: 11px;\n color: rgba(255, 255, 255, 0.75);\n margin-top: 4px;\n}\n.dotaxis-legend-entry {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n}\n.dotaxis-legend-dot {\n display: inline-block;\n width: 11px;\n height: 11px;\n border-radius: 50%;\n flex-shrink: 0;\n}\n.dotaxis-legend-medal {\n font-size: 13px;\n line-height: 1;\n}\n.dotaxis-legend-me {\n color: rgba(255, 159, 67, 1);\n font-weight: 700;\n font-size: 10px;\n margin-left: 2px;\n letter-spacing: 0.3px;\n}\n\n.histogram-bars {\n display: flex;\n justify-content: space-between;\n align-items: flex-end;\n height: 120px;\n gap: var(--space-xs);\n padding: 0 var(--space-xs);\n}\n\n.histogram-bar-wrapper {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n height: 100%;\n animation: histogram-fade-in 0.3s ease forwards;\n opacity: 0;\n}\n\n.histogram-bar {\n width: 100%;\n max-width: 40px;\n background: linear-gradient(180deg, var(--color-accent-primary), var(--color-accent-brand));\n border-radius: var(--radius-sm) var(--radius-sm) 0 0;\n display: flex;\n align-items: flex-start;\n justify-content: center;\n transition: height 0.5s ease;\n min-height: 0;\n}\n\n.histogram-bar.is-correct {\n background: linear-gradient(180deg, var(--color-success-neon), var(--color-success));\n box-shadow: var(--glow-success);\n}\n\n.bar-count {\n font-size: var(--font-size-xs);\n font-weight: var(--font-weight-bold);\n color: var(--color-text-white);\n padding-top: var(--space-xs);\n}\n\n.histogram-label {\n font-size: var(--font-size-xs);\n color: var(--color-text-neon-muted);\n margin-top: var(--space-xs);\n}\n\n@keyframes histogram-fade-in {\n from {\n opacity: 0;\n transform: translateY(10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n/* Achievements */\n.analytics-achievements {\n display: flex;\n flex-direction: column;\n gap: var(--space-sm);\n text-align: left;\n}\n\n.achievement-item {\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n font-size: var(--font-size-sm);\n color: var(--color-text-white);\n}\n\n.achievement-emoji {\n font-size: var(--font-size-lg);\n}\n\n.achievement-label {\n color: var(--color-text-neon-muted);\n}\n\n.achievement-names {\n font-weight: var(--font-weight-semibold);\n}\n\n.achievement-value {\n color: var(--color-text-neon-muted);\n}\n\n/* Empty state */\n.analytics-empty {\n text-align: center;\n color: var(--color-text-neon-muted);\n padding: var(--space-lg);\n font-style: italic;\n}\n\n/* Reduced motion support (AC6) */\n@media (prefers-reduced-motion: reduce) {\n .histogram-bar-wrapper {\n animation: none;\n opacity: 1;\n }\n\n .histogram-bar {\n transition: none;\n }\n}\n\n/* Reveal Emotion (Story 9.4) */\n.reveal-emotion {\n text-align: center;\n font-size: var(--font-size-2xl);\n font-weight: var(--font-weight-bold);\n margin-bottom: var(--space-md);\n animation: reveal-emotion-entrance 0.5s ease-out;\n}\n\n.reveal-emotion--exact {\n color: var(--color-success);\n text-shadow: 0 0 20px var(--color-success);\n}\n\n.reveal-emotion--close {\n color: var(--color-warning);\n animation: reveal-emotion-entrance 0.5s ease-out, reveal-shake 0.5s ease-in-out 0.5s;\n}\n\n.reveal-emotion--wrong {\n color: var(--color-text-muted);\n}\n\n.reveal-emotion--missed {\n color: var(--color-text-muted);\n opacity: 0.7;\n}\n\n.reveal-emotion-subtitle {\n font-size: var(--font-size-base);\n font-weight: var(--font-weight-normal);\n margin-top: var(--space-xs);\n opacity: 0.8;\n}\n\n@keyframes reveal-emotion-entrance {\n 0% { opacity: 0; transform: scale(0.8); }\n 50% { transform: scale(1.1); }\n 100% { opacity: 1; transform: scale(1); }\n}\n\n@keyframes reveal-shake {\n 0%, 100% { transform: translateX(0); }\n 20%, 60% { transform: translateX(-5px); }\n 40%, 80% { transform: translateX(5px); }\n}\n\n/* Confetti Canvas (Story 9.4, Story 14.5) */\n.confetti-canvas {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n pointer-events: none;\n z-index: var(--z-modal);\n}\n\n/* canvas-confetti library creates canvas dynamically at body level - ensure non-blocking (AC6) */\n/* M2 fix: Scoped to body > canvas to avoid affecting other fixed canvases */\nbody > canvas[style*=\"position: fixed\"] {\n pointer-events: none !important;\n}\n\n/* Score breakdown fade-in delay (Story 9.4) */\n.personal-result.is-delayed {\n opacity: 0;\n animation: fade-in-delay 0.5s ease-out 1s forwards;\n}\n\n@keyframes fade-in-delay {\n to { opacity: 1; }\n}\n\n/* Reduced motion support for reveal */\n@media (prefers-reduced-motion: reduce) {\n .reveal-emotion,\n .reveal-emotion--close {\n animation: none;\n }\n .personal-result.is-delayed {\n opacity: 1;\n animation: none;\n }\n}\n\n/* Personal Result */\n.personal-result {\n width: 100%;\n background: var(--color-bg-card-alt);\n padding: var(--space-md);\n border-radius: var(--radius-lg);\n margin-bottom: var(--space-lg);\n}\n\n.result-header {\n font-size: var(--font-size-base);\n font-weight: var(--font-weight-semibold);\n color: var(--color-text-muted);\n margin-bottom: var(--space-sm);\n}\n\n.result-content {\n display: flex;\n flex-direction: column;\n gap: var(--space-sm);\n}\n\n.result-row {\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.result-label {\n font-size: var(--font-size-base);\n color: var(--color-text-muted);\n}\n\n.result-value {\n font-size: var(--font-size-md);\n font-weight: var(--font-weight-semibold);\n color: var(--color-text-primary);\n}\n\n.result-value.is-exact {\n color: var(--color-success);\n}\n\n.result-value.is-close {\n color: var(--color-warning);\n}\n\n.result-value.is-far {\n color: var(--color-error);\n}\n\n/* Speed bonus indicator (Story 5.1) */\n.result-value.is-bonus {\n color: var(--color-warning);\n font-weight: var(--font-weight-bold);\n}\n\n.result-score {\n font-size: var(--font-size-4xl);\n font-weight: var(--font-weight-bold);\n color: var(--color-accent-brand);\n margin-top: var(--space-sm);\n}\n\n.result-missed {\n font-size: var(--font-size-md);\n color: var(--color-error);\n font-weight: var(--font-weight-semibold);\n}\n\n/* Streak bonus styling (Story 5.2) */\n.result-value.is-streak {\n color: var(--color-error);\n font-weight: var(--font-weight-bold);\n}\n\n.streak-bonus-row {\n background: linear-gradient(90deg, var(--color-warning-light), #fde68a);\n padding: var(--space-sm) var(--space-md);\n border-radius: var(--radius-md);\n margin: var(--space-sm) 0;\n color: #1a1a1a;\n}\n\n.result-total {\n font-size: var(--font-size-2xl);\n font-weight: var(--font-weight-bold);\n color: var(--color-success);\n margin-top: var(--space-sm);\n padding-top: var(--space-sm);\n border-top: 2px dashed var(--color-border-light);\n}\n\n/* Leaderboard streak indicator (Story 5.2) */\n.streak-indicator {\n display: inline-flex;\n align-items: center;\n gap: 2px;\n font-size: var(--font-size-sm);\n color: var(--color-warning);\n font-weight: var(--font-weight-semibold);\n}\n\n.streak-indicator::before {\n content: \"\\01F525\";\n}\n\n/* Bet toggle (Story 5.3) */\n.bet-container {\n margin-bottom: var(--space-md);\n /* Fix Safari desktop click issue - establish stacking context */\n position: relative;\n z-index: 1;\n}\n\n.bet-toggle {\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n padding: var(--space-sm) var(--space-xl);\n background: var(--color-bg-card-alt);\n border: 2px solid var(--color-border-medium);\n border-radius: var(--radius-lg);\n cursor: pointer;\n /* Fix Safari: use specific properties instead of 'all' */\n transition: background var(--transition-fast), border-color var(--transition-fast), color var(--transition-fast);\n font-size: var(--font-size-base);\n font-weight: var(--font-weight-semibold);\n color: var(--color-text-muted);\n width: 100%;\n justify-content: center;\n /* Fix Safari desktop click handling */\n -webkit-tap-highlight-color: transparent;\n -webkit-user-select: none;\n user-select: none;\n touch-action: manipulation;\n}\n\n.bet-toggle:hover {\n border-color: var(--color-text-light);\n}\n\n.bet-toggle.is-active {\n background: var(--color-warning-light);\n border-color: var(--color-warning);\n color: #92400e;\n}\n\n.bet-toggle.is-active .bet-icon {\n animation: dice-shake var(--transition-slow) ease;\n}\n\n@keyframes dice-shake {\n 0%, 100% { transform: rotate(0deg); }\n 25% { transform: rotate(-10deg); }\n 75% { transform: rotate(10deg); }\n}\n\n/* Dark theme bet toggle (Story 9.10) */\nbody.theme-dark .bet-toggle {\n background: rgba(255, 255, 255, 0.1);\n border: 1px solid rgba(255, 255, 255, 0.2);\n color: var(--color-text-white);\n}\n\nbody.theme-dark .bet-toggle.is-active {\n background: var(--color-warning);\n border-color: var(--color-warning);\n color: var(--color-text-primary);\n}\n\n/* Bet outcomes */\n.bet-won-row {\n background: linear-gradient(90deg, var(--color-success-light), #a7f3d0);\n padding: var(--space-sm) var(--space-sm);\n border-radius: var(--radius-md);\n margin: var(--space-sm) 0;\n}\n\n/* Bet rows have light backgrounds - need dark text even in dark mode */\n.bet-won-row .result-label,\nbody.theme-dark .bet-won-row .result-label {\n color: #166534;\n}\n\n.result-value.is-bet-won,\nbody.theme-dark .result-value.is-bet-won {\n color: #166534;\n font-weight: var(--font-weight-bold);\n}\n\n.bet-lost-row {\n background: linear-gradient(90deg, var(--color-error-light), #fecaca);\n padding: var(--space-sm) var(--space-sm);\n border-radius: var(--radius-md);\n margin: var(--space-sm) 0;\n}\n\n/* Bet rows have light backgrounds - need dark text even in dark mode */\n.bet-lost-row .result-label,\nbody.theme-dark .bet-lost-row .result-label {\n color: #991b1b;\n}\n\n.result-value.is-bet-lost,\nbody.theme-dark .result-value.is-bet-lost {\n color: #991b1b;\n font-weight: var(--font-weight-bold);\n}\n\n/* Missed round styling (Story 5.4) */\n.result-missed-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--space-sm);\n padding: var(--space-md);\n}\n\n.result-missed-icon {\n font-size: var(--font-size-2xl);\n}\n\n.result-missed-text {\n font-size: var(--font-size-lg);\n font-weight: var(--font-weight-semibold);\n color: var(--color-text-muted);\n}\n\n.streak-broken {\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n margin-top: var(--space-sm);\n padding: var(--space-sm) var(--space-md);\n background: var(--color-error-light);\n border-radius: var(--radius-md);\n}\n\n.streak-broken-icon {\n font-size: var(--font-size-xl);\n}\n\n.streak-broken-text {\n font-size: var(--font-size-base);\n font-weight: var(--font-weight-semibold);\n color: var(--color-error-dark);\n}\n\n/* Streak-Shield (#1666) \u2014 the counterpart to .streak-broken above. Same\n shape on purpose: both explain what just happened to a streak, so they\n should read as one pair rather than two unrelated notices. Success colours\n because the run survived. */\n.streak-shield-used {\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n margin-top: var(--space-sm);\n padding: var(--space-sm) var(--space-md);\n background: var(--color-success-light);\n border-radius: var(--radius-md);\n}\n\n.streak-shield-icon {\n font-size: var(--font-size-xl);\n}\n\n.streak-shield-text {\n font-size: var(--font-size-base);\n font-weight: var(--font-weight-semibold);\n color: var(--color-success-hover);\n}\n\n.result-score.is-zero {\n color: var(--color-text-light);\n font-size: var(--font-size-2xl);\n}\n\n/* ============================================\n Leaderboard (Story 5.5)\n ============================================ */\n\n/* Game view leaderboard - uses collapsible section pattern */\n.leaderboard-section {\n width: 100%;\n background: var(--color-surface-dark);\n border: 1px solid var(--color-border-neon);\n border-radius: var(--radius-md);\n overflow: hidden;\n}\n\n.leaderboard-section .section-header-collapsible {\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n width: 100%;\n padding: var(--space-sm) var(--space-md);\n background: transparent;\n border: none;\n color: var(--color-text-white);\n font-size: 0.875rem;\n font-weight: 600;\n cursor: pointer;\n text-align: left;\n}\n\n.leaderboard-section .section-header-collapsible .section-icon {\n font-size: 1rem;\n}\n\n.leaderboard-section .section-header-collapsible .section-summary {\n margin-left: auto;\n font-size: 0.75rem;\n font-weight: 400;\n color: var(--color-accent-secondary);\n background: rgba(0, 245, 255, 0.1);\n padding: 2px 8px;\n border-radius: var(--radius-sm);\n}\n\n.leaderboard-section .section-header-collapsible .section-toggle {\n margin-left: var(--space-sm);\n font-size: 0.625rem;\n color: var(--color-text-neon-muted);\n transition: transform 0.2s ease;\n}\n\n.leaderboard-section .section-content {\n padding: 0;\n}\n\n.leaderboard-section .leaderboard-list {\n max-height: 200px;\n overflow-y: auto;\n}\n\n.leaderboard-section.collapsed .section-content {\n display: none;\n}\n\n.leaderboard-section:not(.collapsed) .section-toggle {\n transform: rotate(180deg);\n}\n\n/* Leaderboard container (legacy) */\n.leaderboard {\n background: var(--color-bg-white);\n border-radius: var(--radius-lg);\n box-shadow: var(--shadow-md);\n overflow: hidden;\n width: 100%;\n margin-bottom: var(--space-md);\n}\n\n.leaderboard.is-compact .leaderboard-list {\n max-height: 120px;\n}\n\n.leaderboard.is-expanded .leaderboard-list {\n max-height: 400px;\n}\n\n.leaderboard.is-prominent {\n margin-top: var(--space-md);\n}\n\n.leaderboard.is-prominent .leaderboard-list {\n max-height: 280px;\n}\n\n.leaderboard-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: var(--space-sm) var(--space-md);\n background: var(--color-bg-card-alt);\n border-bottom: 1px solid var(--color-border-light);\n}\n\n.leaderboard-title {\n font-size: var(--font-size-base);\n font-weight: var(--font-weight-semibold);\n color: var(--color-text-secondary);\n}\n\n.leaderboard-toggle {\n background: none;\n border: none;\n cursor: pointer;\n padding: var(--space-xs);\n min-width: auto;\n min-height: auto;\n color: var(--color-text-muted);\n}\n\n.leaderboard-list {\n max-height: 200px;\n overflow-y: auto;\n /* Story 18.1: CSS containment for scroll performance (layout style paint, not strict/size) */\n contain: layout style paint;\n will-change: transform;\n}\n\n/* Story 18.1: Spacer elements for lazy loading virtual scroll */\n.leaderboard-spacer-top,\n.leaderboard-spacer-bottom {\n flex-shrink: 0;\n pointer-events: none;\n}\n\n/* Story 18.1: Sentinel elements for IntersectionObserver */\n.leaderboard-sentinel {\n flex-shrink: 0;\n pointer-events: none;\n visibility: hidden;\n}\n\n/* Leaderboard entries */\n.leaderboard-entry {\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n padding: 10px var(--space-md);\n border-bottom: 1px solid var(--color-bg-card-alt);\n transition: background var(--transition-fast);\n /* Story 18.1: CSS containment for layout isolation */\n contain: content;\n height: 48px;\n box-sizing: border-box;\n}\n\n.leaderboard-entry:last-child {\n border-bottom: none;\n}\n\n.leaderboard-entry.is-current {\n background: #eff6ff;\n border-left: 3px solid var(--color-accent-blue);\n}\n\n/* Top 3 styling */\n.leaderboard-entry.is-top-1 {\n background: linear-gradient(90deg, var(--color-warning-light), #fde68a);\n}\n\n.leaderboard-entry.is-top-1 .entry-rank {\n color: #b45309;\n font-weight: var(--font-weight-bold);\n}\n\n.leaderboard-entry.is-top-2 {\n background: linear-gradient(90deg, var(--color-bg-card-alt), var(--color-border-light));\n}\n\n.leaderboard-entry.is-top-2 .entry-rank {\n color: var(--color-text-muted);\n font-weight: var(--font-weight-bold);\n}\n\n.leaderboard-entry.is-top-3 {\n background: linear-gradient(90deg, #fed7aa, #fdba74);\n}\n\n.leaderboard-entry.is-top-3 .entry-rank {\n color: #c2410c;\n font-weight: var(--font-weight-bold);\n}\n\n.entry-rank {\n font-size: var(--font-size-sm);\n font-weight: var(--font-weight-semibold);\n color: var(--color-text-muted);\n min-width: 28px;\n}\n\n.entry-name {\n flex: 1;\n font-size: var(--font-size-base);\n font-weight: var(--font-weight-medium);\n color: var(--color-text-primary);\n display: flex;\n align-items: center;\n gap: var(--space-xs);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.entry-meta {\n display: flex;\n align-items: center;\n gap: var(--space-xs);\n}\n\n.entry-score {\n font-size: var(--font-size-base);\n font-weight: var(--font-weight-bold);\n color: var(--color-accent-brand);\n min-width: 40px;\n text-align: right;\n}\n\n/* Rank change indicators */\n.rank-up {\n font-size: var(--font-size-xs);\n color: var(--color-success);\n font-weight: var(--font-weight-semibold);\n}\n\n.rank-down {\n font-size: var(--font-size-xs);\n color: var(--color-error);\n font-weight: var(--font-weight-semibold);\n}\n\n/* Rank change animations (Story 9.5) */\n.leaderboard-entry--climbing {\n animation: leaderboard-climb 400ms ease-out;\n}\n\n.leaderboard-entry--falling {\n animation: leaderboard-fall 400ms ease-out;\n}\n\n/* Disconnected player in leaderboard (Story 11.4) */\n.leaderboard-entry--disconnected {\n opacity: 0.5;\n transition: opacity 0.3s ease;\n}\n\n@keyframes leaderboard-climb {\n 0% { transform: translateY(10px); opacity: 0.7; background: rgba(0, 255, 136, 0.2); }\n 100% { transform: translateY(0); opacity: 1; background: transparent; }\n}\n\n@keyframes leaderboard-fall {\n 0% { transform: translateY(-10px); opacity: 0.7; background: rgba(255, 0, 64, 0.2); }\n 100% { transform: translateY(0); opacity: 1; background: transparent; }\n}\n\n/* Streak indicators (Story 9.5) */\n.streak-indicator {\n font-size: var(--font-size-xs);\n color: var(--color-warning);\n}\n\n.streak-indicator--hot {\n text-shadow: 0 0 8px var(--color-warning);\n animation: streak-pulse 1s ease-in-out infinite;\n}\n\n@keyframes streak-pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.7; }\n}\n\n/* Leaderboard separator (Story 9.5) */\n.leaderboard-separator {\n text-align: center;\n padding: var(--space-xs) var(--space-md);\n color: var(--color-text-muted);\n font-size: var(--font-size-sm);\n border-bottom: 1px solid var(--color-bg-card-alt);\n}\n\n/* Reduced motion support for leaderboard */\n@media (prefers-reduced-motion: reduce) {\n .leaderboard-entry--climbing,\n .leaderboard-entry--falling {\n animation: none;\n }\n .streak-indicator--hot {\n animation: none;\n }\n}\n\n/* Quick you indicator */\n.leaderboard-you {\n position: sticky;\n bottom: 0;\n padding: var(--space-sm) var(--space-md);\n background: var(--color-accent-blue);\n color: var(--color-text-white);\n font-size: var(--font-size-sm);\n font-weight: var(--font-weight-semibold);\n text-align: center;\n}\n\n/* ============================================\n Final Leaderboard / End View (Story 5.6)\n ============================================ */\n\n/* End view container */\n.end-container {\n padding: var(--space-lg);\n max-width: 480px;\n margin: 0 auto;\n text-align: center;\n}\n\n.end-header {\n margin-bottom: var(--space-lg);\n}\n\n.end-title {\n font-size: var(--font-size-4xl);\n font-weight: var(--font-weight-extrabold);\n color: var(--color-text-primary);\n margin-bottom: var(--space-sm);\n}\n\n.end-subtitle {\n font-size: var(--font-size-md);\n color: var(--color-text-muted);\n margin: 0;\n}\n\n/* Podium */\n.podium {\n display: flex;\n justify-content: center;\n align-items: flex-end;\n gap: var(--space-sm);\n margin-bottom: var(--space-xl);\n}\n\n.podium-place {\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100px;\n}\n\n.podium-medal {\n font-size: var(--font-size-4xl);\n margin-bottom: var(--space-sm);\n}\n\n.podium-name {\n font-size: var(--font-size-base);\n font-weight: var(--font-weight-semibold);\n color: var(--color-text-primary);\n margin-bottom: var(--space-xs);\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.podium-score {\n font-size: var(--font-size-sm);\n color: var(--color-text-muted);\n margin-bottom: var(--space-sm);\n}\n\n.podium-stand {\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: var(--font-size-2xl);\n font-weight: var(--font-weight-extrabold);\n color: var(--color-text-white);\n border-radius: var(--radius-md) var(--radius-md) 0 0;\n}\n\n.podium-1 .podium-stand {\n height: 80px;\n background: linear-gradient(180deg, #fbbf24, var(--color-warning-dark));\n}\n\n.podium-2 .podium-stand {\n height: 60px;\n background: linear-gradient(180deg, var(--color-text-light), var(--color-text-muted));\n}\n\n.podium-3 .podium-stand {\n height: 40px;\n background: linear-gradient(180deg, #fb923c, #c2410c);\n}\n\n/* Your result */\n.your-result {\n background: #eff6ff;\n border-radius: var(--radius-xl);\n padding: var(--space-lg);\n margin-bottom: var(--space-lg);\n}\n\n.your-result-header {\n font-size: var(--font-size-base);\n font-weight: var(--font-weight-semibold);\n color: var(--color-accent-blue);\n margin-bottom: var(--space-sm);\n}\n\n.your-result-rank {\n font-size: var(--font-size-2xl);\n font-weight: var(--font-weight-extrabold);\n color: var(--color-text-primary);\n}\n\n.your-result-score {\n font-size: var(--font-size-lg);\n color: var(--color-text-muted);\n margin-bottom: var(--space-md);\n}\n\n.your-result-stats {\n display: flex;\n justify-content: center;\n gap: var(--space-lg);\n}\n\n.stat {\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n\n.stat-value {\n font-size: var(--font-size-2xl);\n font-weight: var(--font-weight-bold);\n color: var(--color-accent-brand);\n}\n\n.stat-label {\n font-size: var(--font-size-sm);\n color: var(--color-text-muted);\n}\n\n/* Final leaderboard */\n.final-leaderboard {\n background: var(--color-bg-white);\n border-radius: var(--radius-lg);\n overflow: hidden;\n margin-bottom: var(--space-lg);\n box-shadow: var(--shadow-md);\n}\n\n.final-leaderboard-header {\n padding: var(--space-sm) var(--space-md);\n background: var(--color-bg-card-alt);\n font-size: var(--font-size-base);\n font-weight: var(--font-weight-semibold);\n color: var(--color-text-secondary);\n text-align: left;\n}\n\n.final-leaderboard-list {\n max-height: 200px;\n overflow-y: auto;\n}\n\n.final-entry {\n display: flex;\n align-items: center;\n padding: 10px var(--space-md);\n border-bottom: 1px solid var(--color-bg-card-alt);\n}\n\n.final-entry:last-child {\n border-bottom: none;\n}\n\n.final-entry.is-current {\n background: #eff6ff;\n}\n\n/* Disconnected player in final leaderboard (Story 11.4) */\n.final-entry--disconnected {\n opacity: 0.5;\n}\n\n.final-rank {\n font-size: var(--font-size-sm);\n font-weight: var(--font-weight-semibold);\n color: var(--color-text-muted);\n width: 32px;\n}\n\n.final-name {\n flex: 1;\n font-size: var(--font-size-base);\n color: var(--color-text-primary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.final-score {\n font-size: var(--font-size-base);\n font-weight: var(--font-weight-semibold);\n color: var(--color-accent-brand);\n}\n\n/* Admin controls for end */\n.end-admin-controls {\n display: flex;\n flex-direction: column;\n gap: var(--space-md);\n margin-bottom: var(--space-md);\n}\n\n.new-game-btn {\n width: 100%;\n padding: var(--space-md) var(--space-xl);\n font-size: var(--font-size-lg);\n font-weight: var(--font-weight-semibold);\n color: var(--color-text-white);\n background: var(--color-success);\n border: none;\n border-radius: var(--radius-lg);\n cursor: pointer;\n transition: background var(--transition-fast);\n min-width: auto;\n min-height: auto;\n}\n\n.new-game-btn:hover {\n background: var(--color-success-hover);\n}\n\n.new-game-btn:disabled {\n background: var(--color-text-light);\n cursor: not-allowed;\n}\n\n/* Player message */\n.end-player-message {\n color: var(--color-text-muted);\n}\n\n.end-player-message p {\n margin: 0 0 var(--space-sm) 0;\n}\n\n.end-hint {\n font-size: var(--font-size-base);\n}\n\n.rejoin-hint {\n font-size: var(--font-size-base);\n color: var(--color-text-muted);\n margin-top: var(--space-sm);\n}\n\n/* Admin Controls */\n.reveal-report-row {\n display: flex;\n justify-content: center;\n margin-top: var(--space-md);\n}\n\n.reveal-report-btn {\n background: none;\n border: none;\n padding: var(--space-xs) var(--space-sm);\n font-size: var(--font-size-sm);\n color: var(--color-text-muted);\n cursor: pointer;\n border-radius: var(--radius-sm);\n transition: color 0.15s ease, opacity 0.15s ease;\n opacity: 0.7;\n}\n\n.reveal-report-btn:hover {\n color: var(--color-text-neon-muted);\n opacity: 1;\n}\n\n.reveal-report-btn:disabled {\n cursor: default;\n opacity: 0.5;\n}\n\n.reveal-admin-controls {\n margin-top: var(--space-md);\n}\n\n.next-round-btn {\n padding: var(--space-md) var(--space-xl);\n font-size: var(--font-size-lg);\n font-weight: var(--font-weight-semibold);\n color: var(--color-text-white);\n background: var(--color-accent-brand);\n border: none;\n border-radius: var(--radius-lg);\n cursor: pointer;\n transition: all var(--transition-fast);\n}\n\n.next-round-btn:hover {\n background: var(--color-accent-brand-hover);\n}\n\n.next-round-btn:disabled {\n background: var(--color-text-light);\n cursor: not-allowed;\n}\n\n.next-round-btn.is-final {\n background: var(--color-success);\n}\n\n.next-round-btn.is-final:hover {\n background: var(--color-success-hover);\n}\n\n/* Reveal Admin Buttons Layout (Story 16.5) */\n.reveal-admin-buttons {\n display: flex;\n flex-direction: column;\n gap: var(--space-md);\n align-items: center;\n}\n\n@media (min-width: 480px) {\n .reveal-admin-buttons {\n flex-direction: row;\n justify-content: center;\n }\n}\n\n/* Invite Button (Story 16.5) */\n.invite-btn {\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n padding: var(--space-sm) var(--space-lg);\n font-size: var(--font-size-md);\n font-weight: var(--font-weight-medium);\n color: var(--color-text-white);\n background: var(--color-bg-tertiary);\n border: 1px solid var(--color-border-subtle);\n border-radius: var(--radius-lg);\n cursor: pointer;\n transition: all var(--transition-fast);\n min-height: 44px;\n min-width: 44px;\n}\n\n.invite-btn:hover {\n background: var(--color-bg-secondary);\n border-color: var(--color-border-neon);\n}\n\n.invite-btn:active {\n transform: scale(0.98);\n}\n\n.invite-btn-icon {\n font-size: var(--font-size-lg);\n}\n\n.invite-btn-label {\n white-space: nowrap;\n}\n\n/* Invite Modal (Story 16.5) */\n.invite-modal {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: var(--z-modal);\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.invite-modal.hidden {\n display: none;\n}\n\n.invite-modal-backdrop {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.8);\n}\n\n.invite-modal-content {\n position: relative;\n background: var(--color-bg-primary);\n border: 1px solid var(--color-border-neon);\n padding: var(--space-lg);\n border-radius: var(--radius-xl);\n text-align: center;\n max-width: 90vw;\n max-height: 90vh;\n overflow-y: auto;\n animation: modalFadeIn var(--transition-normal) ease-out;\n}\n\n@keyframes modalFadeIn {\n from {\n opacity: 0;\n transform: scale(0.95);\n }\n to {\n opacity: 1;\n transform: scale(1);\n }\n}\n\n.invite-modal-title {\n font-size: var(--font-size-xl);\n font-weight: var(--font-weight-bold);\n color: var(--color-text-white);\n margin: 0 0 var(--space-xs);\n}\n\n.invite-modal-hint {\n font-size: var(--font-size-sm);\n color: var(--color-text-muted);\n margin: 0 0 var(--space-md);\n}\n\n.invite-modal-code {\n display: inline-block;\n padding: var(--space-md);\n background: var(--color-bg-white);\n border-radius: var(--radius-md);\n margin-bottom: var(--space-md);\n}\n\n.invite-modal-code img {\n display: block;\n width: 200px;\n height: 200px;\n}\n\n@media (min-width: 480px) {\n .invite-modal-code img {\n width: 256px;\n height: 256px;\n }\n}\n\n.invite-modal-url-container {\n display: flex;\n gap: var(--space-xs);\n margin-bottom: var(--space-sm);\n max-width: 100%;\n}\n\n.invite-modal-url {\n flex: 1;\n padding: var(--space-sm) var(--space-md);\n font-size: var(--font-size-sm);\n font-family: var(--font-family-mono);\n color: var(--color-text-primary);\n background: var(--color-bg-secondary);\n border: 1px solid var(--color-border-subtle);\n border-radius: var(--radius-md);\n min-width: 0;\n text-overflow: ellipsis;\n}\n\nbody.theme-dark .invite-modal-url {\n color: #e2e8f0;\n background: rgba(255, 255, 255, 0.1);\n border-color: rgba(255, 255, 255, 0.15);\n}\n\n.invite-copy-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--space-sm);\n min-width: 44px;\n min-height: 44px;\n background: var(--color-accent-brand);\n border: none;\n border-radius: var(--radius-md);\n cursor: pointer;\n transition: all var(--transition-fast);\n}\n\n.invite-copy-btn:hover {\n background: var(--color-accent-brand-hover);\n}\n\n.invite-copy-btn:active {\n transform: scale(0.95);\n}\n\n.invite-copy-icon {\n font-size: var(--font-size-lg);\n}\n\n.invite-copy-feedback {\n font-size: var(--font-size-sm);\n color: var(--color-success);\n margin: 0 0 var(--space-md);\n animation: fadeInOut 2s ease-in-out;\n}\n\n.invite-copy-feedback.hidden {\n display: none;\n}\n\n@keyframes fadeInOut {\n 0%, 100% { opacity: 0; }\n 10%, 80% { opacity: 1; }\n}\n\n.invite-modal-close {\n min-width: 120px;\n min-height: 48px;\n}\n\n/* ============================================\n Player Result Cards (Story 9.10)\n ============================================ */\n\n.reveal-results-cards {\n margin-top: var(--space-lg);\n width: 100%;\n overflow: visible;\n}\n\n.results-cards-header {\n font-size: var(--font-size-lg);\n font-weight: var(--font-weight-semibold);\n color: var(--color-text-secondary);\n margin-bottom: var(--space-sm);\n text-align: center;\n}\n\n/* Horizontal row with overflow scroll (#355) */\n.results-cards-scroll {\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n gap: var(--space-sm);\n width: 100%;\n overflow-x: auto;\n overflow-y: hidden;\n padding-bottom: var(--space-xs);\n -webkit-overflow-scrolling: touch;\n}\n\n.results-cards-scroll::-webkit-scrollbar {\n height: 3px;\n}\n\n.results-cards-scroll::-webkit-scrollbar-thumb {\n background: var(--color-border-light);\n border-radius: 2px;\n}\n\n.result-card {\n background: var(--color-bg-card);\n border-radius: var(--radius-md);\n padding: var(--space-sm);\n text-align: center;\n border: 2px solid var(--color-border-light);\n transition: all var(--transition-fast);\n flex: 1 1 140px;\n min-width: 140px;\n max-width: 220px;\n box-sizing: border-box;\n}\n\n.result-card.is-current {\n border-color: var(--color-accent-brand);\n background: rgba(99, 102, 241, 0.1);\n}\n\n/* Score-based classes per AC #13 (Code Review fix) */\n.result-card.is-score-high {\n border-color: var(--color-success);\n background: rgba(16, 185, 129, 0.1);\n}\n\n.result-card.is-score-medium {\n border-color: var(--color-warning);\n background: rgba(245, 158, 11, 0.1);\n}\n\n.result-card.is-score-zero {\n opacity: 0.6;\n}\n\n.card-name {\n font-size: var(--font-size-sm);\n font-weight: var(--font-weight-semibold);\n color: var(--color-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n margin-bottom: 2px;\n}\n\n.card-guess {\n font-size: var(--font-size-xl);\n font-weight: var(--font-weight-bold);\n color: var(--color-text-primary);\n}\n\n.card-accuracy {\n font-size: var(--font-size-xs);\n color: var(--color-text-muted);\n}\n\n.result-card.is-score-high .card-accuracy {\n color: var(--color-success);\n font-weight: var(--font-weight-semibold);\n}\n\n.card-score {\n font-size: var(--font-size-sm);\n font-weight: var(--font-weight-semibold);\n color: var(--color-success);\n margin-top: 2px;\n}\n\n.card-bet {\n margin-left: 4px;\n}\n\n/* Dark theme result cards */\nbody.theme-dark .result-card {\n background: rgba(255, 255, 255, 0.05);\n border-color: rgba(255, 255, 255, 0.1);\n}\n\nbody.theme-dark .result-card.is-current {\n border-color: var(--color-accent-neon);\n background: rgba(0, 245, 255, 0.1);\n}\n\n/* Dark theme score-based classes (Code Review fix) */\nbody.theme-dark .result-card.is-score-high {\n border-color: var(--color-success-neon);\n background: rgba(0, 255, 136, 0.1);\n}\n\nbody.theme-dark .result-card.is-score-medium {\n border-color: var(--color-warning);\n background: rgba(245, 158, 11, 0.15);\n}\n\nbody.theme-dark .card-name,\nbody.theme-dark .card-guess {\n color: var(--color-text-white);\n}\n\nbody.theme-dark .card-accuracy {\n color: var(--color-text-neon-muted);\n}\n\nbody.theme-dark .result-card.is-score-high .card-accuracy {\n color: var(--color-success-neon);\n}\n\nbody.theme-dark .card-score {\n color: var(--color-success-neon);\n}\n\n/* ============================================\n Admin Control Bar (Story 6.1)\n ============================================ */\n\n.admin-control-bar {\n position: fixed;\n bottom: 0;\n left: 0;\n right: 0;\n display: flex;\n justify-content: space-around;\n align-items: center;\n padding: var(--space-sm) var(--space-sm);\n padding-bottom: calc(var(--space-sm) + env(safe-area-inset-bottom));\n background: rgba(0, 0, 0, 0.9);\n border-top: 1px solid var(--color-border-dark);\n z-index: var(--z-control-bar);\n}\n\n.admin-control-bar.hidden {\n display: none;\n}\n\n.control-btn {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n min-width: 44px;\n min-height: 44px;\n padding: var(--space-sm) var(--space-sm);\n background: #2a2a2a;\n border: none;\n border-radius: var(--radius-md);\n color: var(--color-text-white);\n cursor: pointer;\n transition: background var(--transition-fast), opacity var(--transition-fast);\n}\n\n.control-btn:hover:not(.is-disabled) {\n background: #3a3a3a;\n}\n\n.control-btn:active:not(.is-disabled) {\n background: #4a4a4a;\n}\n\n.control-btn.is-disabled {\n opacity: 0.4;\n cursor: not-allowed;\n}\n\n.control-btn--danger {\n background: #7f1d1d;\n}\n\n.control-btn--danger:hover:not(.is-disabled) {\n background: #991b1b;\n}\n\n.control-btn.is-stopped {\n background: var(--color-text-secondary);\n opacity: 0.7;\n}\n\n.control-btn.is-stopped .control-icon {\n color: var(--color-success);\n}\n\n/* Volume indicator popup (Story 6.4) */\n.volume-indicator {\n position: absolute;\n bottom: 100%;\n left: 50%;\n transform: translateX(-50%);\n background: rgba(0, 0, 0, 0.9);\n color: var(--color-text-white);\n padding: var(--space-sm) var(--space-md);\n border-radius: var(--radius-md);\n font-size: var(--font-size-base);\n font-weight: var(--font-weight-semibold);\n margin-bottom: var(--space-sm);\n opacity: 0;\n transition: opacity var(--transition-normal);\n pointer-events: none;\n white-space: nowrap;\n}\n\n.volume-indicator.is-visible {\n opacity: 1;\n}\n\n/* Volume button at limit (Story 6.4) */\n.control-btn.is-at-limit {\n opacity: 0.5;\n}\n\n.control-btn.is-at-limit:active {\n transform: none;\n}\n\n.control-icon {\n font-size: var(--font-size-xl);\n line-height: 1;\n}\n\n/* #1048: REVEAL auto-advance countdown \u2014 replaces the icon in the Next\n button with the remaining seconds while the auto-advance timer runs.\n Tabular numerals so 30 \u2192 29 \u2192 28 doesn't shift the layout. */\n.control-icon.is-countdown {\n font-variant-numeric: tabular-nums;\n font-weight: 700;\n min-width: 1.5em;\n text-align: center;\n}\n\n.control-label {\n font-size: var(--font-size-xs);\n margin-top: 2px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n/* Ensure game-view content doesn't get covered by control bar (M3 fix: conditional) */\n/* 80px admin bar + 60px reaction bar = 140px total clearance */\n.has-control-bar .game-container {\n padding-bottom: 140px;\n}\n\n.has-control-bar .reveal-container {\n padding-bottom: 140px;\n}\n\n.has-control-bar .end-container {\n padding-bottom: 140px;\n}\n\n/* ============================================\n Live Reactions Bar (Story 18.9)\n ============================================ */\n\n.reaction-bar {\n position: fixed;\n bottom: 0; /* Default: at bottom for regular players */\n left: 0;\n right: 0;\n display: flex;\n justify-content: center;\n padding: var(--space-sm);\n padding-bottom: calc(var(--space-sm) + env(safe-area-inset-bottom));\n z-index: var(--z-reaction-bar);\n pointer-events: none; /* Allow clicks through the bar */\n}\n\n/* When admin control bar is visible, position reaction bar above it */\nmain:has(.admin-control-bar:not(.hidden)) .reaction-bar {\n bottom: 70px;\n}\n\n.reaction-bar.hidden {\n display: none;\n}\n\n.reaction-bar-container {\n display: flex;\n gap: var(--space-sm);\n padding: var(--space-sm) var(--space-md);\n background: rgba(0, 0, 0, 0.6);\n border-radius: var(--radius-lg);\n border: 1px solid rgba(255, 255, 255, 0.1);\n backdrop-filter: blur(8px);\n -webkit-backdrop-filter: blur(8px);\n pointer-events: auto; /* Restore clicks on container */\n}\n\n.reaction-btn {\n font-size: 1.5rem;\n padding: var(--space-sm);\n min-width: 44px;\n min-height: 44px;\n background: rgba(30, 30, 40, 0.5);\n border: 1px solid rgba(255, 255, 255, 0.15);\n border-radius: var(--radius-md);\n cursor: pointer;\n transition: transform var(--transition-fast), background var(--transition-fast);\n}\n\n.reaction-btn:hover {\n background: rgba(50, 50, 60, 0.7);\n}\n\n.reaction-btn:active {\n transform: scale(0.9);\n}\n\n/* #1757: used-state feedback. Once a reaction is spent this phase the whole bar\n is disabled; the chosen emoji stays lit so the player sees what they sent. */\n.reaction-btn:disabled {\n cursor: default;\n opacity: 0.45;\n}\n\n.reaction-btn.is-used {\n opacity: 1;\n border-color: var(--color-accent-primary);\n box-shadow: 0 0 12px var(--color-accent-primary);\n}\n\n/* Neon glow effect on tap */\n@media (hover: none) {\n .reaction-btn:active {\n box-shadow: 0 0 15px var(--color-accent-primary);\n }\n}\n\n/* Accessibility: Respect reduced motion preference */\n@media (prefers-reduced-motion: reduce) {\n .reaction-btn {\n transition: none;\n }\n\n .reaction-btn:active {\n transform: none;\n }\n}\n\n/* Floating Reactions Display (Story 18.9) */\n.reaction-container {\n position: fixed;\n bottom: 120px; /* Above reaction bar */\n left: 0;\n right: 0;\n pointer-events: none;\n z-index: 99; /* Below reaction bar */\n}\n\n/* When admin control bar visible, adjust position */\nmain:has(.admin-control-bar:not(.hidden)) .reaction-container {\n bottom: 180px;\n}\n\n.reaction-bubble {\n position: absolute;\n font-size: 1rem;\n font-weight: 600;\n color: var(--color-text-white);\n text-shadow: 0 0 8px var(--color-accent-primary);\n animation: reaction-float 3s ease-out forwards;\n white-space: nowrap;\n}\n\n@keyframes reaction-float {\n 0% {\n opacity: 1;\n transform: translateY(0);\n }\n 70% {\n opacity: 1;\n }\n 100% {\n opacity: 0;\n transform: translateY(calc(-50vh + 60px));\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .reaction-bubble {\n animation: none;\n opacity: 1;\n }\n}\n\n/* ============================================\n Paused View (Story 7-1)\n ============================================ */\n\n.paused-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: var(--space-2xl) var(--space-lg);\n min-height: 60vh;\n text-align: center;\n}\n\n.paused-icon {\n font-size: var(--font-size-hero);\n margin-bottom: var(--space-lg);\n animation: pause-pulse 2s infinite;\n}\n\n@keyframes pause-pulse {\n 0%, 100% { opacity: 1; transform: scale(1); }\n 50% { opacity: 0.6; transform: scale(0.95); }\n}\n\n.paused-container h1 {\n font-size: var(--font-size-3xl);\n font-weight: var(--font-weight-bold);\n color: var(--color-text-primary);\n margin-bottom: var(--space-md);\n}\n\n.paused-container > p {\n font-size: var(--font-size-md);\n color: var(--color-text-muted);\n margin-bottom: var(--space-sm);\n}\n\n.paused-spinner {\n margin: var(--space-xl) 0;\n}\n\n.paused-hint {\n font-size: var(--font-size-base);\n color: var(--color-text-light);\n}\n\n/* ============================================\n Reconnecting Overlay (Story 7-3)\n ============================================ */\n\n.reconnecting-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.8);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: var(--z-overlay);\n}\n\n.reconnecting-overlay.hidden {\n display: none;\n}\n\n.reconnecting-content {\n text-align: center;\n color: var(--color-text-white);\n}\n\n.reconnecting-spinner .spinner {\n border-top-color: var(--color-text-white);\n width: 48px;\n height: 48px;\n margin: 0 auto var(--space-md);\n}\n\n.reconnect-status {\n font-size: var(--font-size-md);\n color: var(--color-border-light);\n}\n\n/* ============================================\n Connection Lost View (Story 7-4)\n ============================================ */\n\n.connection-lost-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: var(--space-2xl) var(--space-lg);\n min-height: 60vh;\n text-align: center;\n}\n\n.connection-lost-icon {\n font-size: var(--font-size-hero);\n margin-bottom: var(--space-lg);\n}\n\n.connection-lost-container h1 {\n font-size: var(--font-size-3xl);\n font-weight: var(--font-weight-bold);\n color: var(--color-text-primary);\n margin-bottom: var(--space-md);\n}\n\n.connection-lost-container > p {\n font-size: var(--font-size-md);\n color: var(--color-text-muted);\n margin-bottom: var(--space-lg);\n}\n\n.connection-lost-hint {\n font-size: var(--font-size-base);\n color: var(--color-text-light);\n margin-top: var(--space-md);\n}\n\n/* Responsive adjustments for Reveal View */\n@media (max-width: 360px) {\n .correct-year {\n font-size: var(--font-size-year);\n }\n\n .reveal-album-cover {\n width: 120px;\n height: 120px;\n }\n}\n\n@media (min-width: 768px) {\n .reveal-album-cover {\n width: 180px;\n height: 180px;\n }\n\n .correct-year {\n font-size: 84px;\n }\n}\n\n/* ============================================\n Accessibility & Reduced Motion (Story 9.7)\n ============================================ */\n\n/* Focus indicators for keyboard navigation */\n:focus-visible {\n outline: 2px solid var(--color-accent-primary);\n outline-offset: 2px;\n}\n\nbody.theme-dark :focus-visible {\n outline-color: var(--color-accent-primary);\n box-shadow: 0 0 0 4px rgba(255, 45, 106, 0.3);\n}\n\n/* Remove default outline for mouse users */\n:focus:not(:focus-visible) {\n outline: none;\n}\n\n/* Global reduced motion - disables all animations */\n@media (prefers-reduced-motion: reduce) {\n *,\n *::before,\n *::after {\n animation-duration: 0.01ms !important;\n animation-iteration-count: 1 !important;\n transition-duration: 0.01ms !important;\n scroll-behavior: auto !important;\n }\n}\n\n/* Day Mode fallback for prefers-color-scheme: light */\n@media (prefers-color-scheme: light) {\n body:not(.theme-dark) {\n --color-bg-primary: #ffffff;\n --color-bg-surface: #f5f5f7;\n --color-bg-card: #ffffff;\n --color-bg-card-alt: #f8fafc;\n --color-text-primary: #1a1a1a;\n --color-text-muted: #666666;\n --color-text-light: #999999;\n --color-border-light: #e5e7eb;\n /* Accents remain vibrant */\n }\n}\n\n/* Screen reader only utility */\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n\n/* Skip link for keyboard users */\n.skip-link {\n position: absolute;\n top: -40px;\n left: 0;\n background: var(--color-accent-primary);\n color: var(--color-text-white);\n padding: var(--space-sm) var(--space-md);\n z-index: var(--z-modal);\n transition: top var(--transition-fast);\n}\n\n.skip-link:focus {\n top: 0;\n}\n\n/* ============================================\n Energy Escalation Pattern (Story 9.9)\n ============================================ */\n\n/* Energy Level Classes - Applied to body */\n\n/* Calm - Join screen (minimal, focused) */\nbody.energy-calm .btn-glow:hover {\n box-shadow: none; /* No glow on calm screens */\n}\n\nbody.energy-calm .wordmark-hero {\n text-shadow: none; /* No hero glow on calm screens */\n}\n\n/* Warmup - Lobby (building excitement) */\nbody.energy-warmup .player-card {\n animation: energy-slide-in 0.3s ease-out;\n}\n\nbody.energy-warmup .qr-container {\n animation: energy-pulse-subtle 3s ease-in-out infinite;\n}\n\n@keyframes energy-slide-in {\n from { opacity: 0; transform: translateY(20px); }\n to { opacity: 1; transform: translateY(0); }\n}\n\n@keyframes energy-pulse-subtle {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.85; }\n}\n\n/* Party - Active gameplay (full effects) */\nbody.energy-party .album-cover {\n box-shadow: 0 0 60px rgba(255, 255, 255, 0.1);\n}\n\nbody.energy-party .submit-btn:not(:disabled) {\n box-shadow: var(--glow-primary);\n}\n\nbody.energy-party .year-display {\n text-shadow: 0 0 20px rgba(255, 45, 106, 0.3);\n}\n\n/* Screen Transitions */\n.view {\n animation: screen-fade-in 0.3s ease-out;\n}\n\n@keyframes screen-fade-in {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n/* Reduced motion - disable energy animations */\n@media (prefers-reduced-motion: reduce) {\n body.energy-warmup .player-card,\n body.energy-warmup .qr-container {\n animation: none;\n }\n .view {\n animation: none;\n }\n}\n\n/* ============================================\n Steal Power-up Styles (Story 15.3)\n ============================================ */\n\n/* Steal indicator now uses .stat-badge--steal in game header */\n\n/* Steal Button */\n.steal-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--space-xs);\n width: 100%;\n padding: var(--space-sm) var(--space-md);\n margin-top: var(--space-sm);\n background: linear-gradient(135deg, var(--color-purple-primary, #8b5cf6), var(--color-purple-secondary, #7c3aed));\n border: none;\n border-radius: var(--radius-lg);\n color: var(--color-text-white);\n font-size: var(--font-size-base);\n font-weight: var(--font-weight-bold);\n text-transform: uppercase;\n letter-spacing: 0.05em;\n cursor: pointer;\n box-shadow: 0 0 20px rgba(139, 92, 246, 0.4);\n transition: all var(--transition-fast);\n}\n\n.steal-btn:hover:not(:disabled) {\n transform: scale(1.03);\n box-shadow: 0 0 30px rgba(139, 92, 246, 0.6);\n}\n\n.steal-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.steal-btn-icon {\n font-size: var(--font-size-lg);\n}\n\n/* Steal Modal */\n.steal-modal {\n position: fixed;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: var(--z-modal);\n}\n\n.steal-modal-backdrop {\n position: absolute;\n inset: 0;\n background: rgba(0, 0, 0, 0.8);\n backdrop-filter: blur(4px);\n}\n\n.steal-modal-content {\n position: relative;\n background: var(--color-bg-card);\n border: 2px solid var(--color-purple-primary, #8b5cf6);\n border-radius: var(--radius-xl);\n padding: var(--space-lg);\n max-width: 320px;\n width: 90%;\n text-align: center;\n box-shadow: 0 0 40px rgba(139, 92, 246, 0.3);\n}\n\n.steal-modal-title {\n font-size: var(--font-size-xl);\n font-weight: var(--font-weight-bold);\n color: var(--color-text-primary);\n margin-bottom: var(--space-xs);\n}\n\n.steal-modal-subtitle {\n font-size: var(--font-size-sm);\n color: var(--color-text-muted);\n margin-bottom: var(--space-md);\n}\n\n.steal-target-list {\n display: flex;\n flex-direction: column;\n gap: var(--space-sm);\n margin-bottom: var(--space-md);\n}\n\n.steal-target-btn {\n display: block;\n width: 100%;\n padding: var(--space-sm) var(--space-md);\n background: var(--color-bg-surface);\n border: 1px solid var(--color-accent-secondary);\n border-radius: var(--radius-md);\n color: var(--color-text-primary);\n font-size: var(--font-size-base);\n font-weight: var(--font-weight-semibold);\n cursor: pointer;\n transition: all var(--transition-fast);\n}\n\n.steal-target-btn:hover {\n background: var(--color-accent-secondary);\n color: var(--color-bg-primary);\n transform: scale(1.02);\n}\n\n.steal-no-targets {\n color: var(--color-text-muted);\n font-size: var(--font-size-sm);\n padding: var(--space-md);\n}\n\n.steal-modal-cancel {\n width: 100%;\n}\n\n/* Steal Confirmation Toast */\n.steal-confirmation {\n position: fixed;\n bottom: calc(var(--space-xl) + 60px);\n left: 50%;\n transform: translateX(-50%);\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n background: linear-gradient(135deg, var(--color-purple-primary, #8b5cf6), var(--color-purple-secondary, #7c3aed));\n color: var(--color-text-white);\n padding: var(--space-sm) var(--space-lg);\n border-radius: var(--radius-full);\n font-weight: var(--font-weight-semibold);\n box-shadow: 0 4px 20px rgba(139, 92, 246, 0.5);\n animation: steal-toast-in 0.3s ease-out;\n z-index: var(--z-tooltip);\n}\n\n@keyframes steal-toast-in {\n from {\n opacity: 0;\n transform: translateX(-50%) translateY(20px);\n }\n to {\n opacity: 1;\n transform: translateX(-50%) translateY(0);\n }\n}\n\n.steal-confirmation-icon {\n font-size: var(--font-size-lg);\n}\n\n/* Steal badge in reveal view */\n.steal-badge {\n display: inline-flex;\n align-items: center;\n gap: var(--space-xs);\n background: rgba(139, 92, 246, 0.2);\n border: 1px solid var(--color-purple-primary, #8b5cf6);\n border-radius: var(--radius-full);\n padding: var(--space-xs) var(--space-sm);\n font-size: var(--font-size-xs);\n color: var(--color-purple-primary, #8b5cf6);\n margin-top: var(--space-xs);\n}\n\n.steal-badge-icon {\n font-size: 0.9em;\n}\n\n/* Victim variant - shows who was stolen from */\n.steal-badge-victim {\n background: rgba(239, 68, 68, 0.2);\n border-color: var(--color-error);\n color: var(--color-error);\n}\n\n/* Dark mode adjustments */\nbody.theme-dark .steal-modal-content {\n background: var(--color-bg-card);\n}\n\nbody.theme-dark .steal-target-btn {\n background: rgba(255, 255, 255, 0.05);\n border-color: var(--color-accent-secondary);\n}\n\nbody.theme-dark .steal-target-btn:hover {\n background: var(--color-accent-secondary);\n color: var(--color-bg-primary);\n}\n\n/* Reduced motion */\n@media (prefers-reduced-motion: reduce) {\n .stat-badge--steal {\n animation: none;\n }\n .steal-confirmation {\n animation: none;\n }\n}\n\n/* ============================================\n Intro Splash Modal (Issue #292)\n ============================================ */\n\n.intro-splash-modal {\n position: fixed;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: var(--z-modal);\n}\n\n.intro-splash-modal-backdrop {\n position: absolute;\n inset: 0;\n background: rgba(0, 0, 0, 0.8);\n backdrop-filter: blur(4px);\n}\n\n.intro-splash-modal-content {\n position: relative;\n background: var(--color-bg-card);\n border: 2px solid var(--color-accent-primary, #1db954);\n border-radius: var(--radius-xl);\n padding: var(--space-lg);\n max-width: 400px;\n width: 90%;\n text-align: center;\n box-shadow: 0 0 40px rgba(29, 185, 84, 0.3);\n}\n\n.intro-splash-modal-emoji {\n font-size: 3rem;\n margin-bottom: var(--space-sm);\n}\n\n.intro-splash-modal-title {\n font-size: var(--font-size-xl);\n font-weight: var(--font-weight-bold);\n color: var(--color-text-primary);\n margin-bottom: var(--space-xs);\n}\n\n.intro-splash-modal-desc {\n font-size: var(--font-size-base);\n color: var(--color-text-secondary);\n margin-bottom: var(--space-md);\n}\n\n.intro-splash-modal-waiting {\n font-size: var(--font-size-sm);\n color: var(--color-text-muted);\n margin-bottom: var(--space-sm);\n}\n\n.intro-splash-confirm-btn {\n width: 100%;\n margin-top: var(--space-sm);\n}\n\n/* ============================================\n Score Animations (Story 13.2)\n ============================================ */\n\n/* Tabular figures for score stability during animation */\n.score-animating {\n font-variant-numeric: tabular-nums;\n}\n\n/* Pop effect for big scores (20+ points) */\n@keyframes score-pop {\n 0% { transform: scale(1); }\n 50% { transform: scale(1.3); }\n 100% { transform: scale(1); }\n}\n\n.score-pop {\n animation: score-pop 700ms ease-out;\n display: inline-block; /* Required for transform */\n}\n\n/* Shake effect for bet loss */\n@keyframes score-shake {\n 0%, 100% { transform: translateX(0); }\n 20% { transform: translateX(-5px); }\n 40% { transform: translateX(5px); }\n 60% { transform: translateX(-3px); }\n 80% { transform: translateX(3px); }\n}\n\n.score-shake {\n animation: score-shake 400ms ease-out;\n display: inline-block;\n}\n\n/* Red flash for bet loss */\n@keyframes score-flash-red {\n 0%, 100% { color: inherit; }\n 50% { color: var(--color-error); }\n}\n\n.score-flash-red {\n animation: score-flash-red 400ms ease-out;\n}\n\n/* Golden glow for bet wins */\n@keyframes score-glow-gold {\n 0%, 100% {\n text-shadow: 0 0 0 transparent;\n color: inherit;\n }\n 50% {\n text-shadow: 0 0 20px #ffd700, 0 0 40px #ffd700;\n color: #ffd700;\n }\n}\n\n.score-glow-gold {\n animation: score-glow-gold 800ms ease-out;\n display: inline-block;\n}\n\n/* Burst effect for streak milestones */\n@keyframes score-burst {\n 0% {\n transform: scale(1);\n text-shadow: 0 0 0 transparent;\n }\n 30% {\n transform: scale(1.4);\n text-shadow: 0 0 30px #ff6600;\n }\n 100% {\n transform: scale(1);\n text-shadow: 0 0 0 transparent;\n }\n}\n\n.score-burst {\n animation: score-burst 700ms ease-out;\n display: inline-block;\n}\n\n/* ============================================\n Floating Points Popup (Story 13.2)\n ============================================ */\n\n@keyframes popup-float {\n 0% {\n opacity: 0;\n transform: translate(-50%, 0);\n }\n 20% {\n opacity: 1;\n }\n 100% {\n opacity: 0;\n transform: translate(-50%, -30px);\n }\n}\n\n.points-popup {\n position: fixed;\n z-index: var(--z-toast);\n font-size: var(--font-size-lg);\n font-weight: var(--font-weight-bold);\n color: var(--color-success);\n pointer-events: none;\n animation: popup-float 1000ms ease-out forwards;\n transform: translateX(-50%);\n}\n\n.points-popup--gold {\n color: #ffd700;\n text-shadow: 0 0 10px #ffd700;\n}\n\n.points-popup--streak {\n color: #ff6600;\n text-shadow: 0 0 10px #ff6600;\n font-size: var(--font-size-xl);\n}\n\n/* ============================================\n Leaderboard Slide Animations (Story 13.2)\n ============================================ */\n\n/* Enhanced climbing animation with green highlight */\n.leaderboard-entry--slide-up {\n animation: leaderboard-slide-up 500ms ease-out;\n}\n\n@keyframes leaderboard-slide-up {\n 0% {\n transform: translateY(10px);\n background: rgba(0, 255, 136, 0.3);\n }\n 100% {\n transform: translateY(0);\n background: transparent;\n }\n}\n\n/* Enhanced falling animation with opacity */\n.leaderboard-entry--slide-down {\n animation: leaderboard-slide-down 500ms ease-out;\n}\n\n@keyframes leaderboard-slide-down {\n 0% {\n transform: translateY(-10px);\n opacity: 0.6;\n }\n 100% {\n transform: translateY(0);\n opacity: 1;\n }\n}\n\n/* ============================================\n Reduced Motion Support (Story 13.2)\n ============================================ */\n\n@media (prefers-reduced-motion: reduce) {\n .score-pop,\n .score-shake,\n .score-glow-gold,\n .score-burst,\n .score-flash-red {\n animation: none !important;\n }\n\n .points-popup {\n animation: none !important;\n display: none !important;\n }\n\n .leaderboard-entry--slide-up,\n .leaderboard-entry--slide-down {\n animation: none !important;\n }\n}\n\n/* ============================================\n Device Tier Performance Optimizations (Story 18.3)\n ============================================ */\n\n/* Low-end device optimizations - disable complex animations */\nbody.device-tier-low .leaderboard-entry--climbing,\nbody.device-tier-low .leaderboard-entry--falling,\nbody.device-tier-low .leaderboard-entry--slide-up,\nbody.device-tier-low .leaderboard-entry--slide-down {\n animation: none !important;\n}\n\nbody.device-tier-low .neon-glow,\nbody.device-tier-low .btn-glow:hover {\n box-shadow: none !important;\n}\n\nbody.device-tier-low .score-pop,\nbody.device-tier-low .score-shake,\nbody.device-tier-low .score-glow-gold,\nbody.device-tier-low .score-burst {\n animation: none !important;\n}\n\nbody.device-tier-low .points-popup {\n display: none !important;\n}\n\n/* Medium-tier device optimizations - simplify animations */\nbody.device-tier-medium .leaderboard-entry--climbing,\nbody.device-tier-medium .leaderboard-entry--falling {\n animation-duration: 0.2s !important;\n}\n\nbody.device-tier-medium .neon-glow {\n animation: none !important;\n}\n\nbody.device-tier-medium .score-pop,\nbody.device-tier-medium .score-shake,\nbody.device-tier-medium .score-glow-gold,\nbody.device-tier-medium .score-burst {\n animation-duration: 0.2s !important;\n}\n\n/* Tap-to-skip hint for reveal view (Story 18.3) */\n.reveal-skip-hint {\n position: absolute;\n bottom: var(--space-md);\n left: 50%;\n transform: translateX(-50%);\n font-size: var(--font-size-sm);\n color: var(--color-text-muted);\n opacity: 0;\n animation: fadeInDelayed 0.3s ease-out 1s forwards;\n}\n\n@keyframes fadeInDelayed {\n to {\n opacity: 0.6;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .reveal-skip-hint {\n animation: none;\n opacity: 0.6;\n }\n}\n\nbody.device-tier-low .reveal-skip-hint {\n animation: none;\n opacity: 0.6;\n}\n\n/* ========================================\n Playlist Request Feature (Story 44)\n ======================================== */\n\n/* Request button in playlists section */\n.request-btn {\n margin-top: var(--space-md);\n gap: var(--space-xs);\n}\n\n/* Requests list */\n.requests-list {\n display: flex;\n flex-direction: column;\n gap: var(--space-sm);\n}\n\n/* Individual request item */\n.request-item {\n display: flex;\n align-items: center;\n gap: var(--space-md);\n padding: var(--space-md);\n background: var(--color-surface-raised);\n border-radius: var(--radius-md);\n border: 1px solid var(--color-border);\n}\n\n.request-item-thumbnail {\n width: 40px;\n height: 40px;\n min-width: 40px;\n min-height: 40px;\n max-width: 40px;\n max-height: 40px;\n border-radius: var(--radius-sm);\n object-fit: cover;\n flex-shrink: 0;\n}\n\n.request-item-thumbnail-placeholder {\n width: 40px;\n height: 40px;\n min-width: 40px;\n min-height: 40px;\n border-radius: var(--radius-sm);\n background: var(--color-surface);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 1.25rem;\n flex-shrink: 0;\n}\n\n.request-item-info {\n flex: 1;\n min-width: 0;\n}\n\n.request-item-name {\n font-weight: 600;\n font-size: var(--font-size-base);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.request-item-meta {\n font-size: var(--font-size-sm);\n color: var(--color-text-muted);\n}\n\n/* Status badges */\n.request-status {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 4px 8px;\n border-radius: var(--radius-full);\n font-size: var(--font-size-xs);\n font-weight: 600;\n white-space: nowrap;\n}\n\n.request-status--pending {\n background: rgba(255, 193, 7, 0.15);\n color: #ffc107;\n}\n\n.request-status--ready {\n background: rgba(76, 175, 80, 0.15);\n color: #4caf50;\n}\n\n.request-status--installed {\n background: transparent;\n color: #4caf50;\n border: 1px solid #4caf50;\n}\n\n.request-status--declined {\n background: rgba(244, 67, 54, 0.15);\n color: #f44336;\n}\n\n/* Update button for ready status */\n.request-update-btn {\n font-size: var(--font-size-xs);\n padding: 6px 12px;\n white-space: nowrap;\n}\n\n/* Modal text input */\n.text-input {\n width: 100%;\n padding: var(--space-sm) var(--space-md);\n font-size: var(--font-size-base);\n background: var(--color-surface);\n border: 1px solid var(--color-border);\n border-radius: var(--radius-md);\n color: var(--color-text);\n transition: border-color 0.15s ease;\n}\n\n.text-input:focus {\n outline: none;\n border-color: var(--color-primary);\n}\n\n.text-input.input-error {\n border-color: var(--color-error);\n}\n\n/* Info box */\n.info-box {\n background: var(--color-surface-raised);\n border-radius: var(--radius-md);\n padding: var(--space-md);\n margin-top: var(--space-md);\n}\n\n.info-box-title {\n font-weight: 600;\n margin-bottom: var(--space-xs);\n color: var(--color-text-muted);\n}\n\n.info-box-list {\n margin: 0;\n padding-left: 0;\n list-style-position: inside;\n font-size: var(--font-size-sm);\n color: var(--color-text-muted);\n}\n\n.info-box-list li {\n margin-bottom: var(--space-xs);\n}\n\n.info-box-list li:last-child {\n margin-bottom: 0;\n}\n\n.info-box-note {\n margin-top: var(--space-sm);\n padding-top: var(--space-sm);\n border-top: 1px solid var(--color-border);\n font-size: var(--font-size-sm);\n color: var(--color-text-muted);\n}\n\n/* Success modal */\n.modal-content--success {\n text-align: center;\n}\n\n.success-icon {\n font-size: 3rem;\n margin-bottom: var(--space-sm);\n}\n\n.success-playlist-name {\n font-weight: 600;\n font-size: var(--font-size-lg);\n margin-bottom: var(--space-xs);\n}\n\n.success-estimate {\n color: var(--color-text-muted);\n font-size: var(--font-size-sm);\n}\n\n/* Loading state for submit button */\n.btn--loading {\n position: relative;\n color: transparent !important;\n pointer-events: none;\n}\n\n.btn--loading::after {\n content: '';\n position: absolute;\n width: 16px;\n height: 16px;\n top: 50%;\n left: 50%;\n margin-left: -8px;\n margin-top: -8px;\n border: 2px solid transparent;\n border-top-color: currentColor;\n border-radius: 50%;\n animation: spin 0.6s linear infinite;\n}\n\n@keyframes spin {\n to { transform: rotate(360deg); }\n}\n\n/* ============================================\n Shareable Result Cards (Issue #120)\n ============================================ */\n\n.share-container {\n margin: 1.5rem 0;\n text-align: center;\n}\n\n.share-header {\n font-size: 1.2rem;\n font-weight: 700;\n margin-bottom: 1rem;\n color: var(--text-primary, #fff);\n}\n\n.share-card-preview {\n margin: 12px auto;\n max-width: 360px;\n width: 100%;\n border-radius: 16px;\n overflow: hidden;\n box-shadow: 0 12px 36px rgba(0, 0, 0, 0.5), 0 0 0 1px rgba(255, 45, 106, 0.25);\n background: #0a0a12;\n}\n\n.share-card-image {\n display: block;\n width: 100%;\n height: auto;\n aspect-ratio: 1 / 1;\n}\n\n.share-buttons {\n display: flex;\n gap: 0.75rem;\n justify-content: center;\n flex-wrap: wrap;\n}\n\n.share-btn {\n padding: 0.6rem 1.2rem;\n border: none;\n border-radius: 8px;\n font-size: 0.95rem;\n font-weight: 600;\n cursor: pointer;\n background: var(--accent-color, #e94560);\n color: #fff;\n transition: opacity 0.2s, transform 0.1s;\n}\n\n.share-btn:hover {\n opacity: 0.9;\n}\n\n.share-btn:active {\n transform: scale(0.97);\n}\n\n.share-toast {\n margin-top: 0.75rem;\n padding: 0.4rem 1rem;\n background: var(--success-color, #4caf50);\n color: #fff;\n border-radius: 20px;\n display: inline-block;\n font-size: 0.85rem;\n font-weight: 600;\n animation: shareToastIn 0.3s ease;\n}\n\n@keyframes shareToastIn {\n from { opacity: 0; transform: translateY(8px); }\n to { opacity: 1; transform: translateY(0); }\n}\n\n/* Admin share player tabs (Issue #208) */\n.admin-share-player-tabs {\n display: flex;\n flex-wrap: wrap;\n gap: 0.4rem;\n justify-content: center;\n margin-bottom: 0.75rem;\n}\n\n.admin-share-tab {\n padding: 0.3rem 0.85rem;\n border-radius: 20px;\n border: 1px solid var(--color-border-light);\n background: transparent;\n color: var(--color-text-secondary);\n font-size: var(--font-size-sm);\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.admin-share-tab:hover {\n border-color: var(--color-accent-brand);\n color: var(--color-accent-brand);\n}\n\n.admin-share-tab.active {\n background: var(--color-accent-brand);\n border-color: var(--color-accent-brand);\n color: #fff;\n font-weight: var(--font-weight-semibold);\n}\n\n@media (max-width: 480px) {\n .share-buttons {\n flex-direction: column;\n align-items: center;\n }\n .share-btn {\n width: 100%;\n max-width: 280px;\n }\n .share-card-preview {\n max-width: 320px;\n }\n}\n\n/* ============================================\n Skeleton Loading States (#240)\n ============================================ */\n@keyframes shimmer {\n 0% { background-position: 200% 0; }\n 100% { background-position: -200% 0; }\n}\n\n.skeleton {\n background: linear-gradient(90deg, var(--color-bg-card) 25%, #3a3a4e 50%, var(--color-bg-card) 75%);\n background-size: 200% 100%;\n animation: shimmer 1.5s infinite;\n border-radius: var(--radius-md);\n}\n\n.skeleton-list {\n display: flex;\n flex-direction: column;\n gap: var(--space-sm);\n padding: var(--space-sm) 0;\n}\n\n/* Media player rows \u2014 match the height of a radio option */\n.skeleton-row {\n height: 48px;\n width: 100%;\n}\n\n/* Playlist cards \u2014 taller to match playlist card height */\n.skeleton-card {\n height: 64px;\n width: 100%;\n}\n\n/* ============================================\n Connection Status Indicator (#238)\n ============================================ */\n.player-header {\n position: relative;\n}\n\n.connection-indicator {\n position: absolute;\n top: 50%;\n right: var(--space-md);\n transform: translateY(-50%);\n display: flex;\n align-items: center;\n gap: 4px;\n opacity: 0;\n transition: opacity 0.3s ease;\n}\n\n/* Only visible when disconnected/reconnecting */\n.connection-indicator--disconnected {\n opacity: 1;\n}\n\n.connection-dot {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: var(--color-error, #e94560);\n animation: pulse-dot 1.2s infinite;\n}\n\n@keyframes pulse-dot {\n 0%, 100% { opacity: 1; transform: scale(1); }\n 50% { opacity: 0.4; transform: scale(0.7); }\n}\n\n/* ============================================\n Party Lights (#331)\n ============================================ */\n\n.party-lights-picker {\n margin-top: 12px;\n}\n\n.party-lights-picker-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 8px;\n font-size: 0.85rem;\n color: var(--text-secondary, #aaa);\n}\n\n.party-lights-count {\n font-weight: 500;\n}\n\n.btn-link {\n background: none;\n border: none;\n color: var(--accent, #ff00ff);\n cursor: pointer;\n font-size: 0.85rem;\n padding: 4px 8px;\n}\n\n.btn-link:hover {\n text-decoration: underline;\n}\n\n.party-lights-list {\n max-height: 240px;\n overflow-y: auto;\n border-radius: 8px;\n background: var(--card-bg, rgba(255,255,255,0.05));\n margin-bottom: 12px;\n}\n\n.party-light-item {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 12px;\n cursor: pointer;\n border-bottom: 1px solid var(--border, rgba(255,255,255,0.08));\n min-height: 44px;\n}\n\n.party-light-item:last-child {\n border-bottom: none;\n}\n\n.party-light-item:hover {\n background: rgba(255,255,255,0.03);\n}\n\n.party-light-item input[type=\"checkbox\"] {\n width: 18px;\n height: 18px;\n flex-shrink: 0;\n accent-color: var(--accent, #ff00ff);\n}\n\n.light-status {\n font-size: 0.75rem;\n flex-shrink: 0;\n}\n\n.light-name {\n flex: 1;\n font-size: 0.9rem;\n color: var(--text-primary, #fff);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.light-cap-badge {\n font-size: 0.7rem;\n padding: 2px 6px;\n border-radius: 4px;\n background: rgba(255,255,255,0.1);\n color: var(--text-secondary, #aaa);\n flex-shrink: 0;\n font-weight: 500;\n}\n\n/* ============================================\n Issue #550: WLED Presets & Light Mode UI\n ============================================ */\n\n.setting-row--vertical {\n flex-direction: column;\n align-items: flex-start;\n gap: var(--space-sm, 8px);\n}\n\n.wled-presets-grid {\n display: grid;\n grid-template-columns: 1fr 1fr 1fr;\n gap: var(--space-xs, 4px) var(--space-sm, 8px);\n width: 100%;\n}\n\n.wled-preset-item {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--space-xs, 4px);\n font-size: 0.8rem;\n color: var(--text-secondary, #aaa);\n}\n\n.wled-preset-item .input-sm {\n width: 48px;\n padding: 2px 4px;\n border: 1px solid rgba(255,255,255,0.15);\n border-radius: 4px;\n background: rgba(255,255,255,0.05);\n color: var(--text-primary, #fff);\n font-size: 0.8rem;\n text-align: center;\n}\n\n/* ============================================\n Issue #477: Admin Game Phase Views\n ============================================ */\n\n.admin-game-wrapper {\n max-width: 480px;\n margin: 0 auto;\n}\n\n.admin-phase-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: var(--space-md);\n}\n\n.round-badge {\n font-weight: 600;\n font-size: 1rem;\n}\n\n.timer-badge {\n font-size: 1.2rem;\n font-weight: 700;\n font-variant-numeric: tabular-nums;\n min-width: 3em;\n text-align: center;\n}\n\n.timer-badge.timer-warning {\n color: var(--color-warning, #f59e0b);\n}\n\n.timer-badge.timer-critical {\n color: var(--color-danger, #ef4444);\n animation: pulse-critical 0.5s ease-in-out infinite alternate;\n}\n\n@keyframes pulse-critical {\n from { opacity: 1; }\n to { opacity: 0.5; }\n}\n\n.admin-song-card {\n display: flex;\n align-items: center;\n gap: var(--space-md);\n background: var(--color-bg-card);\n border-radius: var(--radius-md);\n padding: var(--space-md);\n margin-bottom: var(--space-md);\n}\n\n.admin-album-art {\n width: 64px;\n height: 64px;\n border-radius: var(--radius-sm);\n object-fit: cover;\n flex-shrink: 0;\n}\n\n.admin-song-meta {\n min-width: 0;\n}\n\n.admin-song-title {\n font-weight: 600;\n font-size: 1rem;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.admin-song-artist {\n color: var(--text-secondary, #aaa);\n font-size: 0.9rem;\n}\n\n/* #653: Admin-only song details (below large album cover) */\n.admin-song-details {\n text-align: center;\n margin-bottom: var(--space-sm, 8px);\n}\n\n.admin-song-year {\n font-size: 0.95rem;\n color: var(--color-primary, #1db954);\n font-weight: 600;\n}\n\n.admin-song-funfact {\n font-size: 0.85rem;\n color: var(--text-secondary, #aaa);\n font-style: italic;\n margin-top: 4px;\n line-height: 1.3;\n}\n\n/* #660: Admin playing-mode banner */\n.admin-playing-banner {\n display: flex;\n align-items: center;\n gap: var(--space-sm, 8px);\n padding: var(--space-sm, 8px) var(--space-md, 16px);\n background: var(--bg-card, rgba(255, 255, 255, 0.05));\n border-bottom: 2px solid var(--color-primary, #1db954);\n font-size: 0.9rem;\n}\n\n.admin-playing-banner-icon {\n font-size: 1.1rem;\n flex-shrink: 0;\n}\n\n.admin-playing-banner-text {\n flex: 1;\n min-width: 0;\n}\n\n.admin-playing-banner-btn {\n flex-shrink: 0;\n font-size: 0.8rem;\n padding: 4px 10px;\n border-radius: var(--radius-sm, 8px);\n}\n\n/* #1012 follow-up: Idle-halt banner \u2014 shown on REVEAL when a round\n ended with zero guesses, so the screen doesn't look generically stuck. */\n.idle-halt-banner {\n display: flex;\n align-items: center;\n gap: var(--space-sm, 8px);\n margin: var(--space-md, 16px) auto;\n padding: var(--space-sm, 8px) var(--space-md, 16px);\n background: var(--bg-card, rgba(255, 255, 255, 0.06));\n border: 1px solid var(--color-warning, #f5a623);\n border-radius: var(--radius-md, 12px);\n color: var(--color-warning, #f5a623);\n font-size: 0.9rem;\n line-height: 1.35;\n max-width: 540px;\n}\n\n.idle-halt-icon {\n font-size: 1.2rem;\n flex-shrink: 0;\n}\n\n/* #805: Recovery banner shown when game pauses due to playback error. */\n.admin-pause-recovery {\n margin: var(--space-md, 16px);\n padding: var(--space-md, 16px) var(--space-lg, 20px);\n background: var(--bg-card, rgba(255, 255, 255, 0.06));\n border: 2px solid var(--color-warning, #f5a623);\n border-radius: var(--radius-md, 12px);\n}\n\n.admin-pause-recovery-header {\n display: flex;\n align-items: center;\n gap: var(--space-sm, 8px);\n margin-bottom: var(--space-sm, 8px);\n}\n\n.admin-pause-recovery-icon {\n font-size: 1.3rem;\n flex-shrink: 0;\n}\n\n.admin-pause-recovery-title {\n font-size: 1rem;\n color: var(--color-warning, #f5a623);\n}\n\n.admin-pause-recovery-message {\n font-size: 0.95rem;\n line-height: 1.4;\n margin: 0 0 var(--space-sm, 8px) 0;\n color: var(--text-primary, #ffffff);\n}\n\n.admin-pause-recovery-detail {\n font-size: 0.8rem;\n line-height: 1.3;\n margin: 0 0 var(--space-md, 16px) 0;\n color: var(--text-secondary, rgba(255, 255, 255, 0.6));\n font-family: var(--font-monospace, monospace);\n word-break: break-word;\n}\n\n.admin-pause-recovery-detail.hidden {\n display: none;\n}\n\n.admin-pause-recovery-actions {\n display: flex;\n gap: var(--space-sm, 8px);\n flex-wrap: wrap;\n}\n\n.admin-pause-recovery-actions .btn {\n flex: 1;\n min-width: 120px;\n}\n\n/* #660: Admin personal result card (reveal phase) */\n.admin-personal-result-card {\n display: flex;\n flex-direction: column;\n gap: var(--space-xs, 4px);\n}\n\n.admin-personal-row {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: var(--space-xs, 4px) 0;\n}\n\n.admin-personal-label {\n color: var(--text-secondary, #aaa);\n font-size: 0.9rem;\n}\n\n.admin-personal-value {\n font-weight: 600;\n font-size: 1rem;\n}\n\n.admin-personal-score {\n color: var(--color-primary, #1db954);\n font-size: 1.1rem;\n}\n\n/* Admin read-only challenge options */\n.artist-option--readonly {\n padding: 10px 14px;\n background: var(--bg-card, rgba(255, 255, 255, 0.05));\n border: 1px solid var(--color-border-dark, rgba(255, 255, 255, 0.1));\n border-radius: var(--radius-md, 12px);\n text-align: center;\n font-size: 0.9rem;\n opacity: 0.8;\n}\n\n/* Admin intro splash confirm */\n.admin-intro-splash {\n text-align: center;\n padding: var(--space-md);\n margin-bottom: var(--space-md);\n background: var(--bg-card, rgba(255, 255, 255, 0.05));\n border-radius: var(--radius-md, 12px);\n border: 1px solid var(--color-primary, #1db954);\n}\n\n.intro-splash-info {\n font-size: 1.1rem;\n font-weight: 600;\n margin-bottom: var(--space-sm);\n}\n\n.intro-splash-icon {\n margin-right: 6px;\n}\n\n.btn-compact {\n padding: 8px 12px;\n font-size: 0.85rem;\n}\n\n.admin-player-panel {\n background: var(--color-bg-card);\n border-radius: var(--radius-md);\n padding: var(--space-md);\n margin-bottom: var(--space-md);\n}\n\n.admin-year-selector {\n text-align: center;\n margin-bottom: var(--space-md);\n}\n\n.admin-year-selector .year-display {\n display: block;\n font-size: 2.5rem;\n font-weight: 700;\n margin-bottom: var(--space-sm);\n font-variant-numeric: tabular-nums;\n}\n\n.admin-year-selector .year-slider {\n width: 100%;\n margin-bottom: var(--space-xs);\n}\n\n.year-range-labels {\n display: flex;\n justify-content: space-between;\n font-size: 0.75rem;\n color: var(--text-secondary, #aaa);\n}\n\n.last-round-banner {\n text-align: center;\n padding: var(--space-sm);\n background: var(--color-warning, #f59e0b);\n color: #000;\n border-radius: var(--radius-sm);\n font-weight: 600;\n margin-bottom: var(--space-md);\n}\n\n.submission-status {\n text-align: center;\n color: var(--text-secondary, #aaa);\n font-size: 0.9rem;\n margin-top: var(--space-sm);\n}\n\n.submission-count {\n margin-bottom: 6px;\n}\n\n.submission-players {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n justify-content: center;\n}\n\n.submission-player {\n display: inline-flex;\n align-items: center;\n gap: 3px;\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 0.8rem;\n background: var(--bg-card, rgba(255, 255, 255, 0.05));\n}\n\n.submission-player.is-submitted {\n color: var(--color-primary, #1db954);\n}\n\n.submission-player.is-waiting {\n opacity: 0.6;\n}\n\n/* Reveal */\n.reveal-year-display {\n font-size: 2.5rem;\n font-weight: 700;\n text-align: center;\n margin: var(--space-md) 0;\n color: var(--color-primary, #1db954);\n}\n\n.admin-personal-result {\n display: flex;\n justify-content: space-between;\n align-items: center;\n background: var(--color-bg-card);\n border-radius: var(--radius-md);\n padding: var(--space-md);\n margin-bottom: var(--space-md);\n}\n\n.score-badge {\n font-weight: 700;\n color: var(--color-primary, #1db954);\n}\n\n/* Leaderboard */\n.admin-leaderboard-container {\n margin-bottom: var(--space-md);\n}\n\n.admin-leaderboard {\n width: 100%;\n border-collapse: collapse;\n}\n\n.admin-leaderboard th {\n text-align: left;\n font-weight: 600;\n padding: var(--space-xs) var(--space-sm);\n border-bottom: 1px solid var(--color-border-light);\n font-size: 0.85rem;\n color: var(--text-secondary, #aaa);\n}\n\n.admin-leaderboard td {\n padding: var(--space-xs) var(--space-sm);\n}\n\n.admin-leaderboard tr.admin-highlight td {\n font-weight: 600;\n color: var(--color-primary, #1db954);\n}\n\n/* End */\n.admin-winner-display {\n text-align: center;\n font-size: 1.3rem;\n font-weight: 600;\n padding: var(--space-lg) 0;\n}\n\n.winner-trophy {\n font-size: 2rem;\n}\n\n.admin-end-actions {\n display: flex;\n gap: var(--space-sm);\n justify-content: center;\n margin-top: var(--space-md);\n}\n\n/* ==========================================\n First-run wizard (DESIGN.md ## Patterns)\n ========================================== */\n\n/* Takeover: when active, hide the rest of the admin chrome */\nbody.wizard-active > .admin-header,\nbody.wizard-active > main.admin-content,\nbody.wizard-active > .pwa-ios-hint {\n display: none;\n}\n\n.wizard-takeover {\n position: fixed;\n inset: 0;\n z-index: var(--z-overlay, 1100);\n background: var(--color-bg-primary);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n.wizard-takeover.hidden { display: none; }\n\n.wiz-bg {\n position: absolute;\n inset: 0;\n background:\n radial-gradient(ellipse at top, rgba(255, 45, 106, 0.18), transparent 55%),\n radial-gradient(ellipse at bottom right, rgba(0, 245, 255, 0.12), transparent 40%);\n pointer-events: none;\n}\n\n.wiz-top {\n padding: var(--space-md) var(--space-lg);\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--space-md);\n border-bottom: 1px solid var(--color-border-neon);\n position: relative;\n z-index: 1;\n}\n.wiz-step-count {\n font-family: var(--font-display);\n font-weight: 600;\n font-size: var(--font-size-xs);\n letter-spacing: 0.14em;\n text-transform: uppercase;\n color: var(--color-text-dim, #6b6b7a);\n flex: 1;\n text-align: center;\n}\n.wiz-skip {\n font-family: var(--font-display);\n font-size: var(--font-size-sm);\n color: var(--color-text-neon-muted);\n background: none;\n border: none;\n font-weight: 500;\n cursor: pointer;\n padding: var(--space-xs) var(--space-sm);\n}\n.wiz-skip:hover { color: var(--color-text-white); }\n\n.wiz-progress {\n display: flex;\n gap: var(--space-xs);\n padding: var(--space-sm) var(--space-lg);\n position: relative;\n z-index: 1;\n}\n.wiz-seg {\n flex: 1;\n height: 3px;\n background: var(--color-dark-surface);\n border-radius: var(--radius-full);\n overflow: hidden;\n}\n.wiz-seg.filled {\n background: linear-gradient(90deg, var(--color-accent-primary), var(--color-accent-secondary));\n box-shadow: 0 0 12px rgba(255, 45, 106, 0.5);\n}\n.wiz-seg.active .wiz-seg-inner {\n height: 100%;\n width: 60%;\n background: linear-gradient(90deg, var(--color-accent-primary), var(--color-accent-secondary));\n box-shadow: 0 0 12px rgba(255, 45, 106, 0.5);\n border-radius: var(--radius-full);\n}\n\n.wiz-frame {\n flex: 1;\n overflow-y: auto;\n position: relative;\n z-index: 1;\n}\n.wiz-frame[hidden] { display: none; }\n\n.wiz-body {\n padding: var(--space-lg);\n display: flex;\n flex-direction: column;\n gap: var(--space-md);\n max-width: 720px;\n margin: 0 auto;\n}\n\n.wiz-eyebrow {\n font-family: var(--font-display);\n font-weight: 700;\n font-size: var(--font-size-xs);\n letter-spacing: 0.14em;\n text-transform: uppercase;\n color: var(--color-accent-secondary);\n}\n.wiz-title {\n font-family: var(--font-display);\n font-weight: 700;\n font-size: var(--font-size-3xl);\n line-height: 1.15;\n letter-spacing: -0.01em;\n color: var(--color-text-white);\n}\n.wiz-sub {\n color: var(--color-text-neon-muted);\n font-size: var(--font-size-base);\n line-height: 1.5;\n}\n.wiz-hint { font-size: var(--font-size-sm); margin-top: var(--space-xs); }\n.wiz-hint a { color: var(--color-accent-secondary); text-decoration: underline; }\n\n.wiz-list {\n display: flex;\n flex-direction: column;\n gap: var(--space-sm);\n}\n\n/* Speaker / playlist rows */\n.wiz-row {\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n padding: var(--space-sm) var(--space-md);\n background: var(--color-dark-surface);\n border: 1px solid var(--color-border-neon);\n border-radius: var(--radius-lg);\n cursor: pointer;\n transition: var(--transition-fast);\n color: var(--color-text-white);\n text-align: left;\n width: 100%;\n font-family: var(--font-body);\n}\n.wiz-row:hover { background: var(--color-dark-surface-hover); }\n.wiz-row.selected {\n background: linear-gradient(90deg, rgba(255, 45, 106, 0.15), rgba(0, 245, 255, 0.05));\n border-color: var(--color-accent-primary);\n box-shadow: 0 0 14px rgba(255, 45, 106, 0.25);\n}\n.wiz-row-avatar {\n width: 36px;\n height: 36px;\n border-radius: var(--radius-md);\n background: linear-gradient(135deg, var(--color-accent-primary), var(--color-accent-brand));\n flex-shrink: 0;\n display: grid;\n place-items: center;\n color: var(--color-bg-primary);\n}\n.wiz-row-avatar-icon {\n width: 20px;\n height: 20px;\n}\n.wiz-row-text { flex: 1; min-width: 0; }\n.wiz-row-name {\n font-family: var(--font-display);\n font-weight: 600;\n font-size: var(--font-size-base);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.wiz-row-sub {\n font-size: var(--font-size-xs);\n color: var(--color-text-neon-muted);\n margin-top: 2px;\n}\n.wiz-row-check {\n color: var(--color-success-neon);\n text-shadow: var(--glow-success);\n}\n\n/* Provider grid (Step 2) */\n.wiz-provider-grid {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: var(--space-sm);\n}\n.wiz-provider-chip {\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n padding: var(--space-md);\n background: var(--color-dark-surface);\n border: 1px solid var(--color-border-neon);\n border-radius: var(--radius-md);\n font-family: var(--font-display);\n font-weight: 600;\n font-size: var(--font-size-base);\n cursor: pointer;\n color: var(--color-text-white);\n transition: var(--transition-fast);\n}\n.wiz-provider-chip:hover { background: var(--color-dark-surface-hover); }\n.wiz-provider-chip.active {\n border-color: var(--color-accent-primary);\n box-shadow: 0 0 14px rgba(255, 45, 106, 0.25);\n}\n.wiz-provider-chip.connected {\n border-color: var(--color-success-neon);\n background: rgba(57, 255, 20, 0.1);\n}\n\n/* Dimmed chip: provider not supported on the selected speaker (#772).\n Visible but obviously unavailable \u2014 clicking opens the explainer card. */\n.wiz-provider-chip {\n justify-content: space-between;\n}\n.wiz-provider-chip.disabled {\n opacity: 0.4;\n cursor: help;\n background: rgba(255, 255, 255, 0.02);\n}\n.wiz-provider-chip.disabled:hover {\n opacity: 0.55;\n background: rgba(255, 255, 255, 0.04);\n}\n.wiz-provider-chip .chip-lock {\n width: 14px;\n height: 14px;\n opacity: 0.7;\n flex-shrink: 0;\n}\n\n/* Capability badge under the speaker platform label (Step 1, #772). */\n.wiz-row-sub .cap-dot {\n width: 4px;\n height: 4px;\n border-radius: 50%;\n background: var(--color-text-dim);\n display: inline-block;\n margin: 0 6px;\n vertical-align: middle;\n}\n.wiz-row-sub .cap-badge {\n font-family: var(--font-display);\n font-weight: 600;\n font-size: 10px;\n text-transform: uppercase;\n letter-spacing: 0.06em;\n padding: 1px 6px;\n border-radius: var(--radius-sm);\n border: 1px solid;\n vertical-align: middle;\n /* #1319: the badge text itself never wraps \u2014 summaries keep it short, the\n accent cases (\"Spotify only\") are short by construction. */\n white-space: nowrap;\n}\n.wiz-row-sub .cap-badge.full {\n color: var(--color-success-neon);\n background: rgba(57, 255, 20, 0.08);\n border-color: rgba(57, 255, 20, 0.4);\n}\n.wiz-row-sub .cap-badge.partial {\n color: var(--color-warning-alt);\n background: rgba(255, 102, 0, 0.08);\n border-color: rgba(255, 102, 0, 0.4);\n}\n.wiz-row-sub .cap-badge.none {\n color: var(--color-error-neon);\n background: rgba(255, 0, 64, 0.08);\n border-color: rgba(255, 0, 64, 0.4);\n}\n/* #1319: multi-service capability is static info, not actionable \u2014 drop the\n orange/uppercase/pill chrome so the speaker name stays the hero. Muted,\n borderless, plain-case secondary text. The full list lives on the tooltip. */\n.wiz-row-sub .cap-badge.summary {\n color: var(--color-text-dim);\n background: none;\n border: none;\n padding: 0;\n text-transform: none;\n letter-spacing: 0;\n font-weight: 500;\n}\n\n/* Explainer card shown when user clicks a dimmed provider chip (#772). */\n.wiz-explainer {\n margin-top: var(--space-md);\n padding: var(--space-lg);\n border-radius: var(--radius-lg);\n background: linear-gradient(135deg, rgba(255, 102, 0, 0.06), rgba(0, 245, 255, 0.04));\n border: 1px solid rgba(255, 102, 0, 0.35);\n}\n.wiz-explainer[hidden] { display: none; }\n.wiz-explainer-title {\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n font-family: var(--font-display);\n font-weight: 700;\n font-size: var(--font-size-md);\n margin: 0 0 var(--space-sm);\n}\n.wiz-explainer-title .icon { font-size: 18px; }\n.wiz-explainer-body {\n font-size: var(--font-size-base);\n line-height: 1.55;\n color: var(--color-text-neon-muted);\n margin: 0 0 var(--space-md);\n}\n.wiz-explainer-steps {\n margin: 0 0 var(--space-md);\n padding-left: var(--space-lg);\n font-size: var(--font-size-base);\n line-height: 1.75;\n color: var(--color-text-neon-muted);\n}\n.wiz-explainer-steps li strong { color: var(--color-text-white); }\n.wiz-explainer-actions {\n display: flex;\n gap: var(--space-sm);\n flex-wrap: wrap;\n}\n.wiz-explainer-footer {\n margin: var(--space-md) 0 0;\n padding-top: var(--space-sm);\n border-top: 1px solid rgba(255, 255, 255, 0.06);\n font-size: var(--font-size-sm);\n color: var(--color-text-dim);\n font-style: italic;\n}\n\n/* Level-up cards (Step 4) */\n.wiz-lvl-card {\n display: flex;\n align-items: flex-start;\n gap: var(--space-sm);\n padding: var(--space-sm) var(--space-md);\n background: var(--color-dark-surface);\n border: 1px solid var(--color-border-neon);\n border-radius: var(--radius-lg);\n cursor: pointer;\n transition: var(--transition-fast);\n}\n.wiz-lvl-card.on {\n background: rgba(0, 245, 255, 0.08);\n border-color: var(--color-accent-secondary);\n}\n.wiz-lvl-card.unavailable {\n opacity: 0.45;\n cursor: not-allowed;\n}\n.wiz-lvl-text { flex: 1; }\n.wiz-lvl-title {\n font-family: var(--font-display);\n font-weight: 600;\n font-size: var(--font-size-base);\n color: var(--color-text-white);\n}\n.wiz-lvl-desc {\n font-size: var(--font-size-xs);\n color: var(--color-text-neon-muted);\n margin-top: 2px;\n line-height: 1.4;\n}\n.wiz-lvl-toggle {\n width: 38px;\n height: 22px;\n background: var(--color-dark-surface-hover);\n border-radius: var(--radius-full);\n border: 1px solid var(--color-border-neon);\n position: relative;\n flex-shrink: 0;\n margin-top: 2px;\n}\n.wiz-lvl-toggle::after {\n content: '';\n position: absolute;\n top: 2px;\n left: 2px;\n width: 16px;\n height: 16px;\n background: var(--color-text-neon-muted);\n border-radius: var(--radius-full);\n transition: var(--transition-fast);\n}\n.wiz-lvl-card.on .wiz-lvl-toggle {\n background: var(--color-accent-primary);\n border-color: var(--color-accent-primary);\n}\n.wiz-lvl-card.on .wiz-lvl-toggle::after {\n left: 18px;\n background: var(--color-bg-primary);\n}\n\n/* Done screen */\n.wiz-done {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--space-lg);\n text-align: center;\n padding: var(--space-xl);\n position: relative;\n z-index: 1;\n}\n.wiz-done-badge {\n font-family: var(--font-display);\n font-weight: 700;\n font-size: var(--font-size-sm);\n letter-spacing: 0.14em;\n color: var(--color-success-neon);\n text-shadow: var(--glow-success);\n}\n.wiz-done-tag {\n font-family: var(--font-display);\n font-weight: 600;\n font-size: var(--font-size-xl);\n color: var(--color-text-white);\n}\n.wiz-done-summary {\n display: flex;\n flex-direction: column;\n gap: var(--space-xs);\n width: 100%;\n max-width: 380px;\n padding: var(--space-md);\n background: var(--color-dark-surface);\n border: 1px solid var(--color-border-neon);\n border-radius: var(--radius-lg);\n}\n.wiz-done-line {\n display: flex;\n justify-content: space-between;\n align-items: baseline;\n gap: var(--space-lg);\n font-family: var(--font-display);\n font-size: var(--font-size-sm);\n color: var(--color-text-neon-muted);\n}\n.wiz-done-line > span {\n letter-spacing: 0.08em;\n text-transform: uppercase;\n font-size: var(--font-size-xs);\n font-weight: 600;\n flex-shrink: 0;\n}\n.wiz-done-line strong {\n color: var(--color-text-white);\n font-weight: 600;\n text-align: right;\n word-break: break-word;\n}\n.wiz-done-demo {\n width: 100%;\n max-width: 400px;\n aspect-ratio: 16/9;\n border: 1px solid var(--color-accent-primary);\n border-radius: var(--radius-xl);\n background: var(--color-bg-primary);\n position: relative;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 6px;\n box-shadow: 0 0 30px rgba(255, 45, 106, 0.3);\n}\n.wiz-done-demo-label {\n font-family: var(--font-display);\n font-size: var(--font-size-xs);\n font-weight: 600;\n color: var(--color-text-neon-muted);\n letter-spacing: 0.14em;\n text-transform: uppercase;\n}\n.wiz-done-demo-year {\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 64px;\n line-height: 0.9;\n color: var(--color-accent-primary);\n text-shadow: 0 0 24px rgba(255, 45, 106, 0.6);\n letter-spacing: -0.03em;\n}\n.wiz-done-demo-song {\n font-family: var(--font-display);\n font-size: var(--font-size-sm);\n font-weight: 600;\n color: var(--color-text-neon-muted);\n}\n\n/* CTA bar */\n.wiz-cta {\n padding: var(--space-md) var(--space-lg);\n display: flex;\n gap: var(--space-sm);\n border-top: 1px solid var(--color-border-neon);\n background: rgba(0, 0, 0, 0.3);\n position: relative;\n z-index: 1;\n}\n.wiz-cta .btn { flex: 1; }\n.wiz-cta .wiz-back { flex: 0 0 auto; min-width: 80px; }\n\n/* On step 3 the Playlist Hub renders its own CTA + detail sheet flush\n to the viewport bottom. wizard.js hides the legacy wiz-next/wiz-back\n buttons individually, but the wrapper itself stays visible \u2014 a ~33px\n tall empty band with padding + border + semi-opaque background pinned\n to the viewport bottom. Because `.wiz-cta` (z-1) is later in the DOM\n than `.wiz-frame` (z-1) at the same z-index inside `.wizard-takeover`,\n it paints on top of the wiz-frame subtree, including the playlist\n hub's `.plh-sheet-host`. (The host's z-50 only counts inside\n `.plh-root`'s `isolation: isolate` stacking context, not against\n wiz-cta.) The detail sheet's footer button at viewport bottom\n appeared clipped by the band. Drop the band on step 3 \u2014 the hub\n owns the chrome there. */\n.wiz-frame-playlist:not([hidden]) ~ .wiz-cta {\n display: none;\n}\n\n/* Finish-setup pill in admin header */\n.finish-setup-pill {\n font-family: var(--font-display);\n font-weight: 600;\n font-size: var(--font-size-sm);\n color: var(--color-accent-primary);\n background: rgba(255, 45, 106, 0.1);\n border: 1px solid rgba(255, 45, 106, 0.4);\n border-radius: var(--radius-full);\n padding: var(--space-xs) var(--space-md);\n cursor: pointer;\n transition: var(--transition-fast);\n}\n.finish-setup-pill:hover {\n background: rgba(255, 45, 106, 0.2);\n box-shadow: var(--glow-primary);\n}\n.finish-setup-pill.hidden { display: none; }\n\n/* Reduced-motion: collapse glow pulses to a single static state */\n@media (prefers-reduced-motion: reduce) {\n .wizard-takeover,\n .wizard-takeover * {\n animation: none !important;\n transition: none !important;\n }\n}\n\n/* Wizard Step 3 \u2014 game-mode form fields */\n.wiz-field {\n display: flex;\n flex-direction: column;\n gap: var(--space-xs);\n}\n.wiz-field-label {\n font-family: var(--font-display);\n font-weight: 600;\n font-size: var(--font-size-xs);\n letter-spacing: 0.08em;\n text-transform: uppercase;\n color: var(--color-text-neon-muted);\n}\n.wiz-chip-group {\n display: flex;\n flex-wrap: wrap;\n gap: var(--space-xs);\n}\n.wiz-chip {\n padding: var(--space-sm) var(--space-md);\n background: var(--color-dark-surface);\n border: 1px solid var(--color-border-neon);\n border-radius: var(--radius-full);\n font-family: var(--font-display);\n font-weight: 600;\n font-size: var(--font-size-sm);\n color: var(--color-text-white);\n cursor: pointer;\n transition: var(--transition-fast);\n}\n.wiz-chip:hover { background: var(--color-dark-surface-hover); }\n.wiz-chip.active {\n background: var(--color-accent-primary);\n border-color: var(--color-accent-primary);\n color: var(--color-bg-primary);\n box-shadow: var(--glow-primary);\n}\n\n/* Step 3 \u2014 \"Request new playlist\" CTA below the playlist list */\n.wiz-request-playlist {\n margin-top: var(--space-md);\n align-self: flex-start;\n}\n\n/* When wizard is active, lift modals above the takeover overlay */\nbody.wizard-active .modal { z-index: calc(var(--z-overlay) + 10); }\n\n.wiz-difficulty-hint {\n margin-top: var(--space-sm);\n padding: var(--space-sm) var(--space-md);\n background: rgba(0, 245, 255, 0.06);\n border-left: 2px solid var(--color-accent-secondary);\n border-radius: var(--radius-sm);\n color: var(--color-text-neon-muted);\n font-size: var(--font-size-sm);\n line-height: 1.5;\n min-height: 1.5em;\n}\n\n/* #1475 \u2014 number field revealed by the \"Custom\" round-count chip */\n.wiz-rounds-custom {\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n margin-top: var(--space-sm);\n}\n\n.wiz-rounds-custom input {\n width: 6em;\n padding: var(--space-sm) var(--space-md);\n background: var(--color-dark-surface);\n border: 1px solid var(--color-border-neon);\n border-radius: var(--radius-sm);\n color: var(--color-text-white);\n font-family: var(--font-body);\n font-size: var(--font-size-base);\n}\n\n.wiz-rounds-custom input:focus {\n outline: none;\n border-color: var(--color-accent-primary);\n}\n\n.wiz-rounds-custom span {\n color: var(--color-text-neon-muted);\n font-size: var(--font-size-sm);\n}\n\n/* Wizard Step 5 \u2014 expandable detail panels under level-up toggles */\n.wiz-lvl-card {\n flex-direction: column;\n align-items: stretch;\n padding: 0;\n}\n.wiz-lvl-head {\n display: flex;\n align-items: flex-start;\n gap: var(--space-sm);\n padding: var(--space-sm) var(--space-md);\n cursor: pointer;\n user-select: none;\n}\n.wiz-lvl-card.unavailable .wiz-lvl-head { cursor: not-allowed; }\n.wiz-lvl-head:hover { background: rgba(255,255,255,0.02); }\n.wiz-lvl-card.on .wiz-lvl-head { border-bottom: 1px solid var(--color-border-neon); }\n\n.wiz-detail {\n padding: var(--space-md);\n display: flex;\n flex-direction: column;\n gap: var(--space-md);\n background: rgba(0,0,0,0.15);\n}\n.wiz-detail-checks {\n display: flex;\n flex-direction: column;\n gap: var(--space-xs);\n}\n.wiz-detail-check {\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n padding: 6px 8px;\n border-radius: var(--radius-md);\n cursor: pointer;\n}\n.wiz-detail-check:hover { background: rgba(255,255,255,0.03); }\n.wiz-detail-check input[type=\"checkbox\"] {\n accent-color: var(--color-accent-primary);\n width: 16px;\n height: 16px;\n flex-shrink: 0;\n}\n.wiz-detail-check-name {\n font-family: var(--font-display);\n font-weight: 500;\n font-size: var(--font-size-sm);\n color: var(--color-text-white);\n}\n.wiz-detail-empty {\n font-size: var(--font-size-sm);\n color: var(--color-text-neon-muted);\n padding: var(--space-sm);\n background: var(--color-dark-surface);\n border: 1px dashed var(--color-border-neon);\n border-radius: var(--radius-md);\n text-align: center;\n}\n.wiz-detail-input {\n padding: var(--space-sm) var(--space-md);\n background: var(--color-bg-primary);\n border: 1px solid var(--color-border-neon);\n border-radius: var(--radius-md);\n color: var(--color-text-white);\n font-family: ui-monospace, monospace;\n font-size: var(--font-size-sm);\n}\n.wiz-detail-input:focus {\n outline: none;\n border-color: var(--color-accent-secondary);\n box-shadow: 0 0 0 3px rgba(0,245,255,0.15);\n}\n.wiz-field-hint {\n font-size: var(--font-size-xs);\n color: var(--color-text-dim);\n line-height: 1.4;\n}\n\n/* ==========================================\n Home view (post-wizard lobby landing)\n ========================================== */\n\n/* When body is in home-mode: show the home-view card, hide only the setup/config sections.\n Runtime views (#admin-playing-*, #admin-reveal-*, #admin-end-*) stay untouched \u2014\n home-mode is exited before any of those show anyway. */\n/* #1138 cleanup: #my-requests + #ha-entities selectors removed \u2014 those legacy\n flat sections were deleted from admin.html. */\nbody.home-mode #media-players,\nbody.home-mode #music-service,\nbody.home-mode #playlists,\nbody.home-mode #game-settings,\nbody.home-mode #party-lights,\nbody.home-mode #tts-settings,\nbody.home-mode .admin-content > .admin-actions {\n display: none !important;\n}\n/* Variant A \u2014 QR Hero aesthetic for the home-view.\n Centered stage, glowing hero card, dual CTA bar. QR + player chips render\n inline via BeatifyHome.renderSession once Start game creates the session. */\n.home-view { display: none; }\n.home-view.hidden { display: none !important; }\nbody.home-mode #home-view,\nbody.home-mode .home-view {\n display: flex;\n flex-direction: column;\n min-height: calc(100vh - 120px);\n background: var(--color-bg-primary);\n border: 1px solid var(--color-border-neon);\n border-radius: var(--radius-xl);\n overflow: hidden;\n margin-bottom: var(--space-md);\n}\n\n.home-stage {\n flex: 1;\n position: relative;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--space-md);\n padding: var(--space-xl) var(--space-lg);\n text-align: center;\n}\n.home-stage-bg {\n position: absolute;\n inset: 0;\n pointer-events: none;\n background:\n radial-gradient(ellipse at center, rgba(255, 45, 106, 0.15), transparent 55%),\n radial-gradient(ellipse at bottom, rgba(0, 245, 255, 0.08), transparent 50%);\n}\n\n.home-eyebrow {\n position: relative;\n z-index: 1;\n font-family: var(--font-display);\n font-weight: 700;\n font-size: var(--font-size-sm);\n letter-spacing: 0.16em;\n text-transform: uppercase;\n color: var(--color-accent-secondary);\n}\n\n.home-headline {\n position: relative;\n z-index: 1;\n font-family: var(--font-display);\n font-weight: 900;\n font-size: var(--font-size-4xl);\n line-height: 0.95;\n letter-spacing: -0.02em;\n margin: 0;\n text-shadow: 0 0 40px rgba(255, 45, 106, 0.35);\n}\n.home-headline-sub {\n display: block;\n font-weight: 600;\n font-size: var(--font-size-xl);\n letter-spacing: 0.02em;\n text-shadow: none;\n color: var(--color-text-white);\n margin-top: 4px;\n}\n\n/* Hero card \u2014 visual placeholder for the QR that appears after Start */\n.home-hero-card {\n position: relative;\n z-index: 1;\n padding: var(--space-lg);\n background: var(--color-dark-surface);\n border: 1px solid var(--color-accent-primary);\n border-radius: var(--radius-2xl);\n box-shadow: 0 0 32px rgba(255, 45, 106, 0.22);\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--space-sm);\n max-width: 280px;\n width: 100%;\n}\n.home-qr-loading {\n font-family: var(--font-display);\n font-weight: 600;\n font-size: var(--font-size-sm);\n color: var(--color-text-neon-muted);\n padding: var(--space-xl) 0;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n}\n.home-qr-loading.hidden { display: none; }\n.home-qr-container {\n padding: 8px;\n background: var(--color-bg-white);\n border-radius: var(--radius-md);\n display: grid;\n place-items: center;\n min-width: 180px;\n min-height: 180px;\n}\n.home-qr-container:empty { display: none; }\n.home-qr-container img, .home-qr-container canvas {\n display: block;\n max-width: 180px;\n height: auto;\n}\n.home-hero-title {\n font-family: var(--font-display);\n font-weight: 700;\n font-size: var(--font-size-lg);\n color: var(--color-text-white);\n letter-spacing: -0.01em;\n}\n.home-hero-sub {\n font-size: var(--font-size-sm);\n color: var(--color-accent-secondary);\n font-family: ui-monospace, monospace;\n word-break: break-all;\n max-width: 260px;\n}\n\n/* Live player tiles \u2014 Jackbox-style grid. Host wears the pink-primary\n \"leader\" treatment (DESIGN.md); guests cycle through the brand neon\n palette (cyan \u2192 green \u2192 orange) so each player reads distinctly. */\n.home-players {\n position: relative;\n z-index: 1;\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(84px, 1fr));\n gap: var(--space-sm);\n justify-items: center;\n width: 100%;\n max-width: 380px;\n margin-top: var(--space-lg);\n}\n.home-players:empty { display: none; }\n\n.home-player-tile {\n position: relative;\n width: 100%;\n aspect-ratio: 1;\n padding: var(--space-sm);\n border-radius: var(--radius-lg);\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 6px;\n background: linear-gradient(135deg, var(--tile-from), var(--tile-to));\n border: 1.5px solid var(--tile-border);\n box-shadow: 0 0 14px var(--tile-glow);\n /* Guest default = cyan (c1). Variants override via custom props. */\n --tile-from: rgba(0, 245, 255, 0.32);\n --tile-to: rgba(0, 245, 255, 0.08);\n --tile-border: rgba(0, 245, 255, 0.7);\n --tile-glow: rgba(0, 245, 255, 0.35);\n}\n.home-player-tile-initial {\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 28px;\n line-height: 1;\n color: var(--color-text-white);\n text-shadow: 0 2px 8px rgba(0, 0, 0, 0.4);\n}\n.home-player-tile-name {\n font-family: var(--font-display);\n font-weight: 700;\n font-size: var(--font-size-xs);\n color: var(--color-text-white);\n max-width: 100%;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n padding: 0 2px;\n}\n/* Guest color variants cycle through brand neon palette (no purple \u2014\n reserved for analytics/steal per DESIGN.md). */\n.home-player-tile--c2 {\n --tile-from: rgba(57, 255, 20, 0.32);\n --tile-to: rgba(57, 255, 20, 0.08);\n --tile-border: rgba(57, 255, 20, 0.65);\n --tile-glow: rgba(57, 255, 20, 0.32);\n}\n.home-player-tile--c3 {\n --tile-from: rgba(255, 102, 0, 0.32);\n --tile-to: rgba(255, 102, 0, 0.08);\n --tile-border: rgba(255, 102, 0, 0.65);\n --tile-glow: rgba(255, 102, 0, 0.32);\n}\n.home-player-tile--c4 {\n --tile-from: rgba(0, 245, 255, 0.22);\n --tile-to: rgba(0, 245, 255, 0.04);\n --tile-border: rgba(0, 245, 255, 0.5);\n --tile-glow: rgba(0, 245, 255, 0.22);\n}\n/* Host tile \u2014 pink primary + glow-primary (DESIGN.md \"leader highlights\"). */\n.home-player-tile--host {\n --tile-from: rgba(255, 45, 106, 0.35);\n --tile-to: rgba(255, 45, 106, 0.08);\n --tile-border: rgba(255, 45, 106, 0.85);\n --tile-glow: rgba(255, 45, 106, 0.5);\n box-shadow: var(--glow-primary), 0 0 22px rgba(255, 45, 106, 0.35);\n}\n.home-player-tile-crown {\n position: absolute;\n top: -10px;\n right: -10px;\n font-size: 20px;\n line-height: 1;\n filter: drop-shadow(0 0 6px rgba(255, 45, 106, 0.8));\n pointer-events: none;\n}\n/* Empty-state: single full-width dashed pill (not a tile, to keep the\n \"no one here yet\" vibe distinct from \"someone is here\"). */\n.home-players-waiting {\n grid-column: 1 / -1;\n padding: var(--space-md);\n border-radius: var(--radius-full);\n border: 1px dashed var(--color-border-neon);\n background: transparent;\n color: var(--color-text-dim);\n font-family: var(--font-display);\n font-weight: 500;\n font-size: var(--font-size-sm);\n text-align: center;\n}\n\n.home-meta {\n position: relative;\n z-index: 1;\n font-family: var(--font-display);\n font-weight: 500;\n font-size: var(--font-size-xs);\n letter-spacing: 0.12em;\n text-transform: uppercase;\n color: var(--color-text-dim);\n max-width: 320px;\n line-height: 1.6;\n}\n\n/* Sticky CTA bar at the bottom of the home card */\n.home-cta-bar {\n display: flex;\n gap: var(--space-sm);\n padding: var(--space-md) var(--space-lg);\n background: rgba(0, 0, 0, 0.3);\n border-top: 1px solid var(--color-border-neon);\n}\n.home-cta-edit {\n padding: var(--space-sm) var(--space-md);\n font-size: var(--font-size-sm);\n}\n.home-cta-start {\n flex: 1;\n padding: var(--space-md);\n font-size: var(--font-size-base);\n box-shadow: var(--glow-primary), 0 0 40px rgba(255, 45, 106, 0.25);\n}\n/* When Start game is demoted (admin hasn't joined yet), drop its glow so the eye\n lands on the prominent \"Join as player\" CTA instead. */\n.home-cta-start.btn-ghost { box-shadow: none; flex: 0 0 auto; }\n\n/* Prominent Join-as-player CTA \u2014 lives above the Back/Start row inside the\n home-stage column. Full-width + oversized so the admin's next step is\n unmissable (it's the single most important action on the home-view). */\n.home-cta-join {\n width: 100%;\n margin-top: var(--space-md);\n padding: var(--space-lg) var(--space-md);\n font-size: var(--font-size-xl);\n font-weight: 700;\n letter-spacing: 0.02em;\n border-radius: var(--radius-xl);\n box-shadow: var(--glow-primary), 0 0 48px rgba(255, 45, 106, 0.3);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--space-sm);\n}\n.home-cta-join svg {\n width: 26px;\n height: 26px;\n stroke-width: 2.25;\n}\n.home-cta-join.hidden { display: none; }\n\n/* Wizard Step 4 \u2014 game mode cards (Artist Challenge / Intro Mode / Closest Wins) */\n.wiz-mode-cards {\n display: flex;\n flex-direction: column;\n gap: var(--space-xs);\n}\n.wiz-mode-card {\n display: flex;\n align-items: flex-start;\n gap: var(--space-sm);\n padding: var(--space-sm) var(--space-md);\n background: var(--color-dark-surface);\n border: 1px solid var(--color-border-neon);\n border-radius: var(--radius-lg);\n cursor: pointer;\n transition: var(--transition-fast);\n}\n.wiz-mode-card:hover { background: var(--color-dark-surface-hover); }\n/* Issue #827: a mode card disabled by an unmet requirement (e.g. Sudden Death\n below the 3-player floor) is dimmed and non-interactive.\n Issue #1799: the dimming used to sit on the card itself, which also dimmed\n the line explaining WHY it is blocked \u2014 the one line that has to stay\n readable. Dim the card's own content instead and leave .wiz-mode-hint.gated\n at full contrast. */\n.wiz-mode-card.disabled {\n cursor: not-allowed;\n pointer-events: none;\n}\n.wiz-mode-card.disabled .wiz-mode-icon,\n.wiz-mode-card.disabled .wiz-mode-title,\n.wiz-mode-card.disabled .wiz-lvl-toggle {\n opacity: 0.45;\n}\n/* Issue #1799: the gating requirement, shown in place of the mode hint. It is\n the only visible explanation on touch (no hover \u2192 no title tooltip). */\n.wiz-mode-hint.gated {\n color: var(--color-warning);\n font-weight: 600;\n}\n.wiz-mode-card.on {\n background: rgba(255, 45, 106, 0.08);\n border-color: var(--color-accent-primary);\n}\n.wiz-mode-icon {\n font-size: 22px;\n line-height: 1;\n flex-shrink: 0;\n margin-top: 2px;\n}\n.wiz-mode-body { flex: 1; min-width: 0; }\n.wiz-mode-title {\n font-family: var(--font-display);\n font-weight: 600;\n font-size: var(--font-size-base);\n color: var(--color-text-white);\n}\n.wiz-mode-hint {\n font-size: var(--font-size-xs);\n color: var(--color-text-neon-muted);\n margin-top: 2px;\n line-height: 1.45;\n}\n.wiz-mode-card.on .wiz-lvl-toggle {\n background: var(--color-accent-primary);\n border-color: var(--color-accent-primary);\n}\n.wiz-mode-card.on .wiz-lvl-toggle::after {\n left: 18px;\n background: var(--color-bg-primary);\n}\n\n/* Wizard Step 4 \u2014 core game-mode selector (#1180).\n \"Pick your game\" split: two poster panels, each with its own accent\n (year = pink, title&artist = cyan). The chosen one lifts + glows and shows a\n \"Playing\" badge; the other dims. Shared .wiz-mode-* type rules are overridden\n only inside .wiz-coremode-card so the bonus-mode cards are unaffected. */\n.wiz-coremode-cards {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: var(--space-sm);\n}\n.wiz-coremode-card {\n position: relative;\n display: flex;\n flex-direction: column;\n align-items: center;\n text-align: center;\n gap: 6px;\n padding: var(--space-md) var(--space-sm);\n background: var(--color-dark-surface);\n border: 1.5px solid var(--color-border-neon);\n border-radius: var(--radius-xl);\n cursor: pointer;\n overflow: hidden;\n transition: transform var(--transition-fast), box-shadow var(--transition-fast),\n background var(--transition-fast), border-color var(--transition-fast),\n opacity var(--transition-fast);\n}\n.wiz-coremode-card:hover { background: var(--color-dark-surface-hover); }\n.wiz-coremode-card .wiz-mode-icon {\n font-size: 32px;\n margin-top: 0;\n}\n.wiz-coremode-card .wiz-mode-body { flex: none; }\n.wiz-coremode-card .wiz-mode-title {\n font-weight: 900;\n letter-spacing: 0.02em;\n text-transform: uppercase;\n}\n.wiz-coremode-card .wiz-mode-hint { color: var(--color-text-dim); }\n\n/* Selected \u2014 accent fill + lift + glow, per mode. */\n.wiz-coremode-card.selected { transform: translateY(-2px); }\n.wiz-coremode-card--pink.selected {\n border-color: var(--color-accent-primary);\n background: radial-gradient(120% 100% at 50% 0%, rgba(255, 45, 106, 0.22), rgba(255, 45, 106, 0.04));\n box-shadow: 0 0 24px rgba(255, 45, 106, 0.30);\n}\n.wiz-coremode-card--cyan.selected {\n border-color: var(--color-accent-secondary);\n background: radial-gradient(120% 100% at 50% 0%, rgba(0, 245, 255, 0.20), rgba(0, 245, 255, 0.03));\n box-shadow: 0 0 24px rgba(0, 245, 255, 0.28);\n}\n\n/* Unselected \u2014 dimmed, but lifts toward full on hover so it still feels pickable. */\n.wiz-coremode-card.dim { opacity: 0.5; }\n.wiz-coremode-card.dim:hover { opacity: 0.8; }\n\n/* \"Playing\" badge, top-right, tinted to the panel's accent. */\n.wiz-coremode-badge {\n position: absolute;\n top: 8px;\n right: 8px;\n font-family: var(--font-display);\n font-weight: 800;\n font-size: 9px;\n letter-spacing: 0.06em;\n text-transform: uppercase;\n padding: 2px 7px;\n border-radius: var(--radius-full);\n}\n.wiz-coremode-card--pink .wiz-coremode-badge {\n background: var(--color-accent-primary);\n color: var(--color-text-white);\n}\n.wiz-coremode-card--cyan .wiz-coremode-badge {\n background: var(--color-accent-secondary);\n color: #04222a;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .wiz-coremode-card { transition: none; }\n .wiz-coremode-card.selected { transform: none; }\n}\n\n/* Home-view: Cast to TV link */\n.home-cast-link {\n display: inline-flex;\n align-items: center;\n gap: var(--space-xs);\n padding: var(--space-xs) var(--space-md);\n background: var(--color-dark-surface);\n border: 1px solid var(--color-accent-secondary);\n border-radius: var(--radius-full);\n font-family: var(--font-display);\n font-weight: 600;\n font-size: var(--font-size-sm);\n color: var(--color-accent-secondary);\n text-decoration: none;\n position: relative;\n z-index: 1;\n transition: var(--transition-fast);\n}\n.home-cast-link:hover {\n background: rgba(0, 245, 255, 0.08);\n box-shadow: var(--glow-secondary);\n}\n.home-cast-link.hidden { display: none; }\n\n/* Wizard Step 5: TTS test button */\n.wiz-detail-test {\n align-self: flex-start;\n margin-top: var(--space-xs);\n padding: var(--space-xs) var(--space-md);\n font-size: var(--font-size-xs);\n}\n.wiz-detail-test[disabled] { opacity: 0.5; cursor: not-allowed; }\n\n/* Wizard Step 5: WLED phase preset grid */\n.wiz-wled-grid {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: var(--space-xs);\n}\n.wiz-wled-row {\n display: flex;\n align-items: center;\n gap: var(--space-xs);\n}\n.wiz-wled-phase {\n font-family: var(--font-display);\n font-weight: 700;\n font-size: 10px;\n letter-spacing: 0.1em;\n color: var(--color-text-dim);\n min-width: 72px;\n}\n.wiz-wled-input {\n width: 60px;\n padding: 4px 8px;\n text-align: center;\n font-family: ui-monospace, monospace;\n font-size: var(--font-size-sm);\n}\n\n\n/* Home-view utility row \u2014 Cast to TV + Print QR sit side-by-side */\n.home-utility-row {\n display: flex;\n gap: var(--space-sm);\n flex-wrap: wrap;\n justify-content: center;\n position: relative;\n z-index: 1;\n}\n.home-utility-btn {\n display: inline-flex;\n align-items: center;\n gap: var(--space-xs);\n padding: var(--space-xs) var(--space-md);\n background: var(--color-dark-surface);\n border: 1px solid var(--color-border-neon);\n border-radius: var(--radius-full);\n font-family: var(--font-display);\n font-weight: 600;\n font-size: var(--font-size-sm);\n color: var(--color-text-neon-muted);\n cursor: pointer;\n transition: var(--transition-fast);\n}\n.home-utility-btn:hover {\n color: var(--color-text-white);\n border-color: var(--color-accent-secondary);\n}\n.home-utility-btn.hidden { display: none; }\n\n/* End game button \u2014 only visible when a LOBBY session exists. Red-neon tint. */\n.home-cta-end {\n border-color: rgba(255, 0, 64, 0.4);\n color: var(--color-error-neon);\n}\n.home-cta-end:hover {\n background: rgba(255, 0, 64, 0.1);\n box-shadow: 0 0 12px rgba(255, 0, 64, 0.3);\n}\n.home-cta-end.hidden { display: none; }\n\n/* Home-view unconfigured state \u2014 setup prompt hero */\n.home-hero-card--setup {\n border-color: var(--color-border-neon);\n box-shadow: none;\n gap: var(--space-md);\n}\n.home-setup-glyph {\n width: 56px;\n height: 56px;\n display: grid;\n place-items: center;\n color: var(--color-accent-secondary);\n text-shadow: 0 0 12px rgba(0, 245, 255, 0.4);\n}\n.home-setup-glyph svg { width: 100%; height: 100%; }\n.home-hero-sub--plain {\n color: var(--color-text-neon-muted);\n font-family: var(--font-body);\n text-align: center;\n font-size: var(--font-size-sm);\n line-height: 1.5;\n max-width: 280px;\n}\n\n/* Setup-mode CTA takes the full width of the bar */\n.home-cta-setup {\n flex: 1;\n padding: var(--space-md);\n font-size: var(--font-size-base);\n box-shadow: var(--glow-primary), 0 0 40px rgba(255, 45, 106, 0.25);\n}\n.home-cta-setup.hidden { display: none; }\n\n/* ==========================================================================\n Player Onboarding v2 (DESIGN.md \u00A7 Player onboarding \u2014 post-QR education)\n ========================================================================== */\n\n/* Hide the outer .player-header (wordmark + connection indicator) on the\n tour/ready screens so they run full-screen \u2014 the ready view has its own\n wordmark hero and the tour has its own step-progress header. */\nbody.is-learning-screen .player-header { display: none; }\n/* During active play (the guessing round + the reveal) the big wordmark is\n redundant chrome and just eats vertical space, so hide the outer header \u2014\n the game/reveal cards carry their own context. Branding stays on the\n join / lobby / end screens. */\nbody.is-ingame .player-header { display: none; }\n\n/* Tour view \u2014 full-screen takeover, dark stage + dual-radial glow */\n#tour-view.view:not(.hidden) {\n display: flex;\n flex-direction: column;\n}\n.tour-container {\n min-height: 100vh;\n padding: var(--space-xl) var(--space-md) var(--space-md);\n background:\n radial-gradient(circle at 50% 10%, rgba(255, 45, 106, 0.10), transparent 55%),\n radial-gradient(circle at 85% 90%, rgba(0, 245, 255, 0.08), transparent 55%),\n var(--color-bg-primary);\n display: flex;\n flex-direction: column;\n}\n\n/* Wizard-style progress header (matches admin first-run wizard pattern) */\n.tour-header-wiz {\n margin-bottom: var(--space-lg);\n display: flex;\n flex-direction: column;\n gap: var(--space-sm);\n}\n.tour-step-count {\n display: flex;\n align-items: center;\n justify-content: space-between;\n font-family: var(--font-body);\n font-size: var(--font-size-xs);\n font-weight: 600;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n color: var(--color-text-neon-muted);\n}\n.tour-step-count .of { color: var(--color-text-dim); font-weight: 500; }\n.tour-skip-link {\n font-family: var(--font-body);\n font-size: var(--font-size-sm);\n font-weight: 500;\n color: var(--color-text-dim);\n background: transparent;\n border: 0;\n cursor: pointer;\n padding: var(--space-xs) var(--space-sm);\n transition: color var(--transition-fast);\n}\n.tour-skip-link:hover,\n.tour-skip-link:focus-visible {\n color: var(--color-text-neon-muted);\n outline: none;\n}\n.tour-wiz-progress {\n display: flex;\n gap: 4px;\n width: 100%;\n}\n.tour-wiz-seg {\n flex: 1;\n height: 3px;\n background: rgba(255, 255, 255, 0.08);\n border-radius: var(--radius-full);\n overflow: hidden;\n position: relative;\n}\n.tour-wiz-seg.filled {\n background: linear-gradient(90deg, var(--color-accent-primary), var(--color-accent-secondary));\n box-shadow: 0 0 12px rgba(255, 45, 106, 0.5);\n}\n.tour-wiz-seg.active .tour-wiz-seg-inner {\n height: 100%;\n width: 60%;\n background: linear-gradient(90deg, var(--color-accent-primary), var(--color-accent-secondary));\n box-shadow: 0 0 12px rgba(255, 45, 106, 0.5);\n border-radius: var(--radius-full);\n}\n\n/* Tour card \u2014 one per step */\n.tour-card {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: var(--space-md) 0;\n animation: tour-card-enter var(--transition-slow) ease-out;\n}\n@keyframes tour-card-enter {\n from { opacity: 0; transform: translateY(12px); }\n to { opacity: 1; transform: translateY(0); }\n}\n.tour-card.hidden { display: none; }\n@media (prefers-reduced-motion: reduce) {\n .tour-card { animation: none; }\n}\n\n.tour-title {\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 2.5rem; /* ~40px \u2014 scales between 4xl and display */\n line-height: 1.0;\n text-align: center;\n color: var(--color-text-white);\n letter-spacing: -0.02em;\n margin-bottom: var(--space-sm);\n}\n.tour-caption {\n font-family: var(--font-body);\n font-weight: 500;\n font-size: var(--font-size-lg);\n text-align: center;\n color: var(--color-text-neon-muted);\n margin-bottom: var(--space-xl);\n max-width: 320px;\n}\n\n.tour-preview {\n flex: 1;\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--space-md);\n margin-bottom: var(--space-md);\n}\n\n/* Preview: year slider (card 1) */\n.tour-preview-album {\n width: 88px; height: 88px;\n border-radius: var(--radius-lg);\n background: linear-gradient(135deg, #2a1b4a 0%, #1a1a24 100%);\n border: 1px solid rgba(255, 255, 255, 0.08);\n display: flex; align-items: center; justify-content: center;\n position: relative;\n overflow: hidden;\n}\n.tour-preview-album::after {\n content: '';\n position: absolute;\n width: 32px; height: 32px;\n border-radius: 50%;\n background: radial-gradient(circle, #0a0a12 28%, #2a2a3a 29%, #2a2a3a 62%, #0a0a12 63%);\n border: 1px solid rgba(255, 255, 255, 0.08);\n}\n.tour-preview-album::before {\n content: '\u266A';\n position: absolute;\n font-size: 26px;\n color: var(--color-accent-secondary);\n opacity: 0.75;\n z-index: 1;\n}\n.tour-year-display {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--space-md);\n}\n.tour-year-adjust {\n width: 38px; height: 38px;\n border-radius: 50%;\n border: 1.5px solid rgba(255, 255, 255, 0.25);\n background: transparent;\n color: rgba(255, 255, 255, 0.6);\n font-size: var(--font-size-xl);\n font-weight: 400;\n display: flex; align-items: center; justify-content: center;\n}\n.tour-year-big {\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 4.25rem; /* ~68px \u2014 below year reveal's 56px per DESIGN.md rationale */\n color: var(--color-accent-secondary);\n text-shadow: 0 0 24px rgba(0, 245, 255, 0.6);\n line-height: 1;\n letter-spacing: -0.03em;\n}\n.tour-preview-slider {\n width: 100%;\n max-width: 320px;\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n}\n.tour-slider-label {\n font-family: var(--font-body);\n font-size: var(--font-size-sm);\n color: rgba(255, 255, 255, 0.5);\n min-width: 34px;\n text-align: center;\n}\n.tour-slider-track {\n flex: 1;\n height: 4px;\n background: rgba(255, 255, 255, 0.15);\n border-radius: 2px;\n position: relative;\n}\n.tour-slider-thumb {\n position: absolute;\n top: 50%;\n left: 45.3%;\n transform: translate(-50%, -50%);\n width: 20px; height: 20px;\n border-radius: 50%;\n background: var(--color-accent-secondary);\n box-shadow: 0 0 16px rgba(0, 245, 255, 0.8);\n border: 2px solid var(--color-bg-primary);\n}\n\n/* Preview: bet (card 2) */\n.tour-bet-button {\n background: linear-gradient(135deg, rgba(255, 45, 106, 0.12), rgba(255, 45, 106, 0.06));\n border: 2px solid var(--color-accent-primary);\n border-radius: var(--radius-xl);\n padding: var(--space-md) var(--space-lg);\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n box-shadow: 0 0 24px rgba(255, 45, 106, 0.35);\n}\n.tour-bet-button .tour-bet-dice {\n font-size: 30px;\n filter: drop-shadow(0 0 6px rgba(255, 45, 106, 0.6));\n}\n.tour-bet-button .tour-bet-label {\n font-family: var(--font-display);\n font-weight: 700;\n font-size: var(--font-size-lg);\n color: var(--color-text-white);\n}\n.tour-bet-score {\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n padding: var(--space-sm) var(--space-md);\n background: var(--color-bg-surface);\n border-radius: var(--radius-md);\n border: 1px solid rgba(255, 255, 255, 0.06);\n}\n.tour-bet-score-base {\n font-family: var(--font-display);\n font-weight: 700;\n font-size: var(--font-size-2xl);\n color: var(--color-text-neon-muted);\n}\n.tour-bet-score-op { color: var(--color-text-dim); font-size: var(--font-size-lg); }\n.tour-bet-score-multi {\n font-family: var(--font-display);\n font-weight: 700;\n font-size: var(--font-size-2xl);\n color: var(--color-accent-primary);\n}\n.tour-bet-score-final {\n font-family: var(--font-display);\n font-weight: 900;\n font-size: var(--font-size-4xl);\n color: var(--color-success-neon);\n text-shadow: 0 0 12px rgba(57, 255, 20, 0.5);\n}\n\n/* Preview: steal (card 3) */\n.tour-steal-button {\n background: linear-gradient(135deg, rgba(0, 245, 255, 0.12), rgba(0, 245, 255, 0.04));\n border: 2px solid var(--color-accent-secondary);\n border-radius: var(--radius-xl);\n padding: var(--space-md) var(--space-lg);\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n box-shadow: 0 0 24px rgba(0, 245, 255, 0.4);\n}\n.tour-steal-button .tour-steal-ninja { font-size: 30px; }\n.tour-steal-button .tour-steal-label {\n font-family: var(--font-display);\n font-weight: 700;\n font-size: var(--font-size-lg);\n color: var(--color-text-white);\n}\n.tour-steal-targets {\n display: flex;\n gap: var(--space-sm);\n align-items: center;\n}\n.tour-steal-target {\n background: var(--color-bg-surface);\n border-radius: var(--radius-md);\n padding: var(--space-sm) var(--space-md);\n font-family: var(--font-body);\n font-size: var(--font-size-sm);\n font-weight: 500;\n color: var(--color-text-neon-muted);\n border: 1px solid rgba(255, 255, 255, 0.06);\n}\n.tour-steal-target.highlighted {\n color: var(--color-text-white);\n border-color: var(--color-accent-secondary);\n box-shadow: 0 0 12px rgba(0, 245, 255, 0.35);\n}\n.tour-hint {\n font-family: var(--font-body);\n font-size: var(--font-size-sm);\n color: rgba(255, 255, 255, 0.4);\n text-align: center;\n font-style: italic;\n margin-top: var(--space-xs);\n}\n\n/* Preview: Title & Artist mode (card 5, #1180) */\n.tour-ta-fields {\n display: flex;\n flex-direction: column;\n gap: var(--space-sm);\n width: 100%;\n}\n.tour-ta-field {\n display: flex;\n flex-direction: column;\n gap: 4px;\n padding: 10px 14px;\n background: linear-gradient(180deg, rgba(255, 45, 106, 0.06), rgba(255, 255, 255, 0.02));\n border: 1px solid rgba(255, 45, 106, 0.22);\n border-radius: var(--radius-lg);\n text-align: left;\n}\n.tour-ta-field-label {\n font-family: var(--font-display);\n font-weight: 700;\n font-size: var(--font-size-xs);\n letter-spacing: 0.08em;\n text-transform: uppercase;\n color: var(--color-text-neon-muted);\n}\n.tour-ta-field-val {\n font-family: var(--font-body);\n font-weight: 600;\n font-size: var(--font-size-md);\n color: var(--color-text-white);\n}\n\n/* Preview: artist (card 4) */\n.tour-artist-prompt {\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n padding: var(--space-sm) var(--space-md);\n background: var(--color-bg-surface);\n border-radius: var(--radius-md);\n border: 1px solid rgba(255, 255, 255, 0.06);\n width: 100%;\n max-width: 320px;\n}\n.tour-artist-prompt .tour-artist-mic { font-size: var(--font-size-xl); }\n.tour-artist-prompt .tour-artist-who {\n font-family: var(--font-body);\n font-size: var(--font-size-base);\n font-weight: 500;\n color: var(--color-text-white);\n}\n.tour-artist-prompt .tour-artist-bonus {\n margin-left: auto;\n background: rgba(34, 197, 94, 0.15);\n color: var(--color-success);\n font-weight: 700;\n font-size: var(--font-size-sm);\n padding: 2px var(--space-sm);\n border-radius: var(--radius-full);\n}\n.tour-artist-grid {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: var(--space-sm);\n width: 100%;\n max-width: 320px;\n}\n.tour-artist-option {\n min-height: 48px;\n padding: var(--space-sm) var(--space-md);\n border: 2px solid rgba(255, 255, 255, 0.12);\n border-radius: var(--radius-md);\n background: var(--color-bg-surface);\n color: var(--color-text-white);\n font-family: var(--font-body);\n font-size: var(--font-size-base);\n font-weight: 500;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: default;\n}\n.tour-artist-option.is-winner {\n background: var(--color-success);\n border-color: var(--color-success);\n color: var(--color-text-white);\n box-shadow: var(--glow-primary);\n}\n\n/* Tour footer: Skip + Next buttons */\n.tour-footer {\n margin-top: auto;\n padding-top: var(--space-md);\n display: flex;\n gap: var(--space-sm);\n align-items: stretch;\n}\n.btn-tour-skip {\n flex: 1;\n background: transparent;\n color: var(--color-text-neon-muted);\n border: 1.5px solid rgba(255, 255, 255, 0.15);\n border-radius: var(--radius-lg);\n padding: var(--space-md) var(--space-md);\n font-family: var(--font-body);\n font-weight: 600;\n font-size: var(--font-size-md);\n cursor: pointer;\n}\n.btn-tour-skip:hover,\n.btn-tour-skip:focus-visible {\n border-color: rgba(255, 255, 255, 0.3);\n color: var(--color-text-white);\n outline: none;\n}\n.btn-tour-next {\n flex: 2;\n background: var(--color-accent-primary);\n color: var(--color-text-white);\n border: none;\n border-radius: var(--radius-lg);\n padding: var(--space-md) var(--space-lg);\n font-family: var(--font-display);\n font-weight: 700;\n font-size: var(--font-size-lg);\n box-shadow: var(--glow-primary);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--space-sm);\n}\n.btn-tour-next .chev { opacity: 0.85; }\n\n/* Ready view \u2014 showtime transition between tour and lobby */\n#ready-view.view:not(.hidden) {\n display: flex;\n flex-direction: column;\n}\n.ready-container {\n min-height: 100vh;\n padding: var(--space-xl);\n background:\n radial-gradient(circle at 50% 30%, rgba(255, 45, 106, 0.10), transparent 55%),\n radial-gradient(circle at 85% 80%, rgba(0, 245, 255, 0.08), transparent 55%),\n var(--color-bg-primary);\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n gap: var(--space-sm);\n}\n.ready-wordmark {\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 5rem; /* ~80px \u2014 at hero scale */\n letter-spacing: -0.02em;\n margin-bottom: var(--space-sm);\n text-shadow: 0 0 48px rgba(255, 45, 106, 0.55);\n animation: ready-wordmark-in 0.5s ease-out;\n}\n.ready-wordmark .beat { color: var(--color-text-white); }\n.ready-wordmark .ify {\n background: linear-gradient(90deg, var(--color-accent-primary), var(--color-accent-secondary));\n -webkit-background-clip: text;\n background-clip: text;\n -webkit-text-fill-color: transparent;\n color: transparent;\n}\n@keyframes ready-wordmark-in {\n from { opacity: 0; transform: translateY(16px); }\n to { opacity: 1; transform: translateY(0); }\n}\n.ready-name {\n font-family: var(--font-display);\n font-weight: 700;\n font-size: var(--font-size-3xl);\n color: var(--color-text-white);\n margin-bottom: var(--space-xs);\n animation: ready-fade-in 0.5s ease-out 0.1s both;\n}\n.ready-subtitle {\n font-family: var(--font-body);\n font-size: var(--font-size-md);\n color: var(--color-text-neon-muted);\n margin-bottom: var(--space-2xl);\n animation: ready-fade-in 0.5s ease-out 0.2s both;\n}\n@keyframes ready-fade-in {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n.ready-waiting {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--space-md);\n animation: ready-fade-in 0.5s ease-out 0.3s both;\n}\n.ready-pulse {\n position: relative;\n width: 16px; height: 16px;\n border-radius: 50%;\n background: var(--color-accent-secondary);\n box-shadow: 0 0 12px rgba(0, 245, 255, 0.7);\n}\n.ready-pulse::before {\n content: '';\n position: absolute;\n inset: -8px;\n border-radius: 50%;\n border: 2px solid var(--color-accent-secondary);\n opacity: 0.6;\n animation: ready-pulse-ring 1.8s ease-out infinite;\n}\n@keyframes ready-pulse-ring {\n 0% { transform: scale(0.6); opacity: 0.8; }\n 100% { transform: scale(2.4); opacity: 0; }\n}\n@media (prefers-reduced-motion: reduce) {\n .ready-wordmark, .ready-name, .ready-subtitle, .ready-waiting { animation: none; }\n .ready-pulse::before { animation: none; opacity: 0; }\n}\n.ready-label {\n font-family: var(--font-body);\n font-size: var(--font-size-md);\n font-weight: 500;\n color: var(--color-text-white);\n}\n.ready-count {\n font-family: var(--font-body);\n font-size: var(--font-size-sm);\n color: var(--color-text-dim);\n}\n\n/* Lobby: Replay-tour link */\n.replay-tour-link {\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n padding: var(--space-sm) var(--space-md);\n background: transparent;\n border: 1px dashed rgba(255, 45, 106, 0.4);\n border-radius: var(--radius-md);\n color: var(--color-accent-primary);\n font-family: var(--font-body);\n font-size: var(--font-size-sm);\n font-weight: 600;\n text-decoration: none;\n margin-bottom: var(--space-sm);\n cursor: pointer;\n width: 100%;\n transition: all var(--transition-fast);\n}\n.replay-tour-link:hover,\n.replay-tour-link:focus-visible {\n border-color: var(--color-accent-primary);\n background: rgba(255, 45, 106, 0.05);\n outline: none;\n}\n.replay-tour-link .arrow { margin-left: auto; }\n\n/* Admin home-view: LEARNING player state */\n.home-player-tile--learning {\n border-style: dashed !important;\n opacity: 0.72;\n}\n.home-player-tile-tour {\n position: absolute;\n top: -6px;\n right: -6px;\n background: rgba(0, 245, 255, 0.1);\n color: var(--color-accent-secondary);\n font-family: var(--font-body);\n font-size: 9px;\n font-weight: 700;\n letter-spacing: 0.06em;\n padding: 2px 6px;\n border-radius: var(--radius-full);\n border: 1px solid rgba(0, 245, 255, 0.4);\n box-shadow: 0 0 8px rgba(0, 245, 255, 0.25);\n}\n.home-learning-warning {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--space-xs);\n padding: var(--space-sm) var(--space-md);\n margin-bottom: var(--space-sm);\n background: rgba(255, 102, 0, 0.08);\n border: 1px solid rgba(255, 102, 0, 0.25);\n border-radius: var(--radius-md);\n color: var(--color-warning-alt);\n font-family: var(--font-body);\n font-size: var(--font-size-sm);\n font-weight: 500;\n text-align: center;\n}\n.home-learning-warning.hidden { display: none; }\n\n/* ==========================================================================\n Player lobby \u2014 tile grid (mirrors admin .home-player-tile)\n Jackbox-style tiles replace the legacy flat .player-card chips. Host wears\n pink + crown; guests cycle cyan \u2192 green \u2192 orange \u2192 dim-cyan in join order;\n current player gets a cyan \"YOU\" chip in the same top-right slot as the\n crown (they never collide \u2014 is_admin resolves to crown first).\n ========================================================================== */\n.player-tiles-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(84px, 1fr));\n gap: var(--space-sm);\n justify-items: center;\n width: 100%;\n}\n.player-tiles-grid:empty { display: none; }\n\n.player-tile {\n position: relative;\n width: 100%;\n aspect-ratio: 1;\n padding: var(--space-sm);\n border-radius: var(--radius-lg);\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 6px;\n background: linear-gradient(135deg, var(--tile-from), var(--tile-to));\n border: 1.5px solid var(--tile-border);\n box-shadow: 0 0 14px var(--tile-glow);\n /* Guest default (c1) = cyan. Variants override via custom props. */\n --tile-from: rgba(0, 245, 255, 0.32);\n --tile-to: rgba(0, 245, 255, 0.08);\n --tile-border: rgba(0, 245, 255, 0.7);\n --tile-glow: rgba(0, 245, 255, 0.35);\n transition: box-shadow var(--transition-fast), border-color var(--transition-fast);\n}\n.player-tile-initial {\n font-family: var(--font-display);\n font-weight: 900;\n font-size: var(--font-size-3xl);\n line-height: 1;\n color: var(--color-text-white);\n text-shadow: 0 2px 8px rgba(0, 0, 0, 0.4);\n}\n.player-tile-name {\n font-family: var(--font-display);\n font-weight: 700;\n font-size: var(--font-size-xs);\n color: var(--color-text-white);\n max-width: 100%;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n padding: 0 2px;\n}\n.player-tile--c2 {\n --tile-from: rgba(57, 255, 20, 0.32);\n --tile-to: rgba(57, 255, 20, 0.08);\n --tile-border: rgba(57, 255, 20, 0.65);\n --tile-glow: rgba(57, 255, 20, 0.32);\n}\n.player-tile--c3 {\n --tile-from: rgba(255, 102, 0, 0.32);\n --tile-to: rgba(255, 102, 0, 0.08);\n --tile-border: rgba(255, 102, 0, 0.65);\n --tile-glow: rgba(255, 102, 0, 0.32);\n}\n.player-tile--c4 {\n --tile-from: rgba(0, 245, 255, 0.22);\n --tile-to: rgba(0, 245, 255, 0.04);\n --tile-border: rgba(0, 245, 255, 0.5);\n --tile-glow: rgba(0, 245, 255, 0.22);\n}\n.player-tile--host {\n --tile-from: rgba(255, 45, 106, 0.35);\n --tile-to: rgba(255, 45, 106, 0.08);\n --tile-border: rgba(255, 45, 106, 0.85);\n --tile-glow: rgba(255, 45, 106, 0.5);\n box-shadow: var(--glow-primary), 0 0 22px rgba(255, 45, 106, 0.35);\n}\n\n/* Host marker \u2014 crown, top-right */\n.player-tile-crown {\n position: absolute;\n top: -10px;\n right: -10px;\n font-size: 20px;\n line-height: 1;\n filter: drop-shadow(0 0 6px rgba(255, 45, 106, 0.8));\n pointer-events: none;\n}\n\n/* Current-player marker \u2014 cyan YOU chip, top-right (only shows when NOT host) */\n.player-tile-you-chip {\n position: absolute;\n top: -10px;\n right: -10px;\n background: var(--color-accent-secondary);\n color: var(--color-bg-primary);\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 9px;\n letter-spacing: 0.1em;\n padding: 3px 7px;\n border-radius: var(--radius-full);\n box-shadow: 0 0 12px rgba(0, 245, 255, 0.6);\n pointer-events: none;\n}\n\n/* Away badge \u2014 for disconnected players */\n.player-tile-away {\n position: absolute;\n bottom: -8px;\n left: 50%;\n transform: translateX(-50%);\n font-family: var(--font-body);\n font-size: 9px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.08em;\n color: var(--color-text-dim);\n background: var(--color-bg-primary);\n padding: 2px 6px;\n border-radius: var(--radius-full);\n border: 1px solid rgba(255, 255, 255, 0.12);\n pointer-events: none;\n}\n.player-tile--disconnected {\n opacity: 0.5;\n filter: grayscale(0.4);\n}\n\n/* New-join animation (carried over from .player-card.is-new) */\n.player-tile.is-new {\n animation: player-tile-pop var(--transition-slow) ease-out;\n}\n@keyframes player-tile-pop {\n 0% { transform: scale(0.6); opacity: 0; }\n 60% { transform: scale(1.08); opacity: 1; }\n 100% { transform: scale(1); opacity: 1; }\n}\n@media (prefers-reduced-motion: reduce) {\n .player-tile.is-new { animation: none; }\n}\n\n/* ==========================================================================\n Round-reveal v2 \u2014 Duel layout + breakdown + stats sheets (DESIGN.md)\n ========================================================================== */\n\n/* Header v2: round count + difficulty badge + \u24D8 */\n.reveal-header-v2 {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: var(--space-md);\n gap: var(--space-sm);\n}\n.reveal-header-v2 .round-count {\n font-family: var(--font-body);\n font-size: var(--font-size-xs);\n font-weight: 600;\n letter-spacing: 0.06em;\n text-transform: uppercase;\n color: var(--color-text-neon-muted);\n display: flex; align-items: center; gap: 4px;\n}\n.reveal-header-v2 .header-right {\n display: flex; align-items: center; gap: var(--space-sm);\n}\n/* Auto-advance countdown ring on the player reveal (mirrors admin #1048 /\n dashboard #1185). Cyan per DESIGN.md \u2014 timer = --color-accent-secondary. */\n.reveal-advance-pill {\n position: relative;\n width: 32px; height: 32px;\n flex-shrink: 0;\n display: inline-flex; align-items: center; justify-content: center;\n}\n.reveal-advance-pill.hidden { display: none; }\n.reveal-advance-svg {\n width: 100%; height: 100%;\n transform: rotate(-90deg);\n}\n.reveal-advance-bg {\n fill: none;\n stroke: rgba(255, 255, 255, 0.12);\n stroke-width: 5;\n}\n.reveal-advance-fg {\n fill: none;\n stroke: var(--color-accent-secondary);\n stroke-width: 5;\n stroke-linecap: round;\n transition: stroke-dashoffset 0.5s linear;\n filter: drop-shadow(var(--glow-secondary));\n}\n.reveal-advance-num {\n position: absolute; inset: 0;\n display: flex; align-items: center; justify-content: center;\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 13px;\n color: var(--color-accent-secondary);\n}\n.info-btn {\n width: 28px; height: 28px;\n border-radius: 50%;\n border: 1px solid rgba(255, 255, 255, 0.14);\n background: var(--color-bg-surface);\n color: var(--color-text-neon-muted);\n font-size: var(--font-size-base);\n font-weight: 700;\n font-family: var(--font-display);\n display: flex; align-items: center; justify-content: center;\n cursor: pointer;\n transition: color var(--transition-fast), border-color var(--transition-fast);\n padding: 0;\n}\n.info-btn:hover,\n.info-btn:focus-visible {\n color: var(--color-text-white);\n border-color: rgba(255, 255, 255, 0.3);\n outline: none;\n}\n\n/* Song strip */\n.song-strip {\n display: flex; align-items: center; gap: var(--space-sm);\n padding: var(--space-sm) var(--space-sm) var(--space-sm) var(--space-sm);\n background: rgba(255, 255, 255, 0.04);\n border-radius: var(--radius-lg);\n border: 1px solid rgba(255, 255, 255, 0.08);\n margin-bottom: var(--space-md);\n}\n.song-strip-cover {\n width: 56px; height: 56px;\n border-radius: var(--radius-md);\n object-fit: cover;\n flex-shrink: 0;\n background: linear-gradient(135deg, #ff6b9a, #6366f1);\n}\n.song-strip-info { flex: 1; min-width: 0; }\n.song-strip-title {\n font-family: var(--font-display);\n font-weight: 700;\n font-size: var(--font-size-md);\n color: var(--color-text-white);\n overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\n}\n.song-strip-artist {\n font-family: var(--font-body);\n font-size: var(--font-size-sm);\n color: var(--color-text-neon-muted);\n margin-top: 2px;\n overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\n}\n\n/* Chip row (bet / streak) */\n.chip-row {\n display: flex; gap: var(--space-xs);\n margin-bottom: var(--space-sm);\n flex-wrap: wrap;\n}\n.chip-row.hidden { display: none; }\n.chip-row .chip {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 5px 10px;\n border-radius: var(--radius-full);\n font-family: var(--font-body);\n font-size: var(--font-size-xs);\n font-weight: 700;\n letter-spacing: 0.04em;\n}\n.chip-row .chip--bet-won {\n background: rgba(255, 45, 106, 0.12);\n border: 1px solid rgba(255, 45, 106, 0.5);\n color: var(--color-accent-primary);\n box-shadow: 0 0 12px rgba(255, 45, 106, 0.2);\n}\n.chip-row .chip--bet-lost {\n background: rgba(255, 0, 64, 0.08);\n border: 1px solid rgba(255, 0, 64, 0.4);\n color: var(--color-error-neon);\n}\n.chip-row .chip--streak {\n background: rgba(255, 102, 0, 0.12);\n border: 1px solid rgba(255, 102, 0, 0.5);\n color: var(--color-warning-alt);\n}\n\n/* Duel */\n.duel {\n padding: var(--space-lg) var(--space-xs) var(--space-md);\n margin-bottom: var(--space-sm);\n}\n.duel-emotion {\n text-align: center;\n font-family: var(--font-display);\n font-weight: 900;\n font-size: var(--font-size-2xl);\n letter-spacing: 0.06em;\n margin-bottom: var(--space-md);\n min-height: 1.2em;\n transition: color var(--transition-normal);\n}\n.duel-emotion.hidden { visibility: hidden; }\n.duel-emotion--exact {\n color: var(--color-success-neon);\n text-shadow: 0 0 16px rgba(57, 255, 20, 0.55);\n}\n.duel-emotion--close {\n color: var(--color-success-neon);\n text-shadow: 0 0 14px rgba(57, 255, 20, 0.45);\n}\n.duel-emotion--wrong {\n color: var(--color-error-neon);\n text-shadow: 0 0 14px rgba(255, 0, 64, 0.45);\n}\n.duel-emotion--missed {\n color: var(--color-text-dim);\n text-shadow: none;\n}\n.duel-row {\n display: grid;\n grid-template-columns: 1fr auto 1fr;\n gap: var(--space-sm);\n align-items: center;\n}\n.duel-side { text-align: center; min-width: 0; }\n.duel-label {\n font-family: var(--font-body);\n font-size: var(--font-size-xs);\n letter-spacing: 0.08em;\n text-transform: uppercase;\n color: var(--color-text-dim);\n font-weight: 600;\n margin-bottom: var(--space-sm);\n}\n.duel-year {\n font-family: var(--font-display);\n font-weight: 900;\n /* Issue #1072: scale down on narrow viewports so a 4-digit year never overflows\n its 1fr track and pushes the duel-row past the screen edge. */\n font-size: clamp(40px, 12vw, 64px);\n line-height: 1;\n letter-spacing: -0.03em;\n}\n.duel-year.mine { color: var(--color-text-neon-muted); }\n.duel-year.correct {\n color: var(--color-accent-secondary);\n text-shadow: 0 0 24px rgba(0, 245, 255, 0.6);\n}\n.duel-gap {\n display: flex; flex-direction: column; align-items: center; justify-content: center;\n gap: 2px;\n min-width: 48px;\n}\n.duel-gap-x {\n font-family: var(--font-display);\n font-weight: 700;\n font-size: var(--font-size-xl);\n color: var(--color-text-dim);\n opacity: 0.6;\n line-height: 1;\n}\n.duel-gap-n {\n font-family: var(--font-display);\n font-weight: 900;\n font-size: var(--font-size-2xl);\n color: var(--color-error-neon);\n text-shadow: 0 0 10px rgba(255, 0, 64, 0.35);\n line-height: 1;\n}\n.duel-gap--exact .duel-gap-n {\n color: var(--color-success-neon);\n text-shadow: 0 0 10px rgba(57, 255, 20, 0.5);\n}\n.duel-gap--close .duel-gap-n {\n color: var(--color-success-neon);\n text-shadow: 0 0 8px rgba(57, 255, 20, 0.35);\n}\n.duel-gap-unit {\n font-family: var(--font-body);\n font-size: 9px;\n color: var(--color-text-dim);\n text-transform: uppercase;\n letter-spacing: 0.1em;\n margin-top: 3px;\n}\n\n/* Score row */\n.score-row {\n display: flex; align-items: center; justify-content: space-between;\n padding: 14px 18px;\n background: var(--color-bg-surface);\n border-radius: var(--radius-lg);\n border: 1px solid rgba(0, 245, 255, 0.25);\n box-shadow: 0 0 14px rgba(0, 245, 255, 0.12);\n margin-bottom: var(--space-md);\n gap: var(--space-sm);\n}\n.score-row-left {\n font-family: var(--font-body);\n font-size: var(--font-size-xs);\n color: var(--color-text-neon-muted);\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.08em;\n display: flex; flex-direction: column; gap: 3px;\n min-width: 0;\n}\n.score-row-subtitle {\n color: var(--color-text-white);\n font-size: var(--font-size-sm);\n font-weight: 700;\n letter-spacing: 0;\n text-transform: none;\n overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\n}\n.score-row-right {\n display: flex; align-items: center; gap: var(--space-sm);\n flex-shrink: 0;\n}\n.score-row-pts {\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 38px;\n color: var(--color-accent-secondary);\n text-shadow: 0 0 18px rgba(0, 245, 255, 0.5);\n line-height: 1;\n}\n\n/* Standings (compact list inside a card-section) */\n.standings-section .leaderboard-list {\n display: flex; flex-direction: column; gap: 6px;\n}\n\n/* ==========================================================================\n Bottom-sheet modal (used for points breakdown + round stats)\n ========================================================================== */\n.sheet-backdrop {\n position: fixed;\n inset: 0;\n z-index: 400;\n display: flex;\n align-items: flex-end;\n justify-content: center;\n}\n.sheet-backdrop.hidden { display: none; }\n.sheet-dim {\n position: absolute; inset: 0;\n background: rgba(10, 10, 18, 0.6);\n backdrop-filter: blur(2px);\n animation: sheet-dim-in 200ms ease-out;\n}\n@keyframes sheet-dim-in { from { opacity: 0; } to { opacity: 1; } }\n.sheet {\n position: relative;\n z-index: 1;\n width: 100%;\n max-width: 520px;\n background: linear-gradient(180deg, #14141e, #0a0a12);\n border-top: 1px solid rgba(0, 245, 255, 0.25);\n border-radius: var(--radius-2xl) var(--radius-2xl) 0 0;\n box-shadow: 0 -12px 40px rgba(0, 0, 0, 0.5), 0 -4px 16px rgba(0, 245, 255, 0.1);\n padding: 14px 20px calc(28px + env(safe-area-inset-bottom, 0));\n max-height: 80vh;\n overflow-y: auto;\n animation: sheet-slide-up 320ms cubic-bezier(0.22, 0.8, 0.32, 1);\n}\n@keyframes sheet-slide-up {\n from { transform: translateY(100%); }\n to { transform: translateY(0); }\n}\n@media (prefers-reduced-motion: reduce) {\n .sheet-dim { animation: none; }\n .sheet { animation: none; }\n}\n.sheet-handle {\n width: 40px; height: 4px; border-radius: 2px;\n background: rgba(255, 255, 255, 0.2);\n margin: 0 auto 16px;\n}\n.sheet-header {\n display: flex; align-items: center; justify-content: space-between;\n margin-bottom: var(--space-md);\n}\n.sheet-title {\n font-family: var(--font-display);\n font-weight: 800;\n font-size: var(--font-size-lg);\n display: flex; align-items: center; gap: 8px;\n color: var(--color-text-white);\n}\n.sheet-close {\n width: 32px; height: 32px; border-radius: 50%;\n background: rgba(255, 255, 255, 0.08);\n border: 0;\n color: var(--color-text-neon-muted);\n font-size: var(--font-size-base);\n font-weight: 700;\n display: flex; align-items: center; justify-content: center;\n cursor: pointer;\n}\n.sheet-close:hover,\n.sheet-close:focus-visible {\n color: var(--color-text-white);\n background: rgba(255, 255, 255, 0.14);\n outline: none;\n}\n\n/* Points breakdown content */\n.breakdown-list {\n display: flex; flex-direction: column;\n margin-bottom: var(--space-md);\n}\n.breakdown-row {\n display: flex; align-items: center; justify-content: space-between;\n padding: 10px 0;\n font-family: var(--font-body);\n font-size: var(--font-size-base);\n}\n.breakdown-row + .breakdown-row { border-top: 1px solid rgba(255, 255, 255, 0.05); }\n.breakdown-row .label {\n color: var(--color-text-neon-muted);\n display: flex; align-items: center; gap: 8px;\n}\n.breakdown-row .label .emoji { font-size: var(--font-size-md); }\n.breakdown-row .value {\n font-family: var(--font-display);\n font-weight: 800;\n font-size: var(--font-size-md);\n}\n.breakdown-row .value--positive { color: var(--color-success-neon); }\n.breakdown-row .value--multiplier { color: var(--color-accent-primary); }\n.breakdown-row .value--neutral { color: var(--color-text-white); }\n.breakdown-total {\n display: flex; align-items: center; justify-content: space-between;\n padding: var(--space-md);\n border-radius: var(--radius-lg);\n background: linear-gradient(90deg, rgba(0, 245, 255, 0.08), rgba(255, 45, 106, 0.05));\n border: 1px solid rgba(0, 245, 255, 0.3);\n}\n.breakdown-total .label {\n font-family: var(--font-display);\n font-weight: 700;\n font-size: var(--font-size-md);\n color: var(--color-text-white);\n}\n.breakdown-total .value {\n font-family: var(--font-display);\n font-weight: 900;\n font-size: var(--font-size-3xl);\n color: var(--color-accent-secondary);\n text-shadow: 0 0 16px rgba(0, 245, 255, 0.5);\n}\n.breakdown-total--zero .value { color: var(--color-text-dim); text-shadow: none; }\n.breakdown-empty {\n text-align: center;\n padding: var(--space-md) 0;\n}\n.breakdown-empty-icon { font-size: 42px; margin-bottom: var(--space-sm); }\n.breakdown-empty-text {\n color: var(--color-text-neon-muted);\n font-family: var(--font-body);\n font-size: var(--font-size-base);\n margin-bottom: var(--space-md);\n}\n\n/* Round stats content */\n.difficulty-visual {\n display: flex; align-items: center; justify-content: space-between;\n padding: var(--space-md);\n background: rgba(255, 0, 64, 0.08);\n border: 1px solid rgba(255, 0, 64, 0.3);\n border-radius: var(--radius-md);\n margin-bottom: var(--space-sm);\n gap: var(--space-sm);\n}\n.difficulty-visual .left {\n font-family: var(--font-display);\n font-weight: 800;\n font-size: var(--font-size-sm);\n color: var(--color-error-neon);\n min-width: 0;\n}\n.difficulty-visual .left .sub {\n font-family: var(--font-body);\n font-size: var(--font-size-xs);\n font-weight: 500;\n color: var(--color-text-neon-muted);\n margin-top: 3px;\n}\n.difficulty-visual .stars { font-size: var(--font-size-md); letter-spacing: 2px; white-space: nowrap; }\n.difficulty-visual .star-filled { color: var(--color-warning-alt); }\n.difficulty-visual .star-empty { color: rgba(255, 255, 255, 0.15); }\n\n.stats-grid {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: var(--space-sm);\n margin-bottom: var(--space-sm);\n}\n.stats-card {\n padding: 12px 14px;\n background: rgba(255, 255, 255, 0.04);\n border: 1px solid rgba(255, 255, 255, 0.08);\n border-radius: var(--radius-md);\n}\n.stats-card .lbl {\n font-family: var(--font-body);\n font-size: 10px;\n color: var(--color-text-dim);\n font-weight: 700;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n}\n.stats-card .val {\n font-family: var(--font-display);\n font-weight: 800;\n font-size: var(--font-size-2xl);\n margin-top: 4px;\n color: var(--color-text-white);\n}\n.stats-card .val.cyan { color: var(--color-accent-secondary); }\n.stats-card .val.success { color: var(--color-success-neon); }\n.stats-card .val.warn { color: var(--color-error-neon); }\n.stats-card .sub {\n font-family: var(--font-body);\n font-size: 10px;\n color: var(--color-text-neon-muted);\n margin-top: 2px;\n}\n\n.furthest-list { display: flex; flex-direction: column; gap: 6px; }\n.furthest-row {\n display: flex; align-items: center; justify-content: space-between;\n padding: 10px 12px;\n background: rgba(255, 255, 255, 0.03);\n border-radius: var(--radius-md);\n font-family: var(--font-body);\n font-size: var(--font-size-sm);\n}\n.furthest-row .name { font-weight: 600; color: var(--color-text-white); }\n.furthest-row .off {\n color: var(--color-error-neon);\n font-family: var(--font-display);\n font-weight: 700;\n}\n\n.stats-empty {\n text-align: center;\n color: var(--color-text-dim);\n font-family: var(--font-body);\n font-size: var(--font-size-sm);\n padding: var(--space-md);\n}\n\n/* ==========================================================================\n Gameplay v3 \u2014 Arcade layout (DESIGN.md Variant D)\n Massive year \u00B7 tappable tiles \u00B7 neon timer \u00B7 3D buttons.\n Supersedes legacy .album-cover-container, .year-display, .slider-container,\n .bet-container, .submit-btn, .steal-btn, .submitted-confirmation, and the\n .game-sticky-bar + .game-header-compact header.\n ========================================================================== */\n\n.game-container--arcade {\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: 0;\n}\n\n/* Arcade header: pulse-orb album + \"Round N of M\" + neon timer */\n.arc-header {\n display: grid;\n grid-template-columns: auto 1fr auto;\n align-items: center;\n gap: var(--space-sm);\n padding: var(--space-sm) var(--space-md);\n position: sticky;\n top: 0;\n z-index: 5;\n background: linear-gradient(180deg, rgba(10, 10, 18, 0.95), rgba(10, 10, 18, 0.82) 72%, transparent);\n backdrop-filter: blur(8px);\n margin-bottom: var(--space-md);\n}\n\n/* #817: floating mini-timer \u2014 always visible during PLAYING when the main\n neon timer scrolls out of view. Position-fixed so it works regardless of\n any sticky-positioning quirks on iOS Safari. Smaller and quieter than\n the main timer so it doesn't overwhelm the lower content (slider,\n challenges, submit button) once it's revealed. Syncing with the main\n timer + show/hide via IntersectionObserver lives in player-game.js. */\n.timer-float {\n position: fixed;\n top: max(env(safe-area-inset-top, 0px) + 8px, 8px);\n right: 12px;\n z-index: 100;\n width: 52px;\n height: 52px;\n border-radius: 50%;\n background: rgba(10, 10, 18, 0.78);\n border: 2px solid var(--color-accent-primary);\n box-shadow: 0 0 14px rgba(255, 45, 106, 0.45),\n inset 0 0 8px rgba(255, 45, 106, 0.25);\n display: flex;\n align-items: center;\n justify-content: center;\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 22px;\n line-height: 1;\n color: var(--color-accent-primary);\n text-shadow: 0 0 8px rgba(255, 45, 106, 0.6);\n backdrop-filter: blur(8px);\n transition: opacity 0.2s ease-out, transform 0.2s ease-out;\n pointer-events: none;\n /* Default: hidden via .hidden override below. Becomes visible when\n JS adds .timer-float--visible (gated on the main timer being\n offscreen + game-view being active). */\n}\n.timer-float.hidden {\n opacity: 0;\n transform: scale(0.7);\n pointer-events: none;\n}\n.timer-float.timer-float--visible {\n opacity: 1;\n transform: scale(1);\n}\n.timer-float.timer-float--warn {\n border-color: var(--color-error-neon, #ff0040);\n color: var(--color-error-neon, #ff0040);\n box-shadow: 0 0 16px rgba(255, 0, 64, 0.6),\n inset 0 0 8px rgba(255, 0, 64, 0.3);\n animation: arc-urgency 0.8s ease-in-out infinite;\n}\n@media (prefers-reduced-motion: reduce) {\n .timer-float { transition: none; }\n .timer-float.timer-float--warn { animation: none; }\n}\n\n.arc-pulse-orb {\n width: 56px; height: 56px; border-radius: 50%;\n display: flex; align-items: center; justify-content: center;\n position: relative;\n overflow: hidden;\n background: linear-gradient(135deg, #ff6b9a, #6366f1);\n box-shadow: 0 0 24px rgba(255, 45, 106, 0.5);\n flex-shrink: 0;\n}\n.arc-pulse-orb::before {\n content: '';\n position: absolute; inset: -4px;\n border-radius: 50%;\n border: 2px solid rgba(255, 45, 106, 0.5);\n animation: arc-orb-pulse 1.4s ease-out infinite;\n pointer-events: none;\n}\n.arc-pulse-orb--steady::before { animation: none; opacity: 0; }\n@keyframes arc-orb-pulse {\n 0% { opacity: 0.8; transform: scale(1); }\n 100% { opacity: 0; transform: scale(1.25); }\n}\n@media (prefers-reduced-motion: reduce) {\n .arc-pulse-orb::before { animation: none; opacity: 0; }\n}\n.arc-pulse-orb-img {\n width: 100%; height: 100%;\n object-fit: cover;\n border-radius: 50%;\n z-index: 1;\n /* #850: blur cover during PLAYING so readable text on artwork (album titles,\n years, artist names) can't leak the year-guess answer. Colour/vibe is\n preserved. At REVEAL, the larger #reveal-album-cover (player.html:481) is\n rendered crisp \u2014 that element is unaffected by this rule. */\n filter: blur(12px);\n transform: scale(1.15);\n transition: filter 0.4s ease, transform 0.4s ease;\n}\n\n.arc-round-center {\n text-align: center;\n font-family: var(--font-display);\n font-weight: 800;\n font-size: 11px;\n letter-spacing: 0.12em;\n text-transform: uppercase;\n color: var(--color-text-neon-muted);\n line-height: 1.3;\n overflow: hidden;\n}\n.arc-round-label { display: block; }\n.arc-round-big {\n display: block;\n font-size: 20px;\n color: var(--color-text-white);\n letter-spacing: 0;\n text-transform: none;\n margin-top: 2px;\n}\n.arc-round-sep {\n color: var(--color-text-dim);\n margin: 0 2px;\n font-weight: 500;\n}\n\n.timer-neon {\n width: 72px; height: 72px;\n border-radius: 50%;\n background: var(--color-bg-primary);\n border: 3px solid var(--color-accent-primary);\n box-shadow: var(--glow-primary), inset 0 0 12px rgba(255, 45, 106, 0.3);\n display: flex; align-items: center; justify-content: center;\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 30px;\n color: var(--color-accent-primary);\n text-shadow: 0 0 10px rgba(255, 45, 106, 0.6);\n flex-shrink: 0;\n line-height: 1;\n}\n.timer-neon .timer { color: inherit; font-family: inherit; font-size: inherit; font-weight: inherit; }\n.timer-neon.timer-neon--warn {\n border-color: var(--color-error-neon);\n color: var(--color-error-neon);\n box-shadow: 0 0 20px rgba(255, 0, 64, 0.6), inset 0 0 12px rgba(255, 0, 64, 0.3);\n animation: arc-urgency 0.8s ease-in-out infinite;\n}\n@keyframes arc-urgency {\n 0%, 100% { transform: scale(1); }\n 50% { transform: scale(1.06); }\n}\n/* #1273 AC#3 \u2014 ghost-ring catch-up glow. Briefly applied while the countdown\n eases to the server's authoritative remaining-time (V1 Smooth Correct), so a\n drift correction reads as a deliberate glow pulse in the existing ring\n language rather than a jarring number jump. */\n.timer-neon.timer-neon--catchup {\n animation: timer-catchup-glow 0.4s ease-out;\n}\n@keyframes timer-catchup-glow {\n 0% { box-shadow: var(--glow-primary), inset 0 0 12px rgba(255, 45, 106, 0.3); }\n 45% { box-shadow: 0 0 26px rgba(0, 245, 255, 0.7), inset 0 0 16px rgba(0, 245, 255, 0.35); }\n 100% { box-shadow: var(--glow-primary), inset 0 0 12px rgba(255, 45, 106, 0.3); }\n}\n@media (prefers-reduced-motion: reduce) {\n .timer-neon.timer-neon--warn { animation: none; }\n .timer-neon.timer-neon--catchup { animation: none; }\n}\n\n/* Chip row \u2014 steal / closest-wins / intro / final (conditional) */\n.arc-chip-row {\n display: flex;\n gap: 6px;\n flex-wrap: wrap;\n padding: 0 var(--space-md);\n margin-bottom: var(--space-md);\n}\n.arc-chip-row.hidden { display: none; }\n.arc-chip {\n display: inline-flex; align-items: center; gap: 5px;\n padding: 4px 10px;\n border-radius: var(--radius-full);\n font-family: var(--font-body);\n font-size: 11px;\n font-weight: 700;\n letter-spacing: 0.04em;\n}\n.arc-chip--steal {\n color: var(--color-accent-secondary);\n background: rgba(0, 245, 255, 0.08);\n border: 1px solid rgba(0, 245, 255, 0.4);\n}\n.arc-chip--closest-wins {\n color: var(--color-success-neon);\n background: rgba(57, 255, 20, 0.08);\n border: 1px solid rgba(57, 255, 20, 0.4);\n}\n.arc-chip--intro {\n color: var(--color-warning-alt);\n background: rgba(255, 102, 0, 0.12);\n border: 1px solid rgba(255, 102, 0, 0.5);\n}\n.arc-chip--final {\n color: var(--color-accent-primary);\n background: rgba(255, 45, 106, 0.12);\n border: 1px solid rgba(255, 45, 106, 0.5);\n text-transform: uppercase;\n}\n\n/* Year XXL */\n.year-xxl {\n text-align: center;\n font-family: var(--font-display);\n font-weight: 900;\n font-size: clamp(96px, 34vw, 128px);\n line-height: 1;\n letter-spacing: -0.04em;\n background: linear-gradient(180deg, var(--color-text-white) 0%, rgba(0, 245, 255, 0.85) 100%);\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n background-clip: text;\n text-shadow: 0 0 32px rgba(0, 245, 255, 0.35);\n margin: 4px 0 var(--space-md);\n padding: 0 var(--space-md);\n max-width: 100%;\n}\n.year-xxl--locked {\n background: linear-gradient(180deg, var(--color-success-neon) 0%, rgba(57, 255, 20, 0.7) 100%);\n -webkit-background-clip: text;\n background-clip: text;\n -webkit-text-fill-color: transparent;\n text-shadow: 0 0 28px rgba(57, 255, 20, 0.45);\n}\n\n/* Submitted banner */\n.submitted-banner {\n margin: 0 var(--space-md) var(--space-sm);\n padding: 8px 14px;\n background: rgba(57, 255, 20, 0.08);\n border: 1px solid rgba(57, 255, 20, 0.4);\n border-radius: var(--radius-md);\n font-family: var(--font-display);\n font-weight: 800;\n font-size: 14px;\n color: var(--color-success-neon);\n letter-spacing: 0.04em;\n display: flex; align-items: center; justify-content: center; gap: 6px;\n text-align: center;\n}\n.submitted-banner.hidden { display: none; }\n.submitted-banner .check {\n width: 18px; height: 18px; border-radius: 50%;\n background: var(--color-success-neon);\n color: var(--color-bg-primary);\n font-size: 11px; font-weight: 900;\n display: flex; align-items: center; justify-content: center;\n flex-shrink: 0;\n}\n\n/* Arcade slider */\n.slider-arcade-wrap {\n padding: 0 var(--space-md);\n margin-bottom: var(--space-md);\n position: relative;\n}\n.slider-arcade {\n padding: 10px;\n background: rgba(255, 255, 255, 0.04);\n border-radius: var(--radius-lg);\n border: 1px solid rgba(255, 255, 255, 0.08);\n display: flex; align-items: center; gap: 12px;\n}\n.slider-btn-year {\n width: 44px; height: 44px; border-radius: 50%;\n background: var(--color-bg-primary);\n border: 2px solid rgba(255, 255, 255, 0.15);\n color: var(--color-text-white);\n font-family: var(--font-display);\n font-weight: 700;\n font-size: 22px;\n line-height: 1;\n flex-shrink: 0;\n display: flex; align-items: center; justify-content: center;\n cursor: pointer;\n transition: all var(--transition-fast);\n touch-action: manipulation;\n}\n.slider-btn-year:hover,\n.slider-btn-year:focus-visible {\n border-color: var(--color-accent-secondary);\n color: var(--color-accent-secondary);\n outline: none;\n}\n.slider-btn-year:disabled {\n opacity: 0.4; cursor: not-allowed;\n}\n/* #851 coarse-step variant: smaller +5/-5 buttons next to the main +/-. */\n.slider-btn-year--coarse {\n position: relative;\n width: 36px; height: 36px;\n font-size: 13px;\n font-weight: 800;\n letter-spacing: -0.02em;\n}\n/* #1759: mid-round +/-5 buttons sit next to 44px fine-step siblings under time\n pressure; expand the hit target to 44px (visual stays 36px) so a mis-tap\n doesn't land on the fine button and cost points. */\n.slider-btn-year--coarse::after {\n content: '';\n position: absolute;\n top: 50%;\n left: 50%;\n width: 44px;\n height: 44px;\n transform: translate(-50%, -50%);\n}\n.slider-arcade { gap: 8px; } /* tighten gap so 5 children fit on narrow screens */\n/* #2344: the track holds the input and the decade scale stacked, so the\n marks line up with the thumb's travel rather than with the box. */\n.slider-arcade-track { flex: 1; display: flex; flex-direction: column; align-items: stretch; gap: 4px; }\n.year-scale {\n position: relative;\n height: 13px;\n /* Reserve the thumb's half-width on both sides: a range thumb's centre\n never reaches the very edge, so a mark at 100% would sit past the\n furthest year the slider can actually select. */\n margin: 0 2px;\n pointer-events: none;\n}\n.year-scale span {\n position: absolute;\n top: 0;\n transform: translateX(-50%);\n font-size: 10px;\n font-weight: 600;\n letter-spacing: 0.02em;\n color: var(--color-text-muted, rgba(255, 255, 255, 0.42));\n font-variant-numeric: tabular-nums;\n white-space: nowrap;\n user-select: none;\n}\n.slider-arcade.slider-arcade--locked .year-scale { opacity: 0.5; }\n.year-slider-arcade {\n -webkit-appearance: none;\n appearance: none;\n width: 100%;\n height: 10px;\n background: linear-gradient(90deg,\n rgba(0, 245, 255, 0.15),\n rgba(255, 45, 106, 0.25),\n rgba(57, 255, 20, 0.15));\n border-radius: var(--radius-full);\n outline: none;\n cursor: pointer;\n}\n.year-slider-arcade::-webkit-slider-thumb {\n -webkit-appearance: none;\n appearance: none;\n width: 32px; height: 32px;\n border-radius: 50%;\n background: var(--color-accent-primary);\n border: 3px solid var(--color-bg-primary);\n box-shadow: var(--glow-primary);\n cursor: grab;\n transition: transform var(--transition-fast);\n}\n.year-slider-arcade::-webkit-slider-thumb:active { cursor: grabbing; transform: scale(1.05); }\n.year-slider-arcade::-moz-range-thumb {\n width: 32px; height: 32px;\n border-radius: 50%;\n background: var(--color-accent-primary);\n border: 3px solid var(--color-bg-primary);\n box-shadow: var(--glow-primary);\n cursor: grab;\n}\n\n/* Locked state for the slider (after submit) */\n.slider-arcade.slider-arcade--locked {\n opacity: 0.55;\n pointer-events: none;\n}\n.slider-arcade.slider-arcade--locked .year-slider-arcade::-webkit-slider-thumb {\n background: var(--color-success-neon);\n box-shadow: 0 0 16px rgba(57, 255, 20, 0.6);\n}\n.slider-arcade.slider-arcade--locked .year-slider-arcade::-moz-range-thumb {\n background: var(--color-success-neon);\n box-shadow: 0 0 16px rgba(57, 255, 20, 0.6);\n}\n.guess-lock-stamp {\n position: absolute;\n right: calc(var(--space-md) + 8px);\n top: -10px;\n padding: 3px 10px;\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 10px;\n color: var(--color-success-neon);\n background: var(--color-bg-primary);\n border: 1px solid rgba(57, 255, 20, 0.4);\n border-radius: var(--radius-full);\n letter-spacing: 0.08em;\n text-transform: uppercase;\n box-shadow: 0 0 8px rgba(57, 255, 20, 0.25);\n}\n.guess-lock-stamp.hidden { display: none; }\n\n/* Arcade tiles (artist + movie challenge).\n Wrapped in a subtle card container so the challenge reads as a distinct\n \"quiz card\" element. Outer wrapper has a thin border + soft bg; tiles\n themselves keep their 3D shadow treatment so they still pop. */\n.arc-tiles {\n padding: 12px 14px;\n margin: 0 var(--space-md) var(--space-md);\n background: linear-gradient(180deg, rgba(0, 245, 255, 0.04), rgba(255, 255, 255, 0.02));\n border: 1px solid rgba(0, 245, 255, 0.18);\n border-radius: var(--radius-lg);\n box-shadow: inset 0 0 12px rgba(0, 245, 255, 0.04);\n}\n.arc-tiles.hidden { display: none; }\n.arc-tiles-header {\n display: flex; align-items: center; justify-content: space-between;\n font-family: var(--font-display);\n font-weight: 700;\n font-size: 12px;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n color: var(--color-text-neon-muted);\n margin-bottom: 10px;\n gap: var(--space-sm);\n}\n.arc-tiles-header > span:first-child {\n display: flex; align-items: center; gap: 6px;\n min-width: 0;\n}\n.arc-tiles-bonus {\n background: rgba(57, 255, 20, 0.15);\n color: var(--color-success-neon);\n font-weight: 900;\n font-size: 11px;\n padding: 2px 8px;\n border-radius: var(--radius-full);\n letter-spacing: 0.04em;\n flex-shrink: 0;\n}\n.arc-tiles-grid {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 10px;\n}\n/* Re-style the existing .artist-option-btn / .movie-option-btn with arcade feel.\n These classes are generated by player-game.js \u2014 don't change the JS, just\n restyle the DOM they emit. */\n.arc-tiles-grid .artist-option-btn,\n.arc-tiles-grid .movie-option-btn {\n padding: 14px 10px;\n background: rgba(255, 255, 255, 0.05);\n border: 2px solid rgba(255, 255, 255, 0.12);\n border-radius: var(--radius-lg);\n font-family: var(--font-display);\n font-weight: 700;\n font-size: 15px;\n text-align: center;\n color: var(--color-text-white);\n box-shadow: 0 4px 0 rgba(0, 0, 0, 0.3);\n transition: transform var(--transition-fast), border-color var(--transition-fast), box-shadow var(--transition-fast);\n cursor: pointer;\n min-height: 56px;\n}\n.arc-tiles-grid .artist-option-btn:hover,\n.arc-tiles-grid .movie-option-btn:hover,\n.arc-tiles-grid .artist-option-btn:focus-visible,\n.arc-tiles-grid .movie-option-btn:focus-visible {\n border-color: rgba(0, 245, 255, 0.55);\n outline: none;\n}\n.arc-tiles-grid .artist-option-btn:active,\n.arc-tiles-grid .movie-option-btn:active {\n transform: translateY(1px);\n box-shadow: 0 2px 0 rgba(0, 0, 0, 0.3);\n}\n.arc-tiles-grid .artist-option-btn.is-loading {\n background: linear-gradient(135deg, rgba(0, 245, 255, 0.2), rgba(0, 245, 255, 0.05));\n border-color: var(--color-accent-secondary);\n color: var(--color-accent-secondary);\n animation: arc-tile-pulse 1s ease-in-out infinite;\n}\n@keyframes arc-tile-pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.7; } }\n.arc-tiles-grid .artist-option-btn.is-winner,\n.arc-tiles-grid .artist-option-btn.is-correct,\n.arc-tiles-grid .movie-option-btn.is-winner,\n.arc-tiles-grid .movie-option-btn.is-correct {\n background: linear-gradient(135deg, rgba(57, 255, 20, 0.25), rgba(57, 255, 20, 0.08));\n border-color: var(--color-success-neon);\n color: var(--color-success-neon);\n box-shadow: 0 0 20px rgba(57, 255, 20, 0.5), 0 4px 0 rgba(0, 0, 0, 0.3);\n}\n.arc-tiles-grid .artist-option-btn.is-wrong,\n.arc-tiles-grid .artist-option-btn.is-wrong.is-selected,\n.arc-tiles-grid .movie-option-btn.is-wrong {\n opacity: 0.5;\n border-style: dashed;\n}\n.arc-tiles-grid .artist-option-btn.is-disabled,\n.arc-tiles-grid .movie-option-btn.is-disabled {\n opacity: 0.6;\n cursor: not-allowed;\n box-shadow: none;\n}\n@media (prefers-reduced-motion: reduce) {\n .arc-tiles-grid .artist-option-btn.is-loading { animation: none; }\n}\n\n/* No-bonus filler */\n.bonus-filler {\n padding: var(--space-md);\n margin: 0 var(--space-md) var(--space-md);\n background: rgba(255, 255, 255, 0.02);\n border: 1px dashed rgba(255, 255, 255, 0.1);\n border-radius: var(--radius-lg);\n text-align: center;\n font-family: var(--font-body);\n font-size: 12px;\n color: var(--color-text-dim);\n font-style: italic;\n display: flex; align-items: center; justify-content: center; gap: 6px;\n}\n.bonus-filler.hidden { display: none; }\n\n/* Actions row (bet + submit) */\n.arc-actions {\n display: grid;\n grid-template-columns: auto 1fr;\n gap: 10px;\n padding: 0 var(--space-md);\n margin-bottom: var(--space-md);\n}\n.bet-arc {\n width: 72px; height: 60px;\n background: transparent;\n border: 2px solid rgba(255, 45, 106, 0.5);\n color: var(--color-accent-primary);\n border-radius: var(--radius-lg);\n font-family: var(--font-display);\n font-weight: 700;\n display: flex; flex-direction: column; align-items: center; justify-content: center;\n gap: 2px;\n box-shadow: 0 4px 0 rgba(0, 0, 0, 0.3);\n cursor: pointer;\n transition: all var(--transition-fast);\n}\n.bet-arc .bet-icon { font-size: 22px; line-height: 1; }\n.bet-arc .bet-label { font-size: 9px; font-weight: 800; letter-spacing: 0.08em; text-transform: uppercase; }\n.bet-arc.is-active {\n background: rgba(255, 45, 106, 0.15);\n box-shadow: var(--glow-primary), 0 4px 0 rgba(0, 0, 0, 0.3);\n}\n.bet-arc:active { transform: translateY(2px); box-shadow: 0 2px 0 rgba(0, 0, 0, 0.3); }\n.bet-arc:disabled { opacity: 0.55; cursor: not-allowed; }\n\n.submit-arc {\n background: linear-gradient(180deg, #ff4d82, var(--color-accent-primary));\n border: 0;\n color: var(--color-text-white);\n border-radius: var(--radius-lg);\n padding: 16px 20px;\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 17px;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n box-shadow: var(--glow-primary), 0 6px 0 rgba(180, 20, 60, 0.6);\n cursor: pointer;\n transition: transform var(--transition-fast);\n display: flex; align-items: center; justify-content: center; gap: 8px;\n}\n.submit-arc:active { transform: translateY(2px); box-shadow: var(--glow-primary), 0 4px 0 rgba(180, 20, 60, 0.6); }\n.submit-arc:disabled {\n background: rgba(255, 255, 255, 0.06);\n color: var(--color-text-neon-muted);\n box-shadow: 0 4px 0 rgba(0, 0, 0, 0.3);\n cursor: not-allowed;\n text-shadow: none;\n}\n.submit-arc.submit-arc--waiting {\n background: rgba(255, 255, 255, 0.05);\n color: var(--color-text-neon-muted);\n box-shadow: 0 4px 0 rgba(0, 0, 0, 0.3);\n text-shadow: none;\n}\n.submit-arc .waiting-dot {\n display: inline-block;\n width: 8px; height: 8px; border-radius: 50%;\n background: var(--color-accent-secondary);\n box-shadow: 0 0 8px rgba(0, 245, 255, 0.5);\n animation: arc-wait-pulse 1.2s ease-in-out infinite;\n}\n@keyframes arc-wait-pulse { 0%, 100% { opacity: 0.4; } 50% { opacity: 1; } }\n@media (prefers-reduced-motion: reduce) {\n .submit-arc .waiting-dot { animation: none; }\n}\n\n/* Steal full-width button */\n.steal-btn-full {\n margin: 0 var(--space-md) var(--space-md);\n background: rgba(0, 245, 255, 0.08);\n border: 2px solid var(--color-accent-secondary);\n color: var(--color-accent-secondary);\n border-radius: var(--radius-lg);\n padding: 14px;\n font-family: var(--font-display);\n font-weight: 800;\n font-size: 15px;\n letter-spacing: 0.06em;\n text-transform: uppercase;\n box-shadow: 0 0 16px rgba(0, 245, 255, 0.3), 0 4px 0 rgba(0, 0, 0, 0.3);\n display: flex; align-items: center; justify-content: center; gap: 8px;\n cursor: pointer;\n transition: transform var(--transition-fast);\n}\n.steal-btn-full.hidden { display: none; }\n.steal-btn-full:active { transform: translateY(2px); box-shadow: 0 0 16px rgba(0, 245, 255, 0.3), 0 2px 0 rgba(0, 0, 0, 0.3); }\n.steal-btn-full .steal-btn-icon { font-size: 18px; }\n\n/* #1665: Sabotage power-up \u2014 twin of the steal button, red-tinted. The flex row\n keeps a lone button full-width and puts them side-by-side when both are up. */\n.powerup-btn-row {\n display: flex;\n gap: var(--space-md);\n margin: 0 var(--space-md) var(--space-md);\n}\n.powerup-btn-row .steal-btn-full,\n.powerup-btn-row .sabotage-btn-full {\n flex: 1;\n margin: 0;\n}\n.sabotage-btn-full {\n background: rgba(255, 45, 85, 0.08);\n border: 2px solid var(--color-danger, #ff2d55);\n color: var(--color-danger, #ff2d55);\n border-radius: var(--radius-lg);\n padding: 14px;\n font-family: var(--font-display);\n font-weight: 800;\n font-size: 15px;\n letter-spacing: 0.06em;\n text-transform: uppercase;\n box-shadow: 0 0 16px rgba(255, 45, 85, 0.3), 0 4px 0 rgba(0, 0, 0, 0.3);\n display: flex; align-items: center; justify-content: center; gap: 8px;\n cursor: pointer;\n transition: transform var(--transition-fast);\n}\n.sabotage-btn-full.hidden { display: none; }\n.sabotage-btn-full:active { transform: translateY(2px); box-shadow: 0 0 16px rgba(255, 45, 85, 0.3), 0 2px 0 rgba(0, 0, 0, 0.3); }\n.sabotage-btn-full .sabotage-btn-icon { font-size: 18px; }\n/* #1665: sabotage arc-chip + leaderboard badge + toasts + effect locks */\n.arc-chip--sabotage {\n color: var(--color-danger, #ff2d55);\n background: rgba(255, 45, 85, 0.08);\n border: 1px solid rgba(255, 45, 85, 0.4);\n}\n.player-badge--sabotage {\n top: -2px;\n left: 2px;\n background: linear-gradient(135deg, #ff2d55, #c1121f);\n}\n.sabotage-confirmation {\n background: linear-gradient(135deg, #ff2d55, #c1121f);\n box-shadow: 0 4px 20px rgba(255, 45, 85, 0.5);\n}\n.sabotaged-banner {\n background: linear-gradient(135deg, #ff2d55, #7c1020);\n box-shadow: 0 4px 20px rgba(255, 45, 85, 0.6);\n}\n.bet-arc--forced { opacity: 0.85; cursor: not-allowed; }\n.submit-arc--frozen { opacity: 0.6; filter: grayscale(0.4); }\n\n/* Submission strip (dots + count) */\n.arc-submission-strip {\n display: flex; align-items: center; justify-content: center; gap: 8px;\n padding: 8px var(--space-md) 12px;\n font-family: var(--font-body);\n font-size: 11px;\n color: var(--color-text-dim);\n font-weight: 600;\n}\n.arc-submission-dots {\n display: flex; align-items: center; gap: 6px;\n}\n.arc-submission-dots .player-indicator {\n /* existing class from renderSubmissionTracker \u2014 override to a small dot.\n The renderer emits a nested .player-avatar + .player-initials + .player-name\n + badges; we collapse ALL children to make the parent itself the dot. */\n width: 12px; height: 12px;\n min-width: 12px;\n padding: 0;\n background: rgba(255, 255, 255, 0.18);\n border: 0;\n border-radius: 50%;\n font-size: 0;\n color: transparent;\n transition: all var(--transition-normal);\n flex: 0 0 auto;\n overflow: hidden;\n display: block;\n}\n/* Collapse every child element \u2014 avatars, initials, names, badges \u2014 so the\n parent behaves as a solid dot. Without this the legacy .player-avatar\n width/height (~40px) leaks through. */\n.arc-submission-dots .player-indicator > * { display: none !important; }\n.arc-submission-dots .player-indicator.is-submitted {\n background: var(--color-success-neon);\n box-shadow: 0 0 6px rgba(57, 255, 20, 0.5);\n}\n.arc-submission-dots .player-indicator.is-current-player,\n.arc-submission-dots .player-indicator.is-current {\n background: var(--color-accent-secondary);\n box-shadow: 0 0 6px rgba(0, 245, 255, 0.5);\n}\n.arc-submission-dots .player-indicator.is-current-player.is-submitted {\n background: var(--color-success-neon);\n box-shadow: 0 0 8px rgba(57, 255, 20, 0.7);\n}\n.arc-submission-count { color: var(--color-text-dim); font-weight: 600; }\n\n/* Legacy \"Submitted!\" stamp \u2014 hidden in arcade but kept for any residual path */\n.submitted-confirmation.hidden { display: none; }\n\n/* Closest-wins ephemeral splash (rc30 parity) */\n.closest-wins-splash {\n position: fixed; inset: 0;\n z-index: 50;\n display: flex; align-items: center; justify-content: center;\n background: rgba(10, 10, 18, 0.7);\n backdrop-filter: blur(4px);\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 40px;\n color: var(--color-success-neon);\n letter-spacing: 0.08em;\n gap: 12px;\n pointer-events: none;\n text-shadow: 0 0 32px rgba(57, 255, 20, 0.55);\n animation: closest-wins-splash-in 1.6s ease-out both;\n}\n.closest-wins-splash.hidden { display: none; }\n@keyframes closest-wins-splash-in {\n 0% { opacity: 0; transform: scale(0.8); }\n 20% { opacity: 1; transform: scale(1); }\n 80% { opacity: 1; transform: scale(1); }\n 100% { opacity: 0; transform: scale(1.05); }\n}\n\n/* sr-only helper (if not already in the stylesheet) */\n#round-indicator.sr-only {\n position: absolute;\n width: 1px; height: 1px; padding: 0; margin: -1px;\n overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0;\n}\n\n/* ============================================\n #1076: Compact game-view layout for mobile.\n On 360-411 CSS-px phones the artist/movie challenge tiles\n and Submit button were rendering below the fold, so every\n round players had to scroll before they could vote. Scoped\n to body:has(#game-view:not(.hidden)) so it only fires while\n game-view is the active screen \u2014 lobby/reveal/end keep the\n original spacing. :has() degrades gracefully: browsers that\n don't support it fall back to the looser pre-fix layout.\n ============================================ */\nbody:has(#game-view:not(.hidden)) .player-header { display: none; }\nbody:has(#game-view:not(.hidden)) .player-container {\n padding-top: max(var(--space-xs), env(safe-area-inset-top));\n}\nbody:has(#game-view:not(.hidden)) .arc-header {\n margin-bottom: var(--space-sm);\n}\nbody:has(#game-view:not(.hidden)) .year-xxl {\n font-size: clamp(72px, 26vw, 104px);\n margin: 2px 0 var(--space-sm);\n}\nbody:has(#game-view:not(.hidden)) .slider-arcade-wrap {\n margin-bottom: var(--space-sm);\n}\nbody:has(#game-view:not(.hidden)) .arc-tiles {\n padding: 10px 12px;\n margin: 0 var(--space-md) var(--space-sm);\n}\nbody:has(#game-view:not(.hidden)) .arc-tiles-header {\n margin-bottom: 6px;\n}\nbody:has(#game-view:not(.hidden)) .arc-tiles-grid { gap: 8px; }\nbody:has(#game-view:not(.hidden)) .arc-tiles-grid .artist-option-btn,\nbody:has(#game-view:not(.hidden)) .arc-tiles-grid .movie-option-btn {\n min-height: 52px;\n padding: 12px 10px;\n}\nbody:has(#game-view:not(.hidden)) .arc-actions {\n margin-bottom: var(--space-sm);\n}\nbody:has(#game-view:not(.hidden)) .bonus-filler {\n padding: var(--space-sm) var(--space-md);\n margin: 0 var(--space-md) var(--space-sm);\n}\n\n/* ============================================\n End-of-Game Podium v2 \u2014 Hero Winner (rc31)\n Scoped under body.theme-dark so player.html end-view\n is restyled from a 3-column stands layout into a\n poster-style hero for #1 + compact chips for #2/#3.\n DOM (player.html #494-522) is unchanged \u2014 existing\n IDs (podium-{N}-name / -score) keep their JS bindings.\n ============================================ */\n\nbody.theme-dark .podium {\n display: grid;\n grid-template-columns: 1fr 1fr;\n grid-template-areas:\n \"hero hero\"\n \"second third\";\n gap: var(--space-md);\n align-items: stretch;\n justify-content: stretch;\n margin-bottom: var(--space-xl);\n padding: 0 var(--space-xs);\n}\n\n/* Winner hero \u2014 full-width poster, gradient wordmark name */\nbody.theme-dark .podium-place.podium-1 {\n grid-area: hero;\n width: 100%;\n padding: var(--space-lg) var(--space-md) var(--space-md);\n background: linear-gradient(135deg, rgba(255, 45, 106, 0.14), rgba(0, 245, 255, 0.06));\n border: 1px solid rgba(255, 45, 106, 0.35);\n border-radius: var(--radius-xl);\n box-shadow: 0 0 40px rgba(255, 45, 106, 0.18);\n text-align: center;\n justify-content: center;\n}\n\nbody.theme-dark .podium-place.podium-1 .podium-medal {\n font-size: 38px;\n margin-bottom: var(--space-xs);\n filter: drop-shadow(0 0 16px rgba(255, 45, 106, 0.6));\n}\n\nbody.theme-dark .podium-place.podium-1 .podium-name {\n font-family: 'Outfit', sans-serif;\n font-weight: 900;\n line-height: 0.92;\n letter-spacing: -0.04em;\n margin: 0 0 var(--space-sm);\n max-width: 100%;\n white-space: normal;\n word-break: break-word;\n overflow: visible;\n text-overflow: clip;\n background: linear-gradient(90deg, var(--color-accent-primary), var(--color-accent-secondary));\n -webkit-background-clip: text;\n background-clip: text;\n color: transparent;\n filter: drop-shadow(0 0 24px rgba(255, 45, 106, 0.3));\n font-size: clamp(40px, 14vw, 64px);\n}\n\nbody.theme-dark .podium-place.podium-1 .podium-score {\n font-family: 'Inter', sans-serif;\n font-weight: 700;\n font-size: var(--font-size-3xl);\n color: var(--color-accent-secondary);\n font-variant-numeric: tabular-nums;\n text-shadow: 0 0 14px rgba(0, 245, 255, 0.5);\n margin-bottom: 0;\n}\n\nbody.theme-dark .podium-place.podium-1 .podium-stand {\n display: none;\n}\n\n/* Runners-up chips \u2014 2nd + 3rd share the bottom row */\nbody.theme-dark .podium-place.podium-2,\nbody.theme-dark .podium-place.podium-3 {\n width: 100%;\n min-width: 0;\n padding: var(--space-md) var(--space-sm);\n background: var(--color-dark-surface);\n border: 1px solid var(--color-border-neon);\n border-radius: var(--radius-lg);\n display: grid;\n /* minmax(0, 1fr) lets the name column shrink below its intrinsic width\n so short chip columns can ellipsis gracefully without forcing \"No\u2026\". */\n grid-template-columns: auto minmax(0, 1fr) auto;\n grid-template-rows: auto;\n align-items: center;\n gap: var(--space-sm);\n text-align: left;\n}\n\nbody.theme-dark .podium-place.podium-2 {\n grid-area: second;\n border-color: rgba(0, 245, 255, 0.28);\n box-shadow: 0 0 18px rgba(0, 245, 255, 0.1);\n}\n\nbody.theme-dark .podium-place.podium-3 {\n grid-area: third;\n}\n\nbody.theme-dark .podium-place.podium-2 .podium-medal,\nbody.theme-dark .podium-place.podium-3 .podium-medal {\n font-size: 22px;\n margin: 0;\n line-height: 1;\n}\n\nbody.theme-dark .podium-place.podium-2 .podium-name,\nbody.theme-dark .podium-place.podium-3 .podium-name {\n font-family: 'Outfit', sans-serif;\n font-weight: 800;\n font-size: var(--font-size-lg);\n color: var(--color-text-white);\n margin: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\nbody.theme-dark .podium-place.podium-2 .podium-score,\nbody.theme-dark .podium-place.podium-3 .podium-score {\n font-family: 'Outfit', sans-serif;\n font-weight: 900;\n font-size: var(--font-size-lg);\n color: var(--color-accent-secondary);\n font-variant-numeric: tabular-nums;\n text-shadow: 0 0 8px rgba(0, 245, 255, 0.3);\n margin: 0;\n white-space: nowrap;\n}\n\nbody.theme-dark .podium-place.podium-2 .podium-stand,\nbody.theme-dark .podium-place.podium-3 .podium-stand {\n display: none;\n}\n\n/* Graceful collapse for 1/2-player games (JS toggles .hidden on empty slots).\n If #2 is hidden but #3 isn't, promote #3 to the 'second' slot so it\n doesn't look orphaned on the right. */\nbody.theme-dark .podium-place.podium-2.hidden ~ .podium-place.podium-3:not(.hidden) {\n grid-area: second;\n}\n\n/* \"Your Result\" card \u2014 celebratory pink-leaning treatment, larger rank. */\nbody.theme-dark .your-result {\n background: linear-gradient(135deg, rgba(255, 45, 106, 0.10), rgba(0, 245, 255, 0.04));\n border: 1px solid rgba(255, 45, 106, 0.28);\n box-shadow: 0 0 28px rgba(255, 45, 106, 0.12);\n}\n\nbody.theme-dark .your-result-rank {\n font-family: 'Outfit', sans-serif;\n font-weight: 900;\n font-size: var(--font-size-4xl);\n letter-spacing: -0.03em;\n}\n\nbody.theme-dark .your-result-stats .stat-value {\n font-family: 'Outfit', sans-serif;\n font-weight: 800;\n}\n\n/* =====================================================================\n Playlist Hub (v3.3) \u2014 .plh-* namespace\n Replaces wizard step 3 playlist picker. Mobile-first 390px target.\n All tokens inherited from :root design system.\n ===================================================================== */\n\n.plh-root {\n display: flex;\n flex-direction: column;\n min-height: 100%;\n height: 100%;\n background: var(--color-bg-primary);\n color: var(--color-text-white);\n font-family: var(--font-body);\n font-variant-numeric: tabular-nums;\n position: relative;\n isolation: isolate;\n overflow: hidden;\n}\n\n.plh-root::before {\n content: '';\n position: absolute;\n inset: 0;\n z-index: 0;\n pointer-events: none;\n background:\n radial-gradient(ellipse 70% 25% at 50% 0%, rgba(255, 45, 106, 0.12), transparent 60%),\n radial-gradient(ellipse 60% 30% at 30% 60%, rgba(0, 245, 255, 0.06), transparent 60%);\n}\n\n.plh-header {\n position: sticky;\n top: 0;\n z-index: 5;\n background: rgba(10, 10, 18, 0.82);\n backdrop-filter: blur(14px);\n -webkit-backdrop-filter: blur(14px);\n /* #821: tightened from 12px 18px 10px \u2192 8px 14px 6px so the playlist\n cards below get more vertical room above the fold. The header still\n has its blurred backdrop + bottom border for visual separation. */\n padding: 8px 14px 6px;\n border-bottom: 1px solid rgba(255, 255, 255, 0.04);\n}\n\n.plh-titlebar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n /* #821: was 10px \u2014 tightened so chrome compresses and cards get more\n breathing room. */\n margin-bottom: 6px;\n}\n\n.plh-wordmark {\n font-family: var(--font-display);\n font-weight: 900;\n /* #821: was 24px \u2014 small reduction shifts visual focus to the cards\n below without losing branding presence. */\n font-size: 20px;\n letter-spacing: -0.02em;\n line-height: 1;\n background: linear-gradient(90deg, var(--color-accent-primary) 0%, var(--color-accent-secondary) 100%);\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n background-clip: text;\n}\n\n.plh-search {\n position: relative;\n margin-bottom: 10px;\n}\n\n.plh-search input {\n width: 100%;\n height: 40px;\n padding: 0 38px 0 40px;\n background: var(--color-bg-surface);\n border: 1px solid var(--color-border-neon);\n border-radius: 10px;\n color: var(--color-text-white);\n font-family: var(--font-body);\n font-weight: 500;\n font-size: 13px;\n outline: none;\n transition: border-color 0.15s, box-shadow 0.15s;\n}\n\n.plh-search input:focus {\n border-color: var(--color-accent-secondary);\n box-shadow: 0 0 0 3px rgba(0, 245, 255, 0.15);\n}\n\n.plh-search input::placeholder {\n color: var(--color-text-neon-muted);\n opacity: 0.6;\n}\n\n.plh-search-icon {\n position: absolute;\n left: 12px;\n top: 50%;\n transform: translateY(-50%);\n color: var(--color-accent-secondary);\n opacity: 0.75;\n}\n\n.plh-search-clear {\n position: absolute;\n right: 8px;\n top: 50%;\n transform: translateY(-50%);\n width: 24px;\n height: 24px;\n border-radius: 50%;\n background: var(--color-dark-surface-hover);\n border: none;\n color: var(--color-text-neon-muted);\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 13px;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.plh-segmented {\n display: grid;\n grid-template-columns: 1fr 1fr 1fr;\n gap: 4px;\n padding: 4px;\n background: var(--color-bg-surface);\n border: 1px solid var(--color-border-neon);\n border-radius: 10px;\n margin-bottom: 10px;\n}\n\n.plh-seg {\n background: transparent;\n border: none;\n padding: 8px 4px;\n cursor: pointer;\n border-radius: 7px;\n display: flex;\n flex-direction: column;\n gap: 1px;\n align-items: center;\n line-height: 1.1;\n font-family: var(--font-body);\n font-weight: 700;\n font-size: 12px;\n color: var(--color-text-neon-muted);\n letter-spacing: 0.04em;\n transition: background 0.15s, color 0.15s;\n}\n\n.plh-seg .plh-seg-num {\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 15px;\n color: var(--color-text-neon-muted);\n}\n\n.plh-seg .plh-seg-label {\n font-size: 11px;\n letter-spacing: 0.1em;\n text-transform: uppercase;\n}\n\n.plh-seg.active {\n background: linear-gradient(135deg, rgba(255, 45, 106, 0.22), rgba(0, 245, 255, 0.14));\n color: var(--color-text-white);\n box-shadow: inset 0 0 0 1px rgba(255, 45, 106, 0.35), 0 0 18px rgba(255, 45, 106, 0.18);\n}\n\n.plh-seg.active .plh-seg-num { color: var(--color-accent-primary); }\n\n.plh-seg-community.active {\n background: linear-gradient(135deg, rgba(157, 78, 221, 0.25), rgba(255, 45, 106, 0.15));\n box-shadow: inset 0 0 0 1px rgba(157, 78, 221, 0.45), 0 0 18px rgba(157, 78, 221, 0.22);\n}\n\n.plh-seg-community.active .plh-seg-num { color: #c89af5; }\n\n.plh-seg-mine.active {\n background: linear-gradient(135deg, rgba(0, 245, 255, 0.18), rgba(255, 45, 106, 0.1));\n box-shadow: inset 0 0 0 1px rgba(0, 245, 255, 0.4), 0 0 18px rgba(0, 245, 255, 0.18);\n}\n\n.plh-seg-mine.active .plh-seg-num { color: var(--color-accent-secondary); }\n\n.plh-chips {\n display: flex;\n gap: 7px;\n overflow-x: auto;\n padding: 0 0 6px;\n scrollbar-width: none;\n}\n\n.plh-chips::-webkit-scrollbar { display: none; }\n\n.plh-chip {\n flex-shrink: 0;\n padding: 7px 13px;\n background: var(--color-bg-surface);\n border: 1px solid var(--color-border-neon);\n border-radius: 999px;\n font-family: var(--font-body);\n font-weight: 600;\n font-size: 12px;\n color: var(--color-text-neon-muted);\n white-space: nowrap;\n cursor: pointer;\n letter-spacing: 0.01em;\n transition: background 0.15s, color 0.15s, border-color 0.15s;\n}\n\n.plh-chip.active {\n background: var(--color-accent-primary);\n color: var(--color-text-white);\n border-color: transparent;\n font-weight: 700;\n box-shadow: 0 0 16px rgba(255, 45, 106, 0.45);\n}\n\n/* #1569 follow-up: the Playlists/Mix tab-panel wrappers must fill the hub's\n remaining height (under the sticky tab strip) so their inner .plh-body can\n scroll. Without this they size to content and overflow .plh-root\n (height:100%; overflow:hidden), clipping everything below the fold. */\n.plh-list-view,\n.plh-mix-view {\n flex: 1 1 0;\n min-height: 0;\n display: flex;\n flex-direction: column;\n}\n\n.plh-body {\n position: relative;\n z-index: 1;\n flex: 1;\n overflow-y: auto;\n padding: 14px 0 110px;\n}\n\n.plh-loading {\n padding: 40px 20px;\n text-align: center;\n font-family: var(--font-body);\n font-weight: 500;\n font-size: 13px;\n color: var(--color-text-neon-muted);\n}\n\n/* Section dividers \u2014 group related shelves under a prominent header.\n Currently used by the \"\uD83C\uDF0D By Country\" block in the Community tab so\n the per-language shelves read as one organized section instead of\n a scattered list. */\n.plh-section-head {\n display: flex;\n align-items: baseline;\n justify-content: space-between;\n gap: 12px;\n padding: 8px 18px 12px;\n margin: 4px 0 8px;\n border-bottom: 1px solid rgba(0, 245, 255, 0.12);\n}\n\n.plh-section-head-title {\n display: flex;\n align-items: center;\n gap: 10px;\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 22px;\n letter-spacing: -0.02em;\n color: var(--color-text-white);\n line-height: 1;\n}\n\n.plh-section-head-emoji {\n font-size: 22px;\n filter: drop-shadow(0 0 12px rgba(0, 245, 255, 0.3));\n}\n\n.plh-section-head-meta {\n font-family: var(--font-body);\n font-weight: 600;\n font-size: 10px;\n letter-spacing: 0.16em;\n text-transform: uppercase;\n color: var(--color-text-neon-muted);\n flex-shrink: 0;\n}\n\n/* Shelves */\n\n.plh-shelf {\n margin-bottom: 22px;\n}\n\n.plh-shelf-head {\n display: flex;\n align-items: baseline;\n justify-content: space-between;\n padding: 0 18px 10px;\n}\n\n.plh-shelf-title {\n font-family: var(--font-display);\n font-weight: 800;\n font-size: 18px;\n letter-spacing: -0.01em;\n color: var(--color-text-white);\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.plh-shelf-see {\n font-family: var(--font-body);\n font-weight: 600;\n font-size: 12px;\n color: var(--color-accent-secondary);\n letter-spacing: 0.02em;\n cursor: pointer;\n background: transparent;\n border: none;\n padding: 0;\n}\n\n.plh-local-dot {\n display: inline-block;\n width: 7px;\n height: 7px;\n border-radius: 50%;\n background: var(--color-success-neon);\n box-shadow: 0 0 8px var(--color-success-neon);\n margin-right: 8px;\n vertical-align: middle;\n}\n\n.plh-local-badge {\n font-family: var(--font-body);\n font-weight: 700;\n font-size: 9px;\n letter-spacing: 0.14em;\n text-transform: uppercase;\n color: var(--color-success-neon);\n padding: 2px 7px;\n background: rgba(57, 255, 20, 0.12);\n border: 1px solid rgba(57, 255, 20, 0.4);\n border-radius: 999px;\n margin-left: 8px;\n vertical-align: middle;\n}\n\n/* Cards (horizontal scroll shelf) */\n\n.plh-cards {\n display: flex;\n gap: 12px;\n overflow-x: auto;\n padding: 0 18px 4px;\n scrollbar-width: none;\n}\n\n.plh-cards::-webkit-scrollbar { display: none; }\n\n.plh-card {\n flex-shrink: 0;\n /* #821: bumped from 136px \u2192 160px (~17% bigger area). Makes the\n playlist cards the visual centerpiece of the hub instead of feeling\n small relative to the surrounding chrome (header, search, stats,\n chips, action bar). Stays under 50% viewport width on the smallest\n phones (e.g. 375px) so two cards still fit side-by-side. */\n width: 160px;\n cursor: pointer;\n position: relative;\n background: transparent;\n border: none;\n padding: 0;\n text-align: left;\n color: inherit;\n font: inherit;\n}\n\n.plh-card .plh-cover {\n /* #821: matched to .plh-card width; keeps the 1:1 aspect ratio. */\n width: 160px;\n height: 160px;\n border-radius: 12px;\n position: relative;\n overflow: hidden;\n box-shadow: 0 10px 24px rgba(0, 0, 0, 0.5);\n isolation: isolate;\n display: flex;\n flex-direction: column;\n justify-content: flex-end;\n padding: 10px;\n}\n\n.plh-card .plh-cover::after {\n content: '';\n position: absolute;\n inset: 0;\n background: linear-gradient(180deg, transparent 55%, rgba(0, 0, 0, 0.45) 100%);\n pointer-events: none;\n z-index: 1;\n}\n\n.plh-cover-inner {\n position: relative;\n z-index: 2;\n display: flex;\n flex-direction: column;\n justify-content: flex-end;\n height: 100%;\n}\n\n.plh-cover-glyph {\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 42px;\n line-height: 0.9;\n letter-spacing: -0.04em;\n color: #fff;\n text-shadow: 0 2px 8px rgba(0, 0, 0, 0.4);\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n/* When the glyph falls back to word-initials (e.g. \"GMS\") or a longer\n abbreviation, scale it down so it doesn't crowd the sub-title. */\n.plh-cover-glyph-long { font-size: 26px; letter-spacing: -0.02em; }\n\n.plh-cover-sub {\n font-family: var(--font-display);\n font-weight: 700;\n font-size: 12px;\n letter-spacing: 0.04em;\n text-transform: uppercase;\n color: rgba(255, 255, 255, 0.92);\n margin-top: 4px;\n line-height: 1.15;\n /* Two-line clamp so \"Top 100 Dutch Classics\" fits cleanly instead of\n showing \"Top 100 Dutch Classi\u2026\". */\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n overflow-wrap: break-word;\n word-break: break-word;\n max-width: 100%;\n}\n\n.plh-cover-badge {\n position: absolute;\n top: 8px;\n right: 8px;\n padding: 3px 8px;\n background: rgba(0, 0, 0, 0.5);\n backdrop-filter: blur(6px);\n border-radius: 999px;\n font-family: var(--font-body);\n font-weight: 700;\n font-size: 9px;\n letter-spacing: 0.14em;\n text-transform: uppercase;\n color: var(--color-text-white);\n z-index: 3;\n}\n\n.plh-cover-badge-purple {\n background: rgba(157, 78, 221, 0.5);\n}\n\n.plh-card-meta { padding: 8px 2px 0; }\n\n.plh-card-name {\n font-family: var(--font-body);\n font-weight: 700;\n font-size: 13px;\n line-height: 1.25;\n color: var(--color-text-white);\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n\n.plh-card-sub {\n font-family: var(--font-body);\n font-weight: 500;\n font-size: 11px;\n color: var(--color-text-neon-muted);\n margin-top: 2px;\n letter-spacing: 0.02em;\n}\n\n.plh-card-sub b { color: var(--color-accent-secondary); font-weight: 700; }\n\n.plh-card-local {\n font-family: var(--font-body);\n font-weight: 500;\n font-size: 11px;\n color: var(--color-success-neon);\n margin-top: 2px;\n letter-spacing: 0.02em;\n}\n\n.plh-card-local b { color: var(--color-success-neon); font-weight: 800; }\n\n.plh-card-local-when { color: var(--color-text-neon-muted); }\n.plh-card-local-when b { color: var(--color-accent-secondary); }\n\n/* rc3: replaces the faint corner circle (.plh-check) with a labeled pill.\n Unselected = pink \"+ Add\", selected = neon-green \"\u2713 Added\". Sits on the\n top-LEFT so it doesn't collide with cover-badge (which lives top-right on\n featured / community / recently-added cards). */\n.plh-pill {\n position: absolute;\n top: 8px;\n left: 8px;\n z-index: 4;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 5px 10px 5px 8px;\n border-radius: 999px;\n background: rgba(255, 45, 106, 0.92);\n color: var(--color-text-white);\n font-family: var(--font-display);\n font-weight: 800;\n font-size: 10px;\n letter-spacing: 0.12em;\n text-transform: uppercase;\n cursor: pointer;\n border: 1px solid rgba(255, 255, 255, 0.12);\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4), 0 0 14px rgba(255, 45, 106, 0.35);\n backdrop-filter: blur(6px);\n -webkit-backdrop-filter: blur(6px);\n transition: background 0.15s, color 0.15s, box-shadow 0.15s, filter 0.15s;\n}\n\n.plh-pill:hover { filter: brightness(1.1); }\n\n.plh-pill-label { line-height: 1; }\n\n.plh-card-selected .plh-pill {\n background: var(--color-success-neon);\n color: var(--color-bg-primary);\n border-color: transparent;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4), 0 0 18px rgba(57, 255, 20, 0.55);\n}\n\n.plh-card-selected .plh-cover {\n box-shadow: 0 0 0 3px var(--color-success-neon), 0 10px 24px rgba(0, 0, 0, 0.5);\n}\n\n/* Legacy rc1/rc2 corner circle \u2014 kept as a no-op guard in case any stale\n cached markup survives the CACHE_VERSION bump. New markup uses .plh-pill. */\n.plh-check { display: none; }\n\n/* Featured shelf \u2014 bigger cards + gradient frame */\n\n.plh-featured .plh-card,\n.plh-featured .plh-card .plh-cover { width: 160px; }\n\n.plh-featured .plh-card .plh-cover {\n height: 200px;\n padding: 2px;\n background: linear-gradient(135deg, var(--color-accent-primary), var(--color-accent-secondary));\n box-shadow: 0 12px 30px rgba(0, 0, 0, 0.6), 0 0 24px rgba(255, 45, 106, 0.25);\n}\n\n.plh-featured .plh-card .plh-cover::after {\n border-radius: 10px;\n margin: 2px;\n inset: 2px;\n}\n\n.plh-featured .plh-cover-inner { padding: 10px; }\n.plh-featured .plh-cover-glyph { font-size: 48px; }\n\n.plh-card-community .plh-cover {\n background: linear-gradient(135deg, #240046 0%, #7209b7 50%, #ff2d6a 100%);\n box-shadow: 0 12px 30px rgba(0, 0, 0, 0.6), 0 0 28px rgba(157, 78, 221, 0.4);\n}\n\n/* Cover gradient tints */\n.plh-tint-pop { background: linear-gradient(135deg, #ff2d6a 0%, #ff6b9d 60%, #ff8c42 100%); }\n.plh-tint-rock { background: linear-gradient(135deg, #c1121f 0%, #ff4d1c 60%, #ff8c42 100%); }\n.plh-tint-hiphop { background: linear-gradient(135deg, #7209b7 0%, #b5179e 60%, #ff2d6a 100%); }\n.plh-tint-jazz { background: linear-gradient(135deg, #b08968 0%, #e6a855 60%, #ffc94a 100%); }\n.plh-tint-metal { background: linear-gradient(135deg, #1a0000 0%, #6a040f 60%, #c1121f 100%); }\n.plh-tint-eu { background: linear-gradient(135deg, #00b4d8 0%, #0077b6 60%, #03045e 100%); }\n.plh-tint-latin { background: linear-gradient(135deg, #ff6600 0%, #ffb703 60%, #fdd85d 100%); }\n.plh-tint-schlager { background: linear-gradient(135deg, #ff8fab 0%, #ffc2d1 60%, #fae0e4 100%); }\n.plh-tint-schlager .plh-cover-glyph,\n.plh-tint-schlager .plh-cover-sub { color: #2a0a1a; text-shadow: none; }\n.plh-tint-soul { background: linear-gradient(135deg, #6a0572 0%, #ab4287 60%, #fcbf49 100%); }\n.plh-tint-purple { background: linear-gradient(135deg, #240046 0%, #7209b7 50%, #ff2d6a 100%); }\n\n/* Community request banner */\n\n.plh-banner {\n margin: 0 18px 18px;\n padding: 14px 16px;\n border-radius: 14px;\n background: linear-gradient(135deg, rgba(157, 78, 221, 0.18), rgba(255, 45, 106, 0.1));\n border: 1px solid rgba(157, 78, 221, 0.35);\n display: flex;\n align-items: center;\n gap: 12px;\n cursor: pointer;\n}\n\n.plh-banner-icon {\n width: 40px;\n height: 40px;\n border-radius: 10px;\n background: linear-gradient(135deg, #7209b7, var(--color-accent-primary));\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 20px;\n flex-shrink: 0;\n box-shadow: 0 0 14px rgba(157, 78, 221, 0.5);\n}\n\n.plh-banner-body { flex: 1; min-width: 0; }\n\n.plh-banner-title {\n font-family: var(--font-display);\n font-weight: 800;\n font-size: 14px;\n color: var(--color-text-white);\n line-height: 1.2;\n}\n\n.plh-banner-sub {\n font-family: var(--font-body);\n font-weight: 500;\n font-size: 11px;\n color: var(--color-text-neon-muted);\n margin-top: 2px;\n line-height: 1.35;\n}\n\n.plh-banner-arrow {\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 22px;\n color: #c89af5;\n}\n\n/* Mine empty + populated */\n\n.plh-mine-empty { padding: 30px 24px; text-align: center; }\n\n.plh-empty-emoji { font-size: 64px; margin-bottom: 12px; filter: drop-shadow(0 0 24px rgba(0, 245, 255, 0.3)); }\n\n.plh-mine-title {\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 26px;\n color: var(--color-text-white);\n margin: 0 0 8px;\n letter-spacing: -0.01em;\n line-height: 1.1;\n}\n\n.plh-mine-body {\n font-family: var(--font-body);\n font-weight: 500;\n font-size: 14px;\n color: var(--color-text-neon-muted);\n margin: 0 0 20px;\n line-height: 1.5;\n}\n\n.plh-mine-body b { color: var(--color-text-white); font-weight: 700; }\n\n.plh-request-cta {\n margin: 0 0 16px;\n padding: 20px;\n background: linear-gradient(135deg, rgba(0, 245, 255, 0.1), rgba(255, 45, 106, 0.06));\n border: 1px solid rgba(0, 245, 255, 0.35);\n border-radius: 16px;\n text-align: left;\n}\n\n.plh-request-head {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 14px;\n}\n\n.plh-request-icon {\n width: 44px;\n height: 44px;\n border-radius: 12px;\n background: linear-gradient(135deg, var(--color-accent-secondary), #0077b6);\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--color-bg-primary);\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 22px;\n box-shadow: 0 0 16px rgba(0, 245, 255, 0.5);\n}\n\n.plh-request-titles { flex: 1; min-width: 0; }\n\n.plh-request-t1 {\n font-family: var(--font-display);\n font-weight: 800;\n font-size: 16px;\n color: var(--color-text-white);\n line-height: 1.2;\n}\n\n.plh-request-t2 {\n font-family: var(--font-body);\n font-weight: 500;\n font-size: 12px;\n color: var(--color-text-neon-muted);\n margin-top: 2px;\n line-height: 1.35;\n}\n\n.plh-meanwhile {\n margin: 12px 0 0;\n padding: 14px 16px;\n background: var(--color-bg-surface);\n border: 1px solid var(--color-border-neon);\n border-radius: 12px;\n display: flex;\n align-items: center;\n gap: 12px;\n cursor: pointer;\n text-align: left;\n}\n\n.plh-meanwhile-icon {\n color: var(--color-accent-secondary);\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 18px;\n flex-shrink: 0;\n}\n\n.plh-meanwhile-body { flex: 1; min-width: 0; }\n\n.plh-meanwhile-t1 {\n font-family: var(--font-display);\n font-weight: 800;\n font-size: 13px;\n color: var(--color-text-white);\n line-height: 1.2;\n}\n\n.plh-meanwhile-t2 {\n font-family: var(--font-body);\n font-weight: 500;\n font-size: 11px;\n color: var(--color-text-neon-muted);\n margin-top: 2px;\n line-height: 1.35;\n}\n\n.plh-meanwhile-arrow {\n color: var(--color-text-neon-muted);\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 20px;\n}\n\n.plh-mine-head { padding: 14px 18px 6px; display: flex; align-items: baseline; justify-content: space-between; }\n\n.plh-mine-count {\n font-family: var(--font-display);\n font-weight: 800;\n font-size: 13px;\n letter-spacing: 0.14em;\n text-transform: uppercase;\n color: var(--color-text-neon-muted);\n}\n\n.plh-mine-count b { color: var(--color-text-white); font-weight: 900; }\n\n.plh-new-request {\n margin: 10px 18px 18px;\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 14px;\n background: linear-gradient(90deg, rgba(0, 245, 255, 0.1), rgba(255, 45, 106, 0.08));\n border: 1px dashed rgba(0, 245, 255, 0.4);\n border-radius: 12px;\n cursor: pointer;\n}\n\n.plh-new-plus {\n width: 36px;\n height: 36px;\n border-radius: 10px;\n background: var(--color-accent-secondary);\n color: var(--color-bg-primary);\n display: flex;\n align-items: center;\n justify-content: center;\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 20px;\n box-shadow: 0 0 16px var(--color-accent-secondary);\n flex-shrink: 0;\n}\n\n.plh-new-t1 {\n font-family: var(--font-display);\n font-weight: 800;\n font-size: 14px;\n color: var(--color-text-white);\n line-height: 1.2;\n}\n\n.plh-new-t2 {\n font-family: var(--font-body);\n font-weight: 500;\n font-size: 11px;\n color: var(--color-text-neon-muted);\n margin-top: 2px;\n}\n\n.plh-req-list {\n padding: 0 18px;\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.plh-req-card {\n padding: 14px 14px 14px 16px;\n background: var(--color-bg-surface);\n border: 1px solid var(--color-border-neon);\n border-radius: 14px;\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.plh-req-card.plh-req-done { border-color: rgba(57, 255, 20, 0.35); background: linear-gradient(90deg, rgba(57, 255, 20, 0.06), transparent 75%); }\n.plh-req-card.plh-req-building { border-color: rgba(0, 245, 255, 0.4); background: linear-gradient(90deg, rgba(0, 245, 255, 0.06), transparent 75%); }\n.plh-req-card.plh-req-declined { border-color: rgba(255, 45, 106, 0.35); }\n\n.plh-req-row1 { display: flex; align-items: flex-start; justify-content: space-between; gap: 10px; }\n\n.plh-req-body { min-width: 0; flex: 1; }\n\n.plh-req-name {\n font-family: var(--font-display);\n font-weight: 800;\n font-size: 15px;\n color: var(--color-text-white);\n line-height: 1.2;\n letter-spacing: -0.01em;\n}\n\n.plh-req-desc {\n font-family: var(--font-body);\n font-weight: 500;\n font-size: 11.5px;\n color: var(--color-text-neon-muted);\n margin-top: 3px;\n line-height: 1.45;\n word-break: break-all;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n\n.plh-req-meta {\n font-family: var(--font-body);\n font-weight: 600;\n font-size: 10px;\n color: var(--color-text-light);\n letter-spacing: 0.06em;\n text-transform: uppercase;\n margin-top: 4px;\n}\n\n.plh-req-meta b { color: var(--color-text-neon-muted); font-weight: 700; }\n\n.plh-req-link {\n color: var(--color-accent-secondary);\n font-weight: 700;\n text-transform: none;\n letter-spacing: 0.02em;\n text-decoration: none;\n}\n\n.plh-status-badge {\n flex-shrink: 0;\n padding: 4px 10px;\n border-radius: 999px;\n font-family: var(--font-display);\n font-weight: 800;\n font-size: 10px;\n letter-spacing: 0.14em;\n text-transform: uppercase;\n display: flex;\n align-items: center;\n gap: 5px;\n}\n\n.plh-sb-dot { width: 6px; height: 6px; border-radius: 50%; background: currentColor; box-shadow: 0 0 6px currentColor; }\n\n.plh-status-badge.pending { background: rgba(245, 158, 11, 0.12); border: 1px solid rgba(245, 158, 11, 0.45); color: var(--color-warning); }\n.plh-status-badge.building { background: rgba(0, 245, 255, 0.12); border: 1px solid rgba(0, 245, 255, 0.45); color: var(--color-accent-secondary); }\n.plh-status-badge.done { background: rgba(57, 255, 20, 0.12); border: 1px solid rgba(57, 255, 20, 0.4); color: var(--color-success-neon); }\n.plh-status-badge.declined { background: rgba(255, 45, 106, 0.12); border: 1px solid rgba(255, 45, 106, 0.4); color: #ff7ca7; }\n\n.plh-progress { display: flex; gap: 3px; align-items: center; }\n\n.plh-seg-pill {\n flex: 1;\n height: 3px;\n border-radius: 2px;\n background: var(--color-border-neon);\n}\n\n.plh-seg-pill.filled-pending { background: var(--color-warning); box-shadow: 0 0 6px var(--color-warning); }\n.plh-seg-pill.filled-building { background: var(--color-accent-secondary); box-shadow: 0 0 6px var(--color-accent-secondary); }\n.plh-seg-pill.filled-done { background: var(--color-success-neon); box-shadow: 0 0 6px var(--color-success-neon); }\n.plh-seg-pill.filled-declined { background: var(--color-accent-primary); box-shadow: 0 0 6px var(--color-accent-primary); }\n\n.plh-steps-row {\n display: flex;\n justify-content: space-between;\n font-family: var(--font-body);\n font-weight: 600;\n font-size: 9px;\n color: var(--color-text-light);\n letter-spacing: 0.1em;\n text-transform: uppercase;\n margin-top: -4px;\n}\n\n.plh-steps-row span.active { color: var(--color-text-white); font-weight: 800; }\n\n/* Empty state layout */\n\n.plh-empty {\n padding: 30px 28px;\n text-align: center;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n}\n\n.plh-empty-icon {\n width: 96px;\n height: 96px;\n border-radius: 26px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--color-bg-surface);\n border: 1px solid var(--color-border-neon);\n font-size: 42px;\n position: relative;\n}\n\n.plh-empty-icon-search { background: radial-gradient(circle, rgba(0, 245, 255, 0.12), var(--color-bg-surface) 60%); }\n\n.plh-empty-title {\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 24px;\n color: var(--color-text-white);\n margin: 0;\n letter-spacing: -0.01em;\n line-height: 1.15;\n}\n\n.plh-empty-body {\n font-family: var(--font-body);\n font-weight: 500;\n font-size: 13px;\n color: var(--color-text-neon-muted);\n margin: 0;\n line-height: 1.55;\n max-width: 280px;\n}\n\n.plh-cyan { color: var(--color-accent-secondary); }\n\n.plh-action-stack {\n display: flex;\n flex-direction: column;\n gap: 8px;\n width: 100%;\n max-width: 280px;\n margin-top: 12px;\n}\n\n/* Buttons */\n\n.plh-btn {\n padding: 13px 16px;\n border-radius: 12px;\n font-family: var(--font-display);\n font-weight: 800;\n font-size: 13px;\n letter-spacing: 0.04em;\n border: 1px solid var(--color-border-neon);\n background: var(--color-bg-surface);\n color: var(--color-text-white);\n cursor: pointer;\n text-align: center;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n text-transform: uppercase;\n transition: all 0.15s;\n font-family: var(--font-display);\n}\n\n.plh-btn:hover { border-color: var(--color-accent-secondary); }\n\n.plh-btn-primary {\n background: linear-gradient(90deg, var(--color-accent-primary), #ff5fa4);\n border-color: transparent;\n color: var(--color-text-white);\n box-shadow: 0 0 24px rgba(255, 45, 106, 0.45);\n}\n\n.plh-btn-primary:hover { border-color: transparent; filter: brightness(1.1); }\n\n.plh-btn-cyan {\n background: linear-gradient(90deg, var(--color-accent-secondary), #0077b6);\n color: var(--color-bg-primary);\n border-color: transparent;\n box-shadow: 0 0 22px rgba(0, 245, 255, 0.45);\n}\n\n.plh-btn-cyan:hover { border-color: transparent; filter: brightness(1.1); }\n\n.plh-btn-neon {\n background: linear-gradient(90deg, var(--color-success-neon), #7bf1ff);\n color: var(--color-bg-primary);\n border-color: transparent;\n box-shadow: 0 0 24px rgba(57, 255, 20, 0.5);\n}\n\n.plh-btn-ghost {\n background: transparent;\n color: var(--color-text-neon-muted);\n}\n\n/* Detail sheet (bottom-sheet modal) */\n\n.plh-sheet-host {\n position: fixed;\n inset: 0;\n z-index: 50;\n pointer-events: none;\n display: none;\n}\n\n.plh-sheet-host.open {\n display: block;\n pointer-events: auto;\n}\n\n.plh-scrim {\n position: absolute;\n inset: 0;\n background: rgba(5, 5, 10, 0.72);\n backdrop-filter: blur(4px);\n -webkit-backdrop-filter: blur(4px);\n}\n\n.plh-sheet {\n position: absolute;\n left: 0;\n right: 0;\n bottom: 0;\n background: linear-gradient(180deg, #14141e 0%, var(--color-bg-primary) 100%);\n border-top-left-radius: 28px;\n border-top-right-radius: 28px;\n box-shadow: 0 -12px 40px rgba(0, 0, 0, 0.6);\n max-height: 80vh;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n border-top: 1px solid rgba(255, 45, 106, 0.25);\n animation: plh-sheet-in 0.25s ease-out;\n}\n\n.plh-sheet-community { border-top-color: rgba(157, 78, 221, 0.4); }\n\n.plh-sheet::before {\n content: '';\n position: absolute;\n top: 10px;\n left: 50%;\n transform: translateX(-50%);\n width: 48px;\n height: 4px;\n border-radius: 999px;\n background: rgba(255, 255, 255, 0.2);\n}\n\n@keyframes plh-sheet-in {\n from { transform: translateY(100%); }\n to { transform: translateY(0); }\n}\n\n.plh-sheet-close {\n position: absolute;\n top: 18px;\n right: 18px;\n width: 32px;\n height: 32px;\n border-radius: 50%;\n background: var(--color-bg-surface);\n border: 1px solid var(--color-border-neon);\n color: var(--color-text-neon-muted);\n cursor: pointer;\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 16px;\n line-height: 1;\n z-index: 5;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.plh-sheet-head { padding: 28px 20px 0; display: flex; gap: 14px; align-items: flex-start; flex-shrink: 0; }\n\n.plh-sheet-cover {\n width: 100px;\n height: 100px;\n border-radius: 14px;\n position: relative;\n overflow: hidden;\n flex-shrink: 0;\n display: flex;\n flex-direction: column;\n justify-content: flex-end;\n padding: 10px;\n box-shadow: 0 12px 30px rgba(0, 0, 0, 0.5);\n}\n\n.plh-sheet-cover-glyph {\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 36px;\n line-height: 0.9;\n letter-spacing: -0.04em;\n color: #fff;\n text-shadow: 0 2px 8px rgba(0, 0, 0, 0.4);\n}\n\n.plh-sheet-cover-sub {\n font-family: var(--font-display);\n font-weight: 700;\n font-size: 11px;\n letter-spacing: 0.06em;\n text-transform: uppercase;\n color: rgba(255, 255, 255, 0.9);\n margin-top: 2px;\n}\n\n.plh-sheet-info { flex: 1; min-width: 0; }\n\n.plh-sheet-title {\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 22px;\n line-height: 1.1;\n letter-spacing: -0.02em;\n color: var(--color-text-white);\n margin: 0;\n}\n\n.plh-sheet-author {\n font-family: var(--font-body);\n font-weight: 500;\n font-size: 12px;\n color: var(--color-text-neon-muted);\n margin-top: 4px;\n}\n\n.plh-sheet-author b { color: var(--color-accent-secondary); font-weight: 700; }\n\n.plh-sheet-stats {\n display: flex;\n gap: 0;\n padding: 18px 20px 16px;\n border-bottom: 1px solid rgba(255, 255, 255, 0.06);\n margin-top: 18px;\n flex-shrink: 0;\n}\n\n.plh-stat { flex: 1; text-align: center; position: relative; }\n\n.plh-stat + .plh-stat::before {\n content: '';\n position: absolute;\n left: 0;\n top: 6px;\n bottom: 6px;\n width: 1px;\n background: var(--color-border-neon);\n}\n\n.plh-stat-val {\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 22px;\n color: var(--color-text-white);\n letter-spacing: -0.02em;\n line-height: 1;\n}\n\n.plh-stat-val-cyan { color: var(--color-accent-secondary); }\n.plh-stat-val-pink { color: var(--color-accent-primary); }\n\n.plh-stat-lbl {\n font-family: var(--font-body);\n font-weight: 700;\n font-size: 9px;\n letter-spacing: 0.16em;\n text-transform: uppercase;\n color: var(--color-text-light);\n margin-top: 4px;\n}\n\n.plh-sheet-scroll {\n flex: 1;\n overflow-y: auto;\n padding: 16px 20px 20px;\n}\n\n.plh-sheet-sec-title {\n font-family: var(--font-display);\n font-weight: 800;\n font-size: 12px;\n letter-spacing: 0.18em;\n text-transform: uppercase;\n color: var(--color-text-neon-muted);\n margin: 0 0 10px;\n}\n\n.plh-sheet-desc {\n font-family: var(--font-body);\n font-weight: 500;\n font-size: 13px;\n color: var(--color-text-neon-muted);\n line-height: 1.55;\n margin-bottom: 16px;\n padding: 14px;\n background: var(--color-bg-surface);\n border: 1px solid var(--color-border-neon);\n border-radius: 12px;\n}\n\n.plh-sheet-tags { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 16px; }\n\n.plh-sheet-tag {\n padding: 5px 10px;\n background: var(--color-bg-surface);\n border: 1px solid var(--color-border-neon);\n border-radius: 6px;\n font-family: var(--font-body);\n font-weight: 600;\n font-size: 11px;\n color: var(--color-text-white);\n letter-spacing: 0.02em;\n}\n\n.plh-sheet-providers { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 16px; }\n\n.plh-sheet-provider {\n padding: 6px 10px;\n background: var(--color-bg-surface);\n border: 1px solid var(--color-border-neon);\n border-radius: 8px;\n font-family: var(--font-body);\n font-weight: 600;\n font-size: 11px;\n color: var(--color-text-neon-muted);\n}\n\n.plh-sheet-provider b { color: var(--color-accent-secondary); font-weight: 800; }\n\n.plh-sheet-foot {\n padding: 14px 20px calc(14px + env(safe-area-inset-bottom, 0px)) 20px;\n background: rgba(10, 10, 18, 0.95);\n border-top: 1px solid var(--color-border-neon);\n display: flex;\n gap: 10px;\n align-items: center;\n flex-shrink: 0;\n}\n\n.plh-sheet-foot .plh-btn { flex: 1; }\n\n/* Bottom CTA bar */\n\n/* #1625: the Mix tab reuses the sticky CTA bar (Back + \"Weiter \u2192\") so the setup\n wizard can advance from a built mix. It renders empty outside the wizard\n (no onContinue) \u2014 collapse it so no bare floating bar shows. */\n.plh-mix-cta:empty {\n display: none;\n}\n\n.plh-cta-bar {\n position: absolute;\n left: 12px;\n right: 12px;\n bottom: 12px;\n display: flex;\n gap: 8px;\n padding: 10px;\n background: rgba(10, 10, 18, 0.88);\n backdrop-filter: blur(20px);\n -webkit-backdrop-filter: blur(20px);\n border: 1px solid var(--color-border-neon);\n border-radius: 16px;\n box-shadow: 0 12px 40px rgba(0, 0, 0, 0.6);\n align-items: center;\n z-index: 10;\n}\n\n/* Request-a-playlist FAB inside the CTA bar. rc1/rc2 used a\n near-transparent fill which made the envelope icon invisible against\n the dark sticky bar. rc3: solid cyan button with a dark icon so the\n affordance reads at a glance. */\n.plh-cta-fab {\n width: 44px;\n height: 44px;\n border-radius: 12px;\n background: linear-gradient(135deg, var(--color-accent-secondary) 0%, #0ea5c4 100%);\n border: none;\n color: var(--color-bg-primary);\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n box-shadow: 0 0 18px rgba(0, 245, 255, 0.45), inset 0 1px 0 rgba(255, 255, 255, 0.25);\n flex-shrink: 0;\n transition: filter 0.15s;\n}\n\n.plh-cta-fab:hover { filter: brightness(1.1); }\n\n/* #1054: pin the FAB SVG stroke to a literal hex white. The earlier\n rc3 fix used var(--color-bg-primary), but some Safari/Webkit versions\n also fail to resolve CSS variables into the SVG `stroke` property,\n not just into inherited `currentColor`. A literal hex value bypasses\n the variable resolver entirely; white on cyan gives max contrast. */\n.plh-cta-fab svg {\n stroke: #ffffff;\n fill: none;\n}\n\n.plh-cta-back {\n flex-shrink: 0;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 0 12px;\n height: 44px;\n border-radius: 12px;\n background: var(--color-bg-surface);\n border: 1px solid var(--color-border-neon);\n color: var(--color-text-white);\n font-family: var(--font-display);\n font-weight: 700;\n font-size: 13px;\n letter-spacing: 0.04em;\n text-transform: uppercase;\n cursor: pointer;\n transition: border-color 0.15s, background 0.15s;\n}\n\n.plh-cta-back:hover { border-color: var(--color-accent-secondary); }\n.plh-cta-back svg { opacity: 0.85; }\n\n.plh-cta-count {\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 14px;\n color: var(--color-success-neon);\n padding: 0 8px;\n letter-spacing: 0.04em;\n text-shadow: 0 0 10px rgba(57, 255, 20, 0.5);\n}\n\n.plh-cta-start {\n flex: 1;\n background: linear-gradient(90deg, var(--color-accent-primary), #ff5fa4);\n border: none;\n border-radius: 12px;\n padding: 12px;\n font-family: var(--font-display);\n font-weight: 700;\n font-size: 14px;\n color: var(--color-text-white);\n cursor: pointer;\n letter-spacing: 0.02em;\n box-shadow: 0 0 24px rgba(255, 45, 106, 0.5);\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n}\n\n/* Legacy count pill \u2014 v3.3.0-rc1 rendered it next to the Continue label.\n rc2 drops it (count already shown in the green pill on the left).\n Kept as a no-op class guard in case any stale cached markup shows up. */\n.plh-cta-start-count { display: none; }\n\n.plh-cta-start-label { font-family: var(--font-display); font-weight: 700; }\n.plh-cta-start-arrow { opacity: 0.9; flex-shrink: 0; }\n.plh-cta-count-empty { opacity: 0.5; }\n\n.plh-cta-count-btn {\n background: transparent;\n border: 1px solid rgba(57, 255, 20, 0.35);\n border-radius: 999px;\n cursor: pointer;\n transition: background 0.15s ease, border-color 0.15s ease, transform 0.1s ease;\n}\n.plh-cta-count-btn:hover,\n.plh-cta-count-btn:focus-visible {\n background: rgba(57, 255, 20, 0.12);\n border-color: rgba(57, 255, 20, 0.6);\n outline: none;\n}\n.plh-cta-count-btn:active { transform: scale(0.96); }\n\n.plh-cta-start-disabled {\n opacity: 0.5;\n cursor: not-allowed;\n box-shadow: none;\n}\n\n/* Selected-playlists sheet (issue #1074) */\n.plh-sheet-selected { border-top-color: rgba(57, 255, 20, 0.35); }\n.plh-selected-head {\n padding: 28px 20px 12px;\n flex-shrink: 0;\n}\n.plh-selected-title {\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 20px;\n color: var(--color-text-white);\n margin: 0 0 4px;\n letter-spacing: 0.01em;\n}\n.plh-selected-subtitle {\n font-size: 13px;\n color: var(--color-text-neon-muted);\n letter-spacing: 0.01em;\n}\n.plh-selected-scroll {\n overflow-y: auto;\n padding: 4px 16px 24px;\n flex: 1;\n min-height: 0;\n}\n.plh-selected-row {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 8px;\n border-bottom: 1px solid rgba(255, 255, 255, 0.06);\n}\n.plh-selected-row:last-child { border-bottom: none; }\n.plh-selected-thumb {\n width: 44px;\n height: 44px;\n border-radius: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n background: rgba(255, 255, 255, 0.06);\n}\n.plh-selected-glyph { font-size: 20px; }\n.plh-selected-meta {\n flex: 1;\n min-width: 0;\n}\n.plh-selected-name {\n font-family: var(--font-display);\n font-weight: 700;\n font-size: 14px;\n color: var(--color-text-white);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.plh-selected-sub {\n font-size: 12px;\n color: var(--color-text-neon-muted);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n margin-top: 2px;\n}\n.plh-selected-sub b { color: var(--color-text-white); font-weight: 700; }\n.plh-selected-remove {\n height: 32px;\n padding: 0 12px;\n border-radius: 16px;\n background: var(--color-bg-surface);\n border: 1px solid rgba(255, 45, 106, 0.35);\n color: #ff5fa4;\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n flex-shrink: 0;\n font-family: var(--font-display);\n font-weight: 700;\n font-size: 12px;\n letter-spacing: 0.04em;\n text-transform: uppercase;\n transition: background 0.15s ease, color 0.15s ease, border-color 0.15s ease, transform 0.1s ease;\n}\n.plh-selected-remove:hover,\n.plh-selected-remove:focus-visible {\n background: rgba(255, 45, 106, 0.18);\n border-color: rgba(255, 45, 106, 0.65);\n color: #ff7ab3;\n outline: none;\n}\n.plh-selected-remove:active { transform: scale(0.94); }\n.plh-selected-remove-label { line-height: 1; }\n.plh-selected-empty {\n text-align: center;\n padding: 36px 20px;\n color: var(--color-text-neon-muted);\n}\n.plh-selected-empty-icon { font-size: 36px; margin-bottom: 8px; }\n.plh-selected-empty-title {\n font-family: var(--font-display);\n font-weight: 700;\n font-size: 14px;\n}\n\n/* Wider viewport: widen cards a touch, keep layout stable */\n\n@media (min-width: 720px) {\n .plh-cards { padding: 0 24px 4px; }\n .plh-header { padding: 16px 24px 12px; }\n .plh-shelf-head { padding: 0 24px 10px; }\n .plh-banner, .plh-new-request { margin-left: 24px; margin-right: 24px; }\n .plh-req-list { padding: 0 24px; }\n .plh-mine-head { padding: 14px 24px 6px; }\n}\n\n/* ------------------------------------------------------------------\n * Playlist Generator (#1052) \u2014 modal that bridges Spotify URL \u2192 LLM\n * prompt \u2192 validated bundled-format JSON. Lives under .plg-* namespace.\n * Built to match the dark playlist-hub look + admin tokens.\n * ------------------------------------------------------------------ */\n.plg-host {\n position: fixed;\n inset: 0;\n z-index: 9000;\n display: flex;\n align-items: flex-start;\n justify-content: center;\n overflow: hidden;\n}\n.plg-scrim {\n position: absolute;\n inset: 0;\n background: rgba(0, 0, 0, 0.72);\n backdrop-filter: blur(6px);\n -webkit-backdrop-filter: blur(6px);\n}\n.plg-modal {\n position: relative;\n z-index: 1;\n margin: 32px 16px;\n max-width: 880px;\n width: 100%;\n background: #0f1116;\n color: #f1f3f7;\n border-radius: 16px;\n border: 1px solid rgba(255, 255, 255, 0.08);\n box-shadow: 0 30px 60px rgba(0, 0, 0, 0.6);\n padding: 24px 24px 20px;\n max-height: calc(100vh - 64px);\n overflow-y: auto;\n font-family: var(--font-body, system-ui);\n}\n.plg-close {\n position: absolute;\n top: 12px;\n right: 12px;\n width: 32px;\n height: 32px;\n border-radius: 50%;\n background: rgba(255, 255, 255, 0.06);\n color: #f1f3f7;\n border: 0;\n font-size: 16px;\n cursor: pointer;\n}\n.plg-close:hover { background: rgba(255, 255, 255, 0.12); }\n.plg-title {\n margin: 0 0 4px;\n font-size: 20px;\n font-family: var(--font-display, system-ui);\n font-weight: 700;\n letter-spacing: 0.02em;\n}\n.plg-sub {\n margin: 0 0 18px;\n color: #d8dce5;\n font-size: 15px;\n line-height: 1.55;\n}\n/* Inline step-by-step guide accordion (#1286) */\n.plg-guide {\n margin: 0 0 18px;\n background: #14171f;\n border: 1px solid rgba(255, 255, 255, 0.08);\n border-radius: 12px;\n overflow: hidden;\n}\n.plg-guide-toggle {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n box-sizing: border-box;\n padding: 12px 14px;\n background: transparent;\n border: 0;\n color: #f1f3f7;\n font: inherit;\n font-size: 14px;\n font-weight: 700;\n letter-spacing: 0.01em;\n cursor: pointer;\n text-align: left;\n}\n.plg-guide-toggle:hover { background: rgba(255, 255, 255, 0.03); }\n.plg-guide-chevron { color: #8a92a3; font-size: 13px; margin-left: 12px; }\n.plg-guide-body {\n padding: 4px 14px 14px;\n border-top: 1px solid rgba(255, 255, 255, 0.06);\n}\n.plg-guide-steps {\n list-style: none;\n margin: 12px 0 14px;\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n.plg-guide-step {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n}\n.plg-guide-num {\n flex: 0 0 auto;\n width: 22px;\n height: 22px;\n border-radius: 50%;\n background: linear-gradient(180deg, #ff3a8c, #cf2e72);\n color: #fff;\n font-size: 12px;\n font-weight: 700;\n display: flex;\n align-items: center;\n justify-content: center;\n margin-top: 1px;\n}\n.plg-guide-text {\n color: #d8dce5;\n font-size: 13.5px;\n line-height: 1.5;\n}\n.plg-guide-text b { color: #f1f3f7; }\n.plg-guide-warn {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n background: rgba(255, 184, 0, 0.08);\n border: 1px solid rgba(255, 184, 0, 0.35);\n border-radius: 10px;\n padding: 10px 12px;\n}\n.plg-guide-warn-icon { flex: 0 0 auto; font-size: 14px; line-height: 1.5; }\n.plg-guide-warn-text {\n color: #f0d9a8;\n font-size: 12.5px;\n line-height: 1.55;\n}\n.plg-guide-warn-text b { color: #ffd66b; }\n.plg-label {\n display: block;\n margin: 14px 0 6px;\n font-size: 11px;\n font-weight: 700;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n color: #8a92a3;\n}\n.plg-input,\n.plg-textarea {\n width: 100%;\n box-sizing: border-box;\n background: #181b24;\n color: #f1f3f7;\n border: 1px solid rgba(255, 255, 255, 0.1);\n border-radius: 10px;\n padding: 10px 12px;\n font: inherit;\n font-size: 14px;\n outline: none;\n}\n.plg-input:focus,\n.plg-textarea:focus { border-color: #5cc8ff; }\n.plg-textarea {\n min-height: 200px;\n font-family: var(--font-mono, ui-monospace, SFMono-Regular, Menlo, monospace);\n font-size: 12.5px;\n line-height: 1.45;\n resize: vertical;\n}\n.plg-row {\n display: flex;\n gap: 10px;\n align-items: center;\n margin: 8px 0 0;\n flex-wrap: wrap;\n}\n.plg-hint {\n color: #8a92a3;\n font-size: 12px;\n}\n.plg-btn {\n appearance: none;\n -webkit-appearance: none;\n cursor: pointer;\n border-radius: 999px;\n padding: 9px 16px;\n font: inherit;\n font-size: 13px;\n font-weight: 600;\n border: 0;\n background: rgba(255, 255, 255, 0.08);\n color: #f1f3f7;\n}\n.plg-btn:disabled { cursor: not-allowed; opacity: 0.45; }\n.plg-btn-primary { background: linear-gradient(180deg, #ff3a8c, #cf2e72); color: #fff; }\n.plg-btn-secondary { background: rgba(255, 255, 255, 0.1); }\n.plg-btn-ghost { background: transparent; color: #aab0bd; }\n.plg-btn-success { background: linear-gradient(180deg, #2dd66f, #20b659); color: #04140a; }\n.plg-btn-disabled { background: rgba(255, 255, 255, 0.04); color: #5a606e; }\n.plg-actions {\n display: flex;\n gap: 10px;\n margin: 16px 0 0;\n flex-wrap: wrap;\n}\n.plg-results {\n margin-top: 16px;\n}\n.plg-verdict {\n padding: 10px 12px;\n border-radius: 10px;\n margin: 6px 0 12px;\n font-weight: 700;\n font-size: 13px;\n}\n.plg-verdict-ok { background: rgba(45, 214, 111, 0.16); color: #2dd66f; border: 1px solid rgba(45, 214, 111, 0.4); }\n.plg-verdict-bad { background: rgba(255, 80, 80, 0.14); color: #ff8a8a; border: 1px solid rgba(255, 80, 80, 0.4); }\n.plg-block {\n background: #14171f;\n border: 1px solid rgba(255, 255, 255, 0.06);\n border-radius: 10px;\n padding: 10px 12px;\n margin: 8px 0;\n}\n.plg-block h4 { margin: 0 0 6px; font-size: 12px; letter-spacing: 0.06em; text-transform: uppercase; color: #aab0bd; }\n.plg-block ul { margin: 0; padding-left: 18px; font-size: 13px; line-height: 1.5; }\n.plg-block-err { border-color: rgba(255, 80, 80, 0.4); }\n.plg-table-wrap { overflow-x: auto; }\n.plg-table { width: 100%; border-collapse: collapse; font-size: 11px; }\n.plg-table th, .plg-table td { padding: 4px 6px; text-align: center; }\n.plg-table th { color: #8a92a3; font-weight: 600; letter-spacing: 0.04em; border-bottom: 1px solid rgba(255, 255, 255, 0.08); }\n.plg-row-idx { color: #aab0bd; text-align: left; font-weight: 700; }\n.plg-cell-ok { color: #2dd66f; }\n.plg-cell-bad { color: #ff8a8a; background: rgba(255, 80, 80, 0.06); }\n.plg-row-bad { background: rgba(255, 80, 80, 0.04); }\n.plg-row-details td { text-align: left; padding-left: 24px; }\n.plg-err-list { color: #ff8a8a; }\n.plg-warn-list { color: #ffd66b; }\n.plg-song-issue { padding: 8px 0; border-top: 1px solid rgba(255, 255, 255, 0.05); }\n.plg-song-issue:first-of-type { border-top: 0; padding-top: 4px; }\n.plg-song-issue-head { font-weight: 700; font-size: 12px; margin: 0 0 4px; color: #f1f3f7; letter-spacing: 0.02em; }\n.plg-song-issue ul { margin: 0; padding-left: 18px; font-size: 13px; line-height: 1.5; }\n.plg-err-item { color: #ff8a8a; }\n.plg-warn-item { color: #ffd66b; }\n.plg-results-actions { margin-top: 0 !important; margin-bottom: 6px; }\n.plg-hint-inline { font-style: italic; }\n.plg-error {\n background: rgba(255, 80, 80, 0.12);\n border: 1px solid rgba(255, 80, 80, 0.4);\n color: #ff8a8a;\n border-radius: 10px;\n padding: 12px;\n font-family: var(--font-mono, ui-monospace, SFMono-Regular, Menlo, monospace);\n font-size: 12px;\n}\n.plg-footer {\n margin-top: 16px;\n border-top: 1px solid rgba(255, 255, 255, 0.06);\n padding-top: 10px;\n color: #8a92a3;\n font-size: 12px;\n line-height: 1.5;\n}\n.plg-followup:empty { display: none; }\n.plg-banner {\n margin-top: 12px;\n padding: 10px 12px;\n border-radius: 10px;\n font-size: 13px;\n line-height: 1.5;\n}\n.plg-banner p { margin: 0 0 8px; }\n.plg-banner .plg-row { margin-top: 4px; flex-wrap: wrap; }\n.plg-banner-ok {\n background: rgba(45, 214, 111, 0.14);\n border: 1px solid rgba(45, 214, 111, 0.4);\n color: #c8f3d8;\n}\n.plg-banner-info {\n background: rgba(99, 102, 241, 0.14);\n border: 1px solid rgba(99, 102, 241, 0.4);\n color: #d6d8ff;\n}\n\n/* ============================================\n Title & Artist reveal (#1180)\n ============================================ */\n/* Crowd Court layout (#1180): truth + own result collapse into a compact\n header so the community voting below becomes the hero of the screen. */\n.ta-reveal-truth {\n display: flex;\n flex-wrap: wrap;\n align-items: baseline;\n justify-content: center;\n gap: 8px;\n font-family: var(--font-display, inherit);\n font-size: var(--font-size-md, 1rem);\n margin-bottom: var(--space-sm, 8px);\n}\n.ta-truth-title { font-weight: 800; }\n.ta-truth-sep { opacity: 0.4; }\n.ta-truth-artist {\n color: var(--color-text-neon-muted, #b3b3c2);\n font-family: var(--font-body, inherit);\n font-weight: 600;\n}\n\n.ta-reveal-own {\n display: flex;\n flex-direction: column;\n gap: 6px;\n padding: 10px 12px;\n background: rgba(255, 255, 255, 0.03);\n border: 1px solid rgba(255, 255, 255, 0.07);\n border-radius: var(--radius-lg, 12px);\n}\n/* Emotional verdict banner above the own-result (#1180). */\n.ta-verdict {\n text-align: center;\n font-family: var(--font-display, inherit);\n font-weight: 900;\n font-size: var(--font-size-lg, 1.125rem);\n letter-spacing: 0.01em;\n padding: 8px 12px;\n margin-bottom: 4px;\n border-radius: var(--radius-md, 8px);\n}\n.ta-verdict--win {\n color: var(--color-success-neon, #39ff14);\n background: rgba(57, 255, 20, 0.14);\n box-shadow: inset 0 0 18px rgba(57, 255, 20, 0.12);\n text-shadow: 0 0 12px rgba(57, 255, 20, 0.5);\n}\n.ta-verdict--partial {\n color: var(--color-accent-secondary, #00f5ff);\n background: rgba(0, 245, 255, 0.1);\n}\n.ta-verdict--pending {\n color: var(--color-accent-secondary, #00f5ff);\n background: rgba(0, 245, 255, 0.07);\n font-weight: 700;\n font-style: italic;\n}\n.ta-verdict--miss {\n color: var(--color-text-neon-muted, #b3b3c2);\n background: rgba(255, 255, 255, 0.05);\n}\n.ta-own-row {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 10px;\n}\n.ta-own-label {\n color: var(--color-text-dim, #6b6b7a);\n font-size: var(--font-size-sm, 0.875rem);\n min-width: 6em;\n}\n.ta-own-guess {\n font-weight: 600;\n flex: 1 1 auto;\n word-break: break-word;\n}\n.ta-own-row--none {\n color: var(--color-text-neon-muted, #b3b3c2);\n font-style: italic;\n}\n.ta-pill {\n font-size: 0.72rem;\n font-weight: 700;\n padding: 2px 10px;\n border-radius: var(--radius-full, 999px);\n white-space: nowrap;\n letter-spacing: 0.02em;\n}\n.ta-pill--exact,\n.ta-pill--fuzzy,\n.ta-pill--near-miss-accepted {\n background: rgba(46, 229, 157, 0.16);\n color: #2ee59d;\n}\n.ta-pill--near-miss {\n background: rgba(255, 180, 0, 0.16);\n color: #ffb400;\n}\n.ta-pill--wrong {\n background: rgba(255, 0, 64, 0.14);\n color: var(--color-error-neon, #ff0040);\n}\n.ta-pill--skipped {\n background: rgba(255, 255, 255, 0.08);\n color: var(--color-text-secondary, #b9b9c6);\n}\n\n/* ---- Crowd Court community voting (#1180) ---- */\n.ta-voting {\n margin-top: var(--space-lg, 24px);\n}\n.ta-voting.hidden { display: none; }\n.ta-voting-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n margin-bottom: var(--space-md, 16px);\n}\n.ta-voting-header > span:not(.ta-voting-countdown) {\n font-family: var(--font-display, inherit);\n font-weight: 900;\n font-size: var(--font-size-sm, 0.875rem);\n letter-spacing: 0.1em;\n text-transform: uppercase;\n color: var(--color-text-white, #fff);\n}\n/* Countdown ring: hollow centre via a radial mask over a draining conic arc. */\n.ta-voting-countdown {\n flex-shrink: 0;\n width: 52px;\n height: 52px;\n border-radius: 50%;\n display: grid;\n place-items: center;\n font-weight: 800;\n font-size: 18px;\n font-variant-numeric: tabular-nums;\n color: var(--color-accent-secondary, #00f5ff);\n background:\n radial-gradient(circle at center, var(--color-bg-primary, #0a0a12) 56%, transparent 57%),\n conic-gradient(var(--color-accent-secondary, #00f5ff) var(--ta-vote-progress, 360deg), rgba(255, 255, 255, 0.1) 0);\n box-shadow: var(--glow-secondary, 0 0 20px rgba(0, 245, 255, 0.5));\n}\n.ta-voting-countdown--closed {\n width: auto;\n height: auto;\n border-radius: var(--radius-full, 999px);\n padding: 4px 12px;\n font-size: var(--font-size-sm, 0.875rem);\n font-weight: 700;\n color: var(--color-text-neon-muted, #b3b3c2);\n background: rgba(255, 255, 255, 0.08);\n box-shadow: none;\n}\n\n.ta-voting-cards {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n.ta-vote-card {\n background: var(--color-bg-surface, rgba(255, 255, 255, 0.05));\n border: 1px solid rgba(255, 255, 255, 0.08);\n border-radius: var(--radius-lg, 12px);\n padding: 14px;\n}\n.ta-vote-card--mine {\n border-color: rgba(255, 45, 106, 0.45);\n box-shadow: inset 0 0 16px rgba(255, 45, 106, 0.07);\n}\n.ta-vote-card-head {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-bottom: 10px;\n}\n.ta-vote-avatar {\n flex-shrink: 0;\n width: 30px;\n height: 30px;\n border-radius: 50%;\n display: grid;\n place-items: center;\n font-family: var(--font-display, inherit);\n font-weight: 800;\n font-size: 13px;\n color: #fff;\n background: linear-gradient(135deg, var(--color-accent-primary, #ff2d6a), var(--color-neon-purple, #9d4edd));\n}\n.ta-vote-who {\n flex: 1;\n font-weight: 700;\n font-size: var(--font-size-md, 1rem);\n word-break: break-word;\n}\n.ta-vote-field {\n flex-shrink: 0;\n font-size: var(--font-size-xs, 0.625rem);\n font-weight: 700;\n letter-spacing: 0.06em;\n text-transform: uppercase;\n color: var(--color-text-dim, #6b6b7a);\n background: rgba(255, 255, 255, 0.06);\n padding: 3px 8px;\n border-radius: var(--radius-full, 999px);\n}\n.ta-vote-guess {\n font-family: var(--font-display, inherit);\n font-weight: 800;\n font-size: var(--font-size-lg, 1.125rem);\n margin: 2px 0 12px;\n word-break: break-word;\n}\n.ta-vote-tally {\n display: flex;\n flex-direction: column;\n gap: 7px;\n margin-bottom: 12px;\n}\n.ta-tally-row {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: var(--font-size-sm, 0.875rem);\n font-weight: 700;\n font-variant-numeric: tabular-nums;\n}\n.ta-tally-yes { color: var(--color-success-neon, #39ff14); min-width: 48px; }\n.ta-tally-no { color: var(--color-error-neon, #ff0040); min-width: 48px; }\n.ta-tally-track {\n flex: 1;\n height: 8px;\n border-radius: var(--radius-full, 999px);\n background: rgba(255, 255, 255, 0.07);\n overflow: hidden;\n}\n.ta-tally-fill {\n display: block;\n height: 100%;\n border-radius: var(--radius-full, 999px);\n transition: width var(--transition-normal, 300ms) ease-out;\n}\n.ta-tally-fill--yes {\n background: var(--color-success-neon, #39ff14);\n box-shadow: 0 0 10px rgba(57, 255, 20, 0.5);\n}\n.ta-tally-fill--no {\n background: var(--color-error-neon, #ff0040);\n box-shadow: 0 0 10px rgba(255, 0, 64, 0.45);\n}\n.ta-vote-actions {\n display: flex;\n gap: 10px;\n}\n.ta-vote-btn {\n position: relative;\n flex: 1;\n height: 48px;\n border: 1px solid rgba(255, 255, 255, 0.12);\n border-radius: var(--radius-lg, 12px);\n background: rgba(255, 255, 255, 0.05);\n font-size: 20px;\n cursor: pointer;\n transition: transform var(--transition-fast, 150ms),\n box-shadow var(--transition-fast, 150ms),\n opacity var(--transition-fast, 150ms),\n background var(--transition-fast, 150ms);\n}\n.ta-vote-btn--yes {\n background: rgba(57, 255, 20, 0.12);\n border-color: rgba(57, 255, 20, 0.4);\n color: var(--color-success-neon, #39ff14);\n}\n.ta-vote-btn--no {\n background: rgba(255, 0, 64, 0.1);\n border-color: rgba(255, 0, 64, 0.38);\n color: var(--color-error-neon, #ff0040);\n}\n/* Voted state: chosen button lights up + \u2713, the other dims but stays\n tappable (the server lets a player change their vote). */\n.ta-vote-btn.is-chosen { transform: translateY(-1px); }\n.ta-vote-btn--yes.is-chosen {\n background: rgba(57, 255, 20, 0.22);\n border-color: rgba(57, 255, 20, 0.6);\n box-shadow: var(--glow-success, 0 0 20px rgba(57, 255, 20, 0.5));\n}\n.ta-vote-btn--no.is-chosen {\n background: rgba(255, 0, 64, 0.2);\n border-color: rgba(255, 0, 64, 0.55);\n box-shadow: var(--glow-error, 0 0 20px rgba(255, 0, 64, 0.5));\n}\n.ta-vote-actions--voted .ta-vote-btn { opacity: 0.34; }\n.ta-vote-actions--voted .ta-vote-btn.is-chosen { opacity: 1; }\n.ta-vote-actions--voted .ta-vote-btn.is-chosen::after {\n content: \"\u2713\";\n position: absolute;\n top: 3px;\n right: 8px;\n font-size: 12px;\n font-weight: 800;\n}\n.ta-vote-btn--yes.is-chosen::after { color: var(--color-success-neon, #39ff14); }\n.ta-vote-btn--no.is-chosen::after { color: var(--color-error-neon, #ff0040); }\n.ta-voted-caption {\n margin-top: 8px;\n text-align: center;\n font-size: var(--font-size-sm, 0.875rem);\n color: var(--color-text-neon-muted, #b3b3c2);\n}\n.ta-vote-own-note {\n text-align: center;\n font-size: var(--font-size-sm, 0.875rem);\n font-style: italic;\n color: var(--color-accent-primary, #ff2d6a);\n opacity: 0.85;\n}\n.ta-override-actions {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 10px;\n padding-top: 10px;\n border-top: 1px solid rgba(255, 255, 255, 0.07);\n}\n.ta-override-label {\n margin-right: auto;\n font-size: var(--font-size-xs, 0.625rem);\n color: var(--color-text-dim, #6b6b7a);\n}\n.ta-override-btn {\n padding: 6px 14px;\n border-radius: var(--radius-md, 8px);\n border: 1px solid rgba(255, 255, 255, 0.14);\n background: rgba(255, 255, 255, 0.05);\n color: var(--color-text-white, #fff);\n font-weight: 700;\n font-size: var(--font-size-sm, 0.875rem);\n cursor: pointer;\n}\n.ta-override-btn--accept.is-chosen {\n border-color: var(--color-success-neon, #39ff14);\n color: var(--color-success-neon, #39ff14);\n}\n.ta-override-btn--reject.is-chosen {\n border-color: var(--color-error-neon, #ff0040);\n color: var(--color-error-neon, #ff0040);\n}\n\n@media (prefers-reduced-motion: reduce) {\n .ta-tally-fill,\n .ta-vote-btn { transition: none; }\n}\n\n/* ---- Resolution moment: \"Close calls \u2014 decided\" (#1180, #1243) ----\n Outcome cards render inside #ta-voting-cards, which already lays out a\n gapped column, so no extra wrapper is needed. */\n.ta-outcome-card {\n display: flex;\n align-items: center;\n gap: 10px;\n background: var(--color-bg-surface, rgba(255, 255, 255, 0.05));\n border: 1px solid rgba(255, 255, 255, 0.08);\n border-radius: var(--radius-lg, 12px);\n padding: 11px 13px;\n}\n.ta-outcome-card--accepted { border-color: rgba(57, 255, 20, 0.3); }\n.ta-outcome-card--rejected { opacity: 0.72; }\n.ta-outcome-avatar {\n flex-shrink: 0;\n width: 28px;\n height: 28px;\n border-radius: 50%;\n display: grid;\n place-items: center;\n font-family: var(--font-display, inherit);\n font-weight: 800;\n font-size: 12px;\n color: #fff;\n background: linear-gradient(135deg, var(--color-accent-primary, #ff2d6a), var(--color-neon-purple, #9d4edd));\n}\n.ta-outcome-main { flex: 1; min-width: 0; }\n.ta-outcome-who {\n font-weight: 700;\n font-size: var(--font-size-base, 0.875rem);\n}\n.ta-outcome-field { color: var(--color-text-dim, #6b6b7a); font-weight: 600; }\n.ta-outcome-guess {\n font-size: var(--font-size-sm, 0.875rem);\n color: var(--color-text-neon-muted, #b3b3c2);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.ta-outcome-tally {\n font-size: var(--font-size-xs, 0.625rem);\n color: var(--color-text-dim, #6b6b7a);\n font-variant-numeric: tabular-nums;\n}\n.ta-outcome-verdict {\n flex-shrink: 0;\n display: inline-flex;\n align-items: center;\n font-family: var(--font-display, inherit);\n font-weight: 800;\n font-size: var(--font-size-base, 0.875rem);\n padding: 5px 11px;\n border-radius: var(--radius-full, 999px);\n font-variant-numeric: tabular-nums;\n}\n.ta-outcome-verdict--accepted {\n background: rgba(57, 255, 20, 0.16);\n color: var(--color-success-neon, #39ff14);\n}\n.ta-outcome-verdict--rejected {\n background: rgba(255, 0, 64, 0.12);\n color: var(--color-error-neon, #ff0040);\n}\n\n/* Title & Artist guessing inputs (#1180) \u2014 primary-round input card.\n Echoes the .arc-tiles bonus card but with the pink (primary) accent, and\n stacks each label above a full-width input so the two fields align cleanly. */\n.ta-input-section {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 12px 14px;\n margin: 0 var(--space-md) var(--space-md);\n background: linear-gradient(180deg, rgba(255, 45, 106, 0.06), rgba(255, 255, 255, 0.02));\n border: 1px solid rgba(255, 45, 106, 0.22);\n border-radius: var(--radius-lg);\n box-shadow: inset 0 0 12px rgba(255, 45, 106, 0.05);\n}\n.ta-input-section.hidden { display: none; }\n.ta-input-field {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n.ta-input-label {\n display: flex;\n align-items: center;\n gap: 6px;\n font-family: var(--font-display);\n font-weight: 700;\n font-size: 12px;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n color: var(--color-text-neon-muted);\n}\n.ta-input-points {\n margin-left: auto;\n flex-shrink: 0;\n background: rgba(57, 255, 20, 0.15);\n color: var(--color-success-neon);\n font-weight: 900;\n font-size: 11px;\n letter-spacing: 0.04em;\n padding: 2px 8px;\n border-radius: var(--radius-full);\n}\n.ta-text-input {\n width: 100%;\n box-sizing: border-box;\n padding: 12px 14px;\n background: rgba(255, 255, 255, 0.05);\n border: 2px solid rgba(255, 255, 255, 0.12);\n border-radius: var(--radius-lg);\n color: var(--color-text-white);\n font-family: var(--font-body);\n font-size: 16px;\n line-height: 1.3;\n transition: border-color var(--transition-fast), box-shadow var(--transition-fast);\n}\n.ta-text-input::placeholder { color: var(--color-text-neon-muted); opacity: 0.55; }\n.ta-text-input:focus {\n outline: none;\n border-color: var(--color-accent-primary);\n box-shadow: 0 0 0 3px rgba(255, 45, 106, 0.20);\n}\n.ta-input-ack {\n margin-top: 2px;\n text-align: center;\n font-family: var(--font-body);\n font-size: 12px;\n color: var(--color-success-neon);\n}\n.ta-input-ack.hidden { display: none; }\n\n/* ==========================================================================\n Spotlight Stage \u2014 player reveal skin\n --------------------------------------------------------------------------\n A frosted-glass reskin of the reveal view: the song's album art, blurred,\n acts as a \"stage\" behind the top of the screen; every panel floats on\n frosted glass; the duel is two facing tickets bridged by a delta pill.\n\n EVERYTHING here is scoped under #reveal-view on purpose. Several classes\n used on this screen (.card-section, .section-header, .info-btn, .chip,\n .leaderboard-list) are shared with the launcher, lobby, end and admin\n surfaces \u2014 scoping keeps those untouched. Source order + the #id give\n these rules the specificity to win over the base reveal styles above.\n ========================================================================== */\n\n/* Stage: own stacking context + clip the backdrop's blur bleed. */\n#reveal-view .reveal-container--duel {\n position: relative;\n overflow: hidden;\n isolation: isolate;\n}\n\n/* --- Album-art backdrop + scrim (scrolls with the content) --- */\n#reveal-view .reveal-backdrop {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n height: 340px;\n z-index: 0;\n background-size: cover;\n background-position: center;\n background-repeat: no-repeat;\n filter: blur(46px) saturate(1.15);\n transform: scale(1.15);\n transform-origin: top center;\n opacity: 0.5;\n pointer-events: none;\n /* Fade the art to nothing well before its box ends, so the blurred/scaled\n tail never reads as a hard bright band below the duel cards (the rc1\n #1462 regression mholzi flagged). The glow dissolves into the stage. */\n -webkit-mask-image: linear-gradient(to bottom, #000 0%, #000 28%, transparent 70%);\n mask-image: linear-gradient(to bottom, #000 0%, #000 28%, transparent 70%);\n}\n/* Synthetic fallback when album art is missing or its proxy URL has expired. */\n#reveal-view .reveal-backdrop--synthetic {\n background-image:\n radial-gradient(circle at 28% 22%, rgba(168, 32, 84, 0.95) 0%, rgba(168, 32, 84, 0) 42%),\n radial-gradient(circle at 78% 14%, rgba(96, 28, 150, 0.9) 0%, rgba(96, 28, 150, 0) 46%),\n radial-gradient(circle at 18% 82%, rgba(34, 40, 120, 0.9) 0%, rgba(34, 40, 120, 0) 50%),\n conic-gradient(from 210deg at 52% 48%,\n #1a1038 0deg, #4a1240 70deg, #7a1e3c 130deg,\n #2a1454 200deg, #131642 280deg, #1a1038 360deg);\n filter: blur(54px) saturate(1.25);\n}\n#reveal-view .reveal-scrim {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n height: 380px;\n z-index: 0;\n pointer-events: none;\n background: linear-gradient(180deg,\n rgba(10, 10, 18, 0.78) 0%,\n rgba(10, 10, 18, 0.88) 55%,\n var(--color-bg-primary) 100%);\n}\n/* One cyan spotlight from the upper centre. */\n#reveal-view .reveal-scrim::after {\n content: '';\n position: absolute;\n inset: 0;\n background: radial-gradient(ellipse 320px 360px at 50% 24%,\n rgba(0, 245, 255, 0.13) 0%, rgba(0, 245, 255, 0) 62%);\n}\n/* Lift every real child above the backdrop/scrim \u2014 but NOT the confetti\n canvas, which must keep its own `position: fixed` (full-screen overlay).\n Without this exclusion the canvas drops into normal flow and adds a tall\n empty gap between the duel and the score row. */\n#reveal-view .reveal-container--duel > *:not(.reveal-backdrop):not(.reveal-scrim):not(.confetti-canvas) {\n position: relative;\n z-index: 1;\n}\n@media (prefers-reduced-motion: no-preference) {\n #reveal-view .reveal-backdrop {\n transition: background-image 0.4s ease;\n }\n}\n\n/* --- Frosted-glass recipe for the floating panels --- */\n#reveal-view .song-strip,\n#reveal-view .score-row,\n#reveal-view .card-section,\n#reveal-view .duel-ticket {\n background: rgba(255, 255, 255, 0.06);\n border: 1px solid rgba(255, 255, 255, 0.12);\n -webkit-backdrop-filter: blur(20px);\n backdrop-filter: blur(20px);\n box-shadow: 0 10px 30px rgba(0, 0, 0, 0.35);\n border-radius: var(--radius-lg);\n}\n/* Keep the glass on hover (base .card-section:hover changes the background). */\n#reveal-view .card-section:hover {\n background: rgba(255, 255, 255, 0.08);\n border-color: rgba(255, 255, 255, 0.16);\n}\n\n/* --- Top chrome floats, no panel (already borderless; just sits on top) --- */\n#reveal-view .reveal-header-v2 {\n margin-bottom: var(--space-sm);\n}\n\n/* --- Song identity strip --- */\n#reveal-view .song-strip {\n padding: var(--space-sm) var(--space-md) var(--space-sm) var(--space-sm);\n}\n#reveal-view .song-strip-cover {\n box-shadow: 0 2px 10px rgba(0, 0, 0, 0.5);\n border: 1px solid rgba(255, 255, 255, 0.15);\n}\n\n/* --- Center stage: emotion headline + duel tickets --- */\n#reveal-view .duel-emotion {\n font-size: 30px;\n letter-spacing: 0.04em;\n margin-bottom: var(--space-sm);\n text-shadow: 0 4px 18px rgba(0, 0, 0, 0.6);\n}\n#reveal-view .duel {\n padding: var(--space-md) var(--space-xs) var(--space-lg);\n}\n#reveal-view .duel-tickets {\n position: relative;\n display: flex;\n justify-content: center;\n align-items: stretch;\n gap: var(--space-md);\n padding-bottom: 20px;\n}\n#reveal-view .duel-ticket {\n flex: 1 1 0;\n max-width: 170px;\n padding: var(--space-md) var(--space-sm) var(--space-lg);\n text-align: center;\n}\n#reveal-view .duel-ticket--you {\n transform: rotate(-3deg) translateY(4px);\n border-color: rgba(255, 45, 106, 0.35);\n box-shadow: 0 14px 34px rgba(0, 0, 0, 0.45), 0 0 24px rgba(255, 45, 106, 0.12);\n}\n#reveal-view .duel-ticket--truth {\n transform: rotate(3deg) translateY(4px);\n border-color: rgba(0, 245, 255, 0.4);\n box-shadow: 0 14px 34px rgba(0, 0, 0, 0.45), 0 0 34px rgba(0, 245, 255, 0.18);\n}\n#reveal-view .duel-ticket .duel-label {\n padding-bottom: var(--space-sm);\n margin: 0 6px var(--space-sm);\n border-bottom: 1.5px dashed rgba(255, 255, 255, 0.18);\n}\n#reveal-view .duel-ticket .duel-year {\n font-size: clamp(40px, 13vw, 54px);\n}\n#reveal-view .duel-ticket--you .duel-year.mine {\n color: var(--color-accent-primary);\n text-shadow: 0 0 18px rgba(255, 45, 106, 0.45);\n}\n#reveal-view .duel-ticket--truth .duel-year.correct {\n color: var(--color-accent-secondary);\n text-shadow: 0 0 14px rgba(0, 245, 255, 0.9), 0 0 38px rgba(0, 245, 255, 0.45);\n}\n/* The gap becomes a delta pill overlapping the tickets' base. */\n#reveal-view .duel-gap {\n position: absolute;\n left: 50%;\n bottom: 0;\n transform: translateX(-50%);\n flex-direction: row;\n align-items: baseline;\n gap: 5px;\n min-width: 0;\n padding: 6px 16px;\n border-radius: var(--radius-full);\n background: rgba(255, 102, 0, 0.16);\n border: 1px solid rgba(255, 102, 0, 0.55);\n -webkit-backdrop-filter: blur(20px);\n backdrop-filter: blur(20px);\n box-shadow: 0 6px 18px rgba(0, 0, 0, 0.5), 0 0 16px rgba(255, 102, 0, 0.2);\n white-space: nowrap;\n z-index: 3;\n}\n#reveal-view .duel-gap-x {\n font-size: var(--font-size-md);\n color: var(--color-warning-alt);\n opacity: 0.9;\n}\n#reveal-view .duel-gap-n {\n font-size: var(--font-size-lg);\n color: var(--color-warning-alt);\n text-shadow: none;\n}\n#reveal-view .duel-gap-unit {\n margin-top: 0;\n font-size: 10px;\n color: var(--color-warning-alt);\n}\n#reveal-view .duel-gap--exact {\n background: rgba(57, 255, 20, 0.16);\n border-color: rgba(57, 255, 20, 0.55);\n box-shadow: 0 6px 18px rgba(0, 0, 0, 0.5), 0 0 16px rgba(57, 255, 20, 0.22);\n}\n#reveal-view .duel-gap--exact .duel-gap-x,\n#reveal-view .duel-gap--exact .duel-gap-n,\n#reveal-view .duel-gap--exact .duel-gap-unit {\n color: var(--color-success-neon);\n}\n#reveal-view .duel-gap--wrong {\n background: rgba(255, 0, 64, 0.14);\n border-color: rgba(255, 0, 64, 0.5);\n box-shadow: 0 6px 18px rgba(0, 0, 0, 0.5), 0 0 16px rgba(255, 0, 64, 0.2);\n}\n#reveal-view .duel-gap--wrong .duel-gap-x,\n#reveal-view .duel-gap--wrong .duel-gap-n,\n#reveal-view .duel-gap--wrong .duel-gap-unit {\n color: var(--color-error-neon);\n}\n\n/* --- Score / points bar: green gain per DESIGN.md, glass surface --- */\n#reveal-view .score-row {\n border-color: rgba(255, 255, 255, 0.12);\n box-shadow: 0 10px 30px rgba(0, 0, 0, 0.35);\n}\n#reveal-view .score-row-pts {\n color: var(--color-success-neon);\n text-shadow: 0 0 16px rgba(57, 255, 20, 0.5);\n font-size: 32px;\n}\n\n/* --- Title & Artist vote cards float as glass chips --- */\n#reveal-view .ta-vote-card,\n#reveal-view .ta-outcome-card {\n background: rgba(255, 255, 255, 0.05);\n border: 1px solid rgba(255, 255, 255, 0.1);\n -webkit-backdrop-filter: blur(12px);\n backdrop-filter: blur(12px);\n}\n\n/* --- Footer: pink primary CTA, ghost-glass invite --- */\n#reveal-view .next-round-btn {\n background: linear-gradient(135deg, #ff2d6a 0%, #ff4f86 100%);\n border-radius: var(--radius-full);\n box-shadow: 0 8px 24px rgba(255, 45, 106, 0.45), 0 0 18px rgba(255, 45, 106, 0.3);\n}\n#reveal-view .next-round-btn:hover {\n background: linear-gradient(135deg, #ff4f86 0%, #ff2d6a 100%);\n}\n#reveal-view .next-round-btn.is-final {\n background: linear-gradient(135deg, #39ff14 0%, #00f5ff 100%);\n color: var(--color-bg-primary);\n}\n#reveal-view .invite-btn {\n background: rgba(255, 255, 255, 0.06);\n border: 1px solid rgba(255, 255, 255, 0.18);\n -webkit-backdrop-filter: blur(20px);\n backdrop-filter: blur(20px);\n border-radius: var(--radius-full);\n}\n/* Equalise the two footer buttons \u2014 same box metrics + equal width, so\n \"Spieler einladen\" and \"N\u00E4chste Runde\" match (only their colour differs). */\n#reveal-view .reveal-admin-buttons { align-items: stretch; }\n#reveal-view .reveal-admin-buttons .invite-btn,\n#reveal-view .reveal-admin-buttons .next-round-btn {\n flex: 1 1 0;\n min-width: 0;\n max-width: 260px;\n min-height: 56px;\n padding: 12px 20px;\n font-size: var(--font-size-md);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--space-sm);\n text-align: center;\n}\n\n/* ==========================================================================\n Reveal standings \u2014 \"Round-Delta Ledger\" (design-shotgun A)\n --------------------------------------------------------------------------\n Replaces the plain leaderboard list inside the reveal's Standings card with\n rows that fuse the overall standing (rank + movement + big total) with this\n round's outcome (guessed year, streak/steal/bet chips, +round delta). Own\n `rstand-` prefix + `#reveal-view` scope so the shared `.leaderboard-entry`\n styling (used by the in-game leaderboard + dashboard) is untouched.\n Rendered by renderRevealStandings() in player-reveal.js.\n ========================================================================== */\n#reveal-view #reveal-leaderboard-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n /* The reveal standings show every player (taper-dim lower ranks), so undo\n the shared .leaderboard-list scroll box (max-height:200px; overflow:auto)\n the in-game lazy leaderboard uses \u2014 otherwise rows 4+ get clipped. */\n max-height: none;\n overflow: visible;\n}\n#reveal-view .rstand-row {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 12px;\n border-radius: 12px;\n background: rgba(255, 255, 255, 0.03);\n border: 1px solid rgba(255, 255, 255, 0.06);\n}\n#reveal-view .rstand-row--you {\n border: 1px solid var(--color-accent-primary);\n background: rgba(255, 45, 106, 0.06);\n box-shadow: 0 0 16px rgba(255, 45, 106, 0.22);\n}\n/* Taper-dim lower ranks (matches the Arcade taper grammar). */\n#reveal-view .rstand-row--taper1 { opacity: 0.85; }\n#reveal-view .rstand-row--taper2 { opacity: 0.68; }\n\n#reveal-view .rstand-rankcell {\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 26px;\n flex-shrink: 0;\n}\n#reveal-view .rstand-rank {\n font-family: var(--font-display);\n font-weight: 800;\n font-size: 20px;\n line-height: 1;\n color: var(--color-text-white);\n}\n#reveal-view .rstand-row--taper1 .rstand-rank,\n#reveal-view .rstand-row--taper2 .rstand-rank { font-size: 18px; }\n#reveal-view .rstand-move {\n font-size: 10px;\n font-weight: 700;\n line-height: 1;\n margin-top: 3px;\n}\n#reveal-view .rstand-move--up { color: var(--color-success-neon); }\n#reveal-view .rstand-move--down { color: var(--color-error-neon); }\n#reveal-view .rstand-move--flat { color: var(--color-text-neon-muted); }\n\n#reveal-view .rstand-avatar {\n width: 34px;\n height: 34px;\n border-radius: 50%;\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n font-family: var(--font-display);\n font-weight: 800;\n font-size: 15px;\n color: var(--color-text-white);\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.35);\n border: 1px solid rgba(255, 255, 255, 0.15);\n}\n\n#reveal-view .rstand-ident { flex: 1; min-width: 0; }\n#reveal-view .rstand-name {\n font-family: var(--font-body);\n font-weight: 700;\n font-size: 15px;\n line-height: 1.1;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: flex;\n align-items: center;\n gap: 6px;\n color: var(--color-text-white);\n}\n#reveal-view .rstand-you {\n font-family: var(--font-display);\n font-weight: 800;\n font-size: 9px;\n letter-spacing: 0.06em;\n color: var(--color-accent-primary);\n background: rgba(255, 45, 106, 0.15);\n border: 1px solid rgba(255, 45, 106, 0.4);\n border-radius: 6px;\n padding: 2px 5px;\n line-height: 1;\n flex-shrink: 0;\n}\n#reveal-view .rstand-guess {\n font-size: 11px;\n font-weight: 500;\n color: var(--color-text-neon-muted);\n line-height: 1.2;\n margin-top: 3px;\n font-variant-numeric: tabular-nums;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n#reveal-view .rstand-guess .rstand-exact { color: var(--color-success-neon); font-weight: 600; }\n#reveal-view .rstand-chips {\n display: flex;\n flex-wrap: wrap;\n gap: 5px;\n margin-top: 5px;\n}\n#reveal-view .rstand-chip {\n font-size: 10px;\n font-weight: 600;\n color: var(--color-text-neon-muted);\n background: rgba(255, 255, 255, 0.05);\n border: 1px solid rgba(255, 255, 255, 0.08);\n border-radius: 999px;\n padding: 2px 7px;\n line-height: 1.4;\n white-space: nowrap;\n}\n#reveal-view .rstand-chip--fire { color: var(--color-warning-alt); border-color: rgba(255, 102, 0, 0.3); background: rgba(255, 102, 0, 0.08); }\n#reveal-view .rstand-chip--steal { color: var(--color-success-neon); border-color: rgba(57, 255, 20, 0.28); background: rgba(57, 255, 20, 0.07); }\n\n#reveal-view .rstand-score {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n flex-shrink: 0;\n margin-left: 4px;\n}\n#reveal-view .rstand-total {\n font-family: var(--font-display);\n font-weight: 900;\n font-size: 22px;\n line-height: 1;\n color: var(--color-text-white);\n letter-spacing: -0.01em;\n}\n#reveal-view .rstand-row--taper1 .rstand-total { font-size: 20px; }\n#reveal-view .rstand-row--taper2 .rstand-total { font-size: 19px; }\n#reveal-view .rstand-delta {\n font-family: var(--font-body);\n font-weight: 700;\n font-size: 12px;\n line-height: 1;\n margin-top: 4px;\n color: var(--color-success-neon);\n}\n#reveal-view .rstand-delta--zero { color: var(--color-text-neon-muted); }\n\n/* ==========================================================================\n Reveal artist-result + fun-fact (design-shotgun B: inline artist chip +\n badges-first fun fact)\n --------------------------------------------------------------------------\n The artist-challenge result folds into the song-strip card as a slim inline\n row (no standalone card). The fun-fact card leads with the chart/cert/award\n badges as prominent tiles, then a trimmed (2-line) prose hook. Scoped under\n #reveal-view. renderArtistReveal still drives #artist-reveal-* element ids.\n ========================================================================== */\n/* Song strip becomes a column: main identity row + optional artist row. */\n#reveal-view .song-strip {\n flex-direction: column;\n align-items: stretch;\n gap: 0;\n padding: 0;\n overflow: hidden;\n}\n#reveal-view .song-strip-main {\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n padding: var(--space-sm) var(--space-md) var(--space-sm) var(--space-sm);\n}\n/* Inline artist-challenge result row (relocated #artist-reveal-section). */\n#reveal-view .artist-guess-row {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 9px var(--space-md) 9px var(--space-sm);\n border-top: 1px solid rgba(255, 255, 255, 0.08);\n}\n#reveal-view .artist-guess-row.hidden { display: none; }\n#reveal-view .artist-guess-ic { font-size: 14px; flex-shrink: 0; }\n#reveal-view .artist-guess-name {\n font-family: var(--font-body);\n font-weight: 700;\n font-size: 14px;\n color: var(--color-text-white);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n min-width: 0;\n}\n#reveal-view .artist-reveal-winner {\n margin-left: auto;\n flex-shrink: 0;\n font-family: var(--font-body);\n font-size: 11px;\n font-weight: 700;\n padding: 3px 10px;\n border-radius: var(--radius-full);\n white-space: nowrap;\n}\n#reveal-view .artist-reveal-winner.hidden { display: none; }\n#reveal-view .artist-reveal-winner.is-you,\n#reveal-view .artist-reveal-winner.is-other {\n color: var(--color-success-neon);\n background: rgba(57, 255, 20, 0.12);\n border: 1px solid rgba(57, 255, 20, 0.4);\n}\n#reveal-view .artist-reveal-winner.is-you {\n box-shadow: 0 0 12px rgba(57, 255, 20, 0.2);\n}\n#reveal-view .artist-reveal-winner.artist-reveal-no-winner {\n color: var(--color-text-neon-muted);\n background: rgba(255, 255, 255, 0.06);\n border: 1px solid rgba(255, 255, 255, 0.12);\n}\n\n/* Fun fact: badges as prominent tiles first, prose trimmed below. */\n#reveal-view #fun-fact-container .section-content-padded {\n display: flex;\n flex-direction: column;\n gap: 11px;\n}\n#reveal-view .song-rich-info .song-badges-row {\n display: flex;\n gap: 8px;\n}\n#reveal-view .song-rich-info .song-badge {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 4px;\n padding: 11px 6px;\n border-radius: 12px;\n background: rgba(255, 255, 255, 0.05);\n border: 1px solid rgba(255, 255, 255, 0.1);\n font-family: var(--font-body);\n font-size: 11px;\n font-weight: 700;\n line-height: 1.2;\n text-align: center;\n white-space: normal;\n}\n#reveal-view .song-rich-info .song-badge .song-badge-icon { font-size: 20px; }\n#reveal-view .song-rich-info .song-badges-more {\n flex: 0 0 auto;\n align-self: center;\n font-size: 11px;\n color: var(--color-text-neon-muted);\n}\n#reveal-view #fun-fact .fun-fact-text,\n#reveal-view .fun-fact-text {\n font-size: 12px;\n line-height: 1.4;\n color: var(--color-text-neon-muted);\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n\n/* ==========================================================================\n Smart Playlist Mixer \u2014 \"Mix\" tab (#1538, design option 1 \"chip-cloud\")\n Reuses the Beatify dark look (bg #0a0a12, pink #ff2d6a, cyan #00f5ff,\n indigo #6366f1). Tokens: --color-accent-primary/secondary/brand,\n --color-surface-dark, --color-border-neon, --color-text-neon-muted.\n ========================================================================== */\n\n/* Playlist / Mix tab strip (sits above the playlist panels). */\n.playlist-tabs {\n display: flex;\n gap: var(--space-lg);\n border-bottom: 1px solid var(--color-border-neon);\n margin-bottom: var(--space-md);\n}\n\n.playlist-tab {\n appearance: none;\n background: none;\n border: none;\n padding: 10px 2px;\n margin-bottom: -1px;\n font: inherit;\n font-weight: 700;\n font-size: 0.95rem;\n color: var(--color-text-neon-muted);\n cursor: pointer;\n border-bottom: 2px solid transparent;\n transition: color var(--transition-fast), border-color var(--transition-fast);\n}\n\n.playlist-tab:hover {\n color: var(--color-text-white);\n}\n\n.playlist-tab.active {\n color: var(--color-accent-secondary);\n border-bottom-color: var(--color-accent-secondary);\n}\n\n.playlist-panel.hidden {\n display: none;\n}\n\n/* Mix card */\n.mix-card {\n background: var(--color-surface-dark);\n border: 1px solid var(--color-border-neon);\n border-radius: var(--radius-lg);\n padding: var(--space-lg);\n}\n\n.mix-card-head {\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n}\n\n.mix-card-icon {\n font-size: 1.25rem;\n}\n\n.mix-card-title {\n margin: 0;\n font-size: 1.25rem;\n font-weight: 800;\n color: var(--color-text-white);\n}\n\n.mix-card-sub {\n margin: 6px 0 var(--space-lg);\n color: var(--color-text-neon-muted);\n font-size: 0.9rem;\n}\n\n/* Chip-cloud rows (Decade / Style / Region / Special) */\n.mix-chip-cloud {\n display: flex;\n flex-direction: column;\n gap: var(--space-md);\n}\n\n.mix-chip-row {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.mix-chip-rowlabel {\n font-size: 0.7rem;\n font-weight: 700;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n color: var(--color-text-neon-muted);\n}\n\n.mix-chip-group {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n}\n\n.mix-chip {\n appearance: none;\n padding: 6px 14px;\n border-radius: var(--radius-full);\n border: 1px solid var(--color-border-neon);\n background: rgba(255, 255, 255, 0.04);\n color: var(--color-text-neon-muted);\n font: inherit;\n font-size: 0.85rem;\n font-weight: 600;\n cursor: pointer;\n transition: all var(--transition-fast);\n}\n\n.mix-chip:hover {\n border-color: rgba(255, 255, 255, 0.3);\n color: var(--color-text-white);\n}\n\n/* Active accents per category, matching the option-1 mockup. */\n.mix-chip-group[data-accent=\"cyan\"] .mix-chip.active {\n background: rgba(0, 245, 255, 0.15);\n border-color: var(--color-accent-secondary);\n color: var(--color-accent-secondary);\n}\n\n.mix-chip-group[data-accent=\"pink\"] .mix-chip.active {\n background: rgba(255, 45, 106, 0.15);\n border-color: var(--color-accent-primary);\n color: var(--color-accent-primary);\n}\n\n.mix-chip-group[data-accent=\"indigo\"] .mix-chip.active {\n background: rgba(99, 102, 241, 0.18);\n border-color: var(--color-accent-brand);\n color: #a5b4fc;\n}\n\n.mix-empty {\n color: var(--color-text-neon-muted);\n font-size: 0.9rem;\n margin: 0;\n}\n\n.mix-divider {\n height: 1px;\n background: var(--color-border-neon);\n margin: var(--space-lg) 0;\n}\n\n/* Target-count segmented control (30 / 50 / 100) */\n.mix-count-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--space-md);\n flex-wrap: wrap;\n}\n\n.mix-count-label {\n font-size: 0.7rem;\n font-weight: 700;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n color: var(--color-text-neon-muted);\n}\n\n.mix-segmented {\n display: inline-flex;\n padding: 4px;\n gap: 4px;\n background: rgba(255, 255, 255, 0.05);\n border: 1px solid var(--color-border-neon);\n border-radius: 10px;\n}\n\n.mix-seg {\n appearance: none;\n min-width: 56px;\n padding: 8px 14px;\n border: none;\n border-radius: 7px;\n background: transparent;\n color: var(--color-text-neon-muted);\n font: inherit;\n font-weight: 700;\n cursor: pointer;\n transition: all var(--transition-fast);\n}\n\n.mix-seg:hover {\n color: var(--color-text-white);\n}\n\n.mix-seg.active {\n background: var(--color-accent-brand);\n color: var(--color-text-white);\n box-shadow: 0 0 14px rgba(99, 102, 241, 0.5);\n}\n\n/* Live preview line */\n.mix-preview {\n display: flex;\n align-items: center;\n gap: 10px;\n margin: var(--space-md) 0 var(--space-lg);\n padding: 12px 16px;\n border-radius: var(--radius-md);\n background: rgba(0, 245, 255, 0.06);\n border: 1px solid rgba(0, 245, 255, 0.15);\n color: var(--color-text-white);\n font-size: 0.9rem;\n}\n\n.mix-preview-dot {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: #1ed760;\n box-shadow: 0 0 8px rgba(30, 215, 96, 0.8);\n flex-shrink: 0;\n}\n\n/* Actions row */\n.mix-actions {\n display: flex;\n align-items: center;\n gap: var(--space-lg);\n flex-wrap: wrap;\n}\n\n.mix-actions .btn-primary:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n box-shadow: none;\n}\n\n.mix-save-label {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 0.9rem;\n color: var(--color-text-neon-muted);\n cursor: pointer;\n}\n\n#mix-error {\n margin-top: var(--space-md);\n}\n/* #2294: the server's own reason under the translated headline. Inline-block\n with display:block because #mix-error is a

and cannot hold a

. */\n.mix-error-detail {\n display: block;\n margin-top: var(--space-xs);\n font-size: var(--font-size-sm);\n line-height: 1.35;\n color: var(--color-text-light);\n word-break: break-word;\n}\n\n/* Tracklist preview (#1586) */\n.mix-tracklist-row {\n margin: var(--space-sm) 0;\n}\n\n.mix-tracklist-row .btn-sm {\n font-size: 0.85rem;\n padding: 6px 12px;\n}\n\n.mix-tracklist {\n margin: var(--space-sm) 0 var(--space-md);\n max-height: 280px;\n overflow-y: auto;\n border-radius: var(--radius-md);\n border: 1px solid rgba(0, 245, 255, 0.15);\n background: rgba(0, 245, 255, 0.04);\n}\n\n.mix-tracklist.hidden {\n display: none;\n}\n\n.mix-tracklist-head {\n margin: 0;\n padding: 10px 14px;\n font-size: 0.8rem;\n font-weight: 600;\n letter-spacing: 0.02em;\n text-transform: uppercase;\n color: var(--color-text-neon-muted);\n border-bottom: 1px solid rgba(0, 245, 255, 0.12);\n position: sticky;\n top: 0;\n background: rgba(10, 12, 24, 0.92);\n}\n\n.mix-tracklist-empty {\n margin: 0;\n padding: 14px;\n font-size: 0.9rem;\n color: var(--color-text-neon-muted);\n}\n\n.mix-track-list {\n list-style: none;\n margin: 0;\n padding: 4px 0;\n counter-reset: mix-track;\n}\n\n.mix-track {\n display: flex;\n align-items: baseline;\n gap: 8px;\n padding: 6px 14px;\n font-size: 0.88rem;\n color: var(--color-text-white);\n}\n\n.mix-track::before {\n counter-increment: mix-track;\n content: counter(mix-track);\n flex-shrink: 0;\n min-width: 1.8em;\n text-align: right;\n font-variant-numeric: tabular-nums;\n color: var(--color-text-neon-muted);\n opacity: 0.7;\n}\n\n.mix-track-title {\n font-weight: 500;\n}\n\n.mix-track-artist {\n color: var(--color-text-neon-muted);\n}\n\n.mix-track-artist::before {\n content: \"\u2014 \";\n}\n\n.mix-track-year {\n margin-left: auto;\n flex-shrink: 0;\n color: var(--color-text-neon-muted);\n font-variant-numeric: tabular-nums;\n opacity: 0.7;\n}\n\n/* ==========================================================================\n #1663 item 1 \u2014 Non-blocking notices (Toast + Inline Banner)\n Replaces the old blocking alert(). Neon top-toast for transient notices,\n inline panel-banner for setup/validation errors. Dark-neon tokens only.\n ========================================================================== */\n\n/* --- Neon Top-Toast (Variant A): top-center, auto-dismiss, glowing bar --- */\n.beatify-toast-container {\n position: fixed;\n top: var(--space-md);\n left: 50%;\n transform: translateX(-50%);\n z-index: var(--z-toast);\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--space-sm);\n width: min(92vw, 440px);\n pointer-events: none; /* let taps fall through the gaps; toasts re-enable */\n}\n\n.beatify-toast {\n pointer-events: auto;\n width: 100%;\n display: flex;\n align-items: flex-start;\n gap: var(--space-sm);\n position: relative;\n overflow: hidden;\n padding: var(--space-sm) var(--space-md);\n border-radius: var(--radius-lg);\n background: rgba(20, 20, 34, 0.96);\n border: 1px solid var(--color-error-neon);\n box-shadow: 0 0 20px rgba(255, 0, 64, 0.45), 0 8px 32px rgba(0, 0, 0, 0.45);\n color: var(--color-text-white);\n font-family: var(--font-body);\n font-size: var(--font-size-base);\n font-weight: var(--font-weight-medium);\n /* Enter/leave transition (gated under reduced-motion below). */\n opacity: 0;\n transform: translateY(-12px);\n transition: opacity var(--transition-normal), transform var(--transition-normal);\n}\n.beatify-toast--in { opacity: 1; transform: translateY(0); }\n.beatify-toast--leaving { opacity: 0; transform: translateY(-12px); }\n\n.beatify-toast--info {\n border-color: var(--color-accent-secondary);\n box-shadow: 0 0 20px rgba(0, 245, 255, 0.4), 0 8px 32px rgba(0, 0, 0, 0.45);\n}\n.beatify-toast--success {\n border-color: var(--color-success-neon);\n box-shadow: 0 0 20px rgba(57, 255, 20, 0.4), 0 8px 32px rgba(0, 0, 0, 0.45);\n}\n\n.beatify-toast-body {\n display: flex;\n align-items: flex-start;\n gap: var(--space-sm);\n flex: 1 1 auto;\n min-width: 0;\n}\n.beatify-toast-icon { font-size: var(--font-size-lg); line-height: 1.3; flex-shrink: 0; }\n.beatify-toast-text { line-height: 1.35; word-break: break-word; }\n\n.beatify-toast-close {\n flex-shrink: 0;\n background: none;\n border: none;\n color: var(--color-text-neon-muted);\n font-size: var(--font-size-xl);\n line-height: 1;\n cursor: pointer;\n padding: 0 var(--space-xs);\n transition: color var(--transition-fast);\n}\n.beatify-toast-close:hover { color: var(--color-text-white); }\n\n/* Glowing progress bar that drains over the auto-dismiss window. */\n.beatify-toast-progress {\n position: absolute;\n left: 0;\n bottom: 0;\n height: 3px;\n width: 100%;\n transform-origin: left center;\n background: var(--color-error-neon);\n box-shadow: 0 0 8px var(--color-error-neon);\n animation: beatify-toast-drain linear forwards;\n}\n.beatify-toast--info .beatify-toast-progress {\n background: var(--color-accent-secondary);\n box-shadow: 0 0 8px var(--color-accent-secondary);\n}\n.beatify-toast--success .beatify-toast-progress {\n background: var(--color-success-neon);\n box-shadow: 0 0 8px var(--color-success-neon);\n}\n@keyframes beatify-toast-drain {\n from { transform: scaleX(1); }\n to { transform: scaleX(0); }\n}\n\n/* --- Inline Panel-Banner (Variant C): docked above the primary action --- */\n.beatify-banner {\n display: flex;\n align-items: flex-start;\n gap: var(--space-sm);\n margin-bottom: var(--space-md);\n padding: var(--space-sm) var(--space-md);\n border-radius: var(--radius-lg);\n background: rgba(255, 0, 64, 0.08);\n border: 1px solid var(--color-error-neon);\n box-shadow: inset 0 0 16px rgba(255, 0, 64, 0.12);\n color: var(--color-text-white);\n font-family: var(--font-body);\n font-size: var(--font-size-base);\n text-align: left;\n}\n.beatify-banner--warning {\n background: rgba(245, 158, 11, 0.1);\n border-color: var(--color-warning);\n box-shadow: inset 0 0 16px rgba(245, 158, 11, 0.12);\n}\n.beatify-banner--info {\n background: rgba(0, 245, 255, 0.08);\n border-color: var(--color-accent-secondary);\n box-shadow: inset 0 0 16px rgba(0, 245, 255, 0.12);\n}\n.beatify-banner-icon { font-size: var(--font-size-lg); line-height: 1.2; flex-shrink: 0; }\n.beatify-banner-content { flex: 1 1 auto; min-width: 0; }\n.beatify-banner-title {\n font-family: var(--font-display);\n font-weight: var(--font-weight-bold);\n margin-bottom: 2px;\n color: var(--color-error-neon);\n}\n.beatify-banner--warning .beatify-banner-title { color: var(--color-warning); }\n.beatify-banner--info .beatify-banner-title { color: var(--color-accent-secondary); }\n.beatify-banner-text { line-height: 1.4; color: var(--color-text-neon-muted); word-break: break-word; }\n/* #2294: the server's own reason, under the translated headline. Dimmer and\n smaller so it reads as a detail rather than a competing message. */\n.beatify-banner-detail {\n margin-top: var(--space-xs);\n font-size: var(--font-size-sm);\n line-height: 1.35;\n color: var(--color-text-light);\n word-break: break-word;\n}\n.beatify-banner-action {\n margin-top: var(--space-xs);\n background: none;\n border: 1px solid currentColor;\n border-radius: var(--radius-sm);\n color: var(--color-error-neon);\n font-family: var(--font-body);\n font-size: var(--font-size-sm);\n line-height: 1.2;\n padding: 6px var(--space-sm);\n cursor: pointer;\n transition: background var(--transition-fast), color var(--transition-fast);\n}\n.beatify-banner-action:hover { background: var(--color-error-neon); color: var(--color-bg-primary); }\n.beatify-banner--warning .beatify-banner-action { color: var(--color-warning); }\n.beatify-banner--warning .beatify-banner-action:hover { background: var(--color-warning); }\n.beatify-banner--info .beatify-banner-action { color: var(--color-accent-secondary); }\n.beatify-banner--info .beatify-banner-action:hover { background: var(--color-accent-secondary); }\n.beatify-banner-close {\n flex-shrink: 0;\n background: none;\n border: none;\n color: var(--color-text-neon-muted);\n font-size: var(--font-size-xl);\n line-height: 1;\n cursor: pointer;\n padding: 0 var(--space-xs);\n transition: color var(--transition-fast);\n}\n.beatify-banner-close:hover { color: var(--color-text-white); }\n\n@media (prefers-reduced-motion: reduce) {\n .beatify-toast { transition: none; opacity: 1; transform: none; }\n .beatify-toast-progress { animation: none; }\n}\n\n/* ==========================================================================\n #1663 item 2 \u2014 Steal modal Mini-Leaderboard-Row (Variant B)\n Each steal target becomes a rank + name + score row; the overall leader\n (rank 1) gets a crown + glow. Extends the existing .steal-target-btn.\n ========================================================================== */\n.steal-target-row {\n display: flex;\n align-items: center;\n gap: var(--space-sm);\n text-align: left;\n}\n.steal-target-rank {\n flex-shrink: 0;\n width: 24px;\n height: 24px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border-radius: var(--radius-full);\n background: var(--color-dark-surface);\n border: 1px solid var(--color-border-neon);\n font-family: var(--font-display);\n font-weight: var(--font-weight-bold);\n font-size: var(--font-size-sm);\n color: var(--color-text-neon-muted);\n}\n.steal-target-name {\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-weight: var(--font-weight-semibold);\n}\n.steal-target-score {\n flex-shrink: 0;\n font-family: var(--font-display);\n font-weight: var(--font-weight-bold);\n font-variant-numeric: tabular-nums;\n color: var(--color-accent-secondary);\n text-shadow: 0 0 8px rgba(0, 245, 255, 0.5);\n}\n.steal-target-crown { flex-shrink: 0; font-size: var(--font-size-md); line-height: 1; }\n.steal-target-row--leader {\n border-color: var(--color-warning);\n box-shadow: 0 0 14px rgba(245, 158, 11, 0.35), inset 0 0 10px rgba(245, 158, 11, 0.12);\n}\n.steal-target-row--leader .steal-target-rank {\n border-color: var(--color-warning);\n color: var(--color-warning);\n box-shadow: 0 0 8px rgba(245, 158, 11, 0.4);\n}\n.steal-target-row--leader .steal-target-score {\n color: var(--color-warning);\n text-shadow: 0 0 8px rgba(245, 158, 11, 0.5);\n}\n\n/* ==========================================================================\n #1663 item 3 \u2014 A11y: Icon+Text accuracy chips on the reveal dot-axis legend\n Glyph + word per state (\u25CE exact / \u2248 near / \u2715 off); colour is reinforcement.\n ========================================================================== */\n.dotaxis-legend-acc {\n display: inline-flex;\n align-items: center;\n gap: 3px;\n margin-left: 4px;\n padding: 1px 6px;\n border-radius: var(--radius-full);\n font-size: var(--font-size-xs);\n font-weight: var(--font-weight-semibold);\n border: 1px solid currentColor;\n white-space: nowrap;\n}\n.dotaxis-legend-acc-glyph { font-size: 0.95em; line-height: 1; }\n.dotaxis-legend-acc--exact { color: var(--color-accent-secondary); }\n.dotaxis-legend-acc--near { color: var(--color-warning); }\n.dotaxis-legend-acc--off { color: var(--color-text-neon-muted); }\n\n/* Lobby away chip: glyph + word (A11y \u2014 not colour/border alone). */\n.player-tile-away { display: inline-flex; align-items: center; gap: 3px; }\n.player-tile-away-glyph { font-size: 0.9em; line-height: 1; }\n\n/* ==========================================================================\n #1663 item 4 \u2014 Depleting Ring-Countdown (Variant C)\n SVG ring inside the arcade neon timer that drains cyan\u2192red as time runs out,\n mirroring the reveal auto-advance ring. Additive to the existing frame; the\n number's warning/critical classes (arc-urgency) are untouched.\n ========================================================================== */\n.timer-neon { position: relative; }\n.timer-neon-ring {\n position: absolute;\n inset: 3px; /* sit just inside the neon frame */\n width: calc(100% - 6px);\n height: calc(100% - 6px);\n transform: rotate(-90deg); /* start the drain from 12 o'clock */\n pointer-events: none;\n}\n.timer-neon-ring-bg {\n fill: none;\n stroke: rgba(255, 255, 255, 0.12);\n stroke-width: 4;\n}\n.timer-neon-ring-fg {\n fill: none;\n stroke: var(--color-accent-secondary);\n stroke-width: 4;\n stroke-linecap: round;\n filter: drop-shadow(0 0 6px rgba(0, 245, 255, 0.6));\n transition: stroke-dashoffset 1s linear, stroke var(--transition-normal);\n}\n.timer-neon--warn .timer-neon-ring-fg,\n.timer-neon-ring--warn .timer-neon-ring-fg {\n stroke: var(--color-warning);\n filter: drop-shadow(0 0 6px rgba(245, 158, 11, 0.7));\n}\n.timer-neon-ring--critical .timer-neon-ring-fg {\n stroke: var(--color-error-neon);\n filter: drop-shadow(0 0 7px rgba(255, 0, 64, 0.8));\n}\n@media (prefers-reduced-motion: reduce) {\n /* Opt-out: keep the numeric+colour cue, drop the animated drain. */\n .timer-neon-ring-fg { transition: none; }\n/* =====================================================================\n Sudden Death mode (Issue #827)\n ===================================================================== */\n\n/* --- Admin reveal: elimination + final arc chips --- */\n.arc-chip--elim {\n color: var(--color-error-neon);\n background: rgba(255, 0, 64, 0.12);\n border: 1px solid rgba(255, 0, 64, 0.5);\n text-transform: uppercase;\n}\n\n/* --- Admin control-bar live toggle (S7-A) --- */\n.sd-live-toggle {\n display: inline-flex;\n align-items: center;\n gap: 7px;\n padding: 5px 10px;\n border-radius: var(--radius-md);\n background: var(--color-bg-surface);\n border: 1px solid rgba(255, 255, 255, 0.12);\n font-family: var(--font-body);\n font-size: 12px;\n font-weight: 600;\n color: var(--color-text-white);\n cursor: pointer;\n transition: border-color var(--transition-fast), box-shadow var(--transition-fast);\n}\n.sd-live-toggle:disabled { opacity: 0.4; cursor: not-allowed; }\n.sd-live-toggle.is-on {\n border-color: var(--color-accent-primary);\n background: rgba(255, 45, 106, 0.08);\n box-shadow: var(--glow-primary);\n}\n.sd-live-toggle__switch {\n position: relative;\n width: 30px; height: 17px;\n border-radius: var(--radius-full);\n background: rgba(255, 255, 255, 0.15);\n flex: none;\n}\n.sd-live-toggle.is-on .sd-live-toggle__switch {\n background: var(--color-accent-primary);\n}\n.sd-live-toggle__switch::after {\n content: \"\"; position: absolute;\n width: 13px; height: 13px; border-radius: 50%;\n background: #fff; top: 2px; left: 2px;\n transition: left var(--transition-fast);\n}\n.sd-live-toggle.is-on .sd-live-toggle__switch::after { left: 15px; }\n\n/* --- Player eliminated view (S2-A Stark Blackout) --- */\n.eliminated-view {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n gap: var(--space-sm);\n min-height: 60vh;\n padding: var(--space-xl) var(--space-md);\n}\n.eliminated-orb {\n width: 120px; height: 120px;\n border-radius: var(--radius-full);\n overflow: hidden;\n filter: grayscale(1) brightness(0.5);\n display: flex; align-items: center; justify-content: center;\n background: linear-gradient(135deg, #2a2540, #16131f);\n margin-bottom: var(--space-md);\n position: relative;\n}\n.eliminated-orb img { width: 100%; height: 100%; object-fit: cover; }\n.eliminated-skull { font-size: 46px; position: absolute; }\n.eliminated-title {\n font-family: var(--font-display);\n font-weight: 900;\n font-size: var(--font-size-4xl);\n color: var(--color-text-white);\n letter-spacing: -0.02em;\n}\n.eliminated-sub { color: var(--color-text-neon-muted); font-size: var(--font-size-base); }\n.eliminated-hint { color: var(--color-text-dim); font-size: var(--font-size-sm); margin-top: var(--space-md); }\n\n/* --- Player leaderboard cut line (S3-A) --- */\n.cut-line {\n position: relative;\n height: 0;\n border-top: 2px solid var(--color-accent-primary);\n box-shadow: 0 0 12px rgba(255, 45, 106, 0.7);\n margin: var(--space-md) 0;\n}\n.cut-line__label {\n position: absolute;\n top: -9px; left: 50%;\n transform: translateX(-50%);\n background: var(--color-bg-primary);\n padding: 0 10px;\n font-family: var(--font-body);\n font-size: 9px;\n font-weight: 700;\n letter-spacing: 0.15em;\n color: var(--color-accent-primary);\n}\n.player-indicator.is-eliminated,\n.leaderboard-entry.is-eliminated { opacity: 0.45; }\n.player-out-badge {\n font-size: 10px;\n font-weight: 700;\n color: var(--color-text-dim);\n letter-spacing: 0.04em;\n}\n\n/* --- Spectator TV: full-bleed \"OUT\" takeover (S4-C) --- */\n.sd-out-overlay {\n position: fixed;\n inset: 0;\n z-index: 900;\n display: none;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n background: rgba(6, 6, 12, 0.96);\n}\n.sd-out-overlay.show { display: flex; animation: sd-out-in var(--transition-slow) ease-out; }\n.sd-out__word {\n font-family: var(--font-display);\n font-weight: 900;\n font-size: clamp(120px, 26vw, 360px);\n line-height: 0.85;\n color: var(--color-error-neon);\n text-shadow: 0 0 40px rgba(255, 0, 64, 0.7);\n}\n.sd-out__name {\n display: flex; align-items: center; gap: 14px;\n margin-top: var(--space-md);\n font-family: var(--font-display);\n font-weight: 900;\n font-size: var(--font-size-4xl);\n color: var(--color-text-white);\n}\n.sd-out__skull { font-size: 40px; }\n@keyframes sd-out-in {\n from { opacity: 0; transform: scale(0.85); }\n to { opacity: 1; transform: scale(1); }\n}\n\n/* --- Spectator TV: FINAL banner (S5-C arena) --- */\n.sd-final-banner {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 8px 18px;\n border-radius: var(--radius-full);\n font-family: var(--font-display);\n font-weight: 900;\n letter-spacing: 0.06em;\n color: var(--color-accent-primary);\n background: rgba(255, 45, 106, 0.12);\n border: 1px solid rgba(255, 45, 106, 0.5);\n box-shadow: 0 0 16px rgba(255, 45, 106, 0.3);\n}\n\n/* --- END: Last One Standing superlative + trophy hero (S6-C) --- */\n.superlative-card--last_one_standing {\n box-shadow: 0 0 18px rgba(255, 45, 106, 0.3);\n border-color: rgba(255, 45, 106, 0.4);\n}\n.sd-last-standing {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--space-sm);\n text-align: center;\n margin-bottom: var(--space-lg);\n}\n.sd-last-standing__trophy { font-size: 40px; }\n.sd-last-standing__headline {\n font-family: var(--font-display);\n font-weight: 900;\n font-size: var(--font-size-hero);\n letter-spacing: -0.02em;\n background: linear-gradient(90deg, var(--color-accent-primary), var(--color-accent-secondary));\n -webkit-background-clip: text;\n background-clip: text;\n -webkit-text-fill-color: transparent;\n text-shadow: 0 0 40px rgba(255, 45, 106, 0.5);\n}\n.sd-last-standing__winner {\n font-family: var(--font-body);\n font-weight: 700;\n font-size: var(--font-size-xl);\n color: var(--color-text-white);\n}\n/* #2105: the line that explains a points win \u2014 deliberately quiet, it is\n context for the name above it, not a second headline. */\n.sd-last-standing__sub {\n font-family: var(--font-body);\n font-weight: 500;\n font-size: var(--font-size-sm);\n color: var(--color-text-neon-muted);\n}\n\n@media (prefers-reduced-motion: reduce) {\n .sd-out-overlay.show { animation: none; }\n}\n"], + "mappings": "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", "names": [] } diff --git a/custom_components/beatify/www/js/player-game.js b/custom_components/beatify/www/js/player-game.js index 0ec5bd1e..928199fd 100644 --- a/custom_components/beatify/www/js/player-game.js +++ b/custom_components/beatify/www/js/player-game.js @@ -79,6 +79,70 @@ var lastLeaderboard = []; * still happen the other way: a game whose range shrinks between rounds * would otherwise leave the thumb parked outside its own track. */ +/** + * #2344: decade marks under the year slider. + * + * The track carried no landmarks at all — 76 years of blank rail. The cost is + * not precision (a thumb-width of travel is about two years, not thirty) but + * orientation: there was no way to see where 1985 sits, so the interaction was + * drag, read the number, drag again, with twelve seconds on the clock. + * + * Derived from the live span rather than pinned to percentages, because #2337 + * made the bounds move: applyYearRange() sets min/max from the playlist in + * play, and a mark nailed to a fixed position would drift the moment a + * playlist reaches past the default. + * + * Two details that are easy to get wrong: + * + * A range thumb's centre travels from thumbWidth/2 to width - thumbWidth/2, + * never to the very edge, so positions are laid out inside that inset — a mark + * at a true 100% would sit past the furthest year the slider can select. + * + * And the step widens on long spans. Eight labels on a phone track collide; + * the rule below keeps at most eight, which is where a 10px label still has + * clear air around it on a ~300px track. + */ +var YEAR_SCALE_THUMB_PX = 32; +var YEAR_SCALE_MAX_MARKS = 8; + +export function renderYearScale(lo, hi) { + var scale = document.getElementById('year-scale'); + if (!scale) return; + + scale.textContent = ''; + if (!isFinite(lo) || !isFinite(hi) || hi <= lo) return; + + // Widen from decades to 20- or 50-year steps rather than letting labels + // pile up on a narrow track. + var step = 10; + while ((hi - lo) / step > YEAR_SCALE_MAX_MARKS) { + step = step === 10 ? 20 : step * 2.5; + } + + var half = YEAR_SCALE_THUMB_PX / 2; + var first = Math.ceil(lo / step) * step; + + var years = []; + for (var y = first; y <= hi; y += step) years.push(y); + + // Two digits with an apostrophe: language-neutral, so this needs no + // translation, and narrow enough that eight fit on a phone. But a span + // crossing a century renders '00 twice — 1900 and 2000 collide — so the + // short form is only used while it stays unambiguous. + var short = years.map(function (v) { return v % 100; }); + var ambiguous = short.some(function (v, i) { return short.indexOf(v) !== i; }); + + years.forEach(function (year) { + var pct = (year - lo) / (hi - lo); + var mark = document.createElement('span'); + mark.textContent = ambiguous + ? String(year) + : "'" + String(year % 100).padStart(2, '0'); + mark.style.left = 'calc(' + half + 'px + ' + pct + ' * (100% - ' + YEAR_SCALE_THUMB_PX + 'px))'; + scale.appendChild(mark); + }); +} + export function applyYearRange(range) { var slider = document.getElementById('year-slider'); if (!slider || !range) return; @@ -97,6 +161,10 @@ export function applyYearRange(range) { var yearDisplay = document.getElementById('selected-year'); if (yearDisplay) yearDisplay.textContent = String(clamped); } + + // #2344: the scale is derived from the same span, so it is rebuilt here + // and nowhere else — one source for the bounds, one for the marks. + renderYearScale(lo, hi); } /** diff --git a/custom_components/beatify/www/js/player.bundle.min.js b/custom_components/beatify/www/js/player.bundle.min.js index 69da00e4..1f5c92c9 100644 --- a/custom_components/beatify/www/js/player.bundle.min.js +++ b/custom_components/beatify/www/js/player.bundle.min.js @@ -1,4 +1,4 @@ -var M=null,P={uri:null,songTitle:"",songArtist:"",current:null,candidates:[],busy:!1};function H(e,t){return window.BeatifyI18n&&window.BeatifyI18n.t(e)||t}function O(e){return String(e??"").replace(/[&<>"']/g,t=>({"&":"&","<":"<",">":">",'"':""","'":"'"})[t])}function Nn(e,t){return window.BeatifyAuth?window.BeatifyAuth.fetch(e,t):fetch(e,t)}function Br(){return M||(M=document.createElement("div"),M.className="cd-fix-overlay hidden",M.setAttribute("role","dialog"),M.setAttribute("aria-modal","true"),M.innerHTML=` +var M=null,P={uri:null,songTitle:"",songArtist:"",current:null,candidates:[],busy:!1};function H(e,t){return window.BeatifyI18n&&window.BeatifyI18n.t(e)||t}function O(e){return String(e??"").replace(/[&<>"']/g,t=>({"&":"&","<":"<",">":">",'"':""","'":"'"})[t])}function Nn(e,t){return window.BeatifyAuth?window.BeatifyAuth.fetch(e,t):fetch(e,t)}function Cr(){return M||(M=document.createElement("div"),M.className="cd-fix-overlay hidden",M.setAttribute("role","dialog"),M.setAttribute("aria-modal","true"),M.innerHTML=`

${O(H("admin.library.fixTitle","Fix this song"))}

@@ -27,7 +27,7 @@ var M=null,P={uri:null,songTitle:"",songArtist:"",current:null,candidates:[],bus

-
`,document.body.appendChild(M),M.addEventListener("click",e=>{(e.target===M||e.target.closest('[data-cd="close"]'))&&qt()}),M.querySelector('[data-cd="search"]').addEventListener("click",()=>Rn()),M.querySelector('[data-cd="save"]').addEventListener("click",()=>On({})),document.addEventListener("keydown",e=>{e.key==="Escape"&&M&&!M.classList.contains("hidden")&&qt()}),M)}function $(e,t){let n=M&&M.querySelector('[data-cd="status"]');n&&(n.textContent=e||"",n.classList.toggle("cd-fix-status--error",!!t))}function qt(){M&&M.classList.add("hidden"),P={uri:null,songTitle:"",songArtist:"",current:null,candidates:[],busy:!1}}function Mn(){let e=M.querySelector('[data-cd="current"]'),t=P.current||{},n=t.year_source?H("admin.library.fixSourceLabel","source: {s}").replace("{s}",t.year_source):"",a=`${O(t.artist)} \u2014 ${O(t.title)}`;if(t.album&&(a+=`
${O(t.album)}`),a+=`
${O(H("admin.library.fixCurrentYear","Currently"))}: ${O(t.year||"\u2014")}`,n&&(a+=` (${O(n)})`),t.corrected&&(a+=`
${O(H("admin.library.fixAlready","You already corrected this song."))}`),t.original_title||t.original_artist){let i=`${t.original_artist||t.artist} \u2014 ${t.original_title||t.title}`;a+=`
${O(H("admin.library.fixWasTagged","Tagged as"))}: ${O(i)}`}e.innerHTML=a}function Cr(){let e=M.querySelector('[data-cd="results"]');if(!P.candidates.length){e.innerHTML=`

${O(H("admin.library.fixNoMatches","No matches found. Try correcting the artist or title, or set the year yourself."))}

`;return}e.innerHTML=P.candidates.map((t,n)=>` +
`,document.body.appendChild(M),M.addEventListener("click",e=>{(e.target===M||e.target.closest('[data-cd="close"]'))&&qt()}),M.querySelector('[data-cd="search"]').addEventListener("click",()=>Rn()),M.querySelector('[data-cd="save"]').addEventListener("click",()=>On({})),document.addEventListener("keydown",e=>{e.key==="Escape"&&M&&!M.classList.contains("hidden")&&qt()}),M)}function $(e,t){let n=M&&M.querySelector('[data-cd="status"]');n&&(n.textContent=e||"",n.classList.toggle("cd-fix-status--error",!!t))}function qt(){M&&M.classList.add("hidden"),P={uri:null,songTitle:"",songArtist:"",current:null,candidates:[],busy:!1}}function Mn(){let e=M.querySelector('[data-cd="current"]'),t=P.current||{},n=t.year_source?H("admin.library.fixSourceLabel","source: {s}").replace("{s}",t.year_source):"",a=`${O(t.artist)} \u2014 ${O(t.title)}`;if(t.album&&(a+=`
${O(t.album)}`),a+=`
${O(H("admin.library.fixCurrentYear","Currently"))}: ${O(t.year||"\u2014")}`,n&&(a+=` (${O(n)})`),t.corrected&&(a+=`
${O(H("admin.library.fixAlready","You already corrected this song."))}`),t.original_title||t.original_artist){let i=`${t.original_artist||t.artist} \u2014 ${t.original_title||t.title}`;a+=`
${O(H("admin.library.fixWasTagged","Tagged as"))}: ${O(i)}`}e.innerHTML=a}function kr(){let e=M.querySelector('[data-cd="results"]');if(!P.candidates.length){e.innerHTML=`

${O(H("admin.library.fixNoMatches","No matches found. Try correcting the artist or title, or set the year yourself."))}

`;return}e.innerHTML=P.candidates.map((t,n)=>` `).join(""),e.querySelectorAll("[data-cd-pick]").forEach(t=>{t.addEventListener("click",()=>{let n=P.candidates[Number(t.dataset.cdPick)];n&&On({year:n.year,title:n.title,artist:n.artist})})})}async function Rn(){if(!P.busy){P.busy=!0,$(H("admin.library.fixSearching","Searching MusicBrainz\u2026"));try{let e=await Nn("/beatify/api/library-pool/lookup",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({uri:P.uri,song_title:P.songTitle,song_artist:P.songArtist,artist:M.querySelector('[data-cd="artist"]').value,title:M.querySelector('[data-cd="title"]').value})}),t=await e.json().catch(()=>({}));if(!e.ok){$(t.error||H("admin.library.fixFailed","Lookup failed."),!0);return}P.current=t.current||P.current,P.candidates=t.candidates||[],Mn(),Cr(),$("")}catch{$(H("admin.library.fixFailed","Lookup failed."),!0)}finally{P.busy=!1}}}async function On({year:e,title:t,artist:n}){if(P.busy)return;let a=M.querySelector('[data-cd="year"]').value,i={uri:P.uri,song_title:P.songTitle,song_artist:P.songArtist};if(e!=null?i.year=e:a!==""&&(i.year=Number(a)),t&&(i.title=t),n&&(i.artist=n),i.year==null&&!i.title&&!i.artist){$(H("admin.library.fixNothing","Pick a match or enter a year first."),!0);return}P.busy=!0,$(H("admin.library.fixSaving","Saving\u2026"));try{let r=await Nn("/beatify/api/library-pool/correct",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(i)}),o=await r.json().catch(()=>({}));if(!r.ok){$(o.error||H("admin.library.fixFailed","Could not save."),!0);return}$(H("admin.library.fixSaved","Saved \u2014 future games will use your correction.")),setTimeout(qt,1200)}catch{$(H("admin.library.fixFailed","Could not save."),!0)}finally{P.busy=!1}}function kr(e){if(!e||!e.uri&&!e.title)return;let t=Br();P={uri:e.uri||null,songTitle:e.title||"",songArtist:e.artist||"",current:e,candidates:[],busy:!1},t.querySelector('[data-cd="artist"]').value=e.artist||"",t.querySelector('[data-cd="title"]').value=e.title||"",t.querySelector('[data-cd="year"]').value="",t.querySelector('[data-cd="results"]').innerHTML="",Mn(),$(""),t.classList.remove("hidden"),Rn()}typeof window<"u"&&(window.BeatifyCrateDiggerFix={open:kr});var Gt=window.BeatifyUtils||{},s={ws:null,playerName:null,isAdmin:!1,reconnectAttempts:0,isReconnecting:!1,intentionalLeave:!1,hasReactedThisPhase:!1,currentRoundNumber:0,joinTimeoutId:null,gameId:new URLSearchParams(window.location.search).get("game"),connectWithSession:null,connectWebSocket:null},Ar=document.getElementById("loading-view"),Tr=document.getElementById("starting-view"),Nr=document.getElementById("not-found-view"),Mr=document.getElementById("ended-view"),Rr=document.getElementById("in-progress-view"),Or=document.getElementById("join-view"),Dr=document.getElementById("tour-view"),Pr=document.getElementById("ready-view"),Hr=document.getElementById("lobby-view"),Fr=document.getElementById("game-view"),qr=document.getElementById("reveal-view"),Gr=document.getElementById("paused-view"),Wr=document.getElementById("end-view"),Ur=document.getElementById("connection-lost-view"),Vr=document.getElementById("session-takeover-view"),jr=[Ar,Tr,Nr,Mr,Rr,Or,Dr,Pr,Hr,Fr,qr,Gr,Wr,Ur,Vr];function B(e){Gt.showView(jr,e);var t=e==="tour-view"||e==="ready-view",n=e==="game-view"||e==="reveal-view";document.body&&(document.body.classList.toggle("is-learning-screen",t),document.body.classList.toggle("is-ingame",n)),(e==="join-view"||e==="loading-view"||e==="not-found-view"||e==="ended-view"||e==="in-progress-view"||e==="connection-lost-view"||e==="session-takeover-view")&&he("calm"),e==="join-view"&&setTimeout(function(){var a=document.getElementById("name-input");a&&a.focus()},100)}function K(e,t){var n=t||{},a=n.contentSelector||".modal-content",i=e&&e.ownerDocument||(typeof document<"u"?document:null),r=null,o=null,l=null,c='button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])';function d(){var v=e&&e.querySelector(a)||e;if(!v||!v.querySelectorAll)return[];var p=v.querySelectorAll(c);return Array.prototype.filter.call(p,function(h){return!h.disabled&&h.getAttribute("aria-hidden")!=="true"})}function f(v){if(v.key==="Escape"||v.key==="Esc"){typeof l=="function"&&(v.preventDefault&&v.preventDefault(),l());return}if(v.key==="Tab"){var p=d();if(p.length===0){v.preventDefault&&v.preventDefault();return}var h=p[0],b=p[p.length-1],w=i?i.activeElement:null,S=Array.prototype.indexOf.call(p,w);v.shiftKey?S<=0&&(v.preventDefault&&v.preventDefault(),b.focus()):(S===-1||S===p.length-1)&&(v.preventDefault&&v.preventDefault(),h.focus())}}function u(v){v=v||{},l=typeof v.onEscape=="function"?v.onEscape:null,r=i?i.activeElement:null;var p=d(),h=v.initialFocus||p[0];h&&typeof h.focus=="function"&&h.focus(),o=f,i&&i.addEventListener&&i.addEventListener("keydown",o,!0)}function m(){o&&i&&i.removeEventListener&&i.removeEventListener("keydown",o,!0),o=null,l=null,r&&typeof r.focus=="function"&&r.focus(),r=null}return{activate:u,deactivate:m}}function be(e,t,n,a){return new Promise(function(i){var r=document.getElementById("confirm-modal"),o=document.getElementById("confirm-modal-title"),l=document.getElementById("confirm-modal-message"),c=document.getElementById("confirm-modal-yes"),d=document.getElementById("confirm-modal-no");if(!r||!o||!l||!c||!d){i(confirm(t||e));return}o.textContent=e,l.textContent=t,c.textContent=n||Gt.t("common.confirm")||"Confirm",d.textContent=a||Gt.t("common.cancel")||"Cancel";var f=r.querySelector(".modal-backdrop"),u=K(r);r.classList.remove("hidden"),u.activate({initialFocus:d,onEscape:p});function m(){r.classList.add("hidden"),c.removeEventListener("click",v),d.removeEventListener("click",p),f&&f.removeEventListener("click",p),u.deactivate()}function v(){m(),i(!0)}function p(){m(),i(!1)}c.addEventListener("click",v),d.addEventListener("click",p),f&&f.addEventListener("click",p)})}function y(e){var t=document.createElement("div");return t.textContent=e,t.innerHTML}function Je(e){return!!(e&&e.title_artist_mode)}function zr(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}function Yr(e){return 1-Math.pow(1-e,4)}function Ut(e,t,n,a,i){if(zr()||t===n)return e.textContent=n,{cancel:function(){},skipToEnd:function(){e.textContent=n}};var r=Te.getQualitySettings();if(r.scoreDuration===0)return e.textContent=n,{cancel:function(){},skipToEnd:function(){e.textContent=n}};var o=Math.min(a,r.scoreDuration||a);i=i||Yr;var l=null,c=null,d=!1,f=n;function u(m){if(!d){l||(l=m);var v=m-l,p=Math.min(v/o,1),h=i(p),b=Math.round(t+(f-t)*h);e.textContent=b,p<1&&(c=requestAnimationFrame(u))}}return c=requestAnimationFrame(u),{cancel:function(){d=!0,c&&cancelAnimationFrame(c)},skipToEnd:function(){d=!0,c&&cancelAnimationFrame(c),e.textContent=f}}}var ne={players:{},leaderboard:[],initialized:!1};function Pn(){return ne.initialized}function Hn(e){var t=e.map(function(a){return a.name}),n={};return t.forEach(function(a,i){var r=ne.leaderboard.indexOf(a);r===-1?n[a]="new":ir&&(n[a]="down")}),n}function bt(e,t){ne.players={},e.forEach(function(n){ne.players[n.name]={score:n.score,rank:n.rank||0,streak:n.streak||0}}),t&&(ne.leaderboard=t.map(function(n){return n.name})),ne.initialized=!0}var Te=(function(){var e=window.matchMedia("(prefers-reduced-motion: reduce)"),t=e.matches;e.addEventListener("change",function(i){t=i.matches});var n=null;function a(){if(n!==null)return n;var i=navigator.hardwareConcurrency||2,r=navigator.deviceMemory||4,o=/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream;return i<=2||r<=2?n="low":i<=4||r<=4||o?n="medium":n="high",n}return a(),{prefersReducedMotion:function(){return t},getDeviceTier:a,getQualitySettings:function(){var i=a();if(t)return{confettiParticles:0,scoreDuration:0,leaderboardAnimation:"none",neonGlow:!1,enableAnimations:!1};switch(i){case"low":return{confettiParticles:5,scoreDuration:0,leaderboardAnimation:"none",neonGlow:!1,enableAnimations:!0};case"medium":return{confettiParticles:10,scoreDuration:300,leaderboardAnimation:"simplified",neonGlow:!1,enableAnimations:!0};default:return{confettiParticles:15,scoreDuration:500,leaderboardAnimation:"full",neonGlow:!0,enableAnimations:!0}}},ifMotionAllowed:function(i,r){t?r&&r():i()},withWillChange:function(i,r,o){i&&(i.style.willChange=r,setTimeout(function(){i&&i.style&&(i.style.willChange="auto")},(o||500)+100))}}})(),Re=(function(){var e=[],t=!1,n=null,a=null,i=2e3;function r(){if(a&&(clearTimeout(a),a=null),e.length===0){t=!1,n=null;return}n=e.shift(),a=setTimeout(function(){n&&n.skipToEnd&&n.skipToEnd(),r()},i),n.run(function(){a&&(clearTimeout(a),a=null),r()})}return{add:function(o){e.push(o),t||(t=!0,r())},skipAll:function(){a&&(clearTimeout(a),a=null),n&&n.skipToEnd&&n.skipToEnd(),e.forEach(function(o){o.skipToEnd&&o.skipToEnd()}),e=[],t=!1,n=null},clear:function(){a&&(clearTimeout(a),a=null),e=[],t=!1,n=null},isRunning:function(){return t},getMaxDuration:function(){return i}}})(),Me={VISIBLE_BUFFER:2,ENTRY_HEIGHT:48,MIN_PLAYERS_FOR_LAZY:10,ROOT_MARGIN:"96px 0px",DEFAULT_VIEWPORT_HEIGHT:280},I={observer:null,fullData:[],visibleRange:{start:0,end:10},listEl:null,isLazyEnabled:!1};function Fn(e){e&&(I.observer&&I.listEl!==e&&(I.observer.disconnect(),I.observer=null),!I.observer&&(I.listEl=e,I.observer=new IntersectionObserver(function(t){t.forEach(function(n){if(!(!n.isIntersecting||!I.isLazyEnabled)){var a=I.fullData,i=I.visibleRange,r=Me.VISIBLE_BUFFER;if(n.target.classList.contains("leaderboard-sentinel--top")){if(i.start>0){var o=Math.max(0,i.start-r);I.visibleRange.start=o,Ye()}}else if(n.target.classList.contains("leaderboard-sentinel--bottom")&&i.end0&&(l+='
'),l+='
';for(var c=n.start;c',r>0&&(l+='
'),e.innerHTML=l,e.scrollTop=o,I.observer){var d=e.querySelectorAll(".leaderboard-sentinel");d.forEach(function(f){I.observer.observe(f)})}}}function Vt(e){if(!e)return"";if(e.separator)return'
...
';var t=e.name||"Unknown",n=e.rank||0,a=e.score||0,i=n<=3?"is-top-"+n:"",r=e.is_current?"is-current":"",o="";e.rank_change>0||e._rankChange==="up"?o="leaderboard-entry--climbing leaderboard-entry--slide-up":(e.rank_change<0||e._rankChange==="down")&&(o="leaderboard-entry--falling leaderboard-entry--slide-down");var l="";e.rank_change>0?l='\u25B2'+e.rank_change+"":e.rank_change<0&&(l='\u25BC'+Math.abs(e.rank_change)+"");var c="";if(e.streak>=2){var d=e.streak>=5?"streak-indicator--hot":"";c='\u{1F525}'+e.streak+""}var f=e.connected===!1?"leaderboard-entry--disconnected":"",u=e.connected===!1?'(away)':"",m=e._displayScore!==void 0?e._displayScore:a;return'
#'+n+''+y(t)+u+''+m+"
"}function jt(e,t){for(var n=Me,a=I.listEl&&I.listEl.clientHeight||n.DEFAULT_VIEWPORT_HEIGHT,i=Math.ceil(a/n.ENTRY_HEIGHT),r=n.VISIBLE_BUFFER,o=-1,l=0;l=e.length-i?(c=Math.max(0,e.length-i-r),d=e.length):(c=Math.max(0,o-Math.floor(i/2)-r),d=Math.min(e.length,o+Math.ceil(i/2)+r)),{start:c,end:d}}function qn(){I.observer&&(I.observer.disconnect(),I.observer=null),I.isLazyEnabled=!1,I.fullData=[]}function Gn(){var e;function t(){clearTimeout(e),e=setTimeout(function(){I.isLazyEnabled&&I.fullData.length>0&&(I.visibleRange=jt(I.fullData,s.playerName),Ye())},150)}window.addEventListener("resize",t),window.addEventListener("orientationchange",t)}function Wn(){var e=document.getElementById("qr-share-area");if(!(!e||e.tagName!=="DETAILS")){var t="beatify_qr_expanded",n=768,a=sessionStorage.getItem(t);a!==null?e.open=a==="true":e.open=window.innerWidth>=n,e.addEventListener("toggle",function(){sessionStorage.setItem(t,e.open.toString())})}}function Un(){var e=document.querySelectorAll(".lobby-container--compact .section-header-collapsible");e.forEach(function(t){t.addEventListener("click",function(){var n=t.closest(".section-collapsible");if(n){var a=n.classList.contains("collapsed");n.classList.toggle("collapsed"),t.setAttribute("aria-expanded",a?"true":"false")}})})}var Vn={ITEM_HEIGHT:60,OVERSCAN:3,THRESHOLD:15,CONTAINER_HEIGHT:320},x={container:null,items:[],scrollTop:0,isVirtual:!1,topSpacer:null,bottomSpacer:null,contentWrapper:null,scrollHandler:null,resizeHandler:null};function jn(e){if(e){x.container=e;var t=!1;x.scrollHandler=function(){x.scrollTop=e.scrollTop,t||(requestAnimationFrame(function(){Wt(),t=!1}),t=!0)};var n;x.resizeHandler=function(){clearTimeout(n),n=setTimeout(function(){x.isVirtual&&Wt()},100)},e.addEventListener("scroll",x.scrollHandler,{passive:!0}),window.addEventListener("resize",x.resizeHandler)}}function zn(e,t){x.items=e,x.renderItem=t;var n=x.container;if(n){var a=n.scrollTop,i=x.isVirtual;e.length0&&(n.scrollTop=a,x.scrollTop=a)}}function Jr(){var e=x.container;if(e){e.innerHTML="";var t=document.createElement("div");t.className="virtual-spacer-top",x.topSpacer=t;var n=document.createElement("div");n.className="virtual-content-wrapper",x.contentWrapper=n;var a=document.createElement("div");a.className="virtual-spacer-bottom",x.bottomSpacer=a,e.appendChild(t),e.appendChild(n),e.appendChild(a)}}function Wt(){var e=Vn,t=x.items,n=x.container,a=x.contentWrapper;if(!(!n||!a||!t.length)){var i=n.clientHeight||e.CONTAINER_HEIGHT,r=x.scrollTop,o=e.ITEM_HEIGHT,l=e.OVERSCAN,c=Math.max(0,Math.floor(r/o)-l),d=Math.min(t.length,Math.ceil((r+i)/o)+l);x.topSpacer&&(x.topSpacer.style.height=c*o+"px"),x.bottomSpacer&&(x.bottomSpacer.style.height=(t.length-d)*o+"px");for(var f="",u=c;u"u"){console.warn("[Confetti] Library not loaded");return}ae();var t=Te.getQualitySettings(),n=t.confettiParticles;if(n===0){Dn();return}var a=Te.getDeviceTier(),i=a==="low"?.5:a==="medium"?.75:1;switch(e=e||"exact",e){case"exact":var r=Math.round(2e3*i),o=Date.now()+r;(function v(){confetti({particleCount:n,spread:70,origin:{y:.6},colors:["#FFD700","#FFA500","#FFEC8B"]}),Date.now()0);var l=e.slice().sort(function(p,h){return p.connected!==h.connected?p.connected?-1:1:0}),c=$n.map(function(p){return p.name}),d=l.filter(function(p){return c.indexOf(p.name)===-1}).map(function(p){return p.name});x.container||jn(t);var f=["c1","c2","c3","c4"],u={},m=0;l.forEach(function(p){p.is_admin?u[p.name]="host":u[p.name]=f[m++%f.length]});var v=function(p){var h=d.indexOf(p.name)!==-1,b=p.name===s.playerName,w=p.is_admin===!0,S=p.connected===!1,_=u[p.name]||"c1",C=["player-tile","player-tile--"+_];h&&C.push("is-new"),S&&C.push("player-tile--disconnected");var L=(p.name||"?").trim(),U=(L.charAt(0)||"?").toUpperCase(),W="";w?W='':b&&(W='YOU');var N=S?''+y(re.t("lobby.away"))+"":"";return'
'+y(U)+''+y(L)+""+W+N+"
"};zn(l,v),setTimeout(function(){var p=x.isVirtual?x.contentWrapper:t;if(p)for(var h=p.querySelectorAll(".is-new"),b=0;b5),t.classList.toggle("timer-neon-ring--critical",e<=5)}}}var Zr=250,ei=400,Pe=null;function da(){Pe!==null&&typeof cancelAnimationFrame=="function"&&cancelAnimationFrame(Pe),Pe=null}function ti(e){var t=1-e;return 1-t*t*t}function Qt(e,t){var n=typeof t=="number"&&isFinite(t)?Date.now()+t*1e3:e;if(Ke!==null&&se!==null&&typeof requestAnimationFrame=="function"){var a=Math.abs(n-se);if(a<=Zr){se=n;return}if(ni(n))return}Ee();var i=document.getElementById("timer");if(!i)return;var r=document.getElementById("timer-neon"),o=document.getElementById("timer-float"),l=document.getElementById("timer-float-num");i.classList.remove("timer--warning","timer--critical"),r&&r.classList.remove("timer-neon--warn","timer-neon-ring--warn","timer-neon-ring--critical"),o&&o.classList.remove("timer-float--warn"),$t=Math.max(1,Math.ceil((n-Date.now())/1e3)),ai(r,o),se=n;var c=0;function d(){var f=Date.now(),u=Math.max(0,Math.ceil((se-f)/1e3));if(i.textContent=u,l&&(l.textContent=u),u<=5?(i.classList.remove("timer--warning"),i.classList.add("timer--critical")):u<=10?(i.classList.remove("timer--critical"),i.classList.add("timer--warning")):i.classList.remove("timer--warning","timer--critical"),r&&r.classList.toggle("timer-neon--warn",u<=10),o&&o.classList.toggle("timer-float--warn",u<=10),la(u),u===10||u===5||u===0){var m=document.getElementById("timer-announcer");if(m){var v=Yt.t?Yt.t.bind(Yt):function(p,h){return h&&typeof h.count<"u"?h.count+" seconds remaining":"Time's up!"};m.textContent=u===0?v("errors.timesUp","Time's up!"):v("errors.secondsRemaining",{count:u})}}u<=0&&(c+=1,(c===1||c%3===0)&&s.ws&&s.ws.readyState===WebSocket.OPEN&&s.ws.send(JSON.stringify({type:"round_timeout"})))}d(),Ke=setInterval(d,1e3)}function oa(e){var t=document.getElementById("timer");if(!t)return!1;var n=document.getElementById("timer-neon"),a=document.getElementById("timer-float"),i=document.getElementById("timer-float-num");return t.textContent=e,i&&(i.textContent=e),e<=5?(t.classList.remove("timer--warning"),t.classList.add("timer--critical")):e<=10?(t.classList.remove("timer--critical"),t.classList.add("timer--warning")):t.classList.remove("timer--warning","timer--critical"),n&&n.classList.toggle("timer-neon--warn",e<=10),a&&a.classList.toggle("timer-float--warn",e<=10),la(e),!0}function ni(e){var t=document.getElementById("timer-neon");if(!document.getElementById("timer"))return!1;var n=se,a=Date.now();da(),t&&t.classList.add("timer-neon--catchup");function i(){var r=Date.now()-a,o=r/ei;if(o>=1){se=e,oa(Math.max(0,Math.ceil((e-Date.now())/1e3))),t&&t.classList.remove("timer-neon--catchup"),Pe=null;return}var l=n+(e-n)*ti(o);se=l,oa(Math.max(0,Math.ceil((l-Date.now())/1e3))),Pe=requestAnimationFrame(i)}return Pe=requestAnimationFrame(i),!0}var le=null,Jt=null;function ai(e,t){if(!(!t||!e)){if(typeof IntersectionObserver>"u"){t.classList.remove("hidden"),t.classList.add("timer-float--visible");return}le&&Jt===e||(le&&le.disconnect(),le=new IntersectionObserver(function(n){var a=n[0];a&&(a.isIntersecting?(t.classList.add("hidden"),t.classList.remove("timer-float--visible")):(t.classList.remove("hidden"),t.classList.add("timer-float--visible")))},{threshold:.1}),le.observe(e),Jt=e)}}function Ee(){Ke&&(clearInterval(Ke),Ke=null),da(),se=null,$t=null;var e=document.getElementById("timer-neon");if(e){e.classList.remove("timer-neon--catchup","timer-neon-ring--warn","timer-neon-ring--critical");var t=e.querySelector(".timer-neon-ring-fg");t&&(t.style.strokeDashoffset="0")}var n=document.getElementById("timer-float");n&&(n.classList.add("hidden"),n.classList.remove("timer-float--visible","timer-float--warn")),le&&(le.disconnect(),le=null,Jt=null)}var ce=window.BeatifyUtils||{},we=!1,de=null,Lt=null,ri=300,ca=0;function Zt(e,t){var n=document.getElementById("artist-challenge-container");if(n){if(!e||!e.options){n.classList.add("hidden");return}n.classList.remove("hidden");var a=document.getElementById("artist-options"),i=document.getElementById("artist-result"),r=Array.from(a.querySelectorAll(".artist-option-btn")).map(function(f){return f.dataset.artist}),o=e.options;if(JSON.stringify(r)!==JSON.stringify(o)&&(a.innerHTML="",o.forEach(function(f,u){var m=document.createElement("button");m.className="artist-option-btn",m.dataset.artist=f,m.dataset.index=u,m.textContent=f,m.addEventListener("click",function(){ii(f)}),a.appendChild(m)})),e.winner){var l=a.querySelectorAll(".artist-option-btn");if(l.forEach(function(f){f.classList.add("is-disabled"),f.classList.remove("is-loading","is-wrong");var u=e.correct_artist||Lt;u&&f.dataset.artist===u&&f.classList.add("is-winner")}),e.winner===s.playerName){var c=e.bonus_points||5;i.textContent=(ce.t("artistChallenge.youGotIt")||"You got it! +{points} points").replace("{points}",c),i.className="artist-result is-winner"}else{var d=(ce.t("artistChallenge.someoneBeatYou")||"{winner} got it first!").replace("{winner}",e.winner);i.textContent=d,i.className="artist-result is-late"}i.classList.remove("hidden"),we=!0}else we||i.classList.add("hidden")}}function ii(e){var t=Date.now();if(!(t-ca0;if(t&&(t.classList.remove("is-loading"),t.classList.add("is-correct"),n)){var a=document.createElement("span");a.className="movie-rank-badge",a.textContent="+"+e.bonus,t.appendChild(a)}an();var i;n?i=(He.t("movieChallenge.youGotIt")||"Correct! +{bonus} points").replace("{bonus}",e.bonus):i=He.t("movieChallenge.someoneFaster")||"Correct, but someone was faster",rn(i,n),Fe=!0}else t&&(t.classList.remove("is-loading"),t.classList.add("is-wrong","is-selected")),an(),rn(He.t("movieChallenge.wrongGuess")||"Not quite...",!1),Fe=!0;qe=null}function an(){document.querySelectorAll(".movie-option-btn").forEach(function(e){e.classList.add("is-disabled"),e.classList.remove("is-loading")})}function rn(e,t){var n=document.getElementById("movie-result");n&&(n.textContent=e,n.className="movie-result "+(t?"is-winner":"is-late"),n.classList.remove("hidden"))}function ln(){Fe=!1,qe=null;var e=document.getElementById("movie-challenge-container");e&&e.classList.add("hidden");var t=document.getElementById("movie-options");t&&(t.innerHTML="");var n=document.getElementById("movie-result");n&&(n.classList.add("hidden"),n.className="movie-result hidden")}function dn(e,t){var n=document.getElementById("movie-reveal-section");if(n){if(!e||!e.correct_movie){n.classList.add("hidden");return}n.classList.remove("hidden");var a=document.getElementById("movie-reveal-name");a&&(a.textContent=e.correct_movie);var i=document.getElementById("movie-reveal-winners");if(i&&e.results){var r=e.results.winners||[];if(r.length>0){i.innerHTML="",i.classList.remove("hidden");var o=document.createElement("div");o.className="movie-reveal-winners-title",o.textContent=He.t("movieChallenge.winnersTitle")||"Movie Quiz Winners",i.appendChild(o),r.forEach(function(c){var d=document.createElement("div");d.className="movie-reveal-winner-entry",c.name===t?d.classList.add("is-you"):d.classList.add("is-other"),d.textContent=c.name+" \u2014 +"+c.bonus+" ("+c.time+"s)",i.appendChild(d)})}else{i.innerHTML="",i.classList.remove("hidden");var l=document.createElement("div");l.className="movie-reveal-no-winner",l.textContent=He.t("movieChallenge.noWinner")||"No one guessed the movie",i.appendChild(l)}}}}var fa="beatify-toast-container",li=4e3;function ma(e,t){try{if(window.BeatifyI18n&&typeof window.BeatifyI18n.t=="function"){var n=window.BeatifyI18n.t(e);if(n&&n!==e)return n}}catch{}return t}function di(){var e=document.getElementById(fa);return e||(e=document.createElement("div"),e.id=fa,e.className="beatify-toast-container",e.setAttribute("aria-live","polite"),e.setAttribute("aria-atomic","false"),document.body.appendChild(e)),e}function Le(e,t){if(t=t||{},!e)return null;var n=di(),a=typeof t.duration=="number"?t.duration:li,i=t.type||"error",r=document.createElement("div");r.className="beatify-toast beatify-toast--"+i,r.setAttribute("role","status");var o=document.createElement("div");if(o.className="beatify-toast-body",t.icon!==null){var l=document.createElement("span");l.className="beatify-toast-icon",l.setAttribute("aria-hidden","true"),l.textContent=t.icon||(i==="success"?"\u2705":i==="info"?"\u2139\uFE0F":"\u26A0\uFE0F"),o.appendChild(l)}var c=document.createElement("span");c.className="beatify-toast-text",c.textContent=String(e),o.appendChild(c),r.appendChild(o);var d=document.createElement("button");if(d.type="button",d.className="beatify-toast-close",d.setAttribute("aria-label",ma("common.close","Dismiss")),d.textContent="\xD7",r.appendChild(d),a>0){var f=document.createElement("div");f.className="beatify-toast-progress",f.style.animationDuration=a+"ms",r.appendChild(f)}n.appendChild(r),typeof requestAnimationFrame=="function"?requestAnimationFrame(function(){r.classList.add("beatify-toast--in")}):r.classList.add("beatify-toast--in");var u=!1,m=null;function v(){u||(u=!0,m&&clearTimeout(m),r.classList.remove("beatify-toast--in"),r.classList.add("beatify-toast--leaving"),setTimeout(function(){r.parentNode&&r.parentNode.removeChild(r)},280))}return d.addEventListener("click",v),a>0&&(m=setTimeout(v,a)),r}function ci(e,t){if(t=t||{},!e)return null;var n=t.anchor;typeof n=="string"&&(n=document.getElementById(n));var a=t.parent;if(typeof a=="string"&&(a=document.getElementById(a)),a||(a=n?n.parentNode:null),!a)return null;var i=t.id||"beatify-banner",r=document.getElementById(i);r&&r.parentNode&&r.parentNode.removeChild(r);var o=document.createElement("div");o.id=i,o.className="beatify-banner beatify-banner--"+(t.type||"error"),o.setAttribute("role","alert");var l=document.createElement("span");l.className="beatify-banner-icon",l.setAttribute("aria-hidden","true"),l.textContent=t.icon||"\u26D4",o.appendChild(l);var c=document.createElement("div");if(c.className="beatify-banner-content",t.title){var d=document.createElement("div");d.className="beatify-banner-title",d.textContent=String(t.title),c.appendChild(d)}var f=document.createElement("div");if(f.className="beatify-banner-text",f.textContent=String(e),c.appendChild(f),t.detail&&String(t.detail)!==String(e)){var u=document.createElement("div");u.className="beatify-banner-detail",u.textContent=String(t.detail),c.appendChild(u)}if(t.action&&t.action.label&&typeof t.action.onClick=="function"){var m=document.createElement("button");m.type="button",m.className="beatify-banner-action",m.textContent=String(t.action.label),m.addEventListener("click",function(){o.parentNode&&o.parentNode.removeChild(o),t.action.onClick()}),c.appendChild(m)}if(o.appendChild(c),t.dismissible!==!1){var v=document.createElement("button");v.type="button",v.className="beatify-banner-close",v.setAttribute("aria-label",ma("common.close","Dismiss")),v.textContent="\xD7",v.addEventListener("click",function(){o.parentNode&&o.parentNode.removeChild(o)}),o.appendChild(v)}return n&&n.parentNode===a?a.insertBefore(o,n):a.appendChild(o),o}function ui(e){var t=document.getElementById(e||"beatify-banner");t&&t.parentNode&&t.parentNode.removeChild(t)}try{window.BeatifyNotify={showToast:Le,showBanner:ci,clearBanner:ui}}catch{}var Xe=null,Ze=null,et=null,E=window.BeatifyUtils||{},fi=E.debug||function(){},un=[];function mi(e){var t=document.getElementById("year-slider");if(!(!t||!e)){var n=parseInt(e.min,10),a=parseInt(e.max,10);if(!(!isFinite(n)||!isFinite(a)||n>=a)){parseInt(t.min,10)!==n&&(t.min=String(n)),parseInt(t.max,10)!==a&&(t.max=String(a));var i=parseInt(t.value,10);if(!isFinite(i)||ia){var r=Math.max(n,Math.min(a,isFinite(i)?i:n));t.value=String(r);var o=document.getElementById("selected-year");o&&(o.textContent=String(r))}}}}function vi(e){if(!q){var t=wa(e&&e.players);!t||!t.submitted||st()}}function ha(e){mi(e.year_range),vi(e);var t=document.getElementById("current-round"),n=document.getElementById("total-rounds"),a=document.getElementById("last-round-banner");t&&(t.textContent=e.round||1),n&&(n.textContent=e.total_rounds||10),a&&(e.last_round?(a.classList.remove("hidden"),e.finale_double_active?(a.textContent=E.t("game.finaleDouble"),a.classList.add("arc-chip--finale")):(a.textContent=E.t("game.finalRound"),a.classList.remove("arc-chip--finale"))):a.classList.add("hidden"));var i=document.getElementById("closest-wins-badge");i&&(e.closest_wins_mode?i.classList.remove("hidden"):i.classList.add("hidden")),yi(e);var r=document.getElementById("intro-badge"),o=document.getElementById("intro-splash");if(r)if(e.is_intro_round){r.classList.remove("hidden");var l=r.querySelector("[data-i18n]");e.intro_stopped?(r.classList.add("intro-badge--stopped"),l&&(l.setAttribute("data-i18n","game.introStopped"),l.textContent=E.t("game.introStopped")||"Intro complete!")):(r.classList.remove("intro-badge--stopped"),l&&(l.setAttribute("data-i18n","game.introRound"),l.textContent=E.t("game.introRound")||"INTRO ROUND"),o&&!o._shown&&(o._shown=!0,o.classList.remove("hidden"),setTimeout(function(){o.classList.add("hidden")},2e3)))}else r.classList.add("hidden"),r.classList.remove("intro-badge--stopped"),o&&(o.classList.add("hidden"),o._shown=!1);var c=document.getElementById("album-cover"),d=document.getElementById("album-loading");if(c&&e.song){var f=e.song.album_art||"/beatify/static/img/no-artwork.svg";if(c._beatifyRequestedSrc!==f){c._beatifyRequestedSrc=f,d&&d.classList.remove("hidden"),c._beatifyOnLoad&&c.removeEventListener("load",c._beatifyOnLoad),c._beatifyOnError&&c.removeEventListener("error",c._beatifyOnError);var u=function(){d&&d.classList.add("hidden")},m=function(){c._beatifyRequestedSrc=null,c.src="/beatify/static/img/no-artwork.svg",d&&d.classList.add("hidden")};c._beatifyOnLoad=u,c._beatifyOnError=m,c.addEventListener("load",u,{once:!0}),c.addEventListener("error",m,{once:!0}),c.src=f}}bi(e),it(),gi(e),hi(e.players),e.leaderboard&&(un=e.leaderboard,Ei(e,"leaderboard-list")),ki(e.players),Ri(e.players),e.artist_challenge!==void 0&&Zt(e.artist_challenge,"PLAYING"),e.movie_challenge!==void 0&&sn(e.movie_challenge,"PLAYING"),Bi(e)}function Ea(e){if(e){var t=document.getElementById("album-cover"),n=document.getElementById("album-loading");if(t&&e.album_art){var a=e.album_art;if(t.src===a)return;t.style.transition="opacity 0.3s ease-in-out",t.style.opacity="0.5";var i=new Image;i.onload=function(){t.src=a,t.style.opacity="1",n&&n.classList.add("hidden")},i.onerror=function(){t.src="/beatify/static/img/no-artwork.svg",t.style.opacity="1",n&&n.classList.add("hidden")},i.src=a}fi("[Metadata] Updated:",e.artist,"-",e.title)}}function pi(e){if(!e)return"?";var t=e.trim();if(!t)return"?";var n=t.split(/[\s-]+/).filter(Boolean);return n.length>=2?(n[0][0]+n[1][0]).toUpperCase():t.slice(0,Math.min(2,t.length)).toUpperCase()}function it(){var e=document.getElementById("arc-chip-row");if(e){var t=["game-difficulty-badge","steal-indicator","sabotage-indicator","closest-wins-badge","intro-badge","last-round-banner"],n=t.some(function(a){var i=document.getElementById(a);return i&&!i.classList.contains("hidden")});e.classList.toggle("hidden",!n)}}function gi(e){var t=document.getElementById("no-bonus-filler");if(t){var n=!!(e&&e.artist_challenge&&e.artist_challenge.options),a=!!(e&&e.movie_challenge&&e.movie_challenge.options),i=Je(e);t.classList.toggle("hidden",n||a||i)}}var Se=!1;function wa(e){return!s.playerName||!e?null:e.find(function(t){return t.name===s.playerName})||null}function yi(e){var t=e&&e.bet_win_multiplier;if(!(typeof t!="number"||t<=0)){var n=document.getElementById("bet-toggle");if(n){var a=n.querySelector(".bet-label");a&&(a.removeAttribute("data-i18n"),a.textContent="\xD7"+t)}}}function bi(e){var t=document.getElementById("eliminated-view");if(t){var n=!!(e&&e.sudden_death_mode),a=wa(e&&e.players),i=n&&!!(a&&a.eliminated);Se=i;var r=[document.getElementById("year-selector-container"),document.getElementById("year-display-arc"),document.getElementById("bet-toggle"),document.getElementById("submit-btn"),document.getElementById("title-artist-container"),document.getElementById("submitted-banner")];if(i){r.forEach(function(u){u&&u.classList.add("hidden")}),t.classList.remove("hidden");var o=document.getElementById("album-cover"),l=document.getElementById("eliminated-album-cover");l&&o&&o.src&&(l.src=o.src);var c=document.getElementById("eliminated-sub");if(c){var d=a&&a.eliminated_round!=null?a.eliminated_round:e&&e.round||"";c.textContent=E.t("game.eliminatedRound",{round:d})||"Eliminated \xB7 Round "+d}hn()}else{r.forEach(function(u){u&&u.classList.remove("hidden")}),t.classList.add("hidden");var f=document.getElementById("submitted-banner");f&&!q&&f.classList.add("hidden")}}}function hi(e){var t=document.getElementById("submission-tracker"),n=document.getElementById("submitted-players"),a=document.getElementById("arc-submission-count");if(!(!t||!n)){var i=e||[],r=i.filter(function(m){return!m.eliminated}),o=r.filter(function(m){return m.submitted}).length,l=r.length,c=o===l&&l>0;t.classList.toggle("all-submitted",c),a&&(l===0?a.textContent="":c?a.textContent=E.t("game.allSubmitted")||"All in":a.textContent=E.t("game.submittedCount",{count:o,total:l})||o+" of "+l+" submitted");var d=document.getElementById("submitted-banner"),f=document.getElementById("submitted-banner-text");if(d&&f&&!d.classList.contains("hidden")){var u=Math.max(0,l-o);u===0?f.textContent=E.t("game.lockedInAllSubmitted")||"Locked in \xB7 everyone submitted":f.textContent=E.t("game.lockedInWaitingCount",{count:u})||"Locked in \xB7 waiting for "+u+" more"}n.innerHTML=i.map(function(m){var v=pi(m.name),p=m.name===s.playerName,h=m.connected===!1,b=!!m.eliminated,w=["player-indicator",m.submitted&&!b?"is-submitted":"",p?"is-current-player":"",h?"player-indicator--disconnected":"",b?"is-eliminated":""].filter(Boolean).join(" "),S="";if(b){var _=m.eliminated_round!=null?m.eliminated_round:"",C=E.t("game.outRound",{round:_})||"Out \xB7 R"+_;S+=''+y(C)+""}else m.steal_used&&(S+='\u{1F977}'),m.sabotage_used&&(S+='\u{1F4A3}'),m.bet&&(S+='\u{1F3B2}');var L=b?'':''+y(v)+"";return'
'+S+'
'+L+'
'+y(m.name)+"
"}).join("")}}function Ei(e,t,n){var a=e.leaderboard||[],i=document.getElementById(t||"leaderboard-list");if(i){var r=n&&Pn(),o=r?Hn(a):{};a.forEach(function(u){u.is_current=u.name===s.playerName;var m=o[u.name];m&&(u._rankChange=m);var v=ne.players[u.name],p=v?v.score:u.score;u._prevScore=p,u._displayScore=n?p:u.score});var l=wi(a,s.playerName),c=a.length>=Me.MIN_PLAYERS_FOR_LAZY;if(c)I.observer||Fn(i),I.fullData=l,I.isLazyEnabled=!0,I.listEl=i,I.visibleRange=jt(l,s.playerName),Ye();else{I.isLazyEnabled=!1;var d="";l.forEach(function(u){d+=Vt(u)}),i.innerHTML=d}var f=[];r&&l.forEach(function(u){!u.separator&&u._prevScore!==u.score&&f.push({name:u.name,prevScore:u._prevScore,newScore:u.score})}),r&&f.length>0&&requestAnimationFrame(function(){for(var u={},m=i.querySelectorAll(".leaderboard-entry[data-name]"),v=0;v8&&Li(i),Si(a),xi(a),bt(e.players||[],a)}}function wi(e,t){if(e.length<=10)return e;for(var n=e.slice(0,5),a=e.slice(-3),i=-1,r=0;r=e.length-3?[].concat(n,[{separator:!0}],a):[].concat(n,[{separator:!0}],[e[i]],[{separator:!0}],a)}function Li(e){var t=e.querySelector(".leaderboard-entry.is-current");t&&t.scrollIntoView({behavior:"smooth",block:"center"})}function Si(e){var t=document.getElementById("leaderboard-you"),n=e.find(function(a){return a.is_current});t&&n&&(t.textContent=E.t("leaderboard.you")+" #"+n.rank,t.classList.remove("hidden"))}function La(){var e=document.getElementById("leaderboard-toggle"),t=document.getElementById("game-leaderboard");e&&t&&!e.hasAttribute("data-initialized")&&(e.setAttribute("data-initialized","true"),e.addEventListener("click",function(){var n=t.classList.toggle("collapsed");e.setAttribute("aria-expanded",!n)}))}function xi(e,t){var n=t?[t]:["leaderboard-summary","reveal-leaderboard-summary"];n.forEach(function(a){var i=document.getElementById(a);if(!(!i||!e||e.length===0)){var r=e[0];r&&(i.textContent=r.name+": "+r.score)}})}function Sa(e){var t=e?[e]:["leaderboard-summary","reveal-leaderboard-summary"];t.forEach(function(n){var a=document.getElementById(n);a&&(a.textContent="")})}function xa(){var e=document.getElementById("reveal-leaderboard-toggle"),t=document.getElementById("reveal-leaderboard");e&&t&&!e.hasAttribute("data-initialized")&&(e.setAttribute("data-initialized","true"),e.addEventListener("click",function(){var n=t.classList.toggle("collapsed");e.setAttribute("aria-expanded",!n)}))}var q=!1,_i=5e3,tt=null;function fn(){tt&&(clearTimeout(tt),tt=null)}var Ge=!1,nt=!1,at=!1,xt=0,Bt=!1,cn=!1,va=!1,pa=!1;function _a(){if(pa)return;var e=document.getElementById("year-slider"),t=document.getElementById("selected-year");if(!e||!t)return;pa=!0,e.addEventListener("input",function(){Se||(t.textContent=this.value)});function n(b){var w=parseInt(e.value,10)+b;w=Math.max(parseInt(e.min,10),Math.min(parseInt(e.max,10),w)),e.value=w,t.textContent=w}function a(b,w){if(!b)return;var S=null,_=null;b.addEventListener("pointerdown",function(L){q||Se||(L.preventDefault(),n(w),_=setTimeout(function(){S=setInterval(function(){n(w)},150)},500))});function C(){_&&(clearTimeout(_),_=null),S&&(clearInterval(S),S=null)}["pointerup","pointerleave","pointercancel"].forEach(function(L){b.addEventListener(L,C)}),b.addEventListener("keydown",function(L){q||Se||(L.key==="Enter"||L.key===" ")&&(L.preventDefault(),n(w))})}a(document.getElementById("year-decrement"),-1),a(document.getElementById("year-increment"),1),a(document.getElementById("year-decrement-5"),-5),a(document.getElementById("year-increment-5"),5);var i=document.getElementById("bet-toggle");i&&i.addEventListener("click",function(){q||Bt||(Ge=!Ge,i.classList.toggle("is-active",Ge))});var r=document.getElementById("submit-btn");if(r&&r.addEventListener("click",function(){cn?ga():Ii()}),!va){var o=document.getElementById("ta-title-input"),l=document.getElementById("ta-artist-input");o&&o.addEventListener("keydown",function(b){b.key==="Enter"&&(b.preventDefault(),l&&l.focus())}),l&&l.addEventListener("keydown",function(b){b.key==="Enter"&&(b.preventDefault(),cn&&ga())}),va=!0}var c=document.getElementById("steal-btn");c&&c.addEventListener("click",Ai);var d=document.getElementById("steal-modal-close");d&&d.addEventListener("click",_t);var f=document.getElementById("steal-modal");if(f){var u=f.querySelector(".steal-modal-backdrop");u&&u.addEventListener("click",_t)}var m=document.getElementById("sabotage-btn");m&&m.addEventListener("click",Oi);var v=document.getElementById("sabotage-modal-close");v&&v.addEventListener("click",It);var p=document.getElementById("sabotage-modal");if(p){var h=p.querySelector(".steal-modal-backdrop");h&&h.addEventListener("click",It)}}function Ii(){if(!q&&!Se){if(xt&&Date.now()"+y(E.t("game.waitingForOthers")||"Waiting for others")+''),a&&(a.disabled=!0),i&&i.classList.remove("hidden"),["year-decrement","year-increment","year-decrement-5","year-increment-5"].forEach(function(r){var o=document.getElementById(r);o&&(o.disabled=!0)})}function mn(e){var t=document.getElementById("submit-btn");t&&(t.disabled=!1,t.classList.remove("is-loading")),e.code==="ROUND_EXPIRED"?(We(E.t("errors.timesUp")),q=!0,t&&(t.disabled=!0)):e.code==="ALREADY_SUBMITTED"?st():We(e.message||"Submission failed")}function We(e){var t=document.getElementById("submit-btn");t&&(t.textContent=e,t.classList.add("is-error"),setTimeout(function(){t.textContent=E.t("game.submitGuess"),t.classList.remove("is-error")},2e3))}function Ia(){fn(),q=!1,Ge=!1;var e=document.getElementById("year-selector"),t=document.getElementById("year-display-arc"),n=document.getElementById("submit-btn"),a=document.getElementById("year-slider"),i=document.getElementById("bet-toggle"),r=document.getElementById("submitted-banner");if(e&&e.classList.remove("is-submitted","slider-arcade--locked"),t&&t.classList.remove("year-xxl--locked"),n&&(n.disabled=!1,n.classList.remove("hidden","is-loading","is-error","submit-arc--waiting"),n.textContent=E.t("game.submitGuess")),i&&(i.disabled=!1,i.classList.remove("hidden","is-active")),r&&r.classList.add("hidden"),a){var o=parseInt(a.min,10),l=parseInt(a.max,10),c=1990;isFinite(o)&&isFinite(l)&&(c=Math.max(o,Math.min(l,c))),a.value=c;var d=document.getElementById("selected-year");d&&(d.textContent=String(c))}["year-decrement","year-increment","year-decrement-5","year-increment-5"].forEach(function(f){var u=document.getElementById(f);u&&(u.disabled=!1)}),nt=!1,vn(),at=!1,xt=0,Fi(),gn(),tn(),ln(),Ci()}function Bi(e){var t=Je(e);cn=t;var n=document.getElementById("title-artist-container"),a=document.getElementById("year-selector-container"),i=document.getElementById("year-display-arc"),r=document.getElementById("bet-toggle");if(Se){n&&n.classList.add("hidden"),a&&a.classList.add("hidden"),i&&i.classList.add("hidden"),r&&r.classList.add("hidden");return}if(n&&n.classList.toggle("hidden",!t),a&&a.classList.toggle("hidden",t),i&&i.classList.toggle("hidden",t),r&&r.classList.toggle("hidden",t),!!t){var o=document.getElementById("submit-btn");o&&!q&&(o.textContent=E.t("titleArtist.submitGuess")||"Submit")}}function ga(){if(!q&&!Se){var e=document.getElementById("ta-title-input"),t=document.getElementById("ta-artist-input"),n=document.getElementById("submit-btn");if(!(!e||!t||!n)){var a=(e.value||"").trim(),i=(t.value||"").trim();n.disabled=!0,n.classList.add("is-loading"),s.ws&&s.ws.readyState===WebSocket.OPEN?s.ws.send(JSON.stringify({type:"title_artist_guess",title:a,artist:i})):(We(E.t("errors.connectionLost")),n.disabled=!1,n.classList.remove("is-loading"))}}}function Ba(e){st();var t=document.getElementById("ta-title-input"),n=document.getElementById("ta-artist-input");t&&(t.disabled=!0),n&&(n.disabled=!0);var a=document.getElementById("ta-input-ack");a&&(a.textContent=E.t("titleArtist.submitted")||"Submitted \u2014 see how you did at the reveal!",a.classList.remove("hidden"))}function Ci(){var e=document.getElementById("ta-title-input"),t=document.getElementById("ta-artist-input"),n=document.getElementById("ta-input-ack");e&&(e.value="",e.disabled=!1),t&&(t.value="",t.disabled=!1),n&&(n.textContent="",n.classList.add("hidden"))}function ki(e){if(!(!s.playerName||!e)){var t=e.find(function(i){return i.name===s.playerName});if(t){nt=t.steal_available&&!q;var n=document.getElementById("steal-indicator"),a=document.getElementById("steal-btn");nt?(n&&n.classList.remove("hidden"),a&&a.classList.remove("hidden")):vn(),it()}}}function vn(){var e=document.getElementById("steal-indicator"),t=document.getElementById("steal-btn");e&&e.classList.add("hidden"),t&&t.classList.add("hidden"),it()}function Ai(){!nt||q||s.ws&&s.ws.readyState===WebSocket.OPEN&&s.ws.send(JSON.stringify({type:"get_steal_targets"}))}function Ti(e,t){var n=document.getElementById("steal-modal"),a=document.getElementById("steal-target-list");if(!(!n||!a)){a.innerHTML="";var i=t||un;if(!e||e.length===0){var r=document.createElement("p");r.className="steal-no-targets",r.textContent=E.t("steal.waitForSubmit"),a.appendChild(r)}else{var o={};i.forEach(function(l){l&&l.name!=null&&(o[l.name]=l)}),e.forEach(function(l){var c=o[l]||null,d=document.createElement("button");d.className="steal-target-btn steal-target-row";var f=!!c&&Number(c.rank)===1;f&&d.classList.add("steal-target-row--leader"),d.setAttribute("aria-label",Ca(l,c,f));var u=document.createElement("span");if(u.className="steal-target-rank",u.setAttribute("aria-hidden","true"),u.textContent=c&&c.rank!=null?String(c.rank):"\u2013",d.appendChild(u),f){var m=document.createElement("span");m.className="steal-target-crown",m.setAttribute("aria-hidden","true"),m.textContent="\u{1F451}",d.appendChild(m)}var v=document.createElement("span");v.className="steal-target-name",v.textContent=l,d.appendChild(v);var p=document.createElement("span");p.className="steal-target-score",p.setAttribute("aria-hidden","true"),p.textContent=c?pn(c.score):"",d.appendChild(p),d.addEventListener("click",function(){Ni(l)}),a.appendChild(d)})}n.classList.remove("hidden"),Xe=Xe||K(n,{contentSelector:".steal-modal-content"}),Xe.activate({onEscape:_t})}}function pn(e){var t=Number(e)||0;try{return t.toLocaleString()}catch{return String(t)}}function Ca(e,t,n){if(!t)return e;var a=[e];return t.rank!=null&&a.push("#"+t.rank),t.score!=null&&a.push(pn(t.score)),n&&a.push(E.t("leaderboard.leader")||"leader"),a.join(" \xB7 ")}function _t(){var e=document.getElementById("steal-modal");e&&e.classList.add("hidden"),Xe&&Xe.deactivate()}async function Ni(e){var t=E.t("steal.confirm").replace("{name}",e),n=await be(E.t("steal.confirmTitle")||"Steal Answer?",t,E.t("steal.confirmButton")||"Steal",E.t("common.cancel"));n&&(s.ws&&s.ws.readyState===WebSocket.OPEN&&s.ws.send(JSON.stringify({type:"steal",target:e})),_t())}function ka(e){if(e.success){nt=!1,q=!0,vn();var t=document.getElementById("year-selector"),n=document.getElementById("submit-btn"),a=document.getElementById("submitted-confirmation");t&&t.classList.add("is-submitted"),n&&n.classList.add("hidden"),a&&a.classList.remove("hidden"),Mi(e.target,e.year);var i=document.getElementById("selected-year"),r=document.getElementById("year-slider");i&&(i.textContent=e.year),r&&(r.value=e.year)}}function Aa(e){Ti(e.targets||[],e.leaderboard)}function Mi(e,t){var n=document.getElementById("steal-confirmation"),a=document.getElementById("steal-confirmation-text");if(!(!n||!a)){var i=E.t("steal.success").replace("{name}",e).replace("{year}",t);a.textContent=i,n.classList.remove("hidden"),setTimeout(function(){n.classList.add("hidden")},3e3)}}var ya=3e3;function Ri(e){if(!(!s.playerName||!e)){var t=e.find(function(i){return i.name===s.playerName});if(t){at=t.sabotage_available&&!q;var n=document.getElementById("sabotage-indicator"),a=document.getElementById("sabotage-btn");at?(n&&n.classList.remove("hidden"),a&&a.classList.remove("hidden")):gn(),it()}}}function gn(){var e=document.getElementById("sabotage-indicator"),t=document.getElementById("sabotage-btn");e&&e.classList.add("hidden"),t&&t.classList.add("hidden"),it()}function Oi(){!at||q||s.ws&&s.ws.readyState===WebSocket.OPEN&&s.ws.send(JSON.stringify({type:"get_sabotage_targets"}))}function Di(e,t){var n=document.getElementById("sabotage-modal"),a=document.getElementById("sabotage-target-list");if(!(!n||!a)){a.innerHTML="";var i=t||un;if(!e||e.length===0){var r=document.createElement("p");r.className="steal-no-targets",r.textContent=E.t("sabotage.noTargets")||"No one left to sabotage \u2014 everyone has locked in.",a.appendChild(r)}else{var o={};i.forEach(function(l){l&&l.name!=null&&(o[l.name]=l)}),e.forEach(function(l){var c=o[l]||null,d=document.createElement("button");d.className="steal-target-btn steal-target-row";var f=!!c&&Number(c.rank)===1;f&&d.classList.add("steal-target-row--leader"),d.setAttribute("aria-label",Ca(l,c,f));var u=document.createElement("span");if(u.className="steal-target-rank",u.setAttribute("aria-hidden","true"),u.textContent=c&&c.rank!=null?String(c.rank):"\u2013",d.appendChild(u),f){var m=document.createElement("span");m.className="steal-target-crown",m.setAttribute("aria-hidden","true"),m.textContent="\u{1F451}",d.appendChild(m)}var v=document.createElement("span");v.className="steal-target-name",v.textContent=l,d.appendChild(v);var p=document.createElement("span");p.className="steal-target-score",p.setAttribute("aria-hidden","true"),p.textContent=c?pn(c.score):"",d.appendChild(p),d.addEventListener("click",function(){Pi(l)}),a.appendChild(d)})}n.classList.remove("hidden"),et=et||K(n,{contentSelector:".steal-modal-content"}),et.activate({onEscape:It})}}function It(){var e=document.getElementById("sabotage-modal");e&&e.classList.add("hidden"),et&&et.deactivate()}async function Pi(e){var t=(E.t("sabotage.confirm")||"Sabotage {name}? The effect is random.").replace("{name}",e),n=await be(E.t("sabotage.confirmTitle")||"Sabotage?",t,E.t("sabotage.confirmButton")||"Sabotage",E.t("common.cancel"));n&&(s.ws&&s.ws.readyState===WebSocket.OPEN&&s.ws.send(JSON.stringify({type:"sabotage",target:e})),It())}function Ta(e){Di(e.targets||[],e.leaderboard)}function Na(e){e&&e.success&&(at=!1,gn(),qi(e.target,e.effect))}function Ma(e){e&&(Hi(e.effect),Gi(e.by,e.effect))}function Hi(e){if(e==="forced_bet"){Bt=!0,Ge=!0;var t=document.getElementById("bet-toggle");t&&t.classList.add("is-active","bet-arc--forced")}else if(e==="freeze"){xt=Date.now()+ya;var n=document.getElementById("submit-btn");n&&!q&&(n.classList.add("submit-arc--frozen"),setTimeout(function(){n&&n.classList.remove("submit-arc--frozen")},ya))}}function Fi(){Bt=!1;var e=document.getElementById("bet-toggle");e&&e.classList.remove("bet-arc--forced")}function Ra(e){var t="sabotage.effect."+e,n=E.t(t);return n&&n!==t?n:e==="timer_cut"?"Timer cut":e==="forced_bet"?"Forced bet":e==="freeze"?"Freeze":"Sabotaged"}function qi(e,t){var n=document.getElementById("sabotage-confirmation"),a=document.getElementById("sabotage-confirmation-text");if(!(!n||!a)){var i=(E.t("sabotage.success")||"Sabotaged {name} \xB7 {effect}").replace("{name}",e).replace("{effect}",Ra(t));a.textContent=i,n.classList.remove("hidden"),setTimeout(function(){n.classList.add("hidden")},3e3)}}function Gi(e,t){var n=document.getElementById("sabotaged-banner"),a=document.getElementById("sabotaged-banner-text");if(!(!n||!a)){var i=(E.t("sabotage.hit")||"You've been sabotaged by {name}! ({effect})").replace("{name}",e||"?").replace("{effect}",Ra(t));a.textContent=i,n.classList.remove("hidden"),setTimeout(function(){n.classList.add("hidden")},3500)}}var ba=0,Wi=500,rt=!1,yn=.5;function Ct(){var e=Date.now();return e-ba=1){Ha("max");return}Ct()&&(!s.ws||s.ws.readyState!==WebSocket.OPEN||s.ws.send(JSON.stringify({type:"admin",action:"set_volume",direction:"up"})))}function Yi(){if(yn<=0){Ha("min");return}Ct()&&(!s.ws||s.ws.readyState!==WebSocket.OPEN||s.ws.send(JSON.stringify({type:"admin",action:"set_volume",direction:"down"})))}function Ha(e){var t=document.getElementById("volume-indicator");t&&(t.textContent=e==="max"?"\u{1F50A} Max":"\u{1F507} Min",t.classList.remove("hidden"),t.classList.add("is-visible"),setTimeout(function(){t.classList.remove("is-visible"),setTimeout(function(){t.classList.add("hidden")},300)},1e3))}async function Ji(){var e=await be(E.t("admin.endGameConfirm")||"End Game?",E.t("admin.endGameWarning")||"All players will be disconnected.",E.t("admin.endGame")||"End Game",E.t("common.cancel"));if(e&&Ct()){if(!s.ws||s.ws.readyState!==WebSocket.OPEN){Le(E.t("errors.CONNECTION_LOST"));return}var t=document.getElementById("end-game-btn");if(t){t.disabled=!0;var n=t.querySelector(".control-label");n&&(n.textContent=E.t("game.ending"))}s.ws.send(JSON.stringify({type:"admin",action:"end_game"}))}}var St=!1;function Fa(){if(!St&&s.ws&&s.ws.readyState===WebSocket.OPEN){St=!0;var e=document.getElementById("next-round-btn"),t=document.getElementById("next-round-admin-btn");if(e&&(e.disabled=!0,e.textContent=E.t("game.loading")),t){t.disabled=!0;var n=t.querySelector(".control-label");n&&(n.textContent=E.t("game.wait"))}s.ws.send(JSON.stringify({type:"admin",action:"next_round"})),setTimeout(function(){St&&En()},1e4)}}function En(){St=!1;var e=document.getElementById("next-round-btn"),t=document.getElementById("next-round-admin-btn");if(e&&(e.disabled=!1,e.textContent=E.t("admin.nextRound")),t){t.disabled=!1;var n=t.querySelector(".control-label");n&&(n.textContent=E.t("admin.nextRound"))}}function $i(){Fa()}function qa(){var e=document.getElementById("stop-song-btn"),t=document.getElementById("volume-up-btn"),n=document.getElementById("volume-down-btn"),a=document.getElementById("next-round-admin-btn"),i=document.getElementById("end-game-btn");e&&e.addEventListener("click",ji),t&&t.addEventListener("click",zi),n&&n.addEventListener("click",Yi),a&&a.addEventListener("click",$i),i&&i.addEventListener("click",Ji)}function Ga(){rt=!0;var e=document.getElementById("stop-song-btn");if(e){e.classList.add("is-stopped"),e.classList.add("is-disabled"),e.disabled=!0;var t=e.querySelector(".control-icon"),n=e.querySelector(".control-label");t&&(t.textContent="\u2713"),n&&(n.textContent=E.t("game.stopped"))}}function wn(){rt=!1;var e=document.getElementById("stop-song-btn");if(e){e.classList.remove("is-stopped"),e.classList.remove("is-disabled"),e.disabled=!1;var t=e.querySelector(".control-icon"),n=e.querySelector(".control-label");t&&(t.textContent="\u23F9\uFE0F"),n&&(n.textContent=E.t("game.stop"))}}function Wa(e){yn=e,Qi(e),Ki(e)}function Qi(e){var t=document.getElementById("volume-indicator");if(t){var n=Math.round(e*100);t.textContent="\u{1F50A} "+n+"%",t.classList.remove("hidden"),t.classList.add("is-visible"),setTimeout(function(){t.classList.remove("is-visible"),setTimeout(function(){t.classList.add("hidden")},300)},1500)}}function Ki(e){var t=document.getElementById("volume-up-btn"),n=document.getElementById("volume-down-btn");t&&t.classList.toggle("is-at-limit",e>=1),n&&n.classList.toggle("is-at-limit",e<=0)}function Ua(){var e=document.getElementById("next-round-btn");e&&e.addEventListener("click",Fa);var t=document.getElementById("reveal-view");t&&t.addEventListener("click",function(n){n.target.tagName==="BUTTON"||n.target.closest("button")||(Re.isRunning()&&Re.skipAll(),ae())})}function Va(e){var t=document.getElementById("intro-splash-modal");if(t){t.classList.remove("hidden");var n=document.getElementById("intro-splash-confirm-btn"),a=t.querySelector(".intro-splash-modal-waiting");n&&(e?(n.classList.remove("hidden"),a&&a.classList.add("hidden"),n.onclick=function(){s.ws&&s.ws.readyState===WebSocket.OPEN&&s.ws.send(JSON.stringify({type:"admin",action:"confirm_intro_splash"}))}):(n.classList.add("hidden"),a&&a.classList.remove("hidden"))),Ze=Ze||K(t,{contentSelector:".intro-splash-modal-content"}),Ze.activate({initialFocus:n&&!n.classList.contains("hidden")?n:null})}}function ja(){var e=document.getElementById("intro-splash-modal");e&&(e.classList.add("hidden"),Ze&&Ze.deactivate())}var g=window.BeatifyUtils||{},za=30,Tt=null,Ln=null,dt=null;function $a(e){var t=e.song||{},n=e.players||[],a=document.getElementById("reveal-round"),i=document.getElementById("reveal-total");a&&(a.textContent=e.round||1),i&&(i.textContent=e.total_rounds||10);var r=document.getElementById("reveal-idle-halt");r&&r.classList.toggle("hidden",!e.idle_halt),Xi(e);var o=document.getElementById("closest-wins-badge");o&&(e.closest_wins_mode?o.classList.remove("hidden"):o.classList.add("hidden"));var l=document.getElementById("intro-badge");if(l)if(e.is_intro_round){l.classList.remove("hidden"),l.classList.add("intro-badge--stopped");var c=l.querySelector("[data-i18n]");c&&(c.setAttribute("data-i18n","game.introStopped"),c.textContent=g.t("game.introStopped")||"Intro complete!")}else l.classList.add("hidden");var d=document.getElementById("reveal-album-cover");if(d){var f=t.album_art||"/beatify/static/img/no-artwork.svg";f!==Ln&&(d.onerror=function(){d.src="/beatify/static/img/no-artwork.svg"},d.src=f,Ln=f)}var u=document.getElementById("reveal-backdrop");if(u){var m=t.album_art||null;if(m!==dt)if(dt=m,m){var v=new Image;v.onload=function(){u.style.backgroundImage='url("'+m+'")',u.classList.remove("reveal-backdrop--synthetic")},v.onerror=function(){dt===m&&(dt=null),u.style.backgroundImage="",u.classList.add("reveal-backdrop--synthetic")},v.src=m}else u.style.backgroundImage="",u.classList.add("reveal-backdrop--synthetic")}var p=document.getElementById("correct-year");p&&(p.textContent=t.year||"????");var h=document.getElementById("song-title"),b=document.getElementById("song-artist");h&&(h.textContent=t.title||"Unknown Song"),b&&(b.textContent=t.artist||"Unknown Artist");var w=document.getElementById("fun-fact-container"),S=document.getElementById("fun-fact"),_=w?w.querySelector(".fun-fact-header"):null,C=g.getLocalizedSongField(t,"fun_fact");if(S&&(S.textContent=C||""),_&&(_.style.display=C?"flex":"none"),ts(t),es(e.song_difficulty),w){var L=document.getElementById("song-rich-info"),U=L&&L.innerHTML.trim()!=="",W=C&&C.trim()!=="";w.classList.toggle("hidden",!W&&!U)}for(var N=null,G=0;G'+g.t("analytics.noGuesses")+"";var a=e.map(function(R){return R.guess}),i=Math.min.apply(null,a.concat([t])),r=Math.max.apply(null,a.concat([t])),o=Math.max(2,Math.floor((r-i)*.1)),l=i-o,c=r+o,d=Math.max(1,c-l);function f(R){return(R-l)/d*100}for(var u=f(t),m='
'+t+"
",v="",p=0;p<=4;p++){var h=Math.round(l+d*p/4),b=p*25;v+='
'+h+"
"}function w(R){for(var F=0,pe=0;pe>>0;return"c"+(F%4+1)}function S(R){return R&&R.years_off===0?{glyph:"\u25CE",word:g.t("reveal.correct")||"Correct!",cls:"exact"}:R&&(R.round_score||0)>0?{glyph:"\u2248",word:g.t("reveal.close")||"Close!",cls:"near"}:{glyph:"\u2715",word:g.t("reveal.wrong")||"Wrong",cls:"off"}}for(var _="",C=0;C0?"dotaxis-score--pos":"dotaxis-score--zero",T=z>0?"+"+z:"+0",oe=S(L),J=y(L.name)+" \u2014 "+L.guess+" ("+oe.word+") ("+T+")";_+='
'+T+"
"}for(var ue=e.slice().sort(function(R,F){return(R.years_off||0)-(F.years_off||0)}),je=["\u{1F3C6}","\u{1F948}","\u{1F949}"],Be="",te=0;te'+je[te]+"":"",me=n&&fe.name===n?' '+g.t("analytics.youMarker")+"":"",ke=S(fe),ve=' "+y(ke.word)+"";Be+=''+Ce+''+y(fe.name||"?")+me+ve+""}return'
'+v+'
'+m+_+'
'+Be+"
"}function es(e){var t=document.getElementById("song-difficulty");if(t){if(!e){t.classList.add("hidden");return}for(var n="",a=0;a★';t.innerHTML='
'+n+'
'+g.t("difficulty."+e.label)+''+e.accuracy+"% "+g.t("difficulty.accuracy")+"",t.classList.remove("hidden")}}function ts(e){var t=document.getElementById("song-rich-info");if(t){var n=[],a=ns(e.chart_info||{});a.length>0&&(n=n.concat(a));var i=as(e.certifications||[]);i.length>0&&(n=n.concat(i));var r=g.getLocalizedSongField(e,"awards")||[],o=ss(r);o.length>0&&(n=n.concat(o)),n.length>0?t.innerHTML='
'+n.join("")+"
":t.innerHTML=""}}function ns(e){if(!e)return[];var t=[];if(e.billboard_peak&&e.billboard_peak>0){var n=e.weeks_on_chart?' \xB7 '+e.weeks_on_chart+" "+g.t("reveal.weeksShort")+"":"";t.push('\u{1F4CA}#'+e.billboard_peak+" "+g.t("reveal.chartBillboard")+n+"")}return e.german_peak&&e.german_peak>0&&!e.billboard_peak&&t.push('\u{1F4CA}#'+e.german_peak+" "+g.t("reveal.chartGerman")+""),e.uk_peak&&e.uk_peak>0&&!e.billboard_peak&&t.push('\u{1F4CA}#'+e.uk_peak+" "+g.t("reveal.chartUK")+""),t}function as(e){if(!e||e.length===0)return[];for(var t=[],n=0;n'+r+""+y(a)+"")}return t}function rs(e){var t=e.toLowerCase();return t.indexOf("diamond")!==-1?"song-badge--diamond":t.indexOf("platinum")!==-1?"song-badge--platinum":t.indexOf("gold")!==-1?"song-badge--gold":"song-badge--platinum"}function is(e){var t=e.toLowerCase();return t.indexOf("diamond")!==-1?"\u{1F48E}":t.indexOf("platinum")!==-1?"\u{1F4BF}":t.indexOf("gold")!==-1?"\u{1F947}":"\u{1F4BF}"}function ss(e){if(!e||e.length===0)return[];for(var t=[],n=e.slice(0,3),a=0;a'+o+""+y(i)+"")}return e.length>3&&t.push('+'+(e.length-3)+" more"),t}function os(e){var t=e.toLowerCase();return t.indexOf("grammy")!==-1?"song-badge--grammy":t.indexOf("eurovision")!==-1?"song-badge--eurovision":t.indexOf("oscar")!==-1||t.indexOf("academy award")!==-1?"song-badge--oscar":t.indexOf("hall of fame")!==-1?"song-badge--halloffame":"song-badge--award"}function ls(e){var t=e.toLowerCase();return t.indexOf("eurovision")!==-1?"\u{1F3A4}":t.indexOf("grammy")!==-1?"\u{1F3C6}":t.indexOf("hall of fame")!==-1?"\u2B50":"\u{1F3C6}"}function ds(e,t){var n=document.getElementById("reveal-emotion"),a=document.getElementById("personal-result");if(!n)return;var i=n.classList.contains("duel-emotion"),r=n.classList.contains("reveal-emotion-inline")||document.querySelector(".reveal-container--compact");n.className=i?"duel-emotion":r?"reveal-emotion-inline":"reveal-emotion",n.innerHTML="",n.classList.add("hidden"),a&&a.classList.remove("is-delayed"),ae();var o=g.t("reveal.emotions");function l(p){return p[Math.floor(Math.random()*p.length)]}function c(p){return p===1?g.t("reveal.offByYear"):g.t("reveal.offByYears",{years:p})}var d="missed",f=l(o.missed),u=l(o.missedSub);if(e&&!e.missed_round){var m=e.years_off||0;m===0?(d="exact",f=l(o.exact),u=l(o.exactSub)):m<=2?(d="close",f=l(o.close),u=l(o.closeSub)+" "+c(m)):m<=5?(d="close",f=l(o.close),u=c(m)):(d="wrong",f=l(o.wrong),u=l(o.wrongSub)+" "+c(m))}else e&&e.missed_round&&(d="missed",f=l(o.missed),u=l(o.missedSub));if(i)n.textContent=f,n.classList.add("duel-emotion--"+d);else{var v=''+f+"";u&&(v+='
'+u+"
"),n.innerHTML=v,n.classList.add("reveal-emotion--"+d)}n.classList.remove("hidden"),d==="exact"&&Oe(),a&&d!=="missed"&&a.classList.add("is-delayed")}function cs(e,t){var n=document.getElementById("duel-your-year"),a=document.getElementById("duel-gap-count"),i=document.getElementById("duel-gap-unit");if(!(!n||!a||!i)){if(!e||e.missed_round){n.textContent=g.t("reveal.duel.noGuess")||"\u2014",a.textContent="\u2014",i.textContent="";return}var r=e.guess;n.textContent=r!=null&&r!==""?r:"\u2014";var o=e.years_off!=null?e.years_off:0;a.textContent=String(o),i.textContent=o===1?g.t("reveal.duel.yearUnit")||"year":g.t("reveal.duel.yearsUnit")||"years";var l=a.closest(".duel-gap");l&&(l.classList.remove("duel-gap--exact","duel-gap--close","duel-gap--wrong"),o===0?l.classList.add("duel-gap--exact"):o<=5?l.classList.add("duel-gap--close"):l.classList.add("duel-gap--wrong"))}}function us(e,t){var n=document.getElementById("reveal-chip-row");if(n){if(!e){n.classList.add("hidden"),n.innerHTML="";return}var a=[];e.bet_outcome==="won"?a.push('\u{1F3B2} '+y(g.t("reveal.chip.betWon")||"Bet won \xB7 \xD72")+""):e.bet_outcome==="lost"&&a.push('\u{1F3B2} '+y(g.t("reveal.chip.betLost")||"Bet lost")+"");var i=e.streak_bonus||0;if(i>0&&e.streak){var r=g.t("reveal.chip.streakBonus",{count:e.streak,bonus:i})||e.streak+"-streak \xB7 +"+i;a.push('\u{1F525} '+y(r)+"")}a.length===0?(n.classList.add("hidden"),n.innerHTML=""):(n.classList.remove("hidden"),n.innerHTML=a.join(""))}}function xn(e){if(!e)return 0;var t=e.round_score||0,n=e.streak_bonus||0,a=e.artist_bonus||0,i=e.movie_bonus||0,r=e.intro_bonus||0;return t+n+a+i+r}function fs(e){var t=document.getElementById("reveal-total-pts"),n=document.getElementById("score-row-subtitle");if(t){var a=xn(e);if(t.textContent=(a>=0?"+":"")+a,n)if(!e||e.missed_round)n.textContent=g.t("reveal.noSubmission")||"No guess submitted";else{var i=e.years_off!=null?e.years_off:0,r=i===0?"reveal.exact":i===1?"reveal.yearOff":"reveal.yearsOff";n.textContent=g.t(r,{years:i})||i+" years off"}}}function ms(e){for(var t=[["#ff2d6a","#ff6600"],["#00f5ff","#7a5cff"],["#39ff14","#00f5ff"],["#ff6600","#ff0040"],["#7a5cff","#b3b3c2"],["#ff2d6a","#7a5cff"]],n=0,a=0;a>>0;var i=t[n%t.length];return"linear-gradient(135deg,"+i[0]+","+i[1]+")"}function vs(e){var t=document.getElementById("reveal-leaderboard-list");if(t){var n=e.leaderboard||[],a=e.players||[],i={};a.forEach(function(l){i[l.name]=l});var r=(g.t("analytics.youMarker")||"YOU").replace(/[()]/g,""),o="";n.forEach(function(l,c){var d=i[l.name]||{},f=l.name===s.playerName,u=((l.name||"?").trim().charAt(0)||"?").toUpperCase(),m=l.rank_change||0,v=m>0?"up":m<0?"down":"flat",p=m>0?"\u25B2"+m:m<0?"\u25BC"+Math.abs(m):"\u2013",h="";if(!d.missed_round&&d.years_off!=null&&d.guess!=null&&d.guess!==""){var b=d.years_off,w=b===0?''+y(g.t("reveal.exact")||"Exact!")+"":y(g.t("reveal.shortOff",{years:b})||b+" off");h='
'+y(String(d.guess))+" \xB7 "+w+"
"}var S=[];d.streak&&d.streak>=2&&S.push('\u{1F525} '+d.streak+""),d.stole_from?S.push('\u{1F977} '+y(g.t("steal.stolenFrom",{name:d.stole_from})||"stole "+d.stole_from)+""):d.was_stolen_by&&d.was_stolen_by.length&&S.push('\u{1F3AF} '+y(g.t("steal.stolenBy",{name:d.was_stolen_by.join(", ")})||"stolen")+""),d.bet_outcome==="won"?S.push('\u{1F3B2} '+y(g.t("reveal.chip.betWon")||"Bet won")+""):d.bet_outcome==="lost"&&S.push('\u{1F3B2} '+y(g.t("reveal.chip.betLost")||"Bet lost")+"");var _=S.length?'
'+S.join("")+"
":"",C=xn(d),L=C>0?"":" rstand-delta--zero",U=(C>=0?"+":"")+C,W=c>=4?" rstand-row--taper2":c>=3?" rstand-row--taper1":"",N=f?" rstand-row--you":"",G=f?' '+y(r)+"":"";o+='
'+l.rank+''+p+'
'+y(u)+'
'+y(l.name||"?")+G+"
"+h+_+'
'+(l.score||0)+''+U+"
"}),t.innerHTML=o,bt(a,n)}}function ps(){var e=document.getElementById("points-breakdown-content");if(e){var t=s.lastRevealContext,n=t?t.player:null;if(!n||n.missed_round){e.innerHTML='
'+y(g.t("reveal.breakdown.noSubmission")||g.t("reveal.noSubmission")||"No guess submitted")+'
'+y(g.t("reveal.breakdown.total")||"Total this round")+'+0
';return}var a=[],i=n.years_off!=null?n.years_off:0,r=n.base_score||0,o=n.round_score||0,l=n.speed_multiplier||1,c=Math.floor(r*l)-r;a.push({emoji:"\u{1F3AF}",label:g.t("reveal.breakdown.baseScore",{years:i})||"Base score",value:String(r),kind:"neutral"}),l>1&&c>0&&a.push({emoji:"\u26A1",label:(g.t("reveal.breakdown.speedBonus")||"Speed bonus")+" ("+l.toFixed(2)+"\xD7)",value:"+"+c,kind:"positive"}),n.streak_bonus&&n.streak_bonus>0&&a.push({emoji:"\u{1F525}",label:g.t("reveal.breakdown.streakBonus",{count:n.streak})||n.streak+"-streak bonus",value:"+"+n.streak_bonus,kind:"positive"}),n.artist_bonus&&n.artist_bonus>0&&a.push({emoji:"\u{1F3A4}",label:g.t("reveal.breakdown.artistBonus")||"Artist challenge",value:"+"+n.artist_bonus,kind:"positive"}),n.movie_bonus&&n.movie_bonus>0&&a.push({emoji:"\u{1F3AC}",label:g.t("reveal.breakdown.movieBonus")||"Movie challenge",value:"+"+n.movie_bonus,kind:"positive"}),n.intro_bonus&&n.intro_bonus>0&&a.push({emoji:"\u26A1",label:g.t("reveal.breakdown.introBonus")||"Intro speed bonus",value:"+"+n.intro_bonus,kind:"positive"}),n.bet_outcome==="won"?a.push({emoji:"\u{1F3B2}",label:g.t("reveal.breakdown.betMultiplier")||"Double or Nothing",value:"\xD72",kind:"multiplier"}):n.bet_outcome==="lost"&&a.push({emoji:"\u{1F3B2}",label:g.t("reveal.breakdown.betLost")||"Bet lost",value:"\xD70",kind:"multiplier"});var d=xn(n),f='
';a.forEach(function(u){f+='
"+y(u.label)+''+y(u.value)+"
"}),f+="
",f+='
'+y(g.t("reveal.breakdown.total")||"Total this round")+''+(d>=0?"+":"")+d+"
",e.innerHTML=f}}function gs(){var e=document.getElementById("round-stats-content");if(e){var t=s.lastRevealContext;if(!t){e.innerHTML="";return}var n=t.analytics,a=t.difficulty,i=t.song||{},r=i.year,o=[];if(a){for(var l="",c=5,d=0;d\u2605';var f=g.t("difficulty."+a.label)||a.label||"",u=a.accuracy!=null?g.t("reveal.stats.onlyPercent",{percent:a.accuracy})||"Only "+a.accuracy+"% of all players guess it right.":"";o.push('
'+y(f)+(u?'
'+y(u)+"
":"")+'
'+l+"
")}if(n){var m=[];if(n.average_guess!=null){var v=r?Math.round(n.average_guess-r):null,p=v!=null?v===0?g.t("analytics.onTarget")||"On target":Math.abs(v)+" "+(g.t("reveal.duel.yearsUnit")||"years")+" "+(v>0?"late":"early"):"";m.push('
'+y(g.t("reveal.stats.avgGuess")||"Avg guess")+'
'+Math.round(n.average_guess)+"
"+(p?'
'+y(p)+"
":"")+"
")}if(n.all_guesses&&n.all_guesses.length>0){var h=n.all_guesses[0],b=h.name+" \xB7 "+(h.years_off===0?g.t("reveal.exact")||"Exact!":h.years_off+" "+(h.years_off===1?g.t("reveal.duel.yearUnit")||"year":g.t("reveal.duel.yearsUnit")||"years")+" off");m.push('
'+y(g.t("reveal.stats.closest")||"Closest")+'
'+y(String(h.guess))+'
'+y(b)+"
")}if(n.speed_champion&&n.speed_champion.time!=null&&m.push('
'+y(g.t("reveal.stats.fastest")||"Fastest")+'
'+n.speed_champion.time+'s
'+y((n.speed_champion.names||[]).join(", "))+"
"),a&&a.times_played!=null){var w=g.t("reveal.stats.playedBeforeSub")||"across all Beatify games";m.push('
'+y(g.t("reveal.stats.playedBefore")||"Played before")+'
'+a.times_played+'\xD7
'+y(w)+"
")}m.length>0&&o.push('
'+m.join("")+"
")}if(n&&n.all_guesses&&n.all_guesses.length>0&&o.push('
'+y(g.t("analytics.guessAxis")||"Where everyone guessed")+"
"+Zi(n.all_guesses,r,s.playerName)+"
"),n&&n.furthest_players&&n.furthest_players.length>0&&n.all_guesses&&n.all_guesses.length>0){var S=n.all_guesses[n.all_guesses.length-1];if(S&&S.years_off>0){var _=n.furthest_players.map(function(C){return'
'+y(C)+''+S.years_off+" "+(S.years_off===1?g.t("reveal.duel.yearUnit")||"yr":g.t("reveal.duel.yearsUnit")||"yrs")+" off
"}).join("");o.push('
'+y(g.t("reveal.stats.furthestOff")||"Furthest off this round")+'
'+_+"
")}}o.length===0&&o.push('

'+y(g.t("reveal.stats.empty")||"No stats for this round yet.")+"

"),e.innerHTML=o.join("")}}var Mt={};function Ya(e,t){var n=document.getElementById(e);if(n){typeof t=="function"&&t(),n.classList.remove("hidden");var a=n.querySelector(".sheet-close"),i=Mt[e]||(Mt[e]=K(n,{contentSelector:".sheet-content"}));i.activate({initialFocus:a,onEscape:function(){Nt(e)}})}}function Nt(e){var t=document.getElementById(e);t&&(t.classList.add("hidden"),Mt[e]&&Mt[e].deactivate())}function Qa(){var e=document.getElementById("points-breakdown-btn");e&&e.addEventListener("click",function(){Ya("points-breakdown-sheet",ps)});var t=document.getElementById("round-stats-btn");t&&t.addEventListener("click",function(){Ya("round-stats-sheet",gs)}),document.querySelectorAll("[data-sheet-close]").forEach(function(n){n.addEventListener("click",function(a){Nt(n.getAttribute("data-sheet-close")),a.stopPropagation()})}),document.querySelectorAll(".sheet-backdrop").forEach(function(n){var a=n.querySelector(".sheet-dim");a&&a.addEventListener("click",function(){Nt(n.id)})}),document.addEventListener("keydown",function(n){n.key==="Escape"&&["points-breakdown-sheet","round-stats-sheet"].forEach(function(a){var i=document.getElementById(a);i&&!i.classList.contains("hidden")&&Nt(a)})})}function ys(){var e=document.getElementById("reveal-report-btn");if(e){var t=s.lastRevealContext,n=!!(t&&t.song&&t.song.is_library);n&&s.isAdmin?e.textContent=g.t("reveal.fixYearBtn")||"\u{1F3AF} Wrong year? Fix it":n?e.textContent=g.t("reveal.flagYearBtn")||"\u{1F6A9} Wrong year? Tell the host":e.textContent=g.t("reveal.reportBtn")||"\u{1F6A9} Wrong year?",e.disabled=!1,Sn()}}function At(){var e=document.querySelector(".reveal-report-row");if(e){var t=document.getElementById("reveal-report-error");t||(t=document.createElement("p"),t.id="reveal-report-error",t.className="validation-msg reveal-report-error",t.setAttribute("role","alert"),e.appendChild(t)),t.textContent=g.t("reveal.reportBtnError")||"Couldn't send report \u2014 please try again.",t.classList.remove("hidden")}}function Sn(){var e=document.getElementById("reveal-report-error");e&&e.classList.add("hidden")}function Ka(){var e=document.getElementById("reveal-report-btn");e&&e.addEventListener("click",function(){var t=s.lastRevealContext;if(!(!t||!t.song)){if(t.song.is_library&&!s.isAdmin){if(!s.ws||s.ws.readyState!==WebSocket.OPEN){At();return}Sn();try{s.ws.send(JSON.stringify({type:"report_data",artist:t.song.artist||"",title:t.song.title||"",year:t.song.year||null}))}catch{At();return}e.textContent=g.t("reveal.flaggedForHost")||"\u2713 Flagged for the host",e.disabled=!0;return}if(t.song.is_library&&s.isAdmin&&window.BeatifyCrateDiggerFix){window.BeatifyCrateDiggerFix.open({title:t.song.title||"",artist:t.song.artist||"",year:t.song.year||null});return}if(!s.ws||s.ws.readyState!==WebSocket.OPEN){At();return}Sn();try{s.ws.send(JSON.stringify({type:"report_data",artist:t.song.artist||"",title:t.song.title||"",year:t.song.year||null}))}catch{At();return}e.textContent=g.t("reveal.reportBtnDone")||"\u2713 Reported \u2014 thanks!",e.disabled=!0}})}function Ja(e){var t="ta-pill ta-pill--"+(e||"skipped").replace(/_/g,"-"),n;switch(e){case"exact":n=g.t("titleArtist.statusExact")||"Correct";break;case"fuzzy":n=g.t("titleArtist.statusFuzzy")||"Close enough";break;case"near_miss_accepted":n=g.t("titleArtist.statusAccepted")||"Accepted";break;case"near_miss":n=g.t("titleArtist.statusNearMiss")||"Near miss";break;case"wrong":n=g.t("titleArtist.statusWrong")||"Wrong";break;default:n=g.t("titleArtist.statusSkipped")||"Skipped"}return''+y(n)+""}function bs(e,t){if(!e)return null;var n={exact:1,fuzzy:1,near_miss_accepted:1},a=e.title_status,i=e.artist_status;if(t&&(a==="near_miss"||i==="near_miss"))return{tier:"pending",text:g.t("titleArtist.verdictPending")||"Awaiting the room\u2019s verdict\u2026"};var r=(n[a]?1:0)+(n[i]?1:0);return r===2?{tier:"win",text:g.t("titleArtist.verdictWin")||"Nailed it!"}:r===1?{tier:"partial",text:g.t("titleArtist.verdictPartial")||"Got one!"}:{tier:"miss",text:g.t("titleArtist.verdictMiss")||"Not this time"}}function hs(e,t){var n=!!e.accepted,a=((e.player||"?").trim().charAt(0)||"?").toUpperCase(),i=n?"\u2713 +"+(e.points||0):"\u2717";return'
'+y(e.player)+' \xB7 '+y(t(e.field))+'
\u201C'+y(e.guess||"\u2014")+'\u201D
\u{1F44D} '+(e.votes_yes||0)+" \xB7 \u{1F44E} "+(e.votes_no||0)+'
'+i+"
"}function Es(e,t){var n=document.getElementById("ta-reveal-section");if(n){if(!e||!e.correct_title){n.classList.add("hidden"),xe();return}n.classList.remove("hidden"),s._taRevealTruth!==e.correct_title&&(s._taRevealTruth=e.correct_title,s.taMyVotes={}),s.taMyVotes=s.taMyVotes||{};var a=document.getElementById("ta-reveal-truth");a&&(a.innerHTML=''+y(e.correct_title)+''+y(e.correct_artist||"")+"");for(var i=document.getElementById("ta-reveal-own"),r=e.results||[],o=null,l=0;l'+y(c.text)+"":"";i.innerHTML=d+'
'+y(g.t("titleArtist.yourTitle")||"Your title")+''+y(o.title||"\u2014")+""+Ja(o.title_status)+'
'+y(g.t("titleArtist.yourArtist")||"Your artist")+''+y(o.artist||"\u2014")+""+Ja(o.artist_status)+"
"}else i.innerHTML='
'+y(g.t("titleArtist.noGuess")||"No guess this round")+"
";var f=document.getElementById("ta-voting"),u=document.getElementById("ta-voting-cards"),m=document.getElementById("ta-voting-title"),v=document.getElementById("ta-voting-countdown"),p=e.near_misses||[],h=e.near_miss_outcomes||[],b=!!e.voting_open,w=!!(t&&t.is_admin);if(!f||!u){xe();return}var S=function(L){return L==="artist"?g.t("titleArtist.artistLabel")||"Artist":g.t("titleArtist.titleLabel")||"Song title"};if(!b&&h.length>0){xe(),f.classList.remove("hidden"),m&&(m.textContent=g.t("titleArtist.closeCallsDecided")||"Close calls \u2014 decided"),v&&(v.textContent="",v.classList.add("hidden")),u.innerHTML=h.map(function(L){return hs(L,S)}).join("");return}if(p.length===0){f.classList.add("hidden"),u.innerHTML="",xe();return}f.classList.remove("hidden"),m&&(m.textContent=g.t("titleArtist.voteHeader")||"Close calls \u2014 vote \u{1F44D}/\u{1F44E}"),v&&v.classList.remove("hidden");var _="";if(p.forEach(function(L){var U=L.player===s.playerName,W=L.votes_yes||0,N=L.votes_no||0,G=W+N,j=G?Math.round(W/G*100):0,Y=G?100-j:0,z=((L.player||"?").trim().charAt(0)||"?").toUpperCase();if(_+='
'+y(L.player)+''+y(S(L.field))+'
\u201C'+y(L.guess||"\u2014")+'\u201D
\u{1F44D} '+W+'
\u{1F44E} '+N+'
',U)_+='
'+y(g.t("titleArtist.yourCloseCall")||"Your close call \u2014 others decide")+"
";else if(b){var A=s.taMyVotes[L.id],T=A===!0||A===!1;_+='
',T&&(_+='
'+y(g.t("titleArtist.youVoted")||"You voted")+" "+(A?"\u{1F44D}":"\u{1F44E}")+" \xB7 "+y(g.t("titleArtist.tapToChange")||"tap to change")+"
")}w&&b&&(_+='
'+y(g.t("titleArtist.hostOverride")||"Host decides")+'
'),_+="
"}),u.innerHTML=_,b)ws(e);else{xe();var C=document.getElementById("ta-voting-countdown");C&&(C.textContent=g.t("titleArtist.voteClosed")||"Voting closed",C.removeAttribute("aria-label"),C.classList.add("ta-voting-countdown--closed"))}}}function ws(e){xe();var t=document.getElementById("ta-voting-countdown");if(!t)return;var n=e&&typeof e.vote_seconds_remaining=="number"?e.vote_seconds_remaining:za,a=Date.now()+n*1e3;function i(){var r=Math.max(0,Math.ceil((a-Date.now())/1e3));t.textContent=String(r),t.setAttribute("aria-label",g.t("titleArtist.voteCountdown",{seconds:r})||r+"s"),t.style.setProperty("--ta-vote-progress",r/za*360+"deg"),t.classList.remove("ta-voting-countdown--closed"),r<=0&&xe()}i(),Tt=setInterval(i,500)}function xe(){Tt&&(clearInterval(Tt),Tt=null)}function Xa(){var e=document.getElementById("ta-voting-cards");e&&e.addEventListener("click",function(t){var n=t.target.closest(".ta-vote-btn"),a=t.target.closest(".ta-override-btn");if(n){var i=n.getAttribute("data-nearmiss-id"),r=n.getAttribute("data-accept")==="1";s.ws&&s.ws.readyState===WebSocket.OPEN&&s.ws.send(JSON.stringify({type:"title_artist_vote",nearmiss_id:i,accept:r})),s.taMyVotes=s.taMyVotes||{},s.taMyVotes[i]=r;var o=n.closest(".ta-vote-card");if(o){var l=o.querySelector(".ta-vote-actions");l&&l.classList.add("ta-vote-actions--voted"),o.querySelectorAll(".ta-vote-btn").forEach(function(u){u.classList.remove("is-chosen")}),n.classList.add("is-chosen")}return}if(a){var c=a.getAttribute("data-nearmiss-id"),d=a.getAttribute("data-accept")==="1";s.ws&&s.ws.readyState===WebSocket.OPEN&&s.ws.send(JSON.stringify({type:"title_artist_override",nearmiss_id:c,accept:d}));var f=a.closest(".ta-vote-card");f&&(f.querySelectorAll(".ta-override-btn").forEach(function(u){u.classList.remove("is-chosen")}),a.classList.add("is-chosen"))}})}var D=window.BeatifyUtils||{};function er(e){window.scrollTo(0,0);var t=e.leaderboard||[];t.forEach(function(b){b.is_current=b.name===s.playerName}),[1,2,3].forEach(function(b){var w=t.find(function(L){return L.rank===b}),S=document.querySelector(".podium-place.podium-"+b);S&&S.classList.toggle("hidden",!w);var _=document.getElementById("podium-"+b+"-name"),C=document.getElementById("podium-"+b+"-score");_&&(_.textContent=w?y(w.name):"---"),C&&(C.textContent=w?w.score:"0")});var n=t.find(function(b){return b.is_current}),a=document.getElementById("your-final-rank"),i=document.getElementById("your-final-score"),r=document.getElementById("stat-best-streak"),o=document.getElementById("stat-rounds"),l=document.getElementById("stat-bets");n&&(a&&(a.textContent="#"+n.rank),i&&(i.textContent=n.score+" "+D.t("leaderboard.points")),r&&(r.textContent=n.best_streak||0),o&&(o.textContent=n.rounds_played||0),l&&(l.textContent=n.bets_won||0));var c=document.getElementById("final-leaderboard-list");c&&(c.innerHTML=t.map(function(b){var w=b.is_current?"is-current":"",S=b.connected===!1?"final-entry--disconnected":"",_=b.connected===!1?'(away)':"";return'
#'+b.rank+''+y(b.name)+_+''+b.score+"
"}).join("")),Ls(e.superlatives),Ss(e.highlights),_s(e.share_data,n);var d=document.getElementById("end-admin-controls"),f=document.getElementById("end-player-message");if(n&&n.is_admin){d&&d.classList.remove("hidden"),f&&f.classList.add("hidden");var u=document.getElementById("new-game-btn");u&&(u.onclick=Cs);var m=document.getElementById("player-rematch-btn");m&&(m.onclick=function(){m.disabled=!0;var b=m.textContent;if(m.textContent="\u23F3",s.ws&&s.ws.readyState===WebSocket.OPEN){s.ws.send(JSON.stringify({type:"admin",action:"rematch_game"}));return}BeatifyAuth.fetch("/beatify/api/rematch-game",{method:"POST",credentials:"same-origin"}).then(function(w){if(!w.ok)return w.json().then(function(S){throw new Error(S.message||"Rematch failed")});m.textContent="\u23F3"}).catch(function(w){console.error("[Player] Rematch failed:",w),Le(w.message||"Failed to start rematch"),m.disabled=!1,m.textContent=b})})}else d&&d.classList.add("hidden"),f&&f.classList.remove("hidden");if(n){var v=e.total_rounds||10,p=n.best_streak||0,h=p===v&&v>0;h?Oe("perfect"):n.rank===1&&Oe("winner")}}function Ls(e){var t=document.getElementById("superlatives-container");if(t){if(!e||e.length===0){t.classList.add("hidden");return}var n="";e.forEach(function(a,i){var r="";switch(a.value_label){case"avg_time":r=a.value+"s "+D.t("superlatives.avgTime");break;case"streak":r=a.value+" "+D.t("superlatives.streak");break;case"bets":r=a.value+" "+D.t("superlatives.bets");break;case"points":r=a.value+" "+D.t("superlatives.points");break;case"close_guesses":r=a.value+" "+D.t("superlatives.closeGuesses");break;case"perfect_rounds":r=a.value+" "+D.t("superlatives.perfectRounds");break;case"exact_titles":r=a.value+" "+D.t("superlatives.exactTitles");break;case"artists":r=a.value+" "+D.t("superlatives.artists");break;case"near_misses":r=a.value+" "+D.t("superlatives.nearMisses");break;default:r=a.value}n+='
'+a.emoji+'
'+D.t("superlatives."+a.title)+'
'+y(a.player_name)+'
'+r+"
"}),t.innerHTML=n,t.classList.remove("hidden")}}function Ss(e){var t=document.getElementById("highlights-container");if(t){if(!e||e.length===0){t.classList.add("hidden");return}var n=document.getElementById("highlights-list");if(n){var a="";e.forEach(function(i,r){var o=null;i.description_params&&(o={},Object.keys(i.description_params).forEach(function(c){o[c]=y(i.description_params[c])}));var l=D.t("highlights."+i.description,o)||i.description;l===i.description&&o&&(l=D.t("highlights."+i.description)||i.description,Object.keys(o).forEach(function(c){l=l.replace("{"+c+"}",o[c])})),a+='
'+(i.emoji||"\u2728")+'
'+l+'
'+D.t("highlights.roundLabel",{round:i.round})+"
"}),n.innerHTML=a,t.classList.remove("hidden")}}}function xs(e){var t={playerName:"",score:"",isWinner:!1,correct:"",exact:"",streak:""};if(!e||typeof e!="string")return t;for(var n=e.split(` -`),a=0;a0&&(ve+=ke),F.type==="url"?(r.font="800 15px Outfit, system-ui, sans-serif",ve+=r.measureText(F.text).width):(r.font="900 18px Outfit, system-ui, sans-serif",ve+=r.measureText(F.num).width,r.font="600 15px Inter, system-ui, sans-serif",ve+=r.measureText(F.label).width)});var R=A-ve/2;r.textAlign="left",me.forEach(function(F,pe){pe>0&&(r.font="600 15px Inter, system-ui, sans-serif",r.fillStyle="#6b6b7a",r.fillText(" \xB7 ",R,Ce),R+=ke),F.type==="url"?(r.font="800 15px Outfit, system-ui, sans-serif",r.fillStyle="#00f5ff",r.fillText(F.text,R,Ce),R+=r.measureText(F.text).width):(r.font="900 18px Outfit, system-ui, sans-serif",r.fillStyle="#00f5ff",r.fillText(F.num,R,Ce),R+=r.measureText(F.num).width,r.font="600 15px Inter, system-ui, sans-serif",r.fillStyle="#b3b3c2",r.fillText(F.label,R,Ce),R+=r.measureText(F.label).width)})}}function Bs(e){e&&e.toBlob(function(t){if(t){if(navigator.share&&navigator.canShare){var n=new File([t],"beatify-results.png",{type:"image/png"}),a={files:[n],title:"My Beatify Results"};if(navigator.canShare(a)){navigator.share(a).catch(function(){Za(t)});return}}Za(t)}},"image/png")}function Za(e){var t=URL.createObjectURL(e),n=document.createElement("a");n.href=t,n.download="beatify-results.png",document.body.appendChild(n),n.click(),document.body.removeChild(n),URL.revokeObjectURL(t)}function tr(e){var t=document.getElementById("pause-message");t&&(e.pause_reason==="admin_disconnected"?t.textContent=D.t("player.waitingForHostReconnect"):e.pause_reason==="media_player_error"?t.textContent=D.t("player.speakerUnavailable"):t.textContent=D.t("player.gamePaused"))}async function Cs(){var e=await be(D.t("admin.newGameTitle")||"New Game?",D.t("admin.newGameConfirm")||"Start a new game?",D.t("admin.newGame")||"New Game",D.t("common.cancel"));if(e){var t=document.getElementById("new-game-btn");t&&(t.disabled=!0,t.textContent=D.t("player.redirecting"));try{sessionStorage.removeItem("beatify_admin_name"),sessionStorage.removeItem("beatify_is_admin")}catch{}window.location.href="/beatify/admin"}}function ks(e){return typeof requestAnimationFrame=="function"?requestAnimationFrame(e):setTimeout(e,16)}function _n(e,t){let n=t||{},a=typeof n.schedule=="function"?n.schedule:ks,i=typeof n.isEqual=="function"?n.isEqual:null,r=!1,o=!1,l,c,d=!1;function f(){if(r=!1,!o)return;let m=l;o=!1,l=void 0,c=m,d=!0,e(m)}function u(m){i&&d&&!o&&i(m,c)||(l=m,o=!0,r||(r=!0,a(f)))}return u.flush=f,u.cancel=function(){r=!1,o=!1,l=void 0},u}var Z=window.BeatifyUtils||{},ar="beatify_onboarded_v2",As=4e3,Ts=1400;function In(){var e=document.querySelectorAll(".tour-card").length;return e>0?e:4}function Ns(){try{return localStorage.getItem(ar)==="1"}catch{return!1}}function Ms(){try{localStorage.setItem(ar,"1")}catch{}}var k={active:!1,replay:!1,currentIdx:0,autoAdvanceTimer:null,readyTimer:null};function _e(){k.autoAdvanceTimer&&(clearTimeout(k.autoAdvanceTimer),k.autoAdvanceTimer=null)}function Bn(){_e(),!(window.matchMedia&&window.matchMedia("(prefers-reduced-motion: reduce)").matches)&&(k.autoAdvanceTimer=setTimeout(function(){rr()},As))}function Cn(){for(var e=document.querySelectorAll(".tour-wiz-seg"),t=0;t'+o+''}}function rr(){_e(),k.currentIdx=ft&&(s.isReconnecting=!1,t.onGiveUp())}}function js(){var e=document.getElementById("connection-indicator");e&&(e.classList.remove("connection-indicator--connected"),e.classList.add("connection-indicator--disconnected"),e.setAttribute("aria-label","Disconnected"),e.title="Disconnected")}function wr(){var e=document.getElementById("connection-indicator");e&&(e.classList.remove("connection-indicator--disconnected"),e.classList.add("connection-indicator--connected"),e.setAttribute("aria-label","Connected"),e.title="Connected")}function zs(){js();var e=document.getElementById("reconnecting-overlay");e&&e.classList.remove("hidden")}function Ft(){var e=document.getElementById("reconnecting-overlay");e&&e.classList.add("hidden")}function Ys(e){var t=document.getElementById("reconnect-status");t&&(t.textContent=V.t("join.reconnecting",{attempt:e,max:ft}))}function Js(){B("connection-lost-view")}async function gt(){if(!s.gameId){B("not-found-view");return}if(!Gs(s.gameId)){B("not-found-view");return}var e=await ur(s.gameId);if(e===null){console.error("Failed to check game status after retries"),B("not-found-view");return}if(!e.exists){B("not-found-view");return}if(e.phase==="END"){B("ended-view");return}var t=sessionStorage.getItem("beatify_admin_name");if(!t){var n=mt();if(n){Ve();return}e.can_join?B("join-view"):B("in-progress-view")}}function $s(){var e=sessionStorage.getItem("beatify_is_admin"),t=sessionStorage.getItem("beatify_admin_name");return e==="true"&&t&&(s.isAdmin=!0,s.playerName=t,sessionStorage.removeItem("beatify_is_admin")),s.isAdmin}var Qs=15e3,vr=4e4,Ot=null;function Lr(){Sr(),s.lastServerActivity=Date.now(),Ot=setInterval(function(){if(!(!s.ws||s.ws.readyState!==WebSocket.OPEN)){if(Date.now()-s.lastServerActivity>vr){console.warn("[Beatify] No server activity for "+vr+"ms \u2014 socket appears dead, forcing reconnect");try{s.ws.close()}catch{}return}try{s.ws.send(JSON.stringify({type:"ping"}))}catch{}}},Qs)}function Sr(){Ot&&(clearInterval(Ot),Ot=null)}function Ve(){var e=mt();if(e&&!(s.ws&&(s.ws.readyState===WebSocket.CONNECTING||s.ws.readyState===WebSocket.OPEN))){s.lastConnectStartedAt=Date.now(),s.playerName||_r();var t=window.location.protocol==="https:"?"wss:":"ws:",n=t+"//"+window.location.host+"/beatify/ws";s.ws=new WebSocket(n),s.ws.onopen=function(){s.reconnectAttempts=0,s.isReconnecting=!1,Ft(),wr(),Lr(),s.ws.send(JSON.stringify({type:"reconnect",session_id:e}))},s.ws.onmessage=function(a){try{var i=JSON.parse(a.data);xr(i)}catch(r){console.error("Failed to parse WebSocket message:",r)}},s.ws.onclose=Er(function(){mt()?Ve():Ie(s.playerName)}),s.ws.onerror=function(a){console.error("WebSocket error:",a)}}}function Ie(e){var t=s.ws&&(s.ws.readyState===WebSocket.CONNECTING||s.ws.readyState===WebSocket.OPEN);if(!(t&&s.playerName===e)){if(t){if(!s.isAdmin)try{s.ws.send(JSON.stringify({type:"leave"}))}catch{}s.intentionalLeave=!0;try{s.ws.close()}catch{}s.ws=null,vt()}s.playerName=e,hr(e),s.lastConnectStartedAt=Date.now();var n=window.location.protocol==="https:"?"wss:":"ws:",a=n+"//"+window.location.host+"/beatify/ws";s.ws=new WebSocket(a),s.ws.onopen=async function(){s.reconnectAttempts=0,s.isReconnecting=!1,Ft(),wr(),Lr();var i={type:"join",name:e};s.isAdmin&&(i.is_admin=!0,i.ha_token=await BeatifyAuth.ensureAuthenticated()),s.ws.send(JSON.stringify(i))},s.ws.onmessage=function(i){try{var r=JSON.parse(i.data);xr(r)}catch(o){console.error("Failed to parse WebSocket message:",o)}},s.ws.onclose=Er(function(){Ie(s.playerName)}),s.ws.onerror=function(i){console.error("WebSocket error:",i)}}}s.connectWithSession=Ve;s.connectWebSocket=Ie;function xr(e){if(s.lastServerActivity=Date.now(),e.type!=="pong"){if(Ir(),e.type==="game_starting"){var t=document.getElementById("loading-view"),n=document.getElementById("lobby-view"),a=document.getElementById("join-view"),i=n&&!n.classList.contains("hidden"),r=t&&!t.classList.contains("hidden"),o=a&&!a.classList.contains("hidden");(i||r||!o)&&B("starting-view");return}var l=document.getElementById("join-btn"),c=document.getElementById("name-input");if(e.type==="state"){e.leaderboard&&(e=Object.assign({},e,{leaderboard:V.hydrateLeaderboard(e.leaderboard,e.players)}));var d=e.players||[],f=d.find(function(w){return w.name===s.playerName});if(f&&(s.isAdmin=f.is_admin===!0),e.language&&(Us(e.language),typeof BeatifyI18n<"u"&&e.language!==BeatifyI18n.getLanguage()&&BeatifyI18n.setLanguage(e.language).then(function(){BeatifyI18n.initPageTranslations(),zt(d),e.difficulty&&wt(e.difficulty,e.title_artist_mode),e.phase==="REVEAL"&&Ue(e),(e.phase==="PLAYING"||e.phase==="REVEAL")&&kt(e.phase)})),e.join_url&&Xn(e.join_url),e.phase==="LOBBY"){Ee(),ct(),ut.cancel(),Ue.cancel(),ot(),lt(),s.currentRoundNumber=0,he("warmup");var u=document.getElementById("start-game-btn");if(u&&(u.disabled=!1,u.innerHTML=''+V.t("lobby.startGame")+""),s.lastPlayerCount=d.length,s.lastDifficulty=e.difficulty?V.t?V.t("game.difficulty"+e.difficulty.charAt(0).toUpperCase()+e.difficulty.slice(1)):e.difficulty:"",!Rt()&&or(f))lr();else{var m=document.getElementById("ready-view"),v=m&&!m.classList.contains("hidden");!v&&!Rt()&&B("lobby-view"),v&&An(d,s.lastDifficulty)}zt(d),e.difficulty&&wt(e.difficulty,e.title_artist_mode),na(d)}else if(e.phase==="PLAYING"){Rt()&&dr(),ae(),ct(),ht();var p=e.round||1;p!==s.currentRoundNumber&&(s.currentRoundNumber=p,Ia()),En(),he("party"),B("game-view"),De(),Ue.cancel(),ut(e),e.intro_splash_pending?Va(s.isAdmin):ja(),e.difficulty&&wt(e.difficulty,e.title_artist_mode),e.deadline&&Qt(e.deadline,e.seconds_remaining),_a(),La(),bn(),kt("PLAYING"),lt()}else e.phase==="REVEAL"?(Ee(),e.early_reveal&&ia(),he("party"),B("reveal-view"),ut.cancel(),Ue(e),xa(),bn(),kt("REVEAL"),s._reactionRevealRound!==e.round&&(s._reactionRevealRound=e.round,s.hasReactedThisPhase=!1,Oa()),hn()):e.phase==="PAUSED"?(Ee(),ct(),ut.cancel(),Ue.cancel(),ot(),lt(),he("warmup"),B("paused-view"),tr(e)):e.phase==="END"&&(Ee(),ct(),ut.cancel(),Ue.cancel(),ot(),lt(),Jn(),s.currentRoundNumber=0,he("warmup"),B("end-view"),er(e),pt())}else if(e.type==="join_ack"){ht(),e.session_id&&br(e.session_id);try{sessionStorage.removeItem("beatify_admin_name"),sessionStorage.removeItem("beatify_is_admin")}catch{}}else if(e.type==="reconnect_ack")e.success&&e.name?(s.playerName=e.name,hr(e.name),ra(e.name)):(vt(),pt(),s.playerName=null,B("join-view"));else if(e.type==="submit_ack")st();else if(e.type==="metadata_update")Ea(e.song);else if(e.type==="error"){if(e.code==="ROUND_EXPIRED"||e.code==="ALREADY_SUBMITTED"){mn(e);return}if(e.code==="GAME_ENDED"){B("end-view");return}if(e.code==="NOT_ADMIN"){s.isAdmin=!1,ot(),console.warn("Admin action rejected: not admin");return}if(e.code==="SESSION_TAKEOVER"){s.isReconnecting=!1,Ft(),s.playerName=null,B("session-takeover-view"),console.warn("Session taken over by another tab");return}if(e.code==="SESSION_NOT_FOUND"){if(s.isReconnecting){console.warn("SESSION_NOT_FOUND during reconnect, will retry with session");return}vt(),s.intentionalLeave=!0,s.ws&&s.ws.close(),B("join-view");return}if(e.code==="ADMIN_CANNOT_LEAVE"){s.intentionalLeave=!1,Le(e.message||"Host cannot leave. End the game instead.");return}if(e.code==="INVALID_ACTION"&&e.message==="No song playing"){wn(),console.warn("[Beatify] Stop song failed: No song playing");return}console.warn("[Beatify] Action rejected:",e.code,e.message),mn(e)}else if(e.type==="song_stopped")Ga();else if(e.type==="volume_changed")Wa(e.level);else if(e.type==="game_ended")Xs();else if(e.type==="rematch_started"){ee("[Player] Rematch started - transitioning to lobby"),Re.clear(),ae(),Sa(),B("lobby-view");var h=document.getElementById("player-rematch-btn");h&&(h.disabled=!1,h.textContent="\u{1F501}");var b=mt();b&&(s.ws&&s.ws.readyState===WebSocket.OPEN?(s.reconnectAttempts=0,s.ws.send(JSON.stringify({type:"reconnect",session_id:b}))):(s.reconnectAttempts=0,Ve()))}else e.type==="left"?Ks():e.type==="steal_targets"?Aa(e):e.type==="steal_ack"?ka(e):e.type==="sabotage_targets"?Ta(e):e.type==="sabotage_ack"?Na(e):e.type==="sabotaged"?Ma(e):e.type==="artist_guess_ack"?en(e):e.type==="movie_guess_ack"?on(e):e.type==="title_artist_guess_ack"?Ba(e):e.type==="player_reaction"&&Pa(e.player_name,e.emoji)}}function Ks(){pt(),vt(),s.playerName=null,s.isAdmin=!1,B("join-view")}function Xs(){var e=s.isAdmin;pt();try{sessionStorage.removeItem("beatify_admin_name"),sessionStorage.removeItem("beatify_is_admin")}catch{}qn(),Yn(),Re.clear(),ae(),s.playerName=null,s.isAdmin=!1,s.ws&&s.ws.readyState===WebSocket.OPEN&&s.ws.close(),s.ws=null;var t=document.getElementById("end-view");if(!(!t||!t.classList.contains("hidden"))){var n=document.getElementById("end-player-message");n&&(n.innerHTML='

Thanks for playing!

Scan the QR code again to join the next game.

',n.classList.remove("hidden")),B("end-view")}}function Zs(e){var t=document.getElementById("name-validation-msg");t&&(t.textContent=e,t.classList.remove("hidden"))}function Tn(e){var t=(e||"").trim();return t?t.length>Fs?{valid:!1,error:"Name too long (max 20 characters)"}:{valid:!0,name:t}:{valid:!1,error:"Please enter a name"}}function pr(){var e=document.getElementById("name-input"),t=document.getElementById("join-btn"),n=document.getElementById("name-validation-msg");if(!(!e||!t)){var a=Tn(e.value);a.valid&&(t.disabled=!0,t.textContent=V.t("game.joining"),n&&n.classList.add("hidden"),Ie(a.name),_r())}}function _r(){Ir(),s.joinTimeoutId=setTimeout(eo,qs)}function Ir(){s.joinTimeoutId&&(clearTimeout(s.joinTimeoutId),s.joinTimeoutId=null)}function eo(){if(s.joinTimeoutId=null,s.ws){s.intentionalLeave=!0;try{s.ws.close()}catch{}s.ws=null}var e=document.getElementById("join-btn");e&&(e.disabled=!1,e.textContent=V.t("join.joinButton")||"Join Game"),Zs(V.t("errors.joinTimeout")||"Couldn't connect. Please try again."),B("join-view")}function to(){var e=document.getElementById("name-input"),t=document.getElementById("join-btn"),n=document.getElementById("name-validation-msg");!e||!t||(e.addEventListener("input",function(){var a=Tn(this.value);t.disabled=!a.valid,n&&(n.textContent=!a.valid&&this.value?a.error:"",n.classList.toggle("hidden",a.valid||!this.value))}),t.addEventListener("click",pr),e.addEventListener("keypress",function(a){a.key==="Enter"&&!t.disabled&&pr()}))}function no(){var e=document.getElementById("retry-connection-btn");e&&e.addEventListener("click",function(){s.playerName?(s.reconnectAttempts=0,B("loading-view"),Ie(s.playerName)):gt()});var t=document.getElementById("session-rejoin-btn");t&&t.addEventListener("click",function(){vt(),pt(),s.playerName=null,s.reconnectAttempts=0,B("loading-view"),gt()})}async function gr(){try{await BeatifyAuth.init({requireAuth:!1})}catch{}var e=Te.getDeviceTier();document.body.classList.add("device-tier-"+e);var t=await V.waitForI18n();if(!t)console.error("[Player] BeatifyI18n module failed to load - UI will use fallback text");else{var n=Vs();await BeatifyI18n.init(n),BeatifyI18n.initPageTranslations()}var a=document.getElementById("dashboard-hint-url");a&&(a.textContent=window.location.origin+"/beatify/dashboard");var i=document.getElementById("player-dashboard-url");i&&(i.href=window.location.origin+"/beatify/dashboard"),to(),cr(),Zn(),ta(),aa(),Qa(),Ka(),Xa(),Ua(),qa(),no(),Gn(),Wn(),Un(),Da();var r=new URLSearchParams(window.location.search),o=r.get("session"),l=null;try{l=sessionStorage.getItem("beatify_session")}catch{}var c=o||l;if(c){br(c);try{sessionStorage.removeItem("beatify_session")}catch{}}if($s()&&s.playerName){mt()?Ve():Ie(s.playerName);return}var d=Ws();if(d&&s.gameId){ee("[Beatify] Auto-reconnecting as:",d),Ie(d);return}if(d){var f=document.getElementById("name-input"),u=document.getElementById("join-btn");if(f&&(f.value=d,u)){var m=Tn(d);u.disabled=!m.valid}}}gt();document.getElementById("refresh-btn")?.addEventListener("click",function(){B("loading-view"),gt()});document.getElementById("retry-btn")?.addEventListener("click",function(){B("loading-view"),gt()});document.readyState==="loading"?document.addEventListener("DOMContentLoaded",gr):gr();"serviceWorker"in navigator&&window.addEventListener("load",function(){navigator.serviceWorker.register("/beatify/sw.js",{scope:"/beatify/"}).then(function(e){ee("[Beatify] SW registered:",e.scope)}).catch(function(e){console.warn("[Beatify] SW registration failed:",e)})});var ao=3e3;document.addEventListener("visibilitychange",function(){if(document.visibilityState==="visible"){s.playerName&&ht();var e=s.ws;if((!e||e.readyState===WebSocket.CLOSING||e.readyState===WebSocket.CLOSED)&&s.playerName){var t=Date.now()-(s.lastConnectStartedAt||0);if(t=ft&&(s.reconnectAttempts=0),ee("[Beatify] Page visible, WebSocket dead \u2014 reconnecting."),Ve()}}});export{gt as checkGameStatus}; + `).join(""),e.querySelectorAll("[data-cd-pick]").forEach(t=>{t.addEventListener("click",()=>{let n=P.candidates[Number(t.dataset.cdPick)];n&&On({year:n.year,title:n.title,artist:n.artist})})})}async function Rn(){if(!P.busy){P.busy=!0,$(H("admin.library.fixSearching","Searching MusicBrainz\u2026"));try{let e=await Nn("/beatify/api/library-pool/lookup",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({uri:P.uri,song_title:P.songTitle,song_artist:P.songArtist,artist:M.querySelector('[data-cd="artist"]').value,title:M.querySelector('[data-cd="title"]').value})}),t=await e.json().catch(()=>({}));if(!e.ok){$(t.error||H("admin.library.fixFailed","Lookup failed."),!0);return}P.current=t.current||P.current,P.candidates=t.candidates||[],Mn(),kr(),$("")}catch{$(H("admin.library.fixFailed","Lookup failed."),!0)}finally{P.busy=!1}}}async function On({year:e,title:t,artist:n}){if(P.busy)return;let a=M.querySelector('[data-cd="year"]').value,i={uri:P.uri,song_title:P.songTitle,song_artist:P.songArtist};if(e!=null?i.year=e:a!==""&&(i.year=Number(a)),t&&(i.title=t),n&&(i.artist=n),i.year==null&&!i.title&&!i.artist){$(H("admin.library.fixNothing","Pick a match or enter a year first."),!0);return}P.busy=!0,$(H("admin.library.fixSaving","Saving\u2026"));try{let r=await Nn("/beatify/api/library-pool/correct",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(i)}),o=await r.json().catch(()=>({}));if(!r.ok){$(o.error||H("admin.library.fixFailed","Could not save."),!0);return}$(H("admin.library.fixSaved","Saved \u2014 future games will use your correction.")),setTimeout(qt,1200)}catch{$(H("admin.library.fixFailed","Could not save."),!0)}finally{P.busy=!1}}function Ar(e){if(!e||!e.uri&&!e.title)return;let t=Cr();P={uri:e.uri||null,songTitle:e.title||"",songArtist:e.artist||"",current:e,candidates:[],busy:!1},t.querySelector('[data-cd="artist"]').value=e.artist||"",t.querySelector('[data-cd="title"]').value=e.title||"",t.querySelector('[data-cd="year"]').value="",t.querySelector('[data-cd="results"]').innerHTML="",Mn(),$(""),t.classList.remove("hidden"),Rn()}typeof window<"u"&&(window.BeatifyCrateDiggerFix={open:Ar});var Gt=window.BeatifyUtils||{},s={ws:null,playerName:null,isAdmin:!1,reconnectAttempts:0,isReconnecting:!1,intentionalLeave:!1,hasReactedThisPhase:!1,currentRoundNumber:0,joinTimeoutId:null,gameId:new URLSearchParams(window.location.search).get("game"),connectWithSession:null,connectWebSocket:null},Tr=document.getElementById("loading-view"),Nr=document.getElementById("starting-view"),Mr=document.getElementById("not-found-view"),Rr=document.getElementById("ended-view"),Or=document.getElementById("in-progress-view"),Dr=document.getElementById("join-view"),Pr=document.getElementById("tour-view"),Hr=document.getElementById("ready-view"),Fr=document.getElementById("lobby-view"),qr=document.getElementById("game-view"),Gr=document.getElementById("reveal-view"),Wr=document.getElementById("paused-view"),Ur=document.getElementById("end-view"),Vr=document.getElementById("connection-lost-view"),jr=document.getElementById("session-takeover-view"),zr=[Tr,Nr,Mr,Rr,Or,Dr,Pr,Hr,Fr,qr,Gr,Wr,Ur,Vr,jr];function B(e){Gt.showView(zr,e);var t=e==="tour-view"||e==="ready-view",n=e==="game-view"||e==="reveal-view";document.body&&(document.body.classList.toggle("is-learning-screen",t),document.body.classList.toggle("is-ingame",n)),(e==="join-view"||e==="loading-view"||e==="not-found-view"||e==="ended-view"||e==="in-progress-view"||e==="connection-lost-view"||e==="session-takeover-view")&&he("calm"),e==="join-view"&&setTimeout(function(){var a=document.getElementById("name-input");a&&a.focus()},100)}function K(e,t){var n=t||{},a=n.contentSelector||".modal-content",i=e&&e.ownerDocument||(typeof document<"u"?document:null),r=null,o=null,l=null,c='button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])';function d(){var v=e&&e.querySelector(a)||e;if(!v||!v.querySelectorAll)return[];var p=v.querySelectorAll(c);return Array.prototype.filter.call(p,function(h){return!h.disabled&&h.getAttribute("aria-hidden")!=="true"})}function f(v){if(v.key==="Escape"||v.key==="Esc"){typeof l=="function"&&(v.preventDefault&&v.preventDefault(),l());return}if(v.key==="Tab"){var p=d();if(p.length===0){v.preventDefault&&v.preventDefault();return}var h=p[0],b=p[p.length-1],w=i?i.activeElement:null,S=Array.prototype.indexOf.call(p,w);v.shiftKey?S<=0&&(v.preventDefault&&v.preventDefault(),b.focus()):(S===-1||S===p.length-1)&&(v.preventDefault&&v.preventDefault(),h.focus())}}function u(v){v=v||{},l=typeof v.onEscape=="function"?v.onEscape:null,r=i?i.activeElement:null;var p=d(),h=v.initialFocus||p[0];h&&typeof h.focus=="function"&&h.focus(),o=f,i&&i.addEventListener&&i.addEventListener("keydown",o,!0)}function m(){o&&i&&i.removeEventListener&&i.removeEventListener("keydown",o,!0),o=null,l=null,r&&typeof r.focus=="function"&&r.focus(),r=null}return{activate:u,deactivate:m}}function be(e,t,n,a){return new Promise(function(i){var r=document.getElementById("confirm-modal"),o=document.getElementById("confirm-modal-title"),l=document.getElementById("confirm-modal-message"),c=document.getElementById("confirm-modal-yes"),d=document.getElementById("confirm-modal-no");if(!r||!o||!l||!c||!d){i(confirm(t||e));return}o.textContent=e,l.textContent=t,c.textContent=n||Gt.t("common.confirm")||"Confirm",d.textContent=a||Gt.t("common.cancel")||"Cancel";var f=r.querySelector(".modal-backdrop"),u=K(r);r.classList.remove("hidden"),u.activate({initialFocus:d,onEscape:p});function m(){r.classList.add("hidden"),c.removeEventListener("click",v),d.removeEventListener("click",p),f&&f.removeEventListener("click",p),u.deactivate()}function v(){m(),i(!0)}function p(){m(),i(!1)}c.addEventListener("click",v),d.addEventListener("click",p),f&&f.addEventListener("click",p)})}function y(e){var t=document.createElement("div");return t.textContent=e,t.innerHTML}function Je(e){return!!(e&&e.title_artist_mode)}function Yr(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}function Jr(e){return 1-Math.pow(1-e,4)}function Ut(e,t,n,a,i){if(Yr()||t===n)return e.textContent=n,{cancel:function(){},skipToEnd:function(){e.textContent=n}};var r=Te.getQualitySettings();if(r.scoreDuration===0)return e.textContent=n,{cancel:function(){},skipToEnd:function(){e.textContent=n}};var o=Math.min(a,r.scoreDuration||a);i=i||Jr;var l=null,c=null,d=!1,f=n;function u(m){if(!d){l||(l=m);var v=m-l,p=Math.min(v/o,1),h=i(p),b=Math.round(t+(f-t)*h);e.textContent=b,p<1&&(c=requestAnimationFrame(u))}}return c=requestAnimationFrame(u),{cancel:function(){d=!0,c&&cancelAnimationFrame(c)},skipToEnd:function(){d=!0,c&&cancelAnimationFrame(c),e.textContent=f}}}var ne={players:{},leaderboard:[],initialized:!1};function Pn(){return ne.initialized}function Hn(e){var t=e.map(function(a){return a.name}),n={};return t.forEach(function(a,i){var r=ne.leaderboard.indexOf(a);r===-1?n[a]="new":ir&&(n[a]="down")}),n}function bt(e,t){ne.players={},e.forEach(function(n){ne.players[n.name]={score:n.score,rank:n.rank||0,streak:n.streak||0}}),t&&(ne.leaderboard=t.map(function(n){return n.name})),ne.initialized=!0}var Te=(function(){var e=window.matchMedia("(prefers-reduced-motion: reduce)"),t=e.matches;e.addEventListener("change",function(i){t=i.matches});var n=null;function a(){if(n!==null)return n;var i=navigator.hardwareConcurrency||2,r=navigator.deviceMemory||4,o=/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream;return i<=2||r<=2?n="low":i<=4||r<=4||o?n="medium":n="high",n}return a(),{prefersReducedMotion:function(){return t},getDeviceTier:a,getQualitySettings:function(){var i=a();if(t)return{confettiParticles:0,scoreDuration:0,leaderboardAnimation:"none",neonGlow:!1,enableAnimations:!1};switch(i){case"low":return{confettiParticles:5,scoreDuration:0,leaderboardAnimation:"none",neonGlow:!1,enableAnimations:!0};case"medium":return{confettiParticles:10,scoreDuration:300,leaderboardAnimation:"simplified",neonGlow:!1,enableAnimations:!0};default:return{confettiParticles:15,scoreDuration:500,leaderboardAnimation:"full",neonGlow:!0,enableAnimations:!0}}},ifMotionAllowed:function(i,r){t?r&&r():i()},withWillChange:function(i,r,o){i&&(i.style.willChange=r,setTimeout(function(){i&&i.style&&(i.style.willChange="auto")},(o||500)+100))}}})(),Re=(function(){var e=[],t=!1,n=null,a=null,i=2e3;function r(){if(a&&(clearTimeout(a),a=null),e.length===0){t=!1,n=null;return}n=e.shift(),a=setTimeout(function(){n&&n.skipToEnd&&n.skipToEnd(),r()},i),n.run(function(){a&&(clearTimeout(a),a=null),r()})}return{add:function(o){e.push(o),t||(t=!0,r())},skipAll:function(){a&&(clearTimeout(a),a=null),n&&n.skipToEnd&&n.skipToEnd(),e.forEach(function(o){o.skipToEnd&&o.skipToEnd()}),e=[],t=!1,n=null},clear:function(){a&&(clearTimeout(a),a=null),e=[],t=!1,n=null},isRunning:function(){return t},getMaxDuration:function(){return i}}})(),Me={VISIBLE_BUFFER:2,ENTRY_HEIGHT:48,MIN_PLAYERS_FOR_LAZY:10,ROOT_MARGIN:"96px 0px",DEFAULT_VIEWPORT_HEIGHT:280},I={observer:null,fullData:[],visibleRange:{start:0,end:10},listEl:null,isLazyEnabled:!1};function Fn(e){e&&(I.observer&&I.listEl!==e&&(I.observer.disconnect(),I.observer=null),!I.observer&&(I.listEl=e,I.observer=new IntersectionObserver(function(t){t.forEach(function(n){if(!(!n.isIntersecting||!I.isLazyEnabled)){var a=I.fullData,i=I.visibleRange,r=Me.VISIBLE_BUFFER;if(n.target.classList.contains("leaderboard-sentinel--top")){if(i.start>0){var o=Math.max(0,i.start-r);I.visibleRange.start=o,Ye()}}else if(n.target.classList.contains("leaderboard-sentinel--bottom")&&i.end0&&(l+='
'),l+='
';for(var c=n.start;c',r>0&&(l+='
'),e.innerHTML=l,e.scrollTop=o,I.observer){var d=e.querySelectorAll(".leaderboard-sentinel");d.forEach(function(f){I.observer.observe(f)})}}}function Vt(e){if(!e)return"";if(e.separator)return'
...
';var t=e.name||"Unknown",n=e.rank||0,a=e.score||0,i=n<=3?"is-top-"+n:"",r=e.is_current?"is-current":"",o="";e.rank_change>0||e._rankChange==="up"?o="leaderboard-entry--climbing leaderboard-entry--slide-up":(e.rank_change<0||e._rankChange==="down")&&(o="leaderboard-entry--falling leaderboard-entry--slide-down");var l="";e.rank_change>0?l='\u25B2'+e.rank_change+"":e.rank_change<0&&(l='\u25BC'+Math.abs(e.rank_change)+"");var c="";if(e.streak>=2){var d=e.streak>=5?"streak-indicator--hot":"";c='\u{1F525}'+e.streak+""}var f=e.connected===!1?"leaderboard-entry--disconnected":"",u=e.connected===!1?'(away)':"",m=e._displayScore!==void 0?e._displayScore:a;return'
#'+n+''+y(t)+u+''+m+"
"}function jt(e,t){for(var n=Me,a=I.listEl&&I.listEl.clientHeight||n.DEFAULT_VIEWPORT_HEIGHT,i=Math.ceil(a/n.ENTRY_HEIGHT),r=n.VISIBLE_BUFFER,o=-1,l=0;l=e.length-i?(c=Math.max(0,e.length-i-r),d=e.length):(c=Math.max(0,o-Math.floor(i/2)-r),d=Math.min(e.length,o+Math.ceil(i/2)+r)),{start:c,end:d}}function qn(){I.observer&&(I.observer.disconnect(),I.observer=null),I.isLazyEnabled=!1,I.fullData=[]}function Gn(){var e;function t(){clearTimeout(e),e=setTimeout(function(){I.isLazyEnabled&&I.fullData.length>0&&(I.visibleRange=jt(I.fullData,s.playerName),Ye())},150)}window.addEventListener("resize",t),window.addEventListener("orientationchange",t)}function Wn(){var e=document.getElementById("qr-share-area");if(!(!e||e.tagName!=="DETAILS")){var t="beatify_qr_expanded",n=768,a=sessionStorage.getItem(t);a!==null?e.open=a==="true":e.open=window.innerWidth>=n,e.addEventListener("toggle",function(){sessionStorage.setItem(t,e.open.toString())})}}function Un(){var e=document.querySelectorAll(".lobby-container--compact .section-header-collapsible");e.forEach(function(t){t.addEventListener("click",function(){var n=t.closest(".section-collapsible");if(n){var a=n.classList.contains("collapsed");n.classList.toggle("collapsed"),t.setAttribute("aria-expanded",a?"true":"false")}})})}var Vn={ITEM_HEIGHT:60,OVERSCAN:3,THRESHOLD:15,CONTAINER_HEIGHT:320},x={container:null,items:[],scrollTop:0,isVirtual:!1,topSpacer:null,bottomSpacer:null,contentWrapper:null,scrollHandler:null,resizeHandler:null};function jn(e){if(e){x.container=e;var t=!1;x.scrollHandler=function(){x.scrollTop=e.scrollTop,t||(requestAnimationFrame(function(){Wt(),t=!1}),t=!0)};var n;x.resizeHandler=function(){clearTimeout(n),n=setTimeout(function(){x.isVirtual&&Wt()},100)},e.addEventListener("scroll",x.scrollHandler,{passive:!0}),window.addEventListener("resize",x.resizeHandler)}}function zn(e,t){x.items=e,x.renderItem=t;var n=x.container;if(n){var a=n.scrollTop,i=x.isVirtual;e.length0&&(n.scrollTop=a,x.scrollTop=a)}}function $r(){var e=x.container;if(e){e.innerHTML="";var t=document.createElement("div");t.className="virtual-spacer-top",x.topSpacer=t;var n=document.createElement("div");n.className="virtual-content-wrapper",x.contentWrapper=n;var a=document.createElement("div");a.className="virtual-spacer-bottom",x.bottomSpacer=a,e.appendChild(t),e.appendChild(n),e.appendChild(a)}}function Wt(){var e=Vn,t=x.items,n=x.container,a=x.contentWrapper;if(!(!n||!a||!t.length)){var i=n.clientHeight||e.CONTAINER_HEIGHT,r=x.scrollTop,o=e.ITEM_HEIGHT,l=e.OVERSCAN,c=Math.max(0,Math.floor(r/o)-l),d=Math.min(t.length,Math.ceil((r+i)/o)+l);x.topSpacer&&(x.topSpacer.style.height=c*o+"px"),x.bottomSpacer&&(x.bottomSpacer.style.height=(t.length-d)*o+"px");for(var f="",u=c;u"u"){console.warn("[Confetti] Library not loaded");return}ae();var t=Te.getQualitySettings(),n=t.confettiParticles;if(n===0){Dn();return}var a=Te.getDeviceTier(),i=a==="low"?.5:a==="medium"?.75:1;switch(e=e||"exact",e){case"exact":var r=Math.round(2e3*i),o=Date.now()+r;(function v(){confetti({particleCount:n,spread:70,origin:{y:.6},colors:["#FFD700","#FFA500","#FFEC8B"]}),Date.now()0);var l=e.slice().sort(function(p,h){return p.connected!==h.connected?p.connected?-1:1:0}),c=$n.map(function(p){return p.name}),d=l.filter(function(p){return c.indexOf(p.name)===-1}).map(function(p){return p.name});x.container||jn(t);var f=["c1","c2","c3","c4"],u={},m=0;l.forEach(function(p){p.is_admin?u[p.name]="host":u[p.name]=f[m++%f.length]});var v=function(p){var h=d.indexOf(p.name)!==-1,b=p.name===s.playerName,w=p.is_admin===!0,S=p.connected===!1,_=u[p.name]||"c1",C=["player-tile","player-tile--"+_];h&&C.push("is-new"),S&&C.push("player-tile--disconnected");var L=(p.name||"?").trim(),U=(L.charAt(0)||"?").toUpperCase(),W="";w?W='':b&&(W='YOU');var N=S?''+y(re.t("lobby.away"))+"":"";return'
'+y(U)+''+y(L)+""+W+N+"
"};zn(l,v),setTimeout(function(){var p=x.isVirtual?x.contentWrapper:t;if(p)for(var h=p.querySelectorAll(".is-new"),b=0;b5),t.classList.toggle("timer-neon-ring--critical",e<=5)}}}var ei=250,ti=400,Pe=null;function da(){Pe!==null&&typeof cancelAnimationFrame=="function"&&cancelAnimationFrame(Pe),Pe=null}function ni(e){var t=1-e;return 1-t*t*t}function Qt(e,t){var n=typeof t=="number"&&isFinite(t)?Date.now()+t*1e3:e;if(Ke!==null&&se!==null&&typeof requestAnimationFrame=="function"){var a=Math.abs(n-se);if(a<=ei){se=n;return}if(ai(n))return}Ee();var i=document.getElementById("timer");if(!i)return;var r=document.getElementById("timer-neon"),o=document.getElementById("timer-float"),l=document.getElementById("timer-float-num");i.classList.remove("timer--warning","timer--critical"),r&&r.classList.remove("timer-neon--warn","timer-neon-ring--warn","timer-neon-ring--critical"),o&&o.classList.remove("timer-float--warn"),$t=Math.max(1,Math.ceil((n-Date.now())/1e3)),ri(r,o),se=n;var c=0;function d(){var f=Date.now(),u=Math.max(0,Math.ceil((se-f)/1e3));if(i.textContent=u,l&&(l.textContent=u),u<=5?(i.classList.remove("timer--warning"),i.classList.add("timer--critical")):u<=10?(i.classList.remove("timer--critical"),i.classList.add("timer--warning")):i.classList.remove("timer--warning","timer--critical"),r&&r.classList.toggle("timer-neon--warn",u<=10),o&&o.classList.toggle("timer-float--warn",u<=10),la(u),u===10||u===5||u===0){var m=document.getElementById("timer-announcer");if(m){var v=Yt.t?Yt.t.bind(Yt):function(p,h){return h&&typeof h.count<"u"?h.count+" seconds remaining":"Time's up!"};m.textContent=u===0?v("errors.timesUp","Time's up!"):v("errors.secondsRemaining",{count:u})}}u<=0&&(c+=1,(c===1||c%3===0)&&s.ws&&s.ws.readyState===WebSocket.OPEN&&s.ws.send(JSON.stringify({type:"round_timeout"})))}d(),Ke=setInterval(d,1e3)}function oa(e){var t=document.getElementById("timer");if(!t)return!1;var n=document.getElementById("timer-neon"),a=document.getElementById("timer-float"),i=document.getElementById("timer-float-num");return t.textContent=e,i&&(i.textContent=e),e<=5?(t.classList.remove("timer--warning"),t.classList.add("timer--critical")):e<=10?(t.classList.remove("timer--critical"),t.classList.add("timer--warning")):t.classList.remove("timer--warning","timer--critical"),n&&n.classList.toggle("timer-neon--warn",e<=10),a&&a.classList.toggle("timer-float--warn",e<=10),la(e),!0}function ai(e){var t=document.getElementById("timer-neon");if(!document.getElementById("timer"))return!1;var n=se,a=Date.now();da(),t&&t.classList.add("timer-neon--catchup");function i(){var r=Date.now()-a,o=r/ti;if(o>=1){se=e,oa(Math.max(0,Math.ceil((e-Date.now())/1e3))),t&&t.classList.remove("timer-neon--catchup"),Pe=null;return}var l=n+(e-n)*ni(o);se=l,oa(Math.max(0,Math.ceil((l-Date.now())/1e3))),Pe=requestAnimationFrame(i)}return Pe=requestAnimationFrame(i),!0}var le=null,Jt=null;function ri(e,t){if(!(!t||!e)){if(typeof IntersectionObserver>"u"){t.classList.remove("hidden"),t.classList.add("timer-float--visible");return}le&&Jt===e||(le&&le.disconnect(),le=new IntersectionObserver(function(n){var a=n[0];a&&(a.isIntersecting?(t.classList.add("hidden"),t.classList.remove("timer-float--visible")):(t.classList.remove("hidden"),t.classList.add("timer-float--visible")))},{threshold:.1}),le.observe(e),Jt=e)}}function Ee(){Ke&&(clearInterval(Ke),Ke=null),da(),se=null,$t=null;var e=document.getElementById("timer-neon");if(e){e.classList.remove("timer-neon--catchup","timer-neon-ring--warn","timer-neon-ring--critical");var t=e.querySelector(".timer-neon-ring-fg");t&&(t.style.strokeDashoffset="0")}var n=document.getElementById("timer-float");n&&(n.classList.add("hidden"),n.classList.remove("timer-float--visible","timer-float--warn")),le&&(le.disconnect(),le=null,Jt=null)}var ce=window.BeatifyUtils||{},we=!1,de=null,Lt=null,ii=300,ca=0;function Zt(e,t){var n=document.getElementById("artist-challenge-container");if(n){if(!e||!e.options){n.classList.add("hidden");return}n.classList.remove("hidden");var a=document.getElementById("artist-options"),i=document.getElementById("artist-result"),r=Array.from(a.querySelectorAll(".artist-option-btn")).map(function(f){return f.dataset.artist}),o=e.options;if(JSON.stringify(r)!==JSON.stringify(o)&&(a.innerHTML="",o.forEach(function(f,u){var m=document.createElement("button");m.className="artist-option-btn",m.dataset.artist=f,m.dataset.index=u,m.textContent=f,m.addEventListener("click",function(){si(f)}),a.appendChild(m)})),e.winner){var l=a.querySelectorAll(".artist-option-btn");if(l.forEach(function(f){f.classList.add("is-disabled"),f.classList.remove("is-loading","is-wrong");var u=e.correct_artist||Lt;u&&f.dataset.artist===u&&f.classList.add("is-winner")}),e.winner===s.playerName){var c=e.bonus_points||5;i.textContent=(ce.t("artistChallenge.youGotIt")||"You got it! +{points} points").replace("{points}",c),i.className="artist-result is-winner"}else{var d=(ce.t("artistChallenge.someoneBeatYou")||"{winner} got it first!").replace("{winner}",e.winner);i.textContent=d,i.className="artist-result is-late"}i.classList.remove("hidden"),we=!0}else we||i.classList.add("hidden")}}function si(e){var t=Date.now();if(!(t-ca0;if(t&&(t.classList.remove("is-loading"),t.classList.add("is-correct"),n)){var a=document.createElement("span");a.className="movie-rank-badge",a.textContent="+"+e.bonus,t.appendChild(a)}an();var i;n?i=(He.t("movieChallenge.youGotIt")||"Correct! +{bonus} points").replace("{bonus}",e.bonus):i=He.t("movieChallenge.someoneFaster")||"Correct, but someone was faster",rn(i,n),Fe=!0}else t&&(t.classList.remove("is-loading"),t.classList.add("is-wrong","is-selected")),an(),rn(He.t("movieChallenge.wrongGuess")||"Not quite...",!1),Fe=!0;qe=null}function an(){document.querySelectorAll(".movie-option-btn").forEach(function(e){e.classList.add("is-disabled"),e.classList.remove("is-loading")})}function rn(e,t){var n=document.getElementById("movie-result");n&&(n.textContent=e,n.className="movie-result "+(t?"is-winner":"is-late"),n.classList.remove("hidden"))}function ln(){Fe=!1,qe=null;var e=document.getElementById("movie-challenge-container");e&&e.classList.add("hidden");var t=document.getElementById("movie-options");t&&(t.innerHTML="");var n=document.getElementById("movie-result");n&&(n.classList.add("hidden"),n.className="movie-result hidden")}function dn(e,t){var n=document.getElementById("movie-reveal-section");if(n){if(!e||!e.correct_movie){n.classList.add("hidden");return}n.classList.remove("hidden");var a=document.getElementById("movie-reveal-name");a&&(a.textContent=e.correct_movie);var i=document.getElementById("movie-reveal-winners");if(i&&e.results){var r=e.results.winners||[];if(r.length>0){i.innerHTML="",i.classList.remove("hidden");var o=document.createElement("div");o.className="movie-reveal-winners-title",o.textContent=He.t("movieChallenge.winnersTitle")||"Movie Quiz Winners",i.appendChild(o),r.forEach(function(c){var d=document.createElement("div");d.className="movie-reveal-winner-entry",c.name===t?d.classList.add("is-you"):d.classList.add("is-other"),d.textContent=c.name+" \u2014 +"+c.bonus+" ("+c.time+"s)",i.appendChild(d)})}else{i.innerHTML="",i.classList.remove("hidden");var l=document.createElement("div");l.className="movie-reveal-no-winner",l.textContent=He.t("movieChallenge.noWinner")||"No one guessed the movie",i.appendChild(l)}}}}var fa="beatify-toast-container",di=4e3;function ma(e,t){try{if(window.BeatifyI18n&&typeof window.BeatifyI18n.t=="function"){var n=window.BeatifyI18n.t(e);if(n&&n!==e)return n}}catch{}return t}function ci(){var e=document.getElementById(fa);return e||(e=document.createElement("div"),e.id=fa,e.className="beatify-toast-container",e.setAttribute("aria-live","polite"),e.setAttribute("aria-atomic","false"),document.body.appendChild(e)),e}function Le(e,t){if(t=t||{},!e)return null;var n=ci(),a=typeof t.duration=="number"?t.duration:di,i=t.type||"error",r=document.createElement("div");r.className="beatify-toast beatify-toast--"+i,r.setAttribute("role","status");var o=document.createElement("div");if(o.className="beatify-toast-body",t.icon!==null){var l=document.createElement("span");l.className="beatify-toast-icon",l.setAttribute("aria-hidden","true"),l.textContent=t.icon||(i==="success"?"\u2705":i==="info"?"\u2139\uFE0F":"\u26A0\uFE0F"),o.appendChild(l)}var c=document.createElement("span");c.className="beatify-toast-text",c.textContent=String(e),o.appendChild(c),r.appendChild(o);var d=document.createElement("button");if(d.type="button",d.className="beatify-toast-close",d.setAttribute("aria-label",ma("common.close","Dismiss")),d.textContent="\xD7",r.appendChild(d),a>0){var f=document.createElement("div");f.className="beatify-toast-progress",f.style.animationDuration=a+"ms",r.appendChild(f)}n.appendChild(r),typeof requestAnimationFrame=="function"?requestAnimationFrame(function(){r.classList.add("beatify-toast--in")}):r.classList.add("beatify-toast--in");var u=!1,m=null;function v(){u||(u=!0,m&&clearTimeout(m),r.classList.remove("beatify-toast--in"),r.classList.add("beatify-toast--leaving"),setTimeout(function(){r.parentNode&&r.parentNode.removeChild(r)},280))}return d.addEventListener("click",v),a>0&&(m=setTimeout(v,a)),r}function ui(e,t){if(t=t||{},!e)return null;var n=t.anchor;typeof n=="string"&&(n=document.getElementById(n));var a=t.parent;if(typeof a=="string"&&(a=document.getElementById(a)),a||(a=n?n.parentNode:null),!a)return null;var i=t.id||"beatify-banner",r=document.getElementById(i);r&&r.parentNode&&r.parentNode.removeChild(r);var o=document.createElement("div");o.id=i,o.className="beatify-banner beatify-banner--"+(t.type||"error"),o.setAttribute("role","alert");var l=document.createElement("span");l.className="beatify-banner-icon",l.setAttribute("aria-hidden","true"),l.textContent=t.icon||"\u26D4",o.appendChild(l);var c=document.createElement("div");if(c.className="beatify-banner-content",t.title){var d=document.createElement("div");d.className="beatify-banner-title",d.textContent=String(t.title),c.appendChild(d)}var f=document.createElement("div");if(f.className="beatify-banner-text",f.textContent=String(e),c.appendChild(f),t.detail&&String(t.detail)!==String(e)){var u=document.createElement("div");u.className="beatify-banner-detail",u.textContent=String(t.detail),c.appendChild(u)}if(t.action&&t.action.label&&typeof t.action.onClick=="function"){var m=document.createElement("button");m.type="button",m.className="beatify-banner-action",m.textContent=String(t.action.label),m.addEventListener("click",function(){o.parentNode&&o.parentNode.removeChild(o),t.action.onClick()}),c.appendChild(m)}if(o.appendChild(c),t.dismissible!==!1){var v=document.createElement("button");v.type="button",v.className="beatify-banner-close",v.setAttribute("aria-label",ma("common.close","Dismiss")),v.textContent="\xD7",v.addEventListener("click",function(){o.parentNode&&o.parentNode.removeChild(o)}),o.appendChild(v)}return n&&n.parentNode===a?a.insertBefore(o,n):a.appendChild(o),o}function fi(e){var t=document.getElementById(e||"beatify-banner");t&&t.parentNode&&t.parentNode.removeChild(t)}try{window.BeatifyNotify={showToast:Le,showBanner:ui,clearBanner:fi}}catch{}var Xe=null,Ze=null,et=null,E=window.BeatifyUtils||{},mi=E.debug||function(){},un=[],va=32,vi=8;function pi(e,t){var n=document.getElementById("year-scale");if(n&&(n.textContent="",!(!isFinite(e)||!isFinite(t)||t<=e))){for(var a=10;(t-e)/a>vi;)a=a===10?20:a*2.5;for(var i=va/2,r=Math.ceil(e/a)*a,o=[],l=r;l<=t;l+=a)o.push(l);var c=o.map(function(f){return f%100}),d=c.some(function(f,u){return c.indexOf(f)!==u});o.forEach(function(f){var u=(f-e)/(t-e),m=document.createElement("span");m.textContent=d?String(f):"'"+String(f%100).padStart(2,"0"),m.style.left="calc("+i+"px + "+u+" * (100% - "+va+"px))",n.appendChild(m)})}}function gi(e){var t=document.getElementById("year-slider");if(!(!t||!e)){var n=parseInt(e.min,10),a=parseInt(e.max,10);if(!(!isFinite(n)||!isFinite(a)||n>=a)){parseInt(t.min,10)!==n&&(t.min=String(n)),parseInt(t.max,10)!==a&&(t.max=String(a));var i=parseInt(t.value,10);if(!isFinite(i)||ia){var r=Math.max(n,Math.min(a,isFinite(i)?i:n));t.value=String(r);var o=document.getElementById("selected-year");o&&(o.textContent=String(r))}pi(n,a)}}}function yi(e){if(!q){var t=La(e&&e.players);!t||!t.submitted||st()}}function Ea(e){gi(e.year_range),yi(e);var t=document.getElementById("current-round"),n=document.getElementById("total-rounds"),a=document.getElementById("last-round-banner");t&&(t.textContent=e.round||1),n&&(n.textContent=e.total_rounds||10),a&&(e.last_round?(a.classList.remove("hidden"),e.finale_double_active?(a.textContent=E.t("game.finaleDouble"),a.classList.add("arc-chip--finale")):(a.textContent=E.t("game.finalRound"),a.classList.remove("arc-chip--finale"))):a.classList.add("hidden"));var i=document.getElementById("closest-wins-badge");i&&(e.closest_wins_mode?i.classList.remove("hidden"):i.classList.add("hidden")),Ei(e);var r=document.getElementById("intro-badge"),o=document.getElementById("intro-splash");if(r)if(e.is_intro_round){r.classList.remove("hidden");var l=r.querySelector("[data-i18n]");e.intro_stopped?(r.classList.add("intro-badge--stopped"),l&&(l.setAttribute("data-i18n","game.introStopped"),l.textContent=E.t("game.introStopped")||"Intro complete!")):(r.classList.remove("intro-badge--stopped"),l&&(l.setAttribute("data-i18n","game.introRound"),l.textContent=E.t("game.introRound")||"INTRO ROUND"),o&&!o._shown&&(o._shown=!0,o.classList.remove("hidden"),setTimeout(function(){o.classList.add("hidden")},2e3)))}else r.classList.add("hidden"),r.classList.remove("intro-badge--stopped"),o&&(o.classList.add("hidden"),o._shown=!1);var c=document.getElementById("album-cover"),d=document.getElementById("album-loading");if(c&&e.song){var f=e.song.album_art||"/beatify/static/img/no-artwork.svg";if(c._beatifyRequestedSrc!==f){c._beatifyRequestedSrc=f,d&&d.classList.remove("hidden"),c._beatifyOnLoad&&c.removeEventListener("load",c._beatifyOnLoad),c._beatifyOnError&&c.removeEventListener("error",c._beatifyOnError);var u=function(){d&&d.classList.add("hidden")},m=function(){c._beatifyRequestedSrc=null,c.src="/beatify/static/img/no-artwork.svg",d&&d.classList.add("hidden")};c._beatifyOnLoad=u,c._beatifyOnError=m,c.addEventListener("load",u,{once:!0}),c.addEventListener("error",m,{once:!0}),c.src=f}}wi(e),it(),hi(e),Li(e.players),e.leaderboard&&(un=e.leaderboard,Si(e,"leaderboard-list")),Ni(e.players),Pi(e.players),e.artist_challenge!==void 0&&Zt(e.artist_challenge,"PLAYING"),e.movie_challenge!==void 0&&sn(e.movie_challenge,"PLAYING"),Ai(e)}function wa(e){if(e){var t=document.getElementById("album-cover"),n=document.getElementById("album-loading");if(t&&e.album_art){var a=e.album_art;if(t.src===a)return;t.style.transition="opacity 0.3s ease-in-out",t.style.opacity="0.5";var i=new Image;i.onload=function(){t.src=a,t.style.opacity="1",n&&n.classList.add("hidden")},i.onerror=function(){t.src="/beatify/static/img/no-artwork.svg",t.style.opacity="1",n&&n.classList.add("hidden")},i.src=a}mi("[Metadata] Updated:",e.artist,"-",e.title)}}function bi(e){if(!e)return"?";var t=e.trim();if(!t)return"?";var n=t.split(/[\s-]+/).filter(Boolean);return n.length>=2?(n[0][0]+n[1][0]).toUpperCase():t.slice(0,Math.min(2,t.length)).toUpperCase()}function it(){var e=document.getElementById("arc-chip-row");if(e){var t=["game-difficulty-badge","steal-indicator","sabotage-indicator","closest-wins-badge","intro-badge","last-round-banner"],n=t.some(function(a){var i=document.getElementById(a);return i&&!i.classList.contains("hidden")});e.classList.toggle("hidden",!n)}}function hi(e){var t=document.getElementById("no-bonus-filler");if(t){var n=!!(e&&e.artist_challenge&&e.artist_challenge.options),a=!!(e&&e.movie_challenge&&e.movie_challenge.options),i=Je(e);t.classList.toggle("hidden",n||a||i)}}var Se=!1;function La(e){return!s.playerName||!e?null:e.find(function(t){return t.name===s.playerName})||null}function Ei(e){var t=e&&e.bet_win_multiplier;if(!(typeof t!="number"||t<=0)){var n=document.getElementById("bet-toggle");if(n){var a=n.querySelector(".bet-label");a&&(a.removeAttribute("data-i18n"),a.textContent="\xD7"+t)}}}function wi(e){var t=document.getElementById("eliminated-view");if(t){var n=!!(e&&e.sudden_death_mode),a=La(e&&e.players),i=n&&!!(a&&a.eliminated);Se=i;var r=[document.getElementById("year-selector-container"),document.getElementById("year-display-arc"),document.getElementById("bet-toggle"),document.getElementById("submit-btn"),document.getElementById("title-artist-container"),document.getElementById("submitted-banner")];if(i){r.forEach(function(u){u&&u.classList.add("hidden")}),t.classList.remove("hidden");var o=document.getElementById("album-cover"),l=document.getElementById("eliminated-album-cover");l&&o&&o.src&&(l.src=o.src);var c=document.getElementById("eliminated-sub");if(c){var d=a&&a.eliminated_round!=null?a.eliminated_round:e&&e.round||"";c.textContent=E.t("game.eliminatedRound",{round:d})||"Eliminated \xB7 Round "+d}hn()}else{r.forEach(function(u){u&&u.classList.remove("hidden")}),t.classList.add("hidden");var f=document.getElementById("submitted-banner");f&&!q&&f.classList.add("hidden")}}}function Li(e){var t=document.getElementById("submission-tracker"),n=document.getElementById("submitted-players"),a=document.getElementById("arc-submission-count");if(!(!t||!n)){var i=e||[],r=i.filter(function(m){return!m.eliminated}),o=r.filter(function(m){return m.submitted}).length,l=r.length,c=o===l&&l>0;t.classList.toggle("all-submitted",c),a&&(l===0?a.textContent="":c?a.textContent=E.t("game.allSubmitted")||"All in":a.textContent=E.t("game.submittedCount",{count:o,total:l})||o+" of "+l+" submitted");var d=document.getElementById("submitted-banner"),f=document.getElementById("submitted-banner-text");if(d&&f&&!d.classList.contains("hidden")){var u=Math.max(0,l-o);u===0?f.textContent=E.t("game.lockedInAllSubmitted")||"Locked in \xB7 everyone submitted":f.textContent=E.t("game.lockedInWaitingCount",{count:u})||"Locked in \xB7 waiting for "+u+" more"}n.innerHTML=i.map(function(m){var v=bi(m.name),p=m.name===s.playerName,h=m.connected===!1,b=!!m.eliminated,w=["player-indicator",m.submitted&&!b?"is-submitted":"",p?"is-current-player":"",h?"player-indicator--disconnected":"",b?"is-eliminated":""].filter(Boolean).join(" "),S="";if(b){var _=m.eliminated_round!=null?m.eliminated_round:"",C=E.t("game.outRound",{round:_})||"Out \xB7 R"+_;S+=''+y(C)+""}else m.steal_used&&(S+='\u{1F977}'),m.sabotage_used&&(S+='\u{1F4A3}'),m.bet&&(S+='\u{1F3B2}');var L=b?'':''+y(v)+"";return'
'+S+'
'+L+'
'+y(m.name)+"
"}).join("")}}function Si(e,t,n){var a=e.leaderboard||[],i=document.getElementById(t||"leaderboard-list");if(i){var r=n&&Pn(),o=r?Hn(a):{};a.forEach(function(u){u.is_current=u.name===s.playerName;var m=o[u.name];m&&(u._rankChange=m);var v=ne.players[u.name],p=v?v.score:u.score;u._prevScore=p,u._displayScore=n?p:u.score});var l=xi(a,s.playerName),c=a.length>=Me.MIN_PLAYERS_FOR_LAZY;if(c)I.observer||Fn(i),I.fullData=l,I.isLazyEnabled=!0,I.listEl=i,I.visibleRange=jt(l,s.playerName),Ye();else{I.isLazyEnabled=!1;var d="";l.forEach(function(u){d+=Vt(u)}),i.innerHTML=d}var f=[];r&&l.forEach(function(u){!u.separator&&u._prevScore!==u.score&&f.push({name:u.name,prevScore:u._prevScore,newScore:u.score})}),r&&f.length>0&&requestAnimationFrame(function(){for(var u={},m=i.querySelectorAll(".leaderboard-entry[data-name]"),v=0;v8&&_i(i),Ii(a),Bi(a),bt(e.players||[],a)}}function xi(e,t){if(e.length<=10)return e;for(var n=e.slice(0,5),a=e.slice(-3),i=-1,r=0;r=e.length-3?[].concat(n,[{separator:!0}],a):[].concat(n,[{separator:!0}],[e[i]],[{separator:!0}],a)}function _i(e){var t=e.querySelector(".leaderboard-entry.is-current");t&&t.scrollIntoView({behavior:"smooth",block:"center"})}function Ii(e){var t=document.getElementById("leaderboard-you"),n=e.find(function(a){return a.is_current});t&&n&&(t.textContent=E.t("leaderboard.you")+" #"+n.rank,t.classList.remove("hidden"))}function Sa(){var e=document.getElementById("leaderboard-toggle"),t=document.getElementById("game-leaderboard");e&&t&&!e.hasAttribute("data-initialized")&&(e.setAttribute("data-initialized","true"),e.addEventListener("click",function(){var n=t.classList.toggle("collapsed");e.setAttribute("aria-expanded",!n)}))}function Bi(e,t){var n=t?[t]:["leaderboard-summary","reveal-leaderboard-summary"];n.forEach(function(a){var i=document.getElementById(a);if(!(!i||!e||e.length===0)){var r=e[0];r&&(i.textContent=r.name+": "+r.score)}})}function xa(e){var t=e?[e]:["leaderboard-summary","reveal-leaderboard-summary"];t.forEach(function(n){var a=document.getElementById(n);a&&(a.textContent="")})}function _a(){var e=document.getElementById("reveal-leaderboard-toggle"),t=document.getElementById("reveal-leaderboard");e&&t&&!e.hasAttribute("data-initialized")&&(e.setAttribute("data-initialized","true"),e.addEventListener("click",function(){var n=t.classList.toggle("collapsed");e.setAttribute("aria-expanded",!n)}))}var q=!1,Ci=5e3,tt=null;function fn(){tt&&(clearTimeout(tt),tt=null)}var Ge=!1,nt=!1,at=!1,xt=0,Bt=!1,cn=!1,pa=!1,ga=!1;function Ia(){if(ga)return;var e=document.getElementById("year-slider"),t=document.getElementById("selected-year");if(!e||!t)return;ga=!0,e.addEventListener("input",function(){Se||(t.textContent=this.value)});function n(b){var w=parseInt(e.value,10)+b;w=Math.max(parseInt(e.min,10),Math.min(parseInt(e.max,10),w)),e.value=w,t.textContent=w}function a(b,w){if(!b)return;var S=null,_=null;b.addEventListener("pointerdown",function(L){q||Se||(L.preventDefault(),n(w),_=setTimeout(function(){S=setInterval(function(){n(w)},150)},500))});function C(){_&&(clearTimeout(_),_=null),S&&(clearInterval(S),S=null)}["pointerup","pointerleave","pointercancel"].forEach(function(L){b.addEventListener(L,C)}),b.addEventListener("keydown",function(L){q||Se||(L.key==="Enter"||L.key===" ")&&(L.preventDefault(),n(w))})}a(document.getElementById("year-decrement"),-1),a(document.getElementById("year-increment"),1),a(document.getElementById("year-decrement-5"),-5),a(document.getElementById("year-increment-5"),5);var i=document.getElementById("bet-toggle");i&&i.addEventListener("click",function(){q||Bt||(Ge=!Ge,i.classList.toggle("is-active",Ge))});var r=document.getElementById("submit-btn");if(r&&r.addEventListener("click",function(){cn?ya():ki()}),!pa){var o=document.getElementById("ta-title-input"),l=document.getElementById("ta-artist-input");o&&o.addEventListener("keydown",function(b){b.key==="Enter"&&(b.preventDefault(),l&&l.focus())}),l&&l.addEventListener("keydown",function(b){b.key==="Enter"&&(b.preventDefault(),cn&&ya())}),pa=!0}var c=document.getElementById("steal-btn");c&&c.addEventListener("click",Mi);var d=document.getElementById("steal-modal-close");d&&d.addEventListener("click",_t);var f=document.getElementById("steal-modal");if(f){var u=f.querySelector(".steal-modal-backdrop");u&&u.addEventListener("click",_t)}var m=document.getElementById("sabotage-btn");m&&m.addEventListener("click",Hi);var v=document.getElementById("sabotage-modal-close");v&&v.addEventListener("click",It);var p=document.getElementById("sabotage-modal");if(p){var h=p.querySelector(".steal-modal-backdrop");h&&h.addEventListener("click",It)}}function ki(){if(!q&&!Se){if(xt&&Date.now()"+y(E.t("game.waitingForOthers")||"Waiting for others")+''),a&&(a.disabled=!0),i&&i.classList.remove("hidden"),["year-decrement","year-increment","year-decrement-5","year-increment-5"].forEach(function(r){var o=document.getElementById(r);o&&(o.disabled=!0)})}function mn(e){var t=document.getElementById("submit-btn");t&&(t.disabled=!1,t.classList.remove("is-loading")),e.code==="ROUND_EXPIRED"?(We(E.t("errors.timesUp")),q=!0,t&&(t.disabled=!0)):e.code==="ALREADY_SUBMITTED"?st():We(e.message||"Submission failed")}function We(e){var t=document.getElementById("submit-btn");t&&(t.textContent=e,t.classList.add("is-error"),setTimeout(function(){t.textContent=E.t("game.submitGuess"),t.classList.remove("is-error")},2e3))}function Ba(){fn(),q=!1,Ge=!1;var e=document.getElementById("year-selector"),t=document.getElementById("year-display-arc"),n=document.getElementById("submit-btn"),a=document.getElementById("year-slider"),i=document.getElementById("bet-toggle"),r=document.getElementById("submitted-banner");if(e&&e.classList.remove("is-submitted","slider-arcade--locked"),t&&t.classList.remove("year-xxl--locked"),n&&(n.disabled=!1,n.classList.remove("hidden","is-loading","is-error","submit-arc--waiting"),n.textContent=E.t("game.submitGuess")),i&&(i.disabled=!1,i.classList.remove("hidden","is-active")),r&&r.classList.add("hidden"),a){var o=parseInt(a.min,10),l=parseInt(a.max,10),c=1990;isFinite(o)&&isFinite(l)&&(c=Math.max(o,Math.min(l,c))),a.value=c;var d=document.getElementById("selected-year");d&&(d.textContent=String(c))}["year-decrement","year-increment","year-decrement-5","year-increment-5"].forEach(function(f){var u=document.getElementById(f);u&&(u.disabled=!1)}),nt=!1,vn(),at=!1,xt=0,Wi(),gn(),tn(),ln(),Ti()}function Ai(e){var t=Je(e);cn=t;var n=document.getElementById("title-artist-container"),a=document.getElementById("year-selector-container"),i=document.getElementById("year-display-arc"),r=document.getElementById("bet-toggle");if(Se){n&&n.classList.add("hidden"),a&&a.classList.add("hidden"),i&&i.classList.add("hidden"),r&&r.classList.add("hidden");return}if(n&&n.classList.toggle("hidden",!t),a&&a.classList.toggle("hidden",t),i&&i.classList.toggle("hidden",t),r&&r.classList.toggle("hidden",t),!!t){var o=document.getElementById("submit-btn");o&&!q&&(o.textContent=E.t("titleArtist.submitGuess")||"Submit")}}function ya(){if(!q&&!Se){var e=document.getElementById("ta-title-input"),t=document.getElementById("ta-artist-input"),n=document.getElementById("submit-btn");if(!(!e||!t||!n)){var a=(e.value||"").trim(),i=(t.value||"").trim();n.disabled=!0,n.classList.add("is-loading"),s.ws&&s.ws.readyState===WebSocket.OPEN?s.ws.send(JSON.stringify({type:"title_artist_guess",title:a,artist:i})):(We(E.t("errors.connectionLost")),n.disabled=!1,n.classList.remove("is-loading"))}}}function Ca(e){st();var t=document.getElementById("ta-title-input"),n=document.getElementById("ta-artist-input");t&&(t.disabled=!0),n&&(n.disabled=!0);var a=document.getElementById("ta-input-ack");a&&(a.textContent=E.t("titleArtist.submitted")||"Submitted \u2014 see how you did at the reveal!",a.classList.remove("hidden"))}function Ti(){var e=document.getElementById("ta-title-input"),t=document.getElementById("ta-artist-input"),n=document.getElementById("ta-input-ack");e&&(e.value="",e.disabled=!1),t&&(t.value="",t.disabled=!1),n&&(n.textContent="",n.classList.add("hidden"))}function Ni(e){if(!(!s.playerName||!e)){var t=e.find(function(i){return i.name===s.playerName});if(t){nt=t.steal_available&&!q;var n=document.getElementById("steal-indicator"),a=document.getElementById("steal-btn");nt?(n&&n.classList.remove("hidden"),a&&a.classList.remove("hidden")):vn(),it()}}}function vn(){var e=document.getElementById("steal-indicator"),t=document.getElementById("steal-btn");e&&e.classList.add("hidden"),t&&t.classList.add("hidden"),it()}function Mi(){!nt||q||s.ws&&s.ws.readyState===WebSocket.OPEN&&s.ws.send(JSON.stringify({type:"get_steal_targets"}))}function Ri(e,t){var n=document.getElementById("steal-modal"),a=document.getElementById("steal-target-list");if(!(!n||!a)){a.innerHTML="";var i=t||un;if(!e||e.length===0){var r=document.createElement("p");r.className="steal-no-targets",r.textContent=E.t("steal.waitForSubmit"),a.appendChild(r)}else{var o={};i.forEach(function(l){l&&l.name!=null&&(o[l.name]=l)}),e.forEach(function(l){var c=o[l]||null,d=document.createElement("button");d.className="steal-target-btn steal-target-row";var f=!!c&&Number(c.rank)===1;f&&d.classList.add("steal-target-row--leader"),d.setAttribute("aria-label",ka(l,c,f));var u=document.createElement("span");if(u.className="steal-target-rank",u.setAttribute("aria-hidden","true"),u.textContent=c&&c.rank!=null?String(c.rank):"\u2013",d.appendChild(u),f){var m=document.createElement("span");m.className="steal-target-crown",m.setAttribute("aria-hidden","true"),m.textContent="\u{1F451}",d.appendChild(m)}var v=document.createElement("span");v.className="steal-target-name",v.textContent=l,d.appendChild(v);var p=document.createElement("span");p.className="steal-target-score",p.setAttribute("aria-hidden","true"),p.textContent=c?pn(c.score):"",d.appendChild(p),d.addEventListener("click",function(){Oi(l)}),a.appendChild(d)})}n.classList.remove("hidden"),Xe=Xe||K(n,{contentSelector:".steal-modal-content"}),Xe.activate({onEscape:_t})}}function pn(e){var t=Number(e)||0;try{return t.toLocaleString()}catch{return String(t)}}function ka(e,t,n){if(!t)return e;var a=[e];return t.rank!=null&&a.push("#"+t.rank),t.score!=null&&a.push(pn(t.score)),n&&a.push(E.t("leaderboard.leader")||"leader"),a.join(" \xB7 ")}function _t(){var e=document.getElementById("steal-modal");e&&e.classList.add("hidden"),Xe&&Xe.deactivate()}async function Oi(e){var t=E.t("steal.confirm").replace("{name}",e),n=await be(E.t("steal.confirmTitle")||"Steal Answer?",t,E.t("steal.confirmButton")||"Steal",E.t("common.cancel"));n&&(s.ws&&s.ws.readyState===WebSocket.OPEN&&s.ws.send(JSON.stringify({type:"steal",target:e})),_t())}function Aa(e){if(e.success){nt=!1,q=!0,vn();var t=document.getElementById("year-selector"),n=document.getElementById("submit-btn"),a=document.getElementById("submitted-confirmation");t&&t.classList.add("is-submitted"),n&&n.classList.add("hidden"),a&&a.classList.remove("hidden"),Di(e.target,e.year);var i=document.getElementById("selected-year"),r=document.getElementById("year-slider");i&&(i.textContent=e.year),r&&(r.value=e.year)}}function Ta(e){Ri(e.targets||[],e.leaderboard)}function Di(e,t){var n=document.getElementById("steal-confirmation"),a=document.getElementById("steal-confirmation-text");if(!(!n||!a)){var i=E.t("steal.success").replace("{name}",e).replace("{year}",t);a.textContent=i,n.classList.remove("hidden"),setTimeout(function(){n.classList.add("hidden")},3e3)}}var ba=3e3;function Pi(e){if(!(!s.playerName||!e)){var t=e.find(function(i){return i.name===s.playerName});if(t){at=t.sabotage_available&&!q;var n=document.getElementById("sabotage-indicator"),a=document.getElementById("sabotage-btn");at?(n&&n.classList.remove("hidden"),a&&a.classList.remove("hidden")):gn(),it()}}}function gn(){var e=document.getElementById("sabotage-indicator"),t=document.getElementById("sabotage-btn");e&&e.classList.add("hidden"),t&&t.classList.add("hidden"),it()}function Hi(){!at||q||s.ws&&s.ws.readyState===WebSocket.OPEN&&s.ws.send(JSON.stringify({type:"get_sabotage_targets"}))}function Fi(e,t){var n=document.getElementById("sabotage-modal"),a=document.getElementById("sabotage-target-list");if(!(!n||!a)){a.innerHTML="";var i=t||un;if(!e||e.length===0){var r=document.createElement("p");r.className="steal-no-targets",r.textContent=E.t("sabotage.noTargets")||"No one left to sabotage \u2014 everyone has locked in.",a.appendChild(r)}else{var o={};i.forEach(function(l){l&&l.name!=null&&(o[l.name]=l)}),e.forEach(function(l){var c=o[l]||null,d=document.createElement("button");d.className="steal-target-btn steal-target-row";var f=!!c&&Number(c.rank)===1;f&&d.classList.add("steal-target-row--leader"),d.setAttribute("aria-label",ka(l,c,f));var u=document.createElement("span");if(u.className="steal-target-rank",u.setAttribute("aria-hidden","true"),u.textContent=c&&c.rank!=null?String(c.rank):"\u2013",d.appendChild(u),f){var m=document.createElement("span");m.className="steal-target-crown",m.setAttribute("aria-hidden","true"),m.textContent="\u{1F451}",d.appendChild(m)}var v=document.createElement("span");v.className="steal-target-name",v.textContent=l,d.appendChild(v);var p=document.createElement("span");p.className="steal-target-score",p.setAttribute("aria-hidden","true"),p.textContent=c?pn(c.score):"",d.appendChild(p),d.addEventListener("click",function(){qi(l)}),a.appendChild(d)})}n.classList.remove("hidden"),et=et||K(n,{contentSelector:".steal-modal-content"}),et.activate({onEscape:It})}}function It(){var e=document.getElementById("sabotage-modal");e&&e.classList.add("hidden"),et&&et.deactivate()}async function qi(e){var t=(E.t("sabotage.confirm")||"Sabotage {name}? The effect is random.").replace("{name}",e),n=await be(E.t("sabotage.confirmTitle")||"Sabotage?",t,E.t("sabotage.confirmButton")||"Sabotage",E.t("common.cancel"));n&&(s.ws&&s.ws.readyState===WebSocket.OPEN&&s.ws.send(JSON.stringify({type:"sabotage",target:e})),It())}function Na(e){Fi(e.targets||[],e.leaderboard)}function Ma(e){e&&e.success&&(at=!1,gn(),Ui(e.target,e.effect))}function Ra(e){e&&(Gi(e.effect),Vi(e.by,e.effect))}function Gi(e){if(e==="forced_bet"){Bt=!0,Ge=!0;var t=document.getElementById("bet-toggle");t&&t.classList.add("is-active","bet-arc--forced")}else if(e==="freeze"){xt=Date.now()+ba;var n=document.getElementById("submit-btn");n&&!q&&(n.classList.add("submit-arc--frozen"),setTimeout(function(){n&&n.classList.remove("submit-arc--frozen")},ba))}}function Wi(){Bt=!1;var e=document.getElementById("bet-toggle");e&&e.classList.remove("bet-arc--forced")}function Oa(e){var t="sabotage.effect."+e,n=E.t(t);return n&&n!==t?n:e==="timer_cut"?"Timer cut":e==="forced_bet"?"Forced bet":e==="freeze"?"Freeze":"Sabotaged"}function Ui(e,t){var n=document.getElementById("sabotage-confirmation"),a=document.getElementById("sabotage-confirmation-text");if(!(!n||!a)){var i=(E.t("sabotage.success")||"Sabotaged {name} \xB7 {effect}").replace("{name}",e).replace("{effect}",Oa(t));a.textContent=i,n.classList.remove("hidden"),setTimeout(function(){n.classList.add("hidden")},3e3)}}function Vi(e,t){var n=document.getElementById("sabotaged-banner"),a=document.getElementById("sabotaged-banner-text");if(!(!n||!a)){var i=(E.t("sabotage.hit")||"You've been sabotaged by {name}! ({effect})").replace("{name}",e||"?").replace("{effect}",Oa(t));a.textContent=i,n.classList.remove("hidden"),setTimeout(function(){n.classList.add("hidden")},3500)}}var ha=0,ji=500,rt=!1,yn=.5;function Ct(){var e=Date.now();return e-ha=1){Fa("max");return}Ct()&&(!s.ws||s.ws.readyState!==WebSocket.OPEN||s.ws.send(JSON.stringify({type:"admin",action:"set_volume",direction:"up"})))}function Qi(){if(yn<=0){Fa("min");return}Ct()&&(!s.ws||s.ws.readyState!==WebSocket.OPEN||s.ws.send(JSON.stringify({type:"admin",action:"set_volume",direction:"down"})))}function Fa(e){var t=document.getElementById("volume-indicator");t&&(t.textContent=e==="max"?"\u{1F50A} Max":"\u{1F507} Min",t.classList.remove("hidden"),t.classList.add("is-visible"),setTimeout(function(){t.classList.remove("is-visible"),setTimeout(function(){t.classList.add("hidden")},300)},1e3))}async function Ki(){var e=await be(E.t("admin.endGameConfirm")||"End Game?",E.t("admin.endGameWarning")||"All players will be disconnected.",E.t("admin.endGame")||"End Game",E.t("common.cancel"));if(e&&Ct()){if(!s.ws||s.ws.readyState!==WebSocket.OPEN){Le(E.t("errors.CONNECTION_LOST"));return}var t=document.getElementById("end-game-btn");if(t){t.disabled=!0;var n=t.querySelector(".control-label");n&&(n.textContent=E.t("game.ending"))}s.ws.send(JSON.stringify({type:"admin",action:"end_game"}))}}var St=!1;function qa(){if(!St&&s.ws&&s.ws.readyState===WebSocket.OPEN){St=!0;var e=document.getElementById("next-round-btn"),t=document.getElementById("next-round-admin-btn");if(e&&(e.disabled=!0,e.textContent=E.t("game.loading")),t){t.disabled=!0;var n=t.querySelector(".control-label");n&&(n.textContent=E.t("game.wait"))}s.ws.send(JSON.stringify({type:"admin",action:"next_round"})),setTimeout(function(){St&&En()},1e4)}}function En(){St=!1;var e=document.getElementById("next-round-btn"),t=document.getElementById("next-round-admin-btn");if(e&&(e.disabled=!1,e.textContent=E.t("admin.nextRound")),t){t.disabled=!1;var n=t.querySelector(".control-label");n&&(n.textContent=E.t("admin.nextRound"))}}function Xi(){qa()}function Ga(){var e=document.getElementById("stop-song-btn"),t=document.getElementById("volume-up-btn"),n=document.getElementById("volume-down-btn"),a=document.getElementById("next-round-admin-btn"),i=document.getElementById("end-game-btn");e&&e.addEventListener("click",Ji),t&&t.addEventListener("click",$i),n&&n.addEventListener("click",Qi),a&&a.addEventListener("click",Xi),i&&i.addEventListener("click",Ki)}function Wa(){rt=!0;var e=document.getElementById("stop-song-btn");if(e){e.classList.add("is-stopped"),e.classList.add("is-disabled"),e.disabled=!0;var t=e.querySelector(".control-icon"),n=e.querySelector(".control-label");t&&(t.textContent="\u2713"),n&&(n.textContent=E.t("game.stopped"))}}function wn(){rt=!1;var e=document.getElementById("stop-song-btn");if(e){e.classList.remove("is-stopped"),e.classList.remove("is-disabled"),e.disabled=!1;var t=e.querySelector(".control-icon"),n=e.querySelector(".control-label");t&&(t.textContent="\u23F9\uFE0F"),n&&(n.textContent=E.t("game.stop"))}}function Ua(e){yn=e,Zi(e),es(e)}function Zi(e){var t=document.getElementById("volume-indicator");if(t){var n=Math.round(e*100);t.textContent="\u{1F50A} "+n+"%",t.classList.remove("hidden"),t.classList.add("is-visible"),setTimeout(function(){t.classList.remove("is-visible"),setTimeout(function(){t.classList.add("hidden")},300)},1500)}}function es(e){var t=document.getElementById("volume-up-btn"),n=document.getElementById("volume-down-btn");t&&t.classList.toggle("is-at-limit",e>=1),n&&n.classList.toggle("is-at-limit",e<=0)}function Va(){var e=document.getElementById("next-round-btn");e&&e.addEventListener("click",qa);var t=document.getElementById("reveal-view");t&&t.addEventListener("click",function(n){n.target.tagName==="BUTTON"||n.target.closest("button")||(Re.isRunning()&&Re.skipAll(),ae())})}function ja(e){var t=document.getElementById("intro-splash-modal");if(t){t.classList.remove("hidden");var n=document.getElementById("intro-splash-confirm-btn"),a=t.querySelector(".intro-splash-modal-waiting");n&&(e?(n.classList.remove("hidden"),a&&a.classList.add("hidden"),n.onclick=function(){s.ws&&s.ws.readyState===WebSocket.OPEN&&s.ws.send(JSON.stringify({type:"admin",action:"confirm_intro_splash"}))}):(n.classList.add("hidden"),a&&a.classList.remove("hidden"))),Ze=Ze||K(t,{contentSelector:".intro-splash-modal-content"}),Ze.activate({initialFocus:n&&!n.classList.contains("hidden")?n:null})}}function za(){var e=document.getElementById("intro-splash-modal");e&&(e.classList.add("hidden"),Ze&&Ze.deactivate())}var g=window.BeatifyUtils||{},Ya=30,Tt=null,Ln=null,dt=null;function Qa(e){var t=e.song||{},n=e.players||[],a=document.getElementById("reveal-round"),i=document.getElementById("reveal-total");a&&(a.textContent=e.round||1),i&&(i.textContent=e.total_rounds||10);var r=document.getElementById("reveal-idle-halt");r&&r.classList.toggle("hidden",!e.idle_halt),ts(e);var o=document.getElementById("closest-wins-badge");o&&(e.closest_wins_mode?o.classList.remove("hidden"):o.classList.add("hidden"));var l=document.getElementById("intro-badge");if(l)if(e.is_intro_round){l.classList.remove("hidden"),l.classList.add("intro-badge--stopped");var c=l.querySelector("[data-i18n]");c&&(c.setAttribute("data-i18n","game.introStopped"),c.textContent=g.t("game.introStopped")||"Intro complete!")}else l.classList.add("hidden");var d=document.getElementById("reveal-album-cover");if(d){var f=t.album_art||"/beatify/static/img/no-artwork.svg";f!==Ln&&(d.onerror=function(){d.src="/beatify/static/img/no-artwork.svg"},d.src=f,Ln=f)}var u=document.getElementById("reveal-backdrop");if(u){var m=t.album_art||null;if(m!==dt)if(dt=m,m){var v=new Image;v.onload=function(){u.style.backgroundImage='url("'+m+'")',u.classList.remove("reveal-backdrop--synthetic")},v.onerror=function(){dt===m&&(dt=null),u.style.backgroundImage="",u.classList.add("reveal-backdrop--synthetic")},v.src=m}else u.style.backgroundImage="",u.classList.add("reveal-backdrop--synthetic")}var p=document.getElementById("correct-year");p&&(p.textContent=t.year||"????");var h=document.getElementById("song-title"),b=document.getElementById("song-artist");h&&(h.textContent=t.title||"Unknown Song"),b&&(b.textContent=t.artist||"Unknown Artist");var w=document.getElementById("fun-fact-container"),S=document.getElementById("fun-fact"),_=w?w.querySelector(".fun-fact-header"):null,C=g.getLocalizedSongField(t,"fun_fact");if(S&&(S.textContent=C||""),_&&(_.style.display=C?"flex":"none"),rs(t),as(e.song_difficulty),w){var L=document.getElementById("song-rich-info"),U=L&&L.innerHTML.trim()!=="",W=C&&C.trim()!=="";w.classList.toggle("hidden",!W&&!U)}for(var N=null,G=0;G'+g.t("analytics.noGuesses")+"";var a=e.map(function(R){return R.guess}),i=Math.min.apply(null,a.concat([t])),r=Math.max.apply(null,a.concat([t])),o=Math.max(2,Math.floor((r-i)*.1)),l=i-o,c=r+o,d=Math.max(1,c-l);function f(R){return(R-l)/d*100}for(var u=f(t),m='
'+t+"
",v="",p=0;p<=4;p++){var h=Math.round(l+d*p/4),b=p*25;v+='
'+h+"
"}function w(R){for(var F=0,pe=0;pe>>0;return"c"+(F%4+1)}function S(R){return R&&R.years_off===0?{glyph:"\u25CE",word:g.t("reveal.correct")||"Correct!",cls:"exact"}:R&&(R.round_score||0)>0?{glyph:"\u2248",word:g.t("reveal.close")||"Close!",cls:"near"}:{glyph:"\u2715",word:g.t("reveal.wrong")||"Wrong",cls:"off"}}for(var _="",C=0;C0?"dotaxis-score--pos":"dotaxis-score--zero",T=z>0?"+"+z:"+0",oe=S(L),J=y(L.name)+" \u2014 "+L.guess+" ("+oe.word+") ("+T+")";_+='
'+T+"
"}for(var ue=e.slice().sort(function(R,F){return(R.years_off||0)-(F.years_off||0)}),je=["\u{1F3C6}","\u{1F948}","\u{1F949}"],Be="",te=0;te'+je[te]+"":"",me=n&&fe.name===n?' '+g.t("analytics.youMarker")+"":"",ke=S(fe),ve=' "+y(ke.word)+"";Be+=''+Ce+''+y(fe.name||"?")+me+ve+""}return'
'+v+'
'+m+_+'
'+Be+"
"}function as(e){var t=document.getElementById("song-difficulty");if(t){if(!e){t.classList.add("hidden");return}for(var n="",a=0;a★';t.innerHTML='
'+n+'
'+g.t("difficulty."+e.label)+''+e.accuracy+"% "+g.t("difficulty.accuracy")+"",t.classList.remove("hidden")}}function rs(e){var t=document.getElementById("song-rich-info");if(t){var n=[],a=is(e.chart_info||{});a.length>0&&(n=n.concat(a));var i=ss(e.certifications||[]);i.length>0&&(n=n.concat(i));var r=g.getLocalizedSongField(e,"awards")||[],o=ds(r);o.length>0&&(n=n.concat(o)),n.length>0?t.innerHTML='
'+n.join("")+"
":t.innerHTML=""}}function is(e){if(!e)return[];var t=[];if(e.billboard_peak&&e.billboard_peak>0){var n=e.weeks_on_chart?' \xB7 '+e.weeks_on_chart+" "+g.t("reveal.weeksShort")+"":"";t.push('\u{1F4CA}#'+e.billboard_peak+" "+g.t("reveal.chartBillboard")+n+"")}return e.german_peak&&e.german_peak>0&&!e.billboard_peak&&t.push('\u{1F4CA}#'+e.german_peak+" "+g.t("reveal.chartGerman")+""),e.uk_peak&&e.uk_peak>0&&!e.billboard_peak&&t.push('\u{1F4CA}#'+e.uk_peak+" "+g.t("reveal.chartUK")+""),t}function ss(e){if(!e||e.length===0)return[];for(var t=[],n=0;n'+r+""+y(a)+"")}return t}function os(e){var t=e.toLowerCase();return t.indexOf("diamond")!==-1?"song-badge--diamond":t.indexOf("platinum")!==-1?"song-badge--platinum":t.indexOf("gold")!==-1?"song-badge--gold":"song-badge--platinum"}function ls(e){var t=e.toLowerCase();return t.indexOf("diamond")!==-1?"\u{1F48E}":t.indexOf("platinum")!==-1?"\u{1F4BF}":t.indexOf("gold")!==-1?"\u{1F947}":"\u{1F4BF}"}function ds(e){if(!e||e.length===0)return[];for(var t=[],n=e.slice(0,3),a=0;a'+o+""+y(i)+"")}return e.length>3&&t.push('+'+(e.length-3)+" more"),t}function cs(e){var t=e.toLowerCase();return t.indexOf("grammy")!==-1?"song-badge--grammy":t.indexOf("eurovision")!==-1?"song-badge--eurovision":t.indexOf("oscar")!==-1||t.indexOf("academy award")!==-1?"song-badge--oscar":t.indexOf("hall of fame")!==-1?"song-badge--halloffame":"song-badge--award"}function us(e){var t=e.toLowerCase();return t.indexOf("eurovision")!==-1?"\u{1F3A4}":t.indexOf("grammy")!==-1?"\u{1F3C6}":t.indexOf("hall of fame")!==-1?"\u2B50":"\u{1F3C6}"}function fs(e,t){var n=document.getElementById("reveal-emotion"),a=document.getElementById("personal-result");if(!n)return;var i=n.classList.contains("duel-emotion"),r=n.classList.contains("reveal-emotion-inline")||document.querySelector(".reveal-container--compact");n.className=i?"duel-emotion":r?"reveal-emotion-inline":"reveal-emotion",n.innerHTML="",n.classList.add("hidden"),a&&a.classList.remove("is-delayed"),ae();var o=g.t("reveal.emotions");function l(p){return p[Math.floor(Math.random()*p.length)]}function c(p){return p===1?g.t("reveal.offByYear"):g.t("reveal.offByYears",{years:p})}var d="missed",f=l(o.missed),u=l(o.missedSub);if(e&&!e.missed_round){var m=e.years_off||0;m===0?(d="exact",f=l(o.exact),u=l(o.exactSub)):m<=2?(d="close",f=l(o.close),u=l(o.closeSub)+" "+c(m)):m<=5?(d="close",f=l(o.close),u=c(m)):(d="wrong",f=l(o.wrong),u=l(o.wrongSub)+" "+c(m))}else e&&e.missed_round&&(d="missed",f=l(o.missed),u=l(o.missedSub));if(i)n.textContent=f,n.classList.add("duel-emotion--"+d);else{var v=''+f+"";u&&(v+='
'+u+"
"),n.innerHTML=v,n.classList.add("reveal-emotion--"+d)}n.classList.remove("hidden"),d==="exact"&&Oe(),a&&d!=="missed"&&a.classList.add("is-delayed")}function ms(e,t){var n=document.getElementById("duel-your-year"),a=document.getElementById("duel-gap-count"),i=document.getElementById("duel-gap-unit");if(!(!n||!a||!i)){if(!e||e.missed_round){n.textContent=g.t("reveal.duel.noGuess")||"\u2014",a.textContent="\u2014",i.textContent="";return}var r=e.guess;n.textContent=r!=null&&r!==""?r:"\u2014";var o=e.years_off!=null?e.years_off:0;a.textContent=String(o),i.textContent=o===1?g.t("reveal.duel.yearUnit")||"year":g.t("reveal.duel.yearsUnit")||"years";var l=a.closest(".duel-gap");l&&(l.classList.remove("duel-gap--exact","duel-gap--close","duel-gap--wrong"),o===0?l.classList.add("duel-gap--exact"):o<=5?l.classList.add("duel-gap--close"):l.classList.add("duel-gap--wrong"))}}function vs(e,t){var n=document.getElementById("reveal-chip-row");if(n){if(!e){n.classList.add("hidden"),n.innerHTML="";return}var a=[];e.bet_outcome==="won"?a.push('\u{1F3B2} '+y(g.t("reveal.chip.betWon")||"Bet won \xB7 \xD72")+""):e.bet_outcome==="lost"&&a.push('\u{1F3B2} '+y(g.t("reveal.chip.betLost")||"Bet lost")+"");var i=e.streak_bonus||0;if(i>0&&e.streak){var r=g.t("reveal.chip.streakBonus",{count:e.streak,bonus:i})||e.streak+"-streak \xB7 +"+i;a.push('\u{1F525} '+y(r)+"")}a.length===0?(n.classList.add("hidden"),n.innerHTML=""):(n.classList.remove("hidden"),n.innerHTML=a.join(""))}}function xn(e){if(!e)return 0;var t=e.round_score||0,n=e.streak_bonus||0,a=e.artist_bonus||0,i=e.movie_bonus||0,r=e.intro_bonus||0;return t+n+a+i+r}function ps(e){var t=document.getElementById("reveal-total-pts"),n=document.getElementById("score-row-subtitle");if(t){var a=xn(e);if(t.textContent=(a>=0?"+":"")+a,n)if(!e||e.missed_round)n.textContent=g.t("reveal.noSubmission")||"No guess submitted";else{var i=e.years_off!=null?e.years_off:0,r=i===0?"reveal.exact":i===1?"reveal.yearOff":"reveal.yearsOff";n.textContent=g.t(r,{years:i})||i+" years off"}}}function gs(e){for(var t=[["#ff2d6a","#ff6600"],["#00f5ff","#7a5cff"],["#39ff14","#00f5ff"],["#ff6600","#ff0040"],["#7a5cff","#b3b3c2"],["#ff2d6a","#7a5cff"]],n=0,a=0;a>>0;var i=t[n%t.length];return"linear-gradient(135deg,"+i[0]+","+i[1]+")"}function ys(e){var t=document.getElementById("reveal-leaderboard-list");if(t){var n=e.leaderboard||[],a=e.players||[],i={};a.forEach(function(l){i[l.name]=l});var r=(g.t("analytics.youMarker")||"YOU").replace(/[()]/g,""),o="";n.forEach(function(l,c){var d=i[l.name]||{},f=l.name===s.playerName,u=((l.name||"?").trim().charAt(0)||"?").toUpperCase(),m=l.rank_change||0,v=m>0?"up":m<0?"down":"flat",p=m>0?"\u25B2"+m:m<0?"\u25BC"+Math.abs(m):"\u2013",h="";if(!d.missed_round&&d.years_off!=null&&d.guess!=null&&d.guess!==""){var b=d.years_off,w=b===0?''+y(g.t("reveal.exact")||"Exact!")+"":y(g.t("reveal.shortOff",{years:b})||b+" off");h='
'+y(String(d.guess))+" \xB7 "+w+"
"}var S=[];d.streak&&d.streak>=2&&S.push('\u{1F525} '+d.streak+""),d.stole_from?S.push('\u{1F977} '+y(g.t("steal.stolenFrom",{name:d.stole_from})||"stole "+d.stole_from)+""):d.was_stolen_by&&d.was_stolen_by.length&&S.push('\u{1F3AF} '+y(g.t("steal.stolenBy",{name:d.was_stolen_by.join(", ")})||"stolen")+""),d.bet_outcome==="won"?S.push('\u{1F3B2} '+y(g.t("reveal.chip.betWon")||"Bet won")+""):d.bet_outcome==="lost"&&S.push('\u{1F3B2} '+y(g.t("reveal.chip.betLost")||"Bet lost")+"");var _=S.length?'
'+S.join("")+"
":"",C=xn(d),L=C>0?"":" rstand-delta--zero",U=(C>=0?"+":"")+C,W=c>=4?" rstand-row--taper2":c>=3?" rstand-row--taper1":"",N=f?" rstand-row--you":"",G=f?' '+y(r)+"":"";o+='
'+l.rank+''+p+'
'+y(u)+'
'+y(l.name||"?")+G+"
"+h+_+'
'+(l.score||0)+''+U+"
"}),t.innerHTML=o,bt(a,n)}}function bs(){var e=document.getElementById("points-breakdown-content");if(e){var t=s.lastRevealContext,n=t?t.player:null;if(!n||n.missed_round){e.innerHTML='
'+y(g.t("reveal.breakdown.noSubmission")||g.t("reveal.noSubmission")||"No guess submitted")+'
'+y(g.t("reveal.breakdown.total")||"Total this round")+'+0
';return}var a=[],i=n.years_off!=null?n.years_off:0,r=n.base_score||0,o=n.round_score||0,l=n.speed_multiplier||1,c=Math.floor(r*l)-r;a.push({emoji:"\u{1F3AF}",label:g.t("reveal.breakdown.baseScore",{years:i})||"Base score",value:String(r),kind:"neutral"}),l>1&&c>0&&a.push({emoji:"\u26A1",label:(g.t("reveal.breakdown.speedBonus")||"Speed bonus")+" ("+l.toFixed(2)+"\xD7)",value:"+"+c,kind:"positive"}),n.streak_bonus&&n.streak_bonus>0&&a.push({emoji:"\u{1F525}",label:g.t("reveal.breakdown.streakBonus",{count:n.streak})||n.streak+"-streak bonus",value:"+"+n.streak_bonus,kind:"positive"}),n.artist_bonus&&n.artist_bonus>0&&a.push({emoji:"\u{1F3A4}",label:g.t("reveal.breakdown.artistBonus")||"Artist challenge",value:"+"+n.artist_bonus,kind:"positive"}),n.movie_bonus&&n.movie_bonus>0&&a.push({emoji:"\u{1F3AC}",label:g.t("reveal.breakdown.movieBonus")||"Movie challenge",value:"+"+n.movie_bonus,kind:"positive"}),n.intro_bonus&&n.intro_bonus>0&&a.push({emoji:"\u26A1",label:g.t("reveal.breakdown.introBonus")||"Intro speed bonus",value:"+"+n.intro_bonus,kind:"positive"}),n.bet_outcome==="won"?a.push({emoji:"\u{1F3B2}",label:g.t("reveal.breakdown.betMultiplier")||"Double or Nothing",value:"\xD72",kind:"multiplier"}):n.bet_outcome==="lost"&&a.push({emoji:"\u{1F3B2}",label:g.t("reveal.breakdown.betLost")||"Bet lost",value:"\xD70",kind:"multiplier"});var d=xn(n),f='
';a.forEach(function(u){f+='
"+y(u.label)+''+y(u.value)+"
"}),f+="
",f+='
'+y(g.t("reveal.breakdown.total")||"Total this round")+''+(d>=0?"+":"")+d+"
",e.innerHTML=f}}function hs(){var e=document.getElementById("round-stats-content");if(e){var t=s.lastRevealContext;if(!t){e.innerHTML="";return}var n=t.analytics,a=t.difficulty,i=t.song||{},r=i.year,o=[];if(a){for(var l="",c=5,d=0;d\u2605';var f=g.t("difficulty."+a.label)||a.label||"",u=a.accuracy!=null?g.t("reveal.stats.onlyPercent",{percent:a.accuracy})||"Only "+a.accuracy+"% of all players guess it right.":"";o.push('
'+y(f)+(u?'
'+y(u)+"
":"")+'
'+l+"
")}if(n){var m=[];if(n.average_guess!=null){var v=r?Math.round(n.average_guess-r):null,p=v!=null?v===0?g.t("analytics.onTarget")||"On target":Math.abs(v)+" "+(g.t("reveal.duel.yearsUnit")||"years")+" "+(v>0?"late":"early"):"";m.push('
'+y(g.t("reveal.stats.avgGuess")||"Avg guess")+'
'+Math.round(n.average_guess)+"
"+(p?'
'+y(p)+"
":"")+"
")}if(n.all_guesses&&n.all_guesses.length>0){var h=n.all_guesses[0],b=h.name+" \xB7 "+(h.years_off===0?g.t("reveal.exact")||"Exact!":h.years_off+" "+(h.years_off===1?g.t("reveal.duel.yearUnit")||"year":g.t("reveal.duel.yearsUnit")||"years")+" off");m.push('
'+y(g.t("reveal.stats.closest")||"Closest")+'
'+y(String(h.guess))+'
'+y(b)+"
")}if(n.speed_champion&&n.speed_champion.time!=null&&m.push('
'+y(g.t("reveal.stats.fastest")||"Fastest")+'
'+n.speed_champion.time+'s
'+y((n.speed_champion.names||[]).join(", "))+"
"),a&&a.times_played!=null){var w=g.t("reveal.stats.playedBeforeSub")||"across all Beatify games";m.push('
'+y(g.t("reveal.stats.playedBefore")||"Played before")+'
'+a.times_played+'\xD7
'+y(w)+"
")}m.length>0&&o.push('
'+m.join("")+"
")}if(n&&n.all_guesses&&n.all_guesses.length>0&&o.push('
'+y(g.t("analytics.guessAxis")||"Where everyone guessed")+"
"+ns(n.all_guesses,r,s.playerName)+"
"),n&&n.furthest_players&&n.furthest_players.length>0&&n.all_guesses&&n.all_guesses.length>0){var S=n.all_guesses[n.all_guesses.length-1];if(S&&S.years_off>0){var _=n.furthest_players.map(function(C){return'
'+y(C)+''+S.years_off+" "+(S.years_off===1?g.t("reveal.duel.yearUnit")||"yr":g.t("reveal.duel.yearsUnit")||"yrs")+" off
"}).join("");o.push('
'+y(g.t("reveal.stats.furthestOff")||"Furthest off this round")+'
'+_+"
")}}o.length===0&&o.push('

'+y(g.t("reveal.stats.empty")||"No stats for this round yet.")+"

"),e.innerHTML=o.join("")}}var Mt={};function Ja(e,t){var n=document.getElementById(e);if(n){typeof t=="function"&&t(),n.classList.remove("hidden");var a=n.querySelector(".sheet-close"),i=Mt[e]||(Mt[e]=K(n,{contentSelector:".sheet-content"}));i.activate({initialFocus:a,onEscape:function(){Nt(e)}})}}function Nt(e){var t=document.getElementById(e);t&&(t.classList.add("hidden"),Mt[e]&&Mt[e].deactivate())}function Ka(){var e=document.getElementById("points-breakdown-btn");e&&e.addEventListener("click",function(){Ja("points-breakdown-sheet",bs)});var t=document.getElementById("round-stats-btn");t&&t.addEventListener("click",function(){Ja("round-stats-sheet",hs)}),document.querySelectorAll("[data-sheet-close]").forEach(function(n){n.addEventListener("click",function(a){Nt(n.getAttribute("data-sheet-close")),a.stopPropagation()})}),document.querySelectorAll(".sheet-backdrop").forEach(function(n){var a=n.querySelector(".sheet-dim");a&&a.addEventListener("click",function(){Nt(n.id)})}),document.addEventListener("keydown",function(n){n.key==="Escape"&&["points-breakdown-sheet","round-stats-sheet"].forEach(function(a){var i=document.getElementById(a);i&&!i.classList.contains("hidden")&&Nt(a)})})}function Es(){var e=document.getElementById("reveal-report-btn");if(e){var t=s.lastRevealContext,n=!!(t&&t.song&&t.song.is_library);n&&s.isAdmin?e.textContent=g.t("reveal.fixYearBtn")||"\u{1F3AF} Wrong year? Fix it":n?e.textContent=g.t("reveal.flagYearBtn")||"\u{1F6A9} Wrong year? Tell the host":e.textContent=g.t("reveal.reportBtn")||"\u{1F6A9} Wrong year?",e.disabled=!1,Sn()}}function At(){var e=document.querySelector(".reveal-report-row");if(e){var t=document.getElementById("reveal-report-error");t||(t=document.createElement("p"),t.id="reveal-report-error",t.className="validation-msg reveal-report-error",t.setAttribute("role","alert"),e.appendChild(t)),t.textContent=g.t("reveal.reportBtnError")||"Couldn't send report \u2014 please try again.",t.classList.remove("hidden")}}function Sn(){var e=document.getElementById("reveal-report-error");e&&e.classList.add("hidden")}function Xa(){var e=document.getElementById("reveal-report-btn");e&&e.addEventListener("click",function(){var t=s.lastRevealContext;if(!(!t||!t.song)){if(t.song.is_library&&!s.isAdmin){if(!s.ws||s.ws.readyState!==WebSocket.OPEN){At();return}Sn();try{s.ws.send(JSON.stringify({type:"report_data",artist:t.song.artist||"",title:t.song.title||"",year:t.song.year||null}))}catch{At();return}e.textContent=g.t("reveal.flaggedForHost")||"\u2713 Flagged for the host",e.disabled=!0;return}if(t.song.is_library&&s.isAdmin&&window.BeatifyCrateDiggerFix){window.BeatifyCrateDiggerFix.open({title:t.song.title||"",artist:t.song.artist||"",year:t.song.year||null});return}if(!s.ws||s.ws.readyState!==WebSocket.OPEN){At();return}Sn();try{s.ws.send(JSON.stringify({type:"report_data",artist:t.song.artist||"",title:t.song.title||"",year:t.song.year||null}))}catch{At();return}e.textContent=g.t("reveal.reportBtnDone")||"\u2713 Reported \u2014 thanks!",e.disabled=!0}})}function $a(e){var t="ta-pill ta-pill--"+(e||"skipped").replace(/_/g,"-"),n;switch(e){case"exact":n=g.t("titleArtist.statusExact")||"Correct";break;case"fuzzy":n=g.t("titleArtist.statusFuzzy")||"Close enough";break;case"near_miss_accepted":n=g.t("titleArtist.statusAccepted")||"Accepted";break;case"near_miss":n=g.t("titleArtist.statusNearMiss")||"Near miss";break;case"wrong":n=g.t("titleArtist.statusWrong")||"Wrong";break;default:n=g.t("titleArtist.statusSkipped")||"Skipped"}return''+y(n)+""}function ws(e,t){if(!e)return null;var n={exact:1,fuzzy:1,near_miss_accepted:1},a=e.title_status,i=e.artist_status;if(t&&(a==="near_miss"||i==="near_miss"))return{tier:"pending",text:g.t("titleArtist.verdictPending")||"Awaiting the room\u2019s verdict\u2026"};var r=(n[a]?1:0)+(n[i]?1:0);return r===2?{tier:"win",text:g.t("titleArtist.verdictWin")||"Nailed it!"}:r===1?{tier:"partial",text:g.t("titleArtist.verdictPartial")||"Got one!"}:{tier:"miss",text:g.t("titleArtist.verdictMiss")||"Not this time"}}function Ls(e,t){var n=!!e.accepted,a=((e.player||"?").trim().charAt(0)||"?").toUpperCase(),i=n?"\u2713 +"+(e.points||0):"\u2717";return'
'+y(e.player)+' \xB7 '+y(t(e.field))+'
\u201C'+y(e.guess||"\u2014")+'\u201D
\u{1F44D} '+(e.votes_yes||0)+" \xB7 \u{1F44E} "+(e.votes_no||0)+'
'+i+"
"}function Ss(e,t){var n=document.getElementById("ta-reveal-section");if(n){if(!e||!e.correct_title){n.classList.add("hidden"),xe();return}n.classList.remove("hidden"),s._taRevealTruth!==e.correct_title&&(s._taRevealTruth=e.correct_title,s.taMyVotes={}),s.taMyVotes=s.taMyVotes||{};var a=document.getElementById("ta-reveal-truth");a&&(a.innerHTML=''+y(e.correct_title)+''+y(e.correct_artist||"")+"");for(var i=document.getElementById("ta-reveal-own"),r=e.results||[],o=null,l=0;l'+y(c.text)+"":"";i.innerHTML=d+'
'+y(g.t("titleArtist.yourTitle")||"Your title")+''+y(o.title||"\u2014")+""+$a(o.title_status)+'
'+y(g.t("titleArtist.yourArtist")||"Your artist")+''+y(o.artist||"\u2014")+""+$a(o.artist_status)+"
"}else i.innerHTML='
'+y(g.t("titleArtist.noGuess")||"No guess this round")+"
";var f=document.getElementById("ta-voting"),u=document.getElementById("ta-voting-cards"),m=document.getElementById("ta-voting-title"),v=document.getElementById("ta-voting-countdown"),p=e.near_misses||[],h=e.near_miss_outcomes||[],b=!!e.voting_open,w=!!(t&&t.is_admin);if(!f||!u){xe();return}var S=function(L){return L==="artist"?g.t("titleArtist.artistLabel")||"Artist":g.t("titleArtist.titleLabel")||"Song title"};if(!b&&h.length>0){xe(),f.classList.remove("hidden"),m&&(m.textContent=g.t("titleArtist.closeCallsDecided")||"Close calls \u2014 decided"),v&&(v.textContent="",v.classList.add("hidden")),u.innerHTML=h.map(function(L){return Ls(L,S)}).join("");return}if(p.length===0){f.classList.add("hidden"),u.innerHTML="",xe();return}f.classList.remove("hidden"),m&&(m.textContent=g.t("titleArtist.voteHeader")||"Close calls \u2014 vote \u{1F44D}/\u{1F44E}"),v&&v.classList.remove("hidden");var _="";if(p.forEach(function(L){var U=L.player===s.playerName,W=L.votes_yes||0,N=L.votes_no||0,G=W+N,j=G?Math.round(W/G*100):0,Y=G?100-j:0,z=((L.player||"?").trim().charAt(0)||"?").toUpperCase();if(_+='
'+y(L.player)+''+y(S(L.field))+'
\u201C'+y(L.guess||"\u2014")+'\u201D
\u{1F44D} '+W+'
\u{1F44E} '+N+'
',U)_+='
'+y(g.t("titleArtist.yourCloseCall")||"Your close call \u2014 others decide")+"
";else if(b){var A=s.taMyVotes[L.id],T=A===!0||A===!1;_+='
',T&&(_+='
'+y(g.t("titleArtist.youVoted")||"You voted")+" "+(A?"\u{1F44D}":"\u{1F44E}")+" \xB7 "+y(g.t("titleArtist.tapToChange")||"tap to change")+"
")}w&&b&&(_+='
'+y(g.t("titleArtist.hostOverride")||"Host decides")+'
'),_+="
"}),u.innerHTML=_,b)xs(e);else{xe();var C=document.getElementById("ta-voting-countdown");C&&(C.textContent=g.t("titleArtist.voteClosed")||"Voting closed",C.removeAttribute("aria-label"),C.classList.add("ta-voting-countdown--closed"))}}}function xs(e){xe();var t=document.getElementById("ta-voting-countdown");if(!t)return;var n=e&&typeof e.vote_seconds_remaining=="number"?e.vote_seconds_remaining:Ya,a=Date.now()+n*1e3;function i(){var r=Math.max(0,Math.ceil((a-Date.now())/1e3));t.textContent=String(r),t.setAttribute("aria-label",g.t("titleArtist.voteCountdown",{seconds:r})||r+"s"),t.style.setProperty("--ta-vote-progress",r/Ya*360+"deg"),t.classList.remove("ta-voting-countdown--closed"),r<=0&&xe()}i(),Tt=setInterval(i,500)}function xe(){Tt&&(clearInterval(Tt),Tt=null)}function Za(){var e=document.getElementById("ta-voting-cards");e&&e.addEventListener("click",function(t){var n=t.target.closest(".ta-vote-btn"),a=t.target.closest(".ta-override-btn");if(n){var i=n.getAttribute("data-nearmiss-id"),r=n.getAttribute("data-accept")==="1";s.ws&&s.ws.readyState===WebSocket.OPEN&&s.ws.send(JSON.stringify({type:"title_artist_vote",nearmiss_id:i,accept:r})),s.taMyVotes=s.taMyVotes||{},s.taMyVotes[i]=r;var o=n.closest(".ta-vote-card");if(o){var l=o.querySelector(".ta-vote-actions");l&&l.classList.add("ta-vote-actions--voted"),o.querySelectorAll(".ta-vote-btn").forEach(function(u){u.classList.remove("is-chosen")}),n.classList.add("is-chosen")}return}if(a){var c=a.getAttribute("data-nearmiss-id"),d=a.getAttribute("data-accept")==="1";s.ws&&s.ws.readyState===WebSocket.OPEN&&s.ws.send(JSON.stringify({type:"title_artist_override",nearmiss_id:c,accept:d}));var f=a.closest(".ta-vote-card");f&&(f.querySelectorAll(".ta-override-btn").forEach(function(u){u.classList.remove("is-chosen")}),a.classList.add("is-chosen"))}})}var D=window.BeatifyUtils||{};function tr(e){window.scrollTo(0,0);var t=e.leaderboard||[];t.forEach(function(b){b.is_current=b.name===s.playerName}),[1,2,3].forEach(function(b){var w=t.find(function(L){return L.rank===b}),S=document.querySelector(".podium-place.podium-"+b);S&&S.classList.toggle("hidden",!w);var _=document.getElementById("podium-"+b+"-name"),C=document.getElementById("podium-"+b+"-score");_&&(_.textContent=w?y(w.name):"---"),C&&(C.textContent=w?w.score:"0")});var n=t.find(function(b){return b.is_current}),a=document.getElementById("your-final-rank"),i=document.getElementById("your-final-score"),r=document.getElementById("stat-best-streak"),o=document.getElementById("stat-rounds"),l=document.getElementById("stat-bets");n&&(a&&(a.textContent="#"+n.rank),i&&(i.textContent=n.score+" "+D.t("leaderboard.points")),r&&(r.textContent=n.best_streak||0),o&&(o.textContent=n.rounds_played||0),l&&(l.textContent=n.bets_won||0));var c=document.getElementById("final-leaderboard-list");c&&(c.innerHTML=t.map(function(b){var w=b.is_current?"is-current":"",S=b.connected===!1?"final-entry--disconnected":"",_=b.connected===!1?'(away)':"";return'
#'+b.rank+''+y(b.name)+_+''+b.score+"
"}).join("")),_s(e.superlatives),Is(e.highlights),Cs(e.share_data,n);var d=document.getElementById("end-admin-controls"),f=document.getElementById("end-player-message");if(n&&n.is_admin){d&&d.classList.remove("hidden"),f&&f.classList.add("hidden");var u=document.getElementById("new-game-btn");u&&(u.onclick=Ts);var m=document.getElementById("player-rematch-btn");m&&(m.onclick=function(){m.disabled=!0;var b=m.textContent;if(m.textContent="\u23F3",s.ws&&s.ws.readyState===WebSocket.OPEN){s.ws.send(JSON.stringify({type:"admin",action:"rematch_game"}));return}BeatifyAuth.fetch("/beatify/api/rematch-game",{method:"POST",credentials:"same-origin"}).then(function(w){if(!w.ok)return w.json().then(function(S){throw new Error(S.message||"Rematch failed")});m.textContent="\u23F3"}).catch(function(w){console.error("[Player] Rematch failed:",w),Le(w.message||"Failed to start rematch"),m.disabled=!1,m.textContent=b})})}else d&&d.classList.add("hidden"),f&&f.classList.remove("hidden");if(n){var v=e.total_rounds||10,p=n.best_streak||0,h=p===v&&v>0;h?Oe("perfect"):n.rank===1&&Oe("winner")}}function _s(e){var t=document.getElementById("superlatives-container");if(t){if(!e||e.length===0){t.classList.add("hidden");return}var n="";e.forEach(function(a,i){var r="";switch(a.value_label){case"avg_time":r=a.value+"s "+D.t("superlatives.avgTime");break;case"streak":r=a.value+" "+D.t("superlatives.streak");break;case"bets":r=a.value+" "+D.t("superlatives.bets");break;case"points":r=a.value+" "+D.t("superlatives.points");break;case"close_guesses":r=a.value+" "+D.t("superlatives.closeGuesses");break;case"perfect_rounds":r=a.value+" "+D.t("superlatives.perfectRounds");break;case"exact_titles":r=a.value+" "+D.t("superlatives.exactTitles");break;case"artists":r=a.value+" "+D.t("superlatives.artists");break;case"near_misses":r=a.value+" "+D.t("superlatives.nearMisses");break;default:r=a.value}n+='
'+a.emoji+'
'+D.t("superlatives."+a.title)+'
'+y(a.player_name)+'
'+r+"
"}),t.innerHTML=n,t.classList.remove("hidden")}}function Is(e){var t=document.getElementById("highlights-container");if(t){if(!e||e.length===0){t.classList.add("hidden");return}var n=document.getElementById("highlights-list");if(n){var a="";e.forEach(function(i,r){var o=null;i.description_params&&(o={},Object.keys(i.description_params).forEach(function(c){o[c]=y(i.description_params[c])}));var l=D.t("highlights."+i.description,o)||i.description;l===i.description&&o&&(l=D.t("highlights."+i.description)||i.description,Object.keys(o).forEach(function(c){l=l.replace("{"+c+"}",o[c])})),a+='
'+(i.emoji||"\u2728")+'
'+l+'
'+D.t("highlights.roundLabel",{round:i.round})+"
"}),n.innerHTML=a,t.classList.remove("hidden")}}}function Bs(e){var t={playerName:"",score:"",isWinner:!1,correct:"",exact:"",streak:""};if(!e||typeof e!="string")return t;for(var n=e.split(` +`),a=0;a0&&(ve+=ke),F.type==="url"?(r.font="800 15px Outfit, system-ui, sans-serif",ve+=r.measureText(F.text).width):(r.font="900 18px Outfit, system-ui, sans-serif",ve+=r.measureText(F.num).width,r.font="600 15px Inter, system-ui, sans-serif",ve+=r.measureText(F.label).width)});var R=A-ve/2;r.textAlign="left",me.forEach(function(F,pe){pe>0&&(r.font="600 15px Inter, system-ui, sans-serif",r.fillStyle="#6b6b7a",r.fillText(" \xB7 ",R,Ce),R+=ke),F.type==="url"?(r.font="800 15px Outfit, system-ui, sans-serif",r.fillStyle="#00f5ff",r.fillText(F.text,R,Ce),R+=r.measureText(F.text).width):(r.font="900 18px Outfit, system-ui, sans-serif",r.fillStyle="#00f5ff",r.fillText(F.num,R,Ce),R+=r.measureText(F.num).width,r.font="600 15px Inter, system-ui, sans-serif",r.fillStyle="#b3b3c2",r.fillText(F.label,R,Ce),R+=r.measureText(F.label).width)})}}function As(e){e&&e.toBlob(function(t){if(t){if(navigator.share&&navigator.canShare){var n=new File([t],"beatify-results.png",{type:"image/png"}),a={files:[n],title:"My Beatify Results"};if(navigator.canShare(a)){navigator.share(a).catch(function(){er(t)});return}}er(t)}},"image/png")}function er(e){var t=URL.createObjectURL(e),n=document.createElement("a");n.href=t,n.download="beatify-results.png",document.body.appendChild(n),n.click(),document.body.removeChild(n),URL.revokeObjectURL(t)}function nr(e){var t=document.getElementById("pause-message");t&&(e.pause_reason==="admin_disconnected"?t.textContent=D.t("player.waitingForHostReconnect"):e.pause_reason==="media_player_error"?t.textContent=D.t("player.speakerUnavailable"):t.textContent=D.t("player.gamePaused"))}async function Ts(){var e=await be(D.t("admin.newGameTitle")||"New Game?",D.t("admin.newGameConfirm")||"Start a new game?",D.t("admin.newGame")||"New Game",D.t("common.cancel"));if(e){var t=document.getElementById("new-game-btn");t&&(t.disabled=!0,t.textContent=D.t("player.redirecting"));try{sessionStorage.removeItem("beatify_admin_name"),sessionStorage.removeItem("beatify_is_admin")}catch{}window.location.href="/beatify/admin"}}function Ns(e){return typeof requestAnimationFrame=="function"?requestAnimationFrame(e):setTimeout(e,16)}function _n(e,t){let n=t||{},a=typeof n.schedule=="function"?n.schedule:Ns,i=typeof n.isEqual=="function"?n.isEqual:null,r=!1,o=!1,l,c,d=!1;function f(){if(r=!1,!o)return;let m=l;o=!1,l=void 0,c=m,d=!0,e(m)}function u(m){i&&d&&!o&&i(m,c)||(l=m,o=!0,r||(r=!0,a(f)))}return u.flush=f,u.cancel=function(){r=!1,o=!1,l=void 0},u}var Z=window.BeatifyUtils||{},rr="beatify_onboarded_v2",Ms=4e3,Rs=1400;function In(){var e=document.querySelectorAll(".tour-card").length;return e>0?e:4}function Os(){try{return localStorage.getItem(rr)==="1"}catch{return!1}}function Ds(){try{localStorage.setItem(rr,"1")}catch{}}var k={active:!1,replay:!1,currentIdx:0,autoAdvanceTimer:null,readyTimer:null};function _e(){k.autoAdvanceTimer&&(clearTimeout(k.autoAdvanceTimer),k.autoAdvanceTimer=null)}function Bn(){_e(),!(window.matchMedia&&window.matchMedia("(prefers-reduced-motion: reduce)").matches)&&(k.autoAdvanceTimer=setTimeout(function(){ir()},Ms))}function Cn(){for(var e=document.querySelectorAll(".tour-wiz-seg"),t=0;t'+o+''}}function ir(){_e(),k.currentIdx=ft&&(s.isReconnecting=!1,t.onGiveUp())}}function Js(){var e=document.getElementById("connection-indicator");e&&(e.classList.remove("connection-indicator--connected"),e.classList.add("connection-indicator--disconnected"),e.setAttribute("aria-label","Disconnected"),e.title="Disconnected")}function Lr(){var e=document.getElementById("connection-indicator");e&&(e.classList.remove("connection-indicator--disconnected"),e.classList.add("connection-indicator--connected"),e.setAttribute("aria-label","Connected"),e.title="Connected")}function $s(){Js();var e=document.getElementById("reconnecting-overlay");e&&e.classList.remove("hidden")}function Ft(){var e=document.getElementById("reconnecting-overlay");e&&e.classList.add("hidden")}function Qs(e){var t=document.getElementById("reconnect-status");t&&(t.textContent=V.t("join.reconnecting",{attempt:e,max:ft}))}function Ks(){B("connection-lost-view")}async function gt(){if(!s.gameId){B("not-found-view");return}if(!Vs(s.gameId)){B("not-found-view");return}var e=await fr(s.gameId);if(e===null){console.error("Failed to check game status after retries"),B("not-found-view");return}if(!e.exists){B("not-found-view");return}if(e.phase==="END"){B("ended-view");return}var t=sessionStorage.getItem("beatify_admin_name");if(!t){var n=mt();if(n){Ve();return}e.can_join?B("join-view"):B("in-progress-view")}}function Xs(){var e=sessionStorage.getItem("beatify_is_admin"),t=sessionStorage.getItem("beatify_admin_name");return e==="true"&&t&&(s.isAdmin=!0,s.playerName=t,sessionStorage.removeItem("beatify_is_admin")),s.isAdmin}var Zs=15e3,pr=4e4,Ot=null;function Sr(){xr(),s.lastServerActivity=Date.now(),Ot=setInterval(function(){if(!(!s.ws||s.ws.readyState!==WebSocket.OPEN)){if(Date.now()-s.lastServerActivity>pr){console.warn("[Beatify] No server activity for "+pr+"ms \u2014 socket appears dead, forcing reconnect");try{s.ws.close()}catch{}return}try{s.ws.send(JSON.stringify({type:"ping"}))}catch{}}},Zs)}function xr(){Ot&&(clearInterval(Ot),Ot=null)}function Ve(){var e=mt();if(e&&!(s.ws&&(s.ws.readyState===WebSocket.CONNECTING||s.ws.readyState===WebSocket.OPEN))){s.lastConnectStartedAt=Date.now(),s.playerName||Ir();var t=window.location.protocol==="https:"?"wss:":"ws:",n=t+"//"+window.location.host+"/beatify/ws";s.ws=new WebSocket(n),s.ws.onopen=function(){s.reconnectAttempts=0,s.isReconnecting=!1,Ft(),Lr(),Sr(),s.ws.send(JSON.stringify({type:"reconnect",session_id:e}))},s.ws.onmessage=function(a){try{var i=JSON.parse(a.data);_r(i)}catch(r){console.error("Failed to parse WebSocket message:",r)}},s.ws.onclose=wr(function(){mt()?Ve():Ie(s.playerName)}),s.ws.onerror=function(a){console.error("WebSocket error:",a)}}}function Ie(e){var t=s.ws&&(s.ws.readyState===WebSocket.CONNECTING||s.ws.readyState===WebSocket.OPEN);if(!(t&&s.playerName===e)){if(t){if(!s.isAdmin)try{s.ws.send(JSON.stringify({type:"leave"}))}catch{}s.intentionalLeave=!0;try{s.ws.close()}catch{}s.ws=null,vt()}s.playerName=e,Er(e),s.lastConnectStartedAt=Date.now();var n=window.location.protocol==="https:"?"wss:":"ws:",a=n+"//"+window.location.host+"/beatify/ws";s.ws=new WebSocket(a),s.ws.onopen=async function(){s.reconnectAttempts=0,s.isReconnecting=!1,Ft(),Lr(),Sr();var i={type:"join",name:e};s.isAdmin&&(i.is_admin=!0,i.ha_token=await BeatifyAuth.ensureAuthenticated()),s.ws.send(JSON.stringify(i))},s.ws.onmessage=function(i){try{var r=JSON.parse(i.data);_r(r)}catch(o){console.error("Failed to parse WebSocket message:",o)}},s.ws.onclose=wr(function(){Ie(s.playerName)}),s.ws.onerror=function(i){console.error("WebSocket error:",i)}}}s.connectWithSession=Ve;s.connectWebSocket=Ie;function _r(e){if(s.lastServerActivity=Date.now(),e.type!=="pong"){if(Br(),e.type==="game_starting"){var t=document.getElementById("loading-view"),n=document.getElementById("lobby-view"),a=document.getElementById("join-view"),i=n&&!n.classList.contains("hidden"),r=t&&!t.classList.contains("hidden"),o=a&&!a.classList.contains("hidden");(i||r||!o)&&B("starting-view");return}var l=document.getElementById("join-btn"),c=document.getElementById("name-input");if(e.type==="state"){e.leaderboard&&(e=Object.assign({},e,{leaderboard:V.hydrateLeaderboard(e.leaderboard,e.players)}));var d=e.players||[],f=d.find(function(w){return w.name===s.playerName});if(f&&(s.isAdmin=f.is_admin===!0),e.language&&(zs(e.language),typeof BeatifyI18n<"u"&&e.language!==BeatifyI18n.getLanguage()&&BeatifyI18n.setLanguage(e.language).then(function(){BeatifyI18n.initPageTranslations(),zt(d),e.difficulty&&wt(e.difficulty,e.title_artist_mode),e.phase==="REVEAL"&&Ue(e),(e.phase==="PLAYING"||e.phase==="REVEAL")&&kt(e.phase)})),e.join_url&&Xn(e.join_url),e.phase==="LOBBY"){Ee(),ct(),ut.cancel(),Ue.cancel(),ot(),lt(),s.currentRoundNumber=0,he("warmup");var u=document.getElementById("start-game-btn");if(u&&(u.disabled=!1,u.innerHTML=''+V.t("lobby.startGame")+""),s.lastPlayerCount=d.length,s.lastDifficulty=e.difficulty?V.t?V.t("game.difficulty"+e.difficulty.charAt(0).toUpperCase()+e.difficulty.slice(1)):e.difficulty:"",!Rt()&&lr(f))dr();else{var m=document.getElementById("ready-view"),v=m&&!m.classList.contains("hidden");!v&&!Rt()&&B("lobby-view"),v&&An(d,s.lastDifficulty)}zt(d),e.difficulty&&wt(e.difficulty,e.title_artist_mode),na(d)}else if(e.phase==="PLAYING"){Rt()&&cr(),ae(),ct(),ht();var p=e.round||1;p!==s.currentRoundNumber&&(s.currentRoundNumber=p,Ba()),En(),he("party"),B("game-view"),De(),Ue.cancel(),ut(e),e.intro_splash_pending?ja(s.isAdmin):za(),e.difficulty&&wt(e.difficulty,e.title_artist_mode),e.deadline&&Qt(e.deadline,e.seconds_remaining),Ia(),Sa(),bn(),kt("PLAYING"),lt()}else e.phase==="REVEAL"?(Ee(),e.early_reveal&&ia(),he("party"),B("reveal-view"),ut.cancel(),Ue(e),_a(),bn(),kt("REVEAL"),s._reactionRevealRound!==e.round&&(s._reactionRevealRound=e.round,s.hasReactedThisPhase=!1,Da()),hn()):e.phase==="PAUSED"?(Ee(),ct(),ut.cancel(),Ue.cancel(),ot(),lt(),he("warmup"),B("paused-view"),nr(e)):e.phase==="END"&&(Ee(),ct(),ut.cancel(),Ue.cancel(),ot(),lt(),Jn(),s.currentRoundNumber=0,he("warmup"),B("end-view"),tr(e),pt())}else if(e.type==="join_ack"){ht(),e.session_id&&hr(e.session_id);try{sessionStorage.removeItem("beatify_admin_name"),sessionStorage.removeItem("beatify_is_admin")}catch{}}else if(e.type==="reconnect_ack")e.success&&e.name?(s.playerName=e.name,Er(e.name),ra(e.name)):(vt(),pt(),s.playerName=null,B("join-view"));else if(e.type==="submit_ack")st();else if(e.type==="metadata_update")wa(e.song);else if(e.type==="error"){if(e.code==="ROUND_EXPIRED"||e.code==="ALREADY_SUBMITTED"){mn(e);return}if(e.code==="GAME_ENDED"){B("end-view");return}if(e.code==="NOT_ADMIN"){s.isAdmin=!1,ot(),console.warn("Admin action rejected: not admin");return}if(e.code==="SESSION_TAKEOVER"){s.isReconnecting=!1,Ft(),s.playerName=null,B("session-takeover-view"),console.warn("Session taken over by another tab");return}if(e.code==="SESSION_NOT_FOUND"){if(s.isReconnecting){console.warn("SESSION_NOT_FOUND during reconnect, will retry with session");return}vt(),s.intentionalLeave=!0,s.ws&&s.ws.close(),B("join-view");return}if(e.code==="ADMIN_CANNOT_LEAVE"){s.intentionalLeave=!1,Le(e.message||"Host cannot leave. End the game instead.");return}if(e.code==="INVALID_ACTION"&&e.message==="No song playing"){wn(),console.warn("[Beatify] Stop song failed: No song playing");return}console.warn("[Beatify] Action rejected:",e.code,e.message),mn(e)}else if(e.type==="song_stopped")Wa();else if(e.type==="volume_changed")Ua(e.level);else if(e.type==="game_ended")to();else if(e.type==="rematch_started"){ee("[Player] Rematch started - transitioning to lobby"),Re.clear(),ae(),xa(),B("lobby-view");var h=document.getElementById("player-rematch-btn");h&&(h.disabled=!1,h.textContent="\u{1F501}");var b=mt();b&&(s.ws&&s.ws.readyState===WebSocket.OPEN?(s.reconnectAttempts=0,s.ws.send(JSON.stringify({type:"reconnect",session_id:b}))):(s.reconnectAttempts=0,Ve()))}else e.type==="left"?eo():e.type==="steal_targets"?Ta(e):e.type==="steal_ack"?Aa(e):e.type==="sabotage_targets"?Na(e):e.type==="sabotage_ack"?Ma(e):e.type==="sabotaged"?Ra(e):e.type==="artist_guess_ack"?en(e):e.type==="movie_guess_ack"?on(e):e.type==="title_artist_guess_ack"?Ca(e):e.type==="player_reaction"&&Ha(e.player_name,e.emoji)}}function eo(){pt(),vt(),s.playerName=null,s.isAdmin=!1,B("join-view")}function to(){var e=s.isAdmin;pt();try{sessionStorage.removeItem("beatify_admin_name"),sessionStorage.removeItem("beatify_is_admin")}catch{}qn(),Yn(),Re.clear(),ae(),s.playerName=null,s.isAdmin=!1,s.ws&&s.ws.readyState===WebSocket.OPEN&&s.ws.close(),s.ws=null;var t=document.getElementById("end-view");if(!(!t||!t.classList.contains("hidden"))){var n=document.getElementById("end-player-message");n&&(n.innerHTML='

Thanks for playing!

Scan the QR code again to join the next game.

',n.classList.remove("hidden")),B("end-view")}}function no(e){var t=document.getElementById("name-validation-msg");t&&(t.textContent=e,t.classList.remove("hidden"))}function Tn(e){var t=(e||"").trim();return t?t.length>Ws?{valid:!1,error:"Name too long (max 20 characters)"}:{valid:!0,name:t}:{valid:!1,error:"Please enter a name"}}function gr(){var e=document.getElementById("name-input"),t=document.getElementById("join-btn"),n=document.getElementById("name-validation-msg");if(!(!e||!t)){var a=Tn(e.value);a.valid&&(t.disabled=!0,t.textContent=V.t("game.joining"),n&&n.classList.add("hidden"),Ie(a.name),Ir())}}function Ir(){Br(),s.joinTimeoutId=setTimeout(ao,Us)}function Br(){s.joinTimeoutId&&(clearTimeout(s.joinTimeoutId),s.joinTimeoutId=null)}function ao(){if(s.joinTimeoutId=null,s.ws){s.intentionalLeave=!0;try{s.ws.close()}catch{}s.ws=null}var e=document.getElementById("join-btn");e&&(e.disabled=!1,e.textContent=V.t("join.joinButton")||"Join Game"),no(V.t("errors.joinTimeout")||"Couldn't connect. Please try again."),B("join-view")}function ro(){var e=document.getElementById("name-input"),t=document.getElementById("join-btn"),n=document.getElementById("name-validation-msg");!e||!t||(e.addEventListener("input",function(){var a=Tn(this.value);t.disabled=!a.valid,n&&(n.textContent=!a.valid&&this.value?a.error:"",n.classList.toggle("hidden",a.valid||!this.value))}),t.addEventListener("click",gr),e.addEventListener("keypress",function(a){a.key==="Enter"&&!t.disabled&&gr()}))}function io(){var e=document.getElementById("retry-connection-btn");e&&e.addEventListener("click",function(){s.playerName?(s.reconnectAttempts=0,B("loading-view"),Ie(s.playerName)):gt()});var t=document.getElementById("session-rejoin-btn");t&&t.addEventListener("click",function(){vt(),pt(),s.playerName=null,s.reconnectAttempts=0,B("loading-view"),gt()})}async function yr(){try{await BeatifyAuth.init({requireAuth:!1})}catch{}var e=Te.getDeviceTier();document.body.classList.add("device-tier-"+e);var t=await V.waitForI18n();if(!t)console.error("[Player] BeatifyI18n module failed to load - UI will use fallback text");else{var n=Ys();await BeatifyI18n.init(n),BeatifyI18n.initPageTranslations()}var a=document.getElementById("dashboard-hint-url");a&&(a.textContent=window.location.origin+"/beatify/dashboard");var i=document.getElementById("player-dashboard-url");i&&(i.href=window.location.origin+"/beatify/dashboard"),ro(),ur(),Zn(),ta(),aa(),Ka(),Xa(),Za(),Va(),Ga(),io(),Gn(),Wn(),Un(),Pa();var r=new URLSearchParams(window.location.search),o=r.get("session"),l=null;try{l=sessionStorage.getItem("beatify_session")}catch{}var c=o||l;if(c){hr(c);try{sessionStorage.removeItem("beatify_session")}catch{}}if(Xs()&&s.playerName){mt()?Ve():Ie(s.playerName);return}var d=js();if(d&&s.gameId){ee("[Beatify] Auto-reconnecting as:",d),Ie(d);return}if(d){var f=document.getElementById("name-input"),u=document.getElementById("join-btn");if(f&&(f.value=d,u)){var m=Tn(d);u.disabled=!m.valid}}}gt();document.getElementById("refresh-btn")?.addEventListener("click",function(){B("loading-view"),gt()});document.getElementById("retry-btn")?.addEventListener("click",function(){B("loading-view"),gt()});document.readyState==="loading"?document.addEventListener("DOMContentLoaded",yr):yr();"serviceWorker"in navigator&&window.addEventListener("load",function(){navigator.serviceWorker.register("/beatify/sw.js",{scope:"/beatify/"}).then(function(e){ee("[Beatify] SW registered:",e.scope)}).catch(function(e){console.warn("[Beatify] SW registration failed:",e)})});var so=3e3;document.addEventListener("visibilitychange",function(){if(document.visibilityState==="visible"){s.playerName&&ht();var e=s.ws;if((!e||e.readyState===WebSocket.CLOSING||e.readyState===WebSocket.CLOSED)&&s.playerName){var t=Date.now()-(s.lastConnectStartedAt||0);if(t=ft&&(s.reconnectAttempts=0),ee("[Beatify] Page visible, WebSocket dead \u2014 reconnecting."),Ve()}}});export{gt as checkGameStatus}; diff --git a/custom_components/beatify/www/player.html b/custom_components/beatify/www/player.html index a8d9b3b6..425c4a4e 100644 --- a/custom_components/beatify/www/player.html +++ b/custom_components/beatify/www/player.html @@ -479,6 +479,12 @@

max="2025" value="1990" class="year-slider year-slider-arcade"> + + diff --git a/tests/unit/test_year_scale_marks_2344.py b/tests/unit/test_year_scale_marks_2344.py new file mode 100644 index 00000000..8b3c918c --- /dev/null +++ b/tests/unit/test_year_scale_marks_2344.py @@ -0,0 +1,114 @@ +"""Der Jahres-Regler braucht Landmarken (#2344). + +Die Bahn trug **keine einzige Markierung** — 76 Jahre blankes Gleis. Die +Schwierigkeit ist dabei nicht die Praezision: bei 1950–2026 auf 300 px sind es +**0,25 Jahre pro Pixel**, eine Daumenbewegung von 8 px also rund **zwei Jahre**. +(Die Ausgangsbeschreibung nannte vier Jahre pro Pixel — Faktor sechzehn daneben, +im Issue korrigiert.) + +Das Problem ist die **Orientierung**: man sieht nicht, wo 1985 liegt, also +zieht man, liest die Zahl, zieht nach — bei zwoelf Sekunden auf der Uhr. + +**Abgeleitet statt festgenagelt.** Seit #2337 setzt `applyYearRange()` die +Grenzen aus der laufenden Playlist. Marken auf feste Prozentwerte zu legen +waere in dem Moment falsch, in dem eine Playlist ueber den Standard +hinausreicht — deshalb rechnet die Skala aus derselben Spanne. +""" + +from __future__ import annotations + +import re +from pathlib import Path + +_JS = ( + Path(__file__).resolve().parents[2] + / "custom_components" + / "beatify" + / "www" + / "js" + / "player-game.js" +) +_HTML = ( + Path(__file__).resolve().parents[2] + / "custom_components" + / "beatify" + / "www" + / "player.html" +) + + +def _src() -> str: + return _JS.read_text() + + +def _fn(name: str) -> str: + src = _src() + start = src.index(f"function {name}(") + nxt = re.search(r"\n(?:export )?function ", src[start + 10 :]) + return src[start : start + 10 + nxt.start()] if nxt else src[start:] + + +def _step_for(lo: int, hi: int, max_marks: int = 8) -> float: + """Die Schrittweiten-Regel aus dem JS, unabhaengig nachgebildet.""" + step: float = 10 + while (hi - lo) / step > max_marks: + step = 20 if step == 10 else step * 2.5 + return step + + +def _marks(lo: int, hi: int) -> list[int]: + step = _step_for(lo, hi) + first = -(-lo // step) * step + out, y = [], first + while y <= hi: + out.append(int(y)) + y += step + return out + + +class TestTheMarksFollowTheSpan: + def test_the_default_span_gets_its_decades(self): + # 1950–2026 ist der Standardfall nach #2337. Acht Jahrzehnte, auf + # einer 300-px-Bahn rund 35 px auseinander. + assert _marks(1950, 2026) == [1950, 1960, 1970, 1980, 1990, 2000, 2010, 2020] + + def test_a_narrow_playlist_gets_fewer_marks(self): + # Eine enge Playlist bekommt keine erfundenen Landmarken. + assert _marks(1980, 1995) == [1980, 1990] + + def test_a_long_span_widens_the_step(self): + # Acht Marken sind die Grenze; darueber wird der Schritt groesser, + # statt die Beschriftungen aufeinanderzuschieben. + assert _step_for(1927, 2026) == 20 + assert len(_marks(1927, 2026)) <= 8 + + +class TestTheTwoThingsEasyToGetWrong: + def test_positions_are_inset_by_half_the_thumb(self): + # Der Daumen-Mittelpunkt erreicht den Rand nie. Eine Marke bei echten + # 100 % saesse hinter dem hoechsten waehlbaren Jahr. + body = _fn("renderYearScale") + assert "YEAR_SCALE_THUMB_PX / 2" in body + assert "(100% - " in body + + def test_a_century_crossing_falls_back_to_four_digits(self): + # 1900 und 2000 waeren beide "'00". Die Kurzform gilt nur, solange + # sie eindeutig bleibt. + body = _fn("renderYearScale") + assert "ambiguous" in body + short = [y % 100 for y in _marks(1900, 2026)] + assert len(short) != len(set(short)), "der Testfall selbst muss kollidieren" + + +class TestItIsWiredToTheOneSourceOfTheSpan: + def test_applyyearrange_rebuilds_the_scale(self): + # Grenzen und Marken duerfen nicht aus zwei Quellen kommen. + assert "renderYearScale(lo, hi)" in _fn("applyYearRange") + + def test_the_markup_ships_an_empty_container(self): + # Feste Marken im HTML waeren genau der Fehler, den #2337 gerade + # beseitigt hat. + html = _HTML.read_text() + assert 'id="year-scale"' in html + m = re.search(r'
]*>(.*?)
', html, re.DOTALL) + assert m and not m.group(1).strip()