while
the start-screen is up. Hue-rotate the WebGL canvas itself so the entire
3D scene takes on the bloody-red palette without an overlay div eating
contrast. Class is removed on PLAY click. */
body.landing-active canvas:not(#battery-hud):not(#mp-minimap){filter:grayscale(1) sepia(1) saturate(8) hue-rotate(-55deg) brightness(0.6) contrast(1.4)}
#start-screen .mode-btn:active,#drone-store .mode-btn:active{transform:scale(0.97)}
@keyframes blink{0%,100%{opacity:1}50%{opacity:0.3}}
.touch-ui-only{display:none}
body.touch-ui .touch-ui-only{display:block}
#touch-controls{display:none;position:fixed;inset:0;pointer-events:none;z-index:40;touch-action:none;-webkit-user-select:none;user-select:none}
body.touch-ui.touch-flying #touch-controls{display:block}
#touch-controls .touch-hit{pointer-events:auto;touch-action:none}
.touch-joy{position:absolute;width:min(42vw,168px);height:min(42vw,168px);bottom:max(12px,env(safe-area-inset-bottom));touch-action:none}
.touch-joy--move{left:max(10px,env(safe-area-inset-left))}
.touch-joy--look{right:max(10px,env(safe-area-inset-right))}
.touch-joy-base{position:absolute;inset:0;border-radius:50%;background:rgba(255,255,255,0.06);border:1.5px solid rgba(255,255,255,0.15)}
.touch-joy-knob{position:absolute;left:50%;top:50%;width:38%;height:38%;margin:0;border-radius:50%;background:rgba(255,255,255,0.2);border:1.5px solid rgba(255,255,255,0.25);transform:translate(-50%,-50%);pointer-events:none}
.touch-joy-label{position:absolute;bottom:-22px;left:50%;transform:translateX(-50%);font-size:11px;opacity:0.55;color:#cfe8ff;white-space:nowrap}
.touch-stack{position:absolute;display:flex;flex-direction:column;gap:8px;bottom:max(12px,env(safe-area-inset-bottom));left:calc(max(10px,env(safe-area-inset-left)) + min(42vw,168px) + 14px)}
.touch-stack--right{left:auto;right:calc(max(10px,env(safe-area-inset-right)) + min(42vw,168px) + 14px);align-items:flex-end}
.touch-btn{min-width:64px;padding:10px 14px;border-radius:10px;border:2px solid rgba(160,210,255,0.4);background:rgba(24,36,48,0.75);color:#e8f4ff;font-family:monospace;font-size:13px;font-weight:bold}
.touch-btn:active{background:rgba(50,80,110,0.85)}
.touch-btn--fire{color:#ffeedd;border-color:rgba(255,180,120,0.5)}
.touch-btn--grenade{color:#d4e8ff;border-color:rgba(140,200,255,0.45)}
body.touch-ui.touch-flying{touch-action:none;overscroll-behavior:none}
NO DRONES LEFT Pick up a drone at an X on the minimap
FENTER VEHICLE
curvature: 1.00
zoom: 1.12
GUN POSITION [N]
MUSIC MIXER[−]
● OFFLINE
YOU DIED
END OF ROUND
NEW ROUND IN
10
KILLED
SQUAD COMMS
press hotkey · ESC closes
HEALTH
STEALTH
you are invisible on enemy radar
DRONES 3
DEATHS 0
TIME --:--
ROUND ENDS IN --:--
WASD — move (run) · Shift — walk slow · Space — jump (hold near wall = climb)
C — crouch · X — prone · LMB — fire · R — reload · RMB / Z — zoom · L — flashlight
F — fly (switch to drone) · V — thermal · N — night vision · B — Anduril vision
T — chat · M — map · G — squad comms · Tab — scoreboard
SPECTATOR — FREE CAM
WASD — fly · Space — up · C / X — down · Shift — fast
Mouse — look · V — thermal · N — night vision · B — Anduril vision
T — chat · M — map · Tab — scoreboard
FPV DRONE
Mouse — pitch / yaw · W / S — forward / back · A / D — turn
Space — climb · C / X — descend · Shift — boost · LMB — fire
F — back to soldier · V — thermal · N — night vision · B — Anduril vision
T — chat · M — map · G — squad comms · Tab — scoreboard Gamepad: L-stick throttle/yaw · R-stick pitch · RT forward · LT brake · B (bottom) fire · X (top) zoom · Y key — ACRO toggle
An FPV drone war simulator vibe coded by @levelsio