:root{--bg:#07070b;--panel:#0c0c10c7;--panel-solid:#111116;--line:#d8c49659;--tan:#d8c496;--tan-dim:#9c8c6a;--yellow:#f0b81c;--red:#ff3b30;--health:#e8e2d0;--shield:#38c8ff;--stamina:#f0b81c;--poison:#b95cff;--cyan:#00e5ff;--magenta:#ff2bd6;--green:#4f8;--text:#ece6d8;--muted:#9a9486;--font:Bahnschrift, "DIN Alternate", "Segoe UI", "Arial Narrow", Arial, sans-serif}*{box-sizing:border-box}html,body{background:var(--bg);height:100%;color:var(--text);font-family:var(--font);-webkit-user-select:none;user-select:none;margin:0;overflow:hidden}#app{position:fixed;inset:0}#game-root{position:absolute;inset:0}#game-root canvas{display:block}.hidden{display:none!important}#hud{pointer-events:none;position:absolute;inset:0}#hud.off{display:none}.hud-panel{border:1px solid var(--line);border-left:3px solid var(--yellow);background:linear-gradient(#0e0e12b8,#08080a9e);padding:8px 12px;box-shadow:0 0 18px #00000080}#objective{max-width:460px;position:absolute;top:18px;left:18px}#objective .stage{letter-spacing:3px;color:var(--tan-dim);text-transform:uppercase;font-size:12px}#objective .text{color:var(--text);margin-top:3px;font-size:17px;line-height:1.25}#objective .dist{color:var(--yellow);letter-spacing:1px;margin-top:2px;font-size:12px}#objective.flash{animation:1.2s ease-out objflash}@keyframes objflash{0%{background:#f0b81c59;border-left-color:#fff}to{}}#vitals{width:340px;position:absolute;bottom:18px;left:18px}.bar{background:#ffffff14;border:1px solid #ffffff26;height:16px;margin-top:6px;position:relative;overflow:hidden}.bar .fill{transition:width .12s linear;position:absolute;top:0;bottom:0;left:0}.bar .lag{background:#ff463299;transition:width .6s ease-out .25s;position:absolute;top:0;bottom:0;left:0}.bar .label{color:#111;mix-blend-mode:normal;font-size:13px;font-weight:700;position:absolute;top:-1px;right:6px}#health .fill{background:linear-gradient(90deg, #c8bfa8, var(--health))}#health.low .fill{background:linear-gradient(90deg,#a01810,#ff4030);animation:.8s infinite alternate lowhp}@keyframes lowhp{0%{opacity:.75}to{opacity:1}}#health.poisoned .fill{background:linear-gradient(90deg, #6a2aa0, var(--poison))}#shield{height:7px;margin-top:3px}#shield .fill{background:linear-gradient(90deg, #1a7ab0, var(--shield));box-shadow:0 0 8px var(--shield)}#stamina{height:6px;margin-top:3px}#stamina .fill{background:var(--stamina)}.vitals-head{letter-spacing:2px;color:var(--tan-dim);justify-content:space-between;font-size:12px;display:flex}#status-icons{gap:6px;min-height:30px;margin-top:8px;display:flex}.status{background:#0000008c;border:1px solid;align-items:center;gap:6px;padding:3px 8px;font-size:13px;display:flex}.status svg{width:18px;height:18px}.status.poison{color:var(--poison);border-color:var(--poison);animation:1s infinite pulse}.status.resist{color:var(--green);border-color:var(--green)}.status.shieldst{color:var(--shield);border-color:var(--shield)}@keyframes pulse{0%,to{box-shadow:0 0 #b95cff00}50%{box-shadow:0 0 12px #b95cffcc}}#weapon-panel{text-align:right;width:360px;position:absolute;bottom:18px;right:18px}#weapon-panel .wname{letter-spacing:2px;color:var(--tan);text-transform:uppercase;font-size:14px}#weapon-panel .ammo{margin-top:2px;font-size:40px;font-weight:700;line-height:1}#weapon-panel .ammo small{color:var(--muted);font-size:18px;font-weight:400}#weapon-panel .ammo.empty{color:var(--red)}#weapon-panel .wicon{float:left;opacity:.95;height:44px}#weapon-panel .wicon svg{width:120px;height:44px}#reload-bar{background:#ffffff1a;height:3px;margin-top:4px}#reload-bar .fill{background:var(--yellow);width:0;height:100%}#slots{justify-content:flex-end;gap:4px;margin-top:8px;display:flex}.slot{width:38px;height:30px;color:var(--muted);background:#00000080;border:1px solid #ffffff26;font-size:10px;position:relative}.slot span{position:absolute;top:1px;left:3px}.slot svg{opacity:.8;width:28px;height:16px;position:absolute;bottom:2px;right:2px}.slot.owned{color:var(--text);border-color:#d8c49680}.slot.locked{opacity:.3}.slot.active{border-color:var(--yellow);background:#f0b81c2e;box-shadow:0 0 10px #f0b81c99}#consumables{justify-content:flex-end;gap:6px;margin-top:8px;display:flex}.cons{background:#00000080;border:1px solid #ffffff26;align-items:center;gap:5px;padding:3px 7px;font-size:14px;display:flex}.cons kbd{font-family:var(--font);color:#111;background:var(--tan);border-radius:2px;padding:0 4px;font-size:11px}.cons svg{width:18px;height:18px}.cons.zero{opacity:.4}#crosshair{width:64px;height:64px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}#crosshair svg{width:64px;height:64px;overflow:visible}#crosshair.enemy svg *{fill:none;stroke:#ff5040!important}#hitmarker{opacity:0;width:36px;height:36px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}#hitmarker.show{animation:.28s ease-out hit}#hitmarker.weak svg *{stroke:var(--yellow)!important}#hitmarker.armor svg *{stroke:#8a9aa8!important}#hitmarker.kill svg *{stroke:#ff3030!important}@keyframes hit{0%{opacity:1;transform:translate(-50%,-50%)scale(1.3)}to{opacity:0;transform:translate(-50%,-50%)scale(1)}}#hitlabel{letter-spacing:2px;opacity:0;font-size:12px;position:absolute;top:calc(50% + 26px);left:50%;transform:translate(-50%)}#hitlabel.show{animation:.7s ease-out fadeout}@keyframes fadeout{0%{opacity:1}to{opacity:0}}#prompt{border:1px solid var(--line);white-space:nowrap;background:#0009;padding:6px 14px;font-size:16px;position:absolute;top:calc(50% + 70px);left:50%;transform:translate(-50%)}#prompt b{color:#111;background:var(--yellow);margin-right:6px;padding:0 6px}#hint{text-align:center;border-left:3px solid var(--cyan);max-width:640px;padding:10px 16px;font-size:16px;position:absolute;bottom:150px;left:50%;transform:translate(-50%)}#hint.show{animation:.4s ease-out hintin}@keyframes hintin{0%{opacity:0;transform:translate(-50%,10px)}to{opacity:1;transform:translate(-50%)}}#notes{flex-direction:column;align-items:flex-end;gap:6px;width:380px;display:flex;position:absolute;top:18px;right:18px}.note{border-right:3px solid var(--tan);text-align:right;background:#000000a8;max-width:380px;padding:6px 12px;font-size:14px;animation:.25s ease-out notein}.note.pickup{border-right-color:var(--green)}.note.warn{border-right-color:var(--red);color:#ffd0c8}.note.unlock{border-right-color:var(--yellow);color:var(--yellow);font-size:16px}.note.checkpoint{border-right-color:var(--cyan);color:var(--cyan)}.note.out{opacity:0;transition:opacity .5s}@keyframes notein{0%{opacity:0;transform:translate(20px)}to{opacity:1;transform:none}}#bossbar{text-align:center;width:min(560px,60vw);position:absolute;top:18px;left:50%;transform:translate(-50%)}@media (max-width:1280px){#bossbar{width:min(560px,80vw);top:120px}}#bossbar .bname{letter-spacing:4px;color:#ffd8c8;text-shadow:0 0 8px #ff3c28cc;font-size:18px}#bossbar .bphase{letter-spacing:3px;color:var(--yellow);min-height:16px;font-size:12px}#bossbar .bar{border-color:#ff503c99;height:12px}#bossbar .fill{background:linear-gradient(90deg,#6a0a08,#ff3a20);box-shadow:0 0 10px #ff3a20}#bossbar .marks{position:absolute;inset:0}#bossbar .marks i{background:#ffffffb3;width:2px;position:absolute;top:0;bottom:0}#waypoint{text-align:center;color:var(--yellow);text-shadow:0 0 4px #000;font-size:12px;position:absolute;top:0;left:0;transform:translate(-50%,-50%)}#waypoint .diamond{border:2px solid var(--yellow);background:#f0b81c33;width:16px;height:16px;margin:0 auto 3px;transform:rotate(45deg);box-shadow:0 0 10px #f0b81ccc}#waypoint.edge .diamond{border-radius:50% 0 50% 50%}#dmgdir{width:0;height:0;position:absolute;top:50%;left:50%}.dmgarc{opacity:0;border:4px solid #0000;border-top-color:#ff281ed9;border-radius:50%;width:180px;height:180px;transition:opacity .6s;position:absolute;top:-90px;left:-90px}.dmgarc.show{opacity:1;transition:none}#fps{color:#9f9;background:#00000080;padding:1px 6px;font-size:12px;position:absolute;top:4px;left:50%;transform:translate(-50%)}#stagecard{text-align:center;pointer-events:none;position:absolute;top:30%;left:0;right:0}#stagecard .num{letter-spacing:8px;color:var(--tan-dim);font-size:14px}#stagecard .title{letter-spacing:12px;color:#fff;text-shadow:0 0 20px #00e5ff99,0 0 40px #ff2bd659;font-size:64px;font-weight:700}#stagecard .sub{letter-spacing:4px;color:var(--tan);margin-top:6px;font-size:18px}#stagecard .intro{color:var(--muted);max-width:640px;margin:14px auto 0;font-size:16px;line-height:1.4}#stagecard.show{animation:6.5s ease-in-out forwards card}@keyframes card{0%{opacity:0}10%{opacity:1}80%{opacity:1}to{opacity:0}}#stagecard.banner{animation-duration:3s;top:24%}#stagecard.banner .title{font-size:54px}#wavebar{border:1px solid var(--line);border-bottom:2px solid var(--magenta);background:linear-gradient(#0e0e12b8,#08080a9e);align-items:center;gap:22px;min-width:300px;padding:6px 16px;display:flex;position:absolute;top:18px;left:50%;transform:translate(-50%);box-shadow:0 0 18px #00000080}@media (max-width:1280px){#wavebar{top:14px;left:calc(50% + 110px)}}#wavebar .wleft{flex:1}#wavebar .wtitle{letter-spacing:4px;color:var(--tan);font-size:16px}#wavebar .wtitle b{color:#fff;font-size:20px}#wavebar .wsub{letter-spacing:1px;color:var(--yellow);font-size:13px}#wavebar .wscore{color:#fff;text-align:right;text-shadow:0 0 8px #ff2bd680;font-size:24px;font-weight:700}#wavebar .wscore small{letter-spacing:3px;color:var(--muted);font-size:10px;font-weight:400;display:block}#buffs{flex-direction:column;gap:4px;width:260px;display:flex;position:absolute;bottom:150px;left:18px}.buff{border-left:3px solid var(--c);letter-spacing:1px;color:var(--c);background:#0009;grid-template-columns:14px 1fr;align-items:center;column-gap:8px;padding:4px 8px;font-size:13px;display:grid}.buff i{background:var(--c);width:10px;height:10px;box-shadow:0 0 8px var(--c);margin-left:2px;transform:rotate(45deg)}.buff .bt{background:#ffffff1a;grid-column:1/3;height:3px;margin-top:3px}.buff .bf{background:var(--c);height:100%;box-shadow:0 0 6px var(--c)}#hudflash{opacity:0;pointer-events:none;position:absolute;inset:0}#hudflash.show{animation:.6s ease-out forwards hudflash}@keyframes hudflash{0%{opacity:0}25%{opacity:var(--peak,1)}to{opacity:var(--peak,1)}}.waves-results .big-title{color:#fff;text-shadow:0 0 20px #b95cffcc,0 0 50px #ff2bd666}.waves-results .newbest{color:var(--magenta);letter-spacing:4px;margin-top:4px}#screens{pointer-events:none;position:absolute;inset:0}.screen{pointer-events:auto;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.screen.dim{background:radial-gradient(#0a080e8c,#000000e0)}.screen.solid{background:#050507}.menu{width:460px}.logo{letter-spacing:6px;color:#f4efe2;text-shadow:0 0 14px #00e5ff8c,0 0 32px #ff2bd659;font-size:58px;font-weight:700;line-height:.95}.logo .sub{letter-spacing:16px;color:var(--yellow);text-shadow:0 0 12px #f0b81c99;margin-top:6px;font-size:26px;display:block}.tagline{color:var(--muted);margin:14px 0 26px;font-size:15px;line-height:1.4}.btn{text-align:left;width:100%;font-family:var(--font);letter-spacing:3px;color:var(--text);border:1px solid #d8c49640;border-left:3px solid var(--tan-dim);cursor:pointer;text-transform:uppercase;background:linear-gradient(90deg,#14141ae6,#14141a59);margin:8px 0;padding:12px 18px;font-size:20px;transition:all .12s;display:block}.btn:hover:not(:disabled),.btn:focus-visible{border-left-color:var(--yellow);color:#fff;background:linear-gradient(90deg,#f0b81c40,#14141a66);outline:none;padding-left:26px}.btn:disabled{opacity:.35;cursor:default}.btn small{color:var(--muted);letter-spacing:1px;text-transform:none;margin-top:2px;font-size:12px;display:block}.btn.primary{border-left-color:var(--cyan)}.row{gap:10px;display:flex}.row .btn{text-align:center}.panel{border:1px solid var(--line);border-top:3px solid var(--yellow);background:#0a0a0ef0;max-height:88vh;padding:22px 28px;overflow-y:auto}.panel h2{letter-spacing:6px;color:#fff;margin:0 0 14px;font-size:26px}.panel h3{letter-spacing:4px;color:var(--tan-dim);margin:18px 0 8px;font-size:14px}.settings{width:620px}.setting{border-bottom:1px solid #ffffff0d;grid-template-columns:200px 1fr 60px;align-items:center;gap:12px;padding:7px 0;font-size:15px;display:grid}.setting input[type=range]{width:100%;accent-color:var(--yellow)}.setting select{font-family:var(--font);color:var(--text);border:1px solid var(--line);background:#1a1a20;padding:4px 8px;font-size:15px}.setting input[type=checkbox]{width:18px;height:18px;accent-color:var(--yellow)}.setting .val{color:var(--yellow);text-align:right}.setting small{color:var(--muted);font-size:12px}.gpu-line{color:var(--muted);border-bottom:1px solid #ffffff0d;padding:7px 0;font-size:13px}.gpu-line.warn{color:var(--red)}.gpu-note{border-left:3px solid var(--tan-dim);max-width:460px;color:var(--muted);background:#0a0a0ed1;margin-top:18px;padding:10px 14px;font-size:13px;line-height:1.45}.gpu-note.warn{border-left-color:var(--red);color:var(--text)}.gpu-note.warn b:first-child{color:var(--red)}.gpu-note span{margin-top:6px;display:block}.controls{width:720px}.controls table{border-collapse:collapse;width:100%;font-size:15px}.controls td{border-bottom:1px solid #ffffff0d;padding:5px 8px}.controls td:first-child{width:200px}kbd.k{font-family:var(--font);background:var(--tan);color:#111;border-radius:2px;margin-right:4px;padding:1px 7px;font-size:13px;display:inline-block}.note-small{color:var(--muted);margin-top:12px;font-size:13px;line-height:1.4}#loading{flex-direction:column}#loading .ltitle{letter-spacing:10px;font-size:40px}#loading .lsub{color:var(--tan);letter-spacing:3px;margin-top:6px}#loading .lbar{background:#ffffff14;border:1px solid #ffffff1a;width:460px;height:6px;margin-top:26px}#loading .lbar .fill{background:linear-gradient(90deg, var(--yellow), var(--cyan));width:0;height:100%;transition:width .15s}#loading .lstep{color:var(--muted);letter-spacing:1px;margin-top:10px;font-size:13px}#loading .ltip{color:var(--tan-dim);text-align:center;max-width:560px;margin-top:40px;font-size:14px;line-height:1.4}.big-title{letter-spacing:14px;text-align:center;font-size:72px;font-weight:700}.death .big-title{color:#ff3b30;text-shadow:0 0 30px #ff1e14b3}.victory .big-title{color:#fff;text-shadow:0 0 20px #00e5ffb3,0 0 50px #4f86}.center-col{flex-direction:column;align-items:center;gap:6px;display:flex}.center-col .menu{margin-top:20px}.cause{color:var(--muted);letter-spacing:2px;margin-top:8px}.results{grid-template-columns:1fr auto;gap:6px 40px;min-width:420px;margin:20px 0 10px;font-size:18px;display:grid}.results div:nth-child(odd){color:var(--muted);letter-spacing:2px}.results div:nth-child(2n){color:var(--yellow);text-align:right}.inventory{width:860px}.inv-grid{grid-template-columns:repeat(4,1fr);gap:8px;display:grid}.inv-weapon{cursor:pointer;background:#ffffff08;border:1px solid #ffffff1f;min-height:110px;padding:8px}.inv-weapon:hover{border-color:var(--yellow)}.inv-weapon.locked{opacity:.3;cursor:default}.inv-weapon.active{border-color:var(--yellow);background:#f0b81c1f}.inv-weapon .n{letter-spacing:1px;font-size:14px}.inv-weapon .d{color:var(--muted);margin-top:4px;font-size:11px;line-height:1.3}.inv-weapon .a{color:var(--yellow);margin-top:4px;font-size:13px}.inv-weapon svg{width:100%;height:36px}.inv-cons{grid-template-columns:repeat(4,1fr);gap:8px;display:grid}.inv-cons .c{cursor:pointer;background:#ffffff08;border:1px solid #ffffff1f;padding:10px}.inv-cons .c:hover{border-color:var(--green)}.inv-cons .c .cn{font-size:15px}.inv-cons .c .cc{color:var(--yellow);font-size:26px}.inv-cons .c .ck{color:var(--muted);font-size:12px}.inv-ammo{grid-template-columns:repeat(6,1fr);gap:8px;font-size:13px;display:grid}.inv-ammo div{text-align:center;border:1px solid #ffffff14;padding:6px}.inv-ammo b{color:var(--yellow);font-size:18px;display:block}.map{width:min(92vw,1100px)}.map canvas{border:1px solid var(--line);background:#08080c;width:100%;height:auto;display:block}.map .legend{color:var(--muted);flex-wrap:wrap;gap:16px;margin-top:8px;font-size:13px;display:flex}.map .legend i{vertical-align:middle;width:10px;height:10px;margin-right:5px;display:inline-block}.confirm{text-align:center;width:460px}.menu-footer{text-align:center;color:#5a564c;letter-spacing:2px;pointer-events:none;font-size:12px;position:absolute;bottom:14px;left:0;right:0}.menu-left{position:absolute;top:50%;left:7vw;transform:translateY(-50%)}.click-to-play{letter-spacing:4px;border:1px solid var(--yellow);pointer-events:none;background:#0009;padding:10px 22px;font-size:18px;animation:1.4s infinite pulse2;position:absolute;top:58%;left:50%;transform:translate(-50%)}@keyframes pulse2{0%,to{opacity:.6}50%{opacity:1}}
