:root{--ps-ink:#05030c;--ps-teal:#2fffc3;--ps-cyan:#35f0ff;--ps-violet:#b45cff;--ps-gold:#f7c948;--ps-magenta:#ff4fd8;--ps-red:#ff3b6b;--ps-text:#e9f1ff;--ps-dim:#8fa0c8}*{box-sizing:border-box}html,body{background:var(--ps-ink);height:100%;color:var(--ps-text);-webkit-font-smoothing:none;-webkit-user-select:none;user-select:none;margin:0;padding:0;font-family:Consolas,Lucida Console,Courier New,monospace;overflow:hidden}#game{background:radial-gradient(circle at 50% 40%,#3c1e7859,#0000 62%),radial-gradient(circle at 18% 88%,#00786e29,#0000 55%),#05030c;place-items:center;display:grid;position:fixed;inset:0}#stage{transform-origin:50%;background:#04020a;width:960px;height:540px;position:relative;overflow:hidden;box-shadow:0 0 0 2px #2fffc338,0 0 46px #7846ff47,0 24px 80px #000000a6}#game-canvas{width:100%;height:100%;image-rendering:pixelated;image-rendering:crisp-edges;touch-action:none;cursor:crosshair;background:#04020a;display:block;position:absolute;inset:0}#ui{pointer-events:none;z-index:2;color:var(--ps-text);font-family:Consolas,Lucida Console,Courier New,monospace;position:absolute;inset:0}#ui button{font:inherit;color:var(--ps-cyan);cursor:pointer;pointer-events:auto;letter-spacing:2px;text-transform:uppercase;background:#080614e6;border:2px solid #2fffc38c;padding:8px 18px;font-size:14px;transition:background .12s,box-shadow .12s,transform 80ms}#ui button:hover,#ui button:focus-visible{background:#2fffc329;outline:none;transform:translateY(-1px);box-shadow:0 0 18px #2fffc373}#ui button:active{transform:translateY(1px)}#ui button.primary{border-color:var(--ps-gold);color:var(--ps-gold);padding:12px 34px;font-size:18px;box-shadow:0 0 22px #f7c94842,inset 0 0 18px #f7c94814}#ui button.primary:hover{background:#f7c9482e;box-shadow:0 0 30px #f7c94880}#ui .hud,#ui .screen{display:none}#ui[data-mode=playing] .hud,#ui[data-mode=paused] .hud{display:block}#ui[data-mode=menu] .screen.menu,#ui[data-mode=paused] .screen.pause,#ui[data-mode=gameover] .screen.gameover,#ui[data-mode=victory] .screen.victory{display:flex}.hud{pointer-events:none;text-shadow:0 2px #000000bf;position:absolute;inset:0}.hud-left{flex-direction:column;gap:5px;display:flex;position:absolute;top:14px;left:18px}.hearts{gap:3px;font-size:23px;line-height:1;display:flex}.heart{color:#ff506e29;transition:color .12s,text-shadow .12s}.heart.on{color:#ff3b6b;text-shadow:0 0 10px #ff3b6bcc}.scoreline{align-items:baseline;gap:10px;display:flex}.scoreline .score{letter-spacing:1px;color:var(--ps-text);font-size:23px;font-weight:700}.scoreline .best{color:var(--ps-dim);letter-spacing:1px;font-size:11px}.combo{letter-spacing:1px;color:var(--ps-gold);opacity:0;font-size:12px;transition:opacity .15s,transform .15s;transform:translateY(3px)}.combo.on{opacity:1;transform:translateY(0)}.buffs{gap:6px;min-height:16px;display:flex}.chip{letter-spacing:1px;border:1px solid;border-radius:2px;padding:2px 6px;font-size:10px;display:none}.chip.on{display:inline-block}.chip.shield{color:var(--ps-cyan);box-shadow:0 0 10px #35f0ff4d}.chip.triple{color:var(--ps-gold);box-shadow:0 0 10px #f7c9484d}.hud-right{text-align:right;flex-direction:column;gap:2px;display:flex;position:absolute;top:14px;right:18px}.hud-right .dim{letter-spacing:2px;color:var(--ps-cyan);font-size:15px;font-weight:700}.hud-right .dimname{letter-spacing:2px;color:var(--ps-text);opacity:.8;font-size:11px}.hud-right .seed{letter-spacing:1px;color:var(--ps-dim);margin-top:2px;font-size:9px}.hud-right .timer{letter-spacing:2px;color:var(--ps-text);font-size:12px}.boss{flex-direction:column;align-items:center;gap:3px;width:360px;display:none;position:absolute;top:14px;left:50%;transform:translate(-50%)}.boss.on{display:flex}.boss-name{letter-spacing:4px;color:var(--ps-red);text-shadow:0 0 10px #ff3b6bb3;font-size:12px}.boss-bar{background:#0a0410cc;border:1px solid #ff3b6bcc;width:100%;height:9px;box-shadow:0 0 14px #ff3b6b4d}.boss-bar i{background:linear-gradient(90deg,#ff3b6b,#ffb03a);width:100%;height:100%;transition:width .12s linear;display:block}.wormhole{background:#080412b8;border:1px solid #b45cff80;border-radius:3px;flex-direction:column;align-items:center;gap:1px;padding:8px 22px;display:none;position:absolute;top:72px;left:50%;transform:translate(-50%)}.wormhole.on{display:flex}.wormhole .wh-title{letter-spacing:4px;color:var(--ps-dim);font-size:10px}.wormhole .wh-time{letter-spacing:3px;color:var(--ps-violet);font-size:26px}.wormhole .wh-warn{letter-spacing:2px;color:var(--ps-red);font-size:10px;display:none}.wormhole.warning{border-color:#ff3b6be6;animation:.7s infinite alternate psPulse}.wormhole.warning .wh-time{color:var(--ps-red)}.wormhole.warning .wh-warn{display:block}.demo-badge{letter-spacing:4px;color:var(--ps-magenta);background:#140414b3;border:1px solid #ff4fd899;padding:2px 8px;font-size:10px;display:none;position:absolute;top:14px;right:50%;transform:translate(50%)}.demo-badge.on{display:block}.hud-device{letter-spacing:2px;color:var(--ps-dim);font-size:10px;position:absolute;bottom:22px;left:18px}.mute-btn{position:absolute;bottom:18px;right:18px}.mute-btn button{letter-spacing:2px;color:var(--ps-dim);border-width:1px;border-color:#8fa0c880;padding:4px 9px;font-size:10px}.mute-btn button.muted{color:var(--ps-red);border-color:#ff3b6b80}.hud-hint{letter-spacing:1px;color:#e9f1ff66;white-space:nowrap;font-size:9px;position:absolute;bottom:14px;left:50%;transform:translate(-50%)}.hurt{opacity:0;background:radial-gradient(circle,#ff002800 34%,#ff00288c 100%);transition:opacity .1s linear;position:absolute;inset:0}.screen{pointer-events:none;flex-direction:column;justify-content:center;align-items:center;position:absolute;inset:0}.screen.menu{background:linear-gradient(#05030c8c,#05030c00 32% 62%,#05030cb8);justify-content:space-between;padding:26px 40px 18px}.menu-head{text-align:center}.logo{letter-spacing:12px;color:var(--ps-text);background:linear-gradient(180deg, #fff 8%, var(--ps-cyan) 46%, var(--ps-violet) 100%);-webkit-text-fill-color:transparent;filter:drop-shadow(0 0 18px #35f0ff73)drop-shadow(0 4px #0009);-webkit-background-clip:text;background-clip:text;margin:0;font-size:58px;font-weight:900;line-height:1;animation:3.2s ease-in-out infinite alternate psLogoGlow}.tagline{letter-spacing:6px;color:var(--ps-gold);text-shadow:0 0 14px #f7c94866;margin:8px 0 0;font-size:13px}.menu-mid{flex-direction:column;align-items:center;gap:16px;margin-top:150px;display:flex}.menu-meta{letter-spacing:2px;color:var(--ps-dim);gap:22px;font-size:10px;display:flex}.menu-meta b{color:var(--ps-text)}.controls{letter-spacing:1px;color:var(--ps-dim);background:#05030c8c;border:1px solid #2fffc32e;grid-template-columns:repeat(3,auto);gap:4px 26px;padding:10px 18px;font-size:10px;display:grid}.controls b{color:var(--ps-cyan)}.footer{letter-spacing:5px;color:#e9f1ff80;text-align:center;font-size:10px}.panel{pointer-events:none;text-align:center;background:#06040eed;border:2px solid #2fffc38c;min-width:460px;max-width:680px;padding:26px 34px;box-shadow:0 0 44px #2fffc32e,inset 0 0 60px #35f0ff0a}.screen.pause .panel,.screen.gameover .panel,.screen.victory .panel{background:#06040eed}.panel h2{letter-spacing:8px;color:var(--ps-cyan);text-shadow:0 0 18px #35f0ff80;margin:0 0 12px;font-size:32px}.panel h2.gold{color:var(--ps-gold);text-shadow:0 0 20px #f7c94899}.panel h2.danger{color:var(--ps-red);text-shadow:0 0 20px #ff3b6b99}.reason{letter-spacing:3px;color:var(--ps-red);margin:0 0 16px;font-size:12px}.catline{letter-spacing:1px;color:var(--ps-teal);min-height:18px;margin:0 0 18px;font-size:12px;line-height:1.5}.btn-row{justify-content:center;gap:14px;margin-top:18px;display:flex}.hint{letter-spacing:2px;color:var(--ps-dim);margin-top:14px;font-size:9px}.stats{text-align:left;grid-template-columns:1fr 1fr;gap:4px 34px;max-width:480px;margin:8px auto 0;display:grid}.stats .stat{letter-spacing:1px;color:var(--ps-dim);border-bottom:1px dotted #8fa0c840;justify-content:space-between;gap:18px;padding:3px 0;font-size:11px;display:flex}.stats .stat b{color:var(--ps-text);font-weight:400}.banner{text-align:center;opacity:0;pointer-events:none;--banner-color:var(--ps-cyan);position:absolute;top:34%;left:50%;transform:translate(-50%,-50%)scale(.9)}.banner.show{animation:2.2s forwards psBannerPop}.banner-title{letter-spacing:8px;color:var(--banner-color);text-shadow:0 0 26px var(--banner-color), 0 4px 0 #0009;font-size:42px;font-weight:900}.banner-sub{letter-spacing:4px;color:var(--ps-text);opacity:.9;margin-top:6px;font-size:13px}.toast{letter-spacing:2px;color:var(--toast-color,var(--ps-teal));border-left:2px solid var(--toast-color,var(--ps-teal));opacity:0;white-space:nowrap;background:#05030cc7;padding:5px 12px;font-size:11px;transition:opacity .2s,transform .2s;position:absolute;bottom:62px;left:50%;transform:translate(-50%)translateY(6px)}.toast.show{opacity:1;transform:translate(-50%)translateY(0)}@keyframes psBannerPop{0%{opacity:0;transform:translate(-50%,-50%)scale(.82)}10%{opacity:1;transform:translate(-50%,-50%)scale(1.03)}18%{transform:translate(-50%,-50%)scale(1)}78%{opacity:1}to{opacity:0;transform:translate(-50%,-50%)scale(1)}}@keyframes psLogoGlow{0%{filter:drop-shadow(0 0 10px #35f0ff59)drop-shadow(0 4px #0009)}to{filter:drop-shadow(0 0 24px #b45cff99)drop-shadow(0 4px #0009)}}@keyframes psPulse{0%{box-shadow:0 0 #ff3b6b00}to{box-shadow:0 0 26px #ff3b6ba6}}
