:root{--bg:#0a0a12;--player:#3fc;--accent:#f36;--ranged:#48f;--stairs:#b464ff;--safe-bottom:env(safe-area-inset-bottom,0px);--safe-top:env(safe-area-inset-top,0px);--safe-right:env(safe-area-inset-right,0px);--hud-band-top:12px;--hud-minimap-reserve:170px;--touch-btn-size:76px;--touch-btn-bottom:28px;--touch-btn-edge:24px;--touch-btn-gap:12px;--hud-row-gap:12px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}*{box-sizing:border-box;margin:0;padding:0}html,body{background:var(--bg);width:100%;height:100%;overflow:hidden}#app{touch-action:none;position:fixed;inset:0}#app canvas{display:block}.hud-damage-vignette{z-index:1;pointer-events:none;opacity:0;background:radial-gradient(#0000 55%,#c81830 100%);position:fixed;inset:0}.hud-floor-transition{z-index:2;pointer-events:none;opacity:0;background:var(--bg);position:fixed;inset:0}.hud-arrival{pointer-events:none;-webkit-user-select:none;user-select:none;text-align:center;z-index:3;flex-direction:column;align-items:center;gap:12px;display:flex;position:fixed;top:42%;left:50%;transform:translate(-50%,-50%)}.hud-arrival-title{letter-spacing:.3em;text-shadow:0 0 16px;opacity:1;white-space:nowrap;font:700 clamp(28px,8vw,56px)/1 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;transition:opacity .5s}.hud-arrival-depth{letter-spacing:.3em;color:var(--stairs);text-shadow:0 0 18px;opacity:.92;white-space:nowrap;font:700 clamp(22px,6vw,42px)/1 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;transition:opacity .5s}.hud-arrival-badge{letter-spacing:.34em;color:var(--player);text-shadow:0 0 10px;opacity:.85;white-space:nowrap;font:700 clamp(9px,2.4vw,13px)/1 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;transition:opacity .5s}.hud-arrival-title.is-faded,.hud-arrival-depth.is-faded,.hud-arrival-badge.is-faded{opacity:0}.minimap{top:calc(var(--safe-top) + var(--hud-band-top));right:calc(var(--safe-right) + 10px);pointer-events:none;-webkit-user-select:none;user-select:none;border-radius:6px;position:fixed}.hud-bars{top:calc(var(--safe-top) + var(--hud-band-top));pointer-events:none;-webkit-user-select:none;user-select:none;flex-direction:column;gap:8px;display:flex;position:fixed;left:10px}.hud-bar-row{align-items:center;gap:6px;display:flex}.hud-bar-label{text-align:right;letter-spacing:.14em;flex:none;width:50px;font:700 9px/1 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}.hud-bar-row.is-health .hud-bar-label{color:#f68}.hud-bar-row.is-dash .hud-bar-label{color:var(--player)}.hud-bar{background:#00000073;border:1px solid #ffffff26;border-radius:6px;width:min(180px,40vw);height:11px;overflow:hidden}.hud-bar-fill{width:100%;height:100%;transition:width 80ms linear}.hud-health .hud-bar-fill{background:linear-gradient(90deg,#f36,#f68)}.hud-dash-pips{gap:4px;width:min(180px,40vw);height:7px;display:flex}.hud-dash-pip{background:#00000073;border:1px solid #ffffff26;border-radius:4px;flex:1 1 0;height:100%;overflow:hidden}.hud-dash-pip-fill{background:var(--player);width:100%;height:100%;transition:width 80ms linear}.hud-powers{max-width:calc(100vw - var(--hud-minimap-reserve) - var(--safe-right));flex-wrap:wrap}.hud-chip{border:1px solid var(--chip-color);color:var(--chip-color);letter-spacing:.12em;white-space:nowrap;opacity:.22;transform-origin:0;background:#0006;border-radius:6px;align-items:center;gap:5px;padding:3px 7px;font:700 8px/1 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;transition:opacity .3s,transform .3s,box-shadow .3s;display:inline-flex}.hud-chip.is-on{opacity:.55}.hud-chip.is-flaring{opacity:1;text-shadow:0 0 6px;box-shadow:0 0 9px -3px var(--chip-color), inset 0 0 6px -3px var(--chip-color)}.hud-chip.is-flaring-scale{transform:scale(1.14)}.hud-chip:before{content:"";flex:none}.hud-chip.is-pierce:before{border-top:4px solid #0000;border-bottom:4px solid #0000;border-left:7px solid;width:0;height:0}.hud-chip.is-knockback:before{clip-path:polygon(50% 0,60% 40%,100% 50%,60% 60%,50% 100%,40% 60%,0 50%,40% 40%);background:currentColor;width:9px;height:9px}.hud-chip.is-melee:before{background:currentColor;width:3px;height:9px}.hud-chip.is-ranged:before{background:currentColor;width:6px;height:6px}.hud-chip.is-lifesteal:before{clip-path:polygon(50% 100%,0 35%,25% 0,50% 25%,75% 0,100% 35%);background:currentColor;width:9px;height:9px}.hud-chip.is-burn:before{clip-path:polygon(50% 0,90% 55%,75% 100%,25% 100%,10% 55%);background:currentColor;width:8px;height:10px}.hud-chip.is-chain:before{clip-path:polygon(55% 0,20% 55%,45% 55%,35% 100%,80% 40%,50% 40%);background:currentColor;width:8px;height:10px}.hud-chip.is-crit:before{clip-path:polygon(50% 0,61% 39%,100% 50%,61% 61%,50% 100%,39% 61%,0 50%,39% 39%);background:currentColor;width:10px;height:10px}.hud-chip.is-freeze:before{clip-path:polygon(47% 0,53% 0,53% 38%,86% 19%,89% 24%,56% 44%,56% 50%,89% 70%,86% 75%,53% 56%,53% 100%,47% 100%,47% 56%,14% 75%,11% 70%,44% 50%,44% 44%,11% 24%,14% 19%,47% 38%);background:currentColor;width:10px;height:10px}.hud-chip.is-fire-rate:before{clip-path:polygon(0 0,45% 0,100% 50%,45% 100%,0 100%,55% 50%);background:currentColor;width:10px;height:9px}.hud-chip.is-maxhp:before{clip-path:polygon(35% 0,65% 0,65% 35%,100% 35%,100% 65%,65% 65%,65% 100%,35% 100%,35% 65%,0 65%,0 35%,35% 35%);background:currentColor;width:10px;height:10px}.hud-chip.is-armor:before{clip-path:polygon(50% 0,100% 18%,100% 55%,50% 100%,0 55%,0 18%);background:currentColor;width:9px;height:10px}.hud-chip-pips{align-items:center;gap:2px;display:inline-flex}.hud-chip-pip{opacity:.5;border:1px solid;border-radius:50%;width:4px;height:4px}.hud-chip-pip.is-filled{opacity:1;background:currentColor}.touch-stick-base,.touch-stick-thumb{pointer-events:none;z-index:5;border-radius:50%;display:none;position:fixed;transform:translate(-50%,-50%)}.touch-stick-base{background:#33ffcc14;border:2px solid #3fc6;width:120px;height:120px}.touch-stick-thumb{background:#33ffcc59;border:2px solid #33ffccb3;width:56px;height:56px;box-shadow:0 0 16px #3fc6}.touch-stick-base.is-active,.touch-stick-thumb.is-active{display:block}.touch-stick-base.touch-aim{background:#ff66331a;border-color:#ff663380}.touch-stick-thumb.touch-aim{background:#f636;border-color:#f63c;box-shadow:0 0 16px #ff663373}.touch-stick-base.touch-aim.is-home{opacity:.5;background:#ff66330d;border-style:dashed;display:block}.touch-aim-label{letter-spacing:.08em;color:#ff9966f2;text-align:center;white-space:nowrap;pointer-events:none;font:700 11px/1.1 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.touch-stick-base.touch-aim.is-active .touch-aim-label{opacity:0}.touch-stick-base.touch-aim.is-firing{opacity:1;border-style:solid;border-color:var(--ranged);background:#4488ff24;animation:.7s ease-in-out infinite aim-firing-pulse}.touch-stick-base.touch-aim.is-firing .touch-aim-label{color:var(--ranged)}@keyframes aim-firing-pulse{0%,to{box-shadow:0 0 #48f0}50%{box-shadow:0 0 18px 2px #4488ff8c}}.touch-action{bottom:calc(var(--safe-bottom) + var(--touch-btn-bottom));width:var(--touch-btn-size);height:var(--touch-btn-size);letter-spacing:.1em;color:#fff;z-index:6;touch-action:none;-webkit-user-select:none;user-select:none;background:#ffffff14;border:2px solid #ffffff4d;border-radius:50%;flex-direction:column;justify-content:center;align-items:center;gap:1px;font:700 13px/1 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;display:flex;position:fixed}.touch-action-sub{letter-spacing:.12em;opacity:.78;font-size:9px;font-weight:700}.touch-btn-melee{right:var(--touch-btn-edge);color:var(--accent);border-color:#f369}.touch-btn-dash{right:calc(var(--touch-btn-edge) + var(--touch-btn-size) + var(--touch-btn-gap));color:var(--player);border-color:#3fc9}@media (hover:hover) and (pointer:fine){.touch-action{display:none}}.touch-hint{bottom:calc(var(--safe-bottom) + var(--touch-btn-bottom) + var(--touch-btn-size) + var(--hud-row-gap));text-align:center;max-width:calc(100vw - 24px);color:var(--player);pointer-events:none;-webkit-user-select:none;user-select:none;opacity:.9;background:#00000080;border:1px solid #33ffcc4d;border-radius:999px;padding:8px 14px;font-size:13px;transition:opacity .4s;position:fixed;left:50%;transform:translate(-50%)}.touch-hint.is-hidden{opacity:0}.combat-tutorial{letter-spacing:.12em;text-align:center;white-space:nowrap;color:var(--player);text-shadow:0 0 10px;pointer-events:none;-webkit-user-select:none;user-select:none;opacity:0;background:#0000008c;border:1px solid #3fc6;border-radius:999px;padding:10px 18px;font:700 clamp(13px,3.4vw,18px)/1.2 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;transition:opacity .35s;position:fixed;top:30%;left:50%;transform:translate(-50%,-50%)}.combat-tutorial.is-visible{opacity:.95}.hud-softlock-banner{z-index:30;white-space:pre;color:#ffd166;text-shadow:0 0 6px #000c;pointer-events:none;-webkit-user-select:none;user-select:none;background:#140000eb;border:2px solid #f54;border-radius:8px;max-width:96vw;max-height:88vh;padding:10px 14px;font:700 clamp(9px,2.2vw,12px)/1.35 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;display:none;position:fixed;top:8px;left:50%;overflow:auto;transform:translate(-50%);box-shadow:0 0 18px #f549}.hud-softlock-banner.is-visible{display:block}.run-summary{z-index:20;color:#cfeee6;text-align:center;-webkit-user-select:none;user-select:none;background:#0a0a12f7;flex-direction:column;justify-content:center;align-items:center;gap:18px;padding:24px;display:none;position:fixed;inset:0}.run-summary.is-visible{display:flex}.run-summary-title{letter-spacing:.18em;text-shadow:0 0 16px;font-size:clamp(28px,9vw,56px);font-weight:700}.run-summary.is-victory{background:radial-gradient(#142822f7 0%,#0a0a12fa 70%)}.run-summary.is-victory .run-summary-title{text-shadow:0 0 28px,0 0 8px}.run-summary-stats{flex-direction:column;gap:6px;min-width:min(280px,78vw);font-size:clamp(14px,3.6vw,18px);display:flex}.run-summary-row{border-bottom:1px solid #ffffff1f;justify-content:space-between;gap:24px;padding-bottom:4px;display:flex}.run-summary-label{letter-spacing:.12em;opacity:.7}.run-summary-value{color:#fff;font-weight:700}.run-summary-best{letter-spacing:.14em;color:var(--stairs);text-shadow:0 0 10px;font-size:clamp(15px,4vw,20px);font-weight:700}.run-summary-restart{letter-spacing:.18em;cursor:pointer;touch-action:none;background:#33ffcc1a;border:2px solid #3fc9;border-radius:10px;margin-top:8px;padding:14px 36px;font:700 clamp(16px,4.5vw,20px)/1 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;box-shadow:0 0 18px #33ffcc40}.unlocks-overlay{z-index:21;color:#cfeee6;-webkit-user-select:none;user-select:none;background:#0a0a12e6;justify-content:center;align-items:center;padding:24px;display:none;position:fixed;inset:0}.unlocks-overlay.is-visible{display:flex}.unlocks-card{background:#0e0e18f5;border:1px solid #33ffcc40;border-radius:12px;flex-direction:column;gap:12px;width:min(420px,90vw);max-height:80vh;padding:20px;display:flex;overflow-y:auto;box-shadow:0 0 28px #00000080}.unlocks-title{letter-spacing:.18em;text-align:center;text-shadow:0 0 12px;font-size:clamp(20px,6vw,28px);font-weight:700}.unlocks-list{flex-direction:column;gap:8px;display:flex}.unlocks-row{opacity:.6;background:#ffffff05;border:1px solid #ffffff1a;border-radius:8px;flex-direction:column;gap:3px;padding:8px 10px;display:flex}.unlocks-row.is-unlocked{opacity:1;background:#33ffcc0f;border-color:#33ffcc59}.unlocks-row-head{justify-content:space-between;align-items:baseline;gap:12px;display:flex}.unlocks-row-name{letter-spacing:.06em;font-size:clamp(13px,3.4vw,16px);font-weight:700}.unlocks-row-status{letter-spacing:.08em;opacity:.85;white-space:nowrap;font-size:clamp(10px,2.8vw,12px);font-weight:700}.unlocks-row.is-unlocked .unlocks-row-status{color:var(--player)}.unlocks-row-desc{opacity:.8;font-size:clamp(11px,2.9vw,13px);line-height:1.35}.unlocks-close{letter-spacing:.16em;cursor:pointer;touch-action:none;color:var(--player);background:#33ffcc1a;border:2px solid #33ffcc80;border-radius:10px;align-self:center;margin-top:4px;padding:10px 28px;font:700 clamp(13px,3.6vw,16px)/1 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}.run-start-overlay{z-index:22;color:#cfeee6;-webkit-user-select:none;user-select:none;background:#0a0a12f0;justify-content:center;align-items:center;padding:24px;display:none;position:fixed;inset:0}.run-start-overlay.is-visible{display:flex}.run-start-card{background:#0e0e18f7;border:1px solid #33ffcc4d;border-radius:12px;flex-direction:column;gap:10px;width:min(420px,90vw);max-height:84vh;padding:20px;display:flex;overflow-y:auto;box-shadow:0 0 32px #0000008c}.run-start-title{letter-spacing:.18em;text-align:center;text-shadow:0 0 12px;font-size:clamp(20px,6vw,28px);font-weight:700}.run-start-sub{text-align:center;opacity:.75;margin-bottom:4px;font-size:clamp(11px,2.9vw,13px)}.run-start-list{flex-direction:column;gap:7px;display:flex}.run-start-row{text-align:left;color:inherit;cursor:pointer;touch-action:manipulation;-webkit-tap-highlight-color:transparent;background:#ffffff08;border:1px solid #ffffff24;border-radius:8px;justify-content:space-between;align-items:baseline;gap:12px;padding:11px 12px;display:flex}.run-start-row:hover{background:#33ffcc0f;border-color:#3fc6}.run-start-row.is-selected{background:#33ffcc1f;border-color:#33ffccb3;box-shadow:0 0 10px -3px #33ffcc80}.run-start-row-name{letter-spacing:.08em;font-size:clamp(13px,3.6vw,16px);font-weight:700}.run-start-row-note{opacity:.7;font-size:clamp(10px,2.8vw,12px)}.heat-row{cursor:default}.heat-row:hover{background:#ffffff08;border-color:#ffffff24}.heat-row-text{flex-direction:column;gap:2px;display:flex}.heat-stepper{flex:none;align-items:center;gap:8px;display:flex}.heat-rank{text-align:center;font-variant-numeric:tabular-nums;min-width:34px;font-size:clamp(12px,3.2vw,14px);font-weight:700}.heat-step-btn{width:30px;height:30px;color:inherit;cursor:pointer;touch-action:manipulation;-webkit-tap-highlight-color:transparent;background:#ffffff0d;border:1px solid #ffffff2e;border-radius:7px;font-size:18px;line-height:1}.heat-step-btn:hover{background:#ff54441f;border-color:#ff54448c}.heat-footer{justify-content:space-between;align-items:center;gap:12px;margin-top:14px;display:flex}.heat-total{letter-spacing:.14em;color:#f86;text-shadow:0 0 10px #ff554480;font-weight:700}.heat-total-num{font-size:clamp(18px,5vw,24px)}.heat-confirm{color:inherit;letter-spacing:.14em;cursor:pointer;touch-action:manipulation;-webkit-tap-highlight-color:transparent;background:#b464ff24;border:1px solid #b464ff99;border-radius:8px;padding:11px 22px;font-weight:700}.heat-confirm:hover{background:#b464ff3d;border-color:#b464ffe6}.hud-settings-btn{top:calc(var(--safe-top) + var(--hud-band-top) + 128px);right:calc(var(--safe-right) + 10px);text-align:center;width:40px;height:26px;color:var(--player);cursor:pointer;touch-action:manipulation;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;background:#0a0a128c;border:1px solid #33ffcc4d;border-top:none;border-radius:0 0 6px 6px;font:400 15px/24px ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;position:fixed}.hud-settings-btn.is-open{color:var(--player);background:#33ffcc2e}.hud-settings-panel{top:calc(var(--safe-top) + var(--hud-band-top) + 160px);right:calc(var(--safe-right) + 10px);-webkit-user-select:none;user-select:none;background:#0a0a12d9;border:1px solid #33ffcc40;border-radius:6px;flex-direction:column;gap:6px;padding:8px;display:none;position:fixed}.hud-settings-panel.is-open{display:flex}.hud-settings-heading{letter-spacing:.2em;color:#33ffcc8c;padding:2px 2px 4px;font:700 9px/1 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}.hud-settings-row{text-align:left;letter-spacing:.08em;min-width:150px;color:var(--player);cursor:pointer;touch-action:manipulation;-webkit-tap-highlight-color:transparent;background:#0a0a128c;border:1px solid #33ffcc40;border-radius:4px;padding:7px 10px;font:700 11px/1 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}.hud-settings-row.is-off{color:#3fc6}.hud-panel{bottom:env(safe-area-inset-bottom,8px);width:min(280px,70vw);color:var(--player);-webkit-user-select:none;user-select:none;background:#0000008c;border:1px solid #33ffcc40;border-radius:6px;flex-direction:column;gap:6px;margin-bottom:8px;padding:8px 10px;font-size:12px;display:flex;position:fixed;left:8px}.hud-readout{color:var(--player);white-space:pre;margin:0;font:12px/1.4 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}.hud-slider{flex-direction:column;gap:2px;display:flex}.hud-slider span{color:#cfeee6;letter-spacing:.04em}.hud-slider input[type=range]{width:100%;height:24px;accent-color:var(--accent);touch-action:none}.hud-boss{top:calc(var(--safe-top) + 8px);pointer-events:none;z-index:5;flex-direction:column;align-items:center;gap:4px;display:flex;position:absolute;left:50%;transform:translate(-50%)}.hud-boss-label{letter-spacing:.22em;color:#f57;text-shadow:0 1px 2px #000c;font:700 12px/1 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}.hud-boss-track{background:#0000008c;border:1px solid #fff3;border-radius:8px;width:min(520px,80vw);height:16px;position:relative;overflow:hidden}.hud-boss-fill{background:linear-gradient(90deg,#7a1020,#c81830);width:100%;height:100%;transition:width 80ms linear}.hud-boss.is-phase2 .hud-boss-fill{background:linear-gradient(90deg,#c81830,#ff3a52)}.hud-boss-phase-mark{background:#ffffffbf;width:2px;height:100%;position:absolute;top:0;left:50%}
