#hangar-screen { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: radial-gradient(circle, rgba(0, 0, 0, 0) 40%, rgba(0, 0, 0, 0.8) 100%); display: flex; flex-direction: column; justify-content: space-between; align-items: center; z-index: 100; padding: 40px 0; box-sizing: border-box; } .hangar-title { font-size: 70px; color: #fff; font-weight: 900; margin: 0; letter-spacing: 5px; text-transform: uppercase; position: relative; text-shadow: 4px 4px 0px #ff0055, -4px -4px 0px #00ffcc; animation: glitch-anim 0.3s infinite linear alternate-reverse; } @keyframes glitch-anim { 0% { text-shadow: 4px 4px 0px #ff0055, -4px -4px 0px #00ffcc; transform: translate(0); } 20% { text-shadow: -4px 4px 0px #ff0055, 4px -4px 0px #00ffcc; transform: translate(-2px, 2px); } 40% { text-shadow: 4px -4px 0px #ff0055, -4px -4px 0px #00ffcc; transform: translate(2px, -2px); } 60% { text-shadow: -4px -4px 0px #ff0055, 4px -4px 0px #00ffcc; transform: translate(-2px, -2px); } 80% { text-shadow: 4px 4px 0px #ff0055, -4px -4px 0px #00ffcc; transform: translate(2px, 2px); } 100% { text-shadow: -4px 4px 0px #ff0055, 4px -4px 0px #00ffcc; transform: translate(0); } } .hangar-subtitle { font-size: 18px; color: #ffaa00; margin-top: -10px; margin-bottom: 20px; font-weight: bold; background: rgba(0, 0, 0, 0.5); padding: 5px 15px; border-radius: 5px; } .selector-container { display: flex; align-items: center; gap: 30px; background: rgba(10, 15, 25, 0.8); padding: 15px 30px; border-radius: 10px; border: 2px solid #555; box-shadow: 0 0 15px rgba(0, 255, 204, 0.2); } .arrow-btn { background: none; border: none; color: #fff; font-size: 40px; cursor: pointer; transition: 0.2s; } .arrow-btn:hover { color: #00ff88; transform: scale(1.2); } .vehicle-info { text-align: center; width: 250px; } #vehicle-name { font-size: 24px; color: #00ff88; font-weight: bold; display: block; margin-bottom: 5px; } #vehicle-desc { font-size: 14px; color: #aaa; line-height: 1.4; } /* ─── Difficulty Selector ─── */ .diff-container { display: flex; flex-direction: column; align-items: center; gap: 12px; background: rgba(10, 15, 25, 0.85); padding: 18px 30px; border-radius: 12px; border: 2px solid #444; box-shadow: 0 0 20px rgba(0, 255, 204, 0.15); } .diff-label { font-size: 13px; color: #aaa; letter-spacing: 2px; text-transform: uppercase; font-weight: bold; } .diff-pills { display: flex; gap: 12px; } .diff-pill { padding: 10px 28px; font-size: 15px; font-weight: 900; cursor: pointer; border-radius: 50px; border: 2px solid transparent; font-family: inherit; transition: all 0.2s; text-transform: uppercase; letter-spacing: 1px; } .diff-pill.casual { background: rgba(0, 180, 100, 0.15); color: #00d080; border-color: #00d080; } .diff-pill.casual.active, .diff-pill.casual:hover { background: linear-gradient(135deg, #00d080, #007040); color: #fff; box-shadow: 0 0 20px rgba(0, 200, 100, 0.6); transform: scale(1.05); } .diff-pill.extreme { background: rgba(255, 0, 85, 0.1); color: #ff4488; border-color: #ff0055; } .diff-pill.extreme.active, .diff-pill.extreme:hover { background: linear-gradient(135deg, #ff0055, #880000); color: #fff; box-shadow: 0 0 20px rgba(255, 0, 85, 0.7); transform: scale(1.05); animation: pill-glitch 0.4s infinite alternate; } /* ─── Mobile Controls ─── */ .mobile-controls { display: none; position: absolute; bottom: 40px; width: 100%; justify-content: space-between; padding: 0 40px; box-sizing: border-box; z-index: 1000; pointer-events: none; } @media (max-width: 1024px) and (pointer: coarse) { .mobile-controls { display: flex; } .hangar-title { font-size: 44px; margin-bottom: 5px; } .selector-container { gap: 15px; padding: 10px 15px; } .arrow-btn { font-size: 30px; } .vehicle-info { width: 180px; } #vehicle-name { font-size: 18px; } #vehicle-desc { font-size: 11px; } .diff-pill { padding: 8px 15px; font-size: 12px; } .start-btn { padding: 15px 30px; font-size: 18px; } } .joystick-container { width: 140px; height: 140px; background: rgba(255, 255, 255, 0.05); border-radius: 50%; border: 2px solid rgba(255, 255, 255, 0.15); position: relative; pointer-events: auto; touch-action: none; backdrop-filter: blur(5px); } #joystick-knob { width: 60px; height: 60px; background: rgba(0, 255, 204, 0.3); border: 2px solid #00ffcc; border-radius: 50%; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); box-shadow: 0 0 15px rgba(0, 255, 204, 0.2); pointer-events: none; } .mobile-action-btns { display: flex; flex-direction: column; gap: 20px; pointer-events: none; } .mobile-btn { width: 75px; height: 75px; background: rgba(0, 255, 204, 0.1); border: 2px solid rgba(0, 255, 204, 0.3); border-radius: 50%; display: flex; align-items: center; justify-content: center; color: #00ffcc; font-weight: 900; font-size: 11px; pointer-events: auto; touch-action: none; user-select: none; text-transform: uppercase; letter-spacing: 1px; backdrop-filter: blur(5px); } .mobile-btn:active { background: rgba(0, 255, 204, 0.4); transform: scale(0.9); } @keyframes pill-glitch { 0% { text-shadow: 2px 0 #ff0055; } 50% { text-shadow: -2px 0 #00ffcc; } 100% { text-shadow: 2px 0 #ff0055; } } #diff-desc { font-size: 12px; color: #888; text-align: center; max-width: 280px; line-height: 1.5; min-height: 36px; transition: 0.3s; } .start-btn { background: linear-gradient(45deg, #ff0055, #aa0000); color: #fff; border: 2px solid #ff8888; padding: 15px 60px; font-size: 24px; font-weight: bold; cursor: pointer; border-radius: 8px; box-shadow: 0 0 20px rgba(255, 0, 85, 0.5); transition: 0.2s; font-family: inherit; } .start-btn:hover { transform: translateY(-3px); box-shadow: 0 0 30px rgba(255, 0, 85, 0.8); filter: brightness(1.2); } .start-btn.casual-start { background: linear-gradient(45deg, #00b060, #005030); border-color: #00ff99; box-shadow: 0 0 20px rgba(0, 200, 100, 0.5); } .start-btn.casual-start:hover { box-shadow: 0 0 30px rgba(0, 255, 150, 0.8); } #game-over-screen { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: rgba(40, 0, 0, 0.85); color: #fff; display: none; flex-direction: column; justify-content: center; align-items: center; z-index: 100; } .game-over-title { color: #ff4444; text-shadow: 0 0 30px rgba(255, 0, 0, 0.8); font-size: 60px; margin-bottom: 5px; margin-top: 0; } #game-over-reason { font-size: 20px; color: #fff; margin-bottom: 20px; font-weight: bold; background: rgba(255, 0, 0, 0.5); padding: 5px 15px; border-radius: 5px; } .final-score { font-size: 28px; color: #00ff88; margin-bottom: 30px; font-weight: bold; } .btn { background-color: #fff; color: #000; border: none; padding: 12px 40px; font-weight: bold; font-size: 18px; cursor: pointer; border-radius: 4px; font-family: inherit; } /* ─── HUD Speedometer (Circular Dial) ─── */ #hud-speedometer { position: absolute; bottom: 20px; right: 20px; width: 130px; height: 130px; display: none; flex-direction: column; align-items: center; justify-content: center; z-index: 1000; } #speed-dial-svg { width: 130px; height: 130px; position: absolute; top: 0; left: 0; } #speed-dial-center { position: relative; z-index: 2; text-align: center; display: flex; flex-direction: column; align-items: center; } #speed-value { font-size: 22px; font-weight: 900; color: #fff; line-height: 1; text-shadow: 0 0 10px #00ffcc; } .speed-unit-label { font-size: 8px; color: #00ffcc; letter-spacing: 2px; font-weight: 900; margin-top: 1px; } .speed-dial-label { font-size: 7px; color: #aaa; letter-spacing: 2px; margin-top: 2px; } /* ─── stall/takeoff markers now drawn in SVG ─── */ .speed-text-top { display: none; } .speed-bar-container { display: none; } #speed-fill { display: none; background: linear-gradient(90deg, #00ffcc, #00bbff); box-shadow: 0 0 20px #00ffcc; /* No transition for instant feedback */ } .stall-zone { display: none; } .takeoff-line { display: none; } /* ─── Name Entry Popup ─── */ #name-popup { position: absolute; inset: 0; background: rgba(10, 15, 30, 0.45); /* Lighter, less 'black-screen' feel */ display: none; justify-content: center; align-items: center; z-index: 200; backdrop-filter: blur(4px); } .name-popup-box { background: rgba(8, 12, 28, 0.92); border: 1px solid rgba(0, 255, 204, 0.35); border-radius: 16px; padding: 28px 32px; text-align: center; box-shadow: 0 0 40px rgba(0, 0, 0, 0.8), 0 0 20px rgba(0, 255, 204, 0.2); width: 320px; max-width: 90vw; } .name-popup-title { font-size: 22px; font-weight: 900; color: #00ffcc; letter-spacing: 2px; margin-bottom: 6px; } .name-popup-sub { font-size: 12px; color: #888; margin-bottom: 18px; } #pilot-name-input { width: 100%; box-sizing: border-box; background: rgba(255, 255, 255, 0.07); border: 1.5px solid rgba(0, 255, 204, 0.4); color: #fff; font-size: 18px; font-weight: 700; font-family: inherit; padding: 10px 14px; border-radius: 8px; text-align: center; outline: none; letter-spacing: 1px; margin-bottom: 16px; transition: border-color 0.2s; } #pilot-name-input:focus { border-color: #00ffcc; box-shadow: 0 0 12px rgba(0, 255, 204, 0.3); } .name-confirm-btn { width: 100%; padding: 11px; font-size: 16px; font-weight: 900; font-family: inherit; cursor: pointer; border-radius: 8px; border: none; background: linear-gradient(135deg, #00d080, #005030); color: #fff; box-shadow: 0 0 16px rgba(0, 200, 100, 0.4); letter-spacing: 1px; transition: all 0.2s; } .name-confirm-btn:hover { filter: brightness(1.2); box-shadow: 0 0 24px rgba(0, 200, 100, 0.6); } .lb-name { flex: 1; color: #ccddff; font-size: 11px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 110px; } #stats-panel { position: absolute; top: 10px; left: 10px; background-color: rgba(20, 25, 30, 0.85); color: #fff; padding: 15px; border-radius: 8px; font-size: 12px; line-height: 1.5; pointer-events: none; border: 1px solid #444; display: none; } .stat-green { color: #00ff88; } .stat-red { color: #ff4444; font-weight: bold; font-size: 14px; margin-top: 5px; } .stat-gold { color: #ffb800; font-weight: bold; font-size: 14px; margin-bottom: 5px; } /* duplicate removed */ #center-warning { position: absolute; top: 35%; left: 50%; transform: translate(-50%, -50%); color: #ff4444; font-size: 40px; font-weight: 900; text-shadow: 0 0 20px #f00; display: none; pointer-events: none; z-index: 10; text-align: center; } #altitude-warning { position: absolute; top: 20%; left: 50%; transform: translate(-50%, -50%); color: #ffaa00; font-size: 30px; font-weight: 900; text-shadow: 0 0 20px #f00; display: none; pointer-events: none; z-index: 10; text-align: center; } #takeoff-guide { position: absolute; top: 75%; left: 50%; transform: translate(-50%, -50%); color: #fff; font-size: 20px; font-weight: bold; text-shadow: 0 0 10px #000; animation: blink 1s infinite; pointer-events: none; display: none; background: rgba(0, 0, 0, 0.5); padding: 10px 20px; border-radius: 8px; text-align: center; } @keyframes blink { 0%, 100% { opacity: 1; } 50% { opacity: 0.3; } } #crosshair { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); color: rgba(0, 255, 136, 0.5); font-size: 24px; pointer-events: none; display: none; } .hud-line { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); background: rgba(0, 255, 136, 0.2); pointer-events: none; display: none; } #warning-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; box-shadow: inset 0 0 150px rgba(255, 0, 0, 0); pointer-events: none; transition: box-shadow 0.2s; } /* ─── Leaderboard Panel ─── */ #leaderboard-panel { position: absolute; top: 50%; right: 80px; transform: translateY(-50%); width: 260px; background: rgba(5, 8, 20, 0.55); backdrop-filter: blur(14px) saturate(1.5); -webkit-backdrop-filter: blur(14px) saturate(1.5); border: 1px solid rgba(0, 255, 204, 0.25); border-radius: 14px; padding: 14px 16px; z-index: 50; box-shadow: 0 8px 32px rgba(0, 0, 0, 0.6), inset 0 0 0 1px rgba(255, 255, 255, 0.06); color: #fff; display: none; flex-direction: column; gap: 10px; transition: right 0.35s cubic-bezier(.4, 0, .2, 1), opacity 0.3s; } #leaderboard-panel.hangar-mode { position: fixed; top: 50%; right: 20px; transform: translateY(-50%); } .lb-title { font-size: 13px; font-weight: 900; letter-spacing: 2px; text-align: center; color: #00ffcc; text-transform: uppercase; text-shadow: 0 0 10px rgba(0, 255, 204, 0.6); border-bottom: 1px solid rgba(0, 255, 204, 0.2); padding-bottom: 8px; } .lb-tabs { display: flex; gap: 6px; } .lb-tab { flex: 1; padding: 5px 0; font-size: 11px; font-weight: 900; text-align: center; cursor: pointer; border-radius: 20px; border: 1.5px solid transparent; font-family: inherit; transition: all 0.2s; letter-spacing: 0.5px; text-transform: uppercase; } .lb-tab.casual { color: #00d080; border-color: rgba(0, 200, 100, 0.4); background: rgba(0, 180, 100, 0.1); } .lb-tab.casual.active { background: rgba(0, 180, 100, 0.3); border-color: #00d080; color: #fff; box-shadow: 0 0 10px rgba(0, 200, 100, 0.4); } .lb-tab.extreme { color: #ff4488; border-color: rgba(255, 0, 85, 0.4); background: rgba(255, 0, 85, 0.08); } .lb-tab.extreme.active { background: rgba(255, 0, 85, 0.25); border-color: #ff0055; color: #fff; box-shadow: 0 0 10px rgba(255, 0, 85, 0.5); } .lb-list { display: flex; flex-direction: column; gap: 4px; max-height: 300px; overflow-y: auto; } .lb-list::-webkit-scrollbar { width: 4px; } .lb-list::-webkit-scrollbar-track { background: transparent; } .lb-list::-webkit-scrollbar-thumb { background: rgba(0, 255, 204, 0.3); border-radius: 4px; } .lb-group-label { font-size: 10px; color: #888; letter-spacing: 1px; text-transform: uppercase; margin-top: 4px; padding: 2px 4px; border-left: 2px solid rgba(0, 255, 204, 0.3); } .lb-row { display: flex; align-items: center; gap: 6px; padding: 4px 6px; border-radius: 6px; font-size: 11px; background: rgba(255, 255, 255, 0.04); transition: background 0.2s; } .lb-row:hover { background: rgba(255, 255, 255, 0.09); } .lb-rank { width: 20px; font-size: 12px; text-align: center; flex-shrink: 0; } .lb-rank.gold { color: #ffd700; font-weight: 900; filter: drop-shadow(0 0 4px #ffd700); } .lb-rank.silver { color: #c0c0c0; font-weight: 900; } .lb-rank.bronze { color: #cd7f32; font-weight: 900; } .lb-dist { flex: 1; color: #00ff88; font-weight: 700; } .lb-dist.new-record { animation: new-rec 0.6s 3 alternate; } @keyframes new-rec { from { color: #00ff88; } to { color: #fff700; text-shadow: 0 0 8px #ff0; } } .lb-level { font-size: 10px; color: #888; flex-shrink: 0; } .lb-empty { text-align: center; color: #555; font-size: 11px; padding: 12px 0; } .lb-toggle-btn { position: absolute; padding: 8px 14px; font-size: 12px; font-weight: 900; background: rgba(0, 255, 204, 0.12); color: #00ffcc; border: 1.5px solid rgba(0, 255, 204, 0.4); border-radius: 20px; cursor: pointer; font-family: inherit; letter-spacing: 1px; backdrop-filter: blur(8px); transition: all 0.2s; z-index: 60; } .lb-toggle-btn:hover { background: rgba(0, 255, 204, 0.25); box-shadow: 0 0 12px rgba(0, 255, 204, 0.4); } /* Game-over mini board */ .go-lb-mini { margin-top: 10px; width: 280px; max-width: 90vw; } /* ─── Compass HUD ─── */ #hud-compass { position: absolute; bottom: 20px; left: 20px; width: 130px; height: 130px; display: none; align-items: center; justify-content: center; z-index: 1000; flex-direction: column; } #compass-svg { width: 130px; height: 130px; position: absolute; top: 0; left: 0; } #compass-center { position: relative; z-index: 2; text-align: center; } #compass-heading { font-size: 20px; font-weight: 900; color: #fff; line-height: 1; text-shadow: 0 0 10px #ffaa00; } #compass-dir { font-size: 11px; font-weight: 900; color: #ffaa00; letter-spacing: 2px; margin-top: 2px; } /* ─── Mobile full-screen fixes ─── */ @media (max-width: 768px) { body { position: fixed; width: 100%; height: 100%; overflow: hidden; } #game-container { width: 100%; height: 100%; min-height: -webkit-fill-available; } canvas { width: 100% !important; height: 100% !important; } /* Move HUDs above the joystick area (joystick is ~140px + 40px bottom = 180px) */ #hud-speedometer { bottom: 200px; right: 15px; width: 110px; height: 110px; } #speed-dial-svg { width: 110px; height: 110px; } #hud-compass { bottom: 200px; left: 15px; width: 110px; height: 110px; } #compass-svg { width: 110px; height: 110px; } #speed-value { font-size: 18px; } #compass-heading { font-size: 16px; } } ⛩️ Back to Playground
Boost

FLIGHT GLITCH

ZONE EXPANDED: Wider operational space authorized. Avoid perimeter breach.
Light Aircraft Standard and stable aircraft.
⚙️ Difficulty
Relaxed physics · Fewer hazards · Wider airspace · Great for learning the controls!

💥 CRASHED!

You hit an obstacle.
Survival Distance: 0 m
🏆 LOCAL RANKINGS — CASUAL
✈️ PILOT LOG
Enter your pilot name to save your score.
⚠️ CEILING REACHED: DESCEND NOW! ⚠️
0
KTS
AIRSPEED
N S E W
000°
N
MISSION DATA
--
DIST: 0 m
LEVEL: 1
ALT: 0 ft
⏫ PULL DOWN TO TAKEOFF
(Move Joystick DOWN or press 'S' key)
🏆 LOCAL RANKINGS