@import url('https://fonts.googleapis.com/css2?family=DM+Mono:wght@400;500&family=Manrope:wght@400;500;600;700;800&display=swap');
:root{--ink:#dce8f0;--muted:#8b9bab;--line:rgba(173,205,219,.14);--panel:#091827ee;--accent:#63e7d4;--warm:#eea45b;--shadow:0 20px 60px rgba(0,0,0,.34)}*{box-sizing:border-box}body{margin:0;background:#07111e;color:var(--ink);font-family:Manrope,"Microsoft YaHei",sans-serif;overflow:hidden}.app-shell{height:100vh;min-height:600px;position:relative}.map-stage,#map{height:100%;width:100%}.map-stage{background:#0d2638}.leaflet-container{background:#0b2232;font:inherit}.leaflet-tile{filter:saturate(.78) brightness(.74) contrast(1.15)}.map-vignette{position:absolute;inset:0;z-index:400;pointer-events:none;background:linear-gradient(90deg,rgba(3,12,22,.6),transparent 42%,rgba(3,12,22,.12)),linear-gradient(0deg,rgba(4,12,21,.35),transparent 35%)}.topbar{position:absolute;z-index:500;top:28px;left:34px;right:34px;display:flex;align-items:center;justify-content:space-between;pointer-events:none}.brand{pointer-events:auto;color:#effbff;text-decoration:none;font-size:21px;font-weight:800;letter-spacing:3px;display:flex;gap:10px;align-items:center}.brand>span:last-child>span{color:var(--accent)}.brand-mark{color:var(--accent);font-size:25px;transform:rotate(25deg)}.live-pill{margin-left:auto;margin-right:16px;padding:8px 12px;background:rgba(8,23,39,.8);border:1px solid var(--line);border-radius:100px;backdrop-filter:blur(12px);font:11px "DM Mono",monospace;letter-spacing:1.3px;display:flex;align-items:center;gap:8px}.live-pill i,.flight-status i{width:7px;height:7px;border-radius:50%;background:var(--accent);box-shadow:0 0 11px var(--accent);display:inline-block}.live-pill b{font-weight:400;color:var(--muted);letter-spacing:0}.side-panel{position:absolute;z-index:600;right:0;top:0;width:390px;height:100%;background:var(--panel);border-left:1px solid var(--line);backdrop-filter:blur(24px);padding:100px 23px 17px;display:flex;flex-direction:column;box-shadow:-12px 0 60px #020a12aa}.panel-heading{padding:0 5px}.eyebrow{font:500 10px "DM Mono",monospace;letter-spacing:1.6px;color:var(--accent);margin:0 0 9px}.panel-heading h1{font-size:29px;letter-spacing:-1.2px;margin:0;font-weight:700}.panel-description{font-size:13px;color:var(--muted);margin:7px 0 20px}.metrics{border-block:1px solid var(--line);display:grid;grid-template-columns:repeat(3,1fr);margin:0 -2px 19px;padding:15px 0}.metrics>div{padding-left:10px;border-left:1px solid var(--line)}.metrics>div:first-child{border:0}.metrics span{display:block;font:500 19px "DM Mono",monospace;color:#f5fdff}.metrics small{color:var(--muted);font-size:10px;margin-top:5px;display:block}.search-wrap{height:44px;background:#102438;border:1px solid #1a3850;border-radius:9px;display:flex;align-items:center;padding:0 11px;gap:9px}.search-wrap svg{width:16px;fill:none;stroke:#91a7b9;stroke-width:1.8}.search-wrap input{width:100%;min-width:0;background:transparent;border:0;outline:0;color:var(--ink);font:13px inherit}.search-wrap input::placeholder{color:#708498}.search-wrap kbd{font:10px "DM Mono",monospace;color:#7890a1;background:#193148;padding:3px 4px;border-radius:3px;white-space:nowrap}.filter-row{display:flex;gap:8px;padding:15px 0 10px}.filter{font:12px inherit;color:#9eb1bf;background:transparent;border:0;padding:5px 9px;border-radius:5px;cursor:pointer}.filter.active{color:#07202a;background:var(--accent);font-weight:700}.flight-list{overflow:auto;flex:1;margin:0 -6px;padding:2px 6px}.flight-list::-webkit-scrollbar{width:5px}.flight-list::-webkit-scrollbar-thumb{background:#26465b;border-radius:5px}.flight-row{padding:13px 9px;display:grid;grid-template-columns:33px 1fr auto;gap:10px;align-items:center;border-bottom:1px solid rgba(173,205,219,.09);cursor:pointer;transition:.18s}.flight-row:hover,.flight-row.selected{background:#123046;border-radius:8px;border-color:transparent}.mini-plane{font-size:18px;color:var(--accent);transform:rotate(var(--heading));display:block;text-align:center}.flight-row.ground .mini-plane{color:#8797a1}.flight-main strong{font:600 13px "DM Mono",monospace;color:#effbff}.flight-main small{display:block;color:var(--muted);font-size:11px;margin-top:3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:160px}.row-data{text-align:right}.row-data b{font:500 11px "DM Mono",monospace;color:#b9c9d1;display:block}.row-data span{font-size:10px;color:#6f8596}.panel-footer{border-top:1px solid var(--line);padding:15px 5px 0;color:#718795;font:10px "DM Mono",monospace;display:flex;justify-content:space-between}.panel-footer span:last-child{color:var(--accent)}.map-tools{position:absolute;z-index:500;left:34px;bottom:38px;display:grid;gap:8px}.tool-button,.icon-button{color:#dceaf1;background:rgba(8,25,41,.88);border:1px solid var(--line);width:40px;height:40px;border-radius:8px;cursor:pointer;font-size:20px;backdrop-filter:blur(12px)}.tool-button:hover,.tool-button.active{border-color:#5dd8ca;color:var(--accent)}.map-legend{position:absolute;z-index:500;bottom:41px;left:95px;display:flex;gap:19px;color:#b3c5d0;font:11px "DM Mono",monospace}.map-legend span{display:flex;align-items:center;gap:6px}.legend-plane{width:9px;height:9px;background:var(--accent);transform:rotate(45deg)}.legend-route{width:16px;height:1px;background:var(--warm)}.flight-card{position:absolute;z-index:650;left:34px;top:110px;width:294px;background:#0c2033f5;border:1px solid #20445a;border-radius:13px;padding:20px;box-shadow:var(--shadow);backdrop-filter:blur(17px);transition:.22s}.flight-card.is-hidden{opacity:0;transform:translateY(-8px);pointer-events:none}.card-close{position:absolute;right:12px;top:11px;border:0;background:transparent;color:#9ab0c0;font-size:22px;cursor:pointer}.flight-card-head{display:flex;align-items:center;gap:12px}.plane-badge{display:grid;place-items:center;width:43px;height:43px;border-radius:10px;background:#14384b;color:var(--accent);font-size:21px}.flight-card h2{font:600 18px "DM Mono",monospace;margin:0}.flight-status{display:flex;align-items:center;gap:7px;margin:19px 0 16px;background:#112c41;padding:9px 10px;border-radius:7px;font-size:12px}.flight-status b{margin-left:auto;font:500 11px "DM Mono",monospace;color:var(--warm)}.flight-data{display:grid;grid-template-columns:repeat(2,1fr);margin:0;border-top:1px solid var(--line);border-left:1px solid var(--line)}.flight-data div{padding:12px 10px;border-right:1px solid var(--line);border-bottom:1px solid var(--line)}dt{color:#7e96a7;font-size:10px}dd{font:500 12px "DM Mono",monospace;margin:5px 0 0;color:#dcebf0}.aircraft-id{font:10px "DM Mono",monospace;color:#8198a7;margin-top:15px}.aircraft-id code{color:var(--accent);margin-left:5px}.plane-marker{color:var(--accent);font-size:21px;line-height:21px;text-shadow:0 0 8px #0dffdb,0 1px 3px #000;transform-origin:center}.plane-marker.ground{color:#a7b5bc;text-shadow:0 1px 3px #000}.empty-state{height:100%;min-height:160px;display:flex;flex-direction:column;justify-content:center;align-items:center;color:#9bb0bd;font-size:13px}.empty-state p{margin:12px 0 3px}.empty-state small{font:10px "DM Mono",monospace;color:#577083}.radar-loader{width:34px;height:34px;border:2px solid #326273;border-top-color:var(--accent);border-radius:50%;animation:spin 1.1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.mobile-only{display:none}
@media(max-width:760px){body{overflow:hidden}.side-panel{width:100%;max-width:420px;transform:translateX(100%);transition:transform .25s;padding-top:82px}.side-panel.open{transform:none}.topbar{top:20px;left:20px;right:20px}.brand{font-size:18px}.mobile-only{display:block;pointer-events:auto}.map-tools{left:20px;bottom:23px}.map-legend{display:none}.flight-card{left:18px;right:18px;top:auto;bottom:80px;width:auto}.live-pill{margin-right:9px}.side-panel .panel-footer{padding-bottom:3px}}
