:root{font-family:system-ui,Avenir,Helvetica,Arial,sans-serif;line-height:1.5;font-weight:400;color-scheme:light dark;color:#ffffffde;background-color:#242424;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}a{font-weight:500;color:#646cff;text-decoration:inherit}a:hover{color:#535bf2}body{margin:0;display:flex;place-items:center;min-width:320px;min-height:100vh}h1{font-size:3.2em;line-height:1.1}button{border-radius:8px;border:1px solid transparent;padding:.6em 1.2em;font-size:1em;font-weight:500;font-family:inherit;background-color:#1a1a1a;cursor:pointer;transition:border-color .25s}button:hover{border-color:#646cff}button:focus,button:focus-visible{outline:4px auto -webkit-focus-ring-color}@media(prefers-color-scheme:light){:root{color:#213547;background-color:#fff}a:hover{color:#747bff}button{background-color:#f9f9f9}}:root{font-family:system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif;--wind-blue: #7ecbff;--wind-blue-soft: rgba(126, 203, 255, .35);--wind-blue-faint: rgba(126, 203, 255, .18)}*{box-sizing:border-box}body{margin:0;background:#0b1220;color:#e8eefc}.page{min-height:100vh;display:flex;flex-direction:column}.topbar{display:flex;gap:12px;justify-content:space-between;align-items:center;padding:16px 18px;border-bottom:1px solid rgba(255,255,255,.08);background:#ffffff08}.title{font-size:20px;font-weight:700;letter-spacing:.2px}.subtitle{font-size:13px;opacity:.75;margin-top:2px}.refreshBtn{appearance:none;border:1px solid rgba(255,255,255,.18);background:#ffffff0f;color:inherit;padding:10px 12px;border-radius:12px;cursor:pointer}.refreshBtn:hover{background:#ffffff1a}.grid{padding:18px;display:grid;gap:14px;grid-template-columns:repeat(2,minmax(0,1fr))}.card{background:#ffffff0a;border:1px solid rgba(255,255,255,.1);border-radius:18px;padding:16px;box-shadow:0 12px 30px #00000040}.card.full{grid-column:1 / -1}.cardTitle{font-weight:700;opacity:.9;margin-bottom:10px;letter-spacing:.2px}.windRow{display:flex;gap:16px;align-items:center}.dialWrap{width:300px;max-width:70vw}.dial{width:100%;height:auto}.dial circle:first-of-type{stroke:var(--wind-blue);fill:var(--wind-blue-faint)}.tickMajor,.tickMid,.tickMinor{stroke:var(--wind-blue-soft)}.dialText{fill:#e9f6ff;font-size:18px;font-weight:700}.dialHub,.arrowHead{fill:var(--wind-blue)}.arrowShaft{fill:#7ecbffa6}.arrowHead,.arrowShaft{filter:drop-shadow(0 0 6px rgba(126,203,255,.6))}.runwayLineDial{stroke:#ffffff59;stroke-width:3}.runwayCoreDial{stroke:#ffffffbf;stroke-width:8;stroke-linecap:round}.dial .thresholdBox{fill:#fff;stroke:#000;stroke-width:2.5;filter:drop-shadow(0 0 4px rgba(0,0,0,.6))}.dial .thresholdText{fill:#000;font-weight:900;font-size:15px;letter-spacing:.5px}.windStats{flex:1;min-width:180px;display:flex;flex-direction:column;align-items:center;text-align:center}.windLine{font-size:52px;font-weight:900;letter-spacing:1.5px;line-height:1.1;margin-bottom:10px;display:flex;align-items:baseline;justify-content:center;flex-wrap:wrap}.windCardinal{font-size:22px;font-weight:800;letter-spacing:1px;opacity:.85;margin-right:8px}.windSep{margin:0 12px;opacity:.6}.windUnit{font-size:.45em;font-weight:800;letter-spacing:.5px;opacity:.75;margin-left:4px}.gustInline{font-size:22px;font-weight:800;opacity:.9;margin-left:8px}.gustWrap{display:inline-flex;align-items:center;gap:6px;margin-left:10px}.gustValue{font-size:22px;font-weight:800;color:#ff6b6b}.gustBadge{font-size:12px;font-weight:800;padding:2px 7px;border-radius:10px;color:#fff;line-height:1;letter-spacing:.5px}.gustRed{background:#d32f2f}.gustYellow{background:#f9a825;color:#000}.gustGreen{background:#2e7d32}.windBarWrap{margin-top:12px;width:100%}.windBarScale{display:flex;justify-content:space-between;font-size:12px;opacity:.75;margin-bottom:6px;font-weight:700}.windBarTrack{position:relative;height:14px;overflow:visible;width:100%}.windBarTrackInner{position:relative;height:14px;border-radius:999px;border:1px solid rgba(255,255,255,.14);background:#ffffff1a;overflow:hidden}.windBarTrackInner:before{content:"";position:absolute;inset:0;background:linear-gradient(90deg,#3cdc78f2 0% 40%,#ffd250f2 40% 60%,#ff5a5af2 60% 100%)}.windBarTrackInner:after{content:"";position:absolute;top:0;bottom:0;left:var(--pct, 0%);right:0;background:#ffffff1a}.windBarMarker{position:absolute;top:-3px;width:3px;height:20px;background:#ffffffe6;border-radius:2px;transform:translate(-50%);box-shadow:0 0 6px #00000059}.windBarMarkerLabel{position:absolute;top:-26px;left:50%;transform:translate(-50%);font-size:15px;font-weight:900;color:#fff;background:#000000bf;padding:0 8px;border-radius:10px;white-space:nowrap;box-shadow:0 0 8px #02f051e1}.runwayLine{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:12px;flex-wrap:wrap}.runwayTag{display:inline-block;padding:6px 10px;border-radius:999px;border:1px solid rgba(255,255,255,.18);background:#ffffff0f;font-weight:800;letter-spacing:.6px}.runwayHint{font-size:13px;opacity:.85}.pressureGrid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.pressureBox{border-radius:16px;padding:14px;background:#0000002e;border:1px solid rgba(255,255,255,.1)}.label{font-size:14px;font-weight:700;opacity:.85}.pressureNumber{font-size:64px;font-weight:900;line-height:1;letter-spacing:-1px;margin-top:6px}.unitLine{margin-top:4px;opacity:.75;font-weight:700}.rwyComp{margin-top:12px;padding:12px;border-radius:16px;background:#0000002e;border:1px solid rgba(255,255,255,.1)}.rwyRow{display:flex;align-items:baseline;justify-content:space-between;gap:10px;padding:6px 0}.rwyName{font-weight:900;letter-spacing:.4px;min-width:72px}.rwyVals{opacity:.92;font-size:14px;text-align:right}.rwyVals .sep{margin:0 10px;opacity:.6}.radarWrap{position:relative;width:100%;aspect-ratio:16 / 9;border-radius:16px;overflow:hidden;border:1px solid rgba(255,255,255,.1);background:#ffffff0f}.radarImg{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;-webkit-user-select:none;user-select:none;-webkit-user-drag:none}.radarPrev{opacity:1;filter:saturate(1.05)}.radarNow{opacity:1;animation:radarFadeIn .28s ease-out}@keyframes radarFadeIn{0%{opacity:0;transform:scale(1.01)}to{opacity:1;transform:scale(1)}}.radarCaption{position:absolute;left:10px;bottom:10px;padding:4px 8px;border-radius:10px;font-size:12px;font-weight:800;color:#fff;background:#0000008c;box-shadow:0 0 10px #00000059}.radarCard{display:flex;flex-direction:column;gap:10px}.radarHeader{display:flex;justify-content:space-between;align-items:baseline;gap:10px;flex-wrap:wrap}.radarTime{opacity:.85;font-size:13px}.radarFrame{border-radius:12px;overflow:hidden;border:1px solid rgba(255,255,255,.1);background:#0000002e;min-height:260px;display:grid;place-items:center}.radarFrame img{width:100%;height:auto;display:block}.radarHint{opacity:.7;font-size:13px}.meta{margin-top:10px;opacity:.9;font-size:14px}.avgWind{color:#28dc50f2;font-size:13px}.subtle{opacity:.7}.status{font-size:16px}.status.error{color:#ffb4b4}.dot{margin:0 10px;opacity:.6}.metarGrid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.metarBox{border-radius:16px;padding:14px;background:#0000002e;border:1px solid rgba(255,255,255,.1)}.metarText{margin:10px 0 0;padding:12px;border-radius:12px;background:#ffffff0f;border:1px solid rgba(255,255,255,.1);color:#e8eefc;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:14px;line-height:1.35;white-space:pre-wrap;word-break:break-word}.footer{margin-top:auto;padding:14px 18px;opacity:.65;font-size:13px;border-top:1px solid rgba(255,255,255,.08);text-align:center}.metarBox,.tafBox{display:flex;flex-direction:column;min-height:200px}.metarFooter,.tafFooter{margin-top:auto;font-size:13px;opacity:.75;padding-top:10px;border-top:1px solid rgba(255,255,255,.15)}.mqttLine{display:inline-flex;align-items:center;gap:10px}.leds{display:inline-flex;align-items:center;gap:6px;padding:3px 6px;border-radius:999px;border:1px solid rgba(255,255,255,.18);background:#ffffff0f}.led{width:10px;height:10px;border-radius:50%;background:#b00000;box-shadow:0 0 0 2px #00000040 inset}.leds.bad .led{background:#b00000}.leds.warn .led{background:#e6b800;opacity:1}.leds.warn .ledA,.leds.warn .ledB{animation:none}.leds.ok .led{background:#1fbf4a}@keyframes ledPulseA{0%,49%{opacity:1}50%,to{opacity:.25}}@keyframes ledPulseB{0%,49%{opacity:.25}50%,to{opacity:1}}.leds.ok .ledA{animation:ledPulseA 1s linear infinite}.leds.ok .ledB{animation:ledPulseB 1s linear infinite}.mqttText{display:inline-flex;align-items:center;gap:6px}@media(max-width:900px){.grid{grid-template-columns:1fr}.windRow{flex-direction:column;align-items:stretch}.dialWrap{width:280px;margin:0 auto}.windLine{font-size:44px}.windCardinal{font-size:18px;margin-right:6px}.gustInline{font-size:18px}.windUnit{font-size:.4em}.pressureNumber{font-size:60px;text-align:center}.metarGrid{grid-template-columns:1fr}.tempBox{text-align:center}.tempValue{display:block}}.tempRow{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-top:12px}.tempBox{border-radius:16px;padding:14px;background:#0000002e;border:1px solid rgba(255,255,255,.1)}.tempValue{font-size:56px;font-weight:900;line-height:1;letter-spacing:-.8px;margin-top:6px}@media(max-width:430px){.windBarMarkerLabel{font-size:13px}}@media(max-width:380px){.pressureNumber{font-size:46px}.windLine{font-size:40px}.tempValue{font-size:46px}}@media(min-width:900px){.windRow{flex-direction:column;align-items:center}.dialWrap{margin:0 auto}.windStats{width:100%;max-width:560px;text-align:center}.windLine{justify-content:center}.windBarWrap{margin-left:auto;margin-right:auto;max-width:560px}.tempBox{text-align:center}}@media(min-width:768px)and (max-width:1024px){.page{min-height:100svh;display:flex;flex-direction:column;padding-bottom:56px}.footer{margin-bottom:24px;opacity:.55}}@media(min-width:901px){.tempBox{text-align:left}}
