:root{--ink:#0b0c0e;--ink-soft:#0b0c0e9e;--snow:#e9edf0;--ash:#9aa3ab;--frost:#b9c7d2;--signal:#d8573c;--ok:#9fc2a8;--font-title:"Avenir Next Condensed", "Helvetica Neue", "Arial Narrow", "Roboto Condensed", sans-serif;--font-mono:"SF Mono", "JetBrains Mono", Menlo, Consolas, monospace;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*{box-sizing:border-box}html,body{background:var(--ink);height:100%;color:var(--snow);font-family:var(--font-title);-webkit-font-smoothing:antialiased;margin:0;overflow:hidden}#app{position:fixed;inset:0}#game-canvas{filter:saturate(.82)contrast(1.06);outline:none;width:100%;height:100%;display:block}#game-canvas.pixelated{image-rendering:pixelated}.fx-vignette,.fx-grain{pointer-events:none;position:absolute;inset:0}.fx-vignette{background:radial-gradient(at 50% 55%,#0000 52%,#0507098c 100%)}.fx-grain{opacity:.09;mix-blend-mode:overlay;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='220' height='220'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/></filter><rect width='100%' height='100%' filter='url(%23n)'/></svg>");animation:.6s steps(6,end) infinite grain}@keyframes grain{0%{background-position:0 0}20%{background-position:-40px 30px}40%{background-position:60px -20px}60%{background-position:-20px -60px}80%{background-position:30px 50px}to{background-position:0 0}}.hud{pointer-events:none;opacity:0;transition:opacity .8s .2s;position:absolute;inset:0}.hud.playing{opacity:1}.hud-title{text-shadow:0 1px 2px #0000008c;position:absolute;top:22px;left:26px}.hud-title h1{letter-spacing:.14em;margin:0;font-size:26px;font-weight:800;font-stretch:75%;line-height:1}.hud-title p{letter-spacing:.32em;color:var(--frost);margin:6px 0 0;font-size:12px;font-weight:600}.hud-metrics{max-width:min(460px,60vw);font-family:var(--font-mono);background:var(--ink-soft);border-left:2px solid var(--frost);grid-template-columns:auto auto;gap:3px 12px;margin:0;padding:10px 14px;font-size:11px;display:grid;position:absolute;top:18px;right:18px}.hud-metrics dt{color:var(--ash);letter-spacing:.08em}.hud-metrics dd{color:var(--snow);white-space:nowrap;text-overflow:ellipsis;font-variant-numeric:tabular-nums;margin:0;overflow:hidden}.hud-metrics dd.error{color:var(--signal);white-space:normal}.hud-help{font-family:var(--font-mono);color:var(--ash);background:var(--ink-soft);white-space:nowrap;padding:6px 12px;font-size:11px;position:absolute;bottom:16px;left:50%;transform:translate(-50%)}.hud-help b,.start-keys b{color:var(--snow);font-weight:600}.hud-hint{white-space:nowrap;letter-spacing:.24em;background:var(--ink-soft);opacity:0;padding:10px 18px;font-size:13px;font-weight:700;transition:opacity .3s;position:absolute;bottom:56px;left:50%;transform:translate(-50%)}.hud-hint.visible{opacity:1}.start{background:linear-gradient(90deg,#08090beb 0%,#08090bb8 42%,#08090b26 100%),linear-gradient(#0000 50%,#08090b99);flex-direction:column;padding:24px 7vw 9vh;transition:opacity .9s,visibility .9s;display:flex;position:absolute;inset:0;overflow-y:auto}.start.hidden{opacity:0;visibility:hidden;pointer-events:none}.start-card{width:min(560px,100%);margin-top:auto}.start-kicker{font-family:var(--font-mono);letter-spacing:.3em;color:var(--ash);margin:0 0 18px;font-size:11px}.start-title{letter-spacing:.04em;margin:0;font-size:clamp(44px,7.4vw,92px);font-weight:800;font-stretch:75%;line-height:.9}.start-sub{letter-spacing:.36em;color:var(--frost);border-bottom:1px solid #e9edf02e;margin:14px 0 0;padding-bottom:18px;font-size:15px;font-weight:600}.start-quote{max-width:420px;color:var(--ash);margin:18px 0 26px;font-size:16px;font-style:italic;line-height:1.45}.start-loading{gap:12px;margin-bottom:18px;display:grid}.load-item{font-family:var(--font-mono);letter-spacing:.08em;grid-template-columns:1fr auto;row-gap:6px;font-size:11px;display:grid}.load-label{color:var(--ash)}.load-value{color:var(--snow);font-variant-numeric:tabular-nums}.load-track{background:#e9edf024;grid-column:1/-1;height:2px;overflow:hidden}.load-bar{background:var(--snow);transform-origin:0;height:100%;transition:transform .25s linear;transform:scaleX(0)}.load-item[data-state=done] .load-bar{background:var(--ok)}.load-item[data-state=error] .load-bar,.load-item[data-state=error] .load-value{background:var(--signal);color:var(--signal)}.start-errors p{font-family:var(--font-mono);color:var(--snow);border-left:2px solid var(--signal);background:#d8573c2e;margin:0 0 8px;padding:8px 10px;font-size:12px}.start-enter{font-family:var(--font-title);letter-spacing:.28em;color:var(--ink);background:var(--snow);cursor:pointer;border:0;margin-top:8px;padding:16px 30px;font-size:17px;font-weight:800;transition:background .2s,transform .2s}.start-enter:hover:not(:disabled),.start-enter:focus-visible{background:#fff;outline:none;transform:translate(4px)}.start-enter:disabled{color:var(--ash);cursor:progress;background:#e9edf014}.start-keys{font-family:var(--font-mono);color:var(--ash);margin:22px 0 0;font-size:11px;line-height:1.7}.debug-panel{--background-color:#0b0c0eeb;--title-background-color:#16191c;--widget-color:#2a2f34;--focus-color:#3a4147;--number-color:var(--frost);--string-color:var(--ok);--font-family:var(--font-mono);z-index:10;max-height:calc(100vh - 20px)}.fatal{font-family:var(--font-mono);white-space:pre-wrap;color:var(--snow);border-left:3px solid var(--signal);z-index:20;background:#d8573c40;margin:0;padding:16px;font-size:13px;position:fixed;inset:auto 20px 20px}@media (max-width:900px){.hud-metrics{max-width:calc(100vw - 52px);top:74px;left:26px;right:auto}.hud-hint{letter-spacing:.16em;font-size:11px}}@media (max-width:720px){.hud-help{display:none}.hud-title{left:16px}.hud-metrics{max-width:calc(100vw - 32px);left:16px}.start{padding:0 16px 6vh}}.start-note{font-family:var(--font-mono);color:var(--snow);border-left:2px solid var(--frost);background:#b9c7d21f;margin:0 0 18px;padding:10px 12px;font-size:12px;line-height:1.5}body.touch #game-canvas{filter:none}body.touch,body.touch #app{touch-action:none;overscroll-behavior:none;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}body.touch .start{touch-action:pan-y}.touch-controls{z-index:5;touch-action:none;position:absolute;inset:0}.touch-controls[hidden]{display:none}.touch-joy{opacity:0;pointer-events:none;background:#0b0c0e40;border:1.5px solid #e9edf073;border-radius:50%;width:112px;height:112px;margin:-56px 0 0 -56px;transition:opacity .15s,border-color .15s;position:fixed;top:0;left:0}.touch-joy.active{opacity:1}.touch-joy.running{border-color:var(--snow);box-shadow:0 0 0 4px #e9edf01f}.touch-joy-knob{background:#e9edf0bf;border-radius:50%;width:48px;height:48px;margin:-24px 0 0 -24px;position:absolute;top:50%;left:50%}.touch-btn{color:var(--snow);font-family:var(--font-title);letter-spacing:.12em;touch-action:none;-webkit-tap-highlight-color:transparent;background:#0b0c0e61;border:1.5px solid #e9edf08c;border-radius:50%;place-items:center;font-weight:800;display:grid;position:absolute}.touch-btn.pressed{color:var(--ink);background:var(--snow)}.touch-jump{right:calc(28px + env(safe-area-inset-right));bottom:calc(34px + env(safe-area-inset-bottom));width:84px;height:84px;font-size:13px}.touch-shoot{right:calc(36px + env(safe-area-inset-right));bottom:calc(140px + env(safe-area-inset-bottom));border-color:#ffc48cb3;width:68px;height:68px;font-size:11px}.touch-punch{right:calc(134px + env(safe-area-inset-right));bottom:calc(46px + env(safe-area-inset-bottom));width:60px;height:60px;font-size:11px}.touch-kick{right:calc(116px + env(safe-area-inset-right));bottom:calc(122px + env(safe-area-inset-bottom));width:56px;height:56px;font-size:9px}.touch-dodge{right:calc(208px + env(safe-area-inset-right));bottom:calc(40px + env(safe-area-inset-bottom));letter-spacing:.06em;width:54px;height:54px;font-size:7.5px}.touch-reset{right:calc(46px + env(safe-area-inset-right));bottom:calc(222px + env(safe-area-inset-bottom));width:44px;height:44px;font-size:20px;font-weight:600}.touch-mute{top:calc(12px + env(safe-area-inset-top));right:calc(16px + env(safe-area-inset-right));width:40px;height:40px;font-size:18px;font-weight:600}.touch-mute.pressed{color:var(--snow);background:#0b0c0e61}body.touch .hud-help,body.touch .hud-metrics{display:none}body.touch .hud-title{top:calc(12px + env(safe-area-inset-top));left:calc(16px + env(safe-area-inset-left))}body.touch .hud-title h1{font-size:18px}body.touch .hud-title p{font-size:9px}body.touch .hud-metrics{top:calc(10px + env(safe-area-inset-top));right:calc(10px + env(safe-area-inset-right));max-width:46vw;padding:6px 8px;font-size:9px;left:auto}@media (orientation:portrait){body.touch .hud-metrics{top:calc(58px + env(safe-area-inset-top));left:calc(16px + env(safe-area-inset-left));max-width:calc(100vw - 32px);right:auto}}body.touch .hud-hint{bottom:calc(140px + env(safe-area-inset-bottom))}@media (max-height:520px){.start{padding:16px 5vw}.start-kicker,.start-quote{display:none}.start-title{font-size:40px}.start-sub{margin-top:8px;padding-bottom:10px;font-size:12px}.start-loading{gap:8px;margin:12px 0}.start-enter{padding:12px 22px;font-size:14px}.start-keys{margin-top:12px;font-size:10px}}.hud-combat{pointer-events:none;z-index:3;position:absolute;inset:0}.hud-combat-crosshair{background:linear-gradient(var(--snow), var(--snow)) center top / 2px 7px no-repeat, linear-gradient(var(--snow), var(--snow)) center bottom / 2px 7px no-repeat, linear-gradient(var(--snow), var(--snow)) left center / 7px 2px no-repeat, linear-gradient(var(--snow), var(--snow)) right center / 7px 2px no-repeat;filter:drop-shadow(0 0 1px #000000e6);opacity:.85;width:22px;height:22px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.hud-combat-hit{width:30px;height:30px;color:var(--snow);opacity:0;background:linear-gradient(currentColor,currentColor) top/2px 9px no-repeat,linear-gradient(currentColor,currentColor) bottom/2px 9px no-repeat,linear-gradient(currentColor,currentColor) 0/9px 2px no-repeat,linear-gradient(currentColor,currentColor) 100%/9px 2px no-repeat;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)rotate(45deg)}.hud-combat-hit.visible{opacity:1}.hud-combat-hit.kill{color:var(--signal);width:38px;height:38px}.hud-combat-status{left:50%;top:calc(18px + env(safe-area-inset-top));font-family:var(--font-mono);letter-spacing:.08em;color:var(--ash);background:var(--ink-soft);grid-template-columns:auto 180px auto;align-items:center;gap:4px 10px;padding:8px 14px;font-size:11px;display:grid;position:absolute;transform:translate(-50%)}.hud-combat-label{color:var(--snow);font-weight:600}.hud-combat-health{background:#e9edf026;height:6px;overflow:hidden}.hud-combat-health-bar{background:var(--frost);transform-origin:0;height:100%;transition:transform .15s linear}.hud-combat.low .hud-combat-health-bar{background:var(--signal);animation:.8s ease-in-out infinite alternate hud-combat-pulse}.hud-combat-health-value{text-align:right;min-width:3ch;color:var(--snow);font-variant-numeric:tabular-nums}.hud-combat-counters{text-align:center;grid-column:1/-1;font-size:10px}.hud-combat-counters span{color:var(--snow);font-variant-numeric:tabular-nums}.hud-combat-damage{opacity:0;background:radial-gradient(#0000 45%,#aa1e148c 100%);position:absolute;inset:0}.hud-combat-arrow{width:0;height:0;transform:rotate(var(--angle,0deg)) translateY(-120px);opacity:0;border-bottom:20px solid #d8573ce6;border-left:14px solid #0000;border-right:14px solid #0000;margin-left:-14px;position:absolute;top:50%;left:50%}.hud-combat-damage.visible,.hud-combat-arrow.visible{animation:.9s ease-out forwards hud-combat-fade}.hud-combat-death{text-align:center;opacity:0;transition:opacity .6s .8s;position:absolute;top:38%;left:50%;transform:translate(-50%,-50%)}.hud-combat-death.visible{opacity:1}.hud-combat-death-title{letter-spacing:.12em;color:var(--snow);text-shadow:0 2px 18px #000c;margin:0;font-size:clamp(22px,4vw,44px);font-weight:800}.hud-combat-death-sub{font-family:var(--font-mono);letter-spacing:.2em;color:var(--snow);text-shadow:0 1px 8px #000000e6;margin:10px 0 0;font-size:12px}@keyframes hud-combat-fade{0%{opacity:1}to{opacity:0}}@keyframes hud-combat-pulse{to{opacity:.55}}@media (max-width:600px){.hud-combat-status{grid-template-columns:auto 110px auto;font-size:10px}}
