:root{--bg: #0b1017;--surface-1: #0f1620;--surface-2: #161f2c;--surface-3: #1e2a3a;--scrim: rgba(5, 8, 12, .55);--text: #e6edf3;--text-muted: #9aa8b6;--text-faint: #6b7a89;--accent: #2dd4bf;--accent-strong: #14b8a6;--accent-glow: rgba(45, 212, 191, .35);--status-air: #34d399;--status-ground: #f4b740;--status-off: #64748b;--danger: #f87171;--danger-bg: rgba(248, 113, 113, .12);--border: rgba(148, 163, 184, .18);--border-strong: rgba(148, 163, 184, .34);--radius-sm: 6px;--radius-md: 10px;--radius-lg: 14px;--elev-1: 0 1px 2px rgba(0, 0, 0, .4);--elev-2: 0 8px 26px rgba(0, 0, 0, .5);--blur: blur(12px) saturate(125%);--dur-fast: .14s;--dur: .22s;--ease: cubic-bezier(.2, 0, 0, 1);--z-overlay: 10;--z-sheet: 20;--z-modal: 40;--safe-top: env(safe-area-inset-top, 0px);--safe-bottom: env(safe-area-inset-bottom, 0px);--safe-left: env(safe-area-inset-left, 0px);--safe-right: env(safe-area-inset-right, 0px);color-scheme:dark}*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;background:var(--bg);color:var(--text);font-family:Inter,system-ui,-apple-system,sans-serif;font-size:16px;line-height:1.5;-webkit-font-smoothing:antialiased;overflow:hidden}.mono{font-family:JetBrains Mono,ui-monospace,SFMono-Regular,Menlo,monospace;font-variant-numeric:tabular-nums;letter-spacing:0}.muted{color:var(--text-muted)}.accent{color:var(--accent)}:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:var(--radius-sm)}.app{position:absolute;top:0;right:0;bottom:0;left:0}.app .map{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%}.map-loading{display:flex;align-items:center;justify-content:center;text-align:center;padding:1rem;font-size:.8rem;letter-spacing:.12em;color:var(--text-muted)}.fatal-error{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100vh;gap:.8rem;text-align:center;padding:1rem}.fatal-error pre{max-width:min(40rem,90vw);white-space:pre-wrap;padding:.6rem;background:var(--danger-bg);border:1px solid rgba(248,113,113,.4);border-radius:var(--radius-sm);font-size:.75rem}.fatal-error button{padding:.5rem 1rem;background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--accent);cursor:pointer}.topbar{position:absolute;top:calc(.75rem + var(--safe-top));left:calc(.75rem + var(--safe-left));z-index:var(--z-overlay);display:flex;flex-direction:column;gap:.5rem}.topbar h1{margin:0 0 .1rem .1rem;font-size:.95rem;font-weight:600;letter-spacing:.12em;color:var(--text);text-shadow:0 1px 4px rgba(0,0,0,.55)}.topbar h1 .accent{text-shadow:0 0 16px var(--accent-glow)}.search-panel form{display:flex;gap:.4rem}.search-field{position:relative;flex:1}.search-field .search-icon{position:absolute;left:.6rem;top:50%;transform:translateY(-50%);width:15px;height:15px;color:var(--text-faint);pointer-events:none}.search-panel input{width:14rem;padding:.5rem .6rem .5rem 1.9rem;background:var(--surface-1);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text);font-size:.9rem;box-shadow:var(--elev-1);-webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur);transition:border-color var(--dur) var(--ease),box-shadow var(--dur) var(--ease)}.search-panel input::placeholder{color:var(--text-faint)}.search-panel input:focus{outline:none;border-color:var(--accent);box-shadow:var(--elev-1),0 0 0 3px var(--accent-glow)}.search-panel button{padding:.5rem .8rem;background:var(--surface-1);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--accent);font-size:.78rem;font-weight:600;letter-spacing:.04em;cursor:pointer;box-shadow:var(--elev-1);-webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur);transition:border-color var(--dur) var(--ease),background var(--dur) var(--ease)}.search-panel button:hover:not(:disabled){border-color:var(--accent);background:var(--surface-2)}.search-panel button:disabled{opacity:.45;cursor:default}.search-error{margin:.4rem 0 0;max-width:17rem;padding:.4rem .55rem;background:var(--danger-bg);border:1px solid rgba(248,113,113,.4);border-radius:var(--radius-sm);color:#f4c2c2;font-size:.74rem;line-height:1.4}.style-toggle{align-self:flex-start;display:inline-flex;align-items:center;gap:.35rem;padding:.4rem .65rem;background:var(--surface-1);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text-muted);font-size:.72rem;letter-spacing:.02em;cursor:pointer;box-shadow:var(--elev-1);-webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur);transition:color var(--dur) var(--ease),border-color var(--dur) var(--ease)}.style-toggle:hover{color:var(--accent);border-color:var(--border-strong)}.route-line{color:var(--accent);font-size:.82rem}.watchlist-panel{margin-top:.15rem;width:17rem}.watchlist-toggle{display:flex;align-items:center;gap:.45rem;width:100%;text-align:left;padding:.5rem .65rem;background:var(--surface-1);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text);font-size:.78rem;font-weight:600;letter-spacing:.04em;cursor:pointer;box-shadow:var(--elev-1);-webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur);transition:border-color var(--dur) var(--ease)}.watchlist-toggle:hover{border-color:var(--border-strong)}.watchlist-toggle .star{color:var(--accent)}.watchlist-toggle .count{margin-left:auto;font-size:.68rem;color:var(--text-muted);font-variant-numeric:tabular-nums}.watchlist-toggle .chevron{margin-left:auto;transition:transform var(--dur) var(--ease);color:var(--text-faint)}.watchlist-toggle .count+.chevron{margin-left:.4rem}.watchlist-panel.open .watchlist-toggle .chevron{transform:rotate(180deg)}.watchlist-body{margin-top:.45rem;max-height:calc(100vh - 15rem);overflow-y:auto;display:flex;flex-direction:column;gap:.45rem;padding-right:.15rem}.watchlist-body .empty{font-size:.78rem;line-height:1.5;padding:.6rem .7rem;margin:0;background:var(--surface-1);border:1px dashed var(--border-strong);border-radius:var(--radius-md);-webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur)}.watch-card{position:relative;padding:.6rem 2.4rem .6rem .75rem;background:var(--surface-2);border:1px solid var(--border);border-left:3px solid var(--status-off);border-radius:var(--radius-md);cursor:pointer;box-shadow:var(--elev-1);transition:background var(--dur) var(--ease),border-color var(--dur) var(--ease),transform var(--dur-fast) var(--ease)}.watch-card:hover{background:var(--surface-3)}.watch-card:active{transform:scale(.99)}.watch-card.status-airborne{border-left-color:var(--status-air)}.watch-card.status-ground{border-left-color:var(--status-ground)}.watch-card.status-offline{border-left-color:var(--status-off);opacity:.72}.watch-card-head{display:flex;justify-content:space-between;align-items:center;gap:.4rem}.watch-callsign{font-size:.95rem;font-weight:600;letter-spacing:.02em}.status-chip{display:inline-flex;align-items:center;gap:.3rem;font-size:.58rem;font-weight:600;letter-spacing:.08em;padding:.12rem .4rem;border-radius:999px;white-space:nowrap}.status-chip:before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor}.chip-airborne{color:var(--status-air);background:#34d3991f}.chip-airborne:before{box-shadow:0 0 6px var(--status-air)}.chip-ground{color:var(--status-ground);background:#f4b7401f}.chip-offline{color:var(--text-muted);background:#64748b24}.watch-card-sub{margin-top:.2rem;font-size:.7rem;color:var(--text-muted)}.watch-card-telemetry{margin-top:.3rem;font-size:.8rem;color:var(--text)}.watch-remove{position:absolute;top:.3rem;right:.3rem;display:flex;align-items:center;justify-content:center;background:none;border:none;border-radius:var(--radius-sm);color:var(--text-faint);cursor:pointer;min-width:34px;min-height:34px;transition:color var(--dur) var(--ease),background var(--dur) var(--ease)}.watch-remove:hover{color:var(--danger);background:var(--danger-bg)}.token-field{display:flex;flex-direction:column;gap:.25rem;margin-top:.3rem}.token-field input{padding:.45rem .55rem;background:var(--surface-1);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text);font-size:.78rem}.token-field input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-glow)}.aircraft-panel{position:absolute;top:calc(.75rem + var(--safe-top));right:calc(.75rem + var(--safe-right));z-index:var(--z-sheet);width:20rem;max-height:calc(100% - 4rem);overflow-y:auto;background:var(--surface-1);border:1px solid var(--border);border-radius:var(--radius-lg);padding:1rem;box-shadow:var(--elev-2);-webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur)}.sheet-grabber{display:none}.aircraft-panel header{display:flex;justify-content:space-between;align-items:flex-start;gap:.5rem}.aircraft-panel h2{margin:0;font-size:1.35rem;font-weight:600;letter-spacing:.04em;color:var(--text)}.aircraft-panel .subtitle{margin:.2rem 0 0;font-size:.74rem;color:var(--text-muted)}.panel-actions{display:flex;align-items:center;gap:.1rem;flex-shrink:0}.aircraft-panel.collapsed>:not(header):not(.sheet-grabber):not(.live-strip){display:none}.live-strip{display:none;align-items:baseline;gap:1.3rem;padding:.1rem .1rem .5rem;overflow-x:auto;scrollbar-width:none}.live-strip::-webkit-scrollbar{display:none}.aircraft-panel.collapsed .live-strip{display:flex}.live-cell b{font-size:1.1rem;font-weight:600}.live-cell i{font-style:normal;font-size:.68rem;color:var(--text-muted);margin-left:.15rem}.offline-note{margin-top:.9rem;border-top:1px solid var(--border);padding-top:.9rem}.aircraft-panel .close,.aircraft-panel .collapse-toggle,.aircraft-panel .watch-toggle{display:flex;align-items:center;justify-content:center;background:none;border:none;border-radius:var(--radius-sm);color:var(--text-muted);font-size:1rem;cursor:pointer;min-width:40px;min-height:40px;transition:color var(--dur) var(--ease),background var(--dur) var(--ease)}.aircraft-panel .close:hover,.aircraft-panel .collapse-toggle:hover{color:var(--text);background:var(--surface-2)}.aircraft-panel .watch-toggle:hover{color:var(--accent)}.aircraft-panel .watch-toggle.active{color:var(--accent);text-shadow:0 0 12px var(--accent-glow)}.aircraft-photo{width:100%;border-radius:var(--radius-md);margin-top:.8rem;border:1px solid var(--border)}.aircraft-panel .meta{margin-top:.8rem;font-size:.88rem;line-height:1.5}.aircraft-panel .meta p{margin:.15rem 0}.telemetry{margin-top:.9rem;display:grid;grid-template-columns:1fr 1fr;gap:.7rem .9rem;border-top:1px solid var(--border);padding-top:.9rem}.telemetry-row{display:flex;flex-direction:column;gap:.1rem}.telemetry-label{font-size:.6rem;font-weight:600;letter-spacing:.12em;color:var(--text-faint)}.telemetry-value{font-size:1rem;font-weight:500}.telemetry-value .unit{font-size:.7rem;color:var(--text-muted);margin-left:.15rem;font-weight:400}.vr-up{color:var(--status-air)}.vr-down{color:var(--status-ground)}.section-title{margin:0 0 .5rem;font-size:.6rem;font-weight:600;letter-spacing:.14em;color:var(--text-faint);text-transform:uppercase}.aircraft-panel .history{margin-top:.9rem;border-top:1px solid var(--border);padding-top:.9rem}.history-note{font-size:.78rem;line-height:1.5;margin:0}.history-stats{display:flex;flex-wrap:wrap;gap:.35rem;font-size:.72rem;margin-bottom:.5rem}.history-stats span{padding:.2rem .45rem;background:#2dd4bf1a;border-radius:var(--radius-sm);color:var(--accent)}.top-routes{display:flex;flex-wrap:wrap;gap:.3rem .6rem;font-size:.7rem;color:var(--text-muted);margin-bottom:.55rem}.flight-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.25rem;max-height:14rem;overflow-y:auto}.flight-row{display:grid;grid-template-columns:auto 1fr auto;gap:.6rem;width:100%;align-items:baseline;padding:.45rem .55rem;background:var(--surface-2);border:1px solid transparent;border-radius:var(--radius-sm);color:var(--text);font-size:.74rem;text-align:left;cursor:pointer;transition:background var(--dur) var(--ease),border-color var(--dur) var(--ease)}.flight-row:hover{border-color:var(--border-strong);background:var(--surface-3)}.flight-date{color:var(--text-muted)}.flight-route{color:var(--accent)}.flight-stats{color:var(--text-muted);white-space:nowrap}.archive-nav{display:flex;gap:.4rem;margin-bottom:.55rem}.archive-nav input[type=date]{flex:1;padding:.45rem .55rem;background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text);font-size:.82rem;color-scheme:dark}.archive-nav input[type=date]:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-glow)}.archive-btn{display:flex;align-items:center;justify-content:center;min-width:44px;min-height:38px;background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--accent);cursor:pointer;font-size:.75rem;transition:border-color var(--dur) var(--ease),background var(--dur) var(--ease)}.archive-btn:disabled{opacity:.3;cursor:default}.archive-btn:hover:not(:disabled){border-color:var(--accent);background:var(--surface-3)}.sparkline{display:block;margin-top:.4rem}.sparkline rect{fill:var(--accent);opacity:.6}.skeleton{border-radius:var(--radius-sm);background:linear-gradient(90deg,var(--surface-2) 25%,var(--surface-3) 50%,var(--surface-2) 75%);background-size:200% 100%;animation:skeleton-shimmer 1.3s ease-in-out infinite}.skeleton-line{height:.7rem;margin:.4rem 0}@keyframes skeleton-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.replay-bar{position:absolute;bottom:calc(3.4rem + var(--safe-bottom));left:50%;transform:translate(-50%);z-index:var(--z-modal);width:min(34rem,calc(100vw - 1.5rem));background:var(--surface-1);border:1px solid var(--border);border-radius:var(--radius-lg);padding:.7rem 2.2rem .7rem .9rem;box-shadow:var(--elev-2);-webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur)}.replay-head{font-size:.74rem;letter-spacing:.02em;margin-bottom:.55rem}.replay-head .accent{font-weight:600}.replay-controls{display:flex;align-items:center;gap:.7rem}.replay-btn{display:flex;align-items:center;justify-content:center;min-width:44px;min-height:36px;background:#2dd4bf1f;border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--accent);cursor:pointer;font-size:.75rem;transition:background var(--dur) var(--ease),border-color var(--dur) var(--ease)}.replay-btn:hover{background:#2dd4bf33;border-color:var(--accent)}.replay-controls input[type=range]{flex:1;accent-color:var(--accent);height:36px}.replay-readout{font-size:.7rem;color:var(--text-muted);white-space:nowrap}.replay-empty{margin:0;font-size:.78rem}.replay-close{position:absolute;top:.4rem;right:.5rem;display:flex;align-items:center;justify-content:center;min-width:32px;min-height:32px;background:none;border:none;border-radius:var(--radius-sm);color:var(--text-muted);cursor:pointer}.replay-close:hover{color:var(--text);background:var(--surface-2)}.statusbar{position:absolute;bottom:calc(1.6rem + var(--safe-bottom));left:calc(.75rem + var(--safe-left));z-index:var(--z-overlay);display:flex;align-items:center;gap:.45rem;padding:.35rem .6rem;background:var(--surface-1);border:1px solid var(--border);border-radius:var(--radius-sm);font-size:.7rem;color:var(--text-muted);box-shadow:var(--elev-1);-webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur)}.statusbar:before{content:"";width:7px;height:7px;border-radius:50%;background:var(--status-air);box-shadow:0 0 6px var(--status-air);flex-shrink:0}.statusbar-error{color:#f4c2c2;border-color:#f8717173}.statusbar-error:before{background:var(--danger);box-shadow:0 0 6px var(--danger)}.data-attribution{position:absolute;bottom:var(--safe-bottom);left:var(--safe-left);z-index:var(--z-overlay);padding:.2rem .6rem;font-size:.65rem;color:var(--text-faint)}.data-attribution a{color:var(--text-muted);text-decoration:none}.data-attribution a:hover{color:var(--accent)}.sheet-scrim{display:none}@media(max-width:640px){.search-panel input{width:11rem}.statusbar{display:none}.aircraft-panel{top:auto;bottom:0;left:0;right:0;width:100%;max-height:82dvh;border-radius:var(--radius-lg) var(--radius-lg) 0 0;border-bottom:none;padding:.4rem 1rem calc(1rem + var(--safe-bottom));animation:sheet-up var(--dur) var(--ease)}.aircraft-panel.replay-active{display:none}@keyframes sheet-up{0%{transform:translateY(12%);opacity:.6}to{transform:translateY(0);opacity:1}}.aircraft-panel.collapsed{max-height:none;padding-top:.3rem}.sheet-grabber{display:flex;justify-content:center;align-items:center;width:100%;padding:.45rem 0 .55rem;margin:0;background:none;border:none;cursor:pointer}.sheet-grabber:before{content:"";width:38px;height:4px;border-radius:999px;background:var(--border-strong);transition:background var(--dur) var(--ease)}.sheet-grabber:hover:before{background:var(--text-muted)}.sheet-scrim{display:block;position:absolute;top:0;right:0;bottom:0;left:0;z-index:var(--z-overlay);background:var(--scrim);animation:scrim-in var(--dur) var(--ease)}@keyframes scrim-in{0%{opacity:0}to{opacity:1}}.replay-bar{bottom:calc(1rem + var(--safe-bottom));width:calc(100vw - 1.5rem)}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}
