@font-face{font-family:'Familjen Grotesk';font-style:normal;font-weight:400 700;font-display:swap;src:url(../fonts/FamiljenGrotesk.woff2) format('woff2')}
@font-face{font-family:'Martian Mono';font-style:normal;font-weight:100 800;font-display:swap;src:url(../fonts/MartianMono.woff2) format('woff2')}

:root{--navy:#0e1226;--cream:#edeae0;--blue:#6e86ff;--pink:#ff3e8f;--yellow:#ffc90a;--panel:#171b36;--line:rgba(237,234,224,.22);--lane-gap:clamp(5px,1vw,12px)}
*,*::before,*::after{box-sizing:border-box}
[hidden]{display:none!important}
html{background:var(--navy);color-scheme:dark;scroll-behavior:smooth}
body{margin:0;min-width:300px;background:var(--navy);color:var(--cream);font-family:'Familjen Grotesk',system-ui,sans-serif;overflow-x:hidden}
button,input{font:inherit}
button,a{-webkit-tap-highlight-color:transparent}
button:focus-visible,a:focus-visible,input:focus-visible{outline:3px solid var(--yellow);outline-offset:3px}
.skip-link{position:fixed;left:16px;top:10px;z-index:100;transform:translateY(-200%);background:var(--yellow);color:var(--navy);padding:10px 14px;font-weight:700}.skip-link:focus{transform:none}

.disco-header{height:78px;max-width:1600px;margin:auto;padding:0 clamp(16px,3vw,48px);display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line);position:relative;z-index:20}
.disco-wordmark{display:flex;align-items:center;flex:none;min-height:44px;width:110px}
.disco-wordmark img{display:block;width:100%;height:auto}
.header-navigation,.header-actions{display:flex;align-items:center;gap:10px}.header-navigation{position:relative}#settings-toggle{display:none}
.quiet-button{appearance:none;height:44px;padding:0 12px;display:inline-flex;align-items:center;justify-content:center;line-height:1;text-decoration:none;text-transform:uppercase;border:1px solid var(--line);color:var(--cream);background:transparent;font-family:'Martian Mono',monospace;font-size:8px;letter-spacing:.1em;cursor:pointer;white-space:nowrap}
.quiet-button:hover{border-color:var(--pink);color:var(--pink)}
.volume-control{display:flex;gap:9px;align-items:center;font-family:'Martian Mono',monospace;text-transform:uppercase;font-size:8px;letter-spacing:.1em;color:rgba(237,234,224,.72)}
.volume-control input{width:70px;accent-color:var(--pink)}

.disco-shell{width:min(1600px,100%);margin:auto;padding:clamp(22px,4vw,58px) clamp(14px,3vw,48px) 24px}
.title-lockup{position:relative;padding-bottom:clamp(18px,2.5vw,34px)}
.kicker,.panel-label,.message-kicker{margin:0 0 9px;font-family:'Martian Mono',monospace;text-transform:uppercase;font-size:9px;letter-spacing:.19em}
.kicker{color:var(--pink)}
.title-lockup h1{width:min(100%,1100px);margin:0;line-height:0}
.disco-logo{display:block;width:100%;height:auto;max-height:clamp(210px,25vw,330px);object-fit:contain;object-position:left center}
.song-line{margin-top:clamp(26px,4vw,52px);display:flex;align-items:end;justify-content:space-between;border-top:1px solid var(--line);padding-top:12px;gap:20px;font-family:'Martian Mono',monospace;text-transform:uppercase;font-size:9px;letter-spacing:.12em}
.song-line p{margin:0}.song-line p:first-child{color:var(--yellow)}.song-line p:last-child{color:rgba(237,234,224,.66);text-align:right}
.track-picker{padding:0;margin:0 0 22px;border:0;min-width:0}
.track-picker legend{padding:0;margin-bottom:10px;font-family:'Martian Mono',monospace;font-size:8px;text-transform:uppercase;letter-spacing:.14em;color:var(--pink)}
.track-options{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}
.track-options button{appearance:none;min-height:70px;padding:13px 16px;border:1px solid var(--line);background:#131830;color:var(--cream);text-align:left;cursor:pointer}
.track-options button span{display:block;font-size:18px;font-weight:700;line-height:1.15}
.track-options button small{display:block;margin-top:8px;font-family:'Martian Mono',monospace;font-size:7px;line-height:1.6;color:rgba(237,234,224,.66)}
.track-options button[aria-pressed="true"]{border-color:var(--yellow);box-shadow:inset 0 -3px var(--yellow)}
.track-options button[aria-pressed="true"] span{color:var(--yellow)}
.track-options button:hover:not(:disabled){background:#1c2342;border-color:var(--pink)}
.track-options button:disabled{cursor:wait}
.difficulty-picker{min-width:0;padding:0;margin:0 0 22px;border:0}
.difficulty-picker legend{padding:0;margin-bottom:10px;font-family:'Martian Mono',monospace;font-size:8px;text-transform:uppercase;letter-spacing:.14em;color:var(--blue)}
.difficulty-options{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}
.difficulty-options button{appearance:none;min-height:62px;padding:10px 12px;border:1px solid var(--line);background:#131830;color:var(--cream);text-align:left;cursor:pointer}
.difficulty-options button span{display:block;font-size:14px;font-weight:700;line-height:1.1;text-transform:uppercase}
.difficulty-options button small{display:block;margin-top:5px;font-family:'Martian Mono',monospace;font-size:7px;line-height:1.35;color:rgba(237,234,224,.66)}
.difficulty-options button[aria-pressed="true"]{border-color:var(--blue);box-shadow:inset 0 -3px var(--blue)}
.difficulty-options button[aria-pressed="true"] span{color:var(--blue)}
.difficulty-options button:hover:not(:disabled){border-color:var(--pink);background:#1c2342}

.game-frame{display:grid;grid-template-columns:minmax(0,1fr) 240px;border:1px solid var(--line);min-height:min(690px,72vh);background:var(--panel);box-shadow:0 28px 90px rgba(0,0,0,.32)}
.stage{position:relative;isolation:isolate;overflow:hidden;min-height:540px;background:radial-gradient(circle at 65% 25%,#242958 0%,#121630 48%,#090c1b 100%)}
.mascot-stage{position:absolute;inset:0;z-index:0}#disco-canvas{position:absolute;inset:0;width:100%;height:100%;display:block;z-index:0;image-rendering:pixelated}
.dancer-status{position:absolute;z-index:4;left:14px;bottom:12px;width:calc(53% - 28px);margin:0;text-align:center;font-family:'Martian Mono',monospace;font-size:clamp(7px,.8vw,10px);line-height:1.6;text-transform:uppercase;letter-spacing:.12em;color:var(--blue);text-shadow:0 2px 8px var(--navy);pointer-events:none}
.stage-vignette{position:absolute;inset:0;pointer-events:none;z-index:1;background:linear-gradient(90deg,rgba(4,5,15,.4),transparent 32%,transparent 75%,rgba(4,5,15,.22)),linear-gradient(0deg,rgba(4,5,15,.5),transparent 35%)}
.lane-board{--receptor-top:52px;position:absolute;z-index:5;right:clamp(14px,2.5vw,36px);top:clamp(14px,2.5vw,36px);bottom:clamp(14px,2.5vw,36px);width:43%;border:1px solid rgba(237,234,224,.22);background:linear-gradient(180deg,rgba(10,12,29,.72),rgba(10,12,29,.42));backdrop-filter:blur(8px);overflow:hidden}
.lane-board::before{content:'';position:absolute;inset:0;background:repeating-linear-gradient(90deg,transparent 0,transparent calc(25% - .5px),rgba(237,234,224,.09) calc(25% - .5px),rgba(237,234,224,.09) 25%);pointer-events:none}
.lane-receptors{position:absolute;left:8px;right:8px;top:var(--receptor-top);display:grid;grid-template-columns:repeat(4,1fr);gap:var(--lane-gap);z-index:4}
.lane-receptors span{aspect-ratio:1;display:grid;place-items:center;border:1px solid rgba(237,234,224,.42);background:rgba(14,18,38,.85);color:var(--cream);font-size:clamp(19px,2.5vw,32px);font-weight:700;transition:transform .08s,background .08s,color .08s}
.lane-receptors span:nth-child(1){border-color:var(--pink)}.lane-receptors span:nth-child(2){border-color:var(--yellow)}.lane-receptors span:nth-child(3){border-color:var(--blue)}.lane-receptors span:nth-child(4){border-color:var(--pink)}
.lane-receptors span.is-held{transform:scale(.9);background:var(--cream);color:var(--navy)}
.note-field{position:absolute;inset:8px;z-index:3}
.dance-note{--lane:0;position:absolute;width:calc((100% - 3 * var(--lane-gap))/4);left:calc(var(--lane) * ((100% + var(--lane-gap))/4));bottom:calc(0px + var(--note-y,0) * 1px);aspect-ratio:1;display:grid;place-items:center;border:1px solid transparent;border-radius:4px;background:var(--note-color);color:var(--navy);font-size:clamp(18px,2.3vw,30px);font-weight:700;box-shadow:0 0 22px color-mix(in srgb,var(--note-color) 70%,transparent);will-change:transform,opacity}
.dance-note[data-lane="0"],.dance-note[data-lane="3"]{--note-color:var(--pink)}.dance-note[data-lane="1"]{--note-color:var(--yellow)}.dance-note[data-lane="2"]{--note-color:var(--blue)}
.judgment{position:absolute;z-index:6;left:0;right:0;top:calc(var(--receptor-top) + clamp(58px,8vw,82px));text-align:center;font-size:clamp(25px,3vw,42px);line-height:1;text-transform:uppercase;font-weight:700;text-shadow:0 3px 24px #060817;pointer-events:none;opacity:0;transform:scale(.7)}
.judgment.show{opacity:1;transform:none}.judgment.perfect{color:var(--yellow)}.judgment.good{color:var(--blue)}.judgment.miss{color:var(--pink)}
@keyframes judgment{0%{opacity:0;transform:scale(.65)}22%,72%{opacity:1;transform:scale(1)}100%{opacity:0;transform:translateY(-14px) scale(1.04)}}
.streak-banner{position:absolute;z-index:6;top:18px;left:clamp(14px,2.5vw,36px);display:flex;align-items:center;min-height:26px;padding:5px 9px;border:1px solid var(--yellow);background:rgba(14,18,38,.88);color:var(--yellow);font-family:'Martian Mono',monospace;font-size:9px;line-height:1;letter-spacing:.12em;text-transform:uppercase;pointer-events:none;opacity:0;transform:translateY(-8px) scale(.92);box-shadow:3px 3px 0 var(--pink)}
.streak-banner.show{opacity:1;animation:streak-pop .58s cubic-bezier(.18,.8,.28,1)}
@keyframes streak-pop{0%{opacity:0;transform:translateY(-12px) scale(.82)}38%{opacity:1;transform:translateY(0) scale(1.06)}72%,100%{opacity:1;transform:translateY(0) scale(1)}}
body[data-game-state="playing"] .game-frame[data-combo-tier="1"] .lane-board{border-color:rgba(110,134,255,.72);box-shadow:0 0 18px rgba(110,134,255,.22),inset 0 0 22px rgba(110,134,255,.08)}
body[data-game-state="playing"] .game-frame[data-combo-tier="2"] .lane-board{border-color:rgba(255,201,10,.8);box-shadow:0 0 24px rgba(255,201,10,.28),inset 0 0 28px rgba(255,201,10,.1)}
body[data-game-state="playing"] .game-frame[data-combo-tier="3"]{box-shadow:0 28px 90px rgba(0,0,0,.32),0 0 30px rgba(255,62,143,.18)}
body[data-game-state="playing"] .game-frame[data-combo-tier="3"] .lane-board{border-color:var(--pink);box-shadow:0 0 30px rgba(255,62,143,.36),inset 0 0 34px rgba(110,134,255,.14)}

.stage-message,.pause-card{position:absolute;z-index:10;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:30px;background:rgba(10,12,28,.72);backdrop-filter:blur(12px)}
.game-frame[data-state="ready"] .stage-message{background:linear-gradient(90deg,rgba(8,10,25,.88),rgba(8,10,25,.44))}
.message-kicker{color:var(--pink)}
.stage-message h2,.pause-card h2{font-size:clamp(40px,6vw,82px);letter-spacing:-.055em;line-height:.91;margin:0;max-width:10ch}
.stage-message>p:not(.message-kicker){color:rgba(237,234,224,.76);margin:18px 0 0;max-width:37ch}
.start-button,.retry-button{appearance:none;border:0;background:var(--yellow);color:var(--navy);font-weight:700;padding:16px 18px;margin-top:28px;min-width:210px;display:flex;justify-content:space-between;gap:24px;cursor:pointer;box-shadow:7px 7px 0 var(--pink);transition:transform .15s,box-shadow .15s}
.start-button:hover,.retry-button:hover{transform:translate(3px,3px);box-shadow:4px 4px 0 var(--pink)}.start-button:disabled{cursor:wait;opacity:.45;box-shadow:none}
.retry-button{background:var(--cream)}
.loader{height:38px;display:flex;align-items:end;gap:5px;margin-bottom:21px}.loader i{display:block;width:8px;background:var(--blue);animation:equalise .75s ease-in-out infinite alternate}.loader i:nth-child(1){height:14px}.loader i:nth-child(2){height:30px;animation-delay:-.4s;background:var(--pink)}.loader i:nth-child(3){height:22px;animation-delay:-.2s;background:var(--yellow)}.loader i:nth-child(4){height:34px;animation-delay:-.6s}
@keyframes equalise{to{height:7px}}
.game-frame[data-state="ready"] .loader{display:none}
.pause-card>p{font-family:'Martian Mono',monospace;text-transform:uppercase;font-size:9px;letter-spacing:.19em;color:var(--yellow)}
.results-report>strong{display:block;font-family:'Martian Mono',monospace;font-size:clamp(32px,4vw,56px);color:var(--yellow);line-height:1;margin-top:18px}
.result-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--line);margin-top:18px;width:min(580px,100%)}
.result-grid span{background:#11152c;padding:11px 8px;display:flex;flex-direction:column;text-transform:uppercase;font-family:'Martian Mono',monospace;font-size:7px;letter-spacing:.08em;color:rgba(237,234,224,.7)}
.result-grid b{font-family:'Familjen Grotesk',sans-serif;font-size:25px;color:var(--cream)}
.claim-score{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:44px;width:min(100%,210px);margin-top:12px;padding:10px 12px;border:1px solid var(--blue);background:rgba(110,134,255,.12);color:var(--cream);font-family:'Martian Mono',monospace;font-size:8px;letter-spacing:.08em;line-height:1.3;text-align:left;text-decoration:none;text-transform:uppercase}.claim-score:hover{border-color:var(--yellow);color:var(--yellow)}.claim-score span{font-family:'Familjen Grotesk',sans-serif;font-size:18px;line-height:1}
.change-track-button{appearance:none;min-height:48px;width:min(100%,260px);margin-top:10px;border:1px solid var(--line);background:transparent;color:var(--cream);padding:10px 12px;font-family:'Martian Mono',monospace;font-size:10px;letter-spacing:.08em;text-transform:uppercase;cursor:pointer}.change-track-button:hover{border-color:var(--pink);color:var(--pink)}

.game-console{display:flex;flex-direction:column;border-left:1px solid var(--line);background:#10142b}
.score-panel,.time-panel{padding:22px;border-bottom:1px solid var(--line)}
.panel-label{display:block;color:rgba(237,234,224,.54)}
.score-panel>strong{display:block;font-family:'Martian Mono',monospace;color:var(--yellow);font-size:25px;letter-spacing:.04em;line-height:1.3;font-variant-numeric:tabular-nums}
.combo-row{display:flex;justify-content:space-between;align-items:baseline;margin-top:23px;text-transform:uppercase;font-family:'Martian Mono',monospace;font-size:8px;letter-spacing:.1em;color:rgba(237,234,224,.55)}.combo-row b{font-family:'Familjen Grotesk',sans-serif;font-size:27px;color:var(--pink)}
.time-row{display:flex;justify-content:space-between;font-family:'Martian Mono',monospace;font-size:9px;color:rgba(237,234,224,.75)}
.progress{height:4px;background:rgba(237,234,224,.12);margin-top:10px;overflow:hidden}.progress i{display:block;width:100%;height:100%;background:var(--blue);transform:scaleX(0);transform-origin:left}
.pause-button{appearance:none;margin:auto 22px 22px;border:1px solid var(--line);padding:13px 14px;background:transparent;color:var(--cream);display:flex;justify-content:space-between;cursor:pointer}.pause-button:hover:not(:disabled){border-color:var(--pink)}.pause-button:disabled{opacity:.35;cursor:default}.pause-button kbd{border:1px solid var(--line);padding:1px 4px;font-family:'Martian Mono';font-size:7px}
.control-hint{margin:0;padding:22px;color:rgba(237,234,224,.6);font-size:13px;border-top:1px solid var(--line)}.control-hint span{display:block;font-family:'Martian Mono';text-transform:uppercase;letter-spacing:.12em;font-size:7px;color:var(--pink);margin-bottom:6px}

.touch-controls{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin:12px 0 0 auto;width:calc(100% - 252px)}
.touch-controls button{appearance:none;border:1px solid var(--line);background:var(--panel);color:var(--cream);min-height:68px;display:flex;align-items:center;justify-content:center;gap:12px;cursor:pointer;touch-action:manipulation;user-select:none}.touch-controls button span{font-size:32px;line-height:1}.touch-controls button small{font-family:'Martian Mono';font-size:8px;color:rgba(237,234,224,.5)}.touch-controls button.is-held{background:var(--cream);color:var(--navy);transform:translateY(2px)}
.touch-controls button:nth-child(1),.touch-controls button:nth-child(4){border-bottom-color:var(--pink)}.touch-controls button:nth-child(2){border-bottom-color:var(--yellow)}.touch-controls button:nth-child(3){border-bottom-color:var(--blue)}
.footer-note{display:flex;justify-content:space-between;margin:22px 0 0;border-top:1px solid var(--line);padding-top:12px;font-family:'Martian Mono';text-transform:uppercase;letter-spacing:.11em;font-size:7px;color:rgba(237,234,224,.42)}

@media (min-width:841px){
  .game-frame[data-state="ready"] .stage-message{left:auto;right:clamp(14px,2.5vw,36px);top:clamp(14px,2.5vw,36px);bottom:clamp(14px,2.5vw,36px);width:43%;padding:24px;background:linear-gradient(180deg,rgba(10,12,29,.96),rgba(10,12,29,.82));backdrop-filter:none;border:1px solid rgba(237,234,224,.22)}
  .game-frame[data-state="ready"] .stage-message h2{font-size:clamp(34px,4vw,60px)}
  body[data-game-state="playing"] .title-lockup,body[data-game-state="starting"] .title-lockup,body[data-game-state="paused"] .title-lockup,body[data-game-state="resuming"] .title-lockup,body[data-game-state="results"] .title-lockup{padding-bottom:14px}
  body[data-game-state="playing"] .title-lockup .kicker,body[data-game-state="starting"] .title-lockup .kicker,body[data-game-state="paused"] .title-lockup .kicker,body[data-game-state="resuming"] .title-lockup .kicker,body[data-game-state="results"] .title-lockup .kicker,body[data-game-state="playing"] .title-lockup .song-line,body[data-game-state="starting"] .title-lockup .song-line,body[data-game-state="paused"] .title-lockup .song-line,body[data-game-state="resuming"] .title-lockup .song-line,body[data-game-state="results"] .title-lockup .song-line{display:none}
  body[data-game-state="playing"] .title-lockup h1,body[data-game-state="starting"] .title-lockup h1,body[data-game-state="paused"] .title-lockup h1,body[data-game-state="resuming"] .title-lockup h1,body[data-game-state="results"] .title-lockup h1{font-size:clamp(52px,6vw,86px);line-height:.75}
  body[data-game-state="playing"] .title-lockup h1,body[data-game-state="starting"] .title-lockup h1,body[data-game-state="paused"] .title-lockup h1,body[data-game-state="resuming"] .title-lockup h1,body[data-game-state="results"] .title-lockup h1{height:90px;line-height:0}
  body[data-game-state="playing"] .disco-logo,body[data-game-state="starting"] .disco-logo,body[data-game-state="paused"] .disco-logo,body[data-game-state="resuming"] .disco-logo,body[data-game-state="results"] .disco-logo{width:auto;height:90px;max-height:90px}
  body[data-game-state="playing"] .game-frame,body[data-game-state="starting"] .game-frame,body[data-game-state="paused"] .game-frame,body[data-game-state="resuming"] .game-frame,body[data-game-state="results"] .game-frame{min-height:min(520px,57svh)}
  body[data-game-state="playing"] .stage,body[data-game-state="starting"] .stage,body[data-game-state="paused"] .stage,body[data-game-state="resuming"] .stage,body[data-game-state="results"] .stage{min-height:min(520px,57svh)}
}

@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}.loader i,.streak-banner.show{animation:none}.judgment.show{animation-duration:.01ms}.start-button,.retry-button,.lane-receptors span{transition:none}}
body[data-reduced-motion="true"] .loader i{animation:none}
body[data-reduced-motion="true"] .judgment.show{animation:none;opacity:1;transform:none}
body[data-reduced-motion="true"] .streak-banner.show{animation:none;opacity:1;transform:none}
body:is([data-game-state="paused"],[data-game-state="resuming"]) .streak-banner{animation:none!important}

/* Keep the mascot visible alongside the start and pause cards. */
.game-frame:is([data-state="ready"],[data-state="paused"],[data-state="resuming"]) :is(.stage-message,.pause-card){left:auto;right:clamp(14px,2.5vw,36px);top:clamp(14px,2.5vw,36px);bottom:clamp(14px,2.5vw,36px);width:43%;padding:20px;background:rgba(10,12,29,.94);backdrop-filter:none;border:1px solid var(--line)}
.pause-card h2{font-size:clamp(30px,4vw,58px)}

/* Per-track high score stays visible while the full board is reserved for the result view. */
.record-panel{padding:16px 22px;border-bottom:1px solid var(--line)}
.record-panel .panel-label{margin-bottom:6px;color:var(--pink)}
.record-panel>div{display:flex;align-items:baseline;justify-content:space-between;gap:10px;font-family:'Martian Mono',monospace}
.record-panel strong{color:var(--cream);font-size:16px;letter-spacing:.04em;font-variant-numeric:tabular-nums}
.record-panel>div>span{color:var(--yellow);font-size:10px;letter-spacing:.12em}

.score-entry,.leaderboard-panel{border:1px solid var(--line);background:#10142b;margin-top:12px;padding:clamp(16px,2vw,24px)}
.score-entry h2,.leaderboard-panel h2{margin:0;font-size:clamp(26px,3vw,42px);line-height:.95;letter-spacing:-.045em;text-transform:uppercase}
.score-entry h2{color:var(--yellow)}
.leaderboard-panel h2{color:var(--pink)}
#score-form{display:grid;grid-template-columns:minmax(0,1fr) 92px 132px;gap:10px;align-items:end;margin-top:18px}
#score-form label{display:block;font-family:'Martian Mono',monospace;font-size:8px;line-height:1.4;letter-spacing:.13em;text-transform:uppercase;color:rgba(237,234,224,.68)}
#score-initials{grid-column:2;width:100%;min-height:48px;border:1px solid var(--line);border-radius:0;background:#171b36;color:var(--cream);padding:10px 12px;font-family:'Martian Mono',monospace;font-size:16px;line-height:1;letter-spacing:.2em;text-align:center;text-transform:uppercase}
#score-form label{grid-column:1;grid-row:1}
#save-score{grid-column:3;grid-row:1;appearance:none;min-height:48px;border:0;background:var(--yellow);color:var(--navy);padding:10px 14px;font-weight:700;cursor:pointer;text-transform:uppercase;font-size:12px;letter-spacing:.03em}
#save-score:hover{background:var(--cream)}
.score-entry-note{margin:11px 0 0;color:rgba(237,234,224,.58);font-family:'Martian Mono',monospace;font-size:8px;line-height:1.5;letter-spacing:.06em;text-transform:uppercase}
#score-save-status,#leaderboard-status{min-height:1.4em;margin:11px 0 0;color:rgba(237,234,224,.7);font-family:'Martian Mono',monospace;font-size:8px;line-height:1.5;letter-spacing:.08em;text-transform:uppercase}
#leaderboard-track{margin:10px 0 0;color:var(--yellow);font-family:'Martian Mono',monospace;font-size:9px;letter-spacing:.1em;text-transform:uppercase}
#leaderboard-entries{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:6px;margin:18px 0 0;padding:0;list-style-position:inside}
#leaderboard-entries:empty::before{content:'No scores on this floor yet.';grid-column:1/-1;color:rgba(237,234,224,.58);font-family:'Martian Mono',monospace;font-size:8px;letter-spacing:.08em;text-transform:uppercase}
#leaderboard-entries li{min-height:54px;padding:9px;background:#171b36;border-top:2px solid var(--blue);font-family:'Martian Mono',monospace;font-size:10px;letter-spacing:.08em}
#leaderboard-entries li::marker{color:var(--pink);font-weight:700}
body[data-game-state="starting"] :is(#leaderboard-panel,#score-entry),body[data-game-state="playing"] :is(#leaderboard-panel,#score-entry),body[data-game-state="paused"] :is(#leaderboard-panel,#score-entry),body[data-game-state="resuming"] :is(#leaderboard-panel,#score-entry){display:none}
body[data-game-state="results"] .touch-controls{display:none}


/* A completed song opens the studio invitation beside the score. */
body[data-game-state="results"] .title-lockup{display:none}
body[data-game-state="results"] .game-frame{display:block;min-height:0;scroll-margin-top:16px}
body[data-game-state="results"] .stage{height:auto;min-height:0}
.game-frame[data-state="results"] :is(.lane-board,.game-console){display:none}
.game-frame[data-state="results"] .mascot-stage{--mascot-centered:1;inset:0 auto auto 0;width:40%;height:150px;z-index:11;pointer-events:none}
.game-frame[data-state="results"] .dancer-status{display:none}
.results-card{position:relative;z-index:10;display:grid;grid-template-columns:minmax(0,2fr) minmax(0,3fr);background:#10142b}
.results-card h2{margin:0;font-size:clamp(34px,4.5vw,66px);letter-spacing:-.055em;line-height:1}
.results-report{min-width:0;display:flex;flex-direction:column;align-items:center;text-align:center;padding:160px clamp(16px,3vw,40px) 28px}
.results-report h2{font-size:clamp(30px,3.2vw,44px);max-width:12ch}
.results-report .result-grid{margin:20px 0 12px}
.results-report .result-grid span{font-size:9px;line-height:1.5;letter-spacing:0}
.results-play{grid-column:1;grid-row:2;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;min-width:0;padding:0 clamp(16px,3vw,40px) 28px}
.results-play :is(.change-track-button,.claim-score){width:100%;max-width:320px;min-height:48px;font-size:10px}
.results-next{grid-column:2;grid-row:1/3;min-width:0;border-left:1px solid var(--line);padding:clamp(24px,3vw,44px)}
.results-maker{display:flex;align-items:center;gap:14px;margin-bottom:22px}
.results-maker img{width:48px;height:60px;object-fit:cover}
.results-maker p{margin:0;font-family:'Martian Mono',monospace;font-size:9px;line-height:1.7;text-transform:uppercase;letter-spacing:.08em;color:var(--yellow)}
.results-next h2 span{color:var(--pink)}
.results-intro{max-width:42ch;margin:18px 0 24px;font-size:18px;line-height:1.5;color:rgba(237,234,224,.8)}
.results-cta{display:flex;align-items:center;justify-content:space-between;gap:20px;width:fit-content;max-width:100%;min-height:52px;padding:14px 18px;background:var(--yellow);color:var(--navy);font-size:18px;font-weight:700;text-decoration:none;box-shadow:4px 4px 0 var(--pink)}
.results-cta:hover{background:var(--pink);box-shadow:4px 4px 0 var(--yellow)}
.results-services{display:flex;align-items:center;width:fit-content;min-height:44px;margin-top:12px;color:var(--cream);text-underline-offset:4px}
.results-services:hover{color:var(--pink)}
.results-explore{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:24px;margin-top:24px;padding-top:22px;border-top:1px solid var(--line)}
.results-explore a{display:block;color:var(--cream);text-decoration:none}
.results-explore a>span{display:block;margin-bottom:10px;font-family:'Martian Mono',monospace;font-size:9px;line-height:1.6;letter-spacing:.04em;text-transform:uppercase;color:var(--blue)}
.results-explore b{display:block;font-size:20px;line-height:1.15;letter-spacing:-.025em}
.results-explore small{display:block;margin-top:8px;font-size:14px;line-height:1.5;color:rgba(237,234,224,.7)}
.results-explore a:hover b{color:var(--pink);text-decoration:underline;text-underline-offset:4px}
@media (max-width:1100px){.results-report .result-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}

/* Shared SVG arrow geometry. */
:root{--arrow-size:32px}
[data-lane="0"] .arrow-icon{--arrow-rotation:-90deg}[data-lane="1"] .arrow-icon{--arrow-rotation:180deg}[data-lane="2"] .arrow-icon{--arrow-rotation:0deg}[data-lane="3"] .arrow-icon{--arrow-rotation:90deg}
.arrow-icon{display:block;flex:none;width:var(--arrow-size);height:var(--arrow-size);transform:rotate(var(--arrow-rotation,0deg))}.arrow-icon svg{display:block;width:100%;height:100%}
.lane-receptors span,.dance-note{font-size:0}.touch-controls button{touch-action:none}

@media (max-width:840px), (max-height:500px) and (orientation:landscape){
  .disco-header{height:52px;min-height:52px;padding:0 max(14px,env(safe-area-inset-right)) 0 max(14px,env(safe-area-inset-left))}
  html,body{max-width:100%;overflow-x:clip}.disco-wordmark{width:88px}.header-navigation{gap:6px}.quiet-button{height:44px;min-height:44px;padding:0 9px;font-size:10px}
  #settings-toggle{display:block}.header-actions{display:none;position:absolute;z-index:30;top:calc(100% + 6px);right:42px;width:min(230px,calc(100vw - 28px));padding:10px;border:1px solid var(--line);background:#10142b;box-shadow:0 12px 30px rgba(0,0,0,.35)}
  .header-actions.is-open{display:flex;flex-direction:column;align-items:stretch}.volume-control{justify-content:space-between}.volume-control span{display:inline}.volume-control input{width:110px}
  .disco-shell{padding:12px max(14px,env(safe-area-inset-right)) calc(18px + env(safe-area-inset-bottom)) max(14px,env(safe-area-inset-left))}
  .title-lockup{padding-bottom:10px}.kicker{display:none}.title-lockup h1{width:220px}.disco-logo{width:220px;height:auto;max-height:none}.song-line{margin-top:7px;padding-top:7px;font-size:12px;letter-spacing:.04em}.song-line p:last-child{display:none}
  .track-picker{margin-bottom:10px}.track-picker legend,.difficulty-picker legend{font-size:10px}.track-options{grid-template-columns:1fr;gap:6px}.track-options button{display:block;min-height:60px;padding:9px 13px}.track-options button span{font-size:16px}.track-options button small{margin-top:4px;font-size:10px;text-align:left}
  .difficulty-picker{margin-bottom:10px}.difficulty-options{gap:6px}.difficulty-options button{min-height:54px;padding:8px 7px;text-align:center}.difficulty-options button span{font-size:12px}.difficulty-options button small{margin-top:4px;font-size:8px;line-height:1.3}
  .game-frame{grid-template-columns:1fr;min-height:0}.stage{min-height:0;height:auto}.mascot-stage{height:120px;bottom:auto}.dancer-status{left:0;bottom:auto;top:104px;width:100%;font-size:9px}
  .lane-board{backdrop-filter:none}.game-console{display:none}.touch-controls{display:none}
  .game-frame:is([data-state="ready"],[data-state="loading"],[data-state="error"]) .lane-board{display:none}.game-frame:is([data-state="ready"],[data-state="loading"],[data-state="error"]) .stage-message{position:relative;inset:auto;width:auto;min-height:154px;margin-top:120px;padding:14px;background:rgba(10,12,29,.94);backdrop-filter:none;border-top:1px solid var(--line)}
  .stage-message h2{max-width:none;font-size:24px}.stage-message>p:not(.message-kicker){margin-top:7px;font-size:12px;line-height:1.35}.message-kicker{font-size:9px}.stage-message .start-button{min-height:48px;width:min(100%,300px);margin-top:12px;padding:12px 14px}
  body:is([data-game-state="loading"],[data-game-state="ready"],[data-game-state="error"]) .game-console,body:is([data-game-state="loading"],[data-game-state="ready"],[data-game-state="error"]) .touch-controls{display:none}
  body[data-game-state="results"] .title-lockup,body[data-game-state="results"] .track-picker,body[data-game-state="results"] .footer-note{display:none}
  .game-frame[data-state="results"] .mascot-stage{width:100%;height:100px}
  .results-card{grid-template-columns:minmax(0,1fr)}
  .results-report{padding:110px 16px 20px}.results-report h2{max-width:none;font-size:28px}.results-report>strong{font-size:32px;margin-top:8px}
  .results-report .result-grid{grid-template-columns:repeat(4,minmax(0,1fr));width:100%;max-width:460px;margin:12px 0 0}.result-grid span{padding:8px 5px;font-size:9px}.result-grid b{font-size:20px}
  .results-next{grid-column:1;grid-row:2;border-left:0;border-top:1px solid var(--line);padding:24px 20px}
  .results-next h2{font-size:clamp(36px,8vw,54px)}.results-maker{margin-bottom:18px}.results-maker img{width:40px;height:50px}.results-intro{font-size:17px;margin:16px 0 20px}
  .results-cta{width:100%;font-size:17px}.results-explore{gap:20px}.results-explore b{font-size:18px}
  .results-play{grid-column:1;grid-row:3;padding:16px 20px 24px;border-top:1px solid var(--line)}.results-play :is(.change-track-button,.claim-score){max-width:none;font-size:11px}
  .score-entry,.leaderboard-panel{margin-top:10px;padding:16px}.score-entry h2,.leaderboard-panel h2{font-size:28px}#score-form{grid-template-columns:1fr 104px;gap:8px;margin-top:14px}#score-form label{grid-column:1/-1;grid-row:1;font-size:10px}#score-initials{grid-column:1;grid-row:2}#save-score{grid-column:2;grid-row:2;min-height:48px}.score-entry-note,#score-save-status,#leaderboard-status,#leaderboard-track{font-size:10px}#leaderboard-entries{grid-template-columns:1fr;gap:6px;margin-top:14px}#leaderboard-entries li{min-height:52px;font-size:12px}
  #leaderboard-entries li br{display:none}#leaderboard-entries li b{display:inline}#leaderboard-entries li span{float:right}
  body:is([data-game-state="starting"],[data-game-state="playing"],[data-game-state="paused"],[data-game-state="resuming"]) .title-lockup,body:is([data-game-state="starting"],[data-game-state="playing"],[data-game-state="paused"],[data-game-state="resuming"]) .track-picker,body:is([data-game-state="starting"],[data-game-state="playing"],[data-game-state="paused"],[data-game-state="resuming"]) :is(#score-entry,#leaderboard-panel,.footer-note){display:none}
  body:is([data-game-state="starting"],[data-game-state="playing"],[data-game-state="paused"],[data-game-state="resuming"]){height:100svh;overflow:hidden}body:is([data-game-state="starting"],[data-game-state="playing"],[data-game-state="paused"],[data-game-state="resuming"]) .disco-shell{height:calc(100svh - 52px);min-height:0;padding:4px env(safe-area-inset-right) max(4px,env(safe-area-inset-bottom)) env(safe-area-inset-left);display:grid;grid-template-rows:minmax(0,1fr) 88px}
  body:is([data-game-state="starting"],[data-game-state="playing"],[data-game-state="paused"],[data-game-state="resuming"]) .game-frame{display:grid;grid-template-columns:1fr;grid-template-rows:84px minmax(0,1fr);border-inline:0;min-height:0}
  body:is([data-game-state="starting"],[data-game-state="playing"],[data-game-state="paused"],[data-game-state="resuming"]) .game-console{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));grid-template-rows:40px 44px;grid-row:1;padding:0;border:0;border-bottom:1px solid var(--line)}
  body:is([data-game-state="starting"],[data-game-state="playing"],[data-game-state="paused"],[data-game-state="resuming"]) :is(.score-panel,.record-panel,.time-panel){grid-row:1;padding:5px 8px;border:0;border-right:1px solid var(--line);min-width:0}.score-panel{grid-column:1}.record-panel{grid-column:2}.time-panel{grid-column:3}.pause-button{grid-column:1/-1;grid-row:2;min-height:44px;margin:0 6px 5px;padding:7px}.pause-button kbd{display:none}.control-hint{display:none}.score-panel>strong{font-size:18px}.combo-row{margin-top:0;font-size:9px}.combo-row b{font-size:18px}.record-panel .panel-label{display:block;white-space:nowrap;line-height:1.2;margin:0 0 3px;font-size:8px;letter-spacing:.08em}.record-panel>div{display:flex;align-items:baseline;justify-content:space-between;gap:3px;line-height:1.2}.record-panel strong{font-size:12px}.record-panel>div>span{font-size:8px;margin-left:3px}.time-panel .panel-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:8px;line-height:1.2;margin:0 0 3px}.time-row{font-size:10px;line-height:1.2}.progress{height:2px;margin-top:3px}
  body:is([data-game-state="starting"],[data-game-state="playing"],[data-game-state="paused"],[data-game-state="resuming"]) .score-panel{position:relative}.score-panel .panel-label,.combo-row>span{display:none}.score-panel>strong{font-size:16px;line-height:30px}.combo-row{position:absolute;right:8px;bottom:7px}.combo-row b{font-size:14px}
  body:is([data-game-state="starting"],[data-game-state="playing"],[data-game-state="paused"],[data-game-state="resuming"]) .stage{grid-row:2;height:auto;min-height:0}.mascot-stage{--mascot-centered:1;height:96px;bottom:auto}.dancer-status{top:78px}
  .game-frame:is([data-state="starting"],[data-state="playing"],[data-state="paused"],[data-state="resuming"]) .mascot-stage{height:100%;inset:0}
  .game-frame:is([data-state="starting"],[data-state="playing"],[data-state="paused"],[data-state="resuming"]) .dancer-status{top:auto;bottom:10px}
  .lane-board{--lane-gap:0px;--receptor-top:0;left:0;right:0;top:0;bottom:0;width:auto;border:0;background:rgba(10,12,29,.14)}.lane-receptors{left:0;right:0;top:0;height:56px;gap:0}.lane-receptors span{height:56px;aspect-ratio:auto;transition:none}.lane-receptors span.is-held{transform:none}.note-field{inset:56px 0 0}.dance-note{height:56px;aspect-ratio:auto;font-size:0;box-shadow:none}.judgment{top:64px;font-size:24px}
  .streak-banner{top:100px;left:50%;white-space:nowrap;transform:translateX(-50%) scale(.92);font-size:8px}.streak-banner.show{animation:streak-pop-mobile .58s cubic-bezier(.18,.8,.28,1)}
  body:is([data-game-state="starting"],[data-game-state="playing"],[data-game-state="paused"],[data-game-state="resuming"]) .touch-controls{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));grid-row:2;width:100%;height:88px;margin:0;gap:0;padding-inline:0}.touch-controls button{min-height:80px;padding:0;gap:0;transition:none}.touch-controls button small{display:none}.touch-controls button:is(:active,.is-held){background:var(--cream);color:var(--navy);transform:none;box-shadow:inset 0 0 0 3px var(--yellow)}
  .game-frame:is([data-state="paused"],[data-state="resuming"]) .pause-card{left:0;right:0;top:0;bottom:0;width:auto;padding:18px;background:rgba(10,12,29,.96);backdrop-filter:none;border:0}.pause-card h2{font-size:30px}.pause-card .start-button{min-height:48px;width:min(100%,280px);margin-top:14px;padding:12px}
}
@media (max-height:500px) and (orientation:landscape){
  .disco-header{height:48px;min-height:48px}.quiet-button{height:44px;min-height:44px}.disco-shell{padding-top:8px}.title-lockup{display:none}.track-options{grid-template-columns:repeat(3,1fr)}.track-options button{min-height:56px}.difficulty-options button{min-height:48px}.game-frame:is([data-state="ready"],[data-state="loading"],[data-state="error"]) .stage{height:auto}
  body:is([data-game-state="starting"],[data-game-state="playing"],[data-game-state="paused"],[data-game-state="resuming"]) .disco-shell{height:calc(100svh - 48px);grid-template-rows:minmax(0,1fr) 72px;padding-top:3px}
  body:is([data-game-state="starting"],[data-game-state="playing"],[data-game-state="paused"],[data-game-state="resuming"]) .game-frame{grid-template-rows:54px minmax(0,1fr)}
  body:is([data-game-state="starting"],[data-game-state="playing"],[data-game-state="paused"],[data-game-state="resuming"]) .game-console{grid-template-columns:1.15fr 1fr 1.15fr 64px;grid-template-rows:54px}.score-panel{grid-column:1}.record-panel{grid-column:2}.time-panel{grid-column:3}.pause-button{grid-column:4;grid-row:1;min-height:44px;margin:5px}
  .dancer-status{display:none}.lane-receptors{height:56px}.note-field{inset:56px 0 0}
  body:is([data-game-state="starting"],[data-game-state="playing"],[data-game-state="paused"],[data-game-state="resuming"]) .touch-controls{height:72px}.touch-controls button{min-height:72px}
}

@keyframes streak-pop-mobile{0%{opacity:0;transform:translateX(-50%) translateY(-12px) scale(.82)}38%{opacity:1;transform:translateX(-50%) translateY(0) scale(1.06)}72%,100%{opacity:1;transform:translateX(-50%) translateY(0) scale(1)}}

@media (max-width:360px){
  .results-explore{grid-template-columns:1fr}
  .score-panel>strong{line-height:20px}
  .combo-row{position:static;display:block;line-height:10px;margin:0}
  .combo-row b{font-size:10px;line-height:10px}
}

@media (max-width:840px) and (prefers-reduced-motion:reduce), (max-height:500px) and (orientation:landscape) and (prefers-reduced-motion:reduce){.streak-banner.show{transform:translateX(-50%)}}
@media (max-width:840px), (max-height:500px) and (orientation:landscape){body[data-reduced-motion="true"] .streak-banner.show{transform:translateX(-50%)}}
