/* ── Aircraft Cockpit View ─────────────────── */ #cockpit-entry { position: fixed; left: calc(50% + 270px); bottom: 34px; z-index: 151; display: inline-flex; align-items: center; gap: 8px; min-height: 38px; padding: 0 12px; border: 1px solid rgba(0, 220, 255, 0.5); border-radius: 8px; background: rgba(2, 12, 18, 0.9); color: #dceeff; font: 600 10px/1 var(--font-mono); letter-spacing: 0.14em; box-shadow: 0 0 18px rgba(0, 220, 255, 0.14); cursor: pointer; } #cockpit-entry[hidden], #cockpit-hud[hidden] { display: none; } #cockpit-entry:hover, #cockpit-entry:focus-visible { border-color: #00dcff; color: #fff; outline: none; } #cockpit-entry .material-symbols-outlined { color: #00dcff; font-size: 18px; } #cockpit-entry kbd { padding: 3px 5px; border: 1px solid rgba(220, 238, 255, 0.25); border-radius: 4px; color: rgba(220, 238, 255, 0.6); font: inherit; } #cockpit-hud { --cockpit-accent: #00dcff; /* Matches EMERGENCY_TINT_CSS in src/data/aircraftEmergency.js. */ --cockpit-emergency: #ff4444; --cockpit-side-panel-width: min(340px, 28vw); /* HUD bottom offset + tallest scaled telemetry block + 20px clear border. */ --cockpit-bottom-rail-safe: calc(clamp(84px, 11vh, 118px) + 100px); position: fixed; inset: 0; z-index: 145; overflow: hidden; pointer-events: none; color: #f4fbff; font-family: var(--font-mono); text-shadow: 0 0 10px color-mix(in srgb, var(--cockpit-accent) 60%, transparent), 0 1px 2px #000; perspective: 920px; } #cockpit-hud[data-layer='military'] { --cockpit-accent: #ffb800; } .cockpit-visor-shell { position: absolute; inset: clamp(62px, 9vh, 90px) clamp(18px, 3vw, 48px) clamp(38px, 5vh, 56px); transform-style: preserve-3d; perspective: 880px; } .cockpit-roll-arc { position: absolute; top: 2px; left: 50%; width: min(620px, 56vw); height: 96px; transform: translateX(-50%) rotateX(-8deg); transform-style: preserve-3d; } .cockpit-roll-arc::after { content: ''; position: absolute; inset: 18px 6% 0; border-top: 1px solid color-mix(in srgb, var(--cockpit-accent) 62%, transparent); border-radius: 50%; opacity: 0.72; } .cockpit-roll-arc span { position: absolute; left: 50%; top: 0; color: rgba(244, 251, 255, 0.46); font-size: 8px; letter-spacing: 0.1em; transform: translateX(calc(-50% + (var(--slot) * 74px))) translateY(calc(var(--depth) * 9px)) rotateZ(calc(var(--slot) * 4deg)) rotateY(calc(var(--slot) * -5deg)); } .cockpit-roll-arc span::after { content: ''; display: block; width: 1px; height: calc(11px + (3 - var(--depth)) * 2px); margin: 5px auto 0; background: color-mix(in srgb, var(--cockpit-accent) 62%, transparent); } .cockpit-roll-arc span.active { color: #fff; font-size: 10px; } .cockpit-pitch-rail { position: absolute; top: 25%; bottom: 21%; display: grid; grid-template-rows: repeat(5, 1fr); align-items: center; color: rgba(244, 251, 255, 0.38); font-size: 8px; letter-spacing: 0.08em; transform-style: preserve-3d; } .cockpit-pitch-rail-left { left: clamp(190px, 22vw, 330px); text-align: right; transform: rotateY(24deg) translateZ(-18px); } .cockpit-pitch-rail-right { right: clamp(190px, 22vw, 330px); text-align: left; transform: rotateY(-24deg) translateZ(-18px); } body.cockpit-mode:has(#left-panel-stack > .panel-collapsible:not(.collapsed)) .cockpit-pitch-rail-left { opacity: 0; transition: opacity 0.25s; } .cockpit-pitch-rail span { display: flex; align-items: center; gap: 7px; } .cockpit-pitch-rail-left span { justify-content: flex-end; } .cockpit-pitch-rail span::after { content: ''; width: 24px; border-top: 1px solid color-mix(in srgb, var(--cockpit-accent) 46%, transparent); } .cockpit-pitch-rail-right span::after { order: -1; } .cockpit-pitch-rail span.active { color: var(--cockpit-accent); } .cockpit-pitch-rail span.active::after { width: 42px; border-color: var(--cockpit-accent); } .cockpit-horizon-guide { position: absolute; top: 46%; left: 50%; display: grid; grid-template-columns: minmax(74px, 190px) auto minmax(74px, 190px); align-items: center; gap: 16px; width: min(470px, 42vw); transform: translate(-50%, -50%) translateZ(22px); color: color-mix(in srgb, var(--cockpit-accent) 72%, white); } .cockpit-horizon-guide span { border-top: 1px solid currentColor; } .cockpit-horizon-guide span:first-child { transform: rotateZ(2deg); transform-origin: right; } .cockpit-horizon-guide span:last-child { transform: rotateZ(-2deg); transform-origin: left; } .cockpit-horizon-guide small { font-size: 7px; letter-spacing: 0.16em; } .cockpit-route-direction { --route-angle: 0deg; position: absolute; z-index: 3; /* Keep the cue in one predictable center slot. Its rotation communicates relative destination bearing; lateral movement made it look like a random scene arrow and allowed it to collide with the speed/heading readouts. */ top: 62%; left: 50%; display: grid; justify-items: center; gap: 5px; color: color-mix(in srgb, var(--cockpit-accent) 24%, #79b8ff); opacity: 0.84; transform: translate(-50%, -50%) translateZ(24px); transition: opacity 180ms ease; filter: drop-shadow( 0 0 8px color-mix(in srgb, var(--cockpit-accent) 34%, transparent) ); } .cockpit-route-direction[hidden] { display: none; } .cockpit-route-direction .cockpit-route-chevron { display: block; width: clamp(56px, 6vw, 78px); height: clamp(56px, 6vw, 78px); overflow: visible; color: color-mix(in srgb, var(--cockpit-accent) 28%, #79b8ff); fill: currentColor; stroke: color-mix(in srgb, var(--cockpit-accent) 58%, #d8f3ff); stroke-width: 0.7px; stroke-linejoin: round; filter: drop-shadow(0 0 4px rgba(213, 242, 255, 0.68)) drop-shadow(0 5px 6px rgba(0, 53, 102, 0.5)); /* Present the direction cue on the apparent ground plane while its parent remains locked to the same fixed HUD position. */ transform: perspective(220px) rotateX(62deg) rotateZ(var(--route-angle)) scaleY(1.35); transform-origin: center; transition: transform 180ms ease; } .cockpit-route-direction small { padding: 2px 5px; border: 1px solid color-mix(in srgb, var(--cockpit-accent) 20%, transparent); border-radius: 3px; background: rgba(0, 7, 12, 0.24); font-size: 7px; text-align: center; letter-spacing: 0.14em; white-space: nowrap; } .cockpit-altitude-rim { --cockpit-keyhole-radius: min(40vw, 52vh); position: absolute; z-index: 2; top: calc(50vh - var(--cockpit-keyhole-radius) + 20px); right: calc(50vw - var(--cockpit-keyhole-radius) + 20px); bottom: auto; width: 230px; height: calc((var(--cockpit-keyhole-radius) - 20px) * 2); overflow: hidden; color: var(--cockpit-accent); opacity: 0.9; } .cockpit-altitude-rim-label { position: absolute; top: 20%; right: calc(12px + (0.2 * (var(--cockpit-keyhole-radius) - 20px))); color: color-mix(in srgb, var(--cockpit-accent) 82%, white); font-size: 7px; font-weight: 700; letter-spacing: 0.18em; white-space: nowrap; } .cockpit-altitude-rim-rail { position: absolute; inset: 0; overflow: hidden; -webkit-mask-image: linear-gradient( to bottom, transparent 0%, rgba(0, 0, 0, 0.04) 10%, rgba(0, 0, 0, 0.28) 24%, #000 42%, #000 58%, rgba(0, 0, 0, 0.28) 76%, rgba(0, 0, 0, 0.04) 90%, transparent 100% ); mask-image: linear-gradient( to bottom, transparent 0%, rgba(0, 0, 0, 0.04) 10%, rgba(0, 0, 0, 0.28) 24%, #000 42%, #000 58%, rgba(0, 0, 0, 0.28) 76%, rgba(0, 0, 0, 0.04) 90%, transparent 100% ); } .cockpit-altitude-rim-rail::before { content: ''; position: absolute; top: 0; right: 0; box-sizing: border-box; width: calc((var(--cockpit-keyhole-radius) - 20px) * 2); height: calc((var(--cockpit-keyhole-radius) - 20px) * 2); border: 2px solid color-mix(in srgb, var(--cockpit-accent) 72%, transparent); border-radius: 50%; box-shadow: 5px 0 18px color-mix(in srgb, var(--cockpit-accent) 18%, transparent); } .cockpit-altitude-rim-scale { position: absolute; inset: 0; overflow: hidden; -webkit-mask-image: linear-gradient( to bottom, transparent 0%, rgba(0, 0, 0, 0.03) 9%, rgba(0, 0, 0, 0.22) 23%, #000 41%, #000 59%, rgba(0, 0, 0, 0.22) 77%, rgba(0, 0, 0, 0.03) 91%, transparent 100% ); mask-image: linear-gradient( to bottom, transparent 0%, rgba(0, 0, 0, 0.03) 9%, rgba(0, 0, 0, 0.22) 23%, #000 41%, #000 59%, rgba(0, 0, 0, 0.22) 77%, rgba(0, 0, 0, 0.03) 91%, transparent 100% ); } .cockpit-altitude-rim-scale > span { position: absolute; top: calc(50% + (var(--slot) * 8%)); right: calc(7px + (var(--curve) * (var(--cockpit-keyhole-radius) - 20px))); display: flex; align-items: center; gap: 6px; color: rgba(244, 251, 255, 0.68); transform: translateY(-50%) rotateZ(calc(var(--slot) * -1.7deg)); transform-origin: right center; transition: top 120ms linear, right 120ms linear, transform 120ms linear; } .cockpit-altitude-rim-scale > span i { order: 2; display: block; width: 20px; border-top: 1px solid color-mix(in srgb, var(--cockpit-accent) 58%, transparent); } .cockpit-altitude-rim-scale > span b { min-width: 46px; padding: 1px 3px; border-radius: 2px; background: rgba(0, 7, 12, 0.28); font-size: 8px; font-weight: 500; letter-spacing: 0.08em; text-align: right; } .cockpit-altitude-rim-scale > span.major { color: rgba(244, 251, 255, 0.9); } .cockpit-altitude-rim-scale > span.major i { width: 32px; border-color: color-mix(in srgb, var(--cockpit-accent) 86%, transparent); } .cockpit-altitude-rim-pointer { position: absolute; top: 50%; right: 0; display: flex; align-items: center; color: #fff; transform: translateY(-50%); text-shadow: 0 0 12px var(--cockpit-accent); } .cockpit-altitude-rim-pointer strong { min-width: 48px; font-size: 10px; font-weight: 700; letter-spacing: 0.06em; text-align: right; } .cockpit-altitude-rim-pointer .material-symbols-outlined { margin-left: 4px; color: var(--cockpit-accent); font-size: 24px; font-variation-settings: 'FILL' 1, 'wght' 600; animation: cockpit-altitude-pointer 1.8s ease-in-out infinite; } @keyframes cockpit-altitude-pointer { 50% { transform: translateX(-3px); filter: brightness(1.35); } } .cockpit-altitude-rim.unavailable { opacity: 0.24; } .cockpit-speed-rim { --speed-tape-inset: clamp(112px, 9vw, 148px); right: auto; left: calc(50vw - var(--cockpit-keyhole-radius) + 20px); width: 300px; } .cockpit-speed-rim .cockpit-altitude-rim-label { right: auto; left: var(--speed-tape-inset); } .cockpit-speed-rim .cockpit-altitude-rim-rail::before { right: auto; left: 0; box-shadow: -5px 0 18px color-mix(in srgb, var(--cockpit-accent) 18%, transparent); } .cockpit-speed-rim .cockpit-altitude-rim-scale > span { right: auto; left: calc(1px + (var(--curve) * (var(--cockpit-keyhole-radius) - 20px))); flex-direction: row-reverse; /* Speed rises toward the top of the tape; altitude intentionally runs the opposite way on the mirrored right-hand ruler. */ top: calc(50% - (var(--slot) * 8%)); transform: translateY(-50%) rotateZ(calc(var(--slot) * 1.7deg)); transform-origin: left center; } .cockpit-speed-rim .cockpit-altitude-rim-scale > span b { text-align: left; } .cockpit-speed-rim .cockpit-altitude-rim-pointer { right: auto; left: 0; } .cockpit-speed-rim .cockpit-altitude-rim-pointer strong { text-align: left; } .cockpit-speed-rim .cockpit-altitude-rim-pointer .material-symbols-outlined { margin-right: 4px; margin-left: 0; animation-name: cockpit-speed-pointer; } @keyframes cockpit-speed-pointer { 50% { transform: translateX(3px); filter: brightness(1.35); } } .cockpit-visor-status { position: absolute; bottom: 3px; color: color-mix(in srgb, var(--cockpit-accent) 54%, transparent); font-size: 7px; letter-spacing: 0.22em; } .cockpit-visor-status-left { left: clamp(110px, 15vw, 220px); transform: rotateY(22deg); } .cockpit-visor-status-right { right: clamp(110px, 15vw, 220px); transform: rotateY(-22deg); } .cockpit-topline { position: absolute; z-index: 5; top: clamp(18px, 3vh, 34px); left: clamp(22px, 4vw, 58px); right: clamp(22px, 4vw, 58px); display: grid; grid-template-columns: 1fr auto 1fr; align-items: start; gap: 24px; } .cockpit-topline > div:first-child { display: flex; flex-direction: column; gap: 4px; } .cockpit-kicker, .cockpit-readout-label { color: var(--cockpit-accent); font-size: 9px; font-weight: 600; letter-spacing: 0.22em; } #cockpit-callsign { font-size: 18px; letter-spacing: 0.12em; } .cockpit-aircraft-meta { color: rgba(244, 251, 255, 0.48); font-size: 7px; letter-spacing: 0.16em; } .cockpit-aircraft-meta.emergency { color: var(--cockpit-emergency); font-weight: 600; } .cockpit-mode-chip { margin-top: 2px; padding: 7px 11px; border: 1px solid color-mix(in srgb, var(--cockpit-accent) 45%, transparent); border-radius: 20px; background: rgba(0, 7, 12, 0.62); color: var(--cockpit-accent); font-size: 9px; font-weight: 600; letter-spacing: 0.16em; } .cockpit-live-dot { display: inline-block; width: 5px; height: 5px; margin-right: 6px; border-radius: 50%; background: var(--cockpit-accent); box-shadow: 0 0 8px var(--cockpit-accent); animation: cockpit-live 1.6s ease-in-out infinite; } @keyframes cockpit-live { 50% { opacity: 0.35; } } .cockpit-readout { position: relative; display: grid; min-width: 118px; padding: 6px 10px 7px; border-top: 1px solid color-mix(in srgb, var(--cockpit-accent) 50%, transparent); border-bottom: 1px solid color-mix(in srgb, var(--cockpit-accent) 18%, transparent); background: linear-gradient( 90deg, transparent, rgba(0, 7, 12, 0.34), transparent ); transform-style: preserve-3d; } .cockpit-speed { justify-self: end; text-align: right; transform: perspective(760px) rotateY(10deg) translateZ(-5px); transform-origin: right center; } .cockpit-altitude { justify-self: start; text-align: left; transform: perspective(760px) rotateY(-10deg) translateZ(-5px); transform-origin: left center; } .cockpit-readout strong { margin-top: 1px; font-size: clamp(30px, 3.6vw, 48px); font-weight: 500; line-height: 0.98; letter-spacing: -0.06em; white-space: nowrap; } .cockpit-roll-token { position: relative; display: inline-block; min-width: 0.56em; height: 1em; overflow: hidden; line-height: 1; text-align: center; vertical-align: -0.08em; } /* Grouping and decimal separators (a space or comma in Spanish and Russian) get a narrow cell; English keeps the full 0.56em cell. */ html:not([lang='en']) .cockpit-roll-token.is-separator { min-width: 0.3em; } .cockpit-roll-token.is-rolling { color: color-mix(in srgb, currentColor 92%, var(--cockpit-accent)); text-shadow: 0 0 10px color-mix(in srgb, var(--cockpit-accent) 35%, transparent); } .cockpit-roll-track { display: flex; flex-direction: column; height: 2em; will-change: transform; } .cockpit-roll-track > span { display: block; flex: 0 0 1em; height: 1em; line-height: 1; } .cockpit-roll-token.roll-up .cockpit-roll-track { animation: cockpit-number-roll-up 200ms cubic-bezier(0.2, 0.75, 0.25, 1) both; } .cockpit-roll-token.roll-down .cockpit-roll-track { animation: cockpit-number-roll-down 200ms cubic-bezier(0.2, 0.75, 0.25, 1) both; } @keyframes cockpit-number-roll-up { from { transform: translateY(0); } to { transform: translateY(-1em); } } @keyframes cockpit-number-roll-down { from { transform: translateY(-1em); } to { transform: translateY(0); } } @media (prefers-reduced-motion: reduce) { .cockpit-roll-token .cockpit-roll-track { animation-duration: 1ms; } } .cockpit-readout-unit { margin-top: 2px; color: rgba(244, 251, 255, 0.7); font-size: 11px; font-weight: 600; letter-spacing: 0.2em; } .cockpit-reticle { position: absolute; top: 46%; left: 50%; transform: translate(-50%, -50%) translateZ(34px); color: var(--cockpit-accent); font-size: clamp(30px, 3vw, 44px); font-variation-settings: 'wght' 200; opacity: 0.8; } .cockpit-compass { position: absolute; left: 50%; bottom: clamp(44px, 7vh, 72px); width: min(760px, 72vw); transform: translateX(-50%) rotateX(7deg) translateZ(18px); transform-style: preserve-3d; perspective: 760px; text-align: center; } .cockpit-instrument-row { display: grid; grid-template-columns: minmax(118px, 1fr) auto minmax(118px, 1fr); align-items: center; gap: clamp(18px, 3vw, 42px); } .cockpit-heading-value { min-width: 74px; font-size: 34px; font-weight: 600; line-height: 1; white-space: nowrap; } .cockpit-heading-value small { color: var(--cockpit-accent); font-size: 12px; } .cockpit-heading-caret { display: block; height: 20px; color: var(--cockpit-accent); font-size: 28px; line-height: 20px; } .cockpit-compass-tape { position: relative; height: 74px; margin-top: -2px; transform-style: preserve-3d; } .cockpit-compass-tape::before { content: ''; position: absolute; inset: 10px 2% 0; border-top: 1px solid color-mix(in srgb, var(--cockpit-accent) 78%, transparent); border-radius: 50%; background: rgba(0, 7, 12, 0.16); } .cockpit-compass-tape span { position: absolute; top: 8px; left: 50%; color: rgba(244, 251, 255, 0.52); font-size: 12px; letter-spacing: 0.12em; transform: translateX(calc(-50% + (var(--slot) * 86px))) translateY(calc(var(--depth) * 8px)) rotateZ(calc(var(--slot) * 3.6deg)) rotateY(calc(var(--slot) * -9deg)); } .cockpit-compass-tape span::before { content: ''; display: block; width: 1px; height: calc(17px - (var(--depth) * 2px)); margin: 0 auto 7px; background: color-mix(in srgb, var(--cockpit-accent) 70%, transparent); } .cockpit-compass-tape span.active { color: #fff; font-size: 18px; font-weight: 700; text-shadow: 0 0 14px var(--cockpit-accent); } .cockpit-position-readout { position: absolute; right: clamp(24px, 4vw, 58px); bottom: clamp(22px, 4vh, 42px); display: flex; flex-direction: column; align-items: flex-end; gap: 4px; color: rgba(244, 251, 255, 0.72); font-size: 10px; letter-spacing: 0.1em; } .cockpit-vision-controls { display: grid; /* The current style grows for a long translated name (ЗВИЧАЙНИЙ). */ grid-template-columns: 48px minmax(58px, max-content) 48px; align-items: stretch; gap: 2px; margin-top: 2px; padding: 2px; border: 1px solid color-mix(in srgb, var(--cockpit-accent) 22%, transparent); border-radius: 7px; background: rgba(0, 7, 12, 0.46); box-shadow: inset 0 0 14px rgba(0, 0, 0, 0.28); pointer-events: auto; } .cockpit-vision-controls button { display: flex; min-width: 0; min-height: 31px; align-items: center; justify-content: center; gap: 1px; padding: 4px 5px; border: 1px solid transparent; border-radius: 5px; background: rgba(0, 7, 12, 0.38); color: rgba(244, 251, 255, 0.64); font: 700 7px/1 var(--font-mono); letter-spacing: 0.08em; cursor: pointer; } .cockpit-vision-controls button:hover, .cockpit-vision-controls button:focus-visible { border-color: color-mix(in srgb, var(--cockpit-accent) 62%, transparent); color: #fff; outline: none; } .cockpit-vision-controls .material-symbols-outlined { font-size: 14px; } .cockpit-vision-controls small { font: 700 6px/1 var(--font-mono); letter-spacing: 0.1em; } .cockpit-vision-current { flex-direction: column; } .cockpit-vision-current small { color: color-mix(in srgb, var(--cockpit-accent) 70%, #fff); } .cockpit-vision-current strong { color: #fff; font: 700 9px/1 var(--font-mono); letter-spacing: 0.12em; } .cockpit-vision-controls .cockpit-vision-current { border-color: var(--cockpit-accent); background: color-mix( in srgb, var(--cockpit-accent) 10%, rgba(0, 7, 12, 0.72) ); box-shadow: 0 0 10px color-mix(in srgb, var(--cockpit-accent) 30%, transparent); } .cockpit-route-card { display: grid; gap: 8px; min-width: 0; padding: 2px 6px 10px 8px; border-bottom: 1px solid color-mix(in srgb, var(--cockpit-accent) 22%, transparent); color: rgba(224, 247, 255, 0.9); font: 7px/1.25 var(--font-mono); letter-spacing: 0.09em; } .cockpit-route-card[hidden] { display: none; } .cockpit-route-heading { display: flex; min-width: 0; align-items: center; justify-content: space-between; gap: 8px; } .cockpit-route-kicker { flex: 0 0 auto; color: var(--cockpit-accent); font-size: 7px; font-weight: 700; letter-spacing: 0.16em; } .cockpit-route-heading small { overflow: hidden; color: color-mix( in srgb, var(--cockpit-accent) 68%, rgba(244, 251, 255, 0.46) ); font-size: 5px; letter-spacing: 0.08em; text-overflow: ellipsis; white-space: nowrap; } .cockpit-route-endpoints { display: grid; grid-template-columns: minmax(0, 1fr) 18px minmax(0, 1fr); align-items: center; gap: 7px; } .cockpit-route-airport { display: grid; min-width: 0; gap: 3px; padding: 6px 7px; border-left: 1px solid color-mix(in srgb, var(--cockpit-accent) 52%, transparent); background: rgba(0, 7, 12, 0.3); } .cockpit-route-airport > span { color: color-mix(in srgb, var(--cockpit-accent) 76%, white); font-size: 6px; font-weight: 700; letter-spacing: 0.14em; } .cockpit-route-airport strong { overflow: hidden; color: #fff; font-size: 8px; letter-spacing: 0.06em; text-overflow: ellipsis; white-space: nowrap; } .cockpit-route-arrow { color: var(--cockpit-accent); font-size: 15px; text-align: center; } #view-switcher { position: fixed; z-index: 146; right: 36px; bottom: calc(2vh + 4.5rem); display: grid; gap: 6px; } #view-switcher button { display: inline-flex; align-items: center; justify-content: center; gap: 6px; min-height: 32px; padding: 7px 10px; border: 1px solid rgba(116, 219, 255, 0.38); border-radius: 6px; background: rgba(2, 12, 20, 0.82); color: #bceeff; font: 700 8px/1 var(--font-mono); letter-spacing: 0.12em; cursor: pointer; box-shadow: 0 0 18px rgba(0, 0, 0, 0.24); } #view-switcher button[hidden] { display: none; } #view-switcher button:hover, #view-switcher button:focus-visible { border-color: #fff; color: #fff; outline: none; } #view-switcher .material-symbols-outlined { font-size: 16px; } body.cockpit-mode #view-switcher { right: auto; bottom: max(clamp(128px, 15vh, 150px), env(safe-area-inset-bottom)); display: flex; max-width: calc(100vw - 24px); align-items: center; justify-content: center; margin-bottom: -95px; left: 50%; transform: translateX(-50%); } body.cockpit-mode #view-switcher button { flex: 0 1 auto; min-width: 0; min-height: 28px; padding: 6px 11px; border-radius: 999px; background: rgba(0, 7, 12, 0.74); white-space: nowrap; } .cockpit-context-window { position: absolute; z-index: 4; top: auto; left: var(--cockpit-context-left, clamp(24px, 4vw, 58px)); bottom: var(--cockpit-bottom-rail-safe); display: grid; gap: 7px; width: var(--cockpit-side-panel-width); max-height: min(42vh, 410px); overflow-x: hidden; overflow-y: auto; box-sizing: border-box; padding: 11px 12px 10px; border: 1px solid color-mix(in srgb, var(--cockpit-accent) 30%, transparent); border-top-color: color-mix(in srgb, var(--cockpit-accent) 64%, transparent); border-radius: 8px 24px 24px 8px; background: rgba(0, 7, 12, 0.68); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.04), 0 0 28px rgba(0, 0, 0, 0.26); transform: perspective(900px) rotateY(4deg) translateZ(18px); transform-origin: left center; transform-style: preserve-3d; pointer-events: auto; text-shadow: 0 0 8px color-mix(in srgb, var(--cockpit-accent) 45%, transparent); scrollbar-color: color-mix(in srgb, var(--cockpit-accent) 45%, transparent) transparent; scrollbar-width: thin; transition: width 180ms ease, background-color 180ms ease, border-radius 180ms ease; } #cockpit-context[hidden] { display: none; } .cockpit-context-window[data-state='uncertain'] { border-top-color: rgba(116, 219, 255, 0.72); } /* CONTACT LOST reuses the amber the app already spends on unknown/stale inputs (.cockpit-context-cohorts > div.unknown, .cockpit-brief-status[data-state="unavailable"]), so a held last-known readout never reads as a live one. */ .cockpit-context-window[data-state='lost'] { border-top-color: rgba(213, 168, 99, 0.72); } /* The Cockpit cards' headers (Contact, the briefing) share their frame: a title column over a hairline, a kicker in the accent, and a row of square actions. Each card sets only its spacing and sizes. */ .cockpit-card-header { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; border-bottom: 1px solid color-mix(in srgb, var(--cockpit-accent) 22%, transparent); } .cockpit-card-header > div { display: grid; gap: 2px; } .cockpit-card-kicker { color: var(--cockpit-accent); font-weight: 700; } .cockpit-card-actions { display: flex; } .cockpit-card-actions button { display: grid; height: 24px; place-items: center; padding: 0; border: 1px solid color-mix(in srgb, var(--cockpit-accent) 30%, transparent); border-radius: 5px; background: rgba(0, 7, 12, 0.72); color: color-mix(in srgb, var(--cockpit-accent) 82%, white); cursor: pointer; } .cockpit-card-actions button:hover, .cockpit-card-actions button:focus-visible { border-color: var(--cockpit-accent); color: #fff; outline: none; } .cockpit-context-header { gap: 5px 10px; padding: 0 5px 7px; } .cockpit-context-kicker { font-size: 8px; letter-spacing: 0.2em; } #cockpit-context-subject { color: #fff; font-size: 10px; font-weight: 600; letter-spacing: 0.12em; } .cockpit-context-qualifier { grid-column: 1 / -1; justify-self: start; color: rgba(116, 219, 255, 0.82); font-size: 7px; letter-spacing: 0.16em; white-space: nowrap; } .cockpit-context-weather { display: inline-flex; min-width: 48px; height: 20px; align-items: center; justify-content: center; gap: 5px; padding: 0 7px; border: 1px solid color-mix(in srgb, var(--cockpit-accent) 46%, transparent); border-radius: 999px; background: color-mix( in srgb, var(--cockpit-accent) 8%, rgba(0, 7, 12, 0.78) ); color: color-mix(in srgb, var(--cockpit-accent) 82%, white); font: 700 6px/1 var(--font-mono); letter-spacing: 0.1em; cursor: pointer; } .cockpit-context-weather strong { color: #fff; font: inherit; } .cockpit-context-weather[aria-pressed='false'] { border-color: rgba(244, 251, 255, 0.15); background: rgba(0, 7, 12, 0.54); color: rgba(244, 251, 255, 0.42); } .cockpit-context-weather[aria-pressed='false'] strong { color: rgba(244, 251, 255, 0.5); } .cockpit-context-weather:hover, .cockpit-context-weather:focus-visible { border-color: var(--cockpit-accent); color: #fff; outline: none; } .cockpit-context-actions { gap: 4px; } .cockpit-context-actions button { width: 28px; } .cockpit-context-actions button:disabled { border-color: rgba(244, 251, 255, 0.1); color: rgba(244, 251, 255, 0.2); cursor: default; } .cockpit-context-actions .material-symbols-outlined { font-size: 15px; } .cockpit-context-cohorts { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 6px; } .cockpit-context-cohorts > div { display: grid; grid-template-columns: auto 1fr; align-items: baseline; gap: 3px 8px; min-width: 0; padding: 6px 9px; border-inline-start: 1px solid color-mix(in srgb, var(--cockpit-accent) 40%, transparent); background: rgba(0, 7, 12, 0.34); } .cockpit-context-cohorts span { color: var(--cockpit-accent); font-size: 8px; font-weight: 700; letter-spacing: 0.14em; } .cockpit-context-cohorts strong { justify-self: end; color: #fff; font-size: 17px; font-weight: 600; } .cockpit-context-cohorts small { grid-column: 1 / -1; overflow: hidden; color: rgba(244, 251, 255, 0.4); font-size: 6px; letter-spacing: 0.05em; text-overflow: ellipsis; white-space: nowrap; } .cockpit-context-cohorts > div.unknown { border-inline-start-color: rgba(213, 168, 99, 0.58); } .cockpit-context-cohorts > div.unknown strong { color: #d5a863; } .cockpit-context-nearest { display: grid; grid-template-columns: 22px minmax(0, 1fr) auto; grid-template-rows: auto auto; align-items: center; gap: 2px 8px; padding: 3px 5px 2px; } #cockpit-context-direction { grid-row: 1 / 3; color: var(--cockpit-accent); font-size: 22px; transform-origin: 50% 50%; transition: transform 180ms ease-out; } #cockpit-context-direction.unknown { opacity: 0.3; } .cockpit-context-nearest > div { grid-column: 2; grid-row: 1; display: grid; gap: 2px; min-width: 0; } .cockpit-context-nearest small { color: rgba(244, 251, 255, 0.42); font-size: 6px; letter-spacing: 0.12em; } #cockpit-context-nearest-label { overflow: hidden; color: #fff; font-size: 9px; letter-spacing: 0.1em; text-overflow: ellipsis; white-space: nowrap; } #cockpit-context-bearing, #cockpit-context-distance { color: var(--cockpit-accent); font-size: 10px; font-weight: 700; letter-spacing: 0.08em; white-space: nowrap; } #cockpit-context-bearing { grid-column: 2; grid-row: 2; justify-self: start; } #cockpit-context-distance { grid-column: 3; grid-row: 1 / 3; } #cockpit-context-distance { color: #fff; } .cockpit-context-footer { display: grid; grid-template-columns: minmax(0, 1fr) auto auto; align-items: center; gap: 8px; padding: 6px 8px 0; border-top: 1px solid rgba(244, 251, 255, 0.08); color: rgba(244, 251, 255, 0.4); font-size: 6px; letter-spacing: 0.11em; } .cockpit-context-window[data-state='uncertain'] #cockpit-context-uncertainty { color: #74dbff; } .cockpit-context-window[data-state='lost'] #cockpit-context-uncertainty { color: #d5a863; font-weight: 600; } /* The held values are last-known, not current — dim them to match the cue. */ .cockpit-context-window[data-state='lost'] :is(.cockpit-context-cohorts, .cockpit-context-nearest) { opacity: 0.55; } #cockpit-hud.context-active .cockpit-pitch-rail-left { opacity: 0.16; transition: opacity 180ms ease; } .cockpit-context-window[data-layout-mode='rail-left-constrained'] { gap: 5px; padding-top: 8px; padding-bottom: 8px; } .cockpit-context-window[data-collapsed='true'] { width: min(248px, 22vw); max-height: none; gap: 0; padding: 9px 10px; border-radius: 7px 18px 18px 7px; background: rgba(0, 7, 12, 0.54); } .cockpit-context-window[data-collapsed='true'] .cockpit-context-header { gap: 8px; padding: 0; border-bottom: 0; } .cockpit-context-window[data-collapsed='true'] :is( .cockpit-context-qualifier, .cockpit-context-cohorts, .cockpit-context-nearest, .cockpit-context-footer, .cockpit-context-actions button:not(#cockpit-context-toggle) ) { display: none; } .cockpit-context-window[data-collapsed='true'] #cockpit-context-subject { font-size: 8px; letter-spacing: 0.08em; } #cockpit-hud.signals-active .cockpit-pitch-rail-right { opacity: 0.16; transition: opacity 180ms ease; } .cockpit-signal-window { position: absolute; z-index: 3; top: auto; right: var(--cockpit-signal-right, clamp(24px, 4vw, 58px)); bottom: var(--cockpit-bottom-rail-safe); display: grid; gap: 7px; width: var(--cockpit-side-panel-width); max-height: min(42vh, 410px); overflow-x: hidden; overflow-y: auto; box-sizing: border-box; padding: 11px 12px 9px; border: 1px solid color-mix(in srgb, var(--cockpit-accent) 30%, transparent); border-top-color: color-mix(in srgb, var(--cockpit-accent) 64%, transparent); border-radius: 24px 8px 8px 24px; background: rgba(0, 7, 12, 0.68); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.04), 0 0 28px rgba(0, 0, 0, 0.26); transform: perspective(900px) rotateY(-4deg) translateZ(18px); transform-origin: right center; pointer-events: auto; text-shadow: 0 0 8px color-mix(in srgb, var(--cockpit-accent) 45%, transparent); scrollbar-color: color-mix(in srgb, var(--cockpit-accent) 45%, transparent) transparent; scrollbar-width: thin; transition: width 180ms ease, background-color 180ms ease, border-radius 180ms ease; } #cockpit-signal-stream[hidden] { display: none; } .cockpit-utility-controls { position: absolute; z-index: 5; top: var( --cockpit-utility-top, var(--left-stack-safe-top, var(--left-stack-top)) ); right: clamp(24px, 4vw, 58px); bottom: auto; display: flex; flex-direction: column; align-items: flex-end; justify-content: flex-end; gap: 7px; pointer-events: auto; } .cockpit-utility-control { position: relative; } .cockpit-utility-control.is-expanded { width: 272px; box-sizing: border-box; padding: 8px; border: 1px solid var(--glass-border); border-radius: var(--panel-radius); background: var(--glass-bg); box-shadow: 0 8px 32px rgba(0, 0, 0, 0.5), inset 0 1px 0 rgba(255, 255, 255, 0.05); backdrop-filter: blur(24px) saturate(1.4); -webkit-backdrop-filter: blur(24px) saturate(1.4); max-height: var( --cockpit-utility-expanded-max-height, var(--cockpit-utility-max-height, min(44vh, 430px)) ); overflow-y: auto; } .cockpit-utility-control.is-expanded:has([data-cockpit-launcher='display']) { width: var(--display-panel-expanded-width); display: flex; flex-direction: column; align-items: flex-end; gap: 7px; box-shadow: 0 8px 32px rgba(0, 0, 0, 0.42), inset 0 1px 0 rgba(255, 255, 255, 0.04); } .cockpit-utility-control.is-expanded:has([data-cockpit-launcher='radio']) { width: var(--cockpit-radio-expanded-width, 232px); } .cockpit-utility-controls.layout-primary-only > .cockpit-utility-control:not(.is-expanded) { display: none; } .cockpit-utility-launcher { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: 7px; width: var(--left-collapsed-width, 176px); min-height: 50px; padding: 8px 10px 8px 14px; border: 1px solid var(--glass-border); border-radius: var(--panel-radius); background: var(--glass-bg); box-shadow: 0 8px 32px rgba(0, 0, 0, 0.42), inset 0 1px 0 rgba(255, 255, 255, 0.04); backdrop-filter: blur(24px) saturate(1.4); -webkit-backdrop-filter: blur(24px) saturate(1.4); color: var(--text-dim); font: 8px/1.1 var(--font-mono); letter-spacing: 1.4px; text-align: left; } [data-cockpit-launcher='display'] { width: var(--left-collapsed-width, 176px); } [data-cockpit-launcher='radio'] { width: var(--cockpit-radio-collapsed-width, 148px); } .cockpit-utility-control.is-expanded .cockpit-utility-launcher { width: 100%; min-height: 42px; padding: 6px 2px 8px 6px; border: 0; border-radius: 0; background: transparent; box-shadow: none; backdrop-filter: none; -webkit-backdrop-filter: none; } .cockpit-utility-control.is-expanded .cockpit-utility-launcher { width: 100%; } .cockpit-utility-control.is-expanded:has([data-cockpit-launcher='display']) .cockpit-utility-launcher { min-height: 42px; box-sizing: border-box; margin-left: auto; margin-bottom: 0; padding: 6px 2px 8px 6px; gap: 8px; } .cockpit-utility-divider { height: 1px; background: linear-gradient(to right, var(--glass-border), transparent); box-shadow: none; } .cockpit-utility-control.is-expanded .cockpit-utility-divider { background: linear-gradient( 90deg, rgb(0 212 255 / 28%), rgba(0, 212, 255, 0.18) 58%, transparent ); box-shadow: 0 0 7px rgba(0, 212, 255, 0.22); } .cockpit-utility-glyph { display: grid; width: 20px; height: 20px; padding: 0; place-items: center; border: 1px solid var(--glass-border); border-radius: 6px; background: rgba(255, 255, 255, 0.03); color: var(--text-secondary); font-family: var(--font-mono); font-size: 12px; line-height: 1; cursor: pointer; } .cockpit-utility-glyph:focus-visible { border-color: var(--glass-border-hover); color: var(--text-primary); outline: 2px solid var(--text-primary); outline-offset: -3px; } .cockpit-utility-popover { position: static; display: grid; width: 100%; box-sizing: border-box; gap: 7px; padding: 9px; border: 0; border-top: 1px solid var(--glass-border); border-radius: 0; background: transparent; box-shadow: none; } .cockpit-utility-popover[hidden] { display: none !important; } .cockpit-display-slot { display: block; min-width: 0; } #cockpit-display-panel { display: flex; flex-direction: column; gap: 7px; padding: 0; border-top: 0; max-height: min(52vh, 470px); overflow-y: auto; } #cockpit-display-panel .pp-toggle-group { width: 100%; min-width: 0; } #cockpit-display-panel [data-cockpit-display-slot='parameters'] #param-slider-panel.active { width: 100%; max-height: none; overflow-y: visible; } #cockpit-display-panel .pp-toggle-btn { width: 100%; min-height: 38px; box-sizing: border-box; } .cockpit-radio-compact { width: 100%; } .cockpit-radio-station { overflow: hidden; color: #fff; font: 500 8px/1.2 var(--font-mono); letter-spacing: 0.08em; text-overflow: ellipsis; white-space: nowrap; } .cockpit-radio-transport { display: grid; grid-template-columns: repeat(3, 1fr); gap: 6px; } .cockpit-radio-transport button { min-height: 32px; border: 1px solid rgba(65, 220, 231, 0.24); border-radius: 6px; background: rgba(65, 220, 231, 0.05); color: #9ceaf1; cursor: pointer; } .cockpit-radio-transport button:disabled { opacity: 0.38; cursor: not-allowed; } .cockpit-radio-transport button.active { border-color: var(--cockpit-accent); color: #fff; } .cockpit-radio-volume { display: grid; grid-template-columns: auto 1fr auto; align-items: center; gap: 8px; color: rgba(244, 251, 255, 0.58); font: 7px/1 var(--font-mono); letter-spacing: 0.1em; } .cockpit-radio-volume input { width: 100%; } .cockpit-signal-header { gap: 10px; padding: 0 4px 7px 8px; } html:not([lang='en']) .cockpit-signal-header > div { min-width: 0; } html:not([lang='en']) .cockpit-signal-kicker { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .cockpit-signal-header strong { color: #fff; font-size: 8px; letter-spacing: 0.1em; } .cockpit-signal-kicker { font-size: 8px; letter-spacing: 0.18em; } .cockpit-signal-kicker i { display: inline-block; width: 5px; height: 5px; margin-right: 5px; border-radius: 50%; background: var(--cockpit-accent); box-shadow: 0 0 7px var(--cockpit-accent); animation: cockpit-live 1.6s ease-in-out infinite; } .cockpit-brief-actions { align-items: center; gap: 3px; } /* A longer translated state label widens the cycle button; the other controls keep their size instead of being squeezed. */ html:not([lang='en']) .cockpit-brief-actions > * { flex-shrink: 0; } .cockpit-brief-actions button { width: 23px; } .cockpit-brief-actions .material-symbols-outlined { font-size: 14px; } #cockpit-brief-auto { width: 50px; color: rgba(244, 251, 255, 0.42); font: 700 6px/1 var(--font-mono); letter-spacing: 0.05em; } html:not([lang='en']) #cockpit-brief-auto { width: auto; min-width: 50px; padding: 0 4px; white-space: nowrap; } #cockpit-brief-auto[aria-pressed='true'] { border-color: var(--cockpit-accent); background: color-mix( in srgb, var(--cockpit-accent) 14%, rgba(0, 7, 12, 0.72) ); color: #fff; box-shadow: 0 0 10px color-mix(in srgb, var(--cockpit-accent) 24%, transparent); } #cockpit-signal-toggle { width: 28px; margin-left: 2px; } #cockpit-brief-position { min-width: 25px; color: rgba(244, 251, 255, 0.48); font-size: 6px; letter-spacing: 0.08em; text-align: center; } .cockpit-brief-stage { min-height: 178px; overflow: hidden; } [data-cockpit-brief-page] { animation: cockpit-brief-enter 220ms ease-out both; } [data-cockpit-brief-page][hidden] { display: none; } .cockpit-signal-list { display: grid; gap: 3px; margin: 0; padding: 0; list-style: none; } .cockpit-signal-list li { display: grid; grid-template-columns: 54px minmax(0, 1fr); gap: 8px; padding-block: 7px; padding-inline: 9px 7px; border-inline-start: 1px solid rgba(244, 251, 255, 0.2); background: rgba(0, 7, 12, 0.3); } .cockpit-signal-list li.actionable { transition: border-color 160ms ease, background 160ms ease; } .cockpit-signal-list li.actionable:hover, .cockpit-signal-list li.actionable:focus-within { border-inline-start-color: var(--cockpit-accent); background: color-mix( in srgb, var(--cockpit-accent) 10%, rgba(0, 7, 12, 0.4) ); } .cockpit-signal-list li.track, .cockpit-signal-list li.current { border-inline-start-color: var(--cockpit-accent); } .cockpit-signal-list li.nearby { border-inline-start-color: #fff; } .cockpit-signal-list li.military { border-inline-start-color: #d5a863; } .cockpit-signal-list li.warning { border-inline-start-color: #d5a863; } .cockpit-signal-list time { color: rgba(244, 251, 255, 0.38); font-size: 6px; letter-spacing: 0.06em; } .cockpit-signal-list li > div { display: grid; gap: 2px; min-width: 0; } .cockpit-signal-list strong { color: color-mix(in srgb, var(--cockpit-accent) 78%, white); font-size: 10px; letter-spacing: 0.11em; } .cockpit-signal-target { display: grid; grid-template-columns: minmax(0, auto) minmax(14px, 1fr) 12px; align-items: center; gap: 7px; width: 100%; padding: 0; border: 0; background: transparent; color: color-mix(in srgb, var(--cockpit-accent) 78%, white); font: inherit; font-size: 11px; font-weight: 700; letter-spacing: 0.11em; text-align: left; cursor: pointer; } .cockpit-signal-list li.military .cockpit-signal-target { color: #f0c968; } .cockpit-signal-target-label { overflow: hidden; color: currentColor !important; font: inherit; text-overflow: ellipsis; white-space: nowrap; } .cockpit-signal-target-rule { height: 1px; overflow: visible !important; background: linear-gradient(90deg, currentColor, transparent); opacity: 0.42; transition: opacity 160ms ease, transform 160ms ease; transform-origin: left center; } .cockpit-signal-target-chevron { overflow: visible !important; color: currentColor !important; font-size: 12px !important; line-height: 1; transition: transform 160ms ease; } .cockpit-signal-target:hover, .cockpit-signal-target:focus-visible { color: #fff; outline: none; text-shadow: 0 0 8px color-mix(in srgb, var(--cockpit-accent) 72%, transparent); } .cockpit-signal-target:hover .cockpit-signal-target-rule, .cockpit-signal-target:focus-visible .cockpit-signal-target-rule { opacity: 0.82; transform: scaleX(1.04); } .cockpit-signal-target:hover .cockpit-signal-target-chevron, .cockpit-signal-target:focus-visible .cockpit-signal-target-chevron { transform: translateX(2px); } .cockpit-signal-list li.warning strong { color: #d5a863; } .cockpit-signal-list span { overflow: hidden; color: rgba(244, 251, 255, 0.66); font-size: 8px; letter-spacing: 0.06em; text-overflow: ellipsis; white-space: nowrap; } .cockpit-news-list { display: grid; gap: 4px; margin: 0; padding: 0; list-style: none; } .cockpit-news-list:empty { display: none; } .cockpit-news-list li { border-left: 1px solid color-mix(in srgb, var(--cockpit-accent) 62%, transparent); background: rgba(0, 7, 12, 0.3); } .cockpit-news-list a { display: grid; gap: 4px; padding: 7px 9px; color: inherit; text-decoration: none; } .cockpit-news-list a:hover, .cockpit-news-list a:focus-visible { background: color-mix(in srgb, var(--cockpit-accent) 8%, transparent); outline: 1px solid color-mix(in srgb, var(--cockpit-accent) 46%, transparent); } .cockpit-news-list strong { display: -webkit-box; overflow: hidden; color: rgba(244, 251, 255, 0.88); font-size: 8px; font-weight: 600; line-height: 1.35; letter-spacing: 0.045em; -webkit-box-orient: vertical; -webkit-line-clamp: 2; } .cockpit-news-list span { color: color-mix( in srgb, var(--cockpit-accent) 65%, rgba(244, 251, 255, 0.42) ); font-size: 6px; letter-spacing: 0.08em; text-transform: uppercase; } .cockpit-brief-status { display: grid; min-height: 0; place-items: center; padding: 18px 10px; border: 0; color: rgba(244, 251, 255, 0.45); font-size: 7px; letter-spacing: 0.13em; text-align: center; } .cockpit-brief-status[data-state='unavailable'] { color: #d5a863; } .cockpit-local-place { display: grid; gap: 3px; padding: 5px 8px 8px; border-bottom: 1px solid rgba(244, 251, 255, 0.08); } .cockpit-local-place strong { overflow: hidden; color: #fff; font-size: 9px; letter-spacing: 0.1em; text-overflow: ellipsis; white-space: nowrap; } .cockpit-local-place small { color: rgba(244, 251, 255, 0.44); font-size: 6px; letter-spacing: 0.09em; } .cockpit-local-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1px; margin-top: 5px; background: rgba(244, 251, 255, 0.07); } .cockpit-local-grid > div { display: grid; min-height: 60px; align-content: center; gap: 3px; padding: 7px 9px; background: rgba(0, 7, 12, 0.76); } .cockpit-local-grid span { color: var(--cockpit-accent); font-size: 7px; font-weight: 700; letter-spacing: 0.13em; } .cockpit-local-grid strong { overflow: hidden; color: #fff; font-size: 13px; font-weight: 500; letter-spacing: 0.06em; text-overflow: ellipsis; white-space: nowrap; } #cockpit-local-condition { font-size: 10px; line-height: 1.15; letter-spacing: 0.03em; text-overflow: clip; white-space: normal; } .cockpit-local-grid small { color: rgba(244, 251, 255, 0.35); font-size: 6px; letter-spacing: 0.07em; } .cockpit-weather-credit { display: inline-block; margin-top: 7px; color: rgba(182, 226, 241, 0.72); font: 600 7px/1.2 var(--font-mono); letter-spacing: 0.08em; text-transform: uppercase; } .cockpit-signal-footer { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 5px 8px 0; border-top: 1px solid rgba(244, 251, 255, 0.08); color: rgba(244, 251, 255, 0.34); font-size: 6px; letter-spacing: 0.1em; } .cockpit-signal-footer > span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .cockpit-brief-tabs { display: flex; gap: 3px; } /* Translated tab names are longer: the tabs keep their words whole and the footer text beside them gives way. */ html:not([lang='en']) .cockpit-signal-footer > span { flex: 1 1 auto; min-width: 0; } html:not([lang='en']) .cockpit-brief-tabs { flex: 0 0 auto; } html:not([lang='en']) .cockpit-brief-tabs button { white-space: nowrap; } .cockpit-brief-tabs button { padding: 2px 4px; border: 0; border-bottom: 1px solid rgba(244, 251, 255, 0.16); background: transparent; color: rgba(244, 251, 255, 0.34); font: inherit; letter-spacing: 0.08em; cursor: pointer; } .cockpit-brief-tabs button[aria-current='true'] { border-bottom-color: var(--cockpit-accent); color: color-mix(in srgb, var(--cockpit-accent) 80%, white); } .cockpit-brief-tabs button:hover, .cockpit-brief-tabs button:focus-visible { color: #fff; outline: none; } .cockpit-signal-window[data-layout-mode='rail-right-constrained'] { gap: 5px; } .cockpit-signal-window[data-collapsed='true'] { width: min(248px, 22vw); max-height: none; gap: 0; padding: 9px 10px; border-radius: 18px 7px 7px 18px; background: rgba(0, 7, 12, 0.54); } .cockpit-signal-window[data-collapsed='true'] .cockpit-signal-header { padding: 0; border-bottom: 0; } .cockpit-signal-window[data-collapsed='true'] .cockpit-route-card { display: none; } .cockpit-signal-window[data-collapsed='true'] :is(.cockpit-brief-stage, .cockpit-signal-footer) { display: none; } .cockpit-signal-window[data-collapsed='true'] .cockpit-brief-actions > :not(#cockpit-signal-toggle) { display: none; } @keyframes cockpit-brief-enter { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: translateY(0); } } .cockpit-help { position: absolute; left: clamp(24px, 4vw, 58px); bottom: clamp(22px, 4vh, 42px); color: rgba(244, 251, 255, 0.55); font-size: 9px; letter-spacing: 0.14em; } .cockpit-help span { color: var(--cockpit-accent); } body.cockpit-mode :is( #title-bar, #style-indicator, #top-center-actions, #traffic-sync-chip, #cctv-sync-chip, #command-dock, #military-awareness-panel, #military-awareness-direction-overlay, #cockpit-entry ) { display: none !important; } body.cockpit-mode :is( #clear-selected-layers, #share-btn, #tilt-map-view, #north-up-view, #reset-globe-view ) { display: none !important; } body.cockpit-mode #left-panel-stack { z-index: 147; display: flex; top: var(--left-stack-safe-top, var(--left-stack-top)); bottom: var(--left-stack-safe-bottom, 24px); height: auto; max-height: none; transition: none; } body.cockpit-mode #left-panel-stack > #scene-panel { display: none !important; } body.cockpit-mode #right-context-rail { display: none !important; } /* Keep the user's intelligence HUD text available in first person. It stays subordinate to the visor instruments and occupies the four peripheral corridors, leaving the optical center, context rails, and heading tape free. */ body.cockpit-mode #intel-hud.active { z-index: 146; opacity: 0.72; visibility: visible; } body.cockpit-mode #intel-hud .hud-top-left, body.cockpit-mode #intel-hud .hud-bottom-left { left: clamp(18px, 3vw, 44px); transform: scale(0.78); transform-origin: left center; } body.cockpit-mode #intel-hud .hud-top-right, body.cockpit-mode #intel-hud .hud-bottom-right { right: clamp(18px, 3vw, 44px); transform: scale(0.78); transform-origin: right center; } body.cockpit-mode #intel-hud .hud-top-left, body.cockpit-mode #intel-hud .hud-top-right { top: clamp(104px, 13vh, 138px); } body.cockpit-mode #intel-hud .hud-bottom-left, body.cockpit-mode #intel-hud .hud-bottom-right { bottom: clamp(84px, 11vh, 118px); } body.cockpit-mode #intel-hud .hud-summary-wrap { max-width: min(34vw, 380px); } body.cockpit-mode #intel-hud .hud-summary { font-size: 9px; } body.cockpit-mode #intel-hud .hud-left-edge { left: 22px; } body.cockpit-mode #intel-hud .hud-right-edge { right: 22px; } @media (max-width: 760px) { #view-switcher { right: 16px; bottom: 16px; } body.cockpit-mode #view-switcher { right: auto; bottom: max(76px, env(safe-area-inset-bottom)); width: max-content; max-width: calc(100vw - 20px); margin-bottom: 0; } body.cockpit-mode #view-switcher button { padding-inline: 9px; font-size: 7px; } #cockpit-entry { left: auto; right: 16px; bottom: 88px; } body.cockpit-mode #left-panel-stack, body.cockpit-mode #intel-hud, body.cockpit-mode .cockpit-context-window, body.cockpit-mode .cockpit-signal-window { display: none !important; } body.cockpit-mode #right-context-rail { display: none !important; } body.cockpit-mode .cockpit-utility-controls { top: auto; right: 12px; bottom: 152px; max-width: calc(100vw - 24px); } body.cockpit-mode .cockpit-utility-controls { flex-direction: row; } body.cockpit-mode .cockpit-utility-launcher { width: min(150px, calc((100vw - 31px) / 2)); min-height: 42px; } body.cockpit-mode .cockpit-utility-control.is-expanded { position: fixed; top: 96px; right: 12px; width: min(272px, calc(100vw - 24px)); max-height: calc(100vh - 260px); } body.cockpit-mode .cockpit-utility-controls:has(.cockpit-utility-control.is-expanded) > .cockpit-utility-control:not(.is-expanded) { display: none; } body.cockpit-mode .cockpit-utility-popover { position: static; width: 100%; } .cockpit-topline { grid-template-columns: 1fr auto; } .cockpit-mode-chip { display: none; } .cockpit-readout { min-width: 76px; padding: 4px 6px 5px; } .cockpit-readout strong { font-size: clamp(24px, 8vw, 34px); } .cockpit-readout-label { font-size: 7px; letter-spacing: 0.12em; } .cockpit-readout-unit { font-size: 8px; } .cockpit-speed { transform: perspective(600px) rotateY(7deg); } .cockpit-altitude { transform: perspective(600px) rotateY(-7deg); } .cockpit-compass { width: 92vw; } .cockpit-instrument-row { grid-template-columns: minmax(76px, 1fr) auto minmax(76px, 1fr); gap: 8px; } .cockpit-context-window { top: auto; left: 12px; right: 12px; bottom: 180px; width: auto; max-height: min(38vh, 280px); padding: 10px 12px 8px; border-radius: 20px 20px 10px 10px; transform: translateZ(22px); } .cockpit-context-window[data-collapsed='true'] { right: auto; width: min(248px, calc(100vw - 24px)); max-height: none; } .cockpit-signal-window { top: 112px; right: 12px; width: calc(100vw - 24px); max-height: min(28vh, 220px); padding: 10px 12px 8px; border-radius: 20px 10px 10px 20px; transform: translateZ(22px); } .cockpit-signal-window[data-collapsed='true'] { left: auto; width: min(248px, calc(100vw - 24px)); max-height: none; } .cockpit-context-header { grid-template-columns: 1fr auto; } .cockpit-context-qualifier { display: none; } .cockpit-context-cohorts small { display: none; } .cockpit-context-cohorts { grid-template-columns: repeat(4, minmax(0, 1fr)); } .cockpit-context-cohorts > div { padding: 4px 6px; } .cockpit-context-nearest { grid-template-columns: 20px minmax(0, 1fr) auto; gap: 6px; } #cockpit-context-bearing { display: none; } .cockpit-context-footer { font-size: 5px; } .cockpit-compass-tape span { transform: translateX(calc(-50% + (var(--slot) * 52px))) translateY(calc(var(--depth) * 7px)) rotateZ(calc(var(--slot) * 3deg)); } .cockpit-pitch-rail { display: none; } .cockpit-altitude-rim { display: none; } .cockpit-visor-status { display: none; } } @media (prefers-reduced-motion: reduce) { .cockpit-altitude-rim-pointer .material-symbols-outlined { animation: none; } .cockpit-altitude-rim-scale > span { transition: none; } [data-cockpit-brief-page] { animation: none; } }