/* SKINCHEESE · GOD'S EYE ENGINE — shared styles. Theme with --gev-* vars on any ancestor. */
.gev-root, :root {
  --gev-ink: #e7e3d9; --gev-muted: #a7a091; --gev-dim: #8b8375; --gev-hair: rgba(212,208,200,.14);
  --gev-panel: rgba(10,12,14,.78); --gev-accent: #7db3c7; --gev-accent-ink: #08090b; --gev-flag: #f3b54a;
  --gev-mono: 'IBM Plex Mono', ui-monospace, Menlo, monospace; --gev-radius: 12px;
}
/* ── sensor surfaces ── */
.gev-sensor { position: relative; overflow: hidden; isolation: isolate; }
.gev-sensor::after { content: ''; position: absolute; inset: 0; pointer-events: none; z-index: 500; opacity: 0; transition: opacity .35s; }
.gev-sensor > canvas, .gev-sensor img, .gev-sensor .leaflet-tile-pane, .gev-sensor .scene-container { transition: filter .35s; }
html.gev-crt .gev-sensor > canvas, html.gev-crt .gev-sensor img, html.gev-crt .gev-sensor .leaflet-tile-pane, html.gev-crt .gev-sensor .scene-container { filter: contrast(1.25) saturate(.65) brightness(1.08) sepia(.25); }
html.gev-crt .gev-sensor::after { opacity: 1; background: repeating-linear-gradient(0deg, rgba(0,0,0,.32) 0 1px, transparent 1px 3px), radial-gradient(ellipse at center, transparent 55%, rgba(0,0,0,.55)); }
html.gev-nvg .gev-sensor > canvas, html.gev-nvg .gev-sensor img, html.gev-nvg .gev-sensor .leaflet-tile-pane, html.gev-nvg .gev-sensor .scene-container { filter: grayscale(1) brightness(1.15) contrast(1.35) sepia(1) hue-rotate(68deg) saturate(3); }
html.gev-nvg .gev-sensor::after { opacity: 1; background: radial-gradient(circle at center, transparent 48%, rgba(0,12,0,.8) 78%), url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence baseFrequency='.9' numOctaves='2'/%3E%3C/filter%3E%3Crect width='160' height='160' filter='url(%23n)' opacity='.22'/%3E%3C/svg%3E"); }
html.gev-flir .gev-sensor > canvas, html.gev-flir .gev-sensor img, html.gev-flir .gev-sensor .leaflet-tile-pane, html.gev-flir .gev-sensor .scene-container { filter: grayscale(1) invert(1) contrast(1.5) brightness(1.05); }
html.gev-flir .gev-sensor::after { opacity: 1; mix-blend-mode: color; background: linear-gradient(180deg, rgba(255,120,20,.55), rgba(255,40,80,.35)); }
html.gev-noir .gev-sensor > canvas, html.gev-noir .gev-sensor .leaflet-tile-pane, html.gev-noir .gev-sensor .scene-container { filter: grayscale(.75) saturate(.8) brightness(.72) contrast(1.08); }
html.gev-noir .gev-sensor::after { opacity: 1; background: radial-gradient(ellipse at center, transparent 65%, rgba(0,0,0,.35)); }
.gev-sensor .leaflet-lbl-pane img { filter: none !important; }
@media (prefers-reduced-motion: reduce) { .gev-sensor::after, .gev-sensor img { transition: none; } }

/* ── mode bar ── */
[data-gev="modes"] { display: flex; flex-wrap: wrap; gap: 6px; }
[data-gev="modes"] button { display: inline-flex; align-items: center; gap: 8px; min-height: 40px; padding: 0 12px; border-radius: var(--gev-radius); border: 1px solid var(--gev-hair); background: var(--gev-panel); color: var(--gev-ink); font: 500 12px/1 var(--gev-mono); letter-spacing: .1em; text-transform: uppercase; cursor: pointer; backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px); }
[data-gev="modes"] button kbd { font: inherit; opacity: .6; }
[data-gev="modes"] button[aria-pressed="true"] { background: var(--gev-accent); color: var(--gev-accent-ink); border-color: var(--gev-accent); }
[data-gev="modes"] button:focus-visible { outline: 2px solid var(--gev-flag); outline-offset: 2px; }

/* ── globe ── */
[data-gev="globe"] { position: relative; width: 100%; height: 100%; min-height: 320px; cursor: grab; }
[data-gev="globe"] .scene-tooltip { font: 12px var(--gev-mono) !important; }

/* ── lens (Leaflet) ── */
[data-gev="lens"] { width: 100%; height: 100%; min-height: 320px; background: #0b0f12; }
[data-gev="lens"] .leaflet-control-attribution { font: 10px var(--gev-mono); background: rgba(0,0,0,.55); color: #cfcabe; }
[data-gev="lens"] .leaflet-control-attribution a { color: #cfcabe; }
.gev-acw { background: none; border: 0; }
.gev-ac { position: relative; width: 26px; height: 26px; }
.gev-ac svg { width: 26px; height: 26px; filter: drop-shadow(0 0 3px rgba(0,0,0,.9)); }
.gev-ac span { position: absolute; left: 28px; top: 3px; white-space: nowrap; font: 600 11px var(--gev-mono); color: #fff; text-shadow: 0 0 4px #000, 0 0 2px #000; letter-spacing: .04em; }
.gev-ac i { position: absolute; inset: -8px; border: 0 solid transparent; pointer-events: none; }
.gev-ac.is-gnd { opacity: .45; transform: scale(.7); } .gev-ac.is-gnd span { display: none; }
.gev-ac.is-locked i { border: 2px solid var(--gev-flag); clip-path: polygon(0 0,30% 0,30% 2px,2px 2px,2px 30%,0 30%,0 70%,2px 70%,2px calc(100% - 2px),30% calc(100% - 2px),30% 100%,70% 100%,70% calc(100% - 2px),calc(100% - 2px) calc(100% - 2px),calc(100% - 2px) 70%,100% 70%,100% 30%,calc(100% - 2px) 30%,calc(100% - 2px) 2px,70% 2px,70% 0,100% 0,100% 100%,0 100%); animation: gevlock 1.2s ease-out 1; }
@keyframes gevlock { from { transform: scale(2.2); opacity: 0; } to { transform: scale(1); opacity: 1; } }

/* ── HUD bits ── */
.gev-hud { position: absolute; z-index: 600; font: 500 11px/1.4 var(--gev-mono); letter-spacing: .12em; color: #fff; text-shadow: 0 0 6px #000, 0 0 2px #000; pointer-events: none; text-transform: uppercase; }
.gev-hud.tl { top: 12px; left: 14px; } .gev-hud.tr { top: 12px; right: 14px; text-align: right; } .gev-hud.bl { bottom: 12px; left: 14px; } .gev-hud.br { bottom: 12px; right: 14px; text-align: right; }
.gev-ctrl { position: absolute; z-index: 650; left: 12px; right: 12px; bottom: 12px; display: flex; flex-wrap: wrap; gap: 6px; align-items: center; }
.gev-pill { display: inline-flex; align-items: center; gap: 8px; min-height: 40px; padding: 0 12px; border-radius: var(--gev-radius); border: 1px solid var(--gev-hair); background: var(--gev-panel); color: var(--gev-ink); font: 500 12px var(--gev-mono); letter-spacing: .1em; text-transform: uppercase; cursor: pointer; backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px); }
.gev-live { display: inline-block; width: 8px; height: 8px; border-radius: 50%; background: #4fd18b; box-shadow: 0 0 0 0 rgba(79,209,139,.6); animation: gevpulse 1.8s infinite; vertical-align: middle; }
@keyframes gevpulse { 70% { box-shadow: 0 0 0 8px rgba(79,209,139,0); } 100% { box-shadow: 0 0 0 0 rgba(79,209,139,0); } }
[data-gev="sim"] { color: var(--gev-flag); }

/* ── ticker ── */
[data-gev="ticker"] { list-style: none; margin: 0; padding: 0; font: 13px/1.5 var(--gev-mono); }
[data-gev="ticker"] li { display: flex; gap: 10px; padding: 8px 0; border-bottom: 1px solid var(--gev-hair); color: var(--gev-ink); }
[data-gev="ticker"] time { color: var(--gev-dim); flex: none; }
[data-gev="ticker"] li[data-k="quake"]::before { content: '◎'; color: #eaa63f; } [data-gev="ticker"] li[data-k="air"]::before { content: '✈'; color: var(--gev-accent); }
[data-gev="ticker"] li[data-k="event"]::before { content: '▲'; color: #e35d70; } [data-gev="ticker"] li[data-k="sweep"]::before { content: '◉'; color: var(--gev-flag); } [data-gev="ticker"] li[data-k="sys"]::before { content: '●'; color: #4fd18b; }

/* ── track card ── */
[data-gev="track"] { font-family: var(--gev-mono); }
.gev-track-empty { color: var(--gev-dim); font-size: 13px; line-height: 1.6; padding: 6px 0; }
.gev-k { font-size: 10px; letter-spacing: .22em; text-transform: uppercase; color: var(--gev-dim); }
.gev-big { font-size: 22px; margin-top: 4px; color: var(--gev-ink); letter-spacing: .02em; }
.gev-grid { display: grid; grid-template-columns: repeat(2, minmax(0,1fr)); gap: 10px; margin-top: 12px; font-size: 14px; color: var(--gev-ink); }
.gev-grid span { display: block; font-size: 10px; letter-spacing: .2em; text-transform: uppercase; color: var(--gev-dim); margin-bottom: 2px; }
.gev-handoff { margin: 8px 0 0; border-radius: 8px; aspect-ratio: 4/3; background: #111; }
.gev-handoff img { width: 100%; height: 100%; object-fit: cover; display: block; }
.gev-handoff figcaption { position: absolute; left: 8px; bottom: 8px; z-index: 600; font: 600 11px var(--gev-mono); color: #fff; text-shadow: 0 0 4px #000; }
.gev-brk { position: absolute; inset: 18%; z-index: 600; pointer-events: none; background:
  linear-gradient(var(--gev-flag),var(--gev-flag)) top left/18px 2px no-repeat, linear-gradient(var(--gev-flag),var(--gev-flag)) top left/2px 18px no-repeat,
  linear-gradient(var(--gev-flag),var(--gev-flag)) top right/18px 2px no-repeat, linear-gradient(var(--gev-flag),var(--gev-flag)) top right/2px 18px no-repeat,
  linear-gradient(var(--gev-flag),var(--gev-flag)) bottom left/18px 2px no-repeat, linear-gradient(var(--gev-flag),var(--gev-flag)) bottom left/2px 18px no-repeat,
  linear-gradient(var(--gev-flag),var(--gev-flag)) bottom right/18px 2px no-repeat, linear-gradient(var(--gev-flag),var(--gev-flag)) bottom right/2px 18px no-repeat; }

/* ── camera wall ── */
[data-gev="wall"] { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 240px), 1fr)); gap: 8px; }
.gev-tile { margin: 0; aspect-ratio: 4/3; border-radius: 10px; background: #111; border: 1px solid var(--gev-hair); }
.gev-tile img { width: 100%; height: 100%; object-fit: cover; display: block; }
.gev-tile figcaption { position: absolute; z-index: 600; left: 0; right: 0; bottom: 0; padding: 22px 10px 8px; background: linear-gradient(transparent, rgba(0,0,0,.8)); font: 500 11px/1.4 var(--gev-mono); color: #fff; letter-spacing: .04em; }
.gev-tile figcaption b { color: var(--gev-accent); margin-right: 4px; }
.gev-sw { display: block; margin-top: 3px; color: #cfcabe; text-transform: none; }
.gev-tile.is-flag { border-color: var(--gev-flag); } .gev-tile.is-flag .gev-sw { color: var(--gev-flag); }
.gev-tilebar { position: absolute; z-index: 601; left: 0; right: 0; top: 0; height: 2px; background: var(--gev-flag); box-shadow: 0 0 14px var(--gev-flag); opacity: 0; }
.gev-tile.is-scan .gev-tilebar { opacity: 1; animation: gevscan 1.6s linear infinite; }
.gev-tile.is-scan { outline: 2px solid var(--gev-accent); outline-offset: -2px; }
@keyframes gevscan { from { top: 0; } to { top: 100%; } }
@media (prefers-reduced-motion: reduce) { .gev-tile.is-scan .gev-tilebar { animation: none; top: 50%; } .gev-live { animation: none; } }
