*{box-sizing:border-box;margin:0;padding:0}body{color:#fff;touch-action:none;-webkit-user-select:none;user-select:none;background:#000;width:100vw;height:100vh;font-family:monospace;overflow:hidden}#viewport{width:100vw;height:100vh;perspective:var(--perspective);perspective-origin:50%;position:fixed;top:0;left:0;overflow:hidden}#viewport.loading{opacity:0}::view-transition-old(root){animation-duration:.6s}::view-transition-new(root){animation-duration:.6s}@property --player-z{syntax:"<number>";inherits:true;initial-value:0}#scene{pointer-events:none;width:0;height:0;transform-style:preserve-3d;transform:translateZ(var(--perspective)) rotateX(0deg) rotateY(calc(var(--player-angle) * -57.2958deg)) translate3d(calc(var(--player-x) * -1px), calc(var(--player-z) * 1px), calc(var(--player-y) * 1px));transition:--player-z .25s ease-out;position:absolute;top:50%;left:50%}#scene *{transform-style:preserve-3d;backface-visibility:hidden;image-rendering:pixelated;position:absolute}#scene .ceiling{backface-visibility:visible;transition:opacity 1s}#scene .platform .floor{backface-visibility:visible}@property --z{syntax:"<number>";inherits:false;initial-value:0}@property --light{syntax:"<number>";inherits:true;initial-value:1}#viewport{background:url(/assets/textures/SKY1.png) 0 0/auto 70% repeat-x;background-position-x:calc(var(--player-angle) * 163px), 0;image-rendering:pixelated}#viewport:after{content:"";opacity:0;pointer-events:none;z-index:-1;background:#444;transition:opacity .5s 1s;position:absolute;inset:0}.wall{transform-origin:0 0;transform:translate3d(calc(var(--x) * 1px), calc(var(--z) * -1px), calc(var(--y) * -1px)) rotateY(calc(var(--angle) * 57.2958deg));filter:brightness(var(--light,1));background-repeat:repeat}button.wall{cursor:default;appearance:none;border:none;padding:0}@property --scroll-offset{syntax:"<length>";inherits:false;initial-value:0}@keyframes scroll-texture{0%{--scroll-offset:0px}to{--scroll-offset:-128px}}body.scroll-textures .wall.scroll-texture{background-position-x:calc(var(--texture-offset-x) + var(--scroll-offset));animation:3.66s linear infinite scroll-texture}.floor{transform-origin:50%;transform:translate3d(calc(var(--x) * 1px), calc(var(--z) * -1px), calc(var(--y) * -1px)) rotateX(90deg);filter:brightness(var(--light,1));background-repeat:repeat;background-size:64px 64px}@keyframes nukage{0%,33%{background-image:url(/assets/flats/NUKAGE1.png)}33%,66%{background-image:url(/assets/flats/NUKAGE2.png)}66%,to{background-image:url(/assets/flats/NUKAGE3.png)}}body.animated-flats .floor[data-texture^=NUKAGE]{animation:1s step-end infinite nukage}.ceiling{transform-origin:50%;transform:translate3d(calc(var(--x) * 1px), calc(var(--z) * -1px), calc(var(--y) * -1px)) rotateX(90deg);filter:brightness(var(--light,1));background-repeat:repeat;background-size:64px 64px}@keyframes sound-door-open{to{--sound:1}}@keyframes sound-door-close{to{--sound:1}}.door{width:0;height:0;transition:transform 1s ease-in-out;top:0;left:0;transform:translateY(0)}.door[data-state=open]{transform:translateY(var(--offset));animation:1ms forwards sound-door-open}.door[data-state=closed]{animation:1ms forwards sound-door-close}@keyframes sound-lift-start{to{--sound:1}}@keyframes sound-lift-stop{to{--sound:1}}.lift{width:0;height:0;top:0;left:0}.platform{width:0;height:0;transition:transform 1s ease-in-out;top:0;left:0;transform:translateY(0)}.platform[data-state=lowered]{transform:translateY(var(--offset));animation:1ms forwards sound-lift-start}.platform[data-state=raised]{animation:1ms forwards sound-lift-stop}@keyframes light-glow{0%,to{--light:.75}50%{--light:1}}@keyframes light-blink{0%,49%{--light:1}50%,to{--light:.5}}@keyframes light-flicker{0%,4%{--light:1}5%,8%{--light:.5}9%,50%{--light:1}51%,54%{--light:.5}55%,70%{--light:1}71%,73%{--light:.5}74%,to{--light:1}}body.sector-lights .light-glow{animation:1s ease-in-out infinite light-glow}body.sector-lights .light-blink{animation:1s step-end infinite light-blink}body.sector-lights .light-flicker{animation:2s step-end infinite light-flicker}body.light-falloff #scene{--camera-forward-x:calc(sin(calc(var(--player-angle) * 57.2958deg)) * -1);--camera-forward-y:cos(calc(var(--player-angle) * 57.2958deg))}body.light-falloff .wall,body.light-falloff .enemy,body.light-falloff .barrel,body.light-falloff .pickup,body.light-falloff .decoration,body.light-falloff .floor,body.light-falloff .ceiling{--view-depth:calc((var(--x) - var(--player-x)) * var(--camera-forward-x) + (var(--y) - var(--player-y)) * var(--camera-forward-y));--light-falloff:clamp(.15, calc(1 - var(--view-depth) / 1500), 1)}body.light-falloff .wall,body.light-falloff .floor,body.light-falloff .ceiling,body.light-falloff .decoration img,body.light-falloff .sprite{filter:brightness(calc(var(--light,1) * var(--light-falloff)))}.switch[data-type=BRCOM]{background-image:url(/assets/textures/SW1BRCOM.png)}.switch[data-type=BRCOM][data-state=on]{background-image:url(/assets/textures/SW2BRCOM.png)}.switch[data-type=BRN1]{background-image:url(/assets/textures/SW1BRN1.png)}.switch[data-type=BRN1][data-state=on]{background-image:url(/assets/textures/SW2BRN1.png)}.switch[data-type=BRN2]{background-image:url(/assets/textures/SW1BRN2.png)}.switch[data-type=BRN2][data-state=on]{background-image:url(/assets/textures/SW2BRN2.png)}.switch[data-type=BRNGN]{background-image:url(/assets/textures/SW1BRNGN.png)}.switch[data-type=BRNGN][data-state=on]{background-image:url(/assets/textures/SW2BRNGN.png)}.switch[data-type=BROWN]{background-image:url(/assets/textures/SW1BROWN.png)}.switch[data-type=BROWN][data-state=on]{background-image:url(/assets/textures/SW2BROWN.png)}.switch[data-type=COMM]{background-image:url(/assets/textures/SW1COMM.png)}.switch[data-type=COMM][data-state=on]{background-image:url(/assets/textures/SW2COMM.png)}.switch[data-type=COMP]{background-image:url(/assets/textures/SW1COMP.png)}.switch[data-type=COMP][data-state=on]{background-image:url(/assets/textures/SW2COMP.png)}.switch[data-type=DIRT]{background-image:url(/assets/textures/SW1DIRT.png)}.switch[data-type=DIRT][data-state=on]{background-image:url(/assets/textures/SW2DIRT.png)}.switch[data-type=EXIT]{background-image:url(/assets/textures/SW1EXIT.png)}.switch[data-type=EXIT][data-state=on]{background-image:url(/assets/textures/SW2EXIT.png)}.switch[data-type=GRAY]{background-image:url(/assets/textures/SW1GRAY.png)}.switch[data-type=GRAY][data-state=on]{background-image:url(/assets/textures/SW2GRAY.png)}.switch[data-type=GRAY1]{background-image:url(/assets/textures/SW1GRAY1.png)}.switch[data-type=GRAY1][data-state=on]{background-image:url(/assets/textures/SW2GRAY1.png)}.switch[data-type=METAL]{background-image:url(/assets/textures/SW1METAL.png)}.switch[data-type=METAL][data-state=on]{background-image:url(/assets/textures/SW2METAL.png)}.switch[data-type=PIPE]{background-image:url(/assets/textures/SW1PIPE.png)}.switch[data-type=PIPE][data-state=on]{background-image:url(/assets/textures/SW2PIPE.png)}.switch[data-type=SLAD]{background-image:url(/assets/textures/SW1SLAD.png)}.switch[data-type=SLAD][data-state=on]{background-image:url(/assets/textures/SW2SLAD.png)}.switch[data-type=STARG]{background-image:url(/assets/textures/SW1STARG.png)}.switch[data-type=STARG][data-state=on]{background-image:url(/assets/textures/SW2STARG.png)}.switch[data-type=STON1]{background-image:url(/assets/textures/SW1STON1.png)}.switch[data-type=STON1][data-state=on]{background-image:url(/assets/textures/SW2STON1.png)}.switch[data-type=STON2]{background-image:url(/assets/textures/SW1STON2.png)}.switch[data-type=STON2][data-state=on]{background-image:url(/assets/textures/SW2STON2.png)}.switch[data-type=STONE]{background-image:url(/assets/textures/SW1STONE.png)}.switch[data-type=STONE][data-state=on]{background-image:url(/assets/textures/SW2STONE.png)}.switch[data-type=STRTN]{background-image:url(/assets/textures/SW1STRTN.png)}.switch[data-type=STRTN][data-state=on]{background-image:url(/assets/textures/SW2STRTN.png)}@keyframes sprite-cycle{0%{background-position-x:0}to{background-position-x:calc(var(--w) * var(--frames) * -1px)}}@keyframes sprite-stop{0%{background-position-x:0}to{background-position-x:calc(var(--w) * (1 - var(--frames)) * 1px)}}@keyframes sprite-hide{0%{background-position-x:0}to{background-position-x:calc(var(--w) * (1 - var(--frames)) * 1px);visibility:hidden}}.sprite{--heading:0;--rows:1;width:calc(var(--w) * 1px);height:calc(var(--h) * 1px);background-repeat:no-repeat;background-size:calc(var(--w) * var(--frames) * 1px) calc(var(--h) * var(--rows) * 1px);background-position-y:calc(var(--heading) * var(--h) * -1px);animation:sprite-cycle calc(var(--frames) * .25s) steps(var(--frames)) infinite}.sprite[data-state=attacking]{animation:sprite-stop .6s steps(calc(var(--frames) - 1)) forwards}.sprite[data-state=dead]{animation:sprite-stop calc(var(--frames) * .1s) steps(calc(var(--frames) - 1)) forwards}.enemy,.barrel,.pickup,.decoration{width:0;height:0;transform:translate3d(calc(var(--x) * 1px), calc(var(--z) * -1px), calc(var(--y) * -1px))}.enemy{transition:--z .4s ease-out}@keyframes sound-pickup{to{--sound:1}}.pickup.collected{visibility:hidden;animation:1ms forwards sound-pickup}.decoration img,.pickup img,.sprite{transform-origin:50% 100%;transform:translateX(-50%) rotateY(calc(var(--player-angle) * 57.2958deg)) scaleX(var(--mirror,1));filter:brightness(var(--light,1));bottom:0}.projectile{transform:translate3d(calc(var(--x) * 1px), calc(var(--z) * -1px), calc(var(--y) * -1px)) rotateY(calc(var(--player-angle) * 57.2958deg));background-repeat:no-repeat;animation:.15s ease-in-out infinite alternate projectile-glow}@keyframes projectile-glow{0%{filter:brightness(1.8)}to{filter:brightness(2.5)}}.puff{transform-origin:50%;width:15px;height:15px;transform:translate3d(calc(var(--x) * 1px + 15px), calc(var(--z) * -1px + 7.5px), calc(var(--y) * -1px)) rotateY(calc(var(--player-angle) * 57.2958deg));background:url(/assets/sprites/PUFF_SHEET.png) 0 0/60px 15px no-repeat;animation:.2s steps(3,end) forwards puff}@keyframes puff{0%{background-position-x:0}to{background-position-x:-45px}}.fireball-explosion{transform-origin:50%;width:50px;height:44px;transform:translate3d(calc(var(--x) * 1px - 25px), calc(var(--z) * -1px - 22px), calc(var(--y) * -1px)) rotateY(calc(var(--player-angle) * 57.2958deg));image-rendering:pixelated;animation:.3s step-end forwards fireball-explode}@keyframes fireball-explode{0%,33%{background:url(/assets/sprites/BAL1C0.png) 50%/contain no-repeat}33%,66%{background:url(/assets/sprites/BAL1D0.png) 50%/contain no-repeat}66%,to{background:url(/assets/sprites/BAL1E0.png) 50%/contain no-repeat}}.sprite[data-type=zombieman]{--w:45;--h:55;--frames:2;--rows:5;background-image:url(/assets/sprites/sheets/POSS.png)}.sprite[data-type=zombieman][data-state=attacking]{--w:27;--h:55;--frames:2;--rows:1;background-image:url(/assets/sprites/sheets/POSS_ATK.png)}.sprite[data-type=zombieman][data-state=dead]{--w:48;--h:55;--frames:5;--rows:1;background-image:url(/assets/sprites/sheets/POSS_DEATH.png)}.sprite[data-type=shotgun-guy]{--w:45;--h:56;--frames:2;--rows:5;background-image:url(/assets/sprites/sheets/SPOS.png)}.sprite[data-type=shotgun-guy][data-state=attacking]{--w:27;--h:55;--frames:2;--rows:1;background-image:url(/assets/sprites/sheets/SPOS_ATK.png)}.sprite[data-type=shotgun-guy][data-state=dead]{--w:52;--h:60;--frames:5;--rows:1;background-image:url(/assets/sprites/sheets/SPOS_DEATH.png)}.sprite[data-type=imp]{--w:41;--h:57;--frames:2;--rows:5;background-image:url(/assets/sprites/sheets/TROO.png)}.sprite[data-type=imp][data-state=attacking]{--w:49;--h:60;--frames:3;--rows:1;background-image:url(/assets/sprites/sheets/TROO_ATK.png)}.sprite[data-type=imp][data-state=dead]{--w:58;--h:62;--frames:5;--rows:1;background-image:url(/assets/sprites/sheets/TROO_DEATH.png)}.sprite[data-type=demon]{--w:60;--h:59;--frames:2;--rows:5;background-image:url(/assets/sprites/sheets/SARG.png)}.sprite[data-type=demon][data-state=attacking]{--w:44;--h:55;--frames:3;--rows:1;background-image:url(/assets/sprites/sheets/SARG_ATK.png)}.sprite[data-type=demon][data-state=dead]{--w:64;--h:57;--frames:6;--rows:1;background-image:url(/assets/sprites/sheets/SARG_DEATH.png)}.sprite[data-type=spectre]{--w:60;--h:59;--frames:2;--rows:5;filter:url(#fuzz);opacity:.35;background-image:url(/assets/sprites/sheets/SARG.png)}.sprite[data-type=spectre][data-state=attacking]{--w:44;--h:55;--frames:3;--rows:1;background-image:url(/assets/sprites/sheets/SARG_ATK.png)}.sprite[data-type=spectre][data-state=dead]{--w:64;--h:57;--frames:6;--rows:1;filter:none;background-image:url(/assets/sprites/sheets/SARG_DEATH.png)}.sprite[data-type=baron]{--w:52;--h:74;--frames:2;--rows:5;background-image:url(/assets/sprites/sheets/BOSS.png)}.sprite[data-type=baron][data-state=attacking]{--w:69;--h:70;--frames:3;--rows:1;background-image:url(/assets/sprites/sheets/BOSS_ATK.png)}.sprite[data-type=baron][data-state=dead]{--w:60;--h:73;--frames:7;--rows:1;background-image:url(/assets/sprites/sheets/BOSS_DEATH.png)}.sprite[data-type=barrel]{--w:23;--h:32;--frames:2;background-image:url(/assets/sprites/sheets/BAR1.png)}.sprite[data-type=barrel][data-state=dead]{--w:60;--h:53;--frames:5;background-image:url(/assets/sprites/sheets/BEXP.png)}.barrel .sprite[data-state=dead]{animation-name:sprite-hide}.sprite[data-type=red-torch]{--w:26;--h:97;--frames:4;background-image:url(/assets/sprites/sheets/TRED.png)}body.dead #viewport{filter:sepia(.5)saturate(2)hue-rotate(-20deg);transition:filter 1s}body.dead #scene{--player-z:10}.sprite[data-type=soulsphere]{--w:25;--h:25;--frames:4;background-image:url(/assets/sprites/sheets/SOUL.png)}.sprite[data-type=health-bonus]{--w:14;--h:18;--frames:4;background-image:url(/assets/sprites/sheets/BON1.png)}.sprite[data-type=armor-bonus]{--w:16;--h:15;--frames:4;background-image:url(/assets/sprites/sheets/BON2.png)}.sprite[data-type=green-armor]{--w:31;--h:17;--frames:2;background-image:url(/assets/sprites/sheets/ARM1.png)}.sprite[data-type=blue-armor]{--w:31;--h:17;--frames:2;background-image:url(/assets/sprites/sheets/ARM2.png)}.sprite[data-type=invisibility]{--w:25;--h:25;--frames:4;background-image:url(/assets/sprites/sheets/PINS.png)}@property --bob{syntax:"<number>";inherits:false;initial-value:0}@keyframes head-bob{0%,to{--bob:0}50%{--bob:6}}body.head-bob #scene{transform:translateZ(var(--perspective)) rotateY(calc(var(--player-angle) * -57.2958deg)) translate3d(calc(var(--player-x) * -1px), calc(var(--player-z) * 1px + var(--bob,0) * 1px), calc(var(--player-y) * 1px))}body.head-bob #scene.moving{animation:.4s ease-in-out infinite head-bob}#weapon{--ws:3;position-anchor:--status-bar;bottom:anchor(top);left:anchor(center);margin-bottom:-30px;margin-left:calc(var(--w) * var(--ws) * -.5px);width:calc(var(--w) * var(--ws) * 1px);height:calc(var(--h) * var(--ws) * 1px);background-size:calc(var(--w) * var(--frames) * var(--ws) * 1px) calc(var(--h) * var(--ws) * 1px);image-rendering:pixelated;z-index:999;pointer-events:none;background-position-x:0;background-repeat:no-repeat;transition:transform .3s ease-in .8s;position:fixed}@media (width<=960px){#weapon{--ws:2}}@keyframes weapon-fire{0%{background-position-x:calc(var(--w) * var(--ws) * -1px)}to{background-position-x:calc(var(--w) * var(--frames) * var(--ws) * -1px)}}#weapon.firing{animation:weapon-fire var(--fire-duration) steps(calc(var(--frames) - 1)) forwards}@keyframes weapon-bob{0%{transform:translate(40px)translateY(-24px)}12.5%{transform:translate(28px)translateY(0)}25%{transform:translate(0)translateY(-24px)}37.5%{transform:translate(-28px)translateY(0)}50%{transform:translate(-40px)translateY(-24px)}62.5%{transform:translate(-28px)translateY(0)}75%{transform:translate(0)translateY(-24px)}87.5%{transform:translate(28px)translateY(0)}to{transform:translate(40px)translateY(-24px)}}body.moving:not(.spectator) #weapon:not(.firing):not(.switching){animation:1.4s linear infinite weapon-bob}@keyframes weapon-switch{0%{transform:translateY(0)}40%{transform:translateY(110%)}60%{transform:translateY(110%)}to{transform:translateY(0)}}#weapon.switching{transition:none;animation:.4s ease-in-out forwards weapon-switch}body.dead #weapon{transform:translateY(110%)}#weapon[data-type=FIST]{--w:147;--h:76;--frames:4;background-image:url(/assets/weapons/FIST.png)}#weapon[data-type=PISTOL]{--w:79;--h:103;--frames:5;background-image:url(/assets/weapons/PISTOL.png)}#weapon[data-type=SHOTGUN]{--w:119;--h:151;--frames:6;background-image:url(/assets/weapons/SHOTGUN.png)}#weapon[data-type=CHAINGUN]{--w:114;--h:103;--frames:3;background-image:url(/assets/weapons/CHAINGUN.png)}#weapon[data-type=CHAINGUN].firing{animation:.3s steps(2,end) infinite chaingun-fire}@keyframes chaingun-fire{0%{background-position-x:calc(var(--w) * var(--ws) * -1px)}to{background-position-x:calc(var(--w) * 3 * var(--ws) * -1px)}}#weapon[data-type=ROCKET]{--w:105;--h:119;--frames:5;background-image:url(/assets/weapons/ROCKET.png)}#weapon[data-type=CHAINSAW]{--w:154;--h:89;--frames:4;background-image:url(/assets/weapons/CHAINSAW.png)}#status-bar{--s:3;anchor-name:--status-bar;z-index:1000;pointer-events:auto;image-rendering:pixelated;justify-content:center;transition:transform .3s ease-in .8s;display:flex;position:fixed;bottom:0;left:0;right:0}@media (width<=960px){#status-bar{--s:2}}@media (width<=640px){#status-bar{background:#50505099;flex-wrap:wrap}}.hud-section{height:calc(32px * var(--s));background:url(/assets/hud/STBAR.png) no-repeat;background-size:calc(320px * var(--s)) calc(32px * var(--s));position:relative;overflow:hidden}#hud-ammo{width:calc(48px * var(--s));background-position-x:0}#hud-health{width:calc(58px * var(--s));background-position-x:calc(-48px * var(--s))}#hud-arms{width:calc(37px * var(--s));background-position-x:calc(-106px * var(--s))}#hud-face{width:calc(36px * var(--s));background-position-x:calc(-143px * var(--s))}#hud-armor{width:calc(57px * var(--s));background-position-x:calc(-179px * var(--s))}#hud-keys{width:calc(13px * var(--s));background-position-x:calc(-236px * var(--s))}#hud-ammo-types{width:calc(71px * var(--s));background-position-x:calc(-249px * var(--s))}.hud-number{--glyph:calc(14px * var(--s));--value:0;--hundreds:round(down, var(--value) / 100, 1);--tens:mod(round(down, var(--value) / 10, 1), 10);--ones:mod(var(--value), 10);--hide-leading-zero:calc(-9999px * (1 - min(1, var(--hundreds))));--hide-middle-zero:calc(-9999px * (1 - min(1, round(down, var(--value) / 10, 1))));--digit-1:calc(var(--hundreds) * var(--glyph) * -1 + var(--hide-leading-zero));--digit-2:calc(var(--tens) * var(--glyph) * -1 + var(--hide-middle-zero));--digit-3:calc(var(--ones) * var(--glyph) * -1);box-sizing:content-box;padding:0 var(--glyph);width:var(--glyph);height:calc(16px * var(--s));background:url(/assets/hud/DIGITS_SHEET.png) no-repeat;background-size:calc(var(--glyph) * 12) calc(16px * var(--s));background-origin:content-box;background-clip:content-box;background-position-x:var(--digit-2);image-rendering:pixelated;display:block;position:absolute}.hud-number:before,.hud-number:after{content:"";width:var(--glyph);height:calc(16px * var(--s));background:url(/assets/hud/DIGITS_SHEET.png) no-repeat;background-size:calc(var(--glyph) * 12) calc(16px * var(--s));image-rendering:pixelated;position:absolute;top:0}.hud-number:before{background-position-x:var(--digit-1);left:0}.hud-number:after{background-position-x:var(--digit-3);right:0}.hud-pct{width:calc(14px * 3 * var(--s));position:absolute}.hud-pct:after{content:"";right:calc(-14px * var(--s));width:calc(14px * var(--s));height:calc(16px * var(--s));background:url(/assets/hud/DIGITS_SHEET.png) no-repeat;background-size:calc(168px * var(--s)) calc(16px * var(--s));background-position-x:calc(-10 * 14px * var(--s));image-rendering:pixelated;position:absolute;top:0}#hud-ammo .hud-number{left:calc(2px * var(--s));top:calc(3px * var(--s))}#hud-health .hud-pct,#hud-armor .hud-pct{left:0;top:calc(3px * var(--s))}#hud-face{background-image:url(/assets/hud/STFB0.png),url(/assets/hud/STBAR.png);background-size:calc(36px * var(--s)) calc(31px * var(--s)), calc(320px * var(--s)) calc(32px * var(--s));background-position:0 calc(1px * var(--s)), calc(-143px * var(--s)) 0;background-repeat:no-repeat;overflow:hidden}#face-sprite{left:50%;top:calc(1px * var(--s));width:calc(24px * var(--s));height:calc(31px * var(--s));background:url(/assets/hud/FACE_SHEET.png) no-repeat;background-size:calc(72px * var(--s)) calc(155px * var(--s));background-position-y:calc(var(--face-row,0) * -31px * var(--s));image-rendering:pixelated;animation:1.5s step-end infinite face-idle;position:absolute;transform:translate(-50%)}@keyframes face-idle{0%,to{background-position-x:0}33%{background-position-x:calc(-24px * var(--s))}66%{background-position-x:calc(-48px * var(--s))}}body.dead #face-sprite{background-position-x:0;animation:none}#hud-keys{padding-top:calc(3px * var(--s));padding-bottom:calc(3px * var(--s));flex-direction:column;justify-content:space-evenly;align-items:center;display:flex}.key{width:calc(16px * var(--s));height:calc(7px * var(--s));image-rendering:pixelated;opacity:.15;background-position:50%;background-repeat:no-repeat;background-size:contain}.key-blue{background-image:url(/assets/hud/STKEYS0.png)}.key-yellow{background-image:url(/assets/hud/STKEYS1.png)}.key-red{background-image:url(/assets/hud/STKEYS2.png)}body.has-blue-key .key-blue,body.has-yellow-key .key-yellow,body.has-red-key .key-red{opacity:1}#hud-arms{background-image:url(/assets/hud/STARMS.png),url(/assets/hud/STBAR.png);background-size:calc(40px * var(--s)) calc(32px * var(--s)), calc(320px * var(--s)) calc(32px * var(--s));background-position:calc(-2px * var(--s)) 0, calc(-106px * var(--s)) 0;background-repeat:no-repeat}.slot{width:calc(4px * var(--s));height:calc(6px * var(--s));image-rendering:pixelated;background-size:100% 100%;position:absolute}.slot[data-slot="2"]{left:calc(5px * var(--s));top:calc(4px * var(--s))}.slot[data-slot="3"]{left:calc(17px * var(--s));top:calc(4px * var(--s))}.slot[data-slot="4"]{left:calc(29px * var(--s));top:calc(4px * var(--s))}.slot[data-slot="5"]{left:calc(5px * var(--s));top:calc(14px * var(--s))}.slot[data-slot="6"]{left:calc(17px * var(--s));top:calc(14px * var(--s))}.slot[data-slot="7"]{left:calc(29px * var(--s));top:calc(14px * var(--s))}.slot[data-slot="2"]{background-image:url(/assets/hud/STGNUM2.png)}.slot[data-slot="3"]{background-image:url(/assets/hud/STGNUM3.png)}.slot[data-slot="4"]{background-image:url(/assets/hud/STGNUM4.png)}.slot[data-slot="5"]{background-image:url(/assets/hud/STGNUM5.png)}.slot[data-slot="6"]{background-image:url(/assets/hud/STGNUM6.png)}.slot[data-slot="7"]{background-image:url(/assets/hud/STGNUM7.png)}body.has-weapon-2 .slot[data-slot="2"]{background-image:url(/assets/hud/STYSNUM2.png)}body.has-weapon-3 .slot[data-slot="3"]{background-image:url(/assets/hud/STYSNUM3.png)}body.has-weapon-4 .slot[data-slot="4"]{background-image:url(/assets/hud/STYSNUM4.png)}body.has-weapon-5 .slot[data-slot="5"]{background-image:url(/assets/hud/STYSNUM5.png)}body.has-weapon-6 .slot[data-slot="6"]{background-image:url(/assets/hud/STYSNUM6.png)}body.has-weapon-7 .slot[data-slot="7"]{background-image:url(/assets/hud/STYSNUM7.png)}#hud-ammo-types{position:relative}.ammo-row{height:calc(6px * var(--s));position:absolute;left:0}.ammo-row[data-ammo=bullets]{top:calc(5px * var(--s))}.ammo-row[data-ammo=shells]{top:calc(11px * var(--s))}.ammo-row[data-ammo=rockets]{top:calc(17px * var(--s))}.ammo-row[data-ammo=cells]{top:calc(23px * var(--s))}.ammo-cur,.ammo-max{position:absolute}.ammo-cur{left:calc(28px * var(--s))}.ammo-max{left:calc(52px * var(--s))}.small-number{--glyph:calc(4px * var(--s));--value:0;--hundreds:round(down, var(--value) / 100, 1);--tens:mod(round(down, var(--value) / 10, 1), 10);--ones:mod(var(--value), 10);--hide-leading-zero:calc(-9999px * (1 - min(1, var(--hundreds))));--hide-middle-zero:calc(-9999px * (1 - min(1, round(down, var(--value) / 10, 1))));--digit-1:calc(var(--hundreds) * var(--glyph) * -1 + var(--hide-leading-zero));--digit-2:calc(var(--tens) * var(--glyph) * -1 + var(--hide-middle-zero));--digit-3:calc(var(--ones) * var(--glyph) * -1);box-sizing:content-box;padding:0 var(--glyph);width:var(--glyph);height:calc(6px * var(--s));background:url(/assets/hud/SMALL_DIGITS_SHEET.png) no-repeat;background-size:calc(var(--glyph) * 10) calc(6px * var(--s));background-origin:content-box;background-clip:content-box;background-position-x:var(--digit-2);image-rendering:pixelated;position:absolute}.small-number:before,.small-number:after{content:"";width:var(--glyph);height:calc(6px * var(--s));background:url(/assets/hud/SMALL_DIGITS_SHEET.png) no-repeat;background-size:calc(var(--glyph) * 10) calc(6px * var(--s));image-rendering:pixelated;position:absolute;top:0}.small-number:before{background-position-x:var(--digit-1);left:0}.small-number:after{background-position-x:var(--digit-3);right:0}#damage-overlay,#pickup-overlay,#teleport-overlay{z-index:999;pointer-events:none;opacity:0;position:fixed;inset:0}#damage-overlay{background:red}#pickup-overlay{background:gold}#teleport-overlay{background:#0f0}@keyframes flash-overlay{0%{opacity:.35}to{opacity:0}}body.hurt #damage-overlay,body.pickup-flash #pickup-overlay,body.teleport-flash #teleport-overlay{animation:.3s ease-out forwards flash-overlay}body.powerup-invulnerability #viewport{filter:saturate(0)brightness(1.5)sepia()hue-rotate(90deg)}body.powerup-berserk #viewport{filter:saturate(1.3)}body.powerup-invisibility #weapon{opacity:.3}body.powerup-radsuit #viewport{filter:sepia(.3)hue-rotate(60deg)brightness(1.1)}body.powerup-lightamp .wall,body.powerup-lightamp .floor,body.powerup-lightamp .ceiling{--light:1!important}#debug-menu{z-index:1001;color:#aaa;cursor:default;background:#000000b3;border:1px solid #444;padding:4px 8px;font-family:monospace;font-size:12px;position:fixed;top:58px;left:12px}#debug-menu summary{cursor:pointer;-webkit-user-select:none;user-select:none}#debug-menu label{cursor:pointer;-webkit-user-select:none;user-select:none;padding:2px 0;display:block}#menu-button{z-index:1001;width:82px;height:40px;image-rendering:pixelated;cursor:pointer;background:url(/assets/menu/M_DOOM.png) 50%/contain no-repeat;border:none;align-items:flex-end;padding:0;transition:filter .15s;display:flex;position:fixed;top:12px;left:12px}#menu-button:hover{filter:drop-shadow(0 0 8px #b30000)drop-shadow(0 0 16px #b30000)}#menu-button span{color:#888;font-family:monospace;font-size:14px;font-weight:700;position:absolute;bottom:14px;right:-36px}#menu-overlay{z-index:1000;background:#000c;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}#menu-overlay[hidden]{display:none}#menu-content{gap:80px;display:flex}@media (width<=720px){#menu-content{flex-direction:column;gap:40px}#menu-overlay{align-items:flex-start;padding:120px 20px 40px;overflow-y:auto}}#menu-inner{flex-direction:column;align-items:center;display:flex}#menu-about{color:#888;text-align:center;max-width:480px;font-family:monospace;font-size:11px;line-height:1.6;position:fixed;bottom:40px}@media (width<=720px){#menu-about{margin-top:80px;padding:0 40px;position:static}}.menu-column{flex-direction:column;align-items:center;display:flex}.menu-heading{color:#666;text-transform:uppercase;letter-spacing:2px;margin-bottom:12px;font-family:monospace;font-size:12px}.menu-episode{image-rendering:pixelated;height:15px;margin-bottom:8px}.menu-level-list{flex-direction:column;gap:2px;display:flex}.menu-level{cursor:pointer;opacity:.6;background:0 0;border:none;align-items:center;gap:4px;padding:2px 4px;transition:opacity .1s;display:flex}.menu-level:hover,.menu-level.active{opacity:1}.menu-level .level-digit{width:21px;height:24px;image-rendering:pixelated;background:url(/assets/hud/DIGITS_SHEET.png) 0 0/252px 24px no-repeat}.menu-skill{cursor:pointer;opacity:.6;background:0 0;border:none;align-items:center;gap:4px;padding:4px;transition:opacity .1s;display:flex}.menu-skill:hover,.menu-skill.active{opacity:1}.menu-skill img{image-rendering:pixelated}.menu-level.active:before,.menu-skill.active:before{content:"";width:20px;height:19px;image-rendering:pixelated;background:url(/assets/menu/M_SKULL1.png) 50%/contain no-repeat;flex-shrink:0}.menu-level:before,.menu-skill:before{content:"";flex-shrink:0;width:20px;height:19px}body.spectator #viewport:after{opacity:1;transition:opacity 1.5s}body.spectator #status-bar{pointer-events:none;transition-delay:0s;transform:translateY(100%)}body.spectator #weapon{pointer-events:none;transition-delay:0s;transform:translateY(calc(100% + 100px))}#player-marker{--marker-color:#fff;opacity:.4;background:conic-gradient(from -45deg, var(--marker-color) 0deg, var(--marker-color) 90deg, transparent 90deg);width:80px;height:80px;filter:drop-shadow(0 0 8px var(--marker-color));border-radius:50%;margin:-50px 0 0 -40px;transition:none;display:none;-webkit-mask:radial-gradient(circle,#0000 60%,#000 63%);mask:radial-gradient(circle,#0000 60%,#000 63%);backface-visibility:visible!important}#player-marker.firing{--marker-color:#f80}body.spectator #player-marker{display:block}#player-sprite{display:none;backface-visibility:visible!important}#player-sprite img{image-rendering:pixelated;transform-origin:50% 100%;position:absolute;bottom:0;transform:translate(-50%)}body.spectator #player-sprite{display:block}#player-sprite:before{content:"";transform-origin:50% 100%;filter:blur(4px);background:#00000080;border-radius:50%;width:32px;height:32px;margin-left:-13px;position:absolute;bottom:0;left:50%;transform:rotateX(90deg)translateY(12px)}body.spectator .ceiling{opacity:0;transition:opacity 1.5s}body.spectator #scene *{backface-visibility:visible}#aim-line{z-index:998;pointer-events:none;background:#ffffff26;width:1px;display:none;position:fixed;top:12px;bottom:55%;left:50%}body.spectator.follow-mode #aim-line{display:block}#spectator-button{z-index:1001;cursor:pointer;background:0 0;border:none;width:40px;height:40px;padding:4px;transition:filter .15s;position:fixed;top:12px;right:12px}#spectator-button img{filter:invert(.55);width:100%;height:100%;transition:filter .15s}#spectator-button:hover img{filter:invert()}#spectator-button:hover{filter:drop-shadow(0 0 8px #b30000)drop-shadow(0 0 16px #b30000)}body.spectator #spectator-button{filter:drop-shadow(0 0 8px #b30000)}body.spectator #spectator-button img{filter:invert()}#spectator-controls{z-index:999;opacity:1;justify-content:space-between;align-items:flex-end;transition:opacity .3s;display:flex;position:fixed;bottom:20px;left:20px;right:20px}#spectator-controls.hidden{opacity:0;pointer-events:none}#spectator-controls button{color:#aaa;cursor:pointer;-webkit-user-select:none;user-select:none;touch-action:manipulation;background:#555;border:none;border-radius:8px;width:48px;height:48px;font-size:20px;transition:transform 50ms,box-shadow 50ms;transform:translateY(0);box-shadow:0 4px #222}#spectator-controls button:hover{color:#fff;background:#666}#spectator-controls button:active,#spectator-controls button.pressed{color:#fff;transform:translateY(4px);box-shadow:0 0 #333}.spectator-group{gap:8px;transition:opacity .3s;display:flex}.spectator-stack{flex-direction:column;gap:8px;display:flex}#spectator-arrows{grid-template-rows:repeat(2,48px);grid-template-columns:repeat(3,48px);gap:8px;display:grid}#spectator-arrows button:first-child{grid-area:1/2}#spectator-arrows button:nth-child(2){grid-area:2/1}#spectator-arrows button:nth-child(3){grid-area:2/2}#spectator-arrows button:nth-child(4){grid-area:2/3}#spectator-tabs{gap:0}.spectator-tab{border-radius:0!important;width:auto!important;height:48px!important;padding:0 14px!important}.spectator-tab img{filter:invert(.67);width:26px;height:26px;transition:filter .15s}.spectator-tab.active img,.spectator-tab:hover img{filter:invert()}.spectator-tab:first-child{border-radius:8px 0 0 8px!important}.spectator-tab:last-child{border-radius:0 8px 8px 0!important}.spectator-tab.active{color:#fff;background:#777!important}#touch-controls{display:none}@media (pointer:coarse){#touch-controls{z-index:1001;pointer-events:none;display:block;position:fixed;inset:0}}#touch-joystick-zone,#touch-look-zone{pointer-events:auto;touch-action:none;-webkit-user-select:none;user-select:none;position:absolute;top:56px;bottom:96px}#touch-joystick-zone{width:40%;left:0}#touch-look-zone{width:60%;right:0}#touch-joystick-base{position-anchor:--status-bar;bottom:anchor(top);pointer-events:none;z-index:1002;background:#ffffff1a;border:none;border-radius:50%;width:100px;height:100px;margin-bottom:16px;position:fixed;left:24px}#touch-joystick-knob{background:#ffffff59;border-radius:50%;width:44px;height:44px;margin-top:-22px;margin-left:-22px;position:absolute;top:50%;left:50%}#touch-use{position-anchor:--status-bar;bottom:anchor(top);pointer-events:auto;touch-action:none;-webkit-user-select:none;user-select:none;z-index:1002;background:#ffffff26;border:none;border-radius:50%;width:64px;height:64px;margin-bottom:34px;position:fixed;right:24px}#touch-use:active{filter:brightness(1.4)}#touch-fire{position-anchor:--status-bar;bottom:anchor(top);left:anchor(center);pointer-events:auto;touch-action:none;-webkit-user-select:none;user-select:none;z-index:1002;background:0 0;border:none;width:160px;height:160px;margin-bottom:-30px;margin-left:-80px;position:fixed}
