:root{--bg:#040914;--panel:#0a1527;--panel2:#0d1d35;--line:#1c3352;--text:#f4f8ff;--muted:#91a5c2;--accent:#66d7ff;--accent2:#9a8cff;--excellent:#55e6a5;--good:#7bc8ff;--fair:#f1c76a;--poor:#ef7d84;--shadow:0 18px 45px rgba(0,0,0,.28)}
*{box-sizing:border-box}html{background:var(--bg);color-scheme:dark}body{margin:0;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;background:radial-gradient(circle at 15% -5%,#15325b 0,transparent 32rem),radial-gradient(circle at 90% 2%,#241a5a 0,transparent 25rem),var(--bg);color:var(--text);min-height:100vh}.hero{max-width:1440px;margin:auto;padding:30px 22px 18px;display:flex;justify-content:space-between;align-items:center;gap:18px}.brand{display:flex;gap:15px;align-items:center}.mark{width:48px;height:48px;display:grid;place-items:center;border:1px solid #3c6ca0;border-radius:15px;background:linear-gradient(145deg,#15375e,#121737);font-size:26px;box-shadow:0 0 35px rgba(102,215,255,.15)}h1,h2,p{margin:0}.brand h1{font-size:clamp(1.5rem,4vw,2.1rem);letter-spacing:-.03em}.brand p{color:var(--muted);margin-top:4px;font-size:.95rem}main{max-width:1440px;margin:auto;padding:0 22px 50px}.panel{background:linear-gradient(150deg,rgba(16,36,63,.93),rgba(7,18,35,.96));border:1px solid var(--line);border-radius:22px;box-shadow:var(--shadow)}.location-panel{padding:22px}.panel-head{display:flex;justify-content:space-between;align-items:center;gap:15px}.eyebrow{text-transform:uppercase;color:var(--accent);font-weight:800;letter-spacing:.12em;font-size:.7rem}.panel h2,.results-head h2{font-size:1.25rem;margin-top:4px}.coords{color:var(--muted);font-size:.9rem;margin-top:8px}.button{border:1px solid #38587c;border-radius:12px;padding:10px 14px;background:#10243e;color:var(--text);font-weight:750;cursor:pointer}.button.primary{border-color:#57c6f1;background:linear-gradient(135deg,#0e9fd2,#6a73e8);color:white}.button.ghost{background:transparent}.manual-location{display:flex;gap:10px;align-items:end;margin-top:18px;flex-wrap:wrap}.manual-location label,.control-grid label{font-size:.78rem;font-weight:700;color:var(--muted);display:grid;gap:6px}.manual-location input{width:145px}.manual-location input,.control-grid select,.control-grid input{background:#071426;border:1px solid #2a4567;border-radius:10px;color:white;padding:10px;min-height:42px}.sky-strip{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin:14px 0}.sky-stat{background:rgba(9,25,47,.82);border:1px solid var(--line);border-radius:17px;padding:16px}.sky-stat span{display:block;color:var(--muted);font-size:.72rem;text-transform:uppercase;letter-spacing:.08em}.sky-stat strong{display:block;font-size:1.05rem;margin:6px 0 2px}.sky-stat small{color:#7389a8}.controls{padding:18px;margin-top:14px}.control-grid{display:grid;grid-template-columns:1.2fr 1fr 1.6fr 1fr;gap:12px}.check-row{display:flex;gap:24px;color:var(--muted);font-size:.9rem;margin-top:15px;flex-wrap:wrap}.check-row input{accent-color:#62cffa}.recommendation{margin:20px 0;background:linear-gradient(120deg,rgba(22,78,91,.9),rgba(44,30,92,.9));border:1px solid #477493;border-radius:22px;padding:21px;display:grid;grid-template-columns:auto 1fr auto;gap:16px;align-items:center}.top-icon{font-size:30px}.top-copy small{color:#9fd9ed;text-transform:uppercase;font-weight:800;letter-spacing:.1em}.top-copy h3{margin:4px 0;font-size:1.35rem}.top-copy p{color:#bac9dc;font-size:.9rem}.score-ring{width:64px;height:64px;border-radius:50%;display:grid;place-items:center;border:6px solid var(--excellent);font-weight:900;font-size:1.15rem}.results-head{display:flex;align-items:end;justify-content:space-between;gap:15px;margin:28px 3px 13px}.legend{display:flex;gap:14px;color:var(--muted);font-size:.78rem}.dot{width:8px;height:8px;border-radius:50%;display:inline-block;margin-right:5px}.dot.excellent{background:var(--excellent)}.dot.good{background:var(--good)}.dot.fair{background:var(--fair)}.target-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}.target-card{border:1px solid var(--line);border-radius:18px;padding:17px;background:linear-gradient(160deg,rgba(12,29,53,.96),rgba(5,14,28,.96));box-shadow:0 12px 30px rgba(0,0,0,.15);cursor:pointer;transition:.15s transform,.15s border-color}.target-card:hover{transform:translateY(-2px);border-color:#38658c}.card-top{display:flex;justify-content:space-between;gap:10px}.object-id{color:var(--accent);font-size:.77rem;font-weight:850;letter-spacing:.06em}.target-card h3{font-size:1.12rem;margin:3px 0 2px}.subtitle{color:var(--muted);font-size:.78rem}.score{font-weight:900;font-size:1.08rem}.score.excellent{color:var(--excellent)}.score.good{color:var(--good)}.score.fair{color:var(--fair)}.score.poor{color:var(--poor)}.metrics{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:16px}.metric{background:#071426;border:1px solid #182c46;border-radius:11px;padding:9px 7px}.metric span{display:block;color:#6f86a5;font-size:.65rem;text-transform:uppercase}.metric strong{font-size:.86rem;margin-top:2px;display:block}.badge-row{display:flex;gap:6px;flex-wrap:wrap;margin-top:12px}.badge{font-size:.66rem;font-weight:800;padding:5px 7px;border-radius:8px;background:#102944;color:#a9d9f0;border:1px solid #224667}.badge.filter{background:#28224f;color:#c9c0ff;border-color:#4d4385}.empty{text-align:center;color:var(--muted);padding:45px}.about{margin-top:26px;padding:22px}.about p{color:#aab9cd;line-height:1.55;margin-top:10px}.about .note{font-size:.84rem;color:#7f94b0}dialog{padding:0;border:0;background:transparent;max-width:640px;width:calc(100% - 28px)}dialog::backdrop{background:rgba(0,4,12,.78);backdrop-filter:blur(4px)}.dialog-card{position:relative;background:#0a182c;border:1px solid #294b70;border-radius:22px;padding:25px;color:white;box-shadow:var(--shadow)}.close{position:absolute;right:13px;top:10px;border:0;background:none;color:#a8bbd2;font-size:29px;cursor:pointer}.detail-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;margin-top:18px}.detail{background:#071426;border:1px solid #1b3452;border-radius:12px;padding:11px}.detail span{display:block;color:#748baa;font-size:.7rem;text-transform:uppercase}.detail strong{display:block;margin-top:3px}.dialog-card p{color:#aebfd3;line-height:1.5;margin-top:15px}.timeline{height:50px;margin-top:14px;border-radius:10px;background:linear-gradient(90deg,#091329,#101f42,#182b54,#101f42,#091329);position:relative;overflow:hidden}.timeline .peak{position:absolute;bottom:0;width:3px;height:100%;background:#67d9ff}.timeline-labels{display:flex;justify-content:space-between;color:#6f86a5;font-size:.65rem;margin-top:4px}footer{text-align:center;color:#576d8b;font-size:.75rem;padding:25px 20px 36px}@media(max-width:850px){.target-grid{grid-template-columns:repeat(2,1fr)}.control-grid{grid-template-columns:repeat(2,1fr)}.sky-strip{grid-template-columns:repeat(2,1fr)}}@media(max-width:570px){.hero{padding-top:20px}.brand p{display:none}.panel-head{align-items:flex-start;flex-direction:column}.panel-head .button{width:100%}.manual-location{display:grid;grid-template-columns:1fr 1fr}.manual-location label input{width:100%}.manual-location .button{grid-column:1/-1}.control-grid{grid-template-columns:1fr 1fr}.target-grid{grid-template-columns:1fr}.legend{display:none}.recommendation{grid-template-columns:auto 1fr}.recommendation .score-ring{grid-column:1/-1;width:100%;height:10px;border-width:0;border-radius:5px;background:var(--excellent);font-size:0}.metrics{gap:6px}.hero .button{display:none!important}}

.tabs-panel{padding:8px;margin-top:14px}.tabs{display:flex;gap:7px;overflow:auto}.tab{border:0;background:transparent;color:var(--muted);font-weight:800;padding:10px 14px;border-radius:12px;white-space:nowrap;cursor:pointer}.tab.active{background:#15314f;color:#fff}.sky-strip{grid-template-columns:repeat(5,1fr)}.control-grid{grid-template-columns:1.1fr 1fr 1.3fr .8fr 1.25fr}.target-card{position:relative;overflow:hidden;padding-top:0}.thumb{height:105px;margin:0 -17px 15px;display:grid;place-items:center;position:relative;border-bottom:1px solid var(--line);background:radial-gradient(circle at 45% 45%,rgba(130,180,255,.48),rgba(30,50,86,.18) 28%,#060d1b 67%)}.thumb span{font-size:44px;text-shadow:0 0 22px currentColor}.thumb small{position:absolute;bottom:8px;left:12px;color:#a9bed9;font-weight:900;letter-spacing:.08em}.thumb-galaxy{background:radial-gradient(ellipse at 48% 51%,rgba(255,230,190,.7),rgba(115,142,205,.28) 24%,#050b18 64%)}.thumb-nebula{background:radial-gradient(circle at 60% 45%,rgba(107,210,255,.35),transparent 28%),radial-gradient(circle at 38% 58%,rgba(188,90,185,.38),transparent 34%),#050b18}.thumb-cluster{background:radial-gradient(circle at 50% 50%,rgba(255,248,205,.34),transparent 37%),#050b18}.thumb-planetary,.thumb-solar{background:radial-gradient(circle at 50% 50%,rgba(116,198,255,.44),transparent 26%),#050b18}.fav{position:absolute;right:12px;top:12px;z-index:2;border:1px solid #38506e;background:rgba(4,12,25,.78);color:#70829b;width:36px;height:36px;border-radius:50%;font-size:19px;cursor:pointer}.fav.on{color:#ffd56f;border-color:#9d7a33}.dialog-card .thumb{margin:-25px -25px 18px;height:135px}.dialog-card .thumb small{left:18px}.dialog-card .close{z-index:5;background:rgba(4,12,25,.7);border-radius:50%;width:38px;height:38px;line-height:32px}.weather-bad{color:var(--poor)}
@media(max-width:950px){.sky-strip{grid-template-columns:repeat(3,1fr)}.control-grid{grid-template-columns:repeat(3,1fr)}}
@media(max-width:650px){.sky-strip{grid-template-columns:repeat(2,1fr)}.control-grid{grid-template-columns:1fr 1fr}}

.mosaic-advisor{margin:16px 0;padding:14px 16px;border:1px solid rgba(117,190,255,.28);border-radius:14px;background:rgba(13,39,70,.55)}
.mosaic-advisor strong{display:block;margin-bottom:5px}.mosaic-advisor p{margin:0 0 6px}.mosaic-advisor small{opacity:.75}

/* v1.4 visual framing simulator */
dialog{max-width:820px}
.framing-simulator{margin:18px 0;padding:16px;border:1px solid rgba(132,172,255,.24);border-radius:16px;background:linear-gradient(145deg,rgba(8,24,46,.95),rgba(12,18,42,.95))}
.framing-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px}.framing-head h3{margin:3px 0 0}.framing-status{font-size:.72rem;font-weight:850;padding:6px 9px;border-radius:9px;background:#183653;color:#b7e6fb;border:1px solid #315d80}.framing-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}.framing-pane{background:#040a14;border:1px solid #1a3351;border-radius:13px;padding:9px;overflow:hidden}.framing-pane-title{font-size:.75rem;font-weight:850;color:#c5d8ef;margin:0 0 5px}.framing-pane svg{display:block;width:100%;height:auto;background:radial-gradient(circle at 50% 48%,#0d1a31,#030712 70%);border-radius:9px}.framing-pane small{display:block;color:#7189a7;font-size:.68rem;margin-top:5px}.sim-star{fill:#dcecff;opacity:.58}.sim-frame{fill:rgba(82,176,255,.035);stroke:#6ed7ff;stroke-width:2;stroke-dasharray:6 4}.panel-a{stroke:#6ed7ff}.panel-b{stroke:#9d91ff}.panel-c{stroke:#5fe3ae}.panel-d{stroke:#f1c76a}.sim-target{stroke-width:2;filter:drop-shadow(0 0 9px rgba(150,190,255,.35))}.sim-galaxy{fill:rgba(255,221,171,.28);stroke:#ffd6a0}.sim-nebula{fill:rgba(168,91,216,.24);stroke:#ca8df1}.sim-cluster{fill:rgba(255,244,177,.18);stroke:#ffe891}.sim-planetary{fill:rgba(86,211,255,.25);stroke:#75e1ff}.sim-solar{fill:rgba(220,229,255,.23);stroke:#e9efff}.sim-cross{stroke:rgba(255,255,255,.45);stroke-width:1}.framing-legend{display:flex;gap:15px;flex-wrap:wrap;margin-top:9px;color:#849ab7;font-size:.72rem}.framing-legend i{display:inline-block;width:14px;height:9px;margin-right:5px;vertical-align:-1px}.legend-target{border:2px solid #ca8df1;border-radius:50%;background:rgba(168,91,216,.18)}.legend-frame{border:2px dashed #6ed7ff}.dialog-card .framing-copy{font-size:.82rem;margin-top:10px}.dialog-card .framing-note{font-size:.74rem;color:#748aa6;margin-top:7px}@media(max-width:650px){.framing-grid{grid-template-columns:1fr}.framing-head{align-items:flex-start;flex-direction:column}}

/* v1.5 real astronomical imagery */
.real-thumb{overflow:hidden;background:#02050a}.real-thumb img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block}.real-thumb .thumb-shade{position:absolute;inset:0;background:linear-gradient(180deg,transparent 35%,rgba(2,7,16,.78) 100%)}.real-thumb small{z-index:2;color:#eef7ff;text-shadow:0 1px 4px #000}.real-framing{margin:18px 0;padding:16px;border:1px solid rgba(105,213,255,.30);border-radius:16px;background:linear-gradient(145deg,rgba(5,22,39,.98),rgba(10,17,38,.98))}.real-image-wrap{position:relative;aspect-ratio:16/10;background:#02050a;border:1px solid #1a3351;border-radius:13px;overflow:hidden}.real-image-wrap>img{width:100%;height:100%;object-fit:contain;display:block;background:#02050a}.real-frame,.real-mosaic{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);pointer-events:none}.real-frame{border:2px dashed #6ed7ff;box-shadow:0 0 0 999px rgba(0,0,0,.08)}.real-frame span,.real-mosaic>span{position:absolute;left:5px;top:5px;padding:3px 6px;border-radius:6px;background:rgba(3,9,18,.78);color:#dff8ff;font-size:.65rem;font-weight:900}.real-mosaic{border:1px solid rgba(255,255,255,.3)}.real-mosaic .rp{position:absolute;width:54%;height:54%;border:2px solid;opacity:.9}.real-mosaic .p1{left:0;top:0;border-color:#6ed7ff}.real-mosaic .p2{right:0;top:0;border-color:#9d91ff}.real-mosaic .p3{left:0;bottom:0;border-color:#5fe3ae}.real-mosaic .p4{right:0;bottom:0;border-color:#f1c76a}.image-credit{font-size:.69rem!important;color:#7289a7!important;margin-top:8px!important}.image-credit a{color:#8fdcff}.real-framing+.framing-simulator{margin-top:12px}

/* v1.6 full-catalogue survey imagery + resilient fallback */
.thumb-fallback{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:4px;color:#7890ad;background:radial-gradient(circle at 50% 35%,#102543,#050b15);font-style:normal}.thumb-fallback span{font-size:1.4rem}.thumb-fallback em{font-size:.62rem;font-style:normal}.real-thumb:not(.image-failed) .thumb-fallback{opacity:0}.real-thumb.image-failed .thumb-shade{display:none}.detail-image-fallback{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;padding:24px;text-align:center;color:#8098b5;background:radial-gradient(circle at 50% 40%,#102543,#030812);font-size:.82rem}.real-image-wrap:not(.image-failed) .detail-image-fallback{opacity:0}.real-image-wrap.image-failed .real-frame,.real-image-wrap.image-failed .real-mosaic{display:none}
/* v1.7 night-planning timeline */
.timeline-panel{margin:1rem 0;padding:1rem;border:1px solid rgba(135,177,255,.18);border-radius:16px;background:rgba(5,17,35,.72)}
.altitude-chart{width:100%;height:auto;margin-top:.5rem;overflow:visible}.altitude-chart text{fill:#91a8c8;font-size:12px}.alt-line{fill:none;stroke:#6684aa;stroke-width:3;stroke-linecap:round;stroke-linejoin:round}.usable-line{fill:none;stroke:#7fe3b0;stroke-width:5;stroke-linecap:round;stroke-linejoin:round}.min-line{stroke:#e2b46f;stroke-width:1.5;stroke-dasharray:6 5;opacity:.8}.chart-note{fill:#e2b46f!important;font-size:11px!important}.timeline-panel .framing-status{white-space:nowrap}
@media(max-width:600px){.altitude-chart text{font-size:10px}.timeline-panel{padding:.75rem}}

.badge.filter-alt{background:#18243d;color:#aebfd6;border-color:#344766}.filter-reason{background:#0b2034;border:1px solid #254968;border-radius:12px;padding:11px 13px;font-size:.84rem}

/* v1.9 responsive controls and clearer darkness status */
.control-grid{grid-template-columns:repeat(auto-fit,minmax(175px,1fr));align-items:end}
.control-grid label,.manual-location label{min-width:0}
.control-grid select,.control-grid input,.manual-location input{display:block;width:100%;max-width:100%;min-width:0}
.control-grid select{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sky-stat{min-width:0;overflow-wrap:anywhere}
.darkness-stat small{display:block;line-height:1.35}
.darkness-stat em{display:block;margin-top:7px;color:#627b9b;font-size:.66rem;font-style:normal;line-height:1.3}
@media(max-width:700px){.control-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.sky-strip{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:460px){.control-grid{grid-template-columns:1fr}.sky-strip{grid-template-columns:1fr}.check-row{gap:12px}.controls{padding:14px}}

/* v2.0 update notification */
.update-banner{position:fixed;left:50%;bottom:18px;transform:translateX(-50%);z-index:1000;width:min(680px,calc(100% - 28px));display:flex;align-items:center;justify-content:space-between;gap:16px;padding:14px 16px;border:1px solid #4d7899;border-radius:16px;background:rgba(7,25,45,.97);box-shadow:0 16px 45px rgba(0,0,0,.45);backdrop-filter:blur(10px)}
.update-banner[hidden]{display:none}.update-banner strong{display:block}.update-banner span{display:block;color:var(--muted);font-size:.8rem;margin-top:2px}
@media(max-width:520px){.update-banner{align-items:stretch;flex-direction:column}.update-banner .button{width:100%}}

/* v2.1 cloud-window clarity */
.metric span{line-height:1.15}.cloud-excellent{color:#7fe3b0}.cloud-usable{color:#b8df82}.cloud-poor{color:#e2b46f}.cloud-very-poor{color:var(--poor)}

/* v2.2 DWARFLAB hand-off */
.dwarf-handoff{margin:18px 0;padding:16px;border:1px solid rgba(127,227,176,.28);border-radius:16px;background:linear-gradient(145deg,rgba(6,34,39,.92),rgba(9,23,42,.96))}.dwarf-handoff p{line-height:1.45}.handoff-actions{display:flex;gap:9px;flex-wrap:wrap;margin-top:12px}.handoff-actions .button{flex:1 1 155px}.handoff-status{color:var(--muted);font-size:.78rem;margin:10px 0 0}.dwarf-handoff .detail strong{overflow-wrap:anywhere}

.byline{font-size:.58em;font-weight:600;opacity:.78;white-space:nowrap}
a.button{display:inline-flex;align-items:center;justify-content:center;text-decoration:none;box-sizing:border-box}
.handoff-actions{flex-wrap:wrap}
.handoff-actions .button{max-width:100%;white-space:normal;text-align:center}

/* v2.4 AstroExeter branding + horizon obstruction filter */
.logo-mark{width:64px;height:64px;border-radius:50%;overflow:hidden;border:2px solid #61d7ff;box-shadow:0 0 18px rgba(74,198,255,.28);flex:0 0 64px;background:#071426}.logo-mark img{width:100%;height:100%;object-fit:cover;display:block}.obstruction-panel{padding:20px;margin-top:14px}.obstruction-intro{color:var(--muted);font-size:.88rem;line-height:1.45;max-width:760px;margin-top:6px}.obstruction-toggle{display:flex;align-items:center;gap:8px;color:#cce9f8;font-weight:800;white-space:nowrap}.obstruction-toggle input,.direction-grid input{accent-color:#4dc8ff}.direction-grid{display:grid;grid-template-columns:repeat(8,minmax(82px,1fr));gap:8px;margin-top:18px}.direction-grid label{display:grid;grid-template-columns:auto 1fr;grid-template-rows:auto auto;column-gap:7px;align-items:center;background:#071426;border:1px solid #284665;border-radius:12px;padding:10px;cursor:pointer;min-width:0}.direction-grid label:has(input:checked){border-color:#ff6464;background:linear-gradient(145deg,rgba(91,24,34,.72),rgba(40,18,30,.72))}.direction-grid input{grid-row:1/3}.direction-grid strong{font-size:.88rem}.direction-grid small{color:var(--muted);font-size:.64rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.obstruction-status{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-top:14px;color:#92a9c6;font-size:.82rem}.obstruction-status .button{padding:8px 11px}.blocked-note{color:#ffb2b2}
@media(max-width:900px){.direction-grid{grid-template-columns:repeat(4,1fr)}}
@media(max-width:570px){.logo-mark{width:52px;height:52px;flex-basis:52px}.direction-grid{grid-template-columns:repeat(2,1fr)}.obstruction-status{align-items:flex-start;flex-direction:column}.obstruction-status .button{width:100%}}

/* v3.0 Website + PWA edition */
.website-bar{position:sticky;top:0;z-index:30;background:rgba(3,10,22,.94);backdrop-filter:blur(12px);border-bottom:1px solid #183653}.website-bar-inner{max-width:1440px;margin:auto;padding:9px 22px;display:flex;align-items:center;justify-content:space-between;gap:20px}.website-bar span{font-weight:850;color:#83dcff;letter-spacing:.02em}.website-bar nav{display:flex;align-items:center;gap:18px}.website-bar a{color:#aabbd0;text-decoration:none;font-size:.86rem;font-weight:750}.website-bar a:hover{color:white}.site-install{border:1px solid #57c6f1;border-radius:9px;padding:7px 11px;background:#0d80ad;color:white;font-weight:800;cursor:pointer}.hero{min-height:118px}.target-grid{grid-template-columns:repeat(auto-fit,minmax(330px,1fr))}@media(min-width:1200px){.location-panel{display:grid;grid-template-columns:1fr auto;column-gap:28px}.location-panel .manual-location{grid-column:1/-1}.obstruction-panel{padding:24px}.direction-grid{grid-template-columns:repeat(8,minmax(100px,1fr))}.about{padding:28px}}@media(max-width:650px){.website-bar-inner{padding:8px 14px}.website-bar nav a{display:none}.website-bar span{font-size:.84rem}}
