mirror of
https://github.com/bilawalsidhu/gods-eye-view.git
synced 2026-11-04 18:34:02 +00:00
- aircraftEmergency: `source` is 'squawk' only when the Mode A code itself names the status; the Cockpit HUD no longer quotes an unrelated squawk (e.g. SQUAWK 1200 on an ADS-B `downed` status). - military: new billboards and the untrack restore use the fleet tint, so an emergency stays red instead of snapping back to amber; tint helpers take the record already in hand instead of a second lookup. - cockpit/cyber CSS: emergency colour via a custom property / theme token, meta line bolded so the status does not rely on colour alone in the HUD. - tests: revert Prettier churn in unscoped test files; only semantic edits. - docs/CURRENT-STATE.md: transponder emergency highlighting section. - qa-emergency-squawk: (iv) RELEASE check; new files added to format scope. Co-Authored-By: Claude <[email protected]>
2196 lines
53 KiB
CSS
2196 lines
53 KiB
CSS
/* ── 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;
|
|
}
|
|
.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;
|
|
grid-template-columns: 48px 58px 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);
|
|
}
|
|
.cockpit-context-header {
|
|
display: grid;
|
|
grid-template-columns: minmax(0, 1fr) auto;
|
|
align-items: center;
|
|
gap: 5px 10px;
|
|
padding: 0 5px 7px;
|
|
border-bottom: 1px solid
|
|
color-mix(in srgb, var(--cockpit-accent) 22%, transparent);
|
|
}
|
|
.cockpit-context-header > div {
|
|
display: grid;
|
|
gap: 2px;
|
|
}
|
|
.cockpit-context-kicker {
|
|
color: var(--cockpit-accent);
|
|
font-size: 8px;
|
|
font-weight: 700;
|
|
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 {
|
|
display: flex;
|
|
gap: 4px;
|
|
}
|
|
.cockpit-context-actions button {
|
|
display: grid;
|
|
width: 28px;
|
|
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-context-actions button:hover,
|
|
.cockpit-context-actions button:focus-visible {
|
|
border-color: var(--cockpit-accent);
|
|
color: #fff;
|
|
outline: none;
|
|
}
|
|
.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-left: 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-left-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 {
|
|
display: grid;
|
|
grid-template-columns: minmax(0, 1fr) auto;
|
|
align-items: center;
|
|
gap: 10px;
|
|
padding: 0 4px 7px 8px;
|
|
border-bottom: 1px solid
|
|
color-mix(in srgb, var(--cockpit-accent) 22%, transparent);
|
|
}
|
|
.cockpit-signal-header > div {
|
|
display: grid;
|
|
gap: 2px;
|
|
}
|
|
.cockpit-signal-header strong {
|
|
color: #fff;
|
|
font-size: 8px;
|
|
letter-spacing: 0.1em;
|
|
}
|
|
.cockpit-signal-kicker {
|
|
color: var(--cockpit-accent);
|
|
font-size: 8px;
|
|
font-weight: 700;
|
|
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 {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 3px;
|
|
}
|
|
.cockpit-brief-actions button {
|
|
display: grid;
|
|
width: 23px;
|
|
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-brief-actions button:hover,
|
|
.cockpit-brief-actions button:focus-visible {
|
|
border-color: var(--cockpit-accent);
|
|
color: #fff;
|
|
outline: none;
|
|
}
|
|
.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;
|
|
}
|
|
#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: 7px 7px 7px 9px;
|
|
border-left: 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-left-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-left-color: var(--cockpit-accent);
|
|
}
|
|
.cockpit-signal-list li.nearby {
|
|
border-left-color: #fff;
|
|
}
|
|
.cockpit-signal-list li.military {
|
|
border-left-color: #d5a863;
|
|
}
|
|
.cockpit-signal-list li.warning {
|
|
border-left-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;
|
|
}
|
|
.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,
|
|
.sl-viewer-wrap-expanded
|
|
) {
|
|
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;
|
|
}
|
|
}
|