/* ========================================================= AEROSPHERE — CSS Heist: Gradio Override Layer Forces Gradio's default grid into our absolute-positioned cinematic HUD layout. ========================================================= */ /* === GRADIO CONTAINER RESET === */ :root { --body-text-color: #ffffff !important; --body-text-color-subdued: #cccccc !important; --background-fill-primary: transparent !important; --background-fill-secondary: transparent !important; --safe-top: env(safe-area-inset-top, 0px); --safe-right: env(safe-area-inset-right, 0px); --safe-bottom: env(safe-area-inset-bottom, 0px); --safe-left: env(safe-area-inset-left, 0px); } gradio-app, .gradio-container { background: transparent !important; margin: 0 !important; padding: 0 !important; overflow: hidden !important; position: fixed !important; top: 0 !important; left: 0 !important; width: 100% !important; height: 100% !important; color: #ffffff !important; } .gradio-container * { border-color: transparent; } div.form, .block { border-style: none !important; background: transparent !important; } .contain { padding: 0 !important; } .gap { gap: 0 !important; } footer { display: none !important; } /* === GLOBAL BODY === */ html { height: -webkit-fill-available; } .aerosphere-body, html, body, gradio-app, .gradio-container { margin: 0; padding: 0; width: 100%; height: 100vh; height: 100svh; height: 100dvh; overflow: hidden; background: radial-gradient(ellipse at 30% 70%, rgba(15, 30, 60, 0.5) 0%, transparent 50%), radial-gradient(ellipse at 70% 30%, rgba(25, 15, 50, 0.4) 0%, transparent 50%), radial-gradient(ellipse at 50% 50%, #0c1628 0%, #070d1a 40%, #030508 80%, #010103 100%) !important; font-family: 'JetBrains Mono', 'Inter', monospace, sans-serif; color: #b0bec5; } .aerosphere-body { position: fixed !important; top: 0 !important; left: 0 !important; width: 100% !important; height: 100% !important; background: transparent !important; display: block !important; padding: 0 !important; margin: 0 !important; flex-wrap: nowrap !important; overflow: visible !important; } /* === THREE.JS CANVAS LAYER === */ .aerosphere-canvas-layer { position: fixed; inset: 0; width: 100%; height: 100vh; height: 100svh; height: 100dvh; z-index: 0; pointer-events: none; will-change: transform; transform: translateZ(0); } #aerosphere-planet-canvas { display: block !important; width: 100% !important; height: 100% !important; z-index: 0 !important; cursor: default; touch-action: none; will-change: transform; } /* === NEBULA CLOUD LAYER === */ .aerosphere-nebula-layer { position: fixed; inset: 0; width: 100%; height: 100vh; height: 100dvh; z-index: 1; pointer-events: none; opacity: 0.35; background: radial-gradient(ellipse at 55% 45%, rgba(30, 80, 70, 0.3) 0%, transparent 45%), radial-gradient(ellipse at 40% 55%, rgba(20, 50, 80, 0.25) 0%, transparent 40%), radial-gradient(ellipse at 60% 60%, rgba(50, 30, 70, 0.15) 0%, transparent 35%); animation: aerosphere-nebula-drift 30s ease-in-out infinite alternate; } /* === SCAN-LINE OVERLAY === */ .aerosphere-scanline-overlay { position: fixed; inset: 0; width: 100%; height: 100vh; height: 100dvh; z-index: 5; pointer-events: none; background: repeating-linear-gradient(0deg, transparent, transparent 2px, rgba(0, 20, 40, 0.03) 2px, rgba(0, 20, 40, 0.03) 4px); } /* === HUD RETICLE === */ .aerosphere-reticle { position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 180px; height: 180px; z-index: 6; pointer-events: none; opacity: 0.12; } .aerosphere-reticle::before, .aerosphere-reticle::after { content: ''; position: absolute; border: 1px solid rgba(120, 200, 220, 0.4); border-radius: 50%; } .aerosphere-reticle::before { top: 10%; left: 10%; width: 80%; height: 80%; } .aerosphere-reticle::after { top: 25%; left: 25%; width: 50%; height: 50%; } /* === SHARED GLASS PANEL BASE === */ .aerosphere-glass-panel { background: rgba(10, 18, 30, 0.55) !important; backdrop-filter: blur(24px) saturate(1.2) !important; -webkit-backdrop-filter: blur(24px) saturate(1.2) !important; border: 1px solid rgba(100, 160, 180, 0.12) !important; border-radius: 6px !important; box-shadow: 0 0 30px rgba(0, 0, 0, 0.5), inset 0 1px 0 rgba(120, 200, 220, 0.05), inset 0 -1px 0 rgba(0, 0, 0, 0.3) !important; transition: border-color 0.4s ease, box-shadow 0.4s ease; overflow: hidden; min-width: 0 !important; flex: none !important; } .aerosphere-glass-panel:hover { border-color: rgba(100, 180, 200, 0.22) !important; box-shadow: 0 0 40px rgba(0, 10, 20, 0.6), inset 0 1px 0 rgba(120, 200, 220, 0.08), inset 0 -1px 0 rgba(0, 0, 0, 0.3) !important; } /* === PANEL HEADER LABEL === */ .aerosphere-panel-label { font-family: 'JetBrains Mono', monospace; font-size: 0.85rem; font-weight: 500; letter-spacing: 0.25em; text-transform: uppercase; color: rgba(180, 220, 255, 0.9); margin-bottom: 12px; padding-bottom: 8px; border-bottom: 1px solid rgba(100, 160, 180, 0.2); display: flex; align-items: center; gap: 8px; } .aerosphere-panel-label::before { content: ''; display: inline-block; width: 5px; height: 5px; background: rgba(100, 200, 180, 0.5); border-radius: 50%; box-shadow: 0 0 6px rgba(100, 200, 180, 0.3); animation: aerosphere-pulse-dot 3s ease-in-out infinite; } @keyframes aerosphere-pulse-dot { 0%, 100% { opacity: 0.4; } 50% { opacity: 1; } } /* ========================================================= NODE 1: TELEMETRY — Top-Left ========================================================= */ .aerosphere-node-telemetry { position: fixed !important; top: 2rem; left: 2rem; width: 320px !important; padding: 20px 24px !important; z-index: 10; animation: aerosphere-fade-in 1s ease-out 0.2s both; } .aerosphere-telemetry-value { font-family: 'JetBrains Mono', monospace; font-size: 2.8rem; font-weight: 500; color: rgba(180, 240, 255, 1.0); text-shadow: 0 0 10px rgba(140, 210, 220, 0.4); letter-spacing: -0.02em; line-height: 1; margin-bottom: 4px; transition: color 0.3s ease; } .aerosphere-telemetry-unit { font-family: 'JetBrains Mono', monospace; font-size: 0.75rem; letter-spacing: 0.2em; color: rgba(160, 210, 230, 0.65); text-transform: uppercase; margin-bottom: 16px; } .aerosphere-range-slider input[type="range"] { -webkit-appearance: none; appearance: none; width: 100%; height: 3px; background: rgba(60, 80, 100, 0.3) !important; border-radius: 2px; outline: none; cursor: pointer; margin-top: 8px; border: none !important; box-shadow: none !important; } .aerosphere-range-slider input[type="range"]::-webkit-slider-thumb { -webkit-appearance: none; appearance: none; width: 22px; height: 22px; background: rgba(100, 200, 190, 0.7); border: 2px solid rgba(100, 200, 190, 0.3); border-radius: 50%; cursor: pointer; box-shadow: 0 0 12px rgba(100, 200, 190, 0.25); transition: all 0.2s ease; } .aerosphere-range-slider input[type="range"]::-webkit-slider-thumb:hover { background: rgba(100, 220, 200, 0.9); box-shadow: 0 0 20px rgba(100, 200, 190, 0.4); transform: scale(1.1); } .aerosphere-range-slider input[type="range"]::-moz-range-thumb { width: 22px; height: 22px; background: rgba(100, 200, 190, 0.7); border: 2px solid rgba(100, 200, 190, 0.3); border-radius: 50%; cursor: pointer; box-shadow: 0 0 12px rgba(100, 200, 190, 0.25); } .aerosphere-range-slider label { color: rgba(160, 210, 230, 0.65) !important; font-family: 'JetBrains Mono', monospace !important; font-size: 0.75rem !important; letter-spacing: 0.2em !important; text-transform: uppercase !important; } .aerosphere-telemetry-bar { height: 2px; background: linear-gradient(90deg, rgba(100, 200, 190, 0.6), rgba(100, 200, 190, 0.05)); border-radius: 1px; margin-top: 12px; transition: width 0.5s ease; } /* ========================================================= NODE 2: NARRATIVE LOG — Bottom-Center ========================================================= */ .aerosphere-node-narrative { position: fixed !important; bottom: 2rem; left: 50%; transform: translateX(-50%); width: min(700px, 90vw) !important; padding: 20px 28px !important; z-index: 10; animation: aerosphere-fade-in-center 1s ease-out 0.5s both; } .aerosphere-narrative-text { font-family: 'JetBrains Mono', monospace; font-size: 0.95rem; line-height: 1.8; color: rgba(200, 220, 240, 0.95); letter-spacing: 0.02em; } .aerosphere-node-narrative .prose, .aerosphere-node-narrative .markdown-text, .aerosphere-node-narrative p { font-family: 'JetBrains Mono', monospace !important; font-size: 0.95rem !important; line-height: 1.8 !important; color: rgba(200, 220, 240, 0.95) !important; letter-spacing: 0.02em !important; } .aerosphere-narrative-timestamp { font-family: 'JetBrains Mono', monospace; font-size: 0.85rem; color: rgba(240, 200, 120, 0.85); letter-spacing: 0.15em; margin-top: 12px; text-transform: uppercase; } .aerosphere-cursor-blink { display: inline-block; width: 6px; height: 12px; background: rgba(180, 240, 255, 0.9); margin-left: 4px; animation: aerosphere-blink 1.1s step-end infinite; vertical-align: middle; } @keyframes aerosphere-blink { 0%, 100% { opacity: 1; } 50% { opacity: 0; } } /* ========================================================= NODE 3: ACTION MATRIX — Right-Center ========================================================= */ .aerosphere-node-actions { position: fixed !important; top: 50%; right: 2rem; transform: translateY(-50%); width: 260px !important; padding: 20px 24px !important; z-index: 10; animation: aerosphere-fade-in-right 1s ease-out 0.8s both; } .aerosphere-action-btn { display: block !important; width: 100% !important; min-height: 44px !important; padding: 12px 20px !important; font-family: 'JetBrains Mono', monospace !important; font-size: 0.85rem !important; font-weight: 600 !important; letter-spacing: 0.18em !important; text-transform: uppercase !important; color: rgba(200, 235, 255, 0.95) !important; background: rgba(40, 55, 75, 0.45) !important; border: 1px solid rgba(100, 160, 180, 0.4) !important; border-radius: 100px !important; cursor: pointer; transition: all 0.35s ease; text-align: center; position: relative; overflow: hidden; box-shadow: none !important; justify-content: center; align-items: center; touch-action: manipulation; } .aerosphere-action-btn::before { content: ''; position: absolute; top: 0; left: -100%; width: 100%; height: 100%; background: linear-gradient(90deg, transparent, rgba(100, 200, 190, 0.05), transparent); transition: left 0.6s ease; } .aerosphere-action-btn:hover { color: rgba(240, 255, 255, 1.0) !important; background: rgba(50, 70, 90, 0.55) !important; border-color: rgba(100, 200, 220, 0.6) !important; box-shadow: 0 0 20px rgba(80, 180, 200, 0.25) !important; } .aerosphere-action-btn:hover::before { left: 100%; } .aerosphere-action-btn:active { transform: scale(0.98); background: rgba(60, 85, 105, 0.3) !important; } .aerosphere-action-btn+.aerosphere-action-btn { margin-top: 10px; } .aerosphere-action-status { font-family: 'JetBrains Mono', monospace; font-size: 0.95rem; color: rgba(160, 240, 220, 0.65); letter-spacing: 0.15em; text-transform: uppercase; margin-top: 14px; text-align: center; transition: color 0.3s ease; } /* ========================================================= NODE 4: OVERRIDE CONSOLE — Bottom-Right ========================================================= */ .aerosphere-node-console { position: fixed !important; bottom: 2rem; right: 2rem; width: 320px !important; padding: 20px 24px !important; z-index: 10; animation: aerosphere-fade-in 1s ease-out 1.1s both; } .aerosphere-console-input textarea, .aerosphere-console-input input { width: 100%; padding: 10px 16px !important; font-family: 'JetBrains Mono', monospace !important; font-size: 0.95rem !important; letter-spacing: 0.05em; color: rgba(210, 240, 255, 0.95) !important; background: rgba(15, 25, 40, 0.8) !important; border: 1px solid rgba(100, 160, 180, 0.3) !important; border-radius: 4px !important; outline: none; caret-color: rgba(100, 200, 190, 0.7); transition: all 0.3s ease; box-sizing: border-box; } .aerosphere-console-input textarea::placeholder, .aerosphere-console-input input::placeholder { color: rgba(140, 175, 190, 0.55) !important; font-style: italic; } .aerosphere-console-input textarea:focus, .aerosphere-console-input input:focus { border-color: rgba(100, 180, 200, 0.3) !important; box-shadow: 0 0 15px rgba(80, 160, 180, 0.08), inset 0 0 20px rgba(80, 160, 180, 0.03) !important; background: rgba(15, 25, 40, 0.75) !important; } .aerosphere-console-prompt { font-family: 'JetBrains Mono', monospace; font-size: 0.75rem; color: rgba(140, 240, 220, 0.7); letter-spacing: 0.1em; margin-bottom: 8px; } /* ========================================================= NODE 5: SYSTEM STATUS — Top-Right ========================================================= */ .aerosphere-node-status { position: fixed !important; top: 2rem; right: 2rem; width: 200px !important; padding: 16px 20px !important; z-index: 10; animation: aerosphere-fade-in 1s ease-out 0.4s both; } .aerosphere-node-status .prose, .aerosphere-node-status .markdown-text, .aerosphere-node-status p, .aerosphere-node-status li, .aerosphere-status-row { font-family: 'JetBrains Mono', monospace !important; font-size: 0.85rem !important; letter-spacing: 0.1em !important; text-transform: uppercase !important; color: #ffffff !important; line-height: 1.8 !important; text-shadow: 0 2px 4px rgba(0, 0, 0, 0.8) !important; } .aerosphere-status-row { display: flex !important; justify-content: space-between !important; align-items: center !important; border-bottom: 1px solid rgba(255, 255, 255, 0.05) !important; padding: 6px 0 !important; margin-bottom: 2px !important; } .aerosphere-status-row:last-child { border-bottom: none !important; } .aerosphere-status-label, span.aerosphere-status-label { color: rgba(220, 230, 240, 1.0) !important; font-weight: 500 !important; -webkit-text-fill-color: rgba(220, 230, 240, 1.0) !important; } .aerosphere-status-value, span.aerosphere-status-value { color: rgba(160, 255, 240, 1.0) !important; text-shadow: 0 2px 4px rgba(0, 0, 0, 0.8), 0 0 10px rgba(160, 255, 240, 0.5) !important; font-weight: 600 !important; -webkit-text-fill-color: rgba(160, 255, 240, 1.0) !important; } .aerosphere-status-value.warning, span.aerosphere-status-value.warning { color: rgba(255, 210, 100, 1.0) !important; text-shadow: 0 2px 4px rgba(0, 0, 0, 0.8), 0 0 10px rgba(255, 210, 100, 0.6) !important; -webkit-text-fill-color: rgba(255, 210, 100, 1.0) !important; } .aerosphere-node-status strong { color: rgba(140, 240, 220, 0.95) !important; font-weight: 600 !important; -webkit-text-fill-color: rgba(140, 240, 220, 0.95) !important; } /* ========================================================= HABITABILITY PANEL — Top-Center (Desktop) ========================================================= */ .aerosphere-habitability-panel { position: fixed !important; top: 2rem !important; left: 50% !important; transform: translateX(-50%) !important; display: flex !important; align-items: center !important; justify-content: center !important; z-index: 100 !important; } /* ========================================================= HUD EDGE DECORATIONS ========================================================= */ .aerosphere-edge-top { position: fixed; top: 0; left: 50%; transform: translateX(-50%); width: 300px; height: 1px; background: linear-gradient(90deg, transparent, rgba(100, 180, 200, 0.15), transparent); z-index: 8; } .aerosphere-edge-bottom { position: fixed; bottom: 0; left: 50%; transform: translateX(-50%); width: 500px; height: 1px; background: linear-gradient(90deg, transparent, rgba(100, 180, 200, 0.1), transparent); z-index: 8; } .aerosphere-corner-tl, .aerosphere-corner-tr, .aerosphere-corner-bl, .aerosphere-corner-br { position: fixed; width: 40px; height: 40px; z-index: 8; pointer-events: none; opacity: 0.15; } .aerosphere-corner-tl { top: 8px; left: 8px; border-top: 1px solid rgba(120, 200, 220, 0.5); border-left: 1px solid rgba(120, 200, 220, 0.5); } .aerosphere-corner-tr { top: 8px; right: 8px; border-top: 1px solid rgba(120, 200, 220, 0.5); border-right: 1px solid rgba(120, 200, 220, 0.5); } .aerosphere-corner-bl { bottom: 8px; left: 8px; border-bottom: 1px solid rgba(120, 200, 220, 0.5); border-left: 1px solid rgba(120, 200, 220, 0.5); } .aerosphere-corner-br { bottom: 8px; right: 8px; border-bottom: 1px solid rgba(120, 200, 220, 0.5); border-right: 1px solid rgba(120, 200, 220, 0.5); } /* ========================================================= ANIMATIONS ========================================================= */ @keyframes aerosphere-fade-in { 0% { opacity: 0; transform: translateY(12px); } 100% { opacity: 1; transform: translateY(0); } } @keyframes aerosphere-fade-in-center { 0% { opacity: 0; transform: translateX(-50%) translateY(12px); } 100% { opacity: 1; transform: translateX(-50%) translateY(0); } } @keyframes aerosphere-fade-in-right { 0% { opacity: 0; transform: translateY(calc(-50% + 12px)); } 100% { opacity: 1; transform: translateY(-50%); } } @keyframes aerosphere-ambient-glow { 0%, 100% { opacity: 0.3; } 50% { opacity: 0.5; } } @keyframes aerosphere-nebula-drift { 0% { transform: scale(1) translate(0, 0); opacity: 0.3; } 50% { transform: scale(1.05) translate(1%, -1%); opacity: 0.4; } 100% { transform: scale(1.02) translate(-1%, 1%); opacity: 0.35; } } @keyframes aerosphere-hud-ring { 0% { transform: scale(1); opacity: 0.6; } 100% { transform: scale(1.6); opacity: 0; } } /* ========================================================= UTILITY ========================================================= */ ::selection { background: rgba(100, 200, 190, 0.2); color: rgba(200, 230, 240, 0.9); } * { box-sizing: border-box; } @media (prefers-reduced-motion: reduce) { .aerosphere-nebula-layer, .aerosphere-panel-label::before, .aerosphere-cursor-blink { animation: none !important; } } /* ========================================================= DEEP GRADIO OVERRIDES ========================================================= */ .aerosphere-glass-panel .block, .aerosphere-glass-panel .form, .aerosphere-glass-panel .wrap, .aerosphere-glass-panel .container { background: transparent !important; border: none !important; box-shadow: none !important; padding: 0 !important; } .aerosphere-glass-panel label span { color: rgba(160, 210, 230, 0.65) !important; font-family: 'JetBrains Mono', monospace !important; font-size: 0.75rem !important; } .aerosphere-range-slider .wrap { background: transparent !important; } .aerosphere-range-slider input, .aerosphere-range-slider input[type="number"], .aerosphere-range-slider input[type="text"] { background: transparent !important; color: rgba(180, 240, 255, 1.0) !important; border: none !important; font-family: 'JetBrains Mono', monospace !important; -webkit-text-fill-color: rgba(180, 240, 255, 1.0) !important; } /* ========================================================= EAGER LOADING OVERLAY ========================================================= */ .aerosphere-loading-overlay { position: fixed; inset: 0; background: #000508; z-index: 10000; display: flex; flex-direction: column; justify-content: center; align-items: center; color: #40c0a0; font-family: 'Orbitron', monospace; transition: opacity 1s ease-out; } .aerosphere-loader-spinner { width: 60px; height: 60px; border: 3px solid rgba(64, 192, 160, 0.1); border-top-color: #40c0a0; border-radius: 50%; animation: as-spin 1s linear infinite; margin-bottom: 30px; } .aerosphere-loader-text { font-size: 16px; letter-spacing: 4px; font-weight: 500; text-shadow: 0 0 10px rgba(64, 192, 160, 0.5); margin-bottom: 10px; } .aerosphere-loader-subtext { font-size: 11px; font-family: 'Rajdhani', sans-serif; letter-spacing: 2px; color: #608090; text-transform: uppercase; } @keyframes as-spin { 100% { transform: rotate(360deg); } } /* ========================================================= BADGES ========================================================= */ .aerosphere-status-badge { font-family: 'Rajdhani', sans-serif; font-weight: 700; font-size: 14px; letter-spacing: 2px; color: #00ffaa; display: inline-block; padding: 4px 12px; border: 1px solid rgba(0, 255, 170, 0.4); border-radius: 4px; background: rgba(0, 50, 30, 0.5); box-shadow: 0 0 10px rgba(0, 255, 170, 0.2); margin-right: 12px; text-shadow: 0 0 8px rgba(0, 255, 170, 0.6); } .aerosphere-status-badge.warning { color: #ff3344; border-color: rgba(255, 50, 60, 0.4); background: rgba(50, 0, 0, 0.5); box-shadow: 0 0 10px rgba(255, 50, 60, 0.2); text-shadow: 0 0 8px rgba(255, 50, 60, 0.6); } .aerosphere-tech-badge { font-family: 'Orbitron', monospace; font-weight: 500; font-size: 12px; letter-spacing: 1px; color: #55aaff; display: inline-flex; align-items: center; padding: 4px 10px; border: 1px solid rgba(85, 170, 255, 0.3); border-radius: 4px; background: rgba(0, 20, 50, 0.6); } .aerosphere-action-btn.special-btn { background: linear-gradient(135deg, rgba(80, 20, 150, 0.2) 0%, rgba(200, 50, 250, 0.4) 100%) !important; border: 1px solid rgba(255, 100, 255, 0.6) !important; color: #ffbbee !important; text-shadow: 0 0 8px rgba(255, 100, 255, 0.8) !important; box-shadow: 0 0 15px rgba(200, 50, 250, 0.3), inset 0 0 10px rgba(200, 50, 250, 0.2) !important; transition: all 0.2s ease !important; } .aerosphere-action-btn.special-btn:hover { background: linear-gradient(135deg, rgba(120, 30, 200, 0.3) 0%, rgba(255, 80, 255, 0.6) 100%) !important; box-shadow: 0 0 25px rgba(255, 100, 255, 0.6), inset 0 0 15px rgba(255, 100, 255, 0.4) !important; transform: translateY(-1px) !important; color: #ffffff !important; } /* Hide HUD toggle dynamically based on native CSS breakpoints */ .aerosphere-hud-toggle { display: none !important; } /* ========================================================= MOBILE — ≤ 768px Planet fills screen. HUD hidden behind a toggle button. Toggle button is centered at the bottom, always visible. Desktop is completely untouched. ========================================================= */ @media (max-width: 768px) { /* Lock Gradio */ gradio-app, .gradio-container { position: fixed !important; inset: 0 !important; overflow: hidden !important; height: 100dvh !important; background: transparent !important; } /* Canvas: full-screen, always visible */ .aerosphere-canvas-layer { position: fixed !important; inset: 0 !important; width: 100% !important; height: 100dvh !important; z-index: 0 !important; } /* Atmosphere layers stay full-screen */ .aerosphere-nebula-layer, .aerosphere-scanline-overlay { position: fixed !important; inset: 0 !important; height: 100dvh !important; } /* Kill decorative chrome on mobile */ .aerosphere-reticle, .aerosphere-edge-top, .aerosphere-edge-bottom, .aerosphere-corner-tl, .aerosphere-corner-tr, .aerosphere-corner-bl, .aerosphere-corner-br { display: none !important; } /* Kill desktop-only panels on mobile */ .aerosphere-node-telemetry, .aerosphere-node-status { display: none !important; } /* ------------------------------------------------------- DEFAULT STATE: all HUD panels hidden ------------------------------------------------------- */ .aerosphere-habitability-panel, .aerosphere-body { opacity: 0 !important; visibility: hidden !important; pointer-events: none !important; transition: opacity 0.35s ease, visibility 0.35s ease !important; } /* ------------------------------------------------------- OPEN STATE: body.hud-visible reveals everything ------------------------------------------------------- */ body.hud-visible .aerosphere-habitability-panel { opacity: 1 !important; visibility: visible !important; pointer-events: auto !important; animation: aerosphere-fade-in 0.35s ease 0.05s both !important; } body.hud-visible .aerosphere-body { opacity: 1 !important; visibility: visible !important; pointer-events: auto !important; animation: aerosphere-fade-in 0.35s ease 0.12s both !important; } /* ------------------------------------------------------- TOP STATUS BAR — habitability panel ------------------------------------------------------- */ .aerosphere-habitability-panel { position: fixed !important; inset: 0 auto auto 0 !important; right: 0 !important; transform: none !important; width: 100% !important; max-width: none !important; height: 40px !important; margin: 0 !important; padding: 0 14px !important; display: flex !important; flex-direction: row !important; align-items: center !important; justify-content: space-between !important; gap: 8px !important; background: rgba(3, 7, 16, 0.85) !important; backdrop-filter: blur(20px) saturate(1.3) !important; -webkit-backdrop-filter: blur(20px) saturate(1.3) !important; border-bottom: 1px solid rgba(80, 140, 160, 0.18) !important; border-radius: 0 !important; box-shadow: 0 1px 16px rgba(0, 0, 0, 0.5) !important; z-index: 200 !important; } .aerosphere-habitability-panel .aerosphere-panel-label { font-size: 0.68rem !important; letter-spacing: 0.12em !important; margin-bottom: 0 !important; padding-bottom: 0 !important; border-bottom: none !important; } .aerosphere-status-badge { font-size: 10px !important; padding: 2px 7px !important; letter-spacing: 1.5px !important; margin-right: 4px !important; } .aerosphere-tech-badge { font-size: 10px !important; padding: 2px 6px !important; letter-spacing: 0.5px !important; } /* ------------------------------------------------------- BOTTOM HUD DRAWER — aerosphere-body ------------------------------------------------------- */ .aerosphere-body { position: fixed !important; inset: auto 0 0 0 !important; top: auto !important; width: 100% !important; max-height: 80vh !important; height: auto !important; overflow-y: auto !important; overflow-x: hidden !important; -webkit-overflow-scrolling: touch !important; display: flex !important; flex-direction: column !important; align-items: stretch !important; flex-wrap: nowrap !important; gap: 0 !important; padding: 0 0 calc(env(safe-area-inset-bottom, 8px) + 70px) !important; background: rgba(3, 7, 16, 0.90) !important; backdrop-filter: blur(28px) saturate(1.4) !important; -webkit-backdrop-filter: blur(28px) saturate(1.4) !important; border-top: 1px solid rgba(80, 140, 160, 0.22) !important; box-shadow: 0 -4px 30px rgba(0, 0, 0, 0.6) !important; z-index: 100 !important; } /* Drag handle pill */ .aerosphere-body::before { content: '' !important; display: block !important; width: 32px !important; height: 3px !important; background: rgba(100, 160, 180, 0.28) !important; border-radius: 2px !important; margin: 7px auto 0 !important; flex-shrink: 0 !important; } /* ------------------------------------------------------- ACTION ROW — horizontal scrolling pills ------------------------------------------------------- */ .aerosphere-node-actions { position: static !important; top: auto !important; right: auto !important; transform: none !important; width: 100% !important; padding: 6px 10px 4px !important; background: transparent !important; border: none !important; box-shadow: none !important; backdrop-filter: none !important; -webkit-backdrop-filter: none !important; border-radius: 0 !important; animation: none !important; opacity: 1 !important; order: 1 !important; flex-shrink: 0 !important; } .aerosphere-node-actions .aerosphere-panel-label, .aerosphere-node-actions .aerosphere-action-status { display: none !important; } .aerosphere-node-actions .block, .aerosphere-node-actions .form, .aerosphere-node-actions .wrap, .aerosphere-node-actions>.block>div, .aerosphere-node-actions>.block>.form { display: flex !important; flex-direction: row !important; flex-wrap: nowrap !important; overflow-x: auto !important; overflow-y: hidden !important; gap: 6px !important; padding: 2px 0 6px !important; scrollbar-width: none !important; -ms-overflow-style: none !important; align-items: center !important; background: transparent !important; border: none !important; } .aerosphere-node-actions .block>div::-webkit-scrollbar, .aerosphere-node-actions .form::-webkit-scrollbar { display: none !important; } .aerosphere-action-btn { flex: 0 0 auto !important; width: auto !important; min-width: 90px !important; max-width: 150px !important; min-height: 34px !important; padding: 6px 11px !important; font-size: 0.65rem !important; letter-spacing: 0.07em !important; border-radius: 100px !important; touch-action: manipulation !important; } .aerosphere-action-btn+.aerosphere-action-btn { margin-top: 0 !important; } .aerosphere-node-actions .aerosphere-range-slider, .aerosphere-node-actions input[type="range"], .aerosphere-node-actions .gradio-slider, .aerosphere-node-actions label { display: none !important; } /* ------------------------------------------------------- NARRATIVE PANEL ------------------------------------------------------- */ .aerosphere-node-narrative { position: static !important; bottom: auto !important; left: auto !important; transform: none !important; width: 100% !important; max-height: 45vh !important; overflow-y: auto !important; padding: 6px 14px 8px !important; animation: none !important; opacity: 1 !important; order: 2 !important; flex-shrink: 0 !important; border-top: 1px solid rgba(80, 140, 160, 0.10) !important; border-radius: 0 !important; background: transparent !important; border-left: none !important; border-right: none !important; border-bottom: none !important; box-shadow: none !important; backdrop-filter: none !important; -webkit-backdrop-filter: none !important; } .aerosphere-node-narrative .aerosphere-panel-label { font-size: 0.68rem !important; letter-spacing: 0.15em !important; margin-bottom: 5px !important; padding-bottom: 4px !important; } .aerosphere-node-narrative .prose, .aerosphere-node-narrative .markdown-text, .aerosphere-node-narrative p, .aerosphere-narrative-text { font-size: 0.78rem !important; line-height: 1.55 !important; letter-spacing: 0.01em !important; color: rgba(190, 215, 235, 0.9) !important; } .aerosphere-narrative-timestamp { display: none !important; } /* ------------------------------------------------------- CONSOLE PANEL ------------------------------------------------------- */ .aerosphere-node-console { position: static !important; bottom: auto !important; right: auto !important; transform: none !important; width: 100% !important; padding: 6px 14px 8px !important; animation: none !important; opacity: 1 !important; order: 3 !important; flex-shrink: 0 !important; border-top: 1px solid rgba(80, 140, 160, 0.10) !important; border-radius: 0 !important; background: transparent !important; border-left: none !important; border-right: none !important; border-bottom: none !important; box-shadow: none !important; backdrop-filter: none !important; -webkit-backdrop-filter: none !important; } .aerosphere-node-console .aerosphere-panel-label { display: none !important; } .aerosphere-console-prompt { font-size: 0.68rem !important; margin-bottom: 4px !important; } /* 16px prevents iOS auto-zoom on focus */ .aerosphere-console-input textarea, .aerosphere-console-input input { font-size: 16px !important; min-height: 38px !important; max-height: 64px !important; padding: 7px 12px !important; resize: none !important; } .aerosphere-node-console .aerosphere-action-btn, .aerosphere-console-history, #console-history, .aerosphere-node-console .gr-file { display: none !important; } .aerosphere-loading-overlay { padding-top: env(safe-area-inset-top, 0px); } /* ------------------------------------------------------- HUD TOGGLE BUTTON Centered at bottom, always visible, above everything ------------------------------------------------------- */ .aerosphere-hud-toggle { position: fixed !important; bottom: calc(env(safe-area-inset-bottom, 0px) + 12px) !important; left: 50% !important; right: auto !important; transform: translateX(-50%) !important; z-index: 99999 !important; width: 48px !important; height: 48px !important; border-radius: 50% !important; background: rgba(8, 16, 28, 0.92) !important; backdrop-filter: blur(20px) saturate(1.4) !important; -webkit-backdrop-filter: blur(20px) saturate(1.4) !important; border: 1.5px solid rgba(100, 200, 220, 0.6) !important; cursor: pointer !important; display: flex !important; align-items: center !important; justify-content: center !important; box-shadow: 0 0 0 4px rgba(100, 200, 220, 0.08), 0 0 28px rgba(80, 180, 220, 0.4), 0 6px 24px rgba(0, 0, 0, 0.7) !important; transition: all 0.28s ease !important; touch-action: manipulation !important; overflow: visible !important; padding: 0 !important; margin: 0 !important; isolation: isolate !important; } .aerosphere-hud-toggle:active { transform: translateX(-50%) scale(0.92) !important; } /* Pulse ring when HUD is closed */ .aerosphere-hud-toggle::before { content: '' !important; position: absolute !important; inset: -6px !important; border-radius: 50% !important; border: 1.5px solid rgba(100, 200, 220, 0.3) !important; animation: aerosphere-hud-ring 2.5s ease-out infinite !important; pointer-events: none !important; } body.hud-visible .aerosphere-hud-toggle::before { animation: none !important; opacity: 0 !important; } /* Stronger glow when open */ body.hud-visible .aerosphere-hud-toggle { border-color: rgba(100, 220, 240, 0.9) !important; box-shadow: 0 0 0 4px rgba(100, 200, 220, 0.15), 0 0 40px rgba(100, 200, 220, 0.55), 0 6px 24px rgba(0, 0, 0, 0.7) !important; } /* Icon swap */ .aerosphere-hud-toggle .icon-open { display: flex !important; } .aerosphere-hud-toggle .icon-close { display: none !important; } body.hud-visible .aerosphere-hud-toggle .icon-open { display: none !important; } body.hud-visible .aerosphere-hud-toggle .icon-close { display: flex !important; } } /* ========================================================= LANDSCAPE PHONES (wide + short, e.g. 667×375) ========================================================= */ @media (max-width: 900px) and (orientation: landscape) and (max-height: 500px) { .aerosphere-canvas-layer { height: 100dvh !important; } .aerosphere-body { max-height: 55vh !important; flex-direction: row !important; flex-wrap: wrap !important; align-items: flex-start !important; padding: 0 !important; gap: 0 !important; } .aerosphere-node-actions { flex: 0 0 auto !important; max-width: 55% !important; border-right: 1px solid rgba(80, 140, 160, 0.10) !important; order: 1 !important; } .aerosphere-node-narrative { flex: 1 1 auto !important; max-height: 80px !important; order: 2 !important; } .aerosphere-node-console { flex: 0 0 100% !important; order: 3 !important; } .aerosphere-hud-toggle { bottom: calc(env(safe-area-inset-bottom, 0px) + 14px) !important; left: 50% !important; transform: translateX(-50%) !important; width: 44px !important; height: 44px !important; } }