:root{color-scheme:dark;--ink:#0a0e17;--cyan:#8df1ff;--yellow:#ffe272;--line:#5e718a;--paper:#e7f1f5}
*{box-sizing:border-box}body{margin:0;background:var(--ink);color:var(--paper);font-family:"Bahnschrift","Microsoft YaHei",sans-serif;overflow:hidden}button,a{-webkit-tap-highlight-color:transparent}button{font:inherit;color:inherit;cursor:pointer;touch-action:none;user-select:none}button:focus-visible,a:focus-visible{outline:2px solid var(--yellow);outline-offset:4px}main{padding:14px 28px;max-width:1500px;margin:auto}.topbar{display:flex;align-items:center;justify-content:space-between;height:44px;margin-bottom:14px}.wordmark{font-weight:900;font-size:21px;color:var(--paper);text-decoration:none;letter-spacing:1px;display:flex;align-items:center;gap:10px}.wordmark>span{background:var(--cyan);color:var(--ink);font-size:23px;padding:2px 9px;transform:skew(-9deg)}.wordmark small{font-size:10px;color:#8c9ba8;letter-spacing:2px;margin-left:12px}.topbar nav{display:flex;align-items:center;gap:20px;font-size:12px}.topbar nav a{color:#a5bac8;text-decoration:none}.prototype-tag{font-size:10px;padding:5px 9px;border:1px solid #4c6273;color:var(--cyan);letter-spacing:1px}
.stage{position:relative;margin:auto;width:min(100%,calc((100dvh - 108px)*16/9));aspect-ratio:16/9;background:#121725;border:1px solid #3c5263;overflow:hidden;box-shadow:0 25px 80px #0007}.stage canvas{width:100%;height:100%;display:block;outline:none;touch-action:none}.hud{position:absolute;left:18px;right:18px;top:12px;display:flex;gap:18px;align-items:center;pointer-events:none}.health{width:24%;min-width:120px}.health>span{display:flex;align-items:center;justify-content:space-between;font-weight:900;font-size:14px;text-shadow:0 2px 4px #000}.health b{font-size:11px}.life-track{height:8px;background:#060a11c9;border:1px solid #62747e;margin-top:6px;transform:skew(-12deg)}.life-track i{display:block;height:100%;width:100%;background:var(--cyan);transition:width .08s}.stage-info{flex:1;text-align:center;font-size:14px;font-weight:900}.stage-info small{display:block;color:#b2c4cc;font-size:10px;letter-spacing:2px;margin-top:3px}.mini-stats{display:flex;align-items:center;gap:7px;font-size:10px;color:#b2c4cc}.mini-stats b{font-size:18px;color:var(--yellow)}.mini-stats time{margin-left:12px;font-size:13px;font-variant-numeric:tabular-nums}.hud button{pointer-events:auto;min-width:44px;min-height:44px;border:1px solid #738c99;background:#07101bbe;font-size:18px}.hud button:hover{border-color:var(--cyan)}
#boss-hud{position:absolute;left:32%;right:21%;top:68px;text-shadow:0 2px 6px #000}#boss-hud b{font-size:12px}#boss-hud small{font-size:10px;color:var(--yellow);margin-left:12px}#boss-hud .life-track{height:6px}#boss-fill{background:#ff708b}.combo{position:absolute;right:14%;top:27%;display:flex;align-items:baseline;gap:7px;color:var(--yellow);text-shadow:3px 3px #0a0e17;transform:skew(-9deg)}.combo b{font-size:52px;font-weight:900}.combo span{font-size:14px;font-weight:900;letter-spacing:3px}#notice{position:absolute;left:50%;top:19%;transform:translateX(-50%);font-size:15px;font-weight:900;color:var(--yellow);white-space:nowrap;text-shadow:0 3px 4px #000}
.controls{position:absolute;inset:0;pointer-events:none}#joystick{position:absolute;bottom:18px;left:18px;width:112px;height:112px;border-radius:50%;border:1px solid #94cad379;background:radial-gradient(circle,#07192670 35%,#87efff10 36%,#87efff10 60%,#07192677 61%);pointer-events:auto;touch-action:none}#joystick::before,#joystick::after{content:'';position:absolute;background:#9cdeeb44;pointer-events:none}#joystick::before{width:1px;height:80%;left:50%;top:10%}#joystick::after{height:1px;width:80%;top:50%;left:10%}#joystick .knob{position:absolute;width:44px;height:44px;left:calc(50% - 22px);top:calc(50% - 22px);border-radius:50%;border:2px solid #a3edf4;background:#243c4fe6;box-shadow:0 0 18px #8bdfff40;pointer-events:none}#joystick small{position:absolute;bottom:4px;width:100%;text-align:center;font-size:8px;color:#b4dce8;letter-spacing:2px;pointer-events:none}
.attack-pad{position:absolute;right:16px;bottom:18px;display:grid;grid-template-columns:repeat(3,66px);grid-template-rows:repeat(2,60px);gap:7px;align-items:center;pointer-events:auto}.attack-pad button{position:relative;width:66px;height:60px;border:1px solid #9dcee8aa;background:#0f1e32dc;clip-path:polygon(10% 0,100% 0,100% 84%,86% 100%,0 100%,0 14%);box-shadow:inset 0 0 20px #83d5ff1a}.attack-pad b{display:block;font-size:12px}.attack-pad small{display:block;font-size:8px;color:#b3d1db;line-height:1.5}.attack-pad em{position:absolute;inset:0;background:#06101bdc;color:var(--yellow);display:grid;place-items:center;font-style:normal;font-size:17px;font-weight:900}.attack-pad em:empty{display:none}.attack-pad .light-button{grid-column:2/4;width:100%;background:#ffe272ed;color:#13202a;border:2px solid #fff0b1;clip-path:polygon(5% 0,100% 0,100% 84%,94% 100%,0 100%,0 14%)}.light-button b{font-size:18px}.light-button small{color:#37413b}.pressed{filter:brightness(1.4)}.attack-pad button:disabled{opacity:.55;cursor:default}.attack-pad button:disabled:has(em:not(:empty)){opacity:.9}
.overlay{position:absolute;inset:0;display:grid;place-items:center;background:linear-gradient(110deg,#091120dd,#0911207a);z-index:5}.overlay[hidden],[hidden]{display:none!important}#panel{width:min(460px,86%);padding:28px 32px;background:#0a101bec;border-left:3px solid var(--cyan);box-shadow:20px 20px 0 #05101a35;max-height:95%;overflow:auto}.eyebrow{font-size:10px;letter-spacing:3px;color:var(--yellow);font-weight:900}#panel h1,#panel h2{font-size:42px;line-height:1.16;letter-spacing:-2px;margin:16px 0;font-weight:900}#panel h1 span,#panel h2 span{color:var(--cyan)}#panel p:not(.eyebrow){font-size:13px;color:#c0d1dc;line-height:1.9}.instructions{font-size:10px;color:#8eabbc;line-height:1.8;border-top:1px solid #425363;padding-top:12px}.primary{display:flex;justify-content:space-between;width:100%;background:var(--cyan);border:0;color:#101823;font-weight:900;min-height:48px;align-items:center;padding:10px 20px;margin-top:18px;font-size:15px;transform:skew(-3deg)}.primary:hover{background:var(--yellow)}.secondary{width:100%;min-height:44px;background:transparent;border:1px solid #456374;margin-top:10px;color:#bdd4df}.prototype-note{display:block;margin-top:13px;color:#7794a3;font-size:9px;letter-spacing:1px}.result-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;padding:10px 0}.result-stats b{font-size:22px;display:block;color:var(--yellow)}.result-stats span{font-size:10px;color:#8aabba}.footnote{display:flex;justify-content:space-between;max-width:1160px;margin:12px auto 0;font-size:10px;letter-spacing:1px;color:#718f9e}
#rotate-hint{position:fixed;inset:0;z-index:20;background:#09101af5;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:30px;text-align:center}#rotate-hint>span{font-size:75px;color:var(--cyan)}#rotate-hint h2{font-size:25px}#rotate-hint p{font-size:13px;line-height:1.8;color:#b0c6d1}
@media(max-height:500px){main{padding:0}.topbar,.footnote{display:none}.stage{width:min(100vw,calc(100dvh*16/9));border:0}.hud{left:12px;right:10px;top:7px;gap:10px}.hud button{min-width:44px;min-height:44px}.health>span,.stage-info{font-size:11px}.health b{font-size:9px}.stage-info small{font-size:8px}.mini-stats time{margin-left:2px;font-size:11px}#boss-hud{top:54px;left:28%;right:22%}#boss-hud small{font-size:8px;margin-left:4px}.attack-pad{grid-template-columns:repeat(3,52px);grid-template-rows:repeat(2,48px);gap:5px;right:10px;bottom:10px}.attack-pad button{width:52px;height:48px}.attack-pad b{font-size:10px}.light-button b{font-size:15px}#joystick{width:94px;height:94px;left:12px;bottom:10px}.combo b{font-size:35px}.combo span{font-size:10px}#notice{font-size:12px;top:24%}#panel{padding:15px 22px;width:min(410px,72%)}#panel h1,#panel h2{font-size:31px;margin:10px 0}#panel p:not(.eyebrow){font-size:11px;margin:8px 0;line-height:1.6}.eyebrow{margin:5px 0;font-size:9px}.instructions{font-size:9px;padding-top:7px}.primary{margin-top:10px}.prototype-note{font-size:8px;margin-top:7px}}
@media(prefers-reduced-motion:reduce){*{transition:none!important}}
#action-state{display:block;font-size:10px;color:#b2c4cc;margin-top:4px}#boss-hp{font-size:10px;color:#e7f1f5;margin-left:8px}#boss-hud small{display:block;margin:3px 0 0}@media(max-height:500px){#action-state,#boss-hp{font-size:8px}#boss-hud small{font-size:8px}}
.route{display:flex;justify-content:center;align-items:center;gap:5px;margin-top:5px}.route span{display:grid;place-items:center;width:24px;height:17px;border:1px solid #7898ab55;color:#8b9fae;font-size:9px;background:#08121ccc}.route span[aria-current]{color:var(--cyan);border-color:var(--cyan);background:#153442dc}.route span.done{color:#a4ffd0;border-color:#8ce4b5;background:#1b392adc}.route i{width:17px;height:1px;background:#839dac77}.route-preview{display:flex;align-items:center;justify-content:space-between;font-size:10px;color:#c9e2ea;background:#17313d55;border:1px solid #34505d;padding:8px 10px;margin-bottom:10px}.route-preview i{font-style:normal;color:var(--yellow)}
.attack-pad{grid-template-columns:repeat(3,76px);grid-template-rows:repeat(2,78px);gap:7px}.attack-pad button{width:76px;height:78px;padding:4px;background:#101e2bee;border-width:2px}.attack-pad img{display:block;width:32px;height:32px;margin:0 auto 1px;pointer-events:none}.attack-pad b{font-size:10px;line-height:1.3;white-space:nowrap}.attack-pad small{font-size:8px;line-height:1.4}.attack-pad kbd{position:absolute;left:7px;top:5px;font:900 9px Bahnschrift,sans-serif;color:#bbdbe4}.attack-pad [data-action="key"]{border-color:#76e9ff}.attack-pad [data-action="rage"]{border-color:#a4ffd0}.attack-pad [data-action="pan"]{border-color:#ffdb82}.attack-pad .light-button{display:flex;justify-content:center;align-items:center;gap:10px}.light-button img{width:38px;height:38px;margin:0}.light-button b{font-size:19px}.light-button small{color:#37413b}.attack-pad em{inset:0;gap:2px;background:#07101cd9;font-size:20px}.route-preview span{white-space:nowrap}
@media(max-height:500px){.attack-pad{grid-template-columns:repeat(3,58px);grid-template-rows:repeat(2,60px);gap:5px;bottom:10px}.attack-pad button{width:58px;height:60px;padding:2px}.attack-pad img{width:23px;height:23px;margin-bottom:0}.attack-pad b{font-size:9px}.attack-pad small{font-size:7px}.attack-pad kbd{font-size:8px;left:4px;top:3px}.attack-pad .light-button img{width:29px;height:29px}.light-button b{font-size:15px}.attack-pad em{font-size:17px}.route{gap:3px;margin-top:3px}.route span{width:20px;height:14px;font-size:8px}.route i{width:10px}#boss-hud{top:70px}.route-preview{font-size:9px;padding:5px 8px;margin-bottom:7px}#panel h1,#panel h2{font-size:29px}}
/* Meme rules stay legible even with spectator text turned off. */
.hud #crowd-mode{font-size:10px;min-width:70px;white-space:nowrap}
#meme-cue{position:absolute;top:26%;left:50%;transform:translateX(-50%);max-width:76%;padding:5px 10px;background:#08151deb;border:1px solid #8df1ff80;color:#c5ffdd;font-size:13px;font-weight:900;text-align:center;pointer-events:none;text-shadow:0 2px 3px #000}
#meme-cue:empty{display:none}
.attack-pad .return-ready{border-color:#a4ffd0;box-shadow:inset 0 0 20px #a4ffd066}
.attack-pad .return-ready em{background:#133428e8;color:#c5ffdd;font-size:17px}
#panel .moment-summary{color:#a4ffd0;font-size:12px;line-height:1.5;margin:6px 0}
#moment-preview{padding-top:10px}#moment-image{display:block;width:100%;max-width:300px;height:auto;margin:0 auto;border:1px solid #456374;user-select:auto;touch-action:auto}
#save-card{display:flex;align-items:center;justify-content:center;text-decoration:none;font-size:12px;touch-action:manipulation}
.result-actions{display:grid;grid-template-columns:1fr 1fr;gap:8px}
@media(max-height:500px){.hud #crowd-mode{min-width:62px;font-size:9px}.hud{gap:7px}#meme-cue{top:28%;font-size:10px;padding:3px 7px;max-width:78%}.attack-pad .return-ready em{font-size:15px}#panel.result-panel h2{font-size:25px;margin:6px 0}#panel.result-panel .result-stats{padding:5px 0}#panel.result-panel .result-stats b{font-size:19px}#panel .moment-summary{font-size:10px;margin:4px 0}.result-actions .secondary{font-size:11px;margin-top:8px}}
/* Cover and menu: one recognizable action, one primary entry. */
.overlay[data-phase="ready"]{background:#081328}
#panel.ready-panel{position:relative;width:100%;height:100%;max-height:none;border:0;padding:0;background:#081328;box-shadow:none;overflow:hidden}
.cover-art{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;pointer-events:none}
.menu-copy{position:absolute;left:5%;top:10%;width:32%;max-width:380px;z-index:1}
#panel.ready-panel .menu-tag{color:var(--cyan);font-size:11px;font-weight:900;letter-spacing:2px;margin:0 0 12px}
#panel.ready-panel h1{margin:0;width:100%;font-size:40px;line-height:1}
.ready-panel h1 img{display:block;width:100%;height:auto;filter:drop-shadow(0 4px 3px #0008)}
#panel.ready-panel .menu-punchline{font-size:clamp(28px,4.1vw,60px);font-weight:900;line-height:1.1;color:#fff4c1;letter-spacing:-2px;margin:15px 0 7px;text-shadow:3px 4px #0a1427;transform:rotate(-3deg)}
.menu-punchline span{color:var(--yellow)}
#panel.ready-panel .menu-subtitle{font-size:14px;color:#d7e5ef;font-weight:700;margin:12px 0 18px;line-height:1.4}
.ready-panel .primary{background:var(--yellow);border:2px solid #fff4be;box-shadow:5px 5px 0 #060e20;font-size:23px;min-height:56px;margin-top:0}
.ready-panel .primary:disabled{background:#89968d;cursor:wait}
#ready-art-status{display:block;margin-top:10px;font-size:11px;color:#a9c1d5;min-height:16px}
.how-to{position:relative;margin-top:12px;font-size:12px;color:#dce9ef}
.how-to summary{cursor:pointer;display:flex;justify-content:space-between;list-style:none;padding:8px 0;border-top:1px solid #66809977}
.how-to summary::-webkit-details-marker{display:none}
.how-to[open] summary span{transform:rotate(45deg)}
.how-to-body{padding:6px 12px;background:#081425f5;border:1px solid #52748b;box-shadow:3px 3px 0 #0004}
#panel.ready-panel .how-to-body p{font-size:11px;line-height:1.65;margin:4px 0}
.touch-help{display:none}.touch-input .touch-help{display:block}.touch-input .desktop-help{display:none}
.cover-caption{position:absolute;right:3%;top:6%;font-weight:900;font-size:14px;color:#102039;background:#fff1b1;border:2px solid #0a1427;padding:8px 13px;transform:rotate(5deg);box-shadow:4px 4px 0 #0006}
#settings-controls{display:none}.overlay[data-phase="paused"]{display:flex;justify-content:center;gap:16px;padding:14px}.overlay[data-phase="paused"] #settings-controls{display:block;width:200px;padding:20px;background:#101d2af5;border-top:3px solid var(--yellow)}
#settings-controls h3{margin:0 0 14px;font-size:18px;color:var(--yellow)}
#settings-controls button{display:block;width:100%;min-height:44px;background:#172d40;border:1px solid #7397aa;font-size:13px;margin-top:10px}
#settings-controls small{display:block;font-size:10px;color:#9fbbcc;margin-top:12px}
.route{display:none}.hud{gap:12px}.stage-info small{letter-spacing:1px}.hud #settings{font-size:20px}
.attack-pad em{inset:3px 3px auto auto;min-width:25px;height:20px;padding:1px 4px;font-size:12px;border-radius:3px;background:#081423;pointer-events:none}
.attack-pad .cooling img{opacity:.5}.attack-pad .cooling::after{content:'';position:absolute;left:0;bottom:0;height:3px;width:var(--cooldown);background:var(--yellow);pointer-events:none}
.attack-pad .return-ready em{font-size:10px;background:#153e2d;color:#c5ffdd}
.touch-input .attack-pad kbd,.touch-input .attack-pad .key-hint{display:none}
.touch-input .attack-pad img{width:39px;height:39px;margin:0 auto 2px}.touch-input .attack-pad b{font-size:13px}
.touch-input .attack-pad .light-button img{width:42px;height:42px;margin:0}.touch-input .light-button b{font-size:19px}
.earned-title{display:inline-block;padding:5px 10px;border:1px solid #ffe27280;background:#ffe27212;color:var(--yellow);font-weight:900;font-size:12px;transform:rotate(-2deg)}
@media(max-height:500px){
 .menu-copy{top:7%;left:4%;width:31%}#panel.ready-panel .menu-tag{font-size:9px;margin-bottom:7px;letter-spacing:1px}
 #panel.ready-panel .menu-punchline{font-size:33px;margin:9px 0 5px}#panel.ready-panel .menu-subtitle{font-size:11px;margin:8px 0 11px}
 .ready-panel .primary{font-size:19px;min-height:45px;padding:5px 15px;margin-top:0}#ready-art-status{font-size:9px;margin-top:7px;min-height:12px}
 .how-to{font-size:11px;margin-top:7px}.how-to summary{padding:6px 0}.how-to-body{position:fixed;left:36%;top:19%;width:35%;z-index:2}#panel.ready-panel .how-to-body p{font-size:10px;line-height:1.45}.cover-caption{font-size:10px;padding:5px 8px;top:5%}
 .overlay[data-phase="paused"]{gap:10px}.overlay[data-phase="paused"] #panel{width:46%;max-height:94%}.overlay[data-phase="paused"] #settings-controls{width:180px;padding:15px}
 #boss-hud{top:55px;left:28%;right:22%}.stage-info{font-size:11px}.health{width:27%}.mini-stats time{display:none}
 .touch-input .attack-pad img{width:29px;height:29px;margin-bottom:1px}.touch-input .attack-pad b{font-size:11px}.touch-input .attack-pad .light-button img{width:32px;height:32px}.touch-input .light-button b{font-size:16px}
 .attack-pad em{height:16px;min-width:22px;font-size:10px;right:2px;top:2px;bottom:auto;padding:1px 2px}.attack-pad .return-ready em{font-size:9px}
}
@media(max-height:330px){.menu-copy{top:5%}#panel.ready-panel .menu-tag{display:none}#panel.ready-panel .menu-punchline{font-size:28px;margin-top:7px}.how-to-body{position:fixed;left:36%;top:15%;width:38%;z-index:2}}
#tutorial{position:absolute;left:50%;top:19%;transform:translateX(-50%);padding:7px 12px;border-left:3px solid var(--yellow);background:#081423e8;font-size:12px;color:#fff1b1;pointer-events:none;white-space:nowrap}#tutorial:empty{display:none}
@media(max-height:500px){#tutorial{top:20%;font-size:10px;padding:5px 8px}.menu-copy{max-height:94%;overflow:visible}}
