:root{
  --bg:#07111f;--panel:rgba(7,17,31,.88);--panel2:rgba(15,29,48,.94);--text:#eef6ff;
  --muted:#9fb0c5;--line:rgba(255,255,255,.11);--blue:#2f8cff;--cyan:#4bd7ff;--yellow:#ffcf4b;--danger:#ff4d67;
  --shadow:0 18px 55px rgba(0,0,0,.34)
}
*{box-sizing:border-box}html,body,#app,#map{width:100%;height:100%;margin:0}body{font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif;background:var(--bg);color:var(--text);overflow:hidden}
button,input{font:inherit}.hidden{display:none!important}
.topbar{position:fixed;z-index:20;left:12px;right:12px;top:max(12px,env(safe-area-inset-top));height:58px;display:flex;gap:10px;align-items:center;pointer-events:none}
.topbar>*{pointer-events:auto}.brand,.search,.top-actions button{border:1px solid var(--line);background:var(--panel);backdrop-filter:blur(18px);box-shadow:var(--shadow)}
.brand{height:52px;border-radius:16px;color:#fff;display:flex;align-items:center;gap:9px;padding:0 14px;cursor:pointer}.brand-mark{width:31px;height:31px;display:grid;place-items:center;background:linear-gradient(135deg,var(--blue),var(--cyan));border-radius:10px;font-size:19px;transform:rotate(-15deg)}
.brand b{color:var(--cyan)}.brand small{font-size:9px;background:#e92746;padding:3px 5px;border-radius:20px;margin-left:5px;vertical-align:2px}.search{height:52px;border-radius:16px;display:flex;align-items:center;flex:1;max-width:680px;overflow:hidden;position:relative}.search input{flex:1;height:100%;border:0;outline:0;background:transparent;color:#fff;padding:0 44px 0 16px;min-width:0}.search input::placeholder{color:#91a4ba}.search>button[type=submit]{height:38px;margin-right:7px;border:0;border-radius:11px;background:linear-gradient(135deg,var(--blue),#1769dc);color:#fff;padding:0 17px;cursor:pointer;font-weight:700}.clear-btn{position:absolute;right:86px;background:transparent;border:0;color:#c7d5e5;font-size:25px;cursor:pointer;line-height:1}.top-actions{display:flex;gap:8px}.top-actions button{width:52px;height:52px;border-radius:16px;color:#fff;cursor:pointer;font-size:21px}
.statusbar{position:fixed;z-index:15;left:14px;bottom:max(14px,env(safe-area-inset-bottom));background:var(--panel);border:1px solid var(--line);backdrop-filter:blur(15px);border-radius:15px;padding:9px 13px;display:flex;align-items:center;gap:8px;font-size:12px;box-shadow:var(--shadow);max-width:calc(100vw - 28px)}.live-dot{width:8px;height:8px;border-radius:50%;background:#24e184;box-shadow:0 0 0 5px rgba(36,225,132,.12)}.sep{opacity:.35}
.zoom-hint{position:fixed;z-index:15;left:50%;top:84px;transform:translateX(-50%);background:var(--panel);border:1px solid var(--line);border-radius:16px;padding:11px 15px;backdrop-filter:blur(16px);display:flex;gap:8px;align-items:center;box-shadow:var(--shadow);font-size:13px}.zoom-hint span{color:var(--muted)}
.details,.airport-panel{position:fixed;z-index:70;right:14px;top:84px;width:min(420px,calc(100vw - 28px));max-height:calc(100vh - 160px);overflow:auto;background:var(--panel2);border:1px solid var(--line);border-radius:22px;padding:18px;backdrop-filter:blur(20px);box-shadow:var(--shadow)}
.close-details{position:absolute;right:12px;top:10px;border:0;background:rgba(255,255,255,.08);color:#fff;width:32px;height:32px;border-radius:10px;font-size:22px;cursor:pointer}.details-head,.airport-head{display:flex;align-items:center;gap:13px;padding-right:35px}.plane-badge,.airport-badge{width:52px;height:52px;border-radius:15px;display:grid;place-items:center;font-size:25px;flex:none}.plane-badge{background:linear-gradient(135deg,var(--blue),var(--cyan));transform:rotate(-12deg)}.airport-badge{background:linear-gradient(135deg,#f4b642,var(--yellow));color:#17202b;transform:rotate(-8deg);font-size:29px}.details h2,.airport-panel h2{margin:0;font-size:24px}.details p,.airport-panel p{margin:4px 0 0;color:var(--muted)}
.detail-grid{display:grid;grid-template-columns:1fr 1fr;gap:9px;margin-top:14px}.detail-grid div{background:rgba(255,255,255,.055);border:1px solid rgba(255,255,255,.07);border-radius:13px;padding:11px}.detail-grid span{display:block;color:var(--muted);font-size:11px;margin-bottom:4px}.detail-grid b{font-size:15px}.flight-actions{display:grid;grid-template-columns:112px 1fr;gap:8px;margin-top:12px}.follow-btn,.route-btn{height:44px;border:0;border-radius:13px;color:#fff;font-weight:800;cursor:pointer}.follow-btn{width:100%;margin-top:0;background:linear-gradient(135deg,var(--blue),#1769dc)}.route-btn{background:rgba(255,207,75,.12);border:1px solid rgba(255,207,75,.42);color:#ffdc70}.route-btn.active{background:linear-gradient(135deg,#ffcf4b,#f6a928);color:#17120a;border-color:transparent}.route-btn:disabled{opacity:.42;cursor:not-allowed}.attribution{margin-top:12px;color:#7f91a7;font-size:10px;text-align:center}
.route-card{margin-top:15px;border:1px solid rgba(75,215,255,.18);background:linear-gradient(135deg,rgba(47,140,255,.1),rgba(75,215,255,.05));border-radius:16px;padding:12px}.route-loading,.route-missing{color:var(--muted);font-size:12px;text-align:center;padding:8px}.route-airline{font-size:12px;color:#b8dfff;margin-bottom:9px;font-weight:700}.route-main{display:grid;grid-template-columns:1fr 60px 1fr;align-items:center;gap:8px}.route-airport{min-width:0}.route-airport strong{display:block;font-size:27px;color:#fff;line-height:1}.route-airport span{display:block;font-size:12px;margin-top:5px;color:#dce9f7;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.route-airport small{display:block;font-size:10px;color:var(--muted);margin-top:3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.route-destination{text-align:right}.route-arrow{position:relative;text-align:center;color:var(--cyan)}.route-arrow i{position:absolute;height:1px;background:linear-gradient(90deg,transparent,var(--cyan),transparent);left:0;right:0;top:50%}.route-arrow span{position:relative;z-index:1;background:#13253a;padding:0 5px}
.airport-code-line{display:flex;gap:9px;align-items:center}.airport-code-line span{font-size:11px;color:#18202c;background:var(--yellow);border-radius:7px;padding:3px 6px;font-weight:800}.airport-head small{display:block;color:#8093a9;margin-top:4px}.airport-actions{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:15px 0}.airport-actions button{border:1px solid var(--line);background:rgba(255,255,255,.06);color:#fff;border-radius:11px;padding:10px;cursor:pointer;font-weight:700}.airport-actions button:hover{background:rgba(255,255,255,.1)}.airport-flights-loading,.airport-empty{padding:18px 10px;text-align:center;color:var(--muted);font-size:12px;border:1px dashed rgba(255,255,255,.12);border-radius:13px}.airport-flight-columns{display:grid;gap:15px}.flight-section-title{display:flex;justify-content:space-between;align-items:center;margin-bottom:7px;font-size:13px;font-weight:800}.flight-section-title b{min-width:25px;text-align:center;background:rgba(255,255,255,.08);border-radius:9px;padding:3px 7px}.flight-list{display:grid;gap:6px}.flight-row{width:100%;border:1px solid rgba(255,255,255,.08);background:rgba(255,255,255,.045);color:#fff;border-radius:12px;padding:9px 10px;display:flex;justify-content:space-between;align-items:center;text-align:left;cursor:pointer}.flight-row:hover{background:rgba(47,140,255,.12);border-color:rgba(75,215,255,.24)}.flight-row strong{display:block;font-size:14px}.flight-row span{display:block;color:var(--muted);font-size:11px;margin-top:3px}.flight-meta{text-align:right}.flight-meta b{display:block;font-size:11px}.flight-meta small{display:block;color:var(--muted);font-size:10px;margin-top:3px}.flight-none{font-size:11px;color:#71859c;padding:8px 4px}
.toast{position:fixed;z-index:50;left:50%;bottom:75px;transform:translateX(-50%);background:#0f1e31;color:#fff;border:1px solid var(--line);border-radius:13px;padding:10px 14px;box-shadow:var(--shadow);font-size:13px}.maplibregl-ctrl-group{background:var(--panel)!important;border:1px solid var(--line)!important;box-shadow:var(--shadow)!important}.maplibregl-ctrl-group button{filter:invert(1)}.maplibregl-ctrl-bottom-right{bottom:55px!important}.maplibregl-popup-content{background:#0c1b2e;color:#fff;border-radius:13px;padding:10px 12px;box-shadow:var(--shadow)}.maplibregl-popup-tip{border-top-color:#0c1b2e!important}
@media(max-width:760px){.topbar{left:8px;right:8px;top:max(8px,env(safe-area-inset-top));height:auto;flex-wrap:wrap}.brand{height:46px;padding:0 10px}.brand span:last-child{font-size:13px}.brand-mark{width:28px;height:28px}.top-actions{margin-left:auto}.top-actions button{width:46px;height:46px;border-radius:14px}.search{order:3;flex-basis:100%;max-width:none;height:48px}.details,.airport-panel{left:8px;right:8px;top:auto;bottom:max(58px,calc(env(safe-area-inset-bottom) + 54px));width:auto;max-height:64vh;border-radius:20px}.zoom-hint{top:116px;width:calc(100vw - 16px);flex-direction:column;align-items:flex-start}.statusbar{left:8px;bottom:max(8px,env(safe-area-inset-bottom));font-size:10px}.sep{display:none}.statusbar{gap:6px;flex-wrap:wrap}.maplibregl-ctrl-top-right{top:110px!important}.route-main{grid-template-columns:1fr 48px 1fr}.route-airport strong{font-size:23px}}

/* V8 — modern airport FIDS board */
.airport-board{right:auto;left:14px;top:84px;width:min(430px,calc(100vw - 28px));padding:0;overflow:hidden;background:rgba(10,16,25,.94);border-color:rgba(255,255,255,.14);box-shadow:0 28px 80px rgba(0,0,0,.48)}
.airport-board .close-details{z-index:3;background:rgba(0,0,0,.28);backdrop-filter:blur(12px)}
.airport-board-hero{padding:20px 18px 14px;background:radial-gradient(circle at 18% 15%,rgba(255,207,75,.17),transparent 42%),linear-gradient(145deg,rgba(255,255,255,.05),rgba(255,255,255,.015));border-bottom:1px solid rgba(255,255,255,.09)}
.airport-hero-top{display:flex;align-items:center;gap:13px;padding-right:34px}.airport-head-copy{min-width:0}.airport-head-copy p{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:13px;color:#c7d2df}.airport-head-copy small{font-size:11px;color:#8495a9}
.airport-quickbar{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:15px}.airport-quickbar button{height:39px;border-radius:11px;border:1px solid rgba(255,255,255,.1);background:rgba(255,255,255,.055);color:#eef6ff;font-weight:750;cursor:pointer}.airport-quickbar button:hover{background:rgba(255,255,255,.09)}
.board-notice{margin:10px 12px 0;padding:10px 11px;border:1px solid rgba(255,207,75,.26);background:rgba(255,207,75,.08);color:#f9df93;border-radius:11px;font-size:11px;line-height:1.35}
.board-tabs{display:grid;grid-template-columns:1fr 1fr;padding:12px 12px 0;gap:6px}.board-tab{position:relative;height:45px;border:0;border-bottom:2px solid transparent;background:transparent;color:#8192a6;font-weight:800;cursor:pointer}.board-tab b{font-size:10px;margin-left:5px;background:rgba(255,255,255,.08);padding:2px 6px;border-radius:20px}.board-tab.active{color:#fff;border-bottom-color:#ffcf4b}.board-tab.active b{background:#ffcf4b;color:#101722}
.board-datebar{height:54px;margin:0 12px;display:grid;grid-template-columns:36px 1fr 36px;align-items:center;border-bottom:1px solid rgba(255,255,255,.09)}.board-datebar button{border:0;background:transparent;color:#56677a;font-size:28px}.board-datebar div{text-align:center}.board-datebar small{display:block;color:#7f90a3;font-size:9px;text-transform:uppercase;letter-spacing:.11em}.board-datebar strong{display:block;margin-top:2px;font-size:12px;color:#e8eef6}
.airport-board #airportFlightsContent{overflow:auto;max-height:calc(100vh - 370px);padding:4px 0 8px}.flight-board-list{gap:0}.flight-board-row{width:100%;min-height:72px;border:0;border-bottom:1px solid rgba(255,255,255,.075);background:transparent;color:#fff;display:grid;grid-template-columns:72px 42px 1fr 20px;align-items:center;gap:9px;padding:9px 13px;text-align:left;cursor:pointer}.flight-board-row:hover{background:rgba(255,255,255,.045)}
.board-time strong{display:block;font-size:14px;letter-spacing:.02em}.flight-status{display:inline-block;margin-top:5px;font-size:9px;font-weight:850;border-radius:5px;padding:2px 5px;white-space:nowrap}.flight-status.scheduled{background:rgba(255,255,255,.09);color:#aebdcd}.flight-status.live{background:rgba(36,225,132,.13);color:#42e698}.flight-status.delayed{background:rgba(255,183,59,.14);color:#ffc55d}.flight-status.landed{background:rgba(75,215,255,.12);color:#75e2ff}.flight-status.cancelled{background:rgba(255,77,103,.14);color:#ff7890}
.airline-chip{width:37px;height:37px;border-radius:10px;display:grid;place-items:center;background:linear-gradient(145deg,#fff,#dce7f1);color:#142033;font-size:10px;font-weight:900;box-shadow:0 5px 16px rgba(0,0,0,.2)}.board-flight-main{min-width:0}.board-flight-main strong{display:block;font-size:15px}.board-flight-main span{display:block;color:#aebdcd;font-size:11px;margin-top:3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.board-flight-main small{display:block;color:#687a8e;font-size:9px;margin-top:3px}.board-chevron{color:#68809a;font-size:25px;text-align:right}.airport-board-footer{min-height:34px;border-top:1px solid rgba(255,255,255,.08);display:flex;align-items:center;justify-content:center;gap:6px;color:#687a8e;font-size:9px;padding:8px 12px}.airport-board .airport-flights-loading,.airport-board .airport-empty{margin:12px;border-radius:12px}.spinner{display:inline-block;width:12px;height:12px;border:2px solid rgba(255,255,255,.15);border-top-color:#ffcf4b;border-radius:50%;animation:spin .8s linear infinite;vertical-align:-2px;margin-right:6px}@keyframes spin{to{transform:rotate(360deg)}}
@media(max-width:760px){.airport-board{left:8px;right:8px;top:auto;bottom:max(58px,calc(env(safe-area-inset-bottom) + 54px));width:auto;max-height:72vh;border-radius:22px}.airport-board #airportFlightsContent{max-height:38vh}.flight-board-row{grid-template-columns:66px 40px 1fr 18px;padding-left:10px;padding-right:10px}}

/* V9 — live flight progress card */
.flight-progress{margin-top:14px;padding-top:13px;border-top:1px solid rgba(255,255,255,.09)}
.progress-head{display:flex;align-items:center;justify-content:space-between;font-size:10px;letter-spacing:.08em;color:#8da0b7;font-weight:800}.progress-head b{color:#ffcf4b;font-size:12px;letter-spacing:0}
.progress-track{position:relative;height:10px;margin:10px 0 13px;border-radius:999px;background:rgba(255,255,255,.08);overflow:visible}.progress-track i{display:block;height:100%;width:0;border-radius:999px;background:linear-gradient(90deg,#2f8cff,#4bd7ff,#ffcf4b);box-shadow:0 0 18px rgba(75,215,255,.26);transition:width .5s ease}.progress-plane{position:absolute;top:50%;left:50%;transform:translate(-50%,-52%) rotate(90deg);font-size:18px;color:#fff;text-shadow:0 2px 8px #000;pointer-events:none}
.progress-distance-grid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:7px}.progress-distance-grid div,.progress-time-grid div{background:rgba(255,255,255,.045);border:1px solid rgba(255,255,255,.07);border-radius:10px;padding:8px;min-width:0}.progress-distance-grid small,.progress-time-grid small{display:block;color:#7f91a7;font-size:9px;margin-bottom:4px}.progress-distance-grid strong{font-size:12px;color:#fff;white-space:nowrap}.progress-time-grid{display:grid;grid-template-columns:1fr 1.3fr 1fr;gap:7px;margin-top:7px}.progress-time-grid b{display:block;font-size:14px;color:#fff}.progress-time-grid span{display:block;color:#ffcf4b;font-size:9px;margin-top:3px;white-space:nowrap}
@media(max-width:760px){.progress-distance-grid{grid-template-columns:1fr 1fr}.progress-distance-grid div:last-child{grid-column:1/-1}.progress-time-grid{grid-template-columns:1fr 1fr}.progress-time-grid div:last-child{grid-column:1/-1}}


/* V10 — unmistakable marker for the selected aircraft's CURRENT LIVE position */
.tracked-flight-marker{position:relative;width:52px;height:52px;pointer-events:none;filter:drop-shadow(0 4px 7px rgba(0,0,0,.58));z-index:18}
.tracked-plane{position:absolute;left:50%;top:50%;width:39px;height:39px;margin:-19.5px 0 0 -19.5px;display:grid;place-items:center;transform-origin:50% 50%;will-change:transform}
.tracked-plane svg{width:35px;height:35px;display:block;fill:#ff3355;stroke:#fff;stroke-width:1.15;paint-order:stroke fill;filter:drop-shadow(0 1px 2px rgba(0,0,0,.75))}
.tracked-label{position:absolute;left:50%;bottom:48px;transform:translateX(-50%);white-space:nowrap;background:#fff;color:#111820;border:1px solid rgba(0,0,0,.45);border-radius:5px;padding:4px 7px;font:800 11px/1 system-ui,sans-serif;letter-spacing:.1px;box-shadow:0 2px 6px rgba(0,0,0,.38)}


/* V16 — Flight Details PRO */
.details{width:min(455px,calc(100vw - 28px));scrollbar-width:thin;scrollbar-color:rgba(75,215,255,.35) transparent}
.flight-pro-hero{margin-top:14px;border:1px solid rgba(255,255,255,.09);border-radius:17px;overflow:hidden;background:rgba(255,255,255,.035)}
.aircraft-photo-wrap{height:158px;position:relative;background:radial-gradient(circle at 50% 30%,rgba(75,215,255,.14),transparent 55%),linear-gradient(145deg,#0d1b2d,#091320);overflow:hidden}
.aircraft-photo-wrap img{width:100%;height:100%;display:block;object-fit:cover}.aircraft-photo-fallback{position:absolute;inset:0;display:grid;place-items:center;align-content:center;gap:6px;color:#7190ad}.aircraft-photo-fallback span{font-size:48px;color:#4bd7ff;filter:drop-shadow(0 8px 18px rgba(75,215,255,.22));transform:rotate(-12deg)}.aircraft-photo-fallback small{font-size:10px}.photo-credit{position:absolute;right:7px;bottom:6px;background:rgba(3,10,19,.72);border:1px solid rgba(255,255,255,.08);border-radius:7px;padding:3px 6px;font-size:8px;color:#a8b7c8;backdrop-filter:blur(8px)}
.pro-brand-row{min-height:56px;display:grid;grid-template-columns:42px 1fr auto;align-items:center;gap:10px;padding:9px 11px;border-top:1px solid rgba(255,255,255,.07)}.airline-logo-box{width:42px;height:42px;border-radius:11px;background:#fff;display:grid;place-items:center;overflow:hidden;padding:4px}.airline-logo-box img{max-width:100%;max-height:100%;object-fit:contain}.pro-brand-copy{min-width:0}.pro-brand-copy strong{display:block;font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pro-brand-copy span{display:block;margin-top:3px;font-size:10px;color:#8296ad}.live-pill{font-size:9px;font-weight:900;letter-spacing:.45px;color:#65f6ad;background:rgba(36,225,132,.11);border:1px solid rgba(36,225,132,.3);padding:5px 7px;border-radius:999px}.live-pill.stale{color:#ffcf4b;border-color:rgba(255,207,75,.35);background:rgba(255,207,75,.09)}
.pro-section{margin-top:12px;border:1px solid rgba(255,255,255,.085);border-radius:16px;background:rgba(255,255,255,.035);padding:12px}.pro-section-title{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:10px;color:#91a5bd;font-size:10px;font-weight:900;letter-spacing:.55px}.pro-section-title b{color:#d7e8f8;font-size:10px;letter-spacing:0}.aircraft-pro-main{display:grid;grid-template-columns:1fr 1fr;gap:8px}.aircraft-pro-main>div{padding:9px 10px;border-radius:11px;background:rgba(255,255,255,.045);min-width:0}.aircraft-pro-main small{display:block;color:#7f93aa;font-size:9px;margin-bottom:4px}.aircraft-pro-main strong{display:block;font-size:12px;line-height:1.25;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.live-extra-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:7px;margin-top:8px}.live-extra-grid>div{padding:8px;border-radius:10px;background:rgba(8,18,31,.58);border:1px solid rgba(255,255,255,.055)}.live-extra-grid span{display:block;color:#73869d;font-size:8px;margin-bottom:3px}.live-extra-grid b{font-size:11px;color:#eaf5ff}.flight-graphs{padding-bottom:10px}.graph-card{border-radius:12px;background:rgba(7,14,24,.58);border:1px solid rgba(255,255,255,.055);padding:8px 9px;margin-top:8px;overflow:hidden}.graph-head{display:flex;justify-content:space-between;align-items:center;font-size:9px;color:#7f93aa;margin-bottom:3px}.graph-head b{font-size:10px;color:#dff6ff}.graph-card canvas{display:block;width:100%;height:86px}.graph-foot{display:flex;justify-content:space-between;gap:8px;color:#71869e;font-size:9px;padding:8px 2px 0}
@media(max-width:760px){.details{max-height:72vh}.aircraft-photo-wrap{height:135px}.aircraft-pro-main{grid-template-columns:1fr 1fr}.live-extra-grid{grid-template-columns:repeat(3,1fr)}}

.photo-credit.clickable{cursor:pointer;text-decoration:none}.photo-credit.clickable:hover{color:#fff;border-color:rgba(255,207,75,.45)}

/* V18.3 — selected aircraft stays below the details UI on small screens */
@media(max-width:760px){.details,.airport-panel,.airport-board{z-index:90}.tracked-flight-marker{z-index:12}}

.aircraft-photo-fallback.loading span{animation:photoPlaneFloat 1.15s ease-in-out infinite alternate}.aircraft-photo-fallback.loading small{color:#9bb0c6}@keyframes photoPlaneFloat{from{transform:translateY(3px) rotate(-12deg);opacity:.65}to{transform:translateY(-3px) rotate(-12deg);opacity:1}}
