diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..7987522 --- /dev/null +++ b/Makefile @@ -0,0 +1,87 @@ +# Variables +BINARY_NAME=ShackMaster.exe +FRONTEND_DIR=web +BACKEND_DIR=cmd/server +DIST_DIR=$(FRONTEND_DIR)/dist +GO_FILES=$(shell find . -name '*.go' -not -path "./$(FRONTEND_DIR)/*") +CGO_ENABLED ?= 1 +GOFLAGS = CGO_ENABLED=$(CGO_ENABLED) + +.PHONY: all build frontend backend run clean dev help install-deps + +# Commande par défaut +all: build + +## help: Affiche cette aide +help: + @echo "ShackMaster - Makefile" + @echo "" + @echo "Commandes disponibles:" + @echo " make build - Build complet (frontend + backend)" + @echo " make frontend - Build uniquement le frontend" + @echo " make backend - Build uniquement le backend Go" + @echo " make run - Build et lance l'application" + @echo " make dev - Lance le frontend en mode dev" + @echo " make clean - Nettoie les fichiers générés" + @echo " make install-deps - Installe toutes les dépendances" + @echo " make help - Affiche cette aide" + +## install-deps: Installe les dépendances npm +install-deps: + @echo "[1/2] Installation des dependances npm..." + cd $(FRONTEND_DIR) && npm install + @echo "Dependances installees" + @echo "" + @echo "[2/2] Verification de Go..." + @go version + @echo "Go est installe" + +## frontend: Build le frontend Svelte +frontend: + @echo "Building frontend..." + cd $(FRONTEND_DIR) && npm run build + xcopy /E /I /Y web\dist cmd\server\web\dist + @echo "Frontend built successfully" + +## backend: Build le backend Go +backend: frontend + @echo "Building Go binary..." + cd $(BACKEND_DIR) && go build -ldflags -H=windowsgui . + @echo "Backend built successfully" + +## build: Build complet (frontend + backend) +build: install-deps frontend backend + @echo "" + @echo "=====================================" + @echo " BUILD COMPLETE!" + @echo "=====================================" + @echo "" + @echo "Run: ./$(BINARY_NAME)" + @echo "" + +## run: Build et lance l'application +run: build + @echo "Starting ShackMaster..." + @echo "" + ./$(BINARY_NAME) + +## dev: Lance le frontend en mode développement (hot reload) +dev: + @echo "Starting frontend dev server..." + @echo "Frontend: http://localhost:3000" + @echo "Backend: http://localhost:8080" + @echo "" + cd $(FRONTEND_DIR) && npm run dev + +## clean: Nettoie les fichiers générés +clean: + @echo "Cleaning build files..." + @if exist $(BINARY_NAME) del /f /q $(BINARY_NAME) + @if exist $(DIST_DIR) rmdir /s /q $(DIST_DIR) + @echo "Clean complete" + +## watch: Build auto lors des changements (nécessite watchexec) +watch: + @echo "Watching for changes..." + @echo "Install watchexec: choco install watchexec" + watchexec -w . -e go -- make build \ No newline at end of file diff --git a/cmd/server/web/dist/assets/index-B1UmG2DI.css b/cmd/server/web/dist/assets/index-B1UmG2DI.css new file mode 100644 index 0000000..fe2a00a --- /dev/null +++ b/cmd/server/web/dist/assets/index-B1UmG2DI.css @@ -0,0 +1 @@ +.status-banner.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{display:flex;align-items:center;justify-content:space-between;padding:10px 24px;background:linear-gradient(135deg,#1a1a2e,#16213e,#0f3460);border-bottom:1px solid rgba(79,195,247,.15);gap:20px;flex-wrap:wrap}.status-banner.has-warning.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{background:linear-gradient(135deg,#1f1a12,#29201b,#2d1b0c);border-bottom-color:#f59e0b}.flex-section.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{display:flex;align-items:center;gap:12px}.flex-icon.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{font-size:20px;opacity:.8}.flex-icon.connected.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{opacity:1;filter:drop-shadow(0 0 4px rgba(79,195,247,.6))}.flex-icon.disconnected.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{opacity:.4;filter:grayscale(1)}.frequency-display.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{display:flex;align-items:baseline;gap:4px}.frequency.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{font-size:28px;font-weight:300;font-family:Roboto Mono,Consolas,monospace;color:var(--band-color, #4fc3f7);text-shadow:0 0 15px var(--band-color, rgba(79, 195, 247, .5));letter-spacing:1px}.unit.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{font-size:14px;color:#ffffff80;font-weight:400}.band-badge.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{padding:4px 10px;border-radius:4px;font-size:13px;font-weight:700;color:#000;text-shadow:none}.mode-badge.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{padding:4px 10px;background:#9c27b04d;border:1px solid rgba(156,39,176,.5);border-radius:4px;font-size:13px;font-weight:600;color:#ce93d8}.tx-indicator.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{padding:4px 10px;background:#f443364d;border:1px solid #f44336;border-radius:4px;font-size:13px;font-weight:700;color:#f44336;text-shadow:0 0 10px rgba(244,67,54,.8);animation:svelte-h7ie36-txPulse .5s ease-in-out infinite}@keyframes svelte-h7ie36-txPulse{0%,to{opacity:1}50%{opacity:.6}}.radio-status.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{display:flex;align-items:center;gap:8px}.radio-on-indicator.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{color:#22c55e;font-size:16px;animation:svelte-h7ie36-pulse 2s infinite}.radio-off-indicator.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{color:#ef4444;font-size:16px}@keyframes svelte-h7ie36-pulse{0%,to{opacity:1}50%{opacity:.5}}.radio-status-text.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{color:#ffffffe6;font-size:14px}.model-badge.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{padding:3px 8px;background:#4fc3f733;border:1px solid rgba(79,195,247,.4);border-radius:4px;font-size:12px;color:#4fc3f7}.callsign-badge.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{padding:3px 8px;background:#22c55e33;border:1px solid rgba(34,197,94,.4);border-radius:4px;font-size:12px;font-weight:600;color:#22c55e}.no-signal.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{color:#fff6;font-size:14px;font-style:italic}.separator.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{width:1px;height:30px;background:#fff3}.grayline-section.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{display:flex;align-items:center;gap:12px}.sun-times.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{display:flex;gap:12px}.sun-item.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{font-size:14px;color:#ffffffd9;display:flex;align-items:center;gap:6px}.sun-icon.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{flex-shrink:0}.sunrise-icon.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{color:#fbbf2499;filter:drop-shadow(0 0 4px rgba(251,191,36,.4))}.sunset-icon.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{color:#f9731699;filter:drop-shadow(0 0 4px rgba(249,115,22,.4))}.grayline-badge.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{padding:5px 12px;border-radius:4px;font-size:12px;font-weight:700;letter-spacing:1px;animation:svelte-h7ie36-graylinePulse 1.5s ease-in-out infinite}.grayline-badge.sunrise.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{background:linear-gradient(135deg,#ffb74d4d,#ff8a654d);border:1px solid rgba(255,183,77,.6);color:#ffcc80;text-shadow:0 0 10px rgba(255,183,77,.8)}.grayline-badge.sunset.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{background:linear-gradient(135deg,#ff8a654d,#ef53504d);border:1px solid rgba(255,138,101,.6);color:#ffab91;text-shadow:0 0 10px rgba(255,138,101,.8)}@keyframes svelte-h7ie36-graylinePulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.85;transform:scale(1.02)}}.next-event.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{font-size:12px;color:#ffffff80;font-style:italic}.no-location.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{font-size:13px;color:#fff6;font-style:italic}.weather-section.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{display:flex;align-items:center;gap:16px}.alert.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{display:flex;align-items:center;gap:8px;padding:6px 14px;border-radius:6px;animation:svelte-h7ie36-alertPulse 2s ease-in-out infinite}.wind-alert.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{background:#f59e0b33;border:1px solid rgba(245,158,11,.5)}.gust-alert.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{background:#ef444433;border:1px solid rgba(239,68,68,.5)}@keyframes svelte-h7ie36-alertPulse{0%,to{opacity:1}50%{opacity:.8}}.alert-icon.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{font-size:16px}.alert-text.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{font-size:13px;color:#ffffffe6}.alert-text.svelte-h7ie36 strong.svelte-h7ie36.svelte-h7ie36{color:#fbbf24;font-weight:700}.gust-alert.svelte-h7ie36 .alert-text.svelte-h7ie36 strong.svelte-h7ie36{color:#f87171}.status-ok.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{display:flex;align-items:center;gap:6px;padding:6px 14px;background:#22c55e1a;border:1px solid rgba(34,197,94,.3);border-radius:6px}.ok-icon.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{color:#22c55e;font-weight:700}.ok-text.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{font-size:13px;color:#22c55ee6}@media (max-width: 768px){.status-banner.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{padding:8px 16px;gap:12px}.frequency.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{font-size:22px}.separator.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{display:none}.flex-section.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36,.grayline-section.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36,.weather-section.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{width:100%;justify-content:center}}.card.svelte-1krmqub.svelte-1krmqub{background:linear-gradient(135deg,#1a2332,#0f1923);border:1px solid #2d3748;border-radius:8px;padding:0;overflow:hidden;box-shadow:0 4px 6px #0000004d;height:100%;display:flex;flex-direction:column}.card-header.svelte-1krmqub.svelte-1krmqub{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;background:#4fc3f70d;border-bottom:1px solid #2d3748}h2.svelte-1krmqub.svelte-1krmqub{font-size:14px;font-weight:600;color:var(--accent-cyan);margin:0;letter-spacing:.5px}.status-dot.svelte-1krmqub.svelte-1krmqub{width:8px;height:8px;border-radius:50%;background:#4caf50;box-shadow:0 0 8px #4caf50}.status-dot.disconnected.svelte-1krmqub.svelte-1krmqub{background:#f44336;box-shadow:0 0 8px #f44336}.metrics.svelte-1krmqub.svelte-1krmqub{padding:16px;display:flex;flex-direction:column;gap:12px;flex:1}.relays.svelte-1krmqub.svelte-1krmqub{display:flex;flex-direction:column;gap:8px}.relay-card.svelte-1krmqub.svelte-1krmqub{display:flex;justify-content:space-between;align-items:center;padding:12px;background:var(--bg-tertiary);border-radius:6px;border:1px solid var(--border-color);transition:all .3s}.relay-card.relay-on.svelte-1krmqub.svelte-1krmqub{background:#4caf501a;border-color:#4caf504d;box-shadow:0 0 15px #4caf5033}.relay-info.svelte-1krmqub.svelte-1krmqub{display:flex;align-items:center}.relay-details.svelte-1krmqub.svelte-1krmqub{display:flex;flex-direction:column;gap:2px}.relay-name.svelte-1krmqub.svelte-1krmqub{font-size:12px;color:var(--text-primary);font-weight:500}.relay-status.svelte-1krmqub.svelte-1krmqub{font-size:10px;color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px}.relay-card.relay-on.svelte-1krmqub .relay-status.svelte-1krmqub{color:#4caf50;font-weight:600}.relay-toggle.svelte-1krmqub.svelte-1krmqub{padding:0;background:transparent;border:none;cursor:pointer}.toggle-track.svelte-1krmqub.svelte-1krmqub{width:52px;height:28px;background:var(--bg-primary);border:2px solid var(--border-color);border-radius:14px;position:relative;transition:all .3s}.relay-toggle.svelte-1krmqub:hover .toggle-track.svelte-1krmqub{border-color:var(--accent-cyan)}.relay-toggle.active.svelte-1krmqub .toggle-track.svelte-1krmqub{background:linear-gradient(135deg,#4caf50,#66bb6a);border-color:#4caf50;box-shadow:0 0 15px #4caf5080}.toggle-thumb.svelte-1krmqub.svelte-1krmqub{width:20px;height:20px;background:#fff;border-radius:50%;position:absolute;top:2px;left:2px;transition:all .3s;box-shadow:0 2px 4px #0000004d}.relay-toggle.active.svelte-1krmqub .toggle-thumb.svelte-1krmqub{transform:translate(24px)}.relay-toggle.svelte-1krmqub.svelte-1krmqub:disabled{opacity:.5;cursor:not-allowed}.controls.svelte-1krmqub.svelte-1krmqub{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:8px;flex:1}.control-btn.svelte-1krmqub.svelte-1krmqub{padding:12px;border-radius:6px;font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;cursor:pointer;border:none;transition:all .2s;display:flex;align-items:center;justify-content:center;gap:6px}.control-btn.svelte-1krmqub.svelte-1krmqub:hover{transform:translateY(-2px)}.control-btn.svelte-1krmqub.svelte-1krmqub:active{transform:translateY(0)}.btn-icon.svelte-1krmqub.svelte-1krmqub{font-size:16px}.all-on.svelte-1krmqub.svelte-1krmqub{background:linear-gradient(135deg,#4caf50,#66bb6a);color:#fff;box-shadow:0 4px 12px #4caf5066}.all-on.svelte-1krmqub.svelte-1krmqub:hover{box-shadow:0 6px 16px #4caf5080}.all-off.svelte-1krmqub.svelte-1krmqub{background:linear-gradient(135deg,#f44336,#d32f2f);color:#fff;box-shadow:0 4px 12px #f4433666}.all-off.svelte-1krmqub.svelte-1krmqub:hover{box-shadow:0 6px 16px #f4433680}.card.svelte-1q56zag{background:linear-gradient(135deg,#1a2332,#0f1923);border:1px solid #2d3748;border-radius:8px;padding:0;overflow:hidden;box-shadow:0 4px 6px #0000004d;height:100%;display:flex;flex-direction:column}.card-header.svelte-1q56zag{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;background:#4fc3f70d;border-bottom:1px solid #2d3748}h2.svelte-1q56zag{font-size:14px;font-weight:600;color:var(--accent-cyan);margin:0;letter-spacing:.5px}.header-right.svelte-1q56zag{display:flex;align-items:center;gap:8px}.state-badge.svelte-1q56zag{padding:4px 12px;border-radius:12px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;cursor:pointer;border:none;transition:all .2s}.state-badge.idle.svelte-1q56zag{background:#4caf5033;color:#4caf50}.state-badge.transmit.svelte-1q56zag{background:#ff980033;color:#ff9800;animation:svelte-1q56zag-pulse 1s infinite}@keyframes svelte-1q56zag-pulse{0%,to{opacity:1}50%{opacity:.7}}.status-dot.svelte-1q56zag{width:8px;height:8px;border-radius:50%;background:#4caf50;box-shadow:0 0 8px #4caf50}.status-dot.disconnected.svelte-1q56zag{background:#f44336;box-shadow:0 0 8px #f44336}.metrics.svelte-1q56zag{padding:16px;display:flex;flex-direction:column;gap:10px;flex:1}.power-swr-row.svelte-1q56zag{display:flex;gap:16px;align-items:center}.power-section.svelte-1q56zag{flex:1;background:#0f172a99;padding:12px;border-radius:10px;border:1px solid rgba(79,195,247,.2)}.power-header.svelte-1q56zag{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}.power-label-inline.svelte-1q56zag{font-size:12px;color:#ffffffb3;text-transform:uppercase;letter-spacing:.5px}.power-value-inline.svelte-1q56zag{font-size:22px;font-weight:600;color:#66bb6a}.power-bar-container.svelte-1q56zag{position:relative}.power-bar-bg.svelte-1q56zag{width:100%;height:28px;background:#0000004d;border-radius:14px;overflow:hidden;position:relative}.power-bar-fill.svelte-1q56zag{position:relative;height:100%;background:linear-gradient(90deg,#4caf50,#ffc107,#ff9800,#f44336);border-radius:14px;transition:width .3s ease}@keyframes svelte-1q56zag-shimmer{0%{transform:translate(-100%)}to{transform:translate(100%)}}.swr-circle-compact.svelte-1q56zag{width:90px;height:90px;border-radius:50%;background:radial-gradient(circle,rgba(79,195,247,.1),transparent);border:4px solid var(--swr-color);display:flex;flex-direction:column;align-items:center;justify-content:center;box-shadow:0 0 25px var(--swr-color);flex-shrink:0}.swr-value-compact.svelte-1q56zag{font-size:28px;font-weight:700;color:var(--swr-color)}.swr-label-compact.svelte-1q56zag{font-size:11px;color:#fff9;text-transform:uppercase;margin-top:2px}.temp-group.svelte-1q56zag{display:grid;grid-template-columns:1fr 1fr;gap:12px}.temp-item.svelte-1q56zag{display:flex;flex-direction:column;gap:4px;padding:12px;background:var(--bg-tertiary);border-radius:6px}.temp-value.svelte-1q56zag{font-size:32px;font-weight:300;line-height:1}.temp-label.svelte-1q56zag{font-size:10px;color:var(--text-muted);text-transform:uppercase}.temp-mini-bar.svelte-1q56zag{height:4px;background:#ffffff1a;border-radius:2px;overflow:hidden;margin-top:4px}.temp-mini-fill.svelte-1q56zag{height:100%;border-radius:2px;transition:width .3s ease}.params-grid.svelte-1q56zag{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.param-box.svelte-1q56zag{padding:8px;background:var(--bg-tertiary);border-radius:4px;text-align:center}.param-label.svelte-1q56zag{font-size:9px;color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px}.param-value.svelte-1q56zag{font-size:16px;font-weight:300;color:var(--text-primary);margin-top:2px}.band-display.svelte-1q56zag{display:grid;grid-template-columns:1fr 1fr;gap:8px;padding:8px;background:#4fc3f70d;border-radius:6px}.band-item.svelte-1q56zag{display:flex;justify-content:space-between;align-items:center}.band-label.svelte-1q56zag{font-size:11px;color:var(--text-muted)}.band-value.svelte-1q56zag{font-size:14px;font-weight:600;color:var(--accent-cyan)}.fan-control.svelte-1q56zag{display:flex;flex-direction:column;gap:6px}.control-label.svelte-1q56zag{font-size:11px;color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px}select.svelte-1q56zag{background:var(--bg-tertiary);color:var(--text-primary);border:1px solid var(--border-color);border-radius:4px;padding:8px;font-size:12px;cursor:pointer;outline:none;transition:all .2s}select.svelte-1q56zag:hover{border-color:var(--accent-cyan)}select.svelte-1q56zag:focus{border-color:var(--accent-cyan);box-shadow:0 0 0 2px #4fc3f733}.card.svelte-tr7g0r{background:linear-gradient(135deg,#1a2332,#0f1923);border:1px solid #2d3748;border-radius:8px;padding:0;overflow:hidden;box-shadow:0 4px 6px #0000004d;height:100%;display:flex;flex-direction:column}.card-header.svelte-tr7g0r{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;background:#4fc3f70d;border-bottom:1px solid #2d3748}h2.svelte-tr7g0r{font-size:14px;font-weight:600;color:var(--accent-cyan);margin:0;letter-spacing:.5px}.header-right.svelte-tr7g0r{display:flex;align-items:center;gap:8px}.tuning-badge.svelte-tr7g0r{padding:4px 12px;border-radius:12px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;background:#4caf5033;color:#4caf50}.tuning-badge.tuning.svelte-tr7g0r{background:#ff980033;color:#ff9800;animation:svelte-tr7g0r-pulse 1s infinite}@keyframes svelte-tr7g0r-pulse{0%,to{opacity:1}50%{opacity:.7}}.status-dot.svelte-tr7g0r{width:8px;height:8px;border-radius:50%;background:#4caf50;box-shadow:0 0 8px #4caf50}.status-dot.disconnected.svelte-tr7g0r{background:#f44336;box-shadow:0 0 8px #f44336}.metrics.svelte-tr7g0r{padding:16px;display:flex;flex-direction:column;gap:10px;flex:1}.power-swr-row.svelte-tr7g0r{display:flex;gap:16px;align-items:center}.power-section.svelte-tr7g0r{flex:1;background:#0f172a99;padding:12px;border-radius:10px;border:1px solid rgba(79,195,247,.2)}.power-header.svelte-tr7g0r{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}.power-label-inline.svelte-tr7g0r{font-size:12px;color:#ffffffb3;text-transform:uppercase;letter-spacing:.5px}.power-value-inline.svelte-tr7g0r{font-size:22px;font-weight:600;color:#66bb6a}.power-bar-container.svelte-tr7g0r{position:relative}.power-bar-bg.svelte-tr7g0r{width:100%;height:28px;background:#0000004d;border-radius:14px;overflow:hidden;position:relative}.power-bar-fill.svelte-tr7g0r{position:relative;height:100%;background:linear-gradient(90deg,#4caf50,#ffc107,#ff9800,#f44336);border-radius:14px;transition:width .3s ease}@keyframes svelte-tr7g0r-shimmer{0%{transform:translate(-100%)}to{transform:translate(100%)}}.swr-circle-compact.svelte-tr7g0r{width:90px;height:90px;border-radius:50%;background:radial-gradient(circle,rgba(79,195,247,.1),transparent);border:4px solid var(--swr-color);display:flex;flex-direction:column;align-items:center;justify-content:center;box-shadow:0 0 25px var(--swr-color);flex-shrink:0}.swr-value-compact.svelte-tr7g0r{font-size:28px;font-weight:700;color:var(--swr-color)}.swr-label-compact.svelte-tr7g0r{font-size:11px;color:#fff9;text-transform:uppercase;margin-top:2px}.capacitors.svelte-tr7g0r{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;padding:16px;background:#4fc3f70d;border-radius:6px;border:1px solid rgba(79,195,247,.2)}.cap-item.svelte-tr7g0r{display:flex;flex-direction:column;align-items:center;gap:4px}.cap-value.svelte-tr7g0r{font-size:20px;font-weight:300;color:var(--accent-cyan);text-shadow:0 0 15px rgba(79,195,247,.5)}.cap-label.svelte-tr7g0r{font-size:10px;color:var(--text-muted);text-transform:uppercase;letter-spacing:1px}.freq-display.svelte-tr7g0r{display:grid;grid-template-columns:1fr 1fr;gap:12px}.freq-item.svelte-tr7g0r{padding:10px;background:var(--bg-tertiary);border-radius:6px;display:flex;flex-direction:column;gap:4px}.freq-label.svelte-tr7g0r{font-size:9px;color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px}.freq-value.svelte-tr7g0r{font-size:16px;font-weight:300;color:var(--text-primary)}.freq-unit.svelte-tr7g0r{font-size:11px;color:var(--text-secondary);margin-left:2px}.controls.svelte-tr7g0r{display:grid;grid-template-columns:1fr 1fr;gap:8px;flex:1}.control-btn.svelte-tr7g0r{padding:12px;border-radius:6px;font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;cursor:pointer;border:1px solid var(--border-color);background:var(--bg-tertiary);color:var(--text-primary);transition:all .2s}.control-btn.svelte-tr7g0r:hover{border-color:var(--accent-cyan);transform:translateY(-1px)}.control-btn.active.svelte-tr7g0r{background:var(--accent-cyan);border-color:var(--accent-cyan);color:#000;box-shadow:0 0 15px #4fc3f780}.tune-btn.svelte-tr7g0r{width:100%;padding:14px;border-radius:6px;font-size:13px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;cursor:pointer;border:none;background:linear-gradient(135deg,#f44336,#d32f2f);color:#fff;transition:all .2s;display:flex;align-items:center;justify-content:center;gap:8px;box-shadow:0 4px 12px #f4433666}.tune-btn.svelte-tr7g0r:hover{transform:translateY(-2px);box-shadow:0 6px 16px #f4433680}.tune-btn.svelte-tr7g0r:active{transform:translateY(0)}.tune-icon.svelte-tr7g0r{font-size:16px}.card.svelte-1sfbaek{background:linear-gradient(135deg,#1a2332,#0f1923);border:1px solid #2d3748;border-radius:8px;padding:0;overflow:hidden;box-shadow:0 4px 6px #0000004d;height:100%;display:flex;flex-direction:column}.card-header.svelte-1sfbaek{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;background:#4fc3f70d;border-bottom:1px solid #2d3748}h2.svelte-1sfbaek{font-size:14px;font-weight:600;color:var(--accent-cyan);margin:0;letter-spacing:.5px}.status-dot.svelte-1sfbaek{width:8px;height:8px;border-radius:50%;background:#4caf50;box-shadow:0 0 8px #4caf50}.status-dot.disconnected.svelte-1sfbaek{background:#f44336;box-shadow:0 0 8px #f44336}.metrics.svelte-1sfbaek{padding:16px;display:flex;flex-direction:column;gap:12px;flex:1}.sources.svelte-1sfbaek{display:grid;grid-template-columns:1fr 1fr;gap:8px}.source-item.svelte-1sfbaek{padding:8px;background:var(--bg-tertiary);border-radius:4px;text-align:center}.source-label.svelte-1sfbaek{font-size:12px;font-weight:600;color:var(--text-primary);text-transform:uppercase}.bands.svelte-1sfbaek{display:grid;grid-template-columns:1fr 1fr;gap:8px}.band-item.svelte-1sfbaek{padding:10px;background:#4fc3f71a;border:1px solid rgba(79,195,247,.3);border-radius:4px;text-align:center}.band-value.svelte-1sfbaek{font-size:16px;font-weight:600;color:var(--accent-cyan)}.antennas.svelte-1sfbaek{display:flex;flex-direction:column;gap:8px}.antenna-card.svelte-1sfbaek{display:flex;justify-content:space-between;align-items:center;padding:12px;background:var(--bg-tertiary);border:2px solid var(--border-color);border-radius:6px;transition:all .3s}.antenna-card.active-a.svelte-1sfbaek{background:#4caf5033;border-color:#4caf50;box-shadow:0 0 20px #4caf504d}.antenna-card.active-b.svelte-1sfbaek{background:#2196f333;border-color:#2196f3;box-shadow:0 0 20px #2196f34d}.antenna-card.tx.svelte-1sfbaek{background:#f4433633!important;border-color:#f44336!important;box-shadow:0 0 20px #f4433666!important}.antenna-name.svelte-1sfbaek{font-size:14px;font-weight:500;color:var(--text-primary)}.antenna-ports.svelte-1sfbaek{display:flex;gap:6px}.port-btn.svelte-1sfbaek{width:36px;height:36px;border-radius:4px;font-size:14px;font-weight:600;cursor:pointer;border:1px solid var(--border-color);background:var(--bg-primary);color:var(--text-secondary);transition:all .2s}.port-btn.svelte-1sfbaek:hover{border-color:var(--accent-cyan);transform:scale(1.05)}.port-btn.active.svelte-1sfbaek{background:var(--accent-cyan);border-color:var(--accent-cyan);color:#000;box-shadow:0 0 12px #4fc3f780}.reboot-btn.svelte-1sfbaek{width:100%;padding:12px;border-radius:6px;font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;cursor:pointer;border:none;background:linear-gradient(135deg,#ff9800,#f57c00);color:#fff;transition:all .2s;display:flex;align-items:center;justify-content:center;gap:6px;box-shadow:0 4px 12px #ff980066;margin-top:8px}.reboot-btn.svelte-1sfbaek:hover{transform:translateY(-2px);box-shadow:0 6px 16px #ff980080}.reboot-btn.svelte-1sfbaek:active{transform:translateY(0)}.reboot-icon.svelte-1sfbaek{font-size:16px}.card.svelte-1532ixo{background:linear-gradient(135deg,#1a2332,#0f1923);border:1px solid #2d3748;border-radius:8px;padding:0;overflow:hidden;box-shadow:0 4px 6px #0000004d;height:100%;display:flex;flex-direction:column}.card-header.svelte-1532ixo{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;background:#4fc3f70d;border-bottom:1px solid #2d3748}h2.svelte-1532ixo{font-size:14px;font-weight:600;color:var(--accent-cyan);margin:0;letter-spacing:.5px}.status-dot.svelte-1532ixo{width:8px;height:8px;border-radius:50%;background:#4caf50;box-shadow:0 0 8px #4caf50}.status-dot.disconnected.svelte-1532ixo{background:#f44336;box-shadow:0 0 8px #f44336}.metrics.svelte-1532ixo{padding:16px;display:flex;flex-direction:column;gap:10px;flex:1}.heading-controls-row.svelte-1532ixo{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:8px;background:#4fc3f71a;border-radius:6px;border:1px solid rgba(79,195,247,.3)}.heading-display-compact.svelte-1532ixo{flex:1;text-align:center}.controls-compact.svelte-1532ixo{display:flex;gap:6px}.btn-mini.svelte-1532ixo{width:36px;height:36px;border:2px solid rgba(79,195,247,.3);border-radius:6px;font-size:20px;font-weight:600;cursor:pointer;transition:all .2s;display:flex;align-items:center;justify-content:center;color:#ffffffb3;background:#4fc3f714}.btn-mini.svelte-1532ixo:hover{border-color:#4fc3f799;color:#ffffffe6;background:#4fc3f726;transform:translateY(-1px);box-shadow:0 0 15px #4fc3f74d}.btn-mini.ccw.svelte-1532ixo:hover{transform:translateY(-1px) rotate(-5deg)}.btn-mini.cw.svelte-1532ixo:hover{transform:translateY(-1px) rotate(5deg)}.btn-mini.stop.svelte-1532ixo:hover{border-color:#f44336;color:#f44336;background:#f4433626}.heading-label.svelte-1532ixo{font-size:10px;color:var(--text-muted);text-transform:uppercase;letter-spacing:1px;margin-bottom:4px}.heading-value.svelte-1532ixo{font-size:42px;font-weight:200;color:var(--accent-cyan);text-shadow:0 0 20px rgba(79,195,247,.5)}.target-indicator.svelte-1532ixo{font-size:24px;font-weight:400;color:#ffc107;margin-left:20px;text-shadow:0 0 15px rgba(255,193,7,.6);animation:svelte-1532ixo-targetPulse 1s ease-in-out infinite}@keyframes svelte-1532ixo-targetPulse{0%,to{opacity:.8}50%{opacity:1}}.map-container.svelte-1532ixo{display:flex;justify-content:center;padding:10px;background:#0a162899;border-radius:8px}.map-legend.svelte-1532ixo{display:flex;gap:20px;justify-content:center;padding:8px;margin-top:8px;background:#0a162866;border-radius:6px;font-size:12px;color:#ffffffb3}.legend-item.svelte-1532ixo{display:flex;align-items:center;gap:6px}.map-svg.svelte-1532ixo{width:100%;max-width:300px;height:auto}.clickable-compass.svelte-1532ixo{cursor:crosshair;-webkit-user-select:none;user-select:none;outline:none}.clickable-compass.svelte-1532ixo:hover{filter:brightness(1.1)}.cardinal.svelte-1532ixo{fill:var(--accent-cyan);font-size:16px;font-weight:700;text-shadow:0 0 10px rgba(79,195,247,.8)}.degree-label.svelte-1532ixo{fill:#4fc3f7b3;font-size:12px;font-weight:600}.card.svelte-niu5h3.svelte-niu5h3{background:linear-gradient(135deg,#1a2332,#0f1923);border:1px solid #2d3748;border-radius:8px;padding:0;overflow:hidden;box-shadow:0 4px 6px #0000004d;height:100%;display:flex;flex-direction:column}.card-header.svelte-niu5h3.svelte-niu5h3{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;background:#4fc3f70d;border-bottom:1px solid #2d3748}h2.svelte-niu5h3.svelte-niu5h3{margin:0;font-size:14px;font-weight:600;color:#4fc3f7;letter-spacing:.5px}h3.svelte-niu5h3.svelte-niu5h3{margin:0 0 12px;font-size:16px;font-weight:500;color:#4fc3f7}.status-dot.svelte-niu5h3.svelte-niu5h3{width:12px;height:12px;border-radius:50%;background:#4caf50;box-shadow:0 0 12px #4caf50cc;animation:svelte-niu5h3-pulse 2s ease-in-out infinite}.status-dot.disconnected.svelte-niu5h3.svelte-niu5h3{background:#666;box-shadow:none;animation:none}@keyframes svelte-niu5h3-pulse{0%,to{opacity:1}50%{opacity:.6}}.metrics.svelte-niu5h3.svelte-niu5h3{display:flex;flex-direction:column;gap:12px;padding:16px;flex:1}.status-grid.svelte-niu5h3.svelte-niu5h3{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px}.status-item.svelte-niu5h3.svelte-niu5h3{background:#0f172a99;padding:16px;border-radius:12px;border:1px solid rgba(79,195,247,.2)}.status-label.svelte-niu5h3.svelte-niu5h3{font-size:12px;color:#fff9;text-transform:uppercase;letter-spacing:1px;margin-bottom:8px}.status-value.svelte-niu5h3.svelte-niu5h3{font-size:22px;font-weight:700;color:#4fc3f7;text-shadow:0 0 10px rgba(79,195,247,.5)}.status-value.freq.svelte-niu5h3.svelte-niu5h3{color:#66bb6a;font-size:22px;text-shadow:0 0 10px rgba(102,187,106,.5)}.status-value.band.svelte-niu5h3.svelte-niu5h3{color:#ffa726;text-shadow:0 0 10px rgba(255,167,38,.5)}.status-value.direction.svelte-niu5h3.svelte-niu5h3{color:#ab47bc;text-shadow:0 0 10px rgba(171,71,188,.5)}.control-section.svelte-niu5h3.svelte-niu5h3{background:#0f172a66;padding:12px;border-radius:12px;border:1px solid rgba(79,195,247,.2)}.control-section.compact.svelte-niu5h3.svelte-niu5h3{padding:16px}.auto-track-controls.svelte-niu5h3.svelte-niu5h3{display:flex;align-items:center;gap:20px;flex-wrap:wrap}.toggle-label.svelte-niu5h3.svelte-niu5h3{display:flex;align-items:center;gap:8px;cursor:pointer;color:#fff;font-size:14px}.toggle-label.svelte-niu5h3 input[type=checkbox].svelte-niu5h3{width:20px;height:20px;cursor:pointer}.threshold-group.svelte-niu5h3.svelte-niu5h3{display:flex;align-items:center;gap:8px}.threshold-group.svelte-niu5h3 label.svelte-niu5h3{font-size:14px;color:#fffc;white-space:nowrap}.direction-buttons.svelte-niu5h3.svelte-niu5h3{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-top:16px}.dir-btn.svelte-niu5h3.svelte-niu5h3{padding:12px 16px;border:2px solid rgba(79,195,247,.3);border-radius:8px;font-size:13px;font-weight:600;text-transform:uppercase;cursor:pointer;transition:all .2s;color:#ffffffb3;background:#4fc3f714;letter-spacing:.5px}.dir-btn.svelte-niu5h3.svelte-niu5h3:hover{border-color:#4fc3f799;color:#ffffffe6;background:#4fc3f726;transform:translateY(-1px)}.dir-btn.active.svelte-niu5h3.svelte-niu5h3{border-color:#4fc3f7;color:#4fc3f7;background:#4fc3f733;box-shadow:0 0 20px #4fc3f766;font-weight:700}.progress-section.svelte-niu5h3.svelte-niu5h3{background:#4fc3f71a;padding:16px;border-radius:8px;border:2px solid rgba(79,195,247,.3);margin-top:16px}.progress-section.svelte-niu5h3 h3.svelte-niu5h3{margin:0 0 12px;font-size:14px;color:#4fc3f7;text-transform:uppercase;letter-spacing:.5px}.progress-bar.svelte-niu5h3.svelte-niu5h3{height:20px;background:#0f172a99;border-radius:10px;overflow:hidden;position:relative}.progress-fill.svelte-niu5h3.svelte-niu5h3{height:100%;background:linear-gradient(90deg,#4fc3f7,#03a9f4);transition:width .3s ease;border-radius:10px}.progress-text.svelte-niu5h3.svelte-niu5h3{text-align:center;font-size:13px;color:#fffc;margin-top:8px}.actions.svelte-niu5h3.svelte-niu5h3{display:flex;gap:12px}.app.svelte-114zpok.svelte-114zpok{min-height:100vh;display:flex;flex-direction:column}header.svelte-114zpok.svelte-114zpok{background:linear-gradient(135deg,#1a1a2e,#16213e,#0f3460);padding:8px 24px;display:flex;justify-content:space-between;align-items:center;box-shadow:0 4px 20px #0006;border-bottom:1px solid rgba(79,195,247,.2);flex-wrap:wrap;gap:16px}.header-left.svelte-114zpok.svelte-114zpok{display:flex;align-items:center;gap:16px}h1.svelte-114zpok.svelte-114zpok{font-size:24px;font-weight:500;margin:0;color:#fff}.connection-status.svelte-114zpok.svelte-114zpok{display:flex;align-items:center;gap:8px;font-size:14px;padding:6px 12px;background:#0000004d;border-radius:16px}.header-center.svelte-114zpok.svelte-114zpok{flex:1;display:flex;justify-content:center}.solar-info.svelte-114zpok.svelte-114zpok{display:flex;gap:20px;font-size:14px}.solar-item.svelte-114zpok.svelte-114zpok{color:#ffffffe6;font-size:13px;font-weight:600;letter-spacing:.3px}.solar-item.svelte-114zpok .value.svelte-114zpok{font-weight:700;margin-left:4px;font-size:14px}.solar-item.svelte-114zpok:nth-child(1) .value.svelte-114zpok{color:#ffa726;text-shadow:0 0 8px rgba(255,167,38,.5)}.solar-item.svelte-114zpok:nth-child(2) .value.svelte-114zpok{color:#66bb6a;text-shadow:0 0 8px rgba(102,187,106,.5)}.solar-item.svelte-114zpok:nth-child(3) .value.svelte-114zpok{color:#42a5f5;text-shadow:0 0 8px rgba(66,165,245,.5)}.solar-item.svelte-114zpok:nth-child(4) .value.svelte-114zpok{color:#ef5350;text-shadow:0 0 8px rgba(239,83,80,.5)}.solar-item.svelte-114zpok:nth-child(5) .value.svelte-114zpok{color:#ab47bc;text-shadow:0 0 8px rgba(171,71,188,.5)}.header-right.svelte-114zpok.svelte-114zpok{display:flex;gap:20px;align-items:center}.weather-info.svelte-114zpok.svelte-114zpok{display:flex;gap:12px;font-size:14px;color:#ffffffe6}.clock.svelte-114zpok.svelte-114zpok{display:flex;flex-direction:column;align-items:flex-end}.time.svelte-114zpok.svelte-114zpok{font-size:18px;font-weight:500;color:#fff}.date.svelte-114zpok.svelte-114zpok{font-size:12px;color:#ffffffb3;padding-top:0}main.svelte-114zpok.svelte-114zpok{flex:1;padding:24px;overflow-y:auto}.dashboard-grid.svelte-114zpok.svelte-114zpok{display:flex;flex-direction:column;gap:24px;max-width:1800px;margin:0 auto}.row.svelte-114zpok.svelte-114zpok{display:flex;gap:24px;flex-wrap:wrap;align-items:stretch}.row.svelte-114zpok>*{flex:1;min-width:300px}@media (max-width: 1200px){.row.svelte-114zpok.svelte-114zpok{flex-direction:column}}@media (max-width: 768px){header.svelte-114zpok.svelte-114zpok{flex-direction:column;align-items:flex-start}.header-center.svelte-114zpok.svelte-114zpok,.header-right.svelte-114zpok.svelte-114zpok{width:100%;justify-content:flex-start}.solar-info.svelte-114zpok.svelte-114zpok{flex-wrap:wrap}}:root{--bg-primary: #0a1628;--bg-secondary: #1a2332;--bg-tertiary: #243447;--bg-hover: #2a3f5f;--text-primary: #e0e6ed;--text-secondary: #a0aec0;--text-muted: #718096;--accent-cyan: #4fc3f7;--accent-blue: #2196f3;--accent-green: #4caf50;--accent-orange: #ff9800;--accent-red: #f44336;--accent-purple: #9c27b0;--accent-yellow: #ffc107;--border-color: #2d3748;--border-light: #374151;--card-shadow: 0 1px 3px rgba(0, 0, 0, .3);--card-radius: 6px;--header-height: 56px;--spacing-xs: 4px;--spacing-sm: 8px;--spacing-md: 12px;--spacing-lg: 16px;--spacing-xl: 20px}*{box-sizing:border-box;margin:0;padding:0}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background:var(--bg-primary);color:var(--text-primary);font-size:13px;line-height:1.4;overflow-x:hidden}.app{display:flex;flex-direction:column;height:100vh;overflow:hidden}header{height:var(--header-height);background:var(--bg-secondary);border-bottom:1px solid var(--border-color);display:flex;align-items:center;justify-content:space-between;padding:0 var(--spacing-lg);flex-shrink:0}.header-left{display:flex;align-items:center;gap:var(--spacing-lg)}.header-left h1{font-size:16px;font-weight:600;color:var(--accent-cyan);letter-spacing:.5px}.connection-status{display:flex;align-items:center;gap:var(--spacing-sm);font-size:12px;color:var(--text-secondary)}.status-indicator{width:8px;height:8px;border-radius:50%;background:var(--accent-red);transition:background .3s}.status-indicator.status-online{background:var(--accent-green);box-shadow:0 0 8px var(--accent-green)}.header-center{display:flex;gap:var(--spacing-xl)}.solar-info{display:flex;gap:var(--spacing-md);font-size:12px}.solar-item{color:var(--text-secondary)}.solar-item .value{color:var(--accent-cyan);font-weight:600;margin-left:var(--spacing-xs)}.header-right{display:flex;align-items:center;gap:var(--spacing-lg)}.weather-info{display:flex;gap:var(--spacing-md);font-size:12px;color:var(--text-secondary)}.clock{display:flex;flex-direction:column;align-items:flex-end;font-size:11px}.clock .time{font-size:14px;font-weight:600;color:var(--text-primary)}.clock .date{color:var(--text-secondary)}main{flex:1;overflow-y:auto;padding:var(--spacing-md)}.dashboard-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:var(--spacing-md);max-width:1800px;margin:0 auto}.card{background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:var(--card-radius);padding:var(--spacing-md);box-shadow:var(--card-shadow);transition:border-color .2s}.card:hover{border-color:var(--border-light)}.card h2{font-size:14px;font-weight:600;color:var(--accent-cyan);margin-bottom:var(--spacing-md);display:flex;align-items:center;gap:var(--spacing-sm);letter-spacing:.5px}.card h2:before{content:"";width:3px;height:14px;background:var(--accent-cyan);border-radius:2px}.status-dot{width:8px;height:8px;border-radius:50%;background:var(--accent-green)}.status-dot.disconnected{background:var(--accent-red)}.label{font-size:11px;color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px;margin-bottom:var(--spacing-xs)}.value{font-size:18px;font-weight:300;color:var(--text-primary)}button,.button{background:var(--bg-tertiary);color:var(--text-primary);border:1px solid var(--border-color);border-radius:4px;padding:var(--spacing-sm) var(--spacing-md);font-size:12px;font-weight:500;cursor:pointer;transition:all .2s;text-transform:uppercase;letter-spacing:.5px}button:hover,.button:hover{background:var(--bg-hover);border-color:var(--border-light)}button:active,.button:active{transform:scale(.98)}button.primary{background:var(--accent-cyan);border-color:var(--accent-cyan);color:#000}button.primary:hover{background:#29b6f6;border-color:#29b6f6}button.success{background:var(--accent-green);border-color:var(--accent-green);color:#fff}button.danger{background:var(--accent-red);border-color:var(--accent-red);color:#fff}button:disabled{opacity:.5;cursor:not-allowed}select{background:var(--bg-tertiary);color:var(--text-primary);border:1px solid var(--border-color);border-radius:4px;padding:var(--spacing-sm);font-size:12px;cursor:pointer;outline:none;transition:all .2s}select:hover{border-color:var(--border-light)}select:focus{border-color:var(--accent-cyan)}.badge{display:inline-block;padding:4px 10px;border-radius:12px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.5px}.badge.green{background:#4caf5033;color:var(--accent-green)}.badge.red{background:#f4433633;color:var(--accent-red)}.badge.orange{background:#ff980033;color:var(--accent-orange)}.badge.cyan{background:#4fc3f733;color:var(--accent-cyan)}.badge.purple{background:#9c27b033;color:var(--accent-purple)}.bar{width:100%;height:6px;background:var(--bg-tertiary);border-radius:3px;overflow:hidden;margin:var(--spacing-xs) 0}.bar-fill{height:100%;background:linear-gradient(90deg,var(--accent-green),var(--accent-orange),var(--accent-red));transition:width .3s ease;border-radius:3px}.scale{display:flex;justify-content:space-between;font-size:10px;color:var(--text-muted);margin-top:var(--spacing-xs)}.metrics{display:flex;flex-direction:column;gap:var(--spacing-md)}.metric{display:flex;flex-direction:column;gap:var(--spacing-xs)}.metric-row{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--spacing-md)}.metric.small{min-width:0}.metric-value{display:flex;justify-content:space-between;align-items:baseline;flex-wrap:wrap}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:var(--bg-primary)}::-webkit-scrollbar-thumb{background:var(--bg-tertiary);border-radius:4px}::-webkit-scrollbar-thumb:hover{background:var(--bg-hover)}@media (max-width: 1400px){.dashboard-grid{grid-template-columns:repeat(auto-fit,minmax(250px,1fr))}}@media (max-width: 768px){header{flex-direction:column;height:auto;padding:var(--spacing-sm);gap:var(--spacing-sm)}.dashboard-grid{grid-template-columns:1fr}.header-center{order:3;width:100%}} diff --git a/cmd/server/web/dist/assets/index-C9xq6o2j.js b/cmd/server/web/dist/assets/index-C9xq6o2j.js new file mode 100644 index 0000000..e038ddb --- /dev/null +++ b/cmd/server/web/dist/assets/index-C9xq6o2j.js @@ -0,0 +1,11 @@ +var Ql=Object.defineProperty;var xl=(e,l,s)=>l in e?Ql(e,l,{enumerable:!0,configurable:!0,writable:!0,value:s}):e[l]=s;var Wt=(e,l,s)=>xl(e,typeof l!="symbol"?l+"":l,s);(function(){const l=document.createElement("link").relList;if(l&&l.supports&&l.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))i(o);new MutationObserver(o=>{for(const r of o)if(r.type==="childList")for(const f of r.addedNodes)f.tagName==="LINK"&&f.rel==="modulepreload"&&i(f)}).observe(document,{childList:!0,subtree:!0});function s(o){const r={};return o.integrity&&(r.integrity=o.integrity),o.referrerPolicy&&(r.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?r.credentials="include":o.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function i(o){if(o.ep)return;o.ep=!0;const r=s(o);fetch(o.href,r)}})();function ge(){}function Jl(e){return e()}function fl(){return Object.create(null)}function nt(e){e.forEach(Jl)}function Xl(e){return typeof e=="function"}function ot(e,l){return e!=e?l==l:e!==l||e&&typeof e=="object"||typeof e=="function"}function $l(e){return Object.keys(e).length===0}function n(e,l){e.appendChild(l)}function L(e,l,s){e.insertBefore(l,s||null)}function E(e){e.parentNode&&e.parentNode.removeChild(e)}function Dt(e,l){for(let s=0;se.removeEventListener(l,s,i)}function t(e,l,s){s==null?e.removeAttribute(l):e.getAttribute(l)!==s&&e.setAttribute(l,s)}function en(e){return Array.from(e.childNodes)}function R(e,l){l=""+l,e.data!==l&&(e.data=l)}function Pt(e,l){e.value=l??""}function ce(e,l,s,i){s==null?e.style.removeProperty(l):e.style.setProperty(l,s,"")}function It(e,l,s){for(let i=0;ie.indexOf(i)===-1?l.push(i):s.push(i)),s.forEach(i=>i()),yt=l}const Ot=new Set;let on;function ct(e,l){e&&e.i&&(Ot.delete(e),e.i(l))}function mt(e,l,s,i){if(e&&e.o){if(Ot.has(e))return;Ot.add(e),on.c.push(()=>{Ot.delete(e)}),e.o(l)}}function ut(e){return(e==null?void 0:e.length)!==void 0?e:Array.from(e)}function bt(e){e&&e.c()}function dt(e,l,s){const{fragment:i,after_update:o}=e.$$;i&&i.m(l,s),Nt(()=>{const r=e.$$.on_mount.map(Jl).filter(Xl);e.$$.on_destroy?e.$$.on_destroy.push(...r):nt(r),e.$$.on_mount=[]}),o.forEach(Nt)}function ft(e,l){const s=e.$$;s.fragment!==null&&(an(s.after_update),nt(s.on_destroy),s.fragment&&s.fragment.d(l),s.on_destroy=s.fragment=null,s.ctx=[])}function rn(e,l){e.$$.dirty[0]===-1&&(kt.push(e),nn(),e.$$.dirty.fill(0)),e.$$.dirty[l/31|0]|=1<{const h=g.length?g[0]:w;return c.ctx&&o(c.ctx[u],c.ctx[u]=h)&&(!c.skip_bound&&c.bound[u]&&c.bound[u](h),p&&rn(e,u)),w}):[],c.update(),p=!0,nt(c.before_update),c.fragment=i?i(c.ctx):!1,l.target){if(l.hydrate){const u=en(l.target);c.fragment&&c.fragment.l(u),u.forEach(E)}else c.fragment&&c.fragment.c();l.intro&&ct(e.$$.fragment),dt(e,l.target,l.anchor),Kl()}St(v)}class ht{constructor(){Wt(this,"$$");Wt(this,"$$set")}$destroy(){ft(this,1),this.$destroy=ge}$on(l,s){if(!Xl(s))return ge;const i=this.$$.callbacks[l]||(this.$$.callbacks[l]=[]);return i.push(s),()=>{const o=i.indexOf(s);o!==-1&&i.splice(o,1)}}$set(l){this.$$set&&!$l(l)&&(this.$$.skip_bound=!0,this.$$set(l),this.$$.skip_bound=!1)}}const cn="4";typeof window<"u"&&(window.__svelte||(window.__svelte={v:new Set})).v.add(cn);const _t=[];function qt(e,l=ge){let s;const i=new Set;function o(d){if(ot(e,d)&&(e=d,s)){const v=!_t.length;for(const c of i)c[1](),_t.push(c,e);if(v){for(let c=0;c<_t.length;c+=2)_t[c][0](_t[c+1]);_t.length=0}}}function r(d){o(d(e))}function f(d,v=ge){const c=[d,v];return i.add(c),i.size===1&&(s=l(o,r)||ge),d(e),()=>{i.delete(c),i.size===0&&s&&(s(),s=null)}}return{set:o,update:r,subscribe:f}}const jt=qt(!1),Hl=qt(null),dn=qt(null);class fn{constructor(){this.ws=null,this.reconnectTimeout=null,this.reconnectDelay=3e3}connect(){const s=`${window.location.protocol==="https:"?"wss:":"ws:"}//${window.location.host}/ws`;try{this.ws=new WebSocket(s),this.ws.onopen=()=>{console.log("WebSocket connected"),jt.set(!0)},this.ws.onmessage=i=>{try{const o=JSON.parse(i.data);o.type==="update"&&(console.log("System status updated:",o.data),Hl.set(o.data),dn.set(new Date(o.timestamp)))}catch(o){console.error("Error parsing message:",o)}},this.ws.onerror=i=>{console.error("WebSocket error:",i)},this.ws.onclose=()=>{console.log("WebSocket disconnected"),jt.set(!1),this.scheduleReconnect()}}catch(i){console.error("Error creating WebSocket:",i),this.scheduleReconnect()}}scheduleReconnect(){this.reconnectTimeout&&clearTimeout(this.reconnectTimeout),this.reconnectTimeout=setTimeout(()=>{console.log("Attempting to reconnect..."),this.connect()},this.reconnectDelay)}send(l){this.ws&&this.ws.readyState===WebSocket.OPEN&&this.ws.send(JSON.stringify(l))}disconnect(){this.reconnectTimeout&&clearTimeout(this.reconnectTimeout),this.ws&&this.ws.close()}}const hl=new fn,un="/api";async function ye(e,l={}){try{const s=await fetch(`${un}${e}`,{...l,headers:{"Content-Type":"application/json",...l.headers}});if(!s.ok)throw new Error(`HTTP error! status: ${s.status}`);return await s.json()}catch(s){throw console.error("API request failed:",s),s}}const Oe={getStatus:()=>ye("/status"),getConfig:()=>ye("/config"),webswitch:{relayOn:e=>ye(`/webswitch/relay/on?relay=${e}`,{method:"POST"}),relayOff:e=>ye(`/webswitch/relay/off?relay=${e}`,{method:"POST"}),allOn:()=>ye("/webswitch/all/on",{method:"POST"}),allOff:()=>ye("/webswitch/all/off",{method:"POST"})},rotator:{move:(e,l)=>ye("/rotator/move",{method:"POST",body:JSON.stringify({rotator:e,azimuth:l})}),cw:e=>ye(`/rotator/cw?rotator=${e}`,{method:"POST"}),ccw:e=>ye(`/rotator/ccw?rotator=${e}`,{method:"POST"}),stop:()=>ye("/rotator/stop",{method:"POST"})},tuner:{setOperate:e=>ye("/tuner/operate",{method:"POST",body:JSON.stringify({value:e})}),setBypass:e=>ye("/tuner/bypass",{method:"POST",body:JSON.stringify({value:e})}),autoTune:()=>ye("/tuner/autotune",{method:"POST"})},antenna:{selectAntenna:(e,l)=>ye("/antenna/select",{method:"POST",body:JSON.stringify({port:e,antenna:l})}),deselectAntenna:(e,l)=>ye("/antenna/deselect",{method:"POST",body:JSON.stringify({port:e,antenna:l})}),reboot:()=>ye("/antenna/reboot",{method:"POST"})},power:{setFanMode:e=>ye("/power/fanmode",{method:"POST",body:JSON.stringify({mode:e})}),setOperate:e=>ye("/power/operate",{method:"POST",body:JSON.stringify({value:e})})},rotator:{setHeading:e=>ye("/rotator/heading",{method:"POST",body:JSON.stringify({heading:e})}),rotateCW:()=>ye("/rotator/cw",{method:"POST"}),rotateCCW:()=>ye("/rotator/ccw",{method:"POST"}),stop:()=>ye("/rotator/stop",{method:"POST"})},ultrabeam:{setFrequency:(e,l)=>ye("/ultrabeam/frequency",{method:"POST",body:JSON.stringify({frequency:e,direction:l})}),retract:()=>ye("/ultrabeam/retract",{method:"POST"}),setAutoTrack:(e,l)=>ye("/ultrabeam/autotrack",{method:"POST",body:JSON.stringify({enabled:e,threshold:l})}),setDirection:e=>ye("/ultrabeam/direction",{method:"POST",body:JSON.stringify({direction:e})})}};function vn(e){let l;return{c(){l=a("span"),l.textContent="Checking FlexRadio...",t(l,"class","no-signal svelte-h7ie36")},m(s,i){L(s,l,i)},p:ge,d(s){s&&E(l)}}}function hn(e){let l;return{c(){l=a("span"),l.textContent="FlexRadio not connected",t(l,"class","no-signal svelte-h7ie36")},m(s,i){L(s,l,i)},p:ge,d(s){s&&E(l)}}}function pn(e){let l;return{c(){l=a("div"),l.innerHTML=' TCP connected, radio off',t(l,"class","radio-status svelte-h7ie36")},m(s,i){L(s,l,i)},p:ge,d(s){s&&E(l)}}}function mn(e){let l,s,i,o,r=(e[11]||"Radio is on")+"",f,d,v,c=e[9]&&pl(e),p=e[10]&&ml(e);return{c(){l=a("div"),s=a("span"),s.textContent="●",i=b(),o=a("span"),f=T(r),d=b(),c&&c.c(),v=b(),p&&p.c(),t(s,"class","radio-on-indicator svelte-h7ie36"),t(o,"class","radio-status-text svelte-h7ie36"),t(l,"class","radio-status svelte-h7ie36")},m(u,w){L(u,l,w),n(l,s),n(l,i),n(l,o),n(o,f),n(l,d),c&&c.m(l,null),n(l,v),p&&p.m(l,null)},p(u,w){w[0]&2048&&r!==(r=(u[11]||"Radio is on")+"")&&R(f,r),u[9]?c?c.p(u,w):(c=pl(u),c.c(),c.m(l,v)):c&&(c.d(1),c=null),u[10]?p?p.p(u,w):(p=ml(u),p.c(),p.m(l,null)):p&&(p.d(1),p=null)},d(u){u&&E(l),c&&c.d(),p&&p.d()}}}function bn(e){let l,s,i,o,r,f,d=e[9]&&bl(e),v=e[10]&&gl(e);return{c(){l=a("div"),s=a("span"),s.textContent="●",i=b(),o=a("span"),o.textContent="Slice active, waiting for frequency...",r=b(),d&&d.c(),f=b(),v&&v.c(),t(s,"class","radio-on-indicator svelte-h7ie36"),t(o,"class","radio-status-text svelte-h7ie36"),t(l,"class","radio-status svelte-h7ie36")},m(c,p){L(c,l,p),n(l,s),n(l,i),n(l,o),n(l,r),d&&d.m(l,null),n(l,f),v&&v.m(l,null)},p(c,p){c[9]?d?d.p(c,p):(d=bl(c),d.c(),d.m(l,f)):d&&(d.d(1),d=null),c[10]?v?v.p(c,p):(v=gl(c),v.c(),v.m(l,null)):v&&(v.d(1),v=null)},d(c){c&&E(l),d&&d.d(),v&&v.d()}}}function gn(e){let l,s,i=Sl(e[3])+"",o,r,f,d,v,c,p,u=e[4]&&wl(e),w=e[25]&&_l(e),g=e[24]&&kl();return{c(){l=a("div"),s=a("span"),o=T(i),r=b(),f=a("span"),f.textContent="MHz",d=b(),u&&u.c(),v=b(),w&&w.c(),c=b(),g&&g.c(),p=At(),t(s,"class","frequency svelte-h7ie36"),ce(s,"--band-color",e[22]),t(f,"class","unit svelte-h7ie36"),t(l,"class","frequency-display svelte-h7ie36")},m(h,y){L(h,l,y),n(l,s),n(s,o),n(l,r),n(l,f),L(h,d,y),u&&u.m(h,y),L(h,v,y),w&&w.m(h,y),L(h,c,y),g&&g.m(h,y),L(h,p,y)},p(h,y){y[0]&8&&i!==(i=Sl(h[3])+"")&&R(o,i),y[0]&4194304&&ce(s,"--band-color",h[22]),h[4]?u?u.p(h,y):(u=wl(h),u.c(),u.m(v.parentNode,v)):u&&(u.d(1),u=null),h[25]?w?w.p(h,y):(w=_l(h),w.c(),w.m(c.parentNode,c)):w&&(w.d(1),w=null),h[24]?g||(g=kl(),g.c(),g.m(p.parentNode,p)):g&&(g.d(1),g=null)},d(h){h&&(E(l),E(d),E(v),E(c),E(p)),u&&u.d(h),w&&w.d(h),g&&g.d(h)}}}function pl(e){let l,s;return{c(){l=a("span"),s=T(e[9]),t(l,"class","model-badge svelte-h7ie36")},m(i,o){L(i,l,o),n(l,s)},p(i,o){o[0]&512&&R(s,i[9])},d(i){i&&E(l)}}}function ml(e){let l,s;return{c(){l=a("span"),s=T(e[10]),t(l,"class","callsign-badge svelte-h7ie36")},m(i,o){L(i,l,o),n(l,s)},p(i,o){o[0]&1024&&R(s,i[10])},d(i){i&&E(l)}}}function bl(e){let l,s;return{c(){l=a("span"),s=T(e[9]),t(l,"class","model-badge svelte-h7ie36")},m(i,o){L(i,l,o),n(l,s)},p(i,o){o[0]&512&&R(s,i[9])},d(i){i&&E(l)}}}function gl(e){let l,s;return{c(){l=a("span"),s=T(e[10]),t(l,"class","callsign-badge svelte-h7ie36")},m(i,o){L(i,l,o),n(l,s)},p(i,o){o[0]&1024&&R(s,i[10])},d(i){i&&E(l)}}}function wl(e){let l,s;return{c(){l=a("span"),s=T(e[4]),t(l,"class","band-badge svelte-h7ie36"),ce(l,"background-color",e[22])},m(i,o){L(i,l,o),n(l,s)},p(i,o){o[0]&16&&R(s,i[4]),o[0]&4194304&&ce(l,"background-color",i[22])},d(i){i&&E(l)}}}function _l(e){let l,s;return{c(){l=a("span"),s=T(e[25]),t(l,"class","mode-badge svelte-h7ie36")},m(i,o){L(i,l,o),n(l,s)},p(i,o){o[0]&33554432&&R(s,i[25])},d(i){i&&E(l)}}}function kl(e){let l;return{c(){l=a("span"),l.textContent="TX",t(l,"class","tx-indicator svelte-h7ie36")},m(s,i){L(s,l,i)},d(s){s&&E(l)}}}function wn(e){let l;return{c(){l=a("span"),l.textContent="📍 Position not set",t(l,"class","no-location svelte-h7ie36")},m(s,i){L(s,l,i)},p:ge,d(s){s&&E(l)}}}function _n(e){let l,s,i,o,r,f,d,v,c=Ft(e[12])+"",p,u,w,g,h,y,k,M,C,m=Ft(e[13])+"",F,O,z;function P(I,U){if(I[14])return yn;if(I[16])return kn}let _=P(e),A=_&&_(e);return{c(){l=a("div"),s=a("span"),i=D("svg"),o=D("line"),r=D("path"),f=D("path"),d=D("path"),v=b(),p=T(c),u=b(),w=a("span"),g=D("svg"),h=D("line"),y=D("path"),k=D("path"),M=D("path"),C=b(),F=T(m),O=b(),A&&A.c(),z=At(),t(o,"x1","2"),t(o,"y1","18"),t(o,"x2","22"),t(o,"y2","18"),t(o,"stroke","currentColor"),t(o,"stroke-width","1.5"),t(o,"opacity","0.5"),t(r,"d","M12 18 A6 6 0 0 1 12 6 A6 6 0 0 1 12 18"),t(r,"fill","#fbbf24"),t(f,"d","M12 2v3M5.6 5.6l2.1 2.1M2 12h3M19 12h3M18.4 5.6l-2.1 2.1"),t(f,"stroke","#fbbf24"),t(f,"stroke-width","2"),t(f,"stroke-linecap","round"),t(d,"d","M12 14l-3 3M12 14l3 3M12 14v5"),t(d,"stroke","#22c55e"),t(d,"stroke-width","2"),t(d,"stroke-linecap","round"),t(d,"fill","none"),t(i,"class","sun-icon sunrise-icon svelte-h7ie36"),t(i,"width","18"),t(i,"height","18"),t(i,"viewBox","0 0 24 24"),t(s,"class","sun-item svelte-h7ie36"),t(s,"title","Sunrise"),t(h,"x1","2"),t(h,"y1","18"),t(h,"x2","22"),t(h,"y2","18"),t(h,"stroke","currentColor"),t(h,"stroke-width","1.5"),t(h,"opacity","0.5"),t(y,"d","M12 18 A6 6 0 0 1 12 6 A6 6 0 0 1 12 18"),t(y,"fill","#f97316"),t(k,"d","M12 2v3M5.6 5.6l2.1 2.1M2 12h3M19 12h3M18.4 5.6l-2.1 2.1"),t(k,"stroke","#f97316"),t(k,"stroke-width","2"),t(k,"stroke-linecap","round"),t(k,"opacity","0.7"),t(M,"d","M12 22l-3-3M12 22l3-3M12 22v-5"),t(M,"stroke","#ef4444"),t(M,"stroke-width","2"),t(M,"stroke-linecap","round"),t(M,"fill","none"),t(g,"class","sun-icon sunset-icon svelte-h7ie36"),t(g,"width","18"),t(g,"height","18"),t(g,"viewBox","0 0 24 24"),t(w,"class","sun-item svelte-h7ie36"),t(w,"title","Sunset"),t(l,"class","sun-times svelte-h7ie36")},m(I,U){L(I,l,U),n(l,s),n(s,i),n(i,o),n(i,r),n(i,f),n(i,d),n(s,v),n(s,p),n(l,u),n(l,w),n(w,g),n(g,h),n(g,y),n(g,k),n(g,M),n(w,C),n(w,F),L(I,O,U),A&&A.m(I,U),L(I,z,U)},p(I,U){U[0]&4096&&c!==(c=Ft(I[12])+"")&&R(p,c),U[0]&8192&&m!==(m=Ft(I[13])+"")&&R(F,m),_===(_=P(I))&&A?A.p(I,U):(A&&A.d(1),A=_&&_(I),A&&(A.c(),A.m(z.parentNode,z)))},d(I){I&&(E(l),E(O),E(z)),A&&A.d(I)}}}function kn(e){let l,s;return{c(){l=a("span"),s=T(e[16]),t(l,"class","next-event svelte-h7ie36")},m(i,o){L(i,l,o),n(l,s)},p(i,o){o[0]&65536&&R(s,i[16])},d(i){i&&E(l)}}}function yn(e){let l;return{c(){l=a("span"),l.textContent="✨ Grayline",t(l,"class","grayline-badge svelte-h7ie36"),W(l,"sunrise",e[15]==="sunrise"),W(l,"sunset",e[15]==="sunset")},m(s,i){L(s,l,i)},p(s,i){i[0]&32768&&W(l,"sunrise",s[15]==="sunrise"),i[0]&32768&&W(l,"sunset",s[15]==="sunset")},d(s){s&&E(l)}}}function yl(e){let l,s,i,o,r,f,d=e[8].toFixed(0)+"",v,c;return{c(){l=a("div"),s=a("span"),s.textContent="⚠️",i=b(),o=a("span"),r=T("Vent: "),f=a("strong"),v=T(d),c=T(" km/h"),t(s,"class","alert-icon svelte-h7ie36"),t(f,"class","svelte-h7ie36"),t(o,"class","alert-text svelte-h7ie36"),t(l,"class","alert wind-alert svelte-h7ie36")},m(p,u){L(p,l,u),n(l,s),n(l,i),n(l,o),n(o,r),n(o,f),n(f,v),n(f,c)},p(p,u){u[0]&256&&d!==(d=p[8].toFixed(0)+"")&&R(v,d)},d(p){p&&E(l)}}}function Ml(e){let l,s,i,o,r,f,d=e[7].toFixed(0)+"",v,c;return{c(){l=a("div"),s=a("span"),s.textContent="🌪️",i=b(),o=a("span"),r=T("Rafales: "),f=a("strong"),v=T(d),c=T(" km/h"),t(s,"class","alert-icon svelte-h7ie36"),t(f,"class","svelte-h7ie36"),t(o,"class","alert-text svelte-h7ie36"),t(l,"class","alert gust-alert svelte-h7ie36")},m(p,u){L(p,l,u),n(l,s),n(l,i),n(l,o),n(o,r),n(o,f),n(f,v),n(f,c)},p(p,u){u[0]&128&&d!==(d=p[7].toFixed(0)+"")&&R(v,d)},d(p){p&&E(l)}}}function Tl(e){let l;return{c(){l=a("div"),l.innerHTML=' Weather OK',t(l,"class","status-ok svelte-h7ie36")},m(s,i){L(s,l,i)},d(s){s&&E(l)}}}function Mn(e){let l,s,i,o,r,f,d,v,c,p,u,w,g,h;function y(_,A){return _[21]?gn:_[19]?bn:_[20]?mn:_[17]?pn:_[18]?hn:vn}let k=y(e),M=k(e);function C(_,A){return _[0]&&_[1]?_n:wn}let m=C(e),F=m(e),O=e[6]&&yl(e),z=e[5]&&Ml(e),P=!e[23]&&Tl();return{c(){l=a("div"),s=a("div"),i=a("div"),i.textContent="📻",o=b(),M.c(),r=b(),f=a("div"),d=b(),v=a("div"),F.c(),c=b(),p=a("div"),u=b(),w=a("div"),O&&O.c(),g=b(),z&&z.c(),h=b(),P&&P.c(),t(i,"class","flex-icon svelte-h7ie36"),W(i,"connected",e[2]),W(i,"disconnected",!e[2]),t(s,"class","flex-section svelte-h7ie36"),t(f,"class","separator svelte-h7ie36"),t(v,"class","grayline-section svelte-h7ie36"),t(p,"class","separator svelte-h7ie36"),t(w,"class","weather-section svelte-h7ie36"),t(l,"class","status-banner svelte-h7ie36"),W(l,"has-warning",e[23])},m(_,A){L(_,l,A),n(l,s),n(s,i),n(s,o),M.m(s,null),n(l,r),n(l,f),n(l,d),n(l,v),F.m(v,null),n(l,c),n(l,p),n(l,u),n(l,w),O&&O.m(w,null),n(w,g),z&&z.m(w,null),n(w,h),P&&P.m(w,null)},p(_,A){A[0]&4&&W(i,"connected",_[2]),A[0]&4&&W(i,"disconnected",!_[2]),k===(k=y(_))&&M?M.p(_,A):(M.d(1),M=k(_),M&&(M.c(),M.m(s,null))),m===(m=C(_))&&F?F.p(_,A):(F.d(1),F=m(_),F&&(F.c(),F.m(v,null))),_[6]?O?O.p(_,A):(O=yl(_),O.c(),O.m(w,g)):O&&(O.d(1),O=null),_[5]?z?z.p(_,A):(z=Ml(_),z.c(),z.m(w,h)):z&&(z.d(1),z=null),_[23]?P&&(P.d(1),P=null):P||(P=Tl(),P.c(),P.m(w,null)),A[0]&8388608&&W(l,"has-warning",_[23])},i:ge,o:ge,d(_){_&&E(l),M.d(),F.d(),O&&O.d(),z&&z.d(),P&&P.d()}}}function Cl(e,l,s){const i=Math.PI/180,o=Tn(e),r=2*Math.PI/365*(o-1+(e.getHours()-12)/24),f=229.18*(75e-6+.001868*Math.cos(r)-.032077*Math.sin(r)-.014615*Math.cos(2*r)-.040849*Math.sin(2*r)),d=.006918-.399912*Math.cos(r)+.070257*Math.sin(r)-.006758*Math.cos(2*r)+907e-6*Math.sin(2*r)-.002697*Math.cos(3*r)+.00148*Math.sin(3*r),v=l*i,c=90.833*i,p=Math.cos(c)/(Math.cos(v)*Math.cos(d))-Math.tan(v)*Math.tan(d);if(p>1||p<-1)return{sunrise:null,sunset:null};const u=Math.acos(p)/i,w=720-4*(s+u)-f,g=720-4*(s-u)-f,h=new Date(e);h.setUTCHours(0,0,0,0),h.setUTCMinutes(w);const y=new Date(e);return y.setUTCHours(0,0,0,0),y.setUTCMinutes(g),{sunrise:h,sunset:y}}function Tn(e){const l=new Date(e.getFullYear(),0,0),s=e-l,i=1e3*60*60*24;return Math.floor(s/i)}function Ft(e){return e?e.toLocaleTimeString("fr-FR",{hour:"2-digit",minute:"2-digit"}):"--:--"}function Sl(e){return!e||e===0?"---":e<10?e.toFixed(4):e<100?e.toFixed(3):e.toFixed(2)}function Cn(e){return!e||e===0?"":e>=1.8&&e<=2?"160M":e>=3.5&&e<=4?"80M":e>=5.3&&e<=5.4?"60M":e>=7&&e<=7.3?"40M":e>=10.1&&e<=10.15?"30M":e>=14&&e<=14.35?"20M":e>=18.068&&e<=18.168?"17M":e>=21&&e<=21.45?"15M":e>=24.89&&e<=24.99?"12M":e>=28&&e<=29.7?"10M":e>=50&&e<=54?"6M":e>=144&&e<=148?"2M":e>=430&&e<=440?"70CM":""}function Sn(e){return{"160M":"#9c27b0","80M":"#673ab7","60M":"#3f51b5","40M":"#2196f3","30M":"#00bcd4","20M":"#009688","17M":"#4caf50","15M":"#8bc34a","12M":"#cddc39","10M":"#ffeb3b","6M":"#ff9800","2M":"#ff5722","70CM":"#f44336"}[e]||"#4fc3f7"}function zn(e,l,s){let i,o,r,f,d,v,c,p,u,w,g,h,y,k,M,C,m,F,O,z,P,{flexradio:_=null}=l,{weather:A=null}=l,{latitude:I=null}=l,{longitude:U=null}=l,{windWarningThreshold:K=30}=l,{gustWarningThreshold:de=50}=l,{graylineWindow:ie=30}=l,S=null,te=null,Y=!1,N="",B="",H=new Date,Q;Vl(()=>{fe(),Q=setInterval(()=>{H=new Date,Pe(),le()},1e4)}),Zl(()=>{Q&&clearInterval(Q)});function fe(){if(!I||!U)return;const ae=Cl(new Date,I,U);s(12,S=ae.sunrise),s(13,te=ae.sunset),Pe(),le()}function Pe(){if(!S||!te){s(14,Y=!1);return}const J=H.getTime(),ae=ie*60*1e3,V=Math.abs(J-S.getTime())<=ae,we=Math.abs(J-te.getTime())<=ae;s(14,Y=V||we),s(15,N=V?"sunrise":we?"sunset":"")}function le(){if(!S||!te){s(16,B="");return}const J=H.getTime();let ae=null,V="";if(J0?s(16,B=`${V} in ${oe}h${re.toString().padStart(2,"0")}m`):s(16,B=`${V} in ${re}m`)}}return e.$$set=J=>{"flexradio"in J&&s(26,_=J.flexradio),"weather"in J&&s(27,A=J.weather),"latitude"in J&&s(0,I=J.latitude),"longitude"in J&&s(1,U=J.longitude),"windWarningThreshold"in J&&s(28,K=J.windWarningThreshold),"gustWarningThreshold"in J&&s(29,de=J.gustWarningThreshold),"graylineWindow"in J&&s(30,ie=J.graylineWindow)},e.$$.update=()=>{e.$$.dirty[0]&67108864&&s(3,i=(_==null?void 0:_.frequency)||0),e.$$.dirty[0]&67108864&&s(25,o=(_==null?void 0:_.mode)||""),e.$$.dirty[0]&67108864&&s(24,r=(_==null?void 0:_.tx)||!1),e.$$.dirty[0]&67108864&&s(2,f=(_==null?void 0:_.connected)||!1),e.$$.dirty[0]&67108864&&s(31,d=(_==null?void 0:_.radio_on)||!1),e.$$.dirty[0]&67108864&&s(11,v=(_==null?void 0:_.radio_info)||""),e.$$.dirty[0]&67108864&&s(10,c=(_==null?void 0:_.callsign)||""),e.$$.dirty[0]&67108864&&s(9,p=(_==null?void 0:_.model)||""),e.$$.dirty[0]&67108864&&s(32,u=(_==null?void 0:_.active_slices)||0),e.$$.dirty[0]&3&&I&&U&&fe(),e.$$.dirty[0]&3596|e.$$.dirty[1]&3&&console.log("FlexRadio status:",{connected:f,radioOn:d,frequency:i,activeSlices:u,radioInfo:v,callsign:c,model:p}),e.$$.dirty[0]&134217728&&s(8,w=(A==null?void 0:A.wind_speed)||0),e.$$.dirty[0]&134217728&&s(7,g=(A==null?void 0:A.wind_gust)||0),e.$$.dirty[0]&268435712&&s(6,h=w>=K),e.$$.dirty[0]&536871040&&s(5,y=g>=de),e.$$.dirty[0]&96&&s(23,k=h||y),e.$$.dirty[0]&8&&s(4,M=Cn(i)),e.$$.dirty[0]&16&&s(22,C=Sn(M)),e.$$.dirty[0]&8|e.$$.dirty[1]&1&&s(21,m=d&&i>0),e.$$.dirty[0]&8|e.$$.dirty[1]&3&&s(20,F=d&&i===0&&u===0),e.$$.dirty[0]&8|e.$$.dirty[1]&3&&s(19,O=d&&i===0&&u>0),e.$$.dirty[0]&4&&s(18,z=!f),e.$$.dirty[0]&4|e.$$.dirty[1]&1&&s(17,P=f&&!d)},[I,U,f,i,M,y,h,g,w,p,c,v,S,te,Y,N,B,P,z,O,F,m,C,k,r,o,_,A,K,de,ie,d,u]}class Fn extends ht{constructor(l){super(),vt(this,l,zn,Mn,ot,{flexradio:26,weather:27,latitude:0,longitude:1,windWarningThreshold:28,gustWarningThreshold:29,graylineWindow:30},null,[-1,-1])}}function zl(e,l,s){var f;const i=e.slice();i[10]=l[s];const o=i[1].find(function(...v){return e[9](i[10],...v)});i[11]=o;const r=((f=i[11])==null?void 0:f.state)||!1;return i[12]=r,i}function Fl(e){let l,s,i,o,r,f,d=e[12]?"ON":"OFF",v,c,p,u,w,g,h,y;function k(){return e[8](e[10])}return{c(){l=a("div"),s=a("div"),i=a("div"),o=a("div"),o.textContent=`${e[3][e[10]]}`,r=b(),f=a("div"),v=T(d),c=b(),p=a("button"),u=a("div"),u.innerHTML='
',g=b(),t(o,"class","relay-name svelte-z2csmj"),t(f,"class","relay-status svelte-z2csmj"),t(i,"class","relay-details svelte-z2csmj"),t(s,"class","relay-info svelte-z2csmj"),t(u,"class","toggle-track svelte-z2csmj"),t(p,"class","relay-toggle svelte-z2csmj"),p.disabled=w=e[0][e[10]],W(p,"active",e[12]),W(p,"loading",e[0][e[10]]),t(l,"class","relay-card svelte-z2csmj"),W(l,"relay-on",e[12])},m(M,C){L(M,l,C),n(l,s),n(s,i),n(i,o),n(i,r),n(i,f),n(f,v),n(l,c),n(l,p),n(p,u),n(l,g),h||(y=Ce(p,"click",k),h=!0)},p(M,C){e=M,C&2&&d!==(d=e[12]?"ON":"OFF")&&R(v,d),C&1&&w!==(w=e[0][e[10]])&&(p.disabled=w),C&2&&W(p,"active",e[12]),C&1&&W(p,"loading",e[0][e[10]]),C&2&&W(l,"relay-on",e[12])},d(M){M&&E(l),h=!1,y()}}}function Pn(e){let l,s,i,o,r,f,d,v,c,p,u,w,g,h,y,k=ut([1,2,3,4,5]),M=[];for(let C=0;C<5;C+=1)M[C]=Fl(zl(e,k,C));return{c(){l=a("div"),s=a("div"),i=a("h2"),i.textContent="WebSwitch",o=b(),r=a("span"),f=b(),d=a("div"),v=a("div");for(let C=0;C<5;C+=1)M[C].c();c=b(),p=a("div"),u=a("button"),u.innerHTML=` + ALL ON`,w=b(),g=a("button"),g.innerHTML=` + ALL OFF`,t(i,"class","svelte-z2csmj"),t(r,"class","status-dot svelte-z2csmj"),W(r,"disconnected",!e[2]),t(s,"class","card-header svelte-z2csmj"),t(v,"class","relays svelte-z2csmj"),t(u,"class","control-btn all-on svelte-z2csmj"),t(g,"class","control-btn all-off svelte-z2csmj"),t(p,"class","controls svelte-z2csmj"),t(d,"class","metrics svelte-z2csmj"),t(l,"class","card svelte-z2csmj")},m(C,m){L(C,l,m),n(l,s),n(s,i),n(s,o),n(s,r),n(l,f),n(l,d),n(d,v);for(let F=0;F<5;F+=1)M[F]&&M[F].m(v,null);n(d,c),n(d,p),n(p,u),n(p,w),n(p,g),h||(y=[Ce(u,"click",e[5]),Ce(g,"click",e[6])],h=!0)},p(C,[m]){if(m&4&&W(r,"disconnected",!C[2]),m&27){k=ut([1,2,3,4,5]);let F;for(F=0;F<5;F+=1){const O=zl(C,k,F);M[F]?M[F].p(O,m):(M[F]=Fl(O),M[F].c(),M[F].m(v,null))}for(;F<5;F+=1)M[F].d(1)}},i:ge,o:ge,d(C){C&&E(l),Dt(M,C),h=!1,nt(y)}}}function On(e,l,s){let i,o,{status:r}=l;const f={1:"Power Supply",2:"PGXL",3:"TGXL",4:"Flex Radio Start",5:"Reserve"};let d={};async function v(g){const h=i.find(k=>k.number===g),y=(h==null?void 0:h.state)||!1;s(0,d[g]=!0,d);try{y?await Oe.webswitch.relayOff(g):await Oe.webswitch.relayOn(g)}catch(k){console.error("Failed to toggle relay:",k),alert("Failed to control relay")}finally{s(0,d[g]=!1,d)}}async function c(){try{await Oe.webswitch.allOn()}catch(g){console.error("Failed to turn all on:",g)}}async function p(){try{await Oe.webswitch.allOff()}catch(g){console.error("Failed to turn all off:",g)}}const u=g=>v(g),w=(g,h)=>h.number===g;return e.$$set=g=>{"status"in g&&s(7,r=g.status)},e.$$.update=()=>{e.$$.dirty&128&&s(1,i=(r==null?void 0:r.relays)||[]),e.$$.dirty&128&&s(2,o=(r==null?void 0:r.connected)||!1)},[d,i,o,f,v,c,p,r,u,w]}class An extends ht{constructor(l){super(),vt(this,l,On,Pn,ot,{status:7})}}function In(e){let l,s,i,o,r,f,d,v,c,p,u,w,g,h,y,k,M,C=e[1].toFixed(0)+"",m,F,O,z,P,_,A,I,U,K=e[2].toFixed(2)+"",de,ie,S,te,Y,N,B,H=e[3].toFixed(1)+"",Q,fe,Pe,le,J,ae,V,we,oe,re,ue=e[12].toFixed(1)+"",Me,Ie,Se,Ne,Ae,Fe,$,_e,ne,se,Z,ee,j,x=e[15].toFixed(0)+"",X,G,me,ve,Ee,Ye,Ve=e[14].toFixed(1)+"",We,Je,Be,Le,$e,De,Qe=e[13].toFixed(1)+"",Ze,xe,Ge,he,Te,et,pt,rt,st,Re,Ke,Mt,He,gt,tt,it,je,lt,Xe,qe,at,Ue,ze,Tt;return{c(){l=a("div"),s=a("div"),i=a("h2"),i.textContent="Power Genius XL",o=b(),r=a("div"),f=a("button"),d=T(e[7]),v=b(),c=a("span"),p=b(),u=a("div"),w=a("div"),g=a("div"),h=a("div"),y=a("span"),y.textContent="Power",k=b(),M=a("span"),m=T(C),F=T(" W"),O=b(),z=a("div"),P=a("div"),_=a("div"),A=b(),I=a("div"),U=a("div"),de=T(K),ie=b(),S=a("div"),S.textContent="SWR",te=b(),Y=a("div"),N=a("div"),B=a("div"),Q=T(H),fe=T("°"),Pe=b(),le=a("div"),le.textContent="PA Temp",J=b(),ae=a("div"),V=a("div"),we=b(),oe=a("div"),re=a("div"),Me=T(ue),Ie=T("°"),Se=b(),Ne=a("div"),Ne.textContent="HL Temp",Ae=b(),Fe=a("div"),$=a("div"),_e=b(),ne=a("div"),se=a("div"),Z=a("div"),Z.textContent="VAC",ee=b(),j=a("div"),X=T(x),G=b(),me=a("div"),ve=a("div"),ve.textContent="VDD",Ee=b(),Ye=a("div"),We=T(Ve),Je=b(),Be=a("div"),Le=a("div"),Le.textContent="ID Peak",$e=b(),De=a("div"),Ze=T(Qe),xe=b(),Ge=a("div"),he=a("div"),Te=a("span"),Te.textContent="Band A",et=b(),pt=a("span"),rt=T(e[10]),st=b(),Re=a("div"),Ke=a("span"),Ke.textContent="Band B",Mt=b(),He=a("span"),gt=T(e[9]),tt=b(),it=a("div"),je=a("label"),je.textContent="Fan Mode",lt=b(),Xe=a("select"),qe=a("option"),qe.textContent="Standard",at=a("option"),at.textContent="Contest",Ue=a("option"),Ue.textContent="Broadcast",t(i,"class","svelte-vwcbgz"),t(f,"class","state-badge svelte-vwcbgz"),W(f,"idle",e[0]==="IDLE"),W(f,"transmit",e[0].includes("TRANSMIT")),t(c,"class","status-dot svelte-vwcbgz"),W(c,"disconnected",!e[8]),t(r,"class","header-right svelte-vwcbgz"),t(s,"class","card-header svelte-vwcbgz"),t(y,"class","power-label-inline svelte-vwcbgz"),t(M,"class","power-value-inline svelte-vwcbgz"),t(h,"class","power-header svelte-vwcbgz"),t(_,"class","power-bar-fill svelte-vwcbgz"),ce(_,"width",e[4]+"%"),t(P,"class","power-bar-bg svelte-vwcbgz"),t(z,"class","power-bar-container svelte-vwcbgz"),t(g,"class","power-section svelte-vwcbgz"),t(U,"class","swr-value-compact svelte-vwcbgz"),t(S,"class","swr-label-compact svelte-vwcbgz"),t(I,"class","swr-circle-compact svelte-vwcbgz"),ce(I,"--swr-color",e[5]),t(w,"class","power-swr-row svelte-vwcbgz"),t(B,"class","temp-value svelte-vwcbgz"),ce(B,"color",e[6]),t(le,"class","temp-label svelte-vwcbgz"),t(V,"class","temp-mini-fill svelte-vwcbgz"),ce(V,"width",e[3]/80*100+"%"),ce(V,"background",e[6]),t(ae,"class","temp-mini-bar svelte-vwcbgz"),t(N,"class","temp-item svelte-vwcbgz"),t(re,"class","temp-value svelte-vwcbgz"),ce(re,"color",e[6]),t(Ne,"class","temp-label svelte-vwcbgz"),t($,"class","temp-mini-fill svelte-vwcbgz"),ce($,"width",e[12]/80*100+"%"),ce($,"background",e[6]),t(Fe,"class","temp-mini-bar svelte-vwcbgz"),t(oe,"class","temp-item svelte-vwcbgz"),t(Y,"class","temp-group svelte-vwcbgz"),t(Z,"class","param-label svelte-vwcbgz"),t(j,"class","param-value svelte-vwcbgz"),t(se,"class","param-box svelte-vwcbgz"),t(ve,"class","param-label svelte-vwcbgz"),t(Ye,"class","param-value svelte-vwcbgz"),t(me,"class","param-box svelte-vwcbgz"),t(Le,"class","param-label svelte-vwcbgz"),t(De,"class","param-value svelte-vwcbgz"),t(Be,"class","param-box svelte-vwcbgz"),t(ne,"class","params-grid svelte-vwcbgz"),t(Te,"class","band-label svelte-vwcbgz"),t(pt,"class","band-value svelte-vwcbgz"),t(he,"class","band-item svelte-vwcbgz"),t(Ke,"class","band-label svelte-vwcbgz"),t(He,"class","band-value svelte-vwcbgz"),t(Re,"class","band-item svelte-vwcbgz"),t(Ge,"class","band-display svelte-vwcbgz"),t(je,"for","fan-mode-select"),t(je,"class","control-label svelte-vwcbgz"),qe.__value="STANDARD",Pt(qe,qe.__value),at.__value="CONTEST",Pt(at,at.__value),Ue.__value="BROADCAST",Pt(Ue,Ue.__value),t(Xe,"id","fan-mode-select"),t(Xe,"class","svelte-vwcbgz"),t(it,"class","fan-control svelte-vwcbgz"),t(u,"class","metrics svelte-vwcbgz"),t(l,"class","card svelte-vwcbgz")},m(be,ke){L(be,l,ke),n(l,s),n(s,i),n(s,o),n(s,r),n(r,f),n(f,d),n(r,v),n(r,c),n(l,p),n(l,u),n(u,w),n(w,g),n(g,h),n(h,y),n(h,k),n(h,M),n(M,m),n(M,F),n(g,O),n(g,z),n(z,P),n(P,_),n(w,A),n(w,I),n(I,U),n(U,de),n(I,ie),n(I,S),n(u,te),n(u,Y),n(Y,N),n(N,B),n(B,Q),n(B,fe),n(N,Pe),n(N,le),n(N,J),n(N,ae),n(ae,V),n(Y,we),n(Y,oe),n(oe,re),n(re,Me),n(re,Ie),n(oe,Se),n(oe,Ne),n(oe,Ae),n(oe,Fe),n(Fe,$),n(u,_e),n(u,ne),n(ne,se),n(se,Z),n(se,ee),n(se,j),n(j,X),n(ne,G),n(ne,me),n(me,ve),n(me,Ee),n(me,Ye),n(Ye,We),n(ne,Je),n(ne,Be),n(Be,Le),n(Be,$e),n(Be,De),n(De,Ze),n(u,xe),n(u,Ge),n(Ge,he),n(he,Te),n(he,et),n(he,pt),n(pt,rt),n(Ge,st),n(Ge,Re),n(Re,Ke),n(Re,Mt),n(Re,He),n(He,gt),n(u,tt),n(u,it),n(it,je),n(it,lt),n(it,Xe),n(Xe,qe),n(Xe,at),n(Xe,Ue),It(Xe,e[11]),ze||(Tt=[Ce(f,"click",e[17]),Ce(Xe,"change",e[19])],ze=!0)},p(be,[ke]){ke&128&&R(d,be[7]),ke&1&&W(f,"idle",be[0]==="IDLE"),ke&1&&W(f,"transmit",be[0].includes("TRANSMIT")),ke&256&&W(c,"disconnected",!be[8]),ke&2&&C!==(C=be[1].toFixed(0)+"")&&R(m,C),ke&16&&ce(_,"width",be[4]+"%"),ke&4&&K!==(K=be[2].toFixed(2)+"")&&R(de,K),ke&32&&ce(I,"--swr-color",be[5]),ke&8&&H!==(H=be[3].toFixed(1)+"")&&R(Q,H),ke&64&&ce(B,"color",be[6]),ke&8&&ce(V,"width",be[3]/80*100+"%"),ke&64&&ce(V,"background",be[6]),ke&4096&&ue!==(ue=be[12].toFixed(1)+"")&&R(Me,ue),ke&64&&ce(re,"color",be[6]),ke&4096&&ce($,"width",be[12]/80*100+"%"),ke&64&&ce($,"background",be[6]),ke&32768&&x!==(x=be[15].toFixed(0)+"")&&R(X,x),ke&16384&&Ve!==(Ve=be[14].toFixed(1)+"")&&R(We,Ve),ke&8192&&Qe!==(Qe=be[13].toFixed(1)+"")&&R(Ze,Qe),ke&1024&&R(rt,be[10]),ke&512&&R(gt,be[9]),ke&2048&&It(Xe,be[11])},i:ge,o:ge,d(be){be&&E(l),ze=!1,nt(Tt)}}}function Nn(e,l,s){let i,o,r,f,d,v,c,p,u,w,g,h,y,k,M,C,{status:m}=l;async function F(P){try{await Oe.power.setFanMode(P)}catch(_){console.error("Failed to set fan mode:",_)}}async function O(){try{const P=u==="IDLE"?0:1;await Oe.power.setOperate(P)}catch(P){console.error("Failed to toggle operate:",P)}}const z=P=>F(P.target.value);return e.$$set=P=>{"status"in P&&s(18,m=P.status)},e.$$.update=()=>{e.$$.dirty&262144&&s(1,i=(m==null?void 0:m.power_forward)||0),e.$$.dirty&262144&&m!=null&&m.power_reflected,e.$$.dirty&262144&&s(2,o=(m==null?void 0:m.swr)||1),e.$$.dirty&262144&&s(15,r=(m==null?void 0:m.voltage)||0),e.$$.dirty&262144&&s(14,f=(m==null?void 0:m.vdd)||0),e.$$.dirty&262144&&m!=null&&m.current,e.$$.dirty&262144&&s(13,d=(m==null?void 0:m.peak_current)||0),e.$$.dirty&262144&&s(3,v=(m==null?void 0:m.temperature)||0),e.$$.dirty&262144&&s(12,c=(m==null?void 0:m.harmonic_load_temp)||0),e.$$.dirty&262144&&s(11,p=(m==null?void 0:m.fan_mode)||"CONTEST"),e.$$.dirty&262144&&s(0,u=(m==null?void 0:m.state)||"IDLE"),e.$$.dirty&262144&&s(10,w=(m==null?void 0:m.band_a)||"0"),e.$$.dirty&262144&&s(9,g=(m==null?void 0:m.band_b)||"0"),e.$$.dirty&262144&&s(8,h=(m==null?void 0:m.connected)||!1),e.$$.dirty&1&&s(7,y=u.replace("TRANSMIT_A","TRANSMIT").replace("TRANSMIT_B","TRANSMIT")),e.$$.dirty&8&&s(6,k=v<40?"#4caf50":v<60?"#ffc107":v<75?"#ff9800":"#f44336"),e.$$.dirty&4&&s(5,M=o<1.5?"#4caf50":o<2?"#ffc107":o<3?"#ff9800":"#f44336"),e.$$.dirty&2&&s(4,C=Math.min(i/2e3*100,100))},[u,i,o,v,C,M,k,y,h,g,w,p,c,d,f,r,F,O,m,z]}class Dn extends ht{constructor(l){super(),vt(this,l,Nn,In,ot,{status:18})}}function En(e){let l,s,i,o,r,f,d,v,c,p,u,w,g,h,y,k,M,C=e[0].toFixed(0)+"",m,F,O,z,P,_,A,I,U,K=e[1].toFixed(2)+"",de,ie,S,te,Y,N,B,H,Q,fe,Pe,le,J,ae,V,we,oe,re,ue,Me,Ie,Se,Ne,Ae,Fe,$,_e,ne,se=(e[11]/1e3).toFixed(3)+"",Z,ee,j,x,X,G,me,ve=(e[10]/1e3).toFixed(3)+"",Ee,Ye,Ve,We,Je,Be=e[8]===1?"OPERATE":"STANDBY",Le,$e,De,Qe,Ze,xe,Ge;return{c(){l=a("div"),s=a("div"),i=a("h2"),i.textContent="Tuner Genius XL",o=b(),r=a("div"),f=a("span"),d=T(e[12]),v=b(),c=a("span"),p=b(),u=a("div"),w=a("div"),g=a("div"),h=a("div"),y=a("span"),y.textContent="Power",k=b(),M=a("span"),m=T(C),F=T(" W"),O=b(),z=a("div"),P=a("div"),_=a("div"),A=b(),I=a("div"),U=a("div"),de=T(K),ie=b(),S=a("div"),S.textContent="SWR",te=b(),Y=a("div"),N=a("div"),B=a("div"),H=T(e[7]),Q=b(),fe=a("div"),fe.textContent="C1",Pe=b(),le=a("div"),J=a("div"),ae=T(e[6]),V=b(),we=a("div"),we.textContent="L",oe=b(),re=a("div"),ue=a("div"),Me=T(e[5]),Ie=b(),Se=a("div"),Se.textContent="C2",Ne=b(),Ae=a("div"),Fe=a("div"),$=a("div"),$.textContent="Freq A",_e=b(),ne=a("div"),Z=T(se),ee=a("span"),ee.textContent="MHz",j=b(),x=a("div"),X=a("div"),X.textContent="Freq B",G=b(),me=a("div"),Ee=T(ve),Ye=a("span"),Ye.textContent="MHz",Ve=b(),We=a("div"),Je=a("button"),Le=T(Be),$e=b(),De=a("button"),De.textContent="BYPASS",Qe=b(),Ze=a("button"),Ze.innerHTML=` + AUTO TUNE`,t(i,"class","svelte-zuda7"),t(f,"class","tuning-badge svelte-zuda7"),W(f,"tuning",e[12]==="TUNING"),t(c,"class","status-dot svelte-zuda7"),W(c,"disconnected",!e[4]),t(r,"class","header-right svelte-zuda7"),t(s,"class","card-header svelte-zuda7"),t(y,"class","power-label-inline svelte-zuda7"),t(M,"class","power-value-inline svelte-zuda7"),t(h,"class","power-header svelte-zuda7"),t(_,"class","power-bar-fill svelte-zuda7"),ce(_,"width",e[2]+"%"),t(P,"class","power-bar-bg svelte-zuda7"),t(z,"class","power-bar-container svelte-zuda7"),t(g,"class","power-section svelte-zuda7"),t(U,"class","swr-value-compact svelte-zuda7"),t(S,"class","swr-label-compact svelte-zuda7"),t(I,"class","swr-circle-compact svelte-zuda7"),ce(I,"--swr-color",e[3]),t(w,"class","power-swr-row svelte-zuda7"),t(B,"class","cap-value svelte-zuda7"),t(fe,"class","cap-label svelte-zuda7"),t(N,"class","cap-item svelte-zuda7"),t(J,"class","cap-value svelte-zuda7"),t(we,"class","cap-label svelte-zuda7"),t(le,"class","cap-item svelte-zuda7"),t(ue,"class","cap-value svelte-zuda7"),t(Se,"class","cap-label svelte-zuda7"),t(re,"class","cap-item svelte-zuda7"),t(Y,"class","capacitors svelte-zuda7"),t($,"class","freq-label svelte-zuda7"),t(ee,"class","freq-unit svelte-zuda7"),t(ne,"class","freq-value svelte-zuda7"),t(Fe,"class","freq-item svelte-zuda7"),t(X,"class","freq-label svelte-zuda7"),t(Ye,"class","freq-unit svelte-zuda7"),t(me,"class","freq-value svelte-zuda7"),t(x,"class","freq-item svelte-zuda7"),t(Ae,"class","freq-display svelte-zuda7"),t(Je,"class","control-btn operate svelte-zuda7"),W(Je,"active",e[8]===1),t(De,"class","control-btn bypass svelte-zuda7"),W(De,"active",e[9]),t(We,"class","controls svelte-zuda7"),t(Ze,"class","tune-btn svelte-zuda7"),t(u,"class","metrics svelte-zuda7"),t(l,"class","card svelte-zuda7")},m(he,Te){L(he,l,Te),n(l,s),n(s,i),n(s,o),n(s,r),n(r,f),n(f,d),n(r,v),n(r,c),n(l,p),n(l,u),n(u,w),n(w,g),n(g,h),n(h,y),n(h,k),n(h,M),n(M,m),n(M,F),n(g,O),n(g,z),n(z,P),n(P,_),n(w,A),n(w,I),n(I,U),n(U,de),n(I,ie),n(I,S),n(u,te),n(u,Y),n(Y,N),n(N,B),n(B,H),n(N,Q),n(N,fe),n(Y,Pe),n(Y,le),n(le,J),n(J,ae),n(le,V),n(le,we),n(Y,oe),n(Y,re),n(re,ue),n(ue,Me),n(re,Ie),n(re,Se),n(u,Ne),n(u,Ae),n(Ae,Fe),n(Fe,$),n(Fe,_e),n(Fe,ne),n(ne,Z),n(ne,ee),n(Ae,j),n(Ae,x),n(x,X),n(x,G),n(x,me),n(me,Ee),n(me,Ye),n(u,Ve),n(u,We),n(We,Je),n(Je,Le),n(We,$e),n(We,De),n(u,Qe),n(u,Ze),xe||(Ge=[Ce(Je,"click",e[17]),Ce(De,"click",e[18]),Ce(Ze,"click",e[13])],xe=!0)},p(he,[Te]){Te&4096&&R(d,he[12]),Te&4096&&W(f,"tuning",he[12]==="TUNING"),Te&16&&W(c,"disconnected",!he[4]),Te&1&&C!==(C=he[0].toFixed(0)+"")&&R(m,C),Te&4&&ce(_,"width",he[2]+"%"),Te&2&&K!==(K=he[1].toFixed(2)+"")&&R(de,K),Te&8&&ce(I,"--swr-color",he[3]),Te&128&&R(H,he[7]),Te&64&&R(ae,he[6]),Te&32&&R(Me,he[5]),Te&2048&&se!==(se=(he[11]/1e3).toFixed(3)+"")&&R(Z,se),Te&1024&&ve!==(ve=(he[10]/1e3).toFixed(3)+"")&&R(Ee,ve),Te&256&&Be!==(Be=he[8]===1?"OPERATE":"STANDBY")&&R(Le,Be),Te&256&&W(Je,"active",he[8]===1),Te&512&&W(De,"active",he[9])},i:ge,o:ge,d(he){he&&E(l),xe=!1,nt(Ge)}}}function Ln(e,l,s){let i,o,r,f,d,v,c,p,u,w,g,h,y,{status:k}=l;async function M(){try{await Oe.tuner.autoTune()}catch(z){console.error("Failed to tune:",z)}}async function C(z){try{await Oe.tuner.setBypass(z)}catch(P){console.error("Failed to set bypass:",P)}}async function m(z){try{await Oe.tuner.setOperate(z)}catch(P){console.error("Failed to set operate:",P)}}const F=()=>m(c===1?0:1),O=()=>C(v?0:1);return e.$$set=z=>{"status"in z&&s(16,k=z.status)},e.$$.update=()=>{e.$$.dirty&65536&&s(0,i=(k==null?void 0:k.power_forward)||0),e.$$.dirty&65536&&s(1,o=(k==null?void 0:k.swr)||1),e.$$.dirty&65536&&s(12,r=(k==null?void 0:k.tuning_status)||"READY"),e.$$.dirty&65536&&s(11,f=(k==null?void 0:k.frequency_a)||0),e.$$.dirty&65536&&s(10,d=(k==null?void 0:k.frequency_b)||0),e.$$.dirty&65536&&s(9,v=(k==null?void 0:k.bypass)||!1),e.$$.dirty&65536&&s(8,c=(k==null?void 0:k.state)||0),e.$$.dirty&65536&&s(7,p=(k==null?void 0:k.c1)||0),e.$$.dirty&65536&&s(6,u=(k==null?void 0:k.l)||0),e.$$.dirty&65536&&s(5,w=(k==null?void 0:k.c2)||0),e.$$.dirty&65536&&s(4,g=(k==null?void 0:k.connected)||!1),e.$$.dirty&2&&s(3,h=o<1.5?"#4caf50":o<2?"#ffc107":o<3?"#ff9800":"#f44336"),e.$$.dirty&1&&s(2,y=Math.min(i/2e3*100,100))},[i,o,y,h,g,w,u,p,c,v,d,f,r,M,C,m,k,F,O]}class Rn extends ht{constructor(l){super(),vt(this,l,Ln,En,ot,{status:16})}}function Pl(e,l,s){const i=e.slice();i[14]=l[s];const o=i[1].tx&&i[1].tx_ant===i[14].number;i[15]=o;const r=i[0].tx&&i[0].tx_ant===i[14].number;i[16]=r;const f=!i[1].tx&&i[1].rx_ant===i[14].number;i[17]=f;const d=!i[0].tx&&i[0].rx_ant===i[14].number;i[18]=d;const v=i[15]||i[16];i[19]=v;const c=i[17]||i[15];i[20]=c;const p=i[18]||i[16];return i[21]=p,i}function Ol(e){let l,s,i=e[14].name+"",o,r,f,d,v,c,p,u,w;function g(){return e[11](e[14])}function h(){return e[12](e[14])}return{c(){l=a("div"),s=a("div"),o=T(i),r=b(),f=a("div"),d=a("button"),d.textContent="A",v=b(),c=a("button"),c.textContent="B",p=b(),t(s,"class","antenna-name svelte-vlabwb"),t(d,"class","port-btn svelte-vlabwb"),W(d,"active",e[20]),t(c,"class","port-btn svelte-vlabwb"),W(c,"active",e[21]),t(f,"class","antenna-ports svelte-vlabwb"),t(l,"class","antenna-card svelte-vlabwb"),W(l,"tx",e[19]),W(l,"active-a",e[20]),W(l,"active-b",e[21])},m(y,k){L(y,l,k),n(l,s),n(s,o),n(l,r),n(l,f),n(f,d),n(f,v),n(f,c),n(l,p),u||(w=[Ce(d,"click",g),Ce(c,"click",h)],u=!0)},p(y,k){e=y,k&16&&i!==(i=e[14].name+"")&&R(o,i),k&18&&W(d,"active",e[20]),k&17&&W(c,"active",e[21]),k&19&&W(l,"tx",e[19]),k&18&&W(l,"active-a",e[20]),k&17&&W(l,"active-b",e[21])},d(y){y&&E(l),u=!1,nt(w)}}}function Wn(e){let l,s,i,o,r,f,d,v,c,p,u=(e[1].source||"FLEX")+"",w,g,h,y,k=(e[0].source||"FLEX")+"",M,C,m,F,O,z,P,_,A,I,U,K,de,ie,S,te,Y=ut(e[4]),N=[];for(let B=0;B🔄 + REBOOT`,t(i,"class","svelte-vlabwb"),t(r,"class","status-dot svelte-vlabwb"),W(r,"disconnected",!e[5]),t(s,"class","card-header svelte-vlabwb"),t(p,"class","source-label svelte-vlabwb"),t(c,"class","source-item svelte-vlabwb"),t(y,"class","source-label svelte-vlabwb"),t(h,"class","source-item svelte-vlabwb"),t(v,"class","sources svelte-vlabwb"),t(O,"class","band-value svelte-vlabwb"),t(F,"class","band-item svelte-vlabwb"),t(A,"class","band-value svelte-vlabwb"),t(_,"class","band-item svelte-vlabwb"),t(m,"class","bands svelte-vlabwb"),t(K,"class","antennas svelte-vlabwb"),t(ie,"class","reboot-btn svelte-vlabwb"),t(d,"class","metrics svelte-vlabwb"),t(l,"class","card svelte-vlabwb")},m(B,H){L(B,l,H),n(l,s),n(s,i),n(s,o),n(s,r),n(l,f),n(l,d),n(d,v),n(v,c),n(c,p),n(p,w),n(v,g),n(v,h),n(h,y),n(y,M),n(d,C),n(d,m),n(m,F),n(F,O),n(O,z),n(m,P),n(m,_),n(_,A),n(A,I),n(d,U),n(d,K);for(let Q=0;Qu(1,M.number),k=M=>u(2,M.number);return e.$$set=M=>{"status"in M&&s(8,c=M.status)},e.$$.update=()=>{e.$$.dirty&256&&s(5,i=(c==null?void 0:c.connected)||!1),e.$$.dirty&256&&s(1,o=(c==null?void 0:c.port_a)||{}),e.$$.dirty&256&&s(0,r=(c==null?void 0:c.port_b)||{}),e.$$.dirty&256&&s(4,f=(c==null?void 0:c.antennas)||[]),e.$$.dirty&2&&s(3,d=p[o.band]||"None"),e.$$.dirty&1&&s(2,v=p[r.band]||"None"),e.$$.dirty&1795&&c&&(o.tx!==w||r.tx!==g)&&(console.log("AntennaGenius TX state changed:",{portA_tx:o.tx,portB_tx:r.tx,portA_tx_ant:o.tx_ant,portB_tx_ant:r.tx_ant}),s(9,w=o.tx),s(10,g=r.tx))},[r,o,v,d,f,i,u,h,c,w,g,y,k]}class Gn extends ht{constructor(l){super(),vt(this,l,Bn,Wn,ot,{status:8})}}function Al(e,l,s){const i=e.slice();i[16]=l[s];const o=150+125*Math.sin(i[16]*Math.PI/180);i[17]=o;const r=150-125*Math.cos(i[16]*Math.PI/180);return i[18]=r,i}function Il(e){let l,s,i,o;return{c(){l=a("span"),s=T("→ "),i=T(e[0]),o=T("°"),t(l,"class","target-indicator svelte-3omzwr")},m(r,f){L(r,l,f),n(l,s),n(l,i),n(l,o)},p(r,f){f&1&&R(i,r[0])},d(r){r&&E(l)}}}function Nl(e){let l,s,i,o,r;return{c(){l=D("g"),s=D("line"),i=D("g"),o=D("polygon"),t(s,"x1","0"),t(s,"y1","0"),t(s,"x2","0"),t(s,"y2","-125"),t(s,"stroke","rgba(255, 255, 255, 0.3)"),t(s,"stroke-width","2"),t(s,"stroke-dasharray","5,5"),t(s,"opacity","0.6"),t(o,"points","0,-8 -5,5 5,5"),t(o,"fill","rgba(255, 255, 255, 0.4)"),t(o,"stroke","rgba(255, 255, 255, 0.5)"),t(o,"stroke-width","1"),t(i,"transform","translate(0, -125)"),t(l,"transform",r="rotate("+e[3]+")")},m(f,d){L(f,l,d),n(l,s),n(l,i),n(i,o)},p(f,d){d&8&&r!==(r="rotate("+f[3]+")")&&t(l,"transform",r)},d(f){f&&E(l)}}}function Dl(e){let l,s,i,o,r;return{c(){l=D("path"),s=D("line"),i=D("line"),o=D("g"),r=D("polygon"),t(l,"d","M 0,0 L "+-Math.sin(15*Math.PI/180)*130+","+-Math.cos(15*Math.PI/180)*130+` \r + A 130,130 0 0,1 `+Math.sin(15*Math.PI/180)*130+","+-Math.cos(15*Math.PI/180)*130+" Z"),t(l,"fill","url(#beamGradient)"),t(l,"opacity","0.85"),t(s,"x1","0"),t(s,"y1","0"),t(s,"x2",-Math.sin(15*Math.PI/180)*130),t(s,"y2",-Math.cos(15*Math.PI/180)*130),t(s,"stroke","#4fc3f7"),t(s,"stroke-width","2"),t(s,"opacity","0.9"),t(i,"x1","0"),t(i,"y1","0"),t(i,"x2",Math.sin(15*Math.PI/180)*130),t(i,"y2",-Math.cos(15*Math.PI/180)*130),t(i,"stroke","#4fc3f7"),t(i,"stroke-width","2"),t(i,"opacity","0.9"),t(r,"points","0,-20 -8,5 0,0 8,5"),t(r,"fill","#4fc3f7"),t(r,"stroke","#0288d1"),t(r,"stroke-width","2"),ce(r,"filter","drop-shadow(0 0 10px rgba(79, 195, 247, 1))"),t(o,"transform","translate(0, -110)")},m(f,d){L(f,l,d),L(f,s,d),L(f,i,d),L(f,o,d),n(o,r)},p:ge,d(f){f&&(E(l),E(s),E(i),E(o))}}}function El(e){let l,s,i,o,r;return{c(){l=D("path"),s=D("line"),i=D("line"),o=D("g"),r=D("polygon"),t(l,"d","M 0,0 L "+-Math.sin(15*Math.PI/180)*130+","+Math.cos(15*Math.PI/180)*130+` \r + A 130,130 0 0,0 `+Math.sin(15*Math.PI/180)*130+","+Math.cos(15*Math.PI/180)*130+" Z"),t(l,"fill","url(#beamGradient)"),t(l,"opacity","0.85"),t(s,"x1","0"),t(s,"y1","0"),t(s,"x2",-Math.sin(15*Math.PI/180)*130),t(s,"y2",Math.cos(15*Math.PI/180)*130),t(s,"stroke","#4fc3f7"),t(s,"stroke-width","2"),t(s,"opacity","0.9"),t(i,"x1","0"),t(i,"y1","0"),t(i,"x2",Math.sin(15*Math.PI/180)*130),t(i,"y2",Math.cos(15*Math.PI/180)*130),t(i,"stroke","#4fc3f7"),t(i,"stroke-width","2"),t(i,"opacity","0.9"),t(r,"points","0,20 -8,-5 0,0 8,-5"),t(r,"fill","#4fc3f7"),t(r,"stroke","#0288d1"),t(r,"stroke-width","2"),ce(r,"filter","drop-shadow(0 0 10px rgba(79, 195, 247, 1))"),t(o,"transform","translate(0, 110)")},m(f,d){L(f,l,d),L(f,s,d),L(f,i,d),L(f,o,d),n(o,r)},p:ge,d(f){f&&(E(l),E(s),E(i),E(o))}}}function Ll(e){let l,s,i,o,r,f,d,v,c,p;return{c(){l=D("path"),s=D("path"),i=D("line"),o=D("line"),r=D("line"),f=D("line"),d=D("g"),v=D("polygon"),c=D("g"),p=D("polygon"),t(l,"d","M 0,0 L "+-Math.sin(15*Math.PI/180)*130+","+-Math.cos(15*Math.PI/180)*130+` \r + A 130,130 0 0,1 `+Math.sin(15*Math.PI/180)*130+","+-Math.cos(15*Math.PI/180)*130+" Z"),t(l,"fill","url(#beamGradient)"),t(l,"opacity","0.7"),t(s,"d","M 0,0 L "+-Math.sin(15*Math.PI/180)*130+","+Math.cos(15*Math.PI/180)*130+` \r + A 130,130 0 0,0 `+Math.sin(15*Math.PI/180)*130+","+Math.cos(15*Math.PI/180)*130+" Z"),t(s,"fill","url(#beamGradient)"),t(s,"opacity","0.7"),t(i,"x1","0"),t(i,"y1","0"),t(i,"x2",-Math.sin(15*Math.PI/180)*130),t(i,"y2",-Math.cos(15*Math.PI/180)*130),t(i,"stroke","#4fc3f7"),t(i,"stroke-width","2"),t(i,"opacity","0.8"),t(o,"x1","0"),t(o,"y1","0"),t(o,"x2",Math.sin(15*Math.PI/180)*130),t(o,"y2",-Math.cos(15*Math.PI/180)*130),t(o,"stroke","#4fc3f7"),t(o,"stroke-width","2"),t(o,"opacity","0.8"),t(r,"x1","0"),t(r,"y1","0"),t(r,"x2",-Math.sin(15*Math.PI/180)*130),t(r,"y2",Math.cos(15*Math.PI/180)*130),t(r,"stroke","#4fc3f7"),t(r,"stroke-width","2"),t(r,"opacity","0.8"),t(f,"x1","0"),t(f,"y1","0"),t(f,"x2",Math.sin(15*Math.PI/180)*130),t(f,"y2",Math.cos(15*Math.PI/180)*130),t(f,"stroke","#4fc3f7"),t(f,"stroke-width","2"),t(f,"opacity","0.8"),t(v,"points","0,-20 -8,5 0,0 8,5"),t(v,"fill","#4fc3f7"),t(v,"stroke","#0288d1"),t(v,"stroke-width","2"),ce(v,"filter","drop-shadow(0 0 10px rgba(79, 195, 247, 1))"),t(d,"transform","translate(0, -110)"),t(p,"points","0,20 -8,-5 0,0 8,-5"),t(p,"fill","#4fc3f7"),t(p,"stroke","#0288d1"),t(p,"stroke-width","2"),ce(p,"filter","drop-shadow(0 0 10px rgba(79, 195, 247, 1))"),t(c,"transform","translate(0, 110)")},m(u,w){L(u,l,w),L(u,s,w),L(u,i,w),L(u,o,w),L(u,r,w),L(u,f,w),L(u,d,w),n(d,v),L(u,c,w),n(c,p)},p:ge,d(u){u&&(E(l),E(s),E(i),E(o),E(r),E(f),E(d),E(c))}}}function Rl(e){let l,s,i,o,r,f;return{c(){l=D("g"),s=D("line"),i=D("g"),o=D("polygon"),r=D("animate"),t(s,"x1","0"),t(s,"y1","0"),t(s,"x2","0"),t(s,"y2","-135"),t(s,"stroke","#ffc107"),t(s,"stroke-width","3"),t(s,"stroke-dasharray","8,4"),t(s,"opacity","0.9"),t(r,"attributeName","opacity"),t(r,"values","0.8;1;0.8"),t(r,"dur","1s"),t(r,"repeatCount","indefinite"),t(o,"points","0,-12 -8,6 0,2 8,6"),t(o,"fill","#ffc107"),t(o,"stroke","#ff9800"),t(o,"stroke-width","1.5"),ce(o,"filter","drop-shadow(0 0 10px rgba(255, 193, 7, 0.8))"),t(i,"transform","translate(0, -135)"),t(l,"transform",f="rotate("+e[0]+")")},m(d,v){L(d,l,v),n(l,s),n(l,i),n(i,o),n(o,r)},p(d,v){v&1&&f!==(f="rotate("+d[0]+")")&&t(l,"transform",f)},d(d){d&&E(l)}}}function Wl(e){let l,s,i;return{c(){l=D("text"),s=T(e[16]),i=T("°"),t(l,"x",e[17]),t(l,"y",e[18]),t(l,"text-anchor","middle"),t(l,"dominant-baseline","middle"),t(l,"class","degree-label svelte-3omzwr")},m(o,r){L(o,l,r),n(l,s),n(l,i)},p:ge,d(o){o&&E(l)}}}function Bl(e){let l;return{c(){l=a("div"),l.innerHTML='
Physical antenna
Radiation pattern
',t(l,"class","map-legend svelte-3omzwr")},m(s,i){L(s,l,i)},d(s){s&&E(l)}}}function jn(e){let l,s,i,o,r,f,d,v,c,p,u,w,g,h,y,k,M,C,m,F,O,z,P,_,A,I,U,K,de,ie,S,te,Y,N,B,H,Q,fe,Pe,le,J,ae,V,we,oe,re,ue,Me,Ie,Se,Ne,Ae,Fe,$=e[2]&&e[0]!==null&&Il(e),_e=(e[4]===1||e[4]===2)&&Nl(e),ne=e[4]===0&&Dl(),se=e[4]===1&&El(),Z=e[4]===2&&Ll(),ee=e[2]&&e[0]!==null&&Rl(e),j=ut([45,135,225,315]),x=[];for(let G=0;G<4;G+=1)x[G]=Wl(Al(e,j,G));let X=(e[4]===1||e[4]===2)&&Bl();return{c(){l=a("div"),s=a("div"),i=a("h2"),i.textContent="Rotator Genius",o=b(),r=a("span"),f=b(),d=a("div"),v=a("div"),c=a("div"),p=a("div"),p.textContent="CURRENT HEADING",u=b(),w=a("div"),g=T(e[3]),h=T(`°\r + `),$&&$.c(),y=b(),k=a("div"),M=a("button"),M.textContent="↺",C=b(),m=a("button"),m.textContent="■",F=b(),O=a("button"),O.textContent="↻",z=b(),P=a("div"),_=D("svg"),A=D("defs"),I=D("radialGradient"),U=D("stop"),K=D("stop"),de=D("circle"),ie=D("circle"),S=D("circle"),te=D("circle"),Y=D("g"),_e&&_e.c(),N=D("g"),ne&&ne.c(),B=At(),se&&se.c(),H=At(),Z&&Z.c(),ee&&ee.c(),fe=D("circle"),Pe=D("animate"),le=D("circle"),J=D("animate"),ae=D("animate"),V=D("text"),we=T("N"),oe=D("text"),re=T("E"),ue=D("text"),Me=T("S"),Ie=D("text"),Se=T("W");for(let G=0;G<4;G+=1)x[G].c();Ne=b(),X&&X.c(),t(i,"class","svelte-3omzwr"),t(r,"class","status-dot svelte-3omzwr"),W(r,"disconnected",!e[1]),t(s,"class","card-header svelte-3omzwr"),t(p,"class","heading-label svelte-3omzwr"),t(w,"class","heading-value svelte-3omzwr"),t(c,"class","heading-display-compact svelte-3omzwr"),t(M,"class","btn-mini ccw svelte-3omzwr"),t(M,"title","Rotate Counter-Clockwise"),t(m,"class","btn-mini stop svelte-3omzwr"),t(m,"title","Stop Rotation"),t(O,"class","btn-mini cw svelte-3omzwr"),t(O,"title","Rotate Clockwise"),t(k,"class","controls-compact svelte-3omzwr"),t(v,"class","heading-controls-row svelte-3omzwr"),t(U,"offset","0%"),ce(U,"stop-color","rgba(79, 195, 247, 0.7)"),ce(U,"stop-opacity","1"),t(K,"offset","100%"),ce(K,"stop-color","rgba(79, 195, 247, 0)"),ce(K,"stop-opacity","0"),t(I,"id","beamGradient"),t(de,"cx","150"),t(de,"cy","150"),t(de,"r","140"),t(de,"fill","rgba(30, 64, 175, 0.15)"),t(de,"stroke","rgba(79, 195, 247, 0.4)"),t(de,"stroke-width","2"),t(ie,"cx","150"),t(ie,"cy","150"),t(ie,"r","105"),t(ie,"fill","none"),t(ie,"stroke","rgba(79,195,247,0.2)"),t(ie,"stroke-width","1"),t(ie,"stroke-dasharray","3,3"),t(S,"cx","150"),t(S,"cy","150"),t(S,"r","70"),t(S,"fill","none"),t(S,"stroke","rgba(79,195,247,0.2)"),t(S,"stroke-width","1"),t(S,"stroke-dasharray","3,3"),t(te,"cx","150"),t(te,"cy","150"),t(te,"r","35"),t(te,"fill","none"),t(te,"stroke","rgba(79,195,247,0.2)"),t(te,"stroke-width","1"),t(te,"stroke-dasharray","3,3"),t(N,"transform",Q="rotate("+e[3]+")"),t(Pe,"attributeName","r"),t(Pe,"values","5;7;5"),t(Pe,"dur","2s"),t(Pe,"repeatCount","indefinite"),t(fe,"cx","0"),t(fe,"cy","0"),t(fe,"r","5"),t(fe,"fill","#f44336"),t(fe,"stroke","#fff"),t(fe,"stroke-width","2"),t(J,"attributeName","r"),t(J,"values","10;16;10"),t(J,"dur","2s"),t(J,"repeatCount","indefinite"),t(ae,"attributeName","opacity"),t(ae,"values","0.5;0;0.5"),t(ae,"dur","2s"),t(ae,"repeatCount","indefinite"),t(le,"cx","0"),t(le,"cy","0"),t(le,"r","10"),t(le,"fill","none"),t(le,"stroke","#f44336"),t(le,"stroke-width","1.5"),t(le,"opacity","0.5"),t(Y,"transform","translate(150, 150)"),t(V,"x","150"),t(V,"y","20"),t(V,"text-anchor","middle"),t(V,"class","cardinal svelte-3omzwr"),t(oe,"x","280"),t(oe,"y","155"),t(oe,"text-anchor","middle"),t(oe,"class","cardinal svelte-3omzwr"),t(ue,"x","150"),t(ue,"y","285"),t(ue,"text-anchor","middle"),t(ue,"class","cardinal svelte-3omzwr"),t(Ie,"x","20"),t(Ie,"y","155"),t(Ie,"text-anchor","middle"),t(Ie,"class","cardinal svelte-3omzwr"),t(_,"viewBox","0 0 300 300"),t(_,"class","map-svg clickable-compass svelte-3omzwr"),t(_,"role","button"),t(_,"tabindex","0"),t(_,"aria-label","Click to rotate antenna to direction"),t(P,"class","map-container svelte-3omzwr"),t(d,"class","metrics svelte-3omzwr"),t(l,"class","card svelte-3omzwr")},m(G,me){L(G,l,me),n(l,s),n(s,i),n(s,o),n(s,r),n(l,f),n(l,d),n(d,v),n(v,c),n(c,p),n(c,u),n(c,w),n(w,g),n(w,h),$&&$.m(w,null),n(v,y),n(v,k),n(k,M),n(k,C),n(k,m),n(k,F),n(k,O),n(d,z),n(d,P),n(P,_),n(_,A),n(A,I),n(I,U),n(I,K),n(_,de),n(_,ie),n(_,S),n(_,te),n(_,Y),_e&&_e.m(Y,null),n(Y,N),ne&&ne.m(N,null),n(N,B),se&&se.m(N,null),n(N,H),Z&&Z.m(N,null),ee&&ee.m(Y,null),n(Y,fe),n(fe,Pe),n(Y,le),n(le,J),n(le,ae),n(_,V),n(V,we),n(_,oe),n(oe,re),n(_,ue),n(ue,Me),n(_,Ie),n(Ie,Se);for(let ve=0;ve<4;ve+=1)x[ve]&&x[ve].m(_,null);n(d,Ne),X&&X.m(d,null),Ae||(Fe=[Ce(M,"click",e[6]),Ce(m,"click",e[7]),Ce(O,"click",e[5]),Ce(_,"click",e[8]),Ce(_,"keydown",e[15])],Ae=!0)},p(G,[me]){if(me&2&&W(r,"disconnected",!G[1]),me&8&&R(g,G[3]),G[2]&&G[0]!==null?$?$.p(G,me):($=Il(G),$.c(),$.m(w,null)):$&&($.d(1),$=null),G[4]===1||G[4]===2?_e?_e.p(G,me):(_e=Nl(G),_e.c(),_e.m(Y,N)):_e&&(_e.d(1),_e=null),G[4]===0?ne?ne.p(G,me):(ne=Dl(),ne.c(),ne.m(N,B)):ne&&(ne.d(1),ne=null),G[4]===1?se?se.p(G,me):(se=El(),se.c(),se.m(N,H)):se&&(se.d(1),se=null),G[4]===2?Z?Z.p(G,me):(Z=Ll(),Z.c(),Z.m(N,null)):Z&&(Z.d(1),Z=null),me&8&&Q!==(Q="rotate("+G[3]+")")&&t(N,"transform",Q),G[2]&&G[0]!==null?ee?ee.p(G,me):(ee=Rl(G),ee.c(),ee.m(Y,fe)):ee&&(ee.d(1),ee=null),me&0){j=ut([45,135,225,315]);let ve;for(ve=0;ve<4;ve+=1){const Ee=Al(G,j,ve);x[ve]?x[ve].p(Ee,me):(x[ve]=Wl(Ee),x[ve].c(),x[ve].m(_,null))}for(;ve<4;ve+=1)x[ve].d(1)}G[4]===1||G[4]===2?X||(X=Bl(),X.c(),X.m(d,null)):X&&(X.d(1),X=null)},i:ge,o:ge,d(G){G&&E(l),$&&$.d(),_e&&_e.d(),ne&&ne.d(),se&&se.d(),Z&&Z.d(),ee&&ee.d(),Dt(x,G),X&&X.d(),Ae=!1,nt(Fe)}}}function qn(e,l,s){let i,o,r,f,d,v,{status:c}=l,{ultrabeam:p=null}=l,u=null,w=!1,g=null;async function h(){try{await Oe.rotator.rotateCW()}catch(m){console.error("Failed to rotate CW:",m)}}async function y(){try{await Oe.rotator.rotateCCW()}catch(m){console.error("Failed to rotate CCW:",m)}}async function k(){try{s(12,g=null),await Oe.rotator.stop()}catch(m){console.error("Failed to stop:",m)}}async function M(m){const O=m.currentTarget.getBoundingClientRect(),z=O.width/2,P=O.height/2,_=m.clientX-O.left-z,A=m.clientY-O.top-P;let I=Math.atan2(_,-A)*(180/Math.PI);I<0&&(I+=360);const K=(Math.round(I/5)*5+360)%360;try{await Oe.rotator.setHeading(K),s(12,g=K)}catch(de){console.error("Failed to set heading:",de)}}const C=m=>m.key==="Enter"&&M(m);return e.$$set=m=>{"status"in m&&s(9,c=m.status),"ultrabeam"in m&&s(10,p=m.ultrabeam)},e.$$.update=()=>{if(e.$$.dirty&1024&&s(4,i=(p==null?void 0:p.direction)??0),e.$$.dirty&2560&&(c==null?void 0:c.heading)!==void 0&&(c==null?void 0:c.heading)!==null){const m=c.heading;u===null?(s(11,u=m),console.log(` ✓ First load, set to ${u}°`)):m===0&&u>10&&u<350?console.log(` ✗ IGNORED glitch jump from ${u}° to 0°`):s(11,u=m)}if(e.$$.dirty&2048&&s(3,o=u!==null?u:0),e.$$.dirty&512&&s(1,w=(c==null?void 0:c.connected)||!1),e.$$.dirty&512&&s(13,r=(c==null?void 0:c.target_heading)??null),e.$$.dirty&10240&&s(14,f=r!==null&&u!==null&&(()=>{const m=Math.abs(r-u);return Math.min(m,360-m)>2})()),e.$$.dirty&6144&&g!==null&&u!==null){const m=Math.abs(u-g);Math.min(m,360-m)<3&&s(12,g=null)}e.$$.dirty&28672&&s(0,d=g??(f?r:null)),e.$$.dirty&2049&&s(2,v=d!==null&&u!==null&&(()=>{const m=Math.abs(d-u);return Math.min(m,360-m)>2})())},[d,w,v,o,i,h,y,k,M,c,p,u,g,r,f,C]}class Un extends ht{constructor(l){super(),vt(this,l,qn,jn,ot,{status:9,ultrabeam:10})}}function Gl(e,l,s){const i=e.slice();return i[35]=l[s],i}function jl(e){let l,s=e[35].label+"",i;return{c(){l=a("option"),i=T(s),l.__value=e[35].value,Pt(l,l.__value)},m(o,r){L(o,l,r),n(l,i)},p:ge,d(o){o&&E(l)}}}function ql(e){let l,s,i,o,r,f,d,v,c,p=e[6].toFixed(0)+"",u,w;return{c(){l=a("div"),s=a("h3"),s.textContent="Motors Moving...",i=b(),o=a("div"),r=a("div"),f=b(),d=a("div"),v=T(e[0]),c=T(" / 60 ("),u=T(p),w=T("%)"),t(s,"class","svelte-dk3bqi"),t(r,"class","progress-fill svelte-dk3bqi"),ce(r,"width",e[6]+"%"),t(o,"class","progress-bar svelte-dk3bqi"),t(d,"class","progress-text svelte-dk3bqi"),t(l,"class","progress-section svelte-dk3bqi")},m(g,h){L(g,l,h),n(l,s),n(l,i),n(l,o),n(o,r),n(l,f),n(l,d),n(d,v),n(d,c),n(d,u),n(d,w)},p(g,h){h[0]&64&&ce(r,"width",g[6]+"%"),h[0]&1&&R(v,g[0]),h[0]&64&&p!==(p=g[6].toFixed(0)+"")&&R(u,p)},d(g){g&&E(l)}}}function Jn(e){let l,s,i,o,r,f,d,v,c,p,u,w,g,h=(e[1]/1e3).toFixed(3)+"",y,k,M,C,m,F,O,z,P,_,A,I,U,K=e[10][e[2]]+"",de,ie,S,te,Y,N,B,H,Q,fe,Pe,le,J,ae,V,we,oe,re,ue,Me,Ie,Se,Ne,Ae,Fe,$,_e,ne,se=ut(e[11]),Z=[];for(let j=0;j0&&ql(e);return{c(){l=a("div"),s=a("div"),i=a("h2"),i.textContent="Ultrabeam VL2.3",o=b(),r=a("div"),f=a("span"),d=b(),v=a("div"),c=a("div"),p=a("div"),u=a("div"),u.textContent="Frequency",w=b(),g=a("div"),y=T(h),k=T(" MHz"),M=b(),C=a("div"),m=a("div"),m.textContent="Band",F=b(),O=a("div"),z=T(e[7]),P=b(),_=a("div"),A=a("div"),A.textContent="Direction",I=b(),U=a("div"),de=T(K),ie=b(),S=a("div"),te=a("h3"),te.textContent="Auto Tracking",Y=b(),N=a("div"),B=a("label"),H=a("input"),Q=b(),fe=a("span"),fe.textContent="Enable Auto-Track from Tuner",Pe=b(),le=a("div"),J=a("label"),J.textContent="Threshold:",ae=b(),V=a("select");for(let j=0;j↓ + Retract Elements`,t(i,"class","svelte-dk3bqi"),t(f,"class","status-dot svelte-dk3bqi"),W(f,"disconnected",!e[9]),t(r,"class","header-right svelte-dk3bqi"),t(s,"class","card-header svelte-dk3bqi"),t(u,"class","status-label svelte-dk3bqi"),t(g,"class","status-value freq svelte-dk3bqi"),t(p,"class","status-item svelte-dk3bqi"),t(m,"class","status-label svelte-dk3bqi"),t(O,"class","status-value band svelte-dk3bqi"),t(C,"class","status-item svelte-dk3bqi"),t(A,"class","status-label svelte-dk3bqi"),t(U,"class","status-value direction svelte-dk3bqi"),t(_,"class","status-item svelte-dk3bqi"),t(c,"class","status-grid svelte-dk3bqi"),t(te,"class","svelte-dk3bqi"),t(H,"type","checkbox"),t(H,"class","svelte-dk3bqi"),t(B,"class","toggle-label svelte-dk3bqi"),t(J,"for","threshold-select"),t(J,"class","svelte-dk3bqi"),t(V,"id","threshold-select"),e[4]===void 0&&Nt(()=>e[22].call(V)),t(le,"class","threshold-group svelte-dk3bqi"),t(N,"class","auto-track-controls svelte-dk3bqi"),t(re,"class","dir-btn svelte-dk3bqi"),W(re,"active",e[5]===0),t(Me,"class","dir-btn svelte-dk3bqi"),W(Me,"active",e[5]===1),t(Se,"class","dir-btn svelte-dk3bqi"),W(Se,"active",e[5]===2),t(oe,"class","direction-buttons svelte-dk3bqi"),t(S,"class","control-section compact svelte-dk3bqi"),t($,"class","btn-danger"),t(Fe,"class","actions svelte-dk3bqi"),t(v,"class","metrics svelte-dk3bqi"),t(l,"class","card svelte-dk3bqi")},m(j,x){L(j,l,x),n(l,s),n(s,i),n(s,o),n(s,r),n(r,f),n(l,d),n(l,v),n(v,c),n(c,p),n(p,u),n(p,w),n(p,g),n(g,y),n(g,k),n(c,M),n(c,C),n(C,m),n(C,F),n(C,O),n(O,z),n(c,P),n(c,_),n(_,A),n(_,I),n(_,U),n(U,de),n(v,ie),n(v,S),n(S,te),n(S,Y),n(S,N),n(N,B),n(B,H),H.checked=e[3],n(B,Q),n(B,fe),n(N,Pe),n(N,le),n(le,J),n(le,ae),n(le,V);for(let X=0;X0?ee?ee.p(j,x):(ee=ql(j),ee.c(),ee.m(v,Ae)):ee&&(ee.d(1),ee=null)},i:ge,o:ge,d(j){j&&E(l),Dt(Z,j),ee&&ee.d(),_e=!1,nt(ne)}}}function Xn(e,l,s){let i,o,r,f,d,v,c,p,u,w,g,{status:h}=l,{flexradio:y=null}=l;const k=["6M","10M","12M","15M","17M","20M","30M","40M"];function M(S,te){return te>=0&&te<=7?k[te]:S>=7e3&&S<=7300?"40M":S>=10100&&S<=10150?"30M":S>=14e3&&S<=14350?"20M":S>=18068&&S<=18168?"17M":S>=21e3&&S<=21450?"15M":S>=24890&&S<=24990?"12M":S>=28e3&&S<=29700?"10M":S>=5e4&&S<=54e3?"6M":"Unknown"}const C=["Normal","180°","Bi-Dir"],m=[{value:25,label:"25 kHz"},{value:50,label:"50 kHz"},{value:100,label:"100 kHz"}];let F=!0,O=25,z=0;async function P(){if(o!==0)try{await Oe.ultrabeam.setFrequency(o,z),await Oe.ultrabeam.setDirection(z)}catch(S){console.log("Direction change sent (may show code 30 if busy):",S)}}async function _(){try{await Oe.ultrabeam.setAutoTrack(F,O)}catch(S){console.error("Failed to update auto-track:",S)}}async function A(){if(confirm("Retract all antenna elements?"))try{await Oe.ultrabeam.retract()}catch(S){console.error("Failed to retract:",S)}}function I(){F=this.checked,s(3,F)}function U(){O=tn(this),s(4,O),s(11,m)}const K=()=>{s(5,z=0),P()},de=()=>{s(5,z=1),P()},ie=()=>{s(5,z=2),P()};return e.$$set=S=>{"status"in S&&s(15,h=S.status),"flexradio"in S&&s(16,y=S.flexradio)},e.$$.update=()=>{e.$$.dirty[0]&32768&&s(9,i=(h==null?void 0:h.connected)||!1),e.$$.dirty[0]&32768&&s(1,o=(h==null?void 0:h.frequency)||0),e.$$.dirty[0]&32768&&s(18,r=(h==null?void 0:h.band)||0),e.$$.dirty[0]&32768&&s(2,f=(h==null?void 0:h.direction)||0),e.$$.dirty[0]&32768&&s(8,d=(h==null?void 0:h.motors_moving)||0),e.$$.dirty[0]&32768&&s(17,v=(h==null?void 0:h.progress_total)||0),e.$$.dirty[0]&32768&&s(0,c=(h==null?void 0:h.progress_current)||0),e.$$.dirty[0]&32768&&h!=null&&h.element_lengths,e.$$.dirty[0]&32768&&h&&`${h.firmware_major}${h.firmware_minor}`,e.$$.dirty[0]&65536&&s(20,p=(y==null?void 0:y.connected)||!1),e.$$.dirty[0]&65536&&s(19,u=(y==null?void 0:y.interlock_state)||null),e.$$.dirty[0]&524288,e.$$.dirty[0]&1638400&&y&&console.log("FlexRadio data:",{connected:y.connected,interlock_state:y.interlock_state,interlockConnected:p,interlockState:u}),e.$$.dirty[0]&262146&&s(7,w=M(o,r)),e.$$.dirty[0]&4&&s(5,z=f),e.$$.dirty[0]&262144,e.$$.dirty[0]&131073&&s(6,g=v>0?c/60*100:0)},[c,o,f,F,O,z,g,w,d,i,C,m,P,_,A,h,y,v,r,u,p,I,U,K,de,ie]}class Yn extends ht{constructor(l){super(),vt(this,l,Xn,Jn,ot,{status:15,flexradio:16},null,[-1,-1])}}function Vn(e){var Tt,be,ke,Ut,Jt,Xt,Yt,Vt,Zt,Kt,Ht;let l,s,i,o,r,f,d,v,c,p,u=e[1]?"Connected":"Disconnected",w,g,h,y,k,M,C,m=e[7].sfi+"",F,O,z,P,_,A=e[7].sunspots+"",I,U,K,de,ie,S=e[7].a_index+"",te,Y,N,B,H,Q=e[7].k_index+"",fe,Pe,le,J,ae,V=e[7].geomag+"",we,oe,re,ue,Me,Ie,Se=e[6].wind_speed.toFixed(1)+"",Ne,Ae,Fe,$,_e,ne=e[6].wind_gust.toFixed(1)+"",se,Z,ee,j,x,X=e[6].temp.toFixed(1)+"",G,me,ve,Ee,Ye,Ve=e[6].feels_like.toFixed(1)+"",We,Je,Be,Le,$e,De=Ul(e[2])+"",Qe,Ze,xe,Ge=e[2].toLocaleDateString()+"",he,Te,et,pt,rt,st,Re,Ke,Mt,He,gt,tt,it,je,lt,Xe,qe,at,Ue,ze;return et=new Fn({props:{flexradio:(Tt=e[0])==null?void 0:Tt.flexradio,weather:(be=e[0])==null?void 0:be.weather,latitude:e[4],longitude:e[5],windWarningThreshold:30,gustWarningThreshold:50}}),Ke=new An({props:{status:(ke=e[0])==null?void 0:ke.webswitch}}),He=new Dn({props:{status:(Ut=e[0])==null?void 0:Ut.power_genius}}),tt=new Rn({props:{status:(Jt=e[0])==null?void 0:Jt.tuner_genius,flexradio:(Xt=e[0])==null?void 0:Xt.flexradio}}),lt=new Gn({props:{status:(Yt=e[0])==null?void 0:Yt.antenna_genius}}),qe=new Yn({props:{status:(Vt=e[0])==null?void 0:Vt.ultrabeam,flexradio:(Zt=e[0])==null?void 0:Zt.flexradio}}),Ue=new Un({props:{status:(Kt=e[0])==null?void 0:Kt.rotator_genius,ultrabeam:(Ht=e[0])==null?void 0:Ht.ultrabeam}}),{c(){l=a("div"),s=a("header"),i=a("div"),o=a("h1"),r=T(e[3]),f=T(" Shack"),d=b(),v=a("div"),c=a("span"),p=b(),w=T(u),g=b(),h=a("div"),y=a("div"),k=a("span"),M=T("SFI "),C=a("span"),F=T(m),O=b(),z=a("span"),P=T("Spots "),_=a("span"),I=T(A),U=b(),K=a("span"),de=T("A "),ie=a("span"),te=T(S),Y=b(),N=a("span"),B=T("K "),H=a("span"),fe=T(Q),Pe=b(),le=a("span"),J=T("G "),ae=a("span"),we=T(V),oe=b(),re=a("div"),ue=a("div"),Me=a("span"),Ie=T("🌬️ "),Ne=T(Se),Ae=T(" km/h"),Fe=b(),$=a("span"),_e=T("💨 "),se=T(ne),Z=T(" km/h"),ee=b(),j=a("span"),x=T("🌡️ "),G=T(X),me=T(" °C"),ve=b(),Ee=a("span"),Ye=T("→ "),We=T(Ve),Je=T(" °C"),Be=b(),Le=a("div"),$e=a("span"),Qe=T(De),Ze=b(),xe=a("span"),he=T(Ge),Te=b(),bt(et.$$.fragment),pt=b(),rt=a("main"),st=a("div"),Re=a("div"),bt(Ke.$$.fragment),Mt=b(),bt(He.$$.fragment),gt=b(),bt(tt.$$.fragment),it=b(),je=a("div"),bt(lt.$$.fragment),Xe=b(),bt(qe.$$.fragment),at=b(),bt(Ue.$$.fragment),t(o,"class","svelte-a5dfm6"),t(c,"class","status-indicator"),W(c,"status-online",e[1]),W(c,"status-offline",!e[1]),t(v,"class","connection-status svelte-a5dfm6"),t(i,"class","header-left svelte-a5dfm6"),t(C,"class","value svelte-a5dfm6"),t(k,"class","solar-item svelte-a5dfm6"),t(_,"class","value svelte-a5dfm6"),t(z,"class","solar-item svelte-a5dfm6"),t(ie,"class","value svelte-a5dfm6"),t(K,"class","solar-item svelte-a5dfm6"),t(H,"class","value svelte-a5dfm6"),t(N,"class","solar-item svelte-a5dfm6"),t(ae,"class","value svelte-a5dfm6"),t(le,"class","solar-item svelte-a5dfm6"),t(y,"class","solar-info svelte-a5dfm6"),t(h,"class","header-center svelte-a5dfm6"),t(Me,"title","Wind"),t($,"title","Gust"),t(j,"title","Temperature"),t(Ee,"title","Feels like"),t(ue,"class","weather-info svelte-a5dfm6"),t($e,"class","time svelte-a5dfm6"),t(xe,"class","date svelte-a5dfm6"),t(Le,"class","clock svelte-a5dfm6"),t(re,"class","header-right svelte-a5dfm6"),t(s,"class","svelte-a5dfm6"),t(Re,"class","row svelte-a5dfm6"),t(je,"class","row svelte-a5dfm6"),t(st,"class","dashboard-grid svelte-a5dfm6"),t(rt,"class","svelte-a5dfm6"),t(l,"class","app svelte-a5dfm6")},m(q,pe){L(q,l,pe),n(l,s),n(s,i),n(i,o),n(o,r),n(o,f),n(i,d),n(i,v),n(v,c),n(v,p),n(v,w),n(s,g),n(s,h),n(h,y),n(y,k),n(k,M),n(k,C),n(C,F),n(y,O),n(y,z),n(z,P),n(z,_),n(_,I),n(y,U),n(y,K),n(K,de),n(K,ie),n(ie,te),n(y,Y),n(y,N),n(N,B),n(N,H),n(H,fe),n(y,Pe),n(y,le),n(le,J),n(le,ae),n(ae,we),n(s,oe),n(s,re),n(re,ue),n(ue,Me),n(Me,Ie),n(Me,Ne),n(Me,Ae),n(ue,Fe),n(ue,$),n($,_e),n($,se),n($,Z),n(ue,ee),n(ue,j),n(j,x),n(j,G),n(j,me),n(ue,ve),n(ue,Ee),n(Ee,Ye),n(Ee,We),n(Ee,Je),n(re,Be),n(re,Le),n(Le,$e),n($e,Qe),n(Le,Ze),n(Le,xe),n(xe,he),n(l,Te),dt(et,l,null),n(l,pt),n(l,rt),n(rt,st),n(st,Re),dt(Ke,Re,null),n(Re,Mt),dt(He,Re,null),n(Re,gt),dt(tt,Re,null),n(st,it),n(st,je),dt(lt,je,null),n(je,Xe),dt(qe,je,null),n(je,at),dt(Ue,je,null),ze=!0},p(q,[pe]){var el,tl,ll,nl,sl,il,al,ol,rl,cl,dl;(!ze||pe&8)&&R(r,q[3]),(!ze||pe&2)&&W(c,"status-online",q[1]),(!ze||pe&2)&&W(c,"status-offline",!q[1]),(!ze||pe&2)&&u!==(u=q[1]?"Connected":"Disconnected")&&R(w,u),(!ze||pe&128)&&m!==(m=q[7].sfi+"")&&R(F,m),(!ze||pe&128)&&A!==(A=q[7].sunspots+"")&&R(I,A),(!ze||pe&128)&&S!==(S=q[7].a_index+"")&&R(te,S),(!ze||pe&128)&&Q!==(Q=q[7].k_index+"")&&R(fe,Q),(!ze||pe&128)&&V!==(V=q[7].geomag+"")&&R(we,V),(!ze||pe&64)&&Se!==(Se=q[6].wind_speed.toFixed(1)+"")&&R(Ne,Se),(!ze||pe&64)&&ne!==(ne=q[6].wind_gust.toFixed(1)+"")&&R(se,ne),(!ze||pe&64)&&X!==(X=q[6].temp.toFixed(1)+"")&&R(G,X),(!ze||pe&64)&&Ve!==(Ve=q[6].feels_like.toFixed(1)+"")&&R(We,Ve),(!ze||pe&4)&&De!==(De=Ul(q[2])+"")&&R(Qe,De),(!ze||pe&4)&&Ge!==(Ge=q[2].toLocaleDateString()+"")&&R(he,Ge);const Ct={};pe&1&&(Ct.flexradio=(el=q[0])==null?void 0:el.flexradio),pe&1&&(Ct.weather=(tl=q[0])==null?void 0:tl.weather),pe&16&&(Ct.latitude=q[4]),pe&32&&(Ct.longitude=q[5]),et.$set(Ct);const Qt={};pe&1&&(Qt.status=(ll=q[0])==null?void 0:ll.webswitch),Ke.$set(Qt);const xt={};pe&1&&(xt.status=(nl=q[0])==null?void 0:nl.power_genius),He.$set(xt);const Et={};pe&1&&(Et.status=(sl=q[0])==null?void 0:sl.tuner_genius),pe&1&&(Et.flexradio=(il=q[0])==null?void 0:il.flexradio),tt.$set(Et);const $t={};pe&1&&($t.status=(al=q[0])==null?void 0:al.antenna_genius),lt.$set($t);const Lt={};pe&1&&(Lt.status=(ol=q[0])==null?void 0:ol.ultrabeam),pe&1&&(Lt.flexradio=(rl=q[0])==null?void 0:rl.flexradio),qe.$set(Lt);const Rt={};pe&1&&(Rt.status=(cl=q[0])==null?void 0:cl.rotator_genius),pe&1&&(Rt.ultrabeam=(dl=q[0])==null?void 0:dl.ultrabeam),Ue.$set(Rt)},i(q){ze||(ct(et.$$.fragment,q),ct(Ke.$$.fragment,q),ct(He.$$.fragment,q),ct(tt.$$.fragment,q),ct(lt.$$.fragment,q),ct(qe.$$.fragment,q),ct(Ue.$$.fragment,q),ze=!0)},o(q){mt(et.$$.fragment,q),mt(Ke.$$.fragment,q),mt(He.$$.fragment,q),mt(tt.$$.fragment,q),mt(lt.$$.fragment,q),mt(qe.$$.fragment,q),mt(Ue.$$.fragment,q),ze=!1},d(q){q&&E(l),ft(et),ft(Ke),ft(He),ft(tt),ft(lt),ft(qe),ft(Ue)}}}function Ul(e){return e.toTimeString().slice(0,8)}function Zn(e,l,s){let i,o,r=null,f=!1,d=new Date,v="F4BPO",c=null,p=null;const u=Hl.subscribe(g=>{s(0,r=g)}),w=jt.subscribe(g=>{s(1,f=g)});return Vl(async()=>{hl.connect();try{const h=await Oe.getConfig();h.callsign&&s(3,v=h.callsign),h.location&&(s(4,c=h.location.latitude),s(5,p=h.location.longitude))}catch(h){console.error("Failed to fetch config:",h)}const g=setInterval(()=>{s(2,d=new Date)},1e3);return()=>{clearInterval(g)}}),Zl(()=>{hl.disconnect(),u(),w()}),e.$$.update=()=>{e.$$.dirty&1&&s(7,i=(r==null?void 0:r.solar)||{sfi:0,sunspots:0,a_index:0,k_index:0,geomag:"Unknown"}),e.$$.dirty&1&&s(6,o=(r==null?void 0:r.weather)||{wind_speed:0,wind_gust:0,temp:0,feels_like:0})},[r,f,d,v,c,p,o,i]}class Kn extends ht{constructor(l){super(),vt(this,l,Zn,Vn,ot,{})}}new Kn({target:document.getElementById("app")}); diff --git a/cmd/server/web/dist/assets/index-CQokRXS2.css b/cmd/server/web/dist/assets/index-CQokRXS2.css new file mode 100644 index 0000000..4c583b4 --- /dev/null +++ b/cmd/server/web/dist/assets/index-CQokRXS2.css @@ -0,0 +1 @@ +.status-banner.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{display:flex;align-items:center;justify-content:space-between;padding:10px 24px;background:linear-gradient(135deg,#1a1a2e,#16213e,#0f3460);border-bottom:1px solid rgba(79,195,247,.15);gap:20px;flex-wrap:wrap}.status-banner.has-warning.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{background:linear-gradient(135deg,#1f1a12,#29201b,#2d1b0c);border-bottom-color:#f59e0b}.flex-section.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{display:flex;align-items:center;gap:12px}.flex-icon.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{font-size:20px;opacity:.8}.flex-icon.connected.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{opacity:1;filter:drop-shadow(0 0 4px rgba(79,195,247,.6))}.flex-icon.disconnected.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{opacity:.4;filter:grayscale(1)}.frequency-display.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{display:flex;align-items:baseline;gap:4px}.frequency.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{font-size:28px;font-weight:300;font-family:Roboto Mono,Consolas,monospace;color:var(--band-color, #4fc3f7);text-shadow:0 0 15px var(--band-color, rgba(79, 195, 247, .5));letter-spacing:1px}.unit.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{font-size:14px;color:#ffffff80;font-weight:400}.band-badge.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{padding:4px 10px;border-radius:4px;font-size:13px;font-weight:700;color:#000;text-shadow:none}.mode-badge.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{padding:4px 10px;background:#9c27b04d;border:1px solid rgba(156,39,176,.5);border-radius:4px;font-size:13px;font-weight:600;color:#ce93d8}.tx-indicator.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{padding:4px 10px;background:#f443364d;border:1px solid #f44336;border-radius:4px;font-size:13px;font-weight:700;color:#f44336;text-shadow:0 0 10px rgba(244,67,54,.8);animation:svelte-h7ie36-txPulse .5s ease-in-out infinite}@keyframes svelte-h7ie36-txPulse{0%,to{opacity:1}50%{opacity:.6}}.radio-status.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{display:flex;align-items:center;gap:8px}.radio-on-indicator.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{color:#22c55e;font-size:16px;animation:svelte-h7ie36-pulse 2s infinite}.radio-off-indicator.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{color:#ef4444;font-size:16px}@keyframes svelte-h7ie36-pulse{0%,to{opacity:1}50%{opacity:.5}}.radio-status-text.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{color:#ffffffe6;font-size:14px}.model-badge.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{padding:3px 8px;background:#4fc3f733;border:1px solid rgba(79,195,247,.4);border-radius:4px;font-size:12px;color:#4fc3f7}.callsign-badge.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{padding:3px 8px;background:#22c55e33;border:1px solid rgba(34,197,94,.4);border-radius:4px;font-size:12px;font-weight:600;color:#22c55e}.no-signal.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{color:#fff6;font-size:14px;font-style:italic}.separator.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{width:1px;height:30px;background:#fff3}.grayline-section.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{display:flex;align-items:center;gap:12px}.sun-times.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{display:flex;gap:12px}.sun-item.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{font-size:14px;color:#ffffffd9;display:flex;align-items:center;gap:6px}.sun-icon.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{flex-shrink:0}.sunrise-icon.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{color:#fbbf2499;filter:drop-shadow(0 0 4px rgba(251,191,36,.4))}.sunset-icon.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{color:#f9731699;filter:drop-shadow(0 0 4px rgba(249,115,22,.4))}.grayline-badge.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{padding:5px 12px;border-radius:4px;font-size:12px;font-weight:700;letter-spacing:1px;animation:svelte-h7ie36-graylinePulse 1.5s ease-in-out infinite}.grayline-badge.sunrise.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{background:linear-gradient(135deg,#ffb74d4d,#ff8a654d);border:1px solid rgba(255,183,77,.6);color:#ffcc80;text-shadow:0 0 10px rgba(255,183,77,.8)}.grayline-badge.sunset.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{background:linear-gradient(135deg,#ff8a654d,#ef53504d);border:1px solid rgba(255,138,101,.6);color:#ffab91;text-shadow:0 0 10px rgba(255,138,101,.8)}@keyframes svelte-h7ie36-graylinePulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.85;transform:scale(1.02)}}.next-event.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{font-size:12px;color:#ffffff80;font-style:italic}.no-location.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{font-size:13px;color:#fff6;font-style:italic}.weather-section.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{display:flex;align-items:center;gap:16px}.alert.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{display:flex;align-items:center;gap:8px;padding:6px 14px;border-radius:6px;animation:svelte-h7ie36-alertPulse 2s ease-in-out infinite}.wind-alert.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{background:#f59e0b33;border:1px solid rgba(245,158,11,.5)}.gust-alert.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{background:#ef444433;border:1px solid rgba(239,68,68,.5)}@keyframes svelte-h7ie36-alertPulse{0%,to{opacity:1}50%{opacity:.8}}.alert-icon.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{font-size:16px}.alert-text.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{font-size:13px;color:#ffffffe6}.alert-text.svelte-h7ie36 strong.svelte-h7ie36.svelte-h7ie36{color:#fbbf24;font-weight:700}.gust-alert.svelte-h7ie36 .alert-text.svelte-h7ie36 strong.svelte-h7ie36{color:#f87171}.status-ok.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{display:flex;align-items:center;gap:6px;padding:6px 14px;background:#22c55e1a;border:1px solid rgba(34,197,94,.3);border-radius:6px}.ok-icon.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{color:#22c55e;font-weight:700}.ok-text.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{font-size:13px;color:#22c55ee6}@media (max-width: 768px){.status-banner.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{padding:8px 16px;gap:12px}.frequency.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{font-size:22px}.separator.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{display:none}.flex-section.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36,.grayline-section.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36,.weather-section.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{width:100%;justify-content:center}}.card.svelte-z2csmj.svelte-z2csmj{background:linear-gradient(135deg,#1a2332,#0f1923);border:1px solid #2d3748;border-radius:8px;padding:0;overflow:hidden;box-shadow:0 4px 6px #0000004d}.card-header.svelte-z2csmj.svelte-z2csmj{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;background:#4fc3f70d;border-bottom:1px solid #2d3748}h2.svelte-z2csmj.svelte-z2csmj{font-size:14px;font-weight:600;color:var(--accent-cyan);margin:0;letter-spacing:.5px}.status-dot.svelte-z2csmj.svelte-z2csmj{width:8px;height:8px;border-radius:50%;background:#4caf50;box-shadow:0 0 8px #4caf50}.status-dot.disconnected.svelte-z2csmj.svelte-z2csmj{background:#f44336;box-shadow:0 0 8px #f44336}.metrics.svelte-z2csmj.svelte-z2csmj{padding:16px;display:flex;flex-direction:column;gap:12px}.relays.svelte-z2csmj.svelte-z2csmj{display:flex;flex-direction:column;gap:8px}.relay-card.svelte-z2csmj.svelte-z2csmj{display:flex;justify-content:space-between;align-items:center;padding:12px;background:var(--bg-tertiary);border-radius:6px;border:1px solid var(--border-color);transition:all .3s}.relay-card.relay-on.svelte-z2csmj.svelte-z2csmj{background:#4caf501a;border-color:#4caf504d;box-shadow:0 0 15px #4caf5033}.relay-info.svelte-z2csmj.svelte-z2csmj{display:flex;align-items:center}.relay-details.svelte-z2csmj.svelte-z2csmj{display:flex;flex-direction:column;gap:2px}.relay-name.svelte-z2csmj.svelte-z2csmj{font-size:12px;color:var(--text-primary);font-weight:500}.relay-status.svelte-z2csmj.svelte-z2csmj{font-size:10px;color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px}.relay-card.relay-on.svelte-z2csmj .relay-status.svelte-z2csmj{color:#4caf50;font-weight:600}.relay-toggle.svelte-z2csmj.svelte-z2csmj{padding:0;background:transparent;border:none;cursor:pointer}.toggle-track.svelte-z2csmj.svelte-z2csmj{width:52px;height:28px;background:var(--bg-primary);border:2px solid var(--border-color);border-radius:14px;position:relative;transition:all .3s}.relay-toggle.svelte-z2csmj:hover .toggle-track.svelte-z2csmj{border-color:var(--accent-cyan)}.relay-toggle.active.svelte-z2csmj .toggle-track.svelte-z2csmj{background:linear-gradient(135deg,#4caf50,#66bb6a);border-color:#4caf50;box-shadow:0 0 15px #4caf5080}.toggle-thumb.svelte-z2csmj.svelte-z2csmj{width:20px;height:20px;background:#fff;border-radius:50%;position:absolute;top:2px;left:2px;transition:all .3s;box-shadow:0 2px 4px #0000004d}.relay-toggle.active.svelte-z2csmj .toggle-thumb.svelte-z2csmj{transform:translate(24px)}.relay-toggle.svelte-z2csmj.svelte-z2csmj:disabled{opacity:.5;cursor:not-allowed}.controls.svelte-z2csmj.svelte-z2csmj{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:8px}.control-btn.svelte-z2csmj.svelte-z2csmj{padding:12px;border-radius:6px;font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;cursor:pointer;border:none;transition:all .2s;display:flex;align-items:center;justify-content:center;gap:6px}.control-btn.svelte-z2csmj.svelte-z2csmj:hover{transform:translateY(-2px)}.control-btn.svelte-z2csmj.svelte-z2csmj:active{transform:translateY(0)}.btn-icon.svelte-z2csmj.svelte-z2csmj{font-size:16px}.all-on.svelte-z2csmj.svelte-z2csmj{background:linear-gradient(135deg,#4caf50,#66bb6a);color:#fff;box-shadow:0 4px 12px #4caf5066}.all-on.svelte-z2csmj.svelte-z2csmj:hover{box-shadow:0 6px 16px #4caf5080}.all-off.svelte-z2csmj.svelte-z2csmj{background:linear-gradient(135deg,#f44336,#d32f2f);color:#fff;box-shadow:0 4px 12px #f4433666}.all-off.svelte-z2csmj.svelte-z2csmj:hover{box-shadow:0 6px 16px #f4433680}.card.svelte-vwcbgz{background:linear-gradient(135deg,#1a2332,#0f1923);border:1px solid #2d3748;border-radius:8px;padding:0;overflow:hidden;box-shadow:0 4px 6px #0000004d}.card-header.svelte-vwcbgz{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;background:#4fc3f70d;border-bottom:1px solid #2d3748}h2.svelte-vwcbgz{font-size:14px;font-weight:600;color:var(--accent-cyan);margin:0;letter-spacing:.5px}.header-right.svelte-vwcbgz{display:flex;align-items:center;gap:8px}.state-badge.svelte-vwcbgz{padding:4px 12px;border-radius:12px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;cursor:pointer;border:none;transition:all .2s}.state-badge.idle.svelte-vwcbgz{background:#4caf5033;color:#4caf50}.state-badge.transmit.svelte-vwcbgz{background:#ff980033;color:#ff9800;animation:svelte-vwcbgz-pulse 1s infinite}@keyframes svelte-vwcbgz-pulse{0%,to{opacity:1}50%{opacity:.7}}.status-dot.svelte-vwcbgz{width:8px;height:8px;border-radius:50%;background:#4caf50;box-shadow:0 0 8px #4caf50}.status-dot.disconnected.svelte-vwcbgz{background:#f44336;box-shadow:0 0 8px #f44336}.metrics.svelte-vwcbgz{padding:16px;display:flex;flex-direction:column;gap:10px}.power-swr-row.svelte-vwcbgz{display:flex;gap:16px;align-items:center}.power-section.svelte-vwcbgz{flex:1;background:#0f172a99;padding:12px;border-radius:10px;border:1px solid rgba(79,195,247,.2)}.power-header.svelte-vwcbgz{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}.power-label-inline.svelte-vwcbgz{font-size:12px;color:#ffffffb3;text-transform:uppercase;letter-spacing:.5px}.power-value-inline.svelte-vwcbgz{font-size:22px;font-weight:600;color:#66bb6a}.power-bar-container.svelte-vwcbgz{position:relative}.power-bar-bg.svelte-vwcbgz{width:100%;height:28px;background:#0000004d;border-radius:14px;overflow:hidden;position:relative}.power-bar-fill.svelte-vwcbgz{position:relative;height:100%;background:linear-gradient(90deg,#4caf50,#ffc107,#ff9800,#f44336);border-radius:14px;transition:width .3s ease}@keyframes svelte-vwcbgz-shimmer{0%{transform:translate(-100%)}to{transform:translate(100%)}}.swr-circle-compact.svelte-vwcbgz{width:90px;height:90px;border-radius:50%;background:radial-gradient(circle,rgba(79,195,247,.1),transparent);border:4px solid var(--swr-color);display:flex;flex-direction:column;align-items:center;justify-content:center;box-shadow:0 0 25px var(--swr-color);flex-shrink:0}.swr-value-compact.svelte-vwcbgz{font-size:28px;font-weight:700;color:var(--swr-color)}.swr-label-compact.svelte-vwcbgz{font-size:11px;color:#fff9;text-transform:uppercase;margin-top:2px}.temp-group.svelte-vwcbgz{display:grid;grid-template-columns:1fr 1fr;gap:12px}.temp-item.svelte-vwcbgz{display:flex;flex-direction:column;gap:4px;padding:12px;background:var(--bg-tertiary);border-radius:6px}.temp-value.svelte-vwcbgz{font-size:32px;font-weight:300;line-height:1}.temp-label.svelte-vwcbgz{font-size:10px;color:var(--text-muted);text-transform:uppercase}.temp-mini-bar.svelte-vwcbgz{height:4px;background:#ffffff1a;border-radius:2px;overflow:hidden;margin-top:4px}.temp-mini-fill.svelte-vwcbgz{height:100%;border-radius:2px;transition:width .3s ease}.params-grid.svelte-vwcbgz{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.param-box.svelte-vwcbgz{padding:8px;background:var(--bg-tertiary);border-radius:4px;text-align:center}.param-label.svelte-vwcbgz{font-size:9px;color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px}.param-value.svelte-vwcbgz{font-size:16px;font-weight:300;color:var(--text-primary);margin-top:2px}.band-display.svelte-vwcbgz{display:grid;grid-template-columns:1fr 1fr;gap:8px;padding:8px;background:#4fc3f70d;border-radius:6px}.band-item.svelte-vwcbgz{display:flex;justify-content:space-between;align-items:center}.band-label.svelte-vwcbgz{font-size:11px;color:var(--text-muted)}.band-value.svelte-vwcbgz{font-size:14px;font-weight:600;color:var(--accent-cyan)}.fan-control.svelte-vwcbgz{display:flex;flex-direction:column;gap:6px}.control-label.svelte-vwcbgz{font-size:11px;color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px}select.svelte-vwcbgz{background:var(--bg-tertiary);color:var(--text-primary);border:1px solid var(--border-color);border-radius:4px;padding:8px;font-size:12px;cursor:pointer;outline:none;transition:all .2s}select.svelte-vwcbgz:hover{border-color:var(--accent-cyan)}select.svelte-vwcbgz:focus{border-color:var(--accent-cyan);box-shadow:0 0 0 2px #4fc3f733}.card.svelte-zuda7{background:linear-gradient(135deg,#1a2332,#0f1923);border:1px solid #2d3748;border-radius:8px;padding:0;overflow:hidden;box-shadow:0 4px 6px #0000004d}.card-header.svelte-zuda7{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;background:#4fc3f70d;border-bottom:1px solid #2d3748}h2.svelte-zuda7{font-size:14px;font-weight:600;color:var(--accent-cyan);margin:0;letter-spacing:.5px}.header-right.svelte-zuda7{display:flex;align-items:center;gap:8px}.tuning-badge.svelte-zuda7{padding:4px 12px;border-radius:12px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;background:#4caf5033;color:#4caf50}.tuning-badge.tuning.svelte-zuda7{background:#ff980033;color:#ff9800;animation:svelte-zuda7-pulse 1s infinite}@keyframes svelte-zuda7-pulse{0%,to{opacity:1}50%{opacity:.7}}.status-dot.svelte-zuda7{width:8px;height:8px;border-radius:50%;background:#4caf50;box-shadow:0 0 8px #4caf50}.status-dot.disconnected.svelte-zuda7{background:#f44336;box-shadow:0 0 8px #f44336}.metrics.svelte-zuda7{padding:16px;display:flex;flex-direction:column;gap:10px}.power-swr-row.svelte-zuda7{display:flex;gap:16px;align-items:center}.power-section.svelte-zuda7{flex:1;background:#0f172a99;padding:12px;border-radius:10px;border:1px solid rgba(79,195,247,.2)}.power-header.svelte-zuda7{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}.power-label-inline.svelte-zuda7{font-size:12px;color:#ffffffb3;text-transform:uppercase;letter-spacing:.5px}.power-value-inline.svelte-zuda7{font-size:22px;font-weight:600;color:#66bb6a}.power-bar-container.svelte-zuda7{position:relative}.power-bar-bg.svelte-zuda7{width:100%;height:28px;background:#0000004d;border-radius:14px;overflow:hidden;position:relative}.power-bar-fill.svelte-zuda7{position:relative;height:100%;background:linear-gradient(90deg,#4caf50,#ffc107,#ff9800,#f44336);border-radius:14px;transition:width .3s ease}@keyframes svelte-zuda7-shimmer{0%{transform:translate(-100%)}to{transform:translate(100%)}}.swr-circle-compact.svelte-zuda7{width:90px;height:90px;border-radius:50%;background:radial-gradient(circle,rgba(79,195,247,.1),transparent);border:4px solid var(--swr-color);display:flex;flex-direction:column;align-items:center;justify-content:center;box-shadow:0 0 25px var(--swr-color);flex-shrink:0}.swr-value-compact.svelte-zuda7{font-size:28px;font-weight:700;color:var(--swr-color)}.swr-label-compact.svelte-zuda7{font-size:11px;color:#fff9;text-transform:uppercase;margin-top:2px}.capacitors.svelte-zuda7{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;padding:16px;background:#4fc3f70d;border-radius:6px;border:1px solid rgba(79,195,247,.2)}.cap-item.svelte-zuda7{display:flex;flex-direction:column;align-items:center;gap:4px}.cap-value.svelte-zuda7{font-size:20px;font-weight:300;color:var(--accent-cyan);text-shadow:0 0 15px rgba(79,195,247,.5)}.cap-label.svelte-zuda7{font-size:10px;color:var(--text-muted);text-transform:uppercase;letter-spacing:1px}.freq-display.svelte-zuda7{display:grid;grid-template-columns:1fr 1fr;gap:12px}.freq-item.svelte-zuda7{padding:10px;background:var(--bg-tertiary);border-radius:6px;display:flex;flex-direction:column;gap:4px}.freq-label.svelte-zuda7{font-size:9px;color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px}.freq-value.svelte-zuda7{font-size:16px;font-weight:300;color:var(--text-primary)}.freq-unit.svelte-zuda7{font-size:11px;color:var(--text-secondary);margin-left:2px}.controls.svelte-zuda7{display:grid;grid-template-columns:1fr 1fr;gap:8px}.control-btn.svelte-zuda7{padding:12px;border-radius:6px;font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;cursor:pointer;border:1px solid var(--border-color);background:var(--bg-tertiary);color:var(--text-primary);transition:all .2s}.control-btn.svelte-zuda7:hover{border-color:var(--accent-cyan);transform:translateY(-1px)}.control-btn.active.svelte-zuda7{background:var(--accent-cyan);border-color:var(--accent-cyan);color:#000;box-shadow:0 0 15px #4fc3f780}.tune-btn.svelte-zuda7{width:100%;padding:14px;border-radius:6px;font-size:13px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;cursor:pointer;border:none;background:linear-gradient(135deg,#f44336,#d32f2f);color:#fff;transition:all .2s;display:flex;align-items:center;justify-content:center;gap:8px;box-shadow:0 4px 12px #f4433666}.tune-btn.svelte-zuda7:hover{transform:translateY(-2px);box-shadow:0 6px 16px #f4433680}.tune-btn.svelte-zuda7:active{transform:translateY(0)}.tune-icon.svelte-zuda7{font-size:16px}.card.svelte-vlabwb{background:linear-gradient(135deg,#1a2332,#0f1923);border:1px solid #2d3748;border-radius:8px;padding:0;overflow:hidden;box-shadow:0 4px 6px #0000004d}.card-header.svelte-vlabwb{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;background:#4fc3f70d;border-bottom:1px solid #2d3748}h2.svelte-vlabwb{font-size:14px;font-weight:600;color:var(--accent-cyan);margin:0;letter-spacing:.5px}.status-dot.svelte-vlabwb{width:8px;height:8px;border-radius:50%;background:#4caf50;box-shadow:0 0 8px #4caf50}.status-dot.disconnected.svelte-vlabwb{background:#f44336;box-shadow:0 0 8px #f44336}.metrics.svelte-vlabwb{padding:16px;display:flex;flex-direction:column;gap:12px}.sources.svelte-vlabwb{display:grid;grid-template-columns:1fr 1fr;gap:8px}.source-item.svelte-vlabwb{padding:8px;background:var(--bg-tertiary);border-radius:4px;text-align:center}.source-label.svelte-vlabwb{font-size:12px;font-weight:600;color:var(--text-primary);text-transform:uppercase}.bands.svelte-vlabwb{display:grid;grid-template-columns:1fr 1fr;gap:8px}.band-item.svelte-vlabwb{padding:10px;background:#4fc3f71a;border:1px solid rgba(79,195,247,.3);border-radius:4px;text-align:center}.band-value.svelte-vlabwb{font-size:16px;font-weight:600;color:var(--accent-cyan)}.antennas.svelte-vlabwb{display:flex;flex-direction:column;gap:8px}.antenna-card.svelte-vlabwb{display:flex;justify-content:space-between;align-items:center;padding:12px;background:var(--bg-tertiary);border:2px solid var(--border-color);border-radius:6px;transition:all .3s}.antenna-card.active-a.svelte-vlabwb{background:#4caf5033;border-color:#4caf50;box-shadow:0 0 20px #4caf504d}.antenna-card.active-b.svelte-vlabwb{background:#2196f333;border-color:#2196f3;box-shadow:0 0 20px #2196f34d}.antenna-card.tx.svelte-vlabwb{background:#f4433633!important;border-color:#f44336!important;box-shadow:0 0 20px #f4433666!important}.antenna-name.svelte-vlabwb{font-size:14px;font-weight:500;color:var(--text-primary)}.antenna-ports.svelte-vlabwb{display:flex;gap:6px}.port-btn.svelte-vlabwb{width:36px;height:36px;border-radius:4px;font-size:14px;font-weight:600;cursor:pointer;border:1px solid var(--border-color);background:var(--bg-primary);color:var(--text-secondary);transition:all .2s}.port-btn.svelte-vlabwb:hover{border-color:var(--accent-cyan);transform:scale(1.05)}.port-btn.active.svelte-vlabwb{background:var(--accent-cyan);border-color:var(--accent-cyan);color:#000;box-shadow:0 0 12px #4fc3f780}.reboot-btn.svelte-vlabwb{width:100%;padding:12px;border-radius:6px;font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;cursor:pointer;border:none;background:linear-gradient(135deg,#ff9800,#f57c00);color:#fff;transition:all .2s;display:flex;align-items:center;justify-content:center;gap:6px;box-shadow:0 4px 12px #ff980066;margin-top:8px}.reboot-btn.svelte-vlabwb:hover{transform:translateY(-2px);box-shadow:0 6px 16px #ff980080}.reboot-btn.svelte-vlabwb:active{transform:translateY(0)}.reboot-icon.svelte-vlabwb{font-size:16px}.card.svelte-3omzwr{background:linear-gradient(135deg,#1a2332,#0f1923);border:1px solid #2d3748;border-radius:8px;padding:0;overflow:hidden;box-shadow:0 4px 6px #0000004d}.card-header.svelte-3omzwr{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;background:#4fc3f70d;border-bottom:1px solid #2d3748}h2.svelte-3omzwr{font-size:14px;font-weight:600;color:var(--accent-cyan);margin:0;letter-spacing:.5px}.status-dot.svelte-3omzwr{width:8px;height:8px;border-radius:50%;background:#4caf50;box-shadow:0 0 8px #4caf50}.status-dot.disconnected.svelte-3omzwr{background:#f44336;box-shadow:0 0 8px #f44336}.metrics.svelte-3omzwr{padding:16px;display:flex;flex-direction:column;gap:10px}.heading-controls-row.svelte-3omzwr{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:8px;background:#4fc3f71a;border-radius:6px;border:1px solid rgba(79,195,247,.3)}.heading-display-compact.svelte-3omzwr{flex:1;text-align:center}.controls-compact.svelte-3omzwr{display:flex;gap:6px}.btn-mini.svelte-3omzwr{width:36px;height:36px;border:2px solid rgba(79,195,247,.3);border-radius:6px;font-size:20px;font-weight:600;cursor:pointer;transition:all .2s;display:flex;align-items:center;justify-content:center;color:#ffffffb3;background:#4fc3f714}.btn-mini.svelte-3omzwr:hover{border-color:#4fc3f799;color:#ffffffe6;background:#4fc3f726;transform:translateY(-1px);box-shadow:0 0 15px #4fc3f74d}.btn-mini.ccw.svelte-3omzwr:hover{transform:translateY(-1px) rotate(-5deg)}.btn-mini.cw.svelte-3omzwr:hover{transform:translateY(-1px) rotate(5deg)}.btn-mini.stop.svelte-3omzwr:hover{border-color:#f44336;color:#f44336;background:#f4433626}.heading-label.svelte-3omzwr{font-size:10px;color:var(--text-muted);text-transform:uppercase;letter-spacing:1px;margin-bottom:4px}.heading-value.svelte-3omzwr{font-size:42px;font-weight:200;color:var(--accent-cyan);text-shadow:0 0 20px rgba(79,195,247,.5)}.target-indicator.svelte-3omzwr{font-size:24px;font-weight:400;color:#ffc107;margin-left:20px;text-shadow:0 0 15px rgba(255,193,7,.6);animation:svelte-3omzwr-targetPulse 1s ease-in-out infinite}@keyframes svelte-3omzwr-targetPulse{0%,to{opacity:.8}50%{opacity:1}}.map-container.svelte-3omzwr{display:flex;justify-content:center;padding:10px;background:#0a162899;border-radius:8px}.map-legend.svelte-3omzwr{display:flex;gap:20px;justify-content:center;padding:8px;margin-top:8px;background:#0a162866;border-radius:6px;font-size:12px;color:#ffffffb3}.legend-item.svelte-3omzwr{display:flex;align-items:center;gap:6px}.map-svg.svelte-3omzwr{width:100%;max-width:300px;height:auto}.clickable-compass.svelte-3omzwr{cursor:crosshair;-webkit-user-select:none;user-select:none;outline:none}.clickable-compass.svelte-3omzwr:hover{filter:brightness(1.1)}.cardinal.svelte-3omzwr{fill:var(--accent-cyan);font-size:16px;font-weight:700;text-shadow:0 0 10px rgba(79,195,247,.8)}.degree-label.svelte-3omzwr{fill:#4fc3f7b3;font-size:12px;font-weight:600}.card.svelte-dk3bqi.svelte-dk3bqi{background:linear-gradient(135deg,#1e293bf2,#0f172afa);border-radius:16px;padding:16px;box-shadow:0 8px 32px #0006;border:1px solid rgba(79,195,247,.2)}.card-header.svelte-dk3bqi.svelte-dk3bqi{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;background:#4fc3f70d;border-bottom:1px solid #2d3748}.header-right.svelte-dk3bqi.svelte-dk3bqi{display:flex;align-items:center;gap:12px}h2.svelte-dk3bqi.svelte-dk3bqi{margin:0;font-size:20px;font-weight:600;background:linear-gradient(135deg,#4fc3f7,#03a9f4);-webkit-background-clip:text;-webkit-text-fill-color:transparent;text-shadow:0 0 20px rgba(79,195,247,.5)}h3.svelte-dk3bqi.svelte-dk3bqi{margin:0 0 12px;font-size:16px;font-weight:500;color:#4fc3f7}.status-dot.svelte-dk3bqi.svelte-dk3bqi{width:12px;height:12px;border-radius:50%;background:#4caf50;box-shadow:0 0 12px #4caf50cc;animation:svelte-dk3bqi-pulse 2s ease-in-out infinite}.status-dot.disconnected.svelte-dk3bqi.svelte-dk3bqi{background:#666;box-shadow:none;animation:none}@keyframes svelte-dk3bqi-pulse{0%,to{opacity:1}50%{opacity:.6}}.metrics.svelte-dk3bqi.svelte-dk3bqi{display:flex;flex-direction:column;gap:12px}.status-grid.svelte-dk3bqi.svelte-dk3bqi{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px}.status-item.svelte-dk3bqi.svelte-dk3bqi{background:#0f172a99;padding:16px;border-radius:12px;border:1px solid rgba(79,195,247,.2)}.status-label.svelte-dk3bqi.svelte-dk3bqi{font-size:12px;color:#fff9;text-transform:uppercase;letter-spacing:1px;margin-bottom:8px}.status-value.svelte-dk3bqi.svelte-dk3bqi{font-size:22px;font-weight:700;color:#4fc3f7;text-shadow:0 0 10px rgba(79,195,247,.5)}.status-value.freq.svelte-dk3bqi.svelte-dk3bqi{color:#66bb6a;font-size:22px;text-shadow:0 0 10px rgba(102,187,106,.5)}.status-value.band.svelte-dk3bqi.svelte-dk3bqi{color:#ffa726;text-shadow:0 0 10px rgba(255,167,38,.5)}.status-value.direction.svelte-dk3bqi.svelte-dk3bqi{color:#ab47bc;text-shadow:0 0 10px rgba(171,71,188,.5)}.control-section.svelte-dk3bqi.svelte-dk3bqi{background:#0f172a66;padding:12px;border-radius:12px;border:1px solid rgba(79,195,247,.2)}.control-section.compact.svelte-dk3bqi.svelte-dk3bqi{padding:16px}.auto-track-controls.svelte-dk3bqi.svelte-dk3bqi{display:flex;align-items:center;gap:20px;flex-wrap:wrap}.toggle-label.svelte-dk3bqi.svelte-dk3bqi{display:flex;align-items:center;gap:8px;cursor:pointer;color:#fff;font-size:14px}.toggle-label.svelte-dk3bqi input[type=checkbox].svelte-dk3bqi{width:20px;height:20px;cursor:pointer}.threshold-group.svelte-dk3bqi.svelte-dk3bqi{display:flex;align-items:center;gap:8px}.threshold-group.svelte-dk3bqi label.svelte-dk3bqi{font-size:14px;color:#fffc;white-space:nowrap}.direction-buttons.svelte-dk3bqi.svelte-dk3bqi{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-top:16px}.dir-btn.svelte-dk3bqi.svelte-dk3bqi{padding:12px 16px;border:2px solid rgba(79,195,247,.3);border-radius:8px;font-size:13px;font-weight:600;text-transform:uppercase;cursor:pointer;transition:all .2s;color:#ffffffb3;background:#4fc3f714;letter-spacing:.5px}.dir-btn.svelte-dk3bqi.svelte-dk3bqi:hover{border-color:#4fc3f799;color:#ffffffe6;background:#4fc3f726;transform:translateY(-1px)}.dir-btn.active.svelte-dk3bqi.svelte-dk3bqi{border-color:#4fc3f7;color:#4fc3f7;background:#4fc3f733;box-shadow:0 0 20px #4fc3f766;font-weight:700}.progress-section.svelte-dk3bqi.svelte-dk3bqi{background:#4fc3f71a;padding:16px;border-radius:8px;border:2px solid rgba(79,195,247,.3);margin-top:16px}.progress-section.svelte-dk3bqi h3.svelte-dk3bqi{margin:0 0 12px;font-size:14px;color:#4fc3f7;text-transform:uppercase;letter-spacing:.5px}.progress-bar.svelte-dk3bqi.svelte-dk3bqi{height:20px;background:#0f172a99;border-radius:10px;overflow:hidden;position:relative}.progress-fill.svelte-dk3bqi.svelte-dk3bqi{height:100%;background:linear-gradient(90deg,#4fc3f7,#03a9f4);transition:width .3s ease;border-radius:10px}.progress-text.svelte-dk3bqi.svelte-dk3bqi{text-align:center;font-size:13px;color:#fffc;margin-top:8px}.actions.svelte-dk3bqi.svelte-dk3bqi{display:flex;gap:12px}.app.svelte-a5dfm6.svelte-a5dfm6{min-height:100vh;display:flex;flex-direction:column}header.svelte-a5dfm6.svelte-a5dfm6{background:linear-gradient(135deg,#1a1a2e,#16213e,#0f3460);padding:8px 24px;display:flex;justify-content:space-between;align-items:center;box-shadow:0 4px 20px #0006;border-bottom:1px solid rgba(79,195,247,.2);flex-wrap:wrap;gap:16px}.header-left.svelte-a5dfm6.svelte-a5dfm6{display:flex;align-items:center;gap:16px}h1.svelte-a5dfm6.svelte-a5dfm6{font-size:24px;font-weight:500;margin:0;color:#fff}.connection-status.svelte-a5dfm6.svelte-a5dfm6{display:flex;align-items:center;gap:8px;font-size:14px;padding:6px 12px;background:#0000004d;border-radius:16px}.header-center.svelte-a5dfm6.svelte-a5dfm6{flex:1;display:flex;justify-content:center}.solar-info.svelte-a5dfm6.svelte-a5dfm6{display:flex;gap:20px;font-size:14px}.solar-item.svelte-a5dfm6.svelte-a5dfm6{color:#ffffffe6;font-size:13px;font-weight:600;letter-spacing:.3px}.solar-item.svelte-a5dfm6 .value.svelte-a5dfm6{font-weight:700;margin-left:4px;font-size:14px}.solar-item.svelte-a5dfm6:nth-child(1) .value.svelte-a5dfm6{color:#ffa726;text-shadow:0 0 8px rgba(255,167,38,.5)}.solar-item.svelte-a5dfm6:nth-child(2) .value.svelte-a5dfm6{color:#66bb6a;text-shadow:0 0 8px rgba(102,187,106,.5)}.solar-item.svelte-a5dfm6:nth-child(3) .value.svelte-a5dfm6{color:#42a5f5;text-shadow:0 0 8px rgba(66,165,245,.5)}.solar-item.svelte-a5dfm6:nth-child(4) .value.svelte-a5dfm6{color:#ef5350;text-shadow:0 0 8px rgba(239,83,80,.5)}.solar-item.svelte-a5dfm6:nth-child(5) .value.svelte-a5dfm6{color:#ab47bc;text-shadow:0 0 8px rgba(171,71,188,.5)}.header-right.svelte-a5dfm6.svelte-a5dfm6{display:flex;gap:20px;align-items:center}.weather-info.svelte-a5dfm6.svelte-a5dfm6{display:flex;gap:12px;font-size:14px;color:#ffffffe6}.clock.svelte-a5dfm6.svelte-a5dfm6{display:flex;flex-direction:column;align-items:flex-end}.time.svelte-a5dfm6.svelte-a5dfm6{font-size:18px;font-weight:500;color:#fff}.date.svelte-a5dfm6.svelte-a5dfm6{font-size:12px;color:#ffffffb3;padding-top:0}main.svelte-a5dfm6.svelte-a5dfm6{flex:1;padding:24px;overflow-y:auto}.dashboard-grid.svelte-a5dfm6.svelte-a5dfm6{display:flex;flex-direction:column;gap:24px;max-width:1800px;margin:0 auto}.row.svelte-a5dfm6.svelte-a5dfm6{display:flex;gap:24px;flex-wrap:wrap}.row.svelte-a5dfm6>*{flex:1;min-width:300px}@media (max-width: 1200px){.row.svelte-a5dfm6.svelte-a5dfm6{flex-direction:column}}@media (max-width: 768px){header.svelte-a5dfm6.svelte-a5dfm6{flex-direction:column;align-items:flex-start}.header-center.svelte-a5dfm6.svelte-a5dfm6,.header-right.svelte-a5dfm6.svelte-a5dfm6{width:100%;justify-content:flex-start}.solar-info.svelte-a5dfm6.svelte-a5dfm6{flex-wrap:wrap}}:root{--bg-primary: #0a1628;--bg-secondary: #1a2332;--bg-tertiary: #243447;--bg-hover: #2a3f5f;--text-primary: #e0e6ed;--text-secondary: #a0aec0;--text-muted: #718096;--accent-cyan: #4fc3f7;--accent-blue: #2196f3;--accent-green: #4caf50;--accent-orange: #ff9800;--accent-red: #f44336;--accent-purple: #9c27b0;--accent-yellow: #ffc107;--border-color: #2d3748;--border-light: #374151;--card-shadow: 0 1px 3px rgba(0, 0, 0, .3);--card-radius: 6px;--header-height: 56px;--spacing-xs: 4px;--spacing-sm: 8px;--spacing-md: 12px;--spacing-lg: 16px;--spacing-xl: 20px}*{box-sizing:border-box;margin:0;padding:0}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background:var(--bg-primary);color:var(--text-primary);font-size:13px;line-height:1.4;overflow-x:hidden}.app{display:flex;flex-direction:column;height:100vh;overflow:hidden}header{height:var(--header-height);background:var(--bg-secondary);border-bottom:1px solid var(--border-color);display:flex;align-items:center;justify-content:space-between;padding:0 var(--spacing-lg);flex-shrink:0}.header-left{display:flex;align-items:center;gap:var(--spacing-lg)}.header-left h1{font-size:16px;font-weight:600;color:var(--accent-cyan);letter-spacing:.5px}.connection-status{display:flex;align-items:center;gap:var(--spacing-sm);font-size:12px;color:var(--text-secondary)}.status-indicator{width:8px;height:8px;border-radius:50%;background:var(--accent-red);transition:background .3s}.status-indicator.status-online{background:var(--accent-green);box-shadow:0 0 8px var(--accent-green)}.header-center{display:flex;gap:var(--spacing-xl)}.solar-info{display:flex;gap:var(--spacing-md);font-size:12px}.solar-item{color:var(--text-secondary)}.solar-item .value{color:var(--accent-cyan);font-weight:600;margin-left:var(--spacing-xs)}.header-right{display:flex;align-items:center;gap:var(--spacing-lg)}.weather-info{display:flex;gap:var(--spacing-md);font-size:12px;color:var(--text-secondary)}.clock{display:flex;flex-direction:column;align-items:flex-end;font-size:11px}.clock .time{font-size:14px;font-weight:600;color:var(--text-primary)}.clock .date{color:var(--text-secondary)}main{flex:1;overflow-y:auto;padding:var(--spacing-md)}.dashboard-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:var(--spacing-md);max-width:1800px;margin:0 auto}.card{background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:var(--card-radius);padding:var(--spacing-md);box-shadow:var(--card-shadow);transition:border-color .2s}.card:hover{border-color:var(--border-light)}.card h2{font-size:14px;font-weight:600;color:var(--accent-cyan);margin-bottom:var(--spacing-md);display:flex;align-items:center;gap:var(--spacing-sm);letter-spacing:.5px}.card h2:before{content:"";width:3px;height:14px;background:var(--accent-cyan);border-radius:2px}.status-dot{width:8px;height:8px;border-radius:50%;background:var(--accent-green)}.status-dot.disconnected{background:var(--accent-red)}.label{font-size:11px;color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px;margin-bottom:var(--spacing-xs)}.value{font-size:18px;font-weight:300;color:var(--text-primary)}button,.button{background:var(--bg-tertiary);color:var(--text-primary);border:1px solid var(--border-color);border-radius:4px;padding:var(--spacing-sm) var(--spacing-md);font-size:12px;font-weight:500;cursor:pointer;transition:all .2s;text-transform:uppercase;letter-spacing:.5px}button:hover,.button:hover{background:var(--bg-hover);border-color:var(--border-light)}button:active,.button:active{transform:scale(.98)}button.primary{background:var(--accent-cyan);border-color:var(--accent-cyan);color:#000}button.primary:hover{background:#29b6f6;border-color:#29b6f6}button.success{background:var(--accent-green);border-color:var(--accent-green);color:#fff}button.danger{background:var(--accent-red);border-color:var(--accent-red);color:#fff}button:disabled{opacity:.5;cursor:not-allowed}select{background:var(--bg-tertiary);color:var(--text-primary);border:1px solid var(--border-color);border-radius:4px;padding:var(--spacing-sm);font-size:12px;cursor:pointer;outline:none;transition:all .2s}select:hover{border-color:var(--border-light)}select:focus{border-color:var(--accent-cyan)}.badge{display:inline-block;padding:4px 10px;border-radius:12px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.5px}.badge.green{background:#4caf5033;color:var(--accent-green)}.badge.red{background:#f4433633;color:var(--accent-red)}.badge.orange{background:#ff980033;color:var(--accent-orange)}.badge.cyan{background:#4fc3f733;color:var(--accent-cyan)}.badge.purple{background:#9c27b033;color:var(--accent-purple)}.bar{width:100%;height:6px;background:var(--bg-tertiary);border-radius:3px;overflow:hidden;margin:var(--spacing-xs) 0}.bar-fill{height:100%;background:linear-gradient(90deg,var(--accent-green),var(--accent-orange),var(--accent-red));transition:width .3s ease;border-radius:3px}.scale{display:flex;justify-content:space-between;font-size:10px;color:var(--text-muted);margin-top:var(--spacing-xs)}.metrics{display:flex;flex-direction:column;gap:var(--spacing-md)}.metric{display:flex;flex-direction:column;gap:var(--spacing-xs)}.metric-row{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--spacing-md)}.metric.small{min-width:0}.metric-value{display:flex;justify-content:space-between;align-items:baseline;flex-wrap:wrap}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:var(--bg-primary)}::-webkit-scrollbar-thumb{background:var(--bg-tertiary);border-radius:4px}::-webkit-scrollbar-thumb:hover{background:var(--bg-hover)}@media (max-width: 1400px){.dashboard-grid{grid-template-columns:repeat(auto-fit,minmax(250px,1fr))}}@media (max-width: 768px){header{flex-direction:column;height:auto;padding:var(--spacing-sm);gap:var(--spacing-sm)}.dashboard-grid{grid-template-columns:1fr}.header-center{order:3;width:100%}} diff --git a/cmd/server/web/dist/assets/index-CZJHCP4k.js b/cmd/server/web/dist/assets/index-CZJHCP4k.js new file mode 100644 index 0000000..6314285 --- /dev/null +++ b/cmd/server/web/dist/assets/index-CZJHCP4k.js @@ -0,0 +1,11 @@ +var Ql=Object.defineProperty;var xl=(e,l,s)=>l in e?Ql(e,l,{enumerable:!0,configurable:!0,writable:!0,value:s}):e[l]=s;var Wt=(e,l,s)=>xl(e,typeof l!="symbol"?l+"":l,s);(function(){const l=document.createElement("link").relList;if(l&&l.supports&&l.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))i(o);new MutationObserver(o=>{for(const r of o)if(r.type==="childList")for(const f of r.addedNodes)f.tagName==="LINK"&&f.rel==="modulepreload"&&i(f)}).observe(document,{childList:!0,subtree:!0});function s(o){const r={};return o.integrity&&(r.integrity=o.integrity),o.referrerPolicy&&(r.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?r.credentials="include":o.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function i(o){if(o.ep)return;o.ep=!0;const r=s(o);fetch(o.href,r)}})();function we(){}function Jl(e){return e()}function fl(){return Object.create(null)}function nt(e){e.forEach(Jl)}function Xl(e){return typeof e=="function"}function ot(e,l){return e!=e?l==l:e!==l||e&&typeof e=="object"||typeof e=="function"}function $l(e){return Object.keys(e).length===0}function n(e,l){e.appendChild(l)}function L(e,l,s){e.insertBefore(l,s||null)}function E(e){e.parentNode&&e.parentNode.removeChild(e)}function Dt(e,l){for(let s=0;se.removeEventListener(l,s,i)}function t(e,l,s){s==null?e.removeAttribute(l):e.getAttribute(l)!==s&&e.setAttribute(l,s)}function en(e){return Array.from(e.childNodes)}function R(e,l){l=""+l,e.data!==l&&(e.data=l)}function Pt(e,l){e.value=l??""}function ae(e,l,s,i){s==null?e.style.removeProperty(l):e.style.setProperty(l,s,"")}function It(e,l,s){for(let i=0;ie.indexOf(i)===-1?l.push(i):s.push(i)),s.forEach(i=>i()),kt=l}const Ot=new Set;let on;function ct(e,l){e&&e.i&&(Ot.delete(e),e.i(l))}function mt(e,l,s,i){if(e&&e.o){if(Ot.has(e))return;Ot.add(e),on.c.push(()=>{Ot.delete(e)}),e.o(l)}}function ut(e){return(e==null?void 0:e.length)!==void 0?e:Array.from(e)}function bt(e){e&&e.c()}function dt(e,l,s){const{fragment:i,after_update:o}=e.$$;i&&i.m(l,s),Nt(()=>{const r=e.$$.on_mount.map(Jl).filter(Xl);e.$$.on_destroy?e.$$.on_destroy.push(...r):nt(r),e.$$.on_mount=[]}),o.forEach(Nt)}function ft(e,l){const s=e.$$;s.fragment!==null&&(an(s.after_update),nt(s.on_destroy),s.fragment&&s.fragment.d(l),s.on_destroy=s.fragment=null,s.ctx=[])}function rn(e,l){e.$$.dirty[0]===-1&&(yt.push(e),nn(),e.$$.dirty.fill(0)),e.$$.dirty[l/31|0]|=1<{const p=g.length?g[0]:w;return c.ctx&&o(c.ctx[u],c.ctx[u]=p)&&(!c.skip_bound&&c.bound[u]&&c.bound[u](p),h&&rn(e,u)),w}):[],c.update(),h=!0,nt(c.before_update),c.fragment=i?i(c.ctx):!1,l.target){if(l.hydrate){const u=en(l.target);c.fragment&&c.fragment.l(u),u.forEach(E)}else c.fragment&&c.fragment.c();l.intro&&ct(e.$$.fragment),dt(e,l.target,l.anchor),Kl()}Ct(v)}class pt{constructor(){Wt(this,"$$");Wt(this,"$$set")}$destroy(){ft(this,1),this.$destroy=we}$on(l,s){if(!Xl(s))return we;const i=this.$$.callbacks[l]||(this.$$.callbacks[l]=[]);return i.push(s),()=>{const o=i.indexOf(s);o!==-1&&i.splice(o,1)}}$set(l){this.$$set&&!$l(l)&&(this.$$.skip_bound=!0,this.$$set(l),this.$$.skip_bound=!1)}}const cn="4";typeof window<"u"&&(window.__svelte||(window.__svelte={v:new Set})).v.add(cn);const _t=[];function qt(e,l=we){let s;const i=new Set;function o(d){if(ot(e,d)&&(e=d,s)){const v=!_t.length;for(const c of i)c[1](),_t.push(c,e);if(v){for(let c=0;c<_t.length;c+=2)_t[c][0](_t[c+1]);_t.length=0}}}function r(d){o(d(e))}function f(d,v=we){const c=[d,v];return i.add(c),i.size===1&&(s=l(o,r)||we),d(e),()=>{i.delete(c),i.size===0&&s&&(s(),s=null)}}return{set:o,update:r,subscribe:f}}const jt=qt(!1),Hl=qt(null),dn=qt(null);class fn{constructor(){this.ws=null,this.reconnectTimeout=null,this.reconnectDelay=3e3}connect(){const s=`${window.location.protocol==="https:"?"wss:":"ws:"}//${window.location.host}/ws`;try{this.ws=new WebSocket(s),this.ws.onopen=()=>{console.log("WebSocket connected"),jt.set(!0)},this.ws.onmessage=i=>{try{const o=JSON.parse(i.data);o.type==="update"&&(console.log("System status updated:",o.data),Hl.set(o.data),dn.set(new Date(o.timestamp)))}catch(o){console.error("Error parsing message:",o)}},this.ws.onerror=i=>{console.error("WebSocket error:",i)},this.ws.onclose=()=>{console.log("WebSocket disconnected"),jt.set(!1),this.scheduleReconnect()}}catch(i){console.error("Error creating WebSocket:",i),this.scheduleReconnect()}}scheduleReconnect(){this.reconnectTimeout&&clearTimeout(this.reconnectTimeout),this.reconnectTimeout=setTimeout(()=>{console.log("Attempting to reconnect..."),this.connect()},this.reconnectDelay)}send(l){this.ws&&this.ws.readyState===WebSocket.OPEN&&this.ws.send(JSON.stringify(l))}disconnect(){this.reconnectTimeout&&clearTimeout(this.reconnectTimeout),this.ws&&this.ws.close()}}const pl=new fn,un="/api";async function ke(e,l={}){try{const s=await fetch(`${un}${e}`,{...l,headers:{"Content-Type":"application/json",...l.headers}});if(!s.ok)throw new Error(`HTTP error! status: ${s.status}`);return await s.json()}catch(s){throw console.error("API request failed:",s),s}}const Oe={getStatus:()=>ke("/status"),getConfig:()=>ke("/config"),webswitch:{relayOn:e=>ke(`/webswitch/relay/on?relay=${e}`,{method:"POST"}),relayOff:e=>ke(`/webswitch/relay/off?relay=${e}`,{method:"POST"}),allOn:()=>ke("/webswitch/all/on",{method:"POST"}),allOff:()=>ke("/webswitch/all/off",{method:"POST"})},rotator:{move:(e,l)=>ke("/rotator/move",{method:"POST",body:JSON.stringify({rotator:e,azimuth:l})}),cw:e=>ke(`/rotator/cw?rotator=${e}`,{method:"POST"}),ccw:e=>ke(`/rotator/ccw?rotator=${e}`,{method:"POST"}),stop:()=>ke("/rotator/stop",{method:"POST"})},tuner:{setOperate:e=>ke("/tuner/operate",{method:"POST",body:JSON.stringify({value:e})}),setBypass:e=>ke("/tuner/bypass",{method:"POST",body:JSON.stringify({value:e})}),autoTune:()=>ke("/tuner/autotune",{method:"POST"})},antenna:{selectAntenna:(e,l)=>ke("/antenna/select",{method:"POST",body:JSON.stringify({port:e,antenna:l})}),deselectAntenna:(e,l)=>ke("/antenna/deselect",{method:"POST",body:JSON.stringify({port:e,antenna:l})}),reboot:()=>ke("/antenna/reboot",{method:"POST"})},power:{setFanMode:e=>ke("/power/fanmode",{method:"POST",body:JSON.stringify({mode:e})}),setOperate:e=>ke("/power/operate",{method:"POST",body:JSON.stringify({value:e})})},rotator:{setHeading:e=>ke("/rotator/heading",{method:"POST",body:JSON.stringify({heading:e})}),rotateCW:()=>ke("/rotator/cw",{method:"POST"}),rotateCCW:()=>ke("/rotator/ccw",{method:"POST"}),stop:()=>ke("/rotator/stop",{method:"POST"})},ultrabeam:{setFrequency:(e,l)=>ke("/ultrabeam/frequency",{method:"POST",body:JSON.stringify({frequency:e,direction:l})}),retract:()=>ke("/ultrabeam/retract",{method:"POST"}),setAutoTrack:(e,l)=>ke("/ultrabeam/autotrack",{method:"POST",body:JSON.stringify({enabled:e,threshold:l})}),setDirection:e=>ke("/ultrabeam/direction",{method:"POST",body:JSON.stringify({direction:e})})}};function vn(e){let l;return{c(){l=a("span"),l.textContent="Checking FlexRadio...",t(l,"class","no-signal svelte-h7ie36")},m(s,i){L(s,l,i)},p:we,d(s){s&&E(l)}}}function pn(e){let l;return{c(){l=a("span"),l.textContent="FlexRadio not connected",t(l,"class","no-signal svelte-h7ie36")},m(s,i){L(s,l,i)},p:we,d(s){s&&E(l)}}}function hn(e){let l;return{c(){l=a("div"),l.innerHTML=' TCP connected, radio off',t(l,"class","radio-status svelte-h7ie36")},m(s,i){L(s,l,i)},p:we,d(s){s&&E(l)}}}function mn(e){let l,s,i,o,r=(e[11]||"Radio is on")+"",f,d,v,c=e[9]&&hl(e),h=e[10]&&ml(e);return{c(){l=a("div"),s=a("span"),s.textContent="●",i=b(),o=a("span"),f=z(r),d=b(),c&&c.c(),v=b(),h&&h.c(),t(s,"class","radio-on-indicator svelte-h7ie36"),t(o,"class","radio-status-text svelte-h7ie36"),t(l,"class","radio-status svelte-h7ie36")},m(u,w){L(u,l,w),n(l,s),n(l,i),n(l,o),n(o,f),n(l,d),c&&c.m(l,null),n(l,v),h&&h.m(l,null)},p(u,w){w[0]&2048&&r!==(r=(u[11]||"Radio is on")+"")&&R(f,r),u[9]?c?c.p(u,w):(c=hl(u),c.c(),c.m(l,v)):c&&(c.d(1),c=null),u[10]?h?h.p(u,w):(h=ml(u),h.c(),h.m(l,null)):h&&(h.d(1),h=null)},d(u){u&&E(l),c&&c.d(),h&&h.d()}}}function bn(e){let l,s,i,o,r,f,d=e[9]&&bl(e),v=e[10]&&gl(e);return{c(){l=a("div"),s=a("span"),s.textContent="●",i=b(),o=a("span"),o.textContent="Slice active, waiting for frequency...",r=b(),d&&d.c(),f=b(),v&&v.c(),t(s,"class","radio-on-indicator svelte-h7ie36"),t(o,"class","radio-status-text svelte-h7ie36"),t(l,"class","radio-status svelte-h7ie36")},m(c,h){L(c,l,h),n(l,s),n(l,i),n(l,o),n(l,r),d&&d.m(l,null),n(l,f),v&&v.m(l,null)},p(c,h){c[9]?d?d.p(c,h):(d=bl(c),d.c(),d.m(l,f)):d&&(d.d(1),d=null),c[10]?v?v.p(c,h):(v=gl(c),v.c(),v.m(l,null)):v&&(v.d(1),v=null)},d(c){c&&E(l),d&&d.d(),v&&v.d()}}}function gn(e){let l,s,i=Cl(e[3])+"",o,r,f,d,v,c,h,u=e[4]&&wl(e),w=e[25]&&_l(e),g=e[24]&&yl();return{c(){l=a("div"),s=a("span"),o=z(i),r=b(),f=a("span"),f.textContent="MHz",d=b(),u&&u.c(),v=b(),w&&w.c(),c=b(),g&&g.c(),h=At(),t(s,"class","frequency svelte-h7ie36"),ae(s,"--band-color",e[22]),t(f,"class","unit svelte-h7ie36"),t(l,"class","frequency-display svelte-h7ie36")},m(p,k){L(p,l,k),n(l,s),n(s,o),n(l,r),n(l,f),L(p,d,k),u&&u.m(p,k),L(p,v,k),w&&w.m(p,k),L(p,c,k),g&&g.m(p,k),L(p,h,k)},p(p,k){k[0]&8&&i!==(i=Cl(p[3])+"")&&R(o,i),k[0]&4194304&&ae(s,"--band-color",p[22]),p[4]?u?u.p(p,k):(u=wl(p),u.c(),u.m(v.parentNode,v)):u&&(u.d(1),u=null),p[25]?w?w.p(p,k):(w=_l(p),w.c(),w.m(c.parentNode,c)):w&&(w.d(1),w=null),p[24]?g||(g=yl(),g.c(),g.m(h.parentNode,h)):g&&(g.d(1),g=null)},d(p){p&&(E(l),E(d),E(v),E(c),E(h)),u&&u.d(p),w&&w.d(p),g&&g.d(p)}}}function hl(e){let l,s;return{c(){l=a("span"),s=z(e[9]),t(l,"class","model-badge svelte-h7ie36")},m(i,o){L(i,l,o),n(l,s)},p(i,o){o[0]&512&&R(s,i[9])},d(i){i&&E(l)}}}function ml(e){let l,s;return{c(){l=a("span"),s=z(e[10]),t(l,"class","callsign-badge svelte-h7ie36")},m(i,o){L(i,l,o),n(l,s)},p(i,o){o[0]&1024&&R(s,i[10])},d(i){i&&E(l)}}}function bl(e){let l,s;return{c(){l=a("span"),s=z(e[9]),t(l,"class","model-badge svelte-h7ie36")},m(i,o){L(i,l,o),n(l,s)},p(i,o){o[0]&512&&R(s,i[9])},d(i){i&&E(l)}}}function gl(e){let l,s;return{c(){l=a("span"),s=z(e[10]),t(l,"class","callsign-badge svelte-h7ie36")},m(i,o){L(i,l,o),n(l,s)},p(i,o){o[0]&1024&&R(s,i[10])},d(i){i&&E(l)}}}function wl(e){let l,s;return{c(){l=a("span"),s=z(e[4]),t(l,"class","band-badge svelte-h7ie36"),ae(l,"background-color",e[22])},m(i,o){L(i,l,o),n(l,s)},p(i,o){o[0]&16&&R(s,i[4]),o[0]&4194304&&ae(l,"background-color",i[22])},d(i){i&&E(l)}}}function _l(e){let l,s;return{c(){l=a("span"),s=z(e[25]),t(l,"class","mode-badge svelte-h7ie36")},m(i,o){L(i,l,o),n(l,s)},p(i,o){o[0]&33554432&&R(s,i[25])},d(i){i&&E(l)}}}function yl(e){let l;return{c(){l=a("span"),l.textContent="TX",t(l,"class","tx-indicator svelte-h7ie36")},m(s,i){L(s,l,i)},d(s){s&&E(l)}}}function wn(e){let l;return{c(){l=a("span"),l.textContent="📍 Position not set",t(l,"class","no-location svelte-h7ie36")},m(s,i){L(s,l,i)},p:we,d(s){s&&E(l)}}}function _n(e){let l,s,i,o,r,f,d,v,c=Ft(e[12])+"",h,u,w,g,p,k,y,M,T,m=Ft(e[13])+"",C,A,S;function F(O,J){if(O[14])return kn;if(O[16])return yn}let _=F(e),I=_&&_(e);return{c(){l=a("div"),s=a("span"),i=D("svg"),o=D("line"),r=D("path"),f=D("path"),d=D("path"),v=b(),h=z(c),u=b(),w=a("span"),g=D("svg"),p=D("line"),k=D("path"),y=D("path"),M=D("path"),T=b(),C=z(m),A=b(),I&&I.c(),S=At(),t(o,"x1","2"),t(o,"y1","18"),t(o,"x2","22"),t(o,"y2","18"),t(o,"stroke","currentColor"),t(o,"stroke-width","1.5"),t(o,"opacity","0.5"),t(r,"d","M12 18 A6 6 0 0 1 12 6 A6 6 0 0 1 12 18"),t(r,"fill","#fbbf24"),t(f,"d","M12 2v3M5.6 5.6l2.1 2.1M2 12h3M19 12h3M18.4 5.6l-2.1 2.1"),t(f,"stroke","#fbbf24"),t(f,"stroke-width","2"),t(f,"stroke-linecap","round"),t(d,"d","M12 14l-3 3M12 14l3 3M12 14v5"),t(d,"stroke","#22c55e"),t(d,"stroke-width","2"),t(d,"stroke-linecap","round"),t(d,"fill","none"),t(i,"class","sun-icon sunrise-icon svelte-h7ie36"),t(i,"width","18"),t(i,"height","18"),t(i,"viewBox","0 0 24 24"),t(s,"class","sun-item svelte-h7ie36"),t(s,"title","Sunrise"),t(p,"x1","2"),t(p,"y1","18"),t(p,"x2","22"),t(p,"y2","18"),t(p,"stroke","currentColor"),t(p,"stroke-width","1.5"),t(p,"opacity","0.5"),t(k,"d","M12 18 A6 6 0 0 1 12 6 A6 6 0 0 1 12 18"),t(k,"fill","#f97316"),t(y,"d","M12 2v3M5.6 5.6l2.1 2.1M2 12h3M19 12h3M18.4 5.6l-2.1 2.1"),t(y,"stroke","#f97316"),t(y,"stroke-width","2"),t(y,"stroke-linecap","round"),t(y,"opacity","0.7"),t(M,"d","M12 22l-3-3M12 22l3-3M12 22v-5"),t(M,"stroke","#ef4444"),t(M,"stroke-width","2"),t(M,"stroke-linecap","round"),t(M,"fill","none"),t(g,"class","sun-icon sunset-icon svelte-h7ie36"),t(g,"width","18"),t(g,"height","18"),t(g,"viewBox","0 0 24 24"),t(w,"class","sun-item svelte-h7ie36"),t(w,"title","Sunset"),t(l,"class","sun-times svelte-h7ie36")},m(O,J){L(O,l,J),n(l,s),n(s,i),n(i,o),n(i,r),n(i,f),n(i,d),n(s,v),n(s,h),n(l,u),n(l,w),n(w,g),n(g,p),n(g,k),n(g,y),n(g,M),n(w,T),n(w,C),L(O,A,J),I&&I.m(O,J),L(O,S,J)},p(O,J){J[0]&4096&&c!==(c=Ft(O[12])+"")&&R(h,c),J[0]&8192&&m!==(m=Ft(O[13])+"")&&R(C,m),_===(_=F(O))&&I?I.p(O,J):(I&&I.d(1),I=_&&_(O),I&&(I.c(),I.m(S.parentNode,S)))},d(O){O&&(E(l),E(A),E(S)),I&&I.d(O)}}}function yn(e){let l,s;return{c(){l=a("span"),s=z(e[16]),t(l,"class","next-event svelte-h7ie36")},m(i,o){L(i,l,o),n(l,s)},p(i,o){o[0]&65536&&R(s,i[16])},d(i){i&&E(l)}}}function kn(e){let l;return{c(){l=a("span"),l.textContent="✨ Grayline",t(l,"class","grayline-badge svelte-h7ie36"),W(l,"sunrise",e[15]==="sunrise"),W(l,"sunset",e[15]==="sunset")},m(s,i){L(s,l,i)},p(s,i){i[0]&32768&&W(l,"sunrise",s[15]==="sunrise"),i[0]&32768&&W(l,"sunset",s[15]==="sunset")},d(s){s&&E(l)}}}function kl(e){let l,s,i,o,r,f,d=e[8].toFixed(0)+"",v,c;return{c(){l=a("div"),s=a("span"),s.textContent="⚠️",i=b(),o=a("span"),r=z("Vent: "),f=a("strong"),v=z(d),c=z(" km/h"),t(s,"class","alert-icon svelte-h7ie36"),t(f,"class","svelte-h7ie36"),t(o,"class","alert-text svelte-h7ie36"),t(l,"class","alert wind-alert svelte-h7ie36")},m(h,u){L(h,l,u),n(l,s),n(l,i),n(l,o),n(o,r),n(o,f),n(f,v),n(f,c)},p(h,u){u[0]&256&&d!==(d=h[8].toFixed(0)+"")&&R(v,d)},d(h){h&&E(l)}}}function Ml(e){let l,s,i,o,r,f,d=e[7].toFixed(0)+"",v,c;return{c(){l=a("div"),s=a("span"),s.textContent="🌪️",i=b(),o=a("span"),r=z("Rafales: "),f=a("strong"),v=z(d),c=z(" km/h"),t(s,"class","alert-icon svelte-h7ie36"),t(f,"class","svelte-h7ie36"),t(o,"class","alert-text svelte-h7ie36"),t(l,"class","alert gust-alert svelte-h7ie36")},m(h,u){L(h,l,u),n(l,s),n(l,i),n(l,o),n(o,r),n(o,f),n(f,v),n(f,c)},p(h,u){u[0]&128&&d!==(d=h[7].toFixed(0)+"")&&R(v,d)},d(h){h&&E(l)}}}function zl(e){let l;return{c(){l=a("div"),l.innerHTML=' Weather OK',t(l,"class","status-ok svelte-h7ie36")},m(s,i){L(s,l,i)},d(s){s&&E(l)}}}function Mn(e){let l,s,i,o,r,f,d,v,c,h,u,w,g,p;function k(_,I){return _[21]?gn:_[19]?bn:_[20]?mn:_[17]?hn:_[18]?pn:vn}let y=k(e),M=y(e);function T(_,I){return _[0]&&_[1]?_n:wn}let m=T(e),C=m(e),A=e[6]&&kl(e),S=e[5]&&Ml(e),F=!e[23]&&zl();return{c(){l=a("div"),s=a("div"),i=a("div"),i.textContent="📻",o=b(),M.c(),r=b(),f=a("div"),d=b(),v=a("div"),C.c(),c=b(),h=a("div"),u=b(),w=a("div"),A&&A.c(),g=b(),S&&S.c(),p=b(),F&&F.c(),t(i,"class","flex-icon svelte-h7ie36"),W(i,"connected",e[2]),W(i,"disconnected",!e[2]),t(s,"class","flex-section svelte-h7ie36"),t(f,"class","separator svelte-h7ie36"),t(v,"class","grayline-section svelte-h7ie36"),t(h,"class","separator svelte-h7ie36"),t(w,"class","weather-section svelte-h7ie36"),t(l,"class","status-banner svelte-h7ie36"),W(l,"has-warning",e[23])},m(_,I){L(_,l,I),n(l,s),n(s,i),n(s,o),M.m(s,null),n(l,r),n(l,f),n(l,d),n(l,v),C.m(v,null),n(l,c),n(l,h),n(l,u),n(l,w),A&&A.m(w,null),n(w,g),S&&S.m(w,null),n(w,p),F&&F.m(w,null)},p(_,I){I[0]&4&&W(i,"connected",_[2]),I[0]&4&&W(i,"disconnected",!_[2]),y===(y=k(_))&&M?M.p(_,I):(M.d(1),M=y(_),M&&(M.c(),M.m(s,null))),m===(m=T(_))&&C?C.p(_,I):(C.d(1),C=m(_),C&&(C.c(),C.m(v,null))),_[6]?A?A.p(_,I):(A=kl(_),A.c(),A.m(w,g)):A&&(A.d(1),A=null),_[5]?S?S.p(_,I):(S=Ml(_),S.c(),S.m(w,p)):S&&(S.d(1),S=null),_[23]?F&&(F.d(1),F=null):F||(F=zl(),F.c(),F.m(w,null)),I[0]&8388608&&W(l,"has-warning",_[23])},i:we,o:we,d(_){_&&E(l),M.d(),C.d(),A&&A.d(),S&&S.d(),F&&F.d()}}}function Tl(e,l,s){const i=Math.PI/180,o=zn(e),r=2*Math.PI/365*(o-1+(e.getHours()-12)/24),f=229.18*(75e-6+.001868*Math.cos(r)-.032077*Math.sin(r)-.014615*Math.cos(2*r)-.040849*Math.sin(2*r)),d=.006918-.399912*Math.cos(r)+.070257*Math.sin(r)-.006758*Math.cos(2*r)+907e-6*Math.sin(2*r)-.002697*Math.cos(3*r)+.00148*Math.sin(3*r),v=l*i,c=90.833*i,h=Math.cos(c)/(Math.cos(v)*Math.cos(d))-Math.tan(v)*Math.tan(d);if(h>1||h<-1)return{sunrise:null,sunset:null};const u=Math.acos(h)/i,w=720-4*(s+u)-f,g=720-4*(s-u)-f,p=new Date(e);p.setUTCHours(0,0,0,0),p.setUTCMinutes(w);const k=new Date(e);return k.setUTCHours(0,0,0,0),k.setUTCMinutes(g),{sunrise:p,sunset:k}}function zn(e){const l=new Date(e.getFullYear(),0,0),s=e-l,i=1e3*60*60*24;return Math.floor(s/i)}function Ft(e){return e?e.toLocaleTimeString("fr-FR",{hour:"2-digit",minute:"2-digit"}):"--:--"}function Cl(e){return!e||e===0?"---":e<10?e.toFixed(4):e<100?e.toFixed(3):e.toFixed(2)}function Tn(e){return!e||e===0?"":e>=1.8&&e<=2?"160M":e>=3.5&&e<=4?"80M":e>=5.3&&e<=5.4?"60M":e>=7&&e<=7.3?"40M":e>=10.1&&e<=10.15?"30M":e>=14&&e<=14.35?"20M":e>=18.068&&e<=18.168?"17M":e>=21&&e<=21.45?"15M":e>=24.89&&e<=24.99?"12M":e>=28&&e<=29.7?"10M":e>=50&&e<=54?"6M":e>=144&&e<=148?"2M":e>=430&&e<=440?"70CM":""}function Cn(e){return{"160M":"#9c27b0","80M":"#673ab7","60M":"#3f51b5","40M":"#2196f3","30M":"#00bcd4","20M":"#009688","17M":"#4caf50","15M":"#8bc34a","12M":"#cddc39","10M":"#ffeb3b","6M":"#ff9800","2M":"#ff5722","70CM":"#f44336"}[e]||"#4fc3f7"}function Sn(e,l,s){let i,o,r,f,d,v,c,h,u,w,g,p,k,y,M,T,m,C,A,S,F,{flexradio:_=null}=l,{weather:I=null}=l,{latitude:O=null}=l,{longitude:J=null}=l,{windWarningThreshold:$=30}=l,{gustWarningThreshold:re=50}=l,{graylineWindow:H=30}=l,P=null,le=null,U=!1,N="",B="",se=new Date,K;Vl(()=>{fe(),K=setInterval(()=>{se=new Date,Me(),ee()},1e4)}),Zl(()=>{K&&clearInterval(K)});function fe(){if(!O||!J)return;const Z=Tl(new Date,O,J);s(12,P=Z.sunrise),s(13,le=Z.sunset),Me(),ee()}function Me(){if(!P||!le){s(14,U=!1);return}const V=se.getTime(),Z=H*60*1e3,ie=Math.abs(V-P.getTime())<=Z,ce=Math.abs(V-le.getTime())<=Z;s(14,U=ie||ce),s(15,N=ie?"sunrise":ce?"sunset":"")}function ee(){if(!P||!le){s(16,B="");return}const V=se.getTime();let Z=null,ie="";if(V0?s(16,B=`${ie} in ${oe}h${ue.toString().padStart(2,"0")}m`):s(16,B=`${ie} in ${ue}m`)}}return e.$$set=V=>{"flexradio"in V&&s(26,_=V.flexradio),"weather"in V&&s(27,I=V.weather),"latitude"in V&&s(0,O=V.latitude),"longitude"in V&&s(1,J=V.longitude),"windWarningThreshold"in V&&s(28,$=V.windWarningThreshold),"gustWarningThreshold"in V&&s(29,re=V.gustWarningThreshold),"graylineWindow"in V&&s(30,H=V.graylineWindow)},e.$$.update=()=>{e.$$.dirty[0]&67108864&&s(3,i=(_==null?void 0:_.frequency)||0),e.$$.dirty[0]&67108864&&s(25,o=(_==null?void 0:_.mode)||""),e.$$.dirty[0]&67108864&&s(24,r=(_==null?void 0:_.tx)||!1),e.$$.dirty[0]&67108864&&s(2,f=(_==null?void 0:_.connected)||!1),e.$$.dirty[0]&67108864&&s(31,d=(_==null?void 0:_.radio_on)||!1),e.$$.dirty[0]&67108864&&s(11,v=(_==null?void 0:_.radio_info)||""),e.$$.dirty[0]&67108864&&s(10,c=(_==null?void 0:_.callsign)||""),e.$$.dirty[0]&67108864&&s(9,h=(_==null?void 0:_.model)||""),e.$$.dirty[0]&67108864&&s(32,u=(_==null?void 0:_.active_slices)||0),e.$$.dirty[0]&3&&O&&J&&fe(),e.$$.dirty[0]&3596|e.$$.dirty[1]&3&&console.log("FlexRadio status:",{connected:f,radioOn:d,frequency:i,activeSlices:u,radioInfo:v,callsign:c,model:h}),e.$$.dirty[0]&134217728&&s(8,w=(I==null?void 0:I.wind_speed)||0),e.$$.dirty[0]&134217728&&s(7,g=(I==null?void 0:I.wind_gust)||0),e.$$.dirty[0]&268435712&&s(6,p=w>=$),e.$$.dirty[0]&536871040&&s(5,k=g>=re),e.$$.dirty[0]&96&&s(23,y=p||k),e.$$.dirty[0]&8&&s(4,M=Tn(i)),e.$$.dirty[0]&16&&s(22,T=Cn(M)),e.$$.dirty[0]&8|e.$$.dirty[1]&1&&s(21,m=d&&i>0),e.$$.dirty[0]&8|e.$$.dirty[1]&3&&s(20,C=d&&i===0&&u===0),e.$$.dirty[0]&8|e.$$.dirty[1]&3&&s(19,A=d&&i===0&&u>0),e.$$.dirty[0]&4&&s(18,S=!f),e.$$.dirty[0]&4|e.$$.dirty[1]&1&&s(17,F=f&&!d)},[O,J,f,i,M,k,p,g,w,h,c,v,P,le,U,N,B,F,S,A,C,m,T,y,r,o,_,I,$,re,H,d,u]}class Fn extends pt{constructor(l){super(),vt(this,l,Sn,Mn,ot,{flexradio:26,weather:27,latitude:0,longitude:1,windWarningThreshold:28,gustWarningThreshold:29,graylineWindow:30},null,[-1,-1])}}function Sl(e,l,s){var f;const i=e.slice();i[10]=l[s];const o=i[1].find(function(...v){return e[9](i[10],...v)});i[11]=o;const r=((f=i[11])==null?void 0:f.state)||!1;return i[12]=r,i}function Fl(e){let l,s,i,o,r,f,d=e[12]?"ON":"OFF",v,c,h,u,w,g,p,k;function y(){return e[8](e[10])}return{c(){l=a("div"),s=a("div"),i=a("div"),o=a("div"),o.textContent=`${e[3][e[10]]}`,r=b(),f=a("div"),v=z(d),c=b(),h=a("button"),u=a("div"),u.innerHTML='
',g=b(),t(o,"class","relay-name svelte-z2csmj"),t(f,"class","relay-status svelte-z2csmj"),t(i,"class","relay-details svelte-z2csmj"),t(s,"class","relay-info svelte-z2csmj"),t(u,"class","toggle-track svelte-z2csmj"),t(h,"class","relay-toggle svelte-z2csmj"),h.disabled=w=e[0][e[10]],W(h,"active",e[12]),W(h,"loading",e[0][e[10]]),t(l,"class","relay-card svelte-z2csmj"),W(l,"relay-on",e[12])},m(M,T){L(M,l,T),n(l,s),n(s,i),n(i,o),n(i,r),n(i,f),n(f,v),n(l,c),n(l,h),n(h,u),n(l,g),p||(k=Ce(h,"click",y),p=!0)},p(M,T){e=M,T&2&&d!==(d=e[12]?"ON":"OFF")&&R(v,d),T&1&&w!==(w=e[0][e[10]])&&(h.disabled=w),T&2&&W(h,"active",e[12]),T&1&&W(h,"loading",e[0][e[10]]),T&2&&W(l,"relay-on",e[12])},d(M){M&&E(l),p=!1,k()}}}function Pn(e){let l,s,i,o,r,f,d,v,c,h,u,w,g,p,k,y=ut([1,2,3,4,5]),M=[];for(let T=0;T<5;T+=1)M[T]=Fl(Sl(e,y,T));return{c(){l=a("div"),s=a("div"),i=a("h2"),i.textContent="WebSwitch",o=b(),r=a("span"),f=b(),d=a("div"),v=a("div");for(let T=0;T<5;T+=1)M[T].c();c=b(),h=a("div"),u=a("button"),u.innerHTML=` + ALL ON`,w=b(),g=a("button"),g.innerHTML=` + ALL OFF`,t(i,"class","svelte-z2csmj"),t(r,"class","status-dot svelte-z2csmj"),W(r,"disconnected",!e[2]),t(s,"class","card-header svelte-z2csmj"),t(v,"class","relays svelte-z2csmj"),t(u,"class","control-btn all-on svelte-z2csmj"),t(g,"class","control-btn all-off svelte-z2csmj"),t(h,"class","controls svelte-z2csmj"),t(d,"class","metrics svelte-z2csmj"),t(l,"class","card svelte-z2csmj")},m(T,m){L(T,l,m),n(l,s),n(s,i),n(s,o),n(s,r),n(l,f),n(l,d),n(d,v);for(let C=0;C<5;C+=1)M[C]&&M[C].m(v,null);n(d,c),n(d,h),n(h,u),n(h,w),n(h,g),p||(k=[Ce(u,"click",e[5]),Ce(g,"click",e[6])],p=!0)},p(T,[m]){if(m&4&&W(r,"disconnected",!T[2]),m&27){y=ut([1,2,3,4,5]);let C;for(C=0;C<5;C+=1){const A=Sl(T,y,C);M[C]?M[C].p(A,m):(M[C]=Fl(A),M[C].c(),M[C].m(v,null))}for(;C<5;C+=1)M[C].d(1)}},i:we,o:we,d(T){T&&E(l),Dt(M,T),p=!1,nt(k)}}}function On(e,l,s){let i,o,{status:r}=l;const f={1:"Power Supply",2:"PGXL",3:"TGXL",4:"Flex Radio Start",5:"Reserve"};let d={};async function v(g){const p=i.find(y=>y.number===g),k=(p==null?void 0:p.state)||!1;s(0,d[g]=!0,d);try{k?await Oe.webswitch.relayOff(g):await Oe.webswitch.relayOn(g)}catch(y){console.error("Failed to toggle relay:",y),alert("Failed to control relay")}finally{s(0,d[g]=!1,d)}}async function c(){try{await Oe.webswitch.allOn()}catch(g){console.error("Failed to turn all on:",g)}}async function h(){try{await Oe.webswitch.allOff()}catch(g){console.error("Failed to turn all off:",g)}}const u=g=>v(g),w=(g,p)=>p.number===g;return e.$$set=g=>{"status"in g&&s(7,r=g.status)},e.$$.update=()=>{e.$$.dirty&128&&s(1,i=(r==null?void 0:r.relays)||[]),e.$$.dirty&128&&s(2,o=(r==null?void 0:r.connected)||!1)},[d,i,o,f,v,c,h,r,u,w]}class An extends pt{constructor(l){super(),vt(this,l,On,Pn,ot,{status:7})}}function In(e){let l,s,i,o,r,f,d,v,c,h,u,w,g,p,k,y,M,T=e[1].toFixed(0)+"",m,C,A,S,F,_,I,O,J,$=e[2].toFixed(2)+"",re,H,P,le,U,N,B,se=e[3].toFixed(1)+"",K,fe,Me,ee,V,Z,ie,ce,oe,ue,ne=e[12].toFixed(1)+"",Ae,Te,Ie,Ne,Pe,Se,te,ye,Q,X,x,G,de,Y=e[15].toFixed(0)+"",ve,j,be,pe,Ee,Ye,Ve=e[14].toFixed(1)+"",We,Je,Be,Le,$e,De,Qe=e[13].toFixed(1)+"",Ze,xe,Ge,he,ze,et,ht,rt,st,Re,Ke,Mt,He,gt,tt,it,je,lt,Xe,qe,at,Ue,Fe,zt;return{c(){l=a("div"),s=a("div"),i=a("h2"),i.textContent="Power Genius XL",o=b(),r=a("div"),f=a("button"),d=z(e[7]),v=b(),c=a("span"),h=b(),u=a("div"),w=a("div"),g=a("div"),p=a("div"),k=a("span"),k.textContent="Power",y=b(),M=a("span"),m=z(T),C=z(" W"),A=b(),S=a("div"),F=a("div"),_=a("div"),I=b(),O=a("div"),J=a("div"),re=z($),H=b(),P=a("div"),P.textContent="SWR",le=b(),U=a("div"),N=a("div"),B=a("div"),K=z(se),fe=z("°"),Me=b(),ee=a("div"),ee.textContent="PA Temp",V=b(),Z=a("div"),ie=a("div"),ce=b(),oe=a("div"),ue=a("div"),Ae=z(ne),Te=z("°"),Ie=b(),Ne=a("div"),Ne.textContent="HL Temp",Pe=b(),Se=a("div"),te=a("div"),ye=b(),Q=a("div"),X=a("div"),x=a("div"),x.textContent="VAC",G=b(),de=a("div"),ve=z(Y),j=b(),be=a("div"),pe=a("div"),pe.textContent="VDD",Ee=b(),Ye=a("div"),We=z(Ve),Je=b(),Be=a("div"),Le=a("div"),Le.textContent="ID Peak",$e=b(),De=a("div"),Ze=z(Qe),xe=b(),Ge=a("div"),he=a("div"),ze=a("span"),ze.textContent="Band A",et=b(),ht=a("span"),rt=z(e[10]),st=b(),Re=a("div"),Ke=a("span"),Ke.textContent="Band B",Mt=b(),He=a("span"),gt=z(e[9]),tt=b(),it=a("div"),je=a("label"),je.textContent="Fan Mode",lt=b(),Xe=a("select"),qe=a("option"),qe.textContent="Standard",at=a("option"),at.textContent="Contest",Ue=a("option"),Ue.textContent="Broadcast",t(i,"class","svelte-vwcbgz"),t(f,"class","state-badge svelte-vwcbgz"),W(f,"idle",e[0]==="IDLE"),W(f,"transmit",e[0].includes("TRANSMIT")),t(c,"class","status-dot svelte-vwcbgz"),W(c,"disconnected",!e[8]),t(r,"class","header-right svelte-vwcbgz"),t(s,"class","card-header svelte-vwcbgz"),t(k,"class","power-label-inline svelte-vwcbgz"),t(M,"class","power-value-inline svelte-vwcbgz"),t(p,"class","power-header svelte-vwcbgz"),t(_,"class","power-bar-fill svelte-vwcbgz"),ae(_,"width",e[4]+"%"),t(F,"class","power-bar-bg svelte-vwcbgz"),t(S,"class","power-bar-container svelte-vwcbgz"),t(g,"class","power-section svelte-vwcbgz"),t(J,"class","swr-value-compact svelte-vwcbgz"),t(P,"class","swr-label-compact svelte-vwcbgz"),t(O,"class","swr-circle-compact svelte-vwcbgz"),ae(O,"--swr-color",e[5]),t(w,"class","power-swr-row svelte-vwcbgz"),t(B,"class","temp-value svelte-vwcbgz"),ae(B,"color",e[6]),t(ee,"class","temp-label svelte-vwcbgz"),t(ie,"class","temp-mini-fill svelte-vwcbgz"),ae(ie,"width",e[3]/80*100+"%"),ae(ie,"background",e[6]),t(Z,"class","temp-mini-bar svelte-vwcbgz"),t(N,"class","temp-item svelte-vwcbgz"),t(ue,"class","temp-value svelte-vwcbgz"),ae(ue,"color",e[6]),t(Ne,"class","temp-label svelte-vwcbgz"),t(te,"class","temp-mini-fill svelte-vwcbgz"),ae(te,"width",e[12]/80*100+"%"),ae(te,"background",e[6]),t(Se,"class","temp-mini-bar svelte-vwcbgz"),t(oe,"class","temp-item svelte-vwcbgz"),t(U,"class","temp-group svelte-vwcbgz"),t(x,"class","param-label svelte-vwcbgz"),t(de,"class","param-value svelte-vwcbgz"),t(X,"class","param-box svelte-vwcbgz"),t(pe,"class","param-label svelte-vwcbgz"),t(Ye,"class","param-value svelte-vwcbgz"),t(be,"class","param-box svelte-vwcbgz"),t(Le,"class","param-label svelte-vwcbgz"),t(De,"class","param-value svelte-vwcbgz"),t(Be,"class","param-box svelte-vwcbgz"),t(Q,"class","params-grid svelte-vwcbgz"),t(ze,"class","band-label svelte-vwcbgz"),t(ht,"class","band-value svelte-vwcbgz"),t(he,"class","band-item svelte-vwcbgz"),t(Ke,"class","band-label svelte-vwcbgz"),t(He,"class","band-value svelte-vwcbgz"),t(Re,"class","band-item svelte-vwcbgz"),t(Ge,"class","band-display svelte-vwcbgz"),t(je,"for","fan-mode-select"),t(je,"class","control-label svelte-vwcbgz"),qe.__value="STANDARD",Pt(qe,qe.__value),at.__value="CONTEST",Pt(at,at.__value),Ue.__value="BROADCAST",Pt(Ue,Ue.__value),t(Xe,"id","fan-mode-select"),t(Xe,"class","svelte-vwcbgz"),t(it,"class","fan-control svelte-vwcbgz"),t(u,"class","metrics svelte-vwcbgz"),t(l,"class","card svelte-vwcbgz")},m(ge,_e){L(ge,l,_e),n(l,s),n(s,i),n(s,o),n(s,r),n(r,f),n(f,d),n(r,v),n(r,c),n(l,h),n(l,u),n(u,w),n(w,g),n(g,p),n(p,k),n(p,y),n(p,M),n(M,m),n(M,C),n(g,A),n(g,S),n(S,F),n(F,_),n(w,I),n(w,O),n(O,J),n(J,re),n(O,H),n(O,P),n(u,le),n(u,U),n(U,N),n(N,B),n(B,K),n(B,fe),n(N,Me),n(N,ee),n(N,V),n(N,Z),n(Z,ie),n(U,ce),n(U,oe),n(oe,ue),n(ue,Ae),n(ue,Te),n(oe,Ie),n(oe,Ne),n(oe,Pe),n(oe,Se),n(Se,te),n(u,ye),n(u,Q),n(Q,X),n(X,x),n(X,G),n(X,de),n(de,ve),n(Q,j),n(Q,be),n(be,pe),n(be,Ee),n(be,Ye),n(Ye,We),n(Q,Je),n(Q,Be),n(Be,Le),n(Be,$e),n(Be,De),n(De,Ze),n(u,xe),n(u,Ge),n(Ge,he),n(he,ze),n(he,et),n(he,ht),n(ht,rt),n(Ge,st),n(Ge,Re),n(Re,Ke),n(Re,Mt),n(Re,He),n(He,gt),n(u,tt),n(u,it),n(it,je),n(it,lt),n(it,Xe),n(Xe,qe),n(Xe,at),n(Xe,Ue),It(Xe,e[11]),Fe||(zt=[Ce(f,"click",e[17]),Ce(Xe,"change",e[19])],Fe=!0)},p(ge,[_e]){_e&128&&R(d,ge[7]),_e&1&&W(f,"idle",ge[0]==="IDLE"),_e&1&&W(f,"transmit",ge[0].includes("TRANSMIT")),_e&256&&W(c,"disconnected",!ge[8]),_e&2&&T!==(T=ge[1].toFixed(0)+"")&&R(m,T),_e&16&&ae(_,"width",ge[4]+"%"),_e&4&&$!==($=ge[2].toFixed(2)+"")&&R(re,$),_e&32&&ae(O,"--swr-color",ge[5]),_e&8&&se!==(se=ge[3].toFixed(1)+"")&&R(K,se),_e&64&&ae(B,"color",ge[6]),_e&8&&ae(ie,"width",ge[3]/80*100+"%"),_e&64&&ae(ie,"background",ge[6]),_e&4096&&ne!==(ne=ge[12].toFixed(1)+"")&&R(Ae,ne),_e&64&&ae(ue,"color",ge[6]),_e&4096&&ae(te,"width",ge[12]/80*100+"%"),_e&64&&ae(te,"background",ge[6]),_e&32768&&Y!==(Y=ge[15].toFixed(0)+"")&&R(ve,Y),_e&16384&&Ve!==(Ve=ge[14].toFixed(1)+"")&&R(We,Ve),_e&8192&&Qe!==(Qe=ge[13].toFixed(1)+"")&&R(Ze,Qe),_e&1024&&R(rt,ge[10]),_e&512&&R(gt,ge[9]),_e&2048&&It(Xe,ge[11])},i:we,o:we,d(ge){ge&&E(l),Fe=!1,nt(zt)}}}function Nn(e,l,s){let i,o,r,f,d,v,c,h,u,w,g,p,k,y,M,T,{status:m}=l;async function C(F){try{await Oe.power.setFanMode(F)}catch(_){console.error("Failed to set fan mode:",_)}}async function A(){try{const F=u==="IDLE"?0:1;await Oe.power.setOperate(F)}catch(F){console.error("Failed to toggle operate:",F)}}const S=F=>C(F.target.value);return e.$$set=F=>{"status"in F&&s(18,m=F.status)},e.$$.update=()=>{e.$$.dirty&262144&&s(1,i=(m==null?void 0:m.power_forward)||0),e.$$.dirty&262144&&m!=null&&m.power_reflected,e.$$.dirty&262144&&s(2,o=(m==null?void 0:m.swr)||1),e.$$.dirty&262144&&s(15,r=(m==null?void 0:m.voltage)||0),e.$$.dirty&262144&&s(14,f=(m==null?void 0:m.vdd)||0),e.$$.dirty&262144&&m!=null&&m.current,e.$$.dirty&262144&&s(13,d=(m==null?void 0:m.peak_current)||0),e.$$.dirty&262144&&s(3,v=(m==null?void 0:m.temperature)||0),e.$$.dirty&262144&&s(12,c=(m==null?void 0:m.harmonic_load_temp)||0),e.$$.dirty&262144&&s(11,h=(m==null?void 0:m.fan_mode)||"CONTEST"),e.$$.dirty&262144&&s(0,u=(m==null?void 0:m.state)||"IDLE"),e.$$.dirty&262144&&s(10,w=(m==null?void 0:m.band_a)||"0"),e.$$.dirty&262144&&s(9,g=(m==null?void 0:m.band_b)||"0"),e.$$.dirty&262144&&s(8,p=(m==null?void 0:m.connected)||!1),e.$$.dirty&1&&s(7,k=u.replace("TRANSMIT_A","TRANSMIT").replace("TRANSMIT_B","TRANSMIT")),e.$$.dirty&8&&s(6,y=v<40?"#4caf50":v<60?"#ffc107":v<75?"#ff9800":"#f44336"),e.$$.dirty&4&&s(5,M=o<1.5?"#4caf50":o<2?"#ffc107":o<3?"#ff9800":"#f44336"),e.$$.dirty&2&&s(4,T=Math.min(i/2e3*100,100))},[u,i,o,v,T,M,y,k,p,g,w,h,c,d,f,r,C,A,m,S]}class Dn extends pt{constructor(l){super(),vt(this,l,Nn,In,ot,{status:18})}}function En(e){let l,s,i,o,r,f,d,v,c,h,u,w,g,p,k,y,M,T=e[0].toFixed(0)+"",m,C,A,S,F,_,I,O,J,$=e[1].toFixed(2)+"",re,H,P,le,U,N,B,se,K,fe,Me,ee,V,Z,ie,ce,oe,ue,ne,Ae,Te,Ie,Ne,Pe,Se,te,ye,Q,X=(e[11]/1e3).toFixed(3)+"",x,G,de,Y,ve,j,be,pe=(e[10]/1e3).toFixed(3)+"",Ee,Ye,Ve,We,Je,Be=e[8]===1?"OPERATE":"STANDBY",Le,$e,De,Qe,Ze,xe,Ge;return{c(){l=a("div"),s=a("div"),i=a("h2"),i.textContent="Tuner Genius XL",o=b(),r=a("div"),f=a("span"),d=z(e[12]),v=b(),c=a("span"),h=b(),u=a("div"),w=a("div"),g=a("div"),p=a("div"),k=a("span"),k.textContent="Power",y=b(),M=a("span"),m=z(T),C=z(" W"),A=b(),S=a("div"),F=a("div"),_=a("div"),I=b(),O=a("div"),J=a("div"),re=z($),H=b(),P=a("div"),P.textContent="SWR",le=b(),U=a("div"),N=a("div"),B=a("div"),se=z(e[7]),K=b(),fe=a("div"),fe.textContent="C1",Me=b(),ee=a("div"),V=a("div"),Z=z(e[6]),ie=b(),ce=a("div"),ce.textContent="L",oe=b(),ue=a("div"),ne=a("div"),Ae=z(e[5]),Te=b(),Ie=a("div"),Ie.textContent="C2",Ne=b(),Pe=a("div"),Se=a("div"),te=a("div"),te.textContent="Freq A",ye=b(),Q=a("div"),x=z(X),G=a("span"),G.textContent="MHz",de=b(),Y=a("div"),ve=a("div"),ve.textContent="Freq B",j=b(),be=a("div"),Ee=z(pe),Ye=a("span"),Ye.textContent="MHz",Ve=b(),We=a("div"),Je=a("button"),Le=z(Be),$e=b(),De=a("button"),De.textContent="BYPASS",Qe=b(),Ze=a("button"),Ze.innerHTML=` + AUTO TUNE`,t(i,"class","svelte-zuda7"),t(f,"class","tuning-badge svelte-zuda7"),W(f,"tuning",e[12]==="TUNING"),t(c,"class","status-dot svelte-zuda7"),W(c,"disconnected",!e[4]),t(r,"class","header-right svelte-zuda7"),t(s,"class","card-header svelte-zuda7"),t(k,"class","power-label-inline svelte-zuda7"),t(M,"class","power-value-inline svelte-zuda7"),t(p,"class","power-header svelte-zuda7"),t(_,"class","power-bar-fill svelte-zuda7"),ae(_,"width",e[2]+"%"),t(F,"class","power-bar-bg svelte-zuda7"),t(S,"class","power-bar-container svelte-zuda7"),t(g,"class","power-section svelte-zuda7"),t(J,"class","swr-value-compact svelte-zuda7"),t(P,"class","swr-label-compact svelte-zuda7"),t(O,"class","swr-circle-compact svelte-zuda7"),ae(O,"--swr-color",e[3]),t(w,"class","power-swr-row svelte-zuda7"),t(B,"class","cap-value svelte-zuda7"),t(fe,"class","cap-label svelte-zuda7"),t(N,"class","cap-item svelte-zuda7"),t(V,"class","cap-value svelte-zuda7"),t(ce,"class","cap-label svelte-zuda7"),t(ee,"class","cap-item svelte-zuda7"),t(ne,"class","cap-value svelte-zuda7"),t(Ie,"class","cap-label svelte-zuda7"),t(ue,"class","cap-item svelte-zuda7"),t(U,"class","capacitors svelte-zuda7"),t(te,"class","freq-label svelte-zuda7"),t(G,"class","freq-unit svelte-zuda7"),t(Q,"class","freq-value svelte-zuda7"),t(Se,"class","freq-item svelte-zuda7"),t(ve,"class","freq-label svelte-zuda7"),t(Ye,"class","freq-unit svelte-zuda7"),t(be,"class","freq-value svelte-zuda7"),t(Y,"class","freq-item svelte-zuda7"),t(Pe,"class","freq-display svelte-zuda7"),t(Je,"class","control-btn operate svelte-zuda7"),W(Je,"active",e[8]===1),t(De,"class","control-btn bypass svelte-zuda7"),W(De,"active",e[9]),t(We,"class","controls svelte-zuda7"),t(Ze,"class","tune-btn svelte-zuda7"),t(u,"class","metrics svelte-zuda7"),t(l,"class","card svelte-zuda7")},m(he,ze){L(he,l,ze),n(l,s),n(s,i),n(s,o),n(s,r),n(r,f),n(f,d),n(r,v),n(r,c),n(l,h),n(l,u),n(u,w),n(w,g),n(g,p),n(p,k),n(p,y),n(p,M),n(M,m),n(M,C),n(g,A),n(g,S),n(S,F),n(F,_),n(w,I),n(w,O),n(O,J),n(J,re),n(O,H),n(O,P),n(u,le),n(u,U),n(U,N),n(N,B),n(B,se),n(N,K),n(N,fe),n(U,Me),n(U,ee),n(ee,V),n(V,Z),n(ee,ie),n(ee,ce),n(U,oe),n(U,ue),n(ue,ne),n(ne,Ae),n(ue,Te),n(ue,Ie),n(u,Ne),n(u,Pe),n(Pe,Se),n(Se,te),n(Se,ye),n(Se,Q),n(Q,x),n(Q,G),n(Pe,de),n(Pe,Y),n(Y,ve),n(Y,j),n(Y,be),n(be,Ee),n(be,Ye),n(u,Ve),n(u,We),n(We,Je),n(Je,Le),n(We,$e),n(We,De),n(u,Qe),n(u,Ze),xe||(Ge=[Ce(Je,"click",e[17]),Ce(De,"click",e[18]),Ce(Ze,"click",e[13])],xe=!0)},p(he,[ze]){ze&4096&&R(d,he[12]),ze&4096&&W(f,"tuning",he[12]==="TUNING"),ze&16&&W(c,"disconnected",!he[4]),ze&1&&T!==(T=he[0].toFixed(0)+"")&&R(m,T),ze&4&&ae(_,"width",he[2]+"%"),ze&2&&$!==($=he[1].toFixed(2)+"")&&R(re,$),ze&8&&ae(O,"--swr-color",he[3]),ze&128&&R(se,he[7]),ze&64&&R(Z,he[6]),ze&32&&R(Ae,he[5]),ze&2048&&X!==(X=(he[11]/1e3).toFixed(3)+"")&&R(x,X),ze&1024&&pe!==(pe=(he[10]/1e3).toFixed(3)+"")&&R(Ee,pe),ze&256&&Be!==(Be=he[8]===1?"OPERATE":"STANDBY")&&R(Le,Be),ze&256&&W(Je,"active",he[8]===1),ze&512&&W(De,"active",he[9])},i:we,o:we,d(he){he&&E(l),xe=!1,nt(Ge)}}}function Ln(e,l,s){let i,o,r,f,d,v,c,h,u,w,g,p,k,{status:y}=l;async function M(){try{await Oe.tuner.autoTune()}catch(S){console.error("Failed to tune:",S)}}async function T(S){try{await Oe.tuner.setBypass(S)}catch(F){console.error("Failed to set bypass:",F)}}async function m(S){try{await Oe.tuner.setOperate(S)}catch(F){console.error("Failed to set operate:",F)}}const C=()=>m(c===1?0:1),A=()=>T(v?0:1);return e.$$set=S=>{"status"in S&&s(16,y=S.status)},e.$$.update=()=>{e.$$.dirty&65536&&s(0,i=(y==null?void 0:y.power_forward)||0),e.$$.dirty&65536&&s(1,o=(y==null?void 0:y.swr)||1),e.$$.dirty&65536&&s(12,r=(y==null?void 0:y.tuning_status)||"READY"),e.$$.dirty&65536&&s(11,f=(y==null?void 0:y.frequency_a)||0),e.$$.dirty&65536&&s(10,d=(y==null?void 0:y.frequency_b)||0),e.$$.dirty&65536&&s(9,v=(y==null?void 0:y.bypass)||!1),e.$$.dirty&65536&&s(8,c=(y==null?void 0:y.state)||0),e.$$.dirty&65536&&s(7,h=(y==null?void 0:y.c1)||0),e.$$.dirty&65536&&s(6,u=(y==null?void 0:y.l)||0),e.$$.dirty&65536&&s(5,w=(y==null?void 0:y.c2)||0),e.$$.dirty&65536&&s(4,g=(y==null?void 0:y.connected)||!1),e.$$.dirty&2&&s(3,p=o<1.5?"#4caf50":o<2?"#ffc107":o<3?"#ff9800":"#f44336"),e.$$.dirty&1&&s(2,k=Math.min(i/2e3*100,100))},[i,o,k,p,g,w,u,h,c,v,d,f,r,M,T,m,y,C,A]}class Rn extends pt{constructor(l){super(),vt(this,l,Ln,En,ot,{status:16})}}function Pl(e,l,s){const i=e.slice();i[14]=l[s];const o=i[1].tx&&i[1].tx_ant===i[14].number;i[15]=o;const r=i[0].tx&&i[0].tx_ant===i[14].number;i[16]=r;const f=!i[1].tx&&i[1].rx_ant===i[14].number;i[17]=f;const d=!i[0].tx&&i[0].rx_ant===i[14].number;i[18]=d;const v=i[15]||i[16];i[19]=v;const c=i[17]||i[15];i[20]=c;const h=i[18]||i[16];return i[21]=h,i}function Ol(e){let l,s,i=e[14].name+"",o,r,f,d,v,c,h,u,w;function g(){return e[11](e[14])}function p(){return e[12](e[14])}return{c(){l=a("div"),s=a("div"),o=z(i),r=b(),f=a("div"),d=a("button"),d.textContent="A",v=b(),c=a("button"),c.textContent="B",h=b(),t(s,"class","antenna-name svelte-vlabwb"),t(d,"class","port-btn svelte-vlabwb"),W(d,"active",e[20]),t(c,"class","port-btn svelte-vlabwb"),W(c,"active",e[21]),t(f,"class","antenna-ports svelte-vlabwb"),t(l,"class","antenna-card svelte-vlabwb"),W(l,"tx",e[19]),W(l,"active-a",e[20]),W(l,"active-b",e[21])},m(k,y){L(k,l,y),n(l,s),n(s,o),n(l,r),n(l,f),n(f,d),n(f,v),n(f,c),n(l,h),u||(w=[Ce(d,"click",g),Ce(c,"click",p)],u=!0)},p(k,y){e=k,y&16&&i!==(i=e[14].name+"")&&R(o,i),y&18&&W(d,"active",e[20]),y&17&&W(c,"active",e[21]),y&19&&W(l,"tx",e[19]),y&18&&W(l,"active-a",e[20]),y&17&&W(l,"active-b",e[21])},d(k){k&&E(l),u=!1,nt(w)}}}function Wn(e){let l,s,i,o,r,f,d,v,c,h,u=(e[1].source||"FLEX")+"",w,g,p,k,y=(e[0].source||"FLEX")+"",M,T,m,C,A,S,F,_,I,O,J,$,re,H,P,le,U=ut(e[4]),N=[];for(let B=0;B🔄 + REBOOT`,t(i,"class","svelte-vlabwb"),t(r,"class","status-dot svelte-vlabwb"),W(r,"disconnected",!e[5]),t(s,"class","card-header svelte-vlabwb"),t(h,"class","source-label svelte-vlabwb"),t(c,"class","source-item svelte-vlabwb"),t(k,"class","source-label svelte-vlabwb"),t(p,"class","source-item svelte-vlabwb"),t(v,"class","sources svelte-vlabwb"),t(A,"class","band-value svelte-vlabwb"),t(C,"class","band-item svelte-vlabwb"),t(I,"class","band-value svelte-vlabwb"),t(_,"class","band-item svelte-vlabwb"),t(m,"class","bands svelte-vlabwb"),t($,"class","antennas svelte-vlabwb"),t(H,"class","reboot-btn svelte-vlabwb"),t(d,"class","metrics svelte-vlabwb"),t(l,"class","card svelte-vlabwb")},m(B,se){L(B,l,se),n(l,s),n(s,i),n(s,o),n(s,r),n(l,f),n(l,d),n(d,v),n(v,c),n(c,h),n(h,w),n(v,g),n(v,p),n(p,k),n(k,M),n(d,T),n(d,m),n(m,C),n(C,A),n(A,S),n(m,F),n(m,_),n(_,I),n(I,O),n(d,J),n(d,$);for(let K=0;Ku(1,M.number),y=M=>u(2,M.number);return e.$$set=M=>{"status"in M&&s(8,c=M.status)},e.$$.update=()=>{e.$$.dirty&256&&s(5,i=(c==null?void 0:c.connected)||!1),e.$$.dirty&256&&s(1,o=(c==null?void 0:c.port_a)||{}),e.$$.dirty&256&&s(0,r=(c==null?void 0:c.port_b)||{}),e.$$.dirty&256&&s(4,f=(c==null?void 0:c.antennas)||[]),e.$$.dirty&2&&s(3,d=h[o.band]||"None"),e.$$.dirty&1&&s(2,v=h[r.band]||"None"),e.$$.dirty&1795&&c&&(o.tx!==w||r.tx!==g)&&(console.log("AntennaGenius TX state changed:",{portA_tx:o.tx,portB_tx:r.tx,portA_tx_ant:o.tx_ant,portB_tx_ant:r.tx_ant}),s(9,w=o.tx),s(10,g=r.tx))},[r,o,v,d,f,i,u,p,c,w,g,k,y]}class Gn extends pt{constructor(l){super(),vt(this,l,Bn,Wn,ot,{status:8})}}function Al(e,l,s){const i=e.slice();i[16]=l[s];const o=150+125*Math.sin(i[16]*Math.PI/180);i[17]=o;const r=150-125*Math.cos(i[16]*Math.PI/180);return i[18]=r,i}function Il(e){let l,s,i,o;return{c(){l=a("span"),s=z("→ "),i=z(e[0]),o=z("°"),t(l,"class","target-indicator svelte-3omzwr")},m(r,f){L(r,l,f),n(l,s),n(l,i),n(l,o)},p(r,f){f&1&&R(i,r[0])},d(r){r&&E(l)}}}function Nl(e){let l,s,i,o,r;return{c(){l=D("g"),s=D("line"),i=D("g"),o=D("polygon"),t(s,"x1","0"),t(s,"y1","0"),t(s,"x2","0"),t(s,"y2","-125"),t(s,"stroke","rgba(255, 255, 255, 0.3)"),t(s,"stroke-width","2"),t(s,"stroke-dasharray","5,5"),t(s,"opacity","0.6"),t(o,"points","0,-8 -5,5 5,5"),t(o,"fill","rgba(255, 255, 255, 0.4)"),t(o,"stroke","rgba(255, 255, 255, 0.5)"),t(o,"stroke-width","1"),t(i,"transform","translate(0, -125)"),t(l,"transform",r="rotate("+e[3]+")")},m(f,d){L(f,l,d),n(l,s),n(l,i),n(i,o)},p(f,d){d&8&&r!==(r="rotate("+f[3]+")")&&t(l,"transform",r)},d(f){f&&E(l)}}}function Dl(e){let l,s,i,o,r;return{c(){l=D("path"),s=D("line"),i=D("line"),o=D("g"),r=D("polygon"),t(l,"d","M 0,0 L "+-Math.sin(15*Math.PI/180)*130+","+-Math.cos(15*Math.PI/180)*130+` \r + A 130,130 0 0,1 `+Math.sin(15*Math.PI/180)*130+","+-Math.cos(15*Math.PI/180)*130+" Z"),t(l,"fill","url(#beamGradient)"),t(l,"opacity","0.85"),t(s,"x1","0"),t(s,"y1","0"),t(s,"x2",-Math.sin(15*Math.PI/180)*130),t(s,"y2",-Math.cos(15*Math.PI/180)*130),t(s,"stroke","#4fc3f7"),t(s,"stroke-width","2"),t(s,"opacity","0.9"),t(i,"x1","0"),t(i,"y1","0"),t(i,"x2",Math.sin(15*Math.PI/180)*130),t(i,"y2",-Math.cos(15*Math.PI/180)*130),t(i,"stroke","#4fc3f7"),t(i,"stroke-width","2"),t(i,"opacity","0.9"),t(r,"points","0,-20 -8,5 0,0 8,5"),t(r,"fill","#4fc3f7"),t(r,"stroke","#0288d1"),t(r,"stroke-width","2"),ae(r,"filter","drop-shadow(0 0 10px rgba(79, 195, 247, 1))"),t(o,"transform","translate(0, -110)")},m(f,d){L(f,l,d),L(f,s,d),L(f,i,d),L(f,o,d),n(o,r)},p:we,d(f){f&&(E(l),E(s),E(i),E(o))}}}function El(e){let l,s,i,o,r;return{c(){l=D("path"),s=D("line"),i=D("line"),o=D("g"),r=D("polygon"),t(l,"d","M 0,0 L "+-Math.sin(15*Math.PI/180)*130+","+Math.cos(15*Math.PI/180)*130+` \r + A 130,130 0 0,0 `+Math.sin(15*Math.PI/180)*130+","+Math.cos(15*Math.PI/180)*130+" Z"),t(l,"fill","url(#beamGradient)"),t(l,"opacity","0.85"),t(s,"x1","0"),t(s,"y1","0"),t(s,"x2",-Math.sin(15*Math.PI/180)*130),t(s,"y2",Math.cos(15*Math.PI/180)*130),t(s,"stroke","#4fc3f7"),t(s,"stroke-width","2"),t(s,"opacity","0.9"),t(i,"x1","0"),t(i,"y1","0"),t(i,"x2",Math.sin(15*Math.PI/180)*130),t(i,"y2",Math.cos(15*Math.PI/180)*130),t(i,"stroke","#4fc3f7"),t(i,"stroke-width","2"),t(i,"opacity","0.9"),t(r,"points","0,20 -8,-5 0,0 8,-5"),t(r,"fill","#4fc3f7"),t(r,"stroke","#0288d1"),t(r,"stroke-width","2"),ae(r,"filter","drop-shadow(0 0 10px rgba(79, 195, 247, 1))"),t(o,"transform","translate(0, 110)")},m(f,d){L(f,l,d),L(f,s,d),L(f,i,d),L(f,o,d),n(o,r)},p:we,d(f){f&&(E(l),E(s),E(i),E(o))}}}function Ll(e){let l,s,i,o,r,f,d,v,c,h;return{c(){l=D("path"),s=D("path"),i=D("line"),o=D("line"),r=D("line"),f=D("line"),d=D("g"),v=D("polygon"),c=D("g"),h=D("polygon"),t(l,"d","M 0,0 L "+-Math.sin(15*Math.PI/180)*130+","+-Math.cos(15*Math.PI/180)*130+` \r + A 130,130 0 0,1 `+Math.sin(15*Math.PI/180)*130+","+-Math.cos(15*Math.PI/180)*130+" Z"),t(l,"fill","url(#beamGradient)"),t(l,"opacity","0.7"),t(s,"d","M 0,0 L "+-Math.sin(15*Math.PI/180)*130+","+Math.cos(15*Math.PI/180)*130+` \r + A 130,130 0 0,0 `+Math.sin(15*Math.PI/180)*130+","+Math.cos(15*Math.PI/180)*130+" Z"),t(s,"fill","url(#beamGradient)"),t(s,"opacity","0.7"),t(i,"x1","0"),t(i,"y1","0"),t(i,"x2",-Math.sin(15*Math.PI/180)*130),t(i,"y2",-Math.cos(15*Math.PI/180)*130),t(i,"stroke","#4fc3f7"),t(i,"stroke-width","2"),t(i,"opacity","0.8"),t(o,"x1","0"),t(o,"y1","0"),t(o,"x2",Math.sin(15*Math.PI/180)*130),t(o,"y2",-Math.cos(15*Math.PI/180)*130),t(o,"stroke","#4fc3f7"),t(o,"stroke-width","2"),t(o,"opacity","0.8"),t(r,"x1","0"),t(r,"y1","0"),t(r,"x2",-Math.sin(15*Math.PI/180)*130),t(r,"y2",Math.cos(15*Math.PI/180)*130),t(r,"stroke","#4fc3f7"),t(r,"stroke-width","2"),t(r,"opacity","0.8"),t(f,"x1","0"),t(f,"y1","0"),t(f,"x2",Math.sin(15*Math.PI/180)*130),t(f,"y2",Math.cos(15*Math.PI/180)*130),t(f,"stroke","#4fc3f7"),t(f,"stroke-width","2"),t(f,"opacity","0.8"),t(v,"points","0,-20 -8,5 0,0 8,5"),t(v,"fill","#4fc3f7"),t(v,"stroke","#0288d1"),t(v,"stroke-width","2"),ae(v,"filter","drop-shadow(0 0 10px rgba(79, 195, 247, 1))"),t(d,"transform","translate(0, -110)"),t(h,"points","0,20 -8,-5 0,0 8,-5"),t(h,"fill","#4fc3f7"),t(h,"stroke","#0288d1"),t(h,"stroke-width","2"),ae(h,"filter","drop-shadow(0 0 10px rgba(79, 195, 247, 1))"),t(c,"transform","translate(0, 110)")},m(u,w){L(u,l,w),L(u,s,w),L(u,i,w),L(u,o,w),L(u,r,w),L(u,f,w),L(u,d,w),n(d,v),L(u,c,w),n(c,h)},p:we,d(u){u&&(E(l),E(s),E(i),E(o),E(r),E(f),E(d),E(c))}}}function Rl(e){let l,s,i,o,r,f;return{c(){l=D("g"),s=D("line"),i=D("g"),o=D("polygon"),r=D("animate"),t(s,"x1","0"),t(s,"y1","0"),t(s,"x2","0"),t(s,"y2","-135"),t(s,"stroke","#ffc107"),t(s,"stroke-width","3"),t(s,"stroke-dasharray","8,4"),t(s,"opacity","0.9"),t(r,"attributeName","opacity"),t(r,"values","0.8;1;0.8"),t(r,"dur","1s"),t(r,"repeatCount","indefinite"),t(o,"points","0,-12 -8,6 0,2 8,6"),t(o,"fill","#ffc107"),t(o,"stroke","#ff9800"),t(o,"stroke-width","1.5"),ae(o,"filter","drop-shadow(0 0 10px rgba(255, 193, 7, 0.8))"),t(i,"transform","translate(0, -135)"),t(l,"transform",f="rotate("+e[0]+")")},m(d,v){L(d,l,v),n(l,s),n(l,i),n(i,o),n(o,r)},p(d,v){v&1&&f!==(f="rotate("+d[0]+")")&&t(l,"transform",f)},d(d){d&&E(l)}}}function Wl(e){let l,s,i;return{c(){l=D("text"),s=z(e[16]),i=z("°"),t(l,"x",e[17]),t(l,"y",e[18]),t(l,"text-anchor","middle"),t(l,"dominant-baseline","middle"),t(l,"class","degree-label svelte-3omzwr")},m(o,r){L(o,l,r),n(l,s),n(l,i)},p:we,d(o){o&&E(l)}}}function Bl(e){let l;return{c(){l=a("div"),l.innerHTML='
Physical antenna
Radiation pattern
',t(l,"class","map-legend svelte-3omzwr")},m(s,i){L(s,l,i)},d(s){s&&E(l)}}}function jn(e){let l,s,i,o,r,f,d,v,c,h,u,w,g,p,k,y,M,T,m,C,A,S,F,_,I,O,J,$,re,H,P,le,U,N,B,se,K,fe,Me,ee,V,Z,ie,ce,oe,ue,ne,Ae,Te,Ie,Ne,Pe,Se,te=e[2]&&e[0]!==null&&Il(e),ye=(e[4]===1||e[4]===2)&&Nl(e),Q=e[4]===0&&Dl(),X=e[4]===1&&El(),x=e[4]===2&&Ll(),G=e[2]&&e[0]!==null&&Rl(e),de=ut([45,135,225,315]),Y=[];for(let j=0;j<4;j+=1)Y[j]=Wl(Al(e,de,j));let ve=(e[4]===1||e[4]===2)&&Bl();return{c(){l=a("div"),s=a("div"),i=a("h2"),i.textContent="Rotator Genius",o=b(),r=a("span"),f=b(),d=a("div"),v=a("div"),c=a("div"),h=a("div"),h.textContent="CURRENT HEADING",u=b(),w=a("div"),g=z(e[3]),p=z(`°\r + `),te&&te.c(),k=b(),y=a("div"),M=a("button"),M.textContent="↺",T=b(),m=a("button"),m.textContent="■",C=b(),A=a("button"),A.textContent="↻",S=b(),F=a("div"),_=D("svg"),I=D("defs"),O=D("radialGradient"),J=D("stop"),$=D("stop"),re=D("circle"),H=D("circle"),P=D("circle"),le=D("circle"),U=D("g"),ye&&ye.c(),N=D("g"),Q&&Q.c(),B=At(),X&&X.c(),se=At(),x&&x.c(),G&&G.c(),fe=D("circle"),Me=D("animate"),ee=D("circle"),V=D("animate"),Z=D("animate"),ie=D("text"),ce=z("N"),oe=D("text"),ue=z("E"),ne=D("text"),Ae=z("S"),Te=D("text"),Ie=z("W");for(let j=0;j<4;j+=1)Y[j].c();Ne=b(),ve&&ve.c(),t(i,"class","svelte-3omzwr"),t(r,"class","status-dot svelte-3omzwr"),W(r,"disconnected",!e[1]),t(s,"class","card-header svelte-3omzwr"),t(h,"class","heading-label svelte-3omzwr"),t(w,"class","heading-value svelte-3omzwr"),t(c,"class","heading-display-compact svelte-3omzwr"),t(M,"class","btn-mini ccw svelte-3omzwr"),t(M,"title","Rotate Counter-Clockwise"),t(m,"class","btn-mini stop svelte-3omzwr"),t(m,"title","Stop Rotation"),t(A,"class","btn-mini cw svelte-3omzwr"),t(A,"title","Rotate Clockwise"),t(y,"class","controls-compact svelte-3omzwr"),t(v,"class","heading-controls-row svelte-3omzwr"),t(J,"offset","0%"),ae(J,"stop-color","rgba(79, 195, 247, 0.7)"),ae(J,"stop-opacity","1"),t($,"offset","100%"),ae($,"stop-color","rgba(79, 195, 247, 0)"),ae($,"stop-opacity","0"),t(O,"id","beamGradient"),t(re,"cx","150"),t(re,"cy","150"),t(re,"r","140"),t(re,"fill","rgba(30, 64, 175, 0.15)"),t(re,"stroke","rgba(79, 195, 247, 0.4)"),t(re,"stroke-width","2"),t(H,"cx","150"),t(H,"cy","150"),t(H,"r","105"),t(H,"fill","none"),t(H,"stroke","rgba(79,195,247,0.2)"),t(H,"stroke-width","1"),t(H,"stroke-dasharray","3,3"),t(P,"cx","150"),t(P,"cy","150"),t(P,"r","70"),t(P,"fill","none"),t(P,"stroke","rgba(79,195,247,0.2)"),t(P,"stroke-width","1"),t(P,"stroke-dasharray","3,3"),t(le,"cx","150"),t(le,"cy","150"),t(le,"r","35"),t(le,"fill","none"),t(le,"stroke","rgba(79,195,247,0.2)"),t(le,"stroke-width","1"),t(le,"stroke-dasharray","3,3"),t(N,"transform",K="rotate("+e[3]+")"),t(Me,"attributeName","r"),t(Me,"values","5;7;5"),t(Me,"dur","2s"),t(Me,"repeatCount","indefinite"),t(fe,"cx","0"),t(fe,"cy","0"),t(fe,"r","5"),t(fe,"fill","#f44336"),t(fe,"stroke","#fff"),t(fe,"stroke-width","2"),t(V,"attributeName","r"),t(V,"values","10;16;10"),t(V,"dur","2s"),t(V,"repeatCount","indefinite"),t(Z,"attributeName","opacity"),t(Z,"values","0.5;0;0.5"),t(Z,"dur","2s"),t(Z,"repeatCount","indefinite"),t(ee,"cx","0"),t(ee,"cy","0"),t(ee,"r","10"),t(ee,"fill","none"),t(ee,"stroke","#f44336"),t(ee,"stroke-width","1.5"),t(ee,"opacity","0.5"),t(U,"transform","translate(150, 150)"),t(ie,"x","150"),t(ie,"y","20"),t(ie,"text-anchor","middle"),t(ie,"class","cardinal svelte-3omzwr"),t(oe,"x","280"),t(oe,"y","155"),t(oe,"text-anchor","middle"),t(oe,"class","cardinal svelte-3omzwr"),t(ne,"x","150"),t(ne,"y","285"),t(ne,"text-anchor","middle"),t(ne,"class","cardinal svelte-3omzwr"),t(Te,"x","20"),t(Te,"y","155"),t(Te,"text-anchor","middle"),t(Te,"class","cardinal svelte-3omzwr"),t(_,"viewBox","0 0 300 300"),t(_,"class","map-svg clickable-compass svelte-3omzwr"),t(_,"role","button"),t(_,"tabindex","0"),t(_,"aria-label","Click to rotate antenna to direction"),t(F,"class","map-container svelte-3omzwr"),t(d,"class","metrics svelte-3omzwr"),t(l,"class","card svelte-3omzwr")},m(j,be){L(j,l,be),n(l,s),n(s,i),n(s,o),n(s,r),n(l,f),n(l,d),n(d,v),n(v,c),n(c,h),n(c,u),n(c,w),n(w,g),n(w,p),te&&te.m(w,null),n(v,k),n(v,y),n(y,M),n(y,T),n(y,m),n(y,C),n(y,A),n(d,S),n(d,F),n(F,_),n(_,I),n(I,O),n(O,J),n(O,$),n(_,re),n(_,H),n(_,P),n(_,le),n(_,U),ye&&ye.m(U,null),n(U,N),Q&&Q.m(N,null),n(N,B),X&&X.m(N,null),n(N,se),x&&x.m(N,null),G&&G.m(U,null),n(U,fe),n(fe,Me),n(U,ee),n(ee,V),n(ee,Z),n(_,ie),n(ie,ce),n(_,oe),n(oe,ue),n(_,ne),n(ne,Ae),n(_,Te),n(Te,Ie);for(let pe=0;pe<4;pe+=1)Y[pe]&&Y[pe].m(_,null);n(d,Ne),ve&&ve.m(d,null),Pe||(Se=[Ce(M,"click",e[6]),Ce(m,"click",e[7]),Ce(A,"click",e[5]),Ce(_,"click",e[8]),Ce(_,"keydown",e[15])],Pe=!0)},p(j,[be]){if(be&2&&W(r,"disconnected",!j[1]),be&8&&R(g,j[3]),j[2]&&j[0]!==null?te?te.p(j,be):(te=Il(j),te.c(),te.m(w,null)):te&&(te.d(1),te=null),j[4]===1||j[4]===2?ye?ye.p(j,be):(ye=Nl(j),ye.c(),ye.m(U,N)):ye&&(ye.d(1),ye=null),j[4]===0?Q?Q.p(j,be):(Q=Dl(),Q.c(),Q.m(N,B)):Q&&(Q.d(1),Q=null),j[4]===1?X?X.p(j,be):(X=El(),X.c(),X.m(N,se)):X&&(X.d(1),X=null),j[4]===2?x?x.p(j,be):(x=Ll(),x.c(),x.m(N,null)):x&&(x.d(1),x=null),be&8&&K!==(K="rotate("+j[3]+")")&&t(N,"transform",K),j[2]&&j[0]!==null?G?G.p(j,be):(G=Rl(j),G.c(),G.m(U,fe)):G&&(G.d(1),G=null),be&0){de=ut([45,135,225,315]);let pe;for(pe=0;pe<4;pe+=1){const Ee=Al(j,de,pe);Y[pe]?Y[pe].p(Ee,be):(Y[pe]=Wl(Ee),Y[pe].c(),Y[pe].m(_,null))}for(;pe<4;pe+=1)Y[pe].d(1)}j[4]===1||j[4]===2?ve||(ve=Bl(),ve.c(),ve.m(d,null)):ve&&(ve.d(1),ve=null)},i:we,o:we,d(j){j&&E(l),te&&te.d(),ye&&ye.d(),Q&&Q.d(),X&&X.d(),x&&x.d(),G&&G.d(),Dt(Y,j),ve&&ve.d(),Pe=!1,nt(Se)}}}function qn(e,l,s){let i,o,r,f,d,v,{status:c}=l,{ultrabeam:h=null}=l,u=null,w=!1,g=null;async function p(){try{await Oe.rotator.rotateCW()}catch(m){console.error("Failed to rotate CW:",m)}}async function k(){try{await Oe.rotator.rotateCCW()}catch(m){console.error("Failed to rotate CCW:",m)}}async function y(){try{s(12,g=null),await Oe.rotator.stop()}catch(m){console.error("Failed to stop:",m)}}async function M(m){const A=m.currentTarget.getBoundingClientRect(),S=A.width/2,F=A.height/2,_=m.clientX-A.left-S,I=m.clientY-A.top-F;let O=Math.atan2(_,-I)*(180/Math.PI);O<0&&(O+=360);const $=(Math.round(O/5)*5+360)%360;try{await Oe.rotator.setHeading($),s(12,g=$)}catch(re){console.error("Failed to set heading:",re)}}const T=m=>m.key==="Enter"&&M(m);return e.$$set=m=>{"status"in m&&s(9,c=m.status),"ultrabeam"in m&&s(10,h=m.ultrabeam)},e.$$.update=()=>{if(e.$$.dirty&1024&&s(4,i=(h==null?void 0:h.direction)??0),e.$$.dirty&2560&&(c==null?void 0:c.heading)!==void 0&&(c==null?void 0:c.heading)!==null){const m=c.heading;u===null?(s(11,u=m),console.log(` ✓ First load, set to ${u}°`)):m===0&&u>10&&u<350?console.log(` ✗ IGNORED glitch jump from ${u}° to 0°`):s(11,u=m)}if(e.$$.dirty&2048&&s(3,o=u!==null?u:0),e.$$.dirty&512&&s(1,w=(c==null?void 0:c.connected)||!1),e.$$.dirty&512&&s(13,r=(c==null?void 0:c.target_heading)??null),e.$$.dirty&10240&&s(14,f=r!==null&&u!==null&&(()=>{const m=Math.abs(r-u);return Math.min(m,360-m)>2})()),e.$$.dirty&6144&&g!==null&&u!==null){const m=Math.abs(u-g);Math.min(m,360-m)<3&&s(12,g=null)}e.$$.dirty&28672&&s(0,d=g??(f?r:null)),e.$$.dirty&2049&&s(2,v=d!==null&&u!==null&&(()=>{const m=Math.abs(d-u);return Math.min(m,360-m)>2})())},[d,w,v,o,i,p,k,y,M,c,h,u,g,r,f,T]}class Un extends pt{constructor(l){super(),vt(this,l,qn,jn,ot,{status:9,ultrabeam:10})}}function Gl(e,l,s){const i=e.slice();return i[35]=l[s],i}function jl(e){let l,s=e[35].label+"",i;return{c(){l=a("option"),i=z(s),l.__value=e[35].value,Pt(l,l.__value)},m(o,r){L(o,l,r),n(l,i)},p:we,d(o){o&&E(l)}}}function ql(e){let l,s,i,o,r,f,d,v,c,h=e[6].toFixed(0)+"",u,w;return{c(){l=a("div"),s=a("h3"),s.textContent="Motors Moving...",i=b(),o=a("div"),r=a("div"),f=b(),d=a("div"),v=z(e[0]),c=z(" / 60 ("),u=z(h),w=z("%)"),t(s,"class","svelte-17wppqz"),t(r,"class","progress-fill svelte-17wppqz"),ae(r,"width",e[6]+"%"),t(o,"class","progress-bar svelte-17wppqz"),t(d,"class","progress-text svelte-17wppqz"),t(l,"class","progress-section svelte-17wppqz")},m(g,p){L(g,l,p),n(l,s),n(l,i),n(l,o),n(o,r),n(l,f),n(l,d),n(d,v),n(d,c),n(d,u),n(d,w)},p(g,p){p[0]&64&&ae(r,"width",g[6]+"%"),p[0]&1&&R(v,g[0]),p[0]&64&&h!==(h=g[6].toFixed(0)+"")&&R(u,h)},d(g){g&&E(l)}}}function Jn(e){let l,s,i,o,r,f,d,v,c,h,u,w,g=(e[1]/1e3).toFixed(3)+"",p,k,y,M,T,m,C,A,S,F,_,I,O,J=e[10][e[2]]+"",$,re,H,P,le,U,N,B,se,K,fe,Me,ee,V,Z,ie,ce,oe,ue,ne,Ae,Te,Ie,Ne,Pe,Se,te,ye,Q=ut(e[11]),X=[];for(let G=0;G0&&ql(e);return{c(){l=a("div"),s=a("div"),i=a("h2"),i.textContent="Ultrabeam VL2.3",o=b(),r=a("span"),f=b(),d=a("div"),v=a("div"),c=a("div"),h=a("div"),h.textContent="Frequency",u=b(),w=a("div"),p=z(g),k=z(" MHz"),y=b(),M=a("div"),T=a("div"),T.textContent="Band",m=b(),C=a("div"),A=z(e[7]),S=b(),F=a("div"),_=a("div"),_.textContent="Direction",I=b(),O=a("div"),$=z(J),re=b(),H=a("div"),P=a("h3"),P.textContent="Auto Tracking",le=b(),U=a("div"),N=a("label"),B=a("input"),se=b(),K=a("span"),K.textContent="Enable Auto-Track from Tuner",fe=b(),Me=a("div"),ee=a("label"),ee.textContent="Threshold:",V=b(),Z=a("select");for(let G=0;G↓ + Retract Elements`,t(i,"class","svelte-17wppqz"),t(r,"class","status-dot svelte-17wppqz"),W(r,"disconnected",!e[9]),t(s,"class","card-header svelte-17wppqz"),t(h,"class","status-label svelte-17wppqz"),t(w,"class","status-value freq svelte-17wppqz"),t(c,"class","status-item svelte-17wppqz"),t(T,"class","status-label svelte-17wppqz"),t(C,"class","status-value band svelte-17wppqz"),t(M,"class","status-item svelte-17wppqz"),t(_,"class","status-label svelte-17wppqz"),t(O,"class","status-value direction svelte-17wppqz"),t(F,"class","status-item svelte-17wppqz"),t(v,"class","status-grid svelte-17wppqz"),t(P,"class","svelte-17wppqz"),t(B,"type","checkbox"),t(B,"class","svelte-17wppqz"),t(N,"class","toggle-label svelte-17wppqz"),t(ee,"for","threshold-select"),t(ee,"class","svelte-17wppqz"),t(Z,"id","threshold-select"),e[4]===void 0&&Nt(()=>e[22].call(Z)),t(Me,"class","threshold-group svelte-17wppqz"),t(U,"class","auto-track-controls svelte-17wppqz"),t(oe,"class","dir-btn svelte-17wppqz"),W(oe,"active",e[5]===0),t(ne,"class","dir-btn svelte-17wppqz"),W(ne,"active",e[5]===1),t(Te,"class","dir-btn svelte-17wppqz"),W(Te,"active",e[5]===2),t(ce,"class","direction-buttons svelte-17wppqz"),t(H,"class","control-section compact svelte-17wppqz"),t(Se,"class","btn-danger"),t(Pe,"class","actions svelte-17wppqz"),t(d,"class","metrics svelte-17wppqz"),t(l,"class","card svelte-17wppqz")},m(G,de){L(G,l,de),n(l,s),n(s,i),n(s,o),n(s,r),n(l,f),n(l,d),n(d,v),n(v,c),n(c,h),n(c,u),n(c,w),n(w,p),n(w,k),n(v,y),n(v,M),n(M,T),n(M,m),n(M,C),n(C,A),n(v,S),n(v,F),n(F,_),n(F,I),n(F,O),n(O,$),n(d,re),n(d,H),n(H,P),n(H,le),n(H,U),n(U,N),n(N,B),B.checked=e[3],n(N,se),n(N,K),n(U,fe),n(U,Me),n(Me,ee),n(Me,V),n(Me,Z);for(let Y=0;Y0?x?x.p(G,de):(x=ql(G),x.c(),x.m(d,Ne)):x&&(x.d(1),x=null)},i:we,o:we,d(G){G&&E(l),Dt(X,G),x&&x.d(),te=!1,nt(ye)}}}function Xn(e,l,s){let i,o,r,f,d,v,c,h,u,w,g,{status:p}=l,{flexradio:k=null}=l;const y=["6M","10M","12M","15M","17M","20M","30M","40M"];function M(P,le){return le>=0&&le<=7?y[le]:P>=7e3&&P<=7300?"40M":P>=10100&&P<=10150?"30M":P>=14e3&&P<=14350?"20M":P>=18068&&P<=18168?"17M":P>=21e3&&P<=21450?"15M":P>=24890&&P<=24990?"12M":P>=28e3&&P<=29700?"10M":P>=5e4&&P<=54e3?"6M":"Unknown"}const T=["Normal","180°","Bi-Dir"],m=[{value:25,label:"25 kHz"},{value:50,label:"50 kHz"},{value:100,label:"100 kHz"}];let C=!0,A=25,S=0;async function F(){if(o!==0)try{await Oe.ultrabeam.setFrequency(o,S),await Oe.ultrabeam.setDirection(S)}catch(P){console.log("Direction change sent (may show code 30 if busy):",P)}}async function _(){try{await Oe.ultrabeam.setAutoTrack(C,A)}catch(P){console.error("Failed to update auto-track:",P)}}async function I(){if(confirm("Retract all antenna elements?"))try{await Oe.ultrabeam.retract()}catch(P){console.error("Failed to retract:",P)}}function O(){C=this.checked,s(3,C)}function J(){A=tn(this),s(4,A),s(11,m)}const $=()=>{s(5,S=0),F()},re=()=>{s(5,S=1),F()},H=()=>{s(5,S=2),F()};return e.$$set=P=>{"status"in P&&s(15,p=P.status),"flexradio"in P&&s(16,k=P.flexradio)},e.$$.update=()=>{e.$$.dirty[0]&32768&&s(9,i=(p==null?void 0:p.connected)||!1),e.$$.dirty[0]&32768&&s(1,o=(p==null?void 0:p.frequency)||0),e.$$.dirty[0]&32768&&s(18,r=(p==null?void 0:p.band)||0),e.$$.dirty[0]&32768&&s(2,f=(p==null?void 0:p.direction)||0),e.$$.dirty[0]&32768&&s(8,d=(p==null?void 0:p.motors_moving)||0),e.$$.dirty[0]&32768&&s(17,v=(p==null?void 0:p.progress_total)||0),e.$$.dirty[0]&32768&&s(0,c=(p==null?void 0:p.progress_current)||0),e.$$.dirty[0]&32768&&p!=null&&p.element_lengths,e.$$.dirty[0]&32768&&p&&`${p.firmware_major}${p.firmware_minor}`,e.$$.dirty[0]&65536&&s(20,h=(k==null?void 0:k.connected)||!1),e.$$.dirty[0]&65536&&s(19,u=(k==null?void 0:k.interlock_state)||null),e.$$.dirty[0]&524288,e.$$.dirty[0]&1638400&&k&&console.log("FlexRadio data:",{connected:k.connected,interlock_state:k.interlock_state,interlockConnected:h,interlockState:u}),e.$$.dirty[0]&262146&&s(7,w=M(o,r)),e.$$.dirty[0]&4&&s(5,S=f),e.$$.dirty[0]&262144,e.$$.dirty[0]&131073&&s(6,g=v>0?c/60*100:0)},[c,o,f,C,A,S,g,w,d,i,T,m,F,_,I,p,k,v,r,u,h,O,J,$,re,H]}class Yn extends pt{constructor(l){super(),vt(this,l,Xn,Jn,ot,{status:15,flexradio:16},null,[-1,-1])}}function Vn(e){var zt,ge,_e,Ut,Jt,Xt,Yt,Vt,Zt,Kt,Ht;let l,s,i,o,r,f,d,v,c,h,u=e[1]?"Connected":"Disconnected",w,g,p,k,y,M,T,m=e[7].sfi+"",C,A,S,F,_,I=e[7].sunspots+"",O,J,$,re,H,P=e[7].a_index+"",le,U,N,B,se,K=e[7].k_index+"",fe,Me,ee,V,Z,ie=e[7].geomag+"",ce,oe,ue,ne,Ae,Te,Ie=e[6].wind_speed.toFixed(1)+"",Ne,Pe,Se,te,ye,Q=e[6].wind_gust.toFixed(1)+"",X,x,G,de,Y,ve=e[6].temp.toFixed(1)+"",j,be,pe,Ee,Ye,Ve=e[6].feels_like.toFixed(1)+"",We,Je,Be,Le,$e,De=Ul(e[2])+"",Qe,Ze,xe,Ge=e[2].toLocaleDateString()+"",he,ze,et,ht,rt,st,Re,Ke,Mt,He,gt,tt,it,je,lt,Xe,qe,at,Ue,Fe;return et=new Fn({props:{flexradio:(zt=e[0])==null?void 0:zt.flexradio,weather:(ge=e[0])==null?void 0:ge.weather,latitude:e[4],longitude:e[5],windWarningThreshold:30,gustWarningThreshold:50}}),Ke=new An({props:{status:(_e=e[0])==null?void 0:_e.webswitch}}),He=new Dn({props:{status:(Ut=e[0])==null?void 0:Ut.power_genius}}),tt=new Rn({props:{status:(Jt=e[0])==null?void 0:Jt.tuner_genius,flexradio:(Xt=e[0])==null?void 0:Xt.flexradio}}),lt=new Gn({props:{status:(Yt=e[0])==null?void 0:Yt.antenna_genius}}),qe=new Yn({props:{status:(Vt=e[0])==null?void 0:Vt.ultrabeam,flexradio:(Zt=e[0])==null?void 0:Zt.flexradio}}),Ue=new Un({props:{status:(Kt=e[0])==null?void 0:Kt.rotator_genius,ultrabeam:(Ht=e[0])==null?void 0:Ht.ultrabeam}}),{c(){l=a("div"),s=a("header"),i=a("div"),o=a("h1"),r=z(e[3]),f=z(" Shack"),d=b(),v=a("div"),c=a("span"),h=b(),w=z(u),g=b(),p=a("div"),k=a("div"),y=a("span"),M=z("SFI "),T=a("span"),C=z(m),A=b(),S=a("span"),F=z("Spots "),_=a("span"),O=z(I),J=b(),$=a("span"),re=z("A "),H=a("span"),le=z(P),U=b(),N=a("span"),B=z("K "),se=a("span"),fe=z(K),Me=b(),ee=a("span"),V=z("G "),Z=a("span"),ce=z(ie),oe=b(),ue=a("div"),ne=a("div"),Ae=a("span"),Te=z("🌬️ "),Ne=z(Ie),Pe=z(" km/h"),Se=b(),te=a("span"),ye=z("💨 "),X=z(Q),x=z(" km/h"),G=b(),de=a("span"),Y=z("🌡️ "),j=z(ve),be=z(" °C"),pe=b(),Ee=a("span"),Ye=z("→ "),We=z(Ve),Je=z(" °C"),Be=b(),Le=a("div"),$e=a("span"),Qe=z(De),Ze=b(),xe=a("span"),he=z(Ge),ze=b(),bt(et.$$.fragment),ht=b(),rt=a("main"),st=a("div"),Re=a("div"),bt(Ke.$$.fragment),Mt=b(),bt(He.$$.fragment),gt=b(),bt(tt.$$.fragment),it=b(),je=a("div"),bt(lt.$$.fragment),Xe=b(),bt(qe.$$.fragment),at=b(),bt(Ue.$$.fragment),t(o,"class","svelte-a5dfm6"),t(c,"class","status-indicator"),W(c,"status-online",e[1]),W(c,"status-offline",!e[1]),t(v,"class","connection-status svelte-a5dfm6"),t(i,"class","header-left svelte-a5dfm6"),t(T,"class","value svelte-a5dfm6"),t(y,"class","solar-item svelte-a5dfm6"),t(_,"class","value svelte-a5dfm6"),t(S,"class","solar-item svelte-a5dfm6"),t(H,"class","value svelte-a5dfm6"),t($,"class","solar-item svelte-a5dfm6"),t(se,"class","value svelte-a5dfm6"),t(N,"class","solar-item svelte-a5dfm6"),t(Z,"class","value svelte-a5dfm6"),t(ee,"class","solar-item svelte-a5dfm6"),t(k,"class","solar-info svelte-a5dfm6"),t(p,"class","header-center svelte-a5dfm6"),t(Ae,"title","Wind"),t(te,"title","Gust"),t(de,"title","Temperature"),t(Ee,"title","Feels like"),t(ne,"class","weather-info svelte-a5dfm6"),t($e,"class","time svelte-a5dfm6"),t(xe,"class","date svelte-a5dfm6"),t(Le,"class","clock svelte-a5dfm6"),t(ue,"class","header-right svelte-a5dfm6"),t(s,"class","svelte-a5dfm6"),t(Re,"class","row svelte-a5dfm6"),t(je,"class","row svelte-a5dfm6"),t(st,"class","dashboard-grid svelte-a5dfm6"),t(rt,"class","svelte-a5dfm6"),t(l,"class","app svelte-a5dfm6")},m(q,me){L(q,l,me),n(l,s),n(s,i),n(i,o),n(o,r),n(o,f),n(i,d),n(i,v),n(v,c),n(v,h),n(v,w),n(s,g),n(s,p),n(p,k),n(k,y),n(y,M),n(y,T),n(T,C),n(k,A),n(k,S),n(S,F),n(S,_),n(_,O),n(k,J),n(k,$),n($,re),n($,H),n(H,le),n(k,U),n(k,N),n(N,B),n(N,se),n(se,fe),n(k,Me),n(k,ee),n(ee,V),n(ee,Z),n(Z,ce),n(s,oe),n(s,ue),n(ue,ne),n(ne,Ae),n(Ae,Te),n(Ae,Ne),n(Ae,Pe),n(ne,Se),n(ne,te),n(te,ye),n(te,X),n(te,x),n(ne,G),n(ne,de),n(de,Y),n(de,j),n(de,be),n(ne,pe),n(ne,Ee),n(Ee,Ye),n(Ee,We),n(Ee,Je),n(ue,Be),n(ue,Le),n(Le,$e),n($e,Qe),n(Le,Ze),n(Le,xe),n(xe,he),n(l,ze),dt(et,l,null),n(l,ht),n(l,rt),n(rt,st),n(st,Re),dt(Ke,Re,null),n(Re,Mt),dt(He,Re,null),n(Re,gt),dt(tt,Re,null),n(st,it),n(st,je),dt(lt,je,null),n(je,Xe),dt(qe,je,null),n(je,at),dt(Ue,je,null),Fe=!0},p(q,[me]){var el,tl,ll,nl,sl,il,al,ol,rl,cl,dl;(!Fe||me&8)&&R(r,q[3]),(!Fe||me&2)&&W(c,"status-online",q[1]),(!Fe||me&2)&&W(c,"status-offline",!q[1]),(!Fe||me&2)&&u!==(u=q[1]?"Connected":"Disconnected")&&R(w,u),(!Fe||me&128)&&m!==(m=q[7].sfi+"")&&R(C,m),(!Fe||me&128)&&I!==(I=q[7].sunspots+"")&&R(O,I),(!Fe||me&128)&&P!==(P=q[7].a_index+"")&&R(le,P),(!Fe||me&128)&&K!==(K=q[7].k_index+"")&&R(fe,K),(!Fe||me&128)&&ie!==(ie=q[7].geomag+"")&&R(ce,ie),(!Fe||me&64)&&Ie!==(Ie=q[6].wind_speed.toFixed(1)+"")&&R(Ne,Ie),(!Fe||me&64)&&Q!==(Q=q[6].wind_gust.toFixed(1)+"")&&R(X,Q),(!Fe||me&64)&&ve!==(ve=q[6].temp.toFixed(1)+"")&&R(j,ve),(!Fe||me&64)&&Ve!==(Ve=q[6].feels_like.toFixed(1)+"")&&R(We,Ve),(!Fe||me&4)&&De!==(De=Ul(q[2])+"")&&R(Qe,De),(!Fe||me&4)&&Ge!==(Ge=q[2].toLocaleDateString()+"")&&R(he,Ge);const Tt={};me&1&&(Tt.flexradio=(el=q[0])==null?void 0:el.flexradio),me&1&&(Tt.weather=(tl=q[0])==null?void 0:tl.weather),me&16&&(Tt.latitude=q[4]),me&32&&(Tt.longitude=q[5]),et.$set(Tt);const Qt={};me&1&&(Qt.status=(ll=q[0])==null?void 0:ll.webswitch),Ke.$set(Qt);const xt={};me&1&&(xt.status=(nl=q[0])==null?void 0:nl.power_genius),He.$set(xt);const Et={};me&1&&(Et.status=(sl=q[0])==null?void 0:sl.tuner_genius),me&1&&(Et.flexradio=(il=q[0])==null?void 0:il.flexradio),tt.$set(Et);const $t={};me&1&&($t.status=(al=q[0])==null?void 0:al.antenna_genius),lt.$set($t);const Lt={};me&1&&(Lt.status=(ol=q[0])==null?void 0:ol.ultrabeam),me&1&&(Lt.flexradio=(rl=q[0])==null?void 0:rl.flexradio),qe.$set(Lt);const Rt={};me&1&&(Rt.status=(cl=q[0])==null?void 0:cl.rotator_genius),me&1&&(Rt.ultrabeam=(dl=q[0])==null?void 0:dl.ultrabeam),Ue.$set(Rt)},i(q){Fe||(ct(et.$$.fragment,q),ct(Ke.$$.fragment,q),ct(He.$$.fragment,q),ct(tt.$$.fragment,q),ct(lt.$$.fragment,q),ct(qe.$$.fragment,q),ct(Ue.$$.fragment,q),Fe=!0)},o(q){mt(et.$$.fragment,q),mt(Ke.$$.fragment,q),mt(He.$$.fragment,q),mt(tt.$$.fragment,q),mt(lt.$$.fragment,q),mt(qe.$$.fragment,q),mt(Ue.$$.fragment,q),Fe=!1},d(q){q&&E(l),ft(et),ft(Ke),ft(He),ft(tt),ft(lt),ft(qe),ft(Ue)}}}function Ul(e){return e.toTimeString().slice(0,8)}function Zn(e,l,s){let i,o,r=null,f=!1,d=new Date,v="F4BPO",c=null,h=null;const u=Hl.subscribe(g=>{s(0,r=g)}),w=jt.subscribe(g=>{s(1,f=g)});return Vl(async()=>{pl.connect();try{const p=await Oe.getConfig();p.callsign&&s(3,v=p.callsign),p.location&&(s(4,c=p.location.latitude),s(5,h=p.location.longitude))}catch(p){console.error("Failed to fetch config:",p)}const g=setInterval(()=>{s(2,d=new Date)},1e3);return()=>{clearInterval(g)}}),Zl(()=>{pl.disconnect(),u(),w()}),e.$$.update=()=>{e.$$.dirty&1&&s(7,i=(r==null?void 0:r.solar)||{sfi:0,sunspots:0,a_index:0,k_index:0,geomag:"Unknown"}),e.$$.dirty&1&&s(6,o=(r==null?void 0:r.weather)||{wind_speed:0,wind_gust:0,temp:0,feels_like:0})},[r,f,d,v,c,h,o,i]}class Kn extends pt{constructor(l){super(),vt(this,l,Zn,Vn,ot,{})}}new Kn({target:document.getElementById("app")}); diff --git a/cmd/server/web/dist/assets/index-Ci4y1GIJ.js b/cmd/server/web/dist/assets/index-Ci4y1GIJ.js new file mode 100644 index 0000000..bd06fab --- /dev/null +++ b/cmd/server/web/dist/assets/index-Ci4y1GIJ.js @@ -0,0 +1,11 @@ +var Ql=Object.defineProperty;var xl=(e,l,s)=>l in e?Ql(e,l,{enumerable:!0,configurable:!0,writable:!0,value:s}):e[l]=s;var Rt=(e,l,s)=>xl(e,typeof l!="symbol"?l+"":l,s);(function(){const l=document.createElement("link").relList;if(l&&l.supports&&l.supports("modulepreload"))return;for(const a of document.querySelectorAll('link[rel="modulepreload"]'))i(a);new MutationObserver(a=>{for(const r of a)if(r.type==="childList")for(const f of r.addedNodes)f.tagName==="LINK"&&f.rel==="modulepreload"&&i(f)}).observe(document,{childList:!0,subtree:!0});function s(a){const r={};return a.integrity&&(r.integrity=a.integrity),a.referrerPolicy&&(r.referrerPolicy=a.referrerPolicy),a.crossOrigin==="use-credentials"?r.credentials="include":a.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function i(a){if(a.ep)return;a.ep=!0;const r=s(a);fetch(a.href,r)}})();function _e(){}function Xl(e){return e()}function fl(){return Object.create(null)}function nt(e){e.forEach(Xl)}function jl(e){return typeof e=="function"}function at(e,l){return e!=e?l==l:e!==l||e&&typeof e=="object"||typeof e=="function"}function $l(e){return Object.keys(e).length===0}function n(e,l){e.appendChild(l)}function E(e,l,s){e.insertBefore(l,s||null)}function z(e){e.parentNode&&e.parentNode.removeChild(e)}function Dt(e,l){for(let s=0;se.removeEventListener(l,s,i)}function t(e,l,s){s==null?e.removeAttribute(l):e.getAttribute(l)!==s&&e.setAttribute(l,s)}function en(e){return Array.from(e.childNodes)}function L(e,l){l=""+l,e.data!==l&&(e.data=l)}function Ot(e,l){e.value=l??""}function oe(e,l,s,i){s==null?e.style.removeProperty(l):e.style.setProperty(l,s,"")}function Nt(e,l,s){for(let i=0;ie.indexOf(i)===-1?l.push(i):s.push(i)),s.forEach(i=>i()),yt=l}const At=new Set;let an;function ct(e,l){e&&e.i&&(At.delete(e),e.i(l))}function gt(e,l,s,i){if(e&&e.o){if(At.has(e))return;At.add(e),an.c.push(()=>{At.delete(e)}),e.o(l)}}function ut(e){return(e==null?void 0:e.length)!==void 0?e:Array.from(e)}function mt(e){e&&e.c()}function dt(e,l,s){const{fragment:i,after_update:a}=e.$$;i&&i.m(l,s),qt(()=>{const r=e.$$.on_mount.map(Xl).filter(jl);e.$$.on_destroy?e.$$.on_destroy.push(...r):nt(r),e.$$.on_mount=[]}),a.forEach(qt)}function ft(e,l){const s=e.$$;s.fragment!==null&&(on(s.after_update),nt(s.on_destroy),s.fragment&&s.fragment.d(l),s.on_destroy=s.fragment=null,s.ctx=[])}function rn(e,l){e.$$.dirty[0]===-1&&(kt.push(e),nn(),e.$$.dirty.fill(0)),e.$$.dirty[l/31|0]|=1<{const h=b.length?b[0]:_;return c.ctx&&a(c.ctx[u],c.ctx[u]=h)&&(!c.skip_bound&&c.bound[u]&&c.bound[u](h),p&&rn(e,u)),_}):[],c.update(),p=!0,nt(c.before_update),c.fragment=i?i(c.ctx):!1,l.target){if(l.hydrate){const u=en(l.target);c.fragment&&c.fragment.l(u),u.forEach(z)}else c.fragment&&c.fragment.c();l.intro&&ct(e.$$.fragment),dt(e,l.target,l.anchor),Kl()}St(v)}class ht{constructor(){Rt(this,"$$");Rt(this,"$$set")}$destroy(){ft(this,1),this.$destroy=_e}$on(l,s){if(!jl(s))return _e;const i=this.$$.callbacks[l]||(this.$$.callbacks[l]=[]);return i.push(s),()=>{const a=i.indexOf(s);a!==-1&&i.splice(a,1)}}$set(l){this.$$set&&!$l(l)&&(this.$$.skip_bound=!0,this.$$set(l),this.$$.skip_bound=!1)}}const cn="4";typeof window<"u"&&(window.__svelte||(window.__svelte={v:new Set})).v.add(cn);const wt=[];function Ut(e,l=_e){let s;const i=new Set;function a(d){if(at(e,d)&&(e=d,s)){const v=!wt.length;for(const c of i)c[1](),wt.push(c,e);if(v){for(let c=0;c{i.delete(c),i.size===0&&s&&(s(),s=null)}}return{set:a,update:r,subscribe:f}}const Gt=Ut(!1),Hl=Ut(null),dn=Ut(null);class fn{constructor(){this.ws=null,this.reconnectTimeout=null,this.reconnectDelay=3e3}connect(){const s=`${window.location.protocol==="https:"?"wss:":"ws:"}//${window.location.host}/ws`;try{this.ws=new WebSocket(s),this.ws.onopen=()=>{console.log("WebSocket connected"),Gt.set(!0)},this.ws.onmessage=i=>{try{const a=JSON.parse(i.data);a.type==="update"&&(console.log("System status updated:",a.data),Hl.set(a.data),dn.set(new Date(a.timestamp)))}catch(a){console.error("Error parsing message:",a)}},this.ws.onerror=i=>{console.error("WebSocket error:",i)},this.ws.onclose=()=>{console.log("WebSocket disconnected"),Gt.set(!1),this.scheduleReconnect()}}catch(i){console.error("Error creating WebSocket:",i),this.scheduleReconnect()}}scheduleReconnect(){this.reconnectTimeout&&clearTimeout(this.reconnectTimeout),this.reconnectTimeout=setTimeout(()=>{console.log("Attempting to reconnect..."),this.connect()},this.reconnectDelay)}send(l){this.ws&&this.ws.readyState===WebSocket.OPEN&&this.ws.send(JSON.stringify(l))}disconnect(){this.reconnectTimeout&&clearTimeout(this.reconnectTimeout),this.ws&&this.ws.close()}}const hl=new fn,un="/api";async function ye(e,l={}){try{const s=await fetch(`${un}${e}`,{...l,headers:{"Content-Type":"application/json",...l.headers}});if(!s.ok)throw new Error(`HTTP error! status: ${s.status}`);return await s.json()}catch(s){throw console.error("API request failed:",s),s}}const Ae={getStatus:()=>ye("/status"),getConfig:()=>ye("/config"),webswitch:{relayOn:e=>ye(`/webswitch/relay/on?relay=${e}`,{method:"POST"}),relayOff:e=>ye(`/webswitch/relay/off?relay=${e}`,{method:"POST"}),allOn:()=>ye("/webswitch/all/on",{method:"POST"}),allOff:()=>ye("/webswitch/all/off",{method:"POST"})},rotator:{move:(e,l)=>ye("/rotator/move",{method:"POST",body:JSON.stringify({rotator:e,azimuth:l})}),cw:e=>ye(`/rotator/cw?rotator=${e}`,{method:"POST"}),ccw:e=>ye(`/rotator/ccw?rotator=${e}`,{method:"POST"}),stop:()=>ye("/rotator/stop",{method:"POST"})},tuner:{setOperate:e=>ye("/tuner/operate",{method:"POST",body:JSON.stringify({value:e})}),setBypass:e=>ye("/tuner/bypass",{method:"POST",body:JSON.stringify({value:e})}),autoTune:()=>ye("/tuner/autotune",{method:"POST"})},antenna:{selectAntenna:(e,l)=>ye("/antenna/select",{method:"POST",body:JSON.stringify({port:e,antenna:l})}),deselectAntenna:(e,l)=>ye("/antenna/deselect",{method:"POST",body:JSON.stringify({port:e,antenna:l})}),reboot:()=>ye("/antenna/reboot",{method:"POST"})},power:{setFanMode:e=>ye("/power/fanmode",{method:"POST",body:JSON.stringify({mode:e})}),setOperate:e=>ye("/power/operate",{method:"POST",body:JSON.stringify({value:e})})},rotator:{setHeading:e=>ye("/rotator/heading",{method:"POST",body:JSON.stringify({heading:e})}),rotateCW:()=>ye("/rotator/cw",{method:"POST"}),rotateCCW:()=>ye("/rotator/ccw",{method:"POST"}),stop:()=>ye("/rotator/stop",{method:"POST"})},ultrabeam:{setFrequency:(e,l)=>ye("/ultrabeam/frequency",{method:"POST",body:JSON.stringify({frequency:e,direction:l})}),retract:()=>ye("/ultrabeam/retract",{method:"POST"}),setAutoTrack:(e,l)=>ye("/ultrabeam/autotrack",{method:"POST",body:JSON.stringify({enabled:e,threshold:l})}),setDirection:e=>ye("/ultrabeam/direction",{method:"POST",body:JSON.stringify({direction:e})})}};function vn(e){let l;return{c(){l=o("span"),l.textContent="Checking FlexRadio...",t(l,"class","no-signal svelte-h7ie36")},m(s,i){E(s,l,i)},p:_e,d(s){s&&z(l)}}}function hn(e){let l;return{c(){l=o("span"),l.textContent="FlexRadio not connected",t(l,"class","no-signal svelte-h7ie36")},m(s,i){E(s,l,i)},p:_e,d(s){s&&z(l)}}}function pn(e){let l;return{c(){l=o("div"),l.innerHTML=' TCP connected, radio off',t(l,"class","radio-status svelte-h7ie36")},m(s,i){E(s,l,i)},p:_e,d(s){s&&z(l)}}}function gn(e){let l,s,i,a,r=(e[11]||"Radio is on")+"",f,d,v,c=e[9]&&pl(e),p=e[10]&&gl(e);return{c(){l=o("div"),s=o("span"),s.textContent="●",i=m(),a=o("span"),f=T(r),d=m(),c&&c.c(),v=m(),p&&p.c(),t(s,"class","radio-on-indicator svelte-h7ie36"),t(a,"class","radio-status-text svelte-h7ie36"),t(l,"class","radio-status svelte-h7ie36")},m(u,_){E(u,l,_),n(l,s),n(l,i),n(l,a),n(a,f),n(l,d),c&&c.m(l,null),n(l,v),p&&p.m(l,null)},p(u,_){_[0]&2048&&r!==(r=(u[11]||"Radio is on")+"")&&L(f,r),u[9]?c?c.p(u,_):(c=pl(u),c.c(),c.m(l,v)):c&&(c.d(1),c=null),u[10]?p?p.p(u,_):(p=gl(u),p.c(),p.m(l,null)):p&&(p.d(1),p=null)},d(u){u&&z(l),c&&c.d(),p&&p.d()}}}function mn(e){let l,s,i,a,r,f,d=e[9]&&ml(e),v=e[10]&&bl(e);return{c(){l=o("div"),s=o("span"),s.textContent="●",i=m(),a=o("span"),a.textContent="Slice active, waiting for frequency...",r=m(),d&&d.c(),f=m(),v&&v.c(),t(s,"class","radio-on-indicator svelte-h7ie36"),t(a,"class","radio-status-text svelte-h7ie36"),t(l,"class","radio-status svelte-h7ie36")},m(c,p){E(c,l,p),n(l,s),n(l,i),n(l,a),n(l,r),d&&d.m(l,null),n(l,f),v&&v.m(l,null)},p(c,p){c[9]?d?d.p(c,p):(d=ml(c),d.c(),d.m(l,f)):d&&(d.d(1),d=null),c[10]?v?v.p(c,p):(v=bl(c),v.c(),v.m(l,null)):v&&(v.d(1),v=null)},d(c){c&&z(l),d&&d.d(),v&&v.d()}}}function bn(e){let l,s,i=Sl(e[3])+"",a,r,f,d,v,c,p,u=e[4]&&_l(e),_=e[25]&&wl(e),b=e[24]&&kl();return{c(){l=o("div"),s=o("span"),a=T(i),r=m(),f=o("span"),f.textContent="MHz",d=m(),u&&u.c(),v=m(),_&&_.c(),c=m(),b&&b.c(),p=It(),t(s,"class","frequency svelte-h7ie36"),oe(s,"--band-color",e[22]),t(f,"class","unit svelte-h7ie36"),t(l,"class","frequency-display svelte-h7ie36")},m(h,y){E(h,l,y),n(l,s),n(s,a),n(l,r),n(l,f),E(h,d,y),u&&u.m(h,y),E(h,v,y),_&&_.m(h,y),E(h,c,y),b&&b.m(h,y),E(h,p,y)},p(h,y){y[0]&8&&i!==(i=Sl(h[3])+"")&&L(a,i),y[0]&4194304&&oe(s,"--band-color",h[22]),h[4]?u?u.p(h,y):(u=_l(h),u.c(),u.m(v.parentNode,v)):u&&(u.d(1),u=null),h[25]?_?_.p(h,y):(_=wl(h),_.c(),_.m(c.parentNode,c)):_&&(_.d(1),_=null),h[24]?b||(b=kl(),b.c(),b.m(p.parentNode,p)):b&&(b.d(1),b=null)},d(h){h&&(z(l),z(d),z(v),z(c),z(p)),u&&u.d(h),_&&_.d(h),b&&b.d(h)}}}function pl(e){let l,s;return{c(){l=o("span"),s=T(e[9]),t(l,"class","model-badge svelte-h7ie36")},m(i,a){E(i,l,a),n(l,s)},p(i,a){a[0]&512&&L(s,i[9])},d(i){i&&z(l)}}}function gl(e){let l,s;return{c(){l=o("span"),s=T(e[10]),t(l,"class","callsign-badge svelte-h7ie36")},m(i,a){E(i,l,a),n(l,s)},p(i,a){a[0]&1024&&L(s,i[10])},d(i){i&&z(l)}}}function ml(e){let l,s;return{c(){l=o("span"),s=T(e[9]),t(l,"class","model-badge svelte-h7ie36")},m(i,a){E(i,l,a),n(l,s)},p(i,a){a[0]&512&&L(s,i[9])},d(i){i&&z(l)}}}function bl(e){let l,s;return{c(){l=o("span"),s=T(e[10]),t(l,"class","callsign-badge svelte-h7ie36")},m(i,a){E(i,l,a),n(l,s)},p(i,a){a[0]&1024&&L(s,i[10])},d(i){i&&z(l)}}}function _l(e){let l,s;return{c(){l=o("span"),s=T(e[4]),t(l,"class","band-badge svelte-h7ie36"),oe(l,"background-color",e[22])},m(i,a){E(i,l,a),n(l,s)},p(i,a){a[0]&16&&L(s,i[4]),a[0]&4194304&&oe(l,"background-color",i[22])},d(i){i&&z(l)}}}function wl(e){let l,s;return{c(){l=o("span"),s=T(e[25]),t(l,"class","mode-badge svelte-h7ie36")},m(i,a){E(i,l,a),n(l,s)},p(i,a){a[0]&33554432&&L(s,i[25])},d(i){i&&z(l)}}}function kl(e){let l;return{c(){l=o("span"),l.textContent="TX",t(l,"class","tx-indicator svelte-h7ie36")},m(s,i){E(s,l,i)},d(s){s&&z(l)}}}function _n(e){let l;return{c(){l=o("span"),l.textContent="📍 Position not set",t(l,"class","no-location svelte-h7ie36")},m(s,i){E(s,l,i)},p:_e,d(s){s&&z(l)}}}function wn(e){let l,s,i,a,r,f,d,v,c=Pt(e[12])+"",p,u,_,b,h,y,k,M,C,g=Pt(e[13])+"",S,I,F;function P(A,X){if(A[14])return yn;if(A[16])return kn}let w=P(e),N=w&&w(e);return{c(){l=o("div"),s=o("span"),i=D("svg"),a=D("line"),r=D("path"),f=D("path"),d=D("path"),v=m(),p=T(c),u=m(),_=o("span"),b=D("svg"),h=D("line"),y=D("path"),k=D("path"),M=D("path"),C=m(),S=T(g),I=m(),N&&N.c(),F=It(),t(a,"x1","2"),t(a,"y1","18"),t(a,"x2","22"),t(a,"y2","18"),t(a,"stroke","currentColor"),t(a,"stroke-width","1.5"),t(a,"opacity","0.5"),t(r,"d","M12 18 A6 6 0 0 1 12 6 A6 6 0 0 1 12 18"),t(r,"fill","#fbbf24"),t(f,"d","M12 2v3M5.6 5.6l2.1 2.1M2 12h3M19 12h3M18.4 5.6l-2.1 2.1"),t(f,"stroke","#fbbf24"),t(f,"stroke-width","2"),t(f,"stroke-linecap","round"),t(d,"d","M12 14l-3 3M12 14l3 3M12 14v5"),t(d,"stroke","#22c55e"),t(d,"stroke-width","2"),t(d,"stroke-linecap","round"),t(d,"fill","none"),t(i,"class","sun-icon sunrise-icon svelte-h7ie36"),t(i,"width","18"),t(i,"height","18"),t(i,"viewBox","0 0 24 24"),t(s,"class","sun-item svelte-h7ie36"),t(s,"title","Sunrise"),t(h,"x1","2"),t(h,"y1","18"),t(h,"x2","22"),t(h,"y2","18"),t(h,"stroke","currentColor"),t(h,"stroke-width","1.5"),t(h,"opacity","0.5"),t(y,"d","M12 18 A6 6 0 0 1 12 6 A6 6 0 0 1 12 18"),t(y,"fill","#f97316"),t(k,"d","M12 2v3M5.6 5.6l2.1 2.1M2 12h3M19 12h3M18.4 5.6l-2.1 2.1"),t(k,"stroke","#f97316"),t(k,"stroke-width","2"),t(k,"stroke-linecap","round"),t(k,"opacity","0.7"),t(M,"d","M12 22l-3-3M12 22l3-3M12 22v-5"),t(M,"stroke","#ef4444"),t(M,"stroke-width","2"),t(M,"stroke-linecap","round"),t(M,"fill","none"),t(b,"class","sun-icon sunset-icon svelte-h7ie36"),t(b,"width","18"),t(b,"height","18"),t(b,"viewBox","0 0 24 24"),t(_,"class","sun-item svelte-h7ie36"),t(_,"title","Sunset"),t(l,"class","sun-times svelte-h7ie36")},m(A,X){E(A,l,X),n(l,s),n(s,i),n(i,a),n(i,r),n(i,f),n(i,d),n(s,v),n(s,p),n(l,u),n(l,_),n(_,b),n(b,h),n(b,y),n(b,k),n(b,M),n(_,C),n(_,S),E(A,I,X),N&&N.m(A,X),E(A,F,X)},p(A,X){X[0]&4096&&c!==(c=Pt(A[12])+"")&&L(p,c),X[0]&8192&&g!==(g=Pt(A[13])+"")&&L(S,g),w===(w=P(A))&&N?N.p(A,X):(N&&N.d(1),N=w&&w(A),N&&(N.c(),N.m(F.parentNode,F)))},d(A){A&&(z(l),z(I),z(F)),N&&N.d(A)}}}function kn(e){let l,s;return{c(){l=o("span"),s=T(e[16]),t(l,"class","next-event svelte-h7ie36")},m(i,a){E(i,l,a),n(l,s)},p(i,a){a[0]&65536&&L(s,i[16])},d(i){i&&z(l)}}}function yn(e){let l;return{c(){l=o("span"),l.textContent="✨ Grayline",t(l,"class","grayline-badge svelte-h7ie36"),R(l,"sunrise",e[15]==="sunrise"),R(l,"sunset",e[15]==="sunset")},m(s,i){E(s,l,i)},p(s,i){i[0]&32768&&R(l,"sunrise",s[15]==="sunrise"),i[0]&32768&&R(l,"sunset",s[15]==="sunset")},d(s){s&&z(l)}}}function yl(e){let l,s,i,a,r,f,d=e[8].toFixed(0)+"",v,c;return{c(){l=o("div"),s=o("span"),s.textContent="⚠️",i=m(),a=o("span"),r=T("Vent: "),f=o("strong"),v=T(d),c=T(" km/h"),t(s,"class","alert-icon svelte-h7ie36"),t(f,"class","svelte-h7ie36"),t(a,"class","alert-text svelte-h7ie36"),t(l,"class","alert wind-alert svelte-h7ie36")},m(p,u){E(p,l,u),n(l,s),n(l,i),n(l,a),n(a,r),n(a,f),n(f,v),n(f,c)},p(p,u){u[0]&256&&d!==(d=p[8].toFixed(0)+"")&&L(v,d)},d(p){p&&z(l)}}}function Ml(e){let l,s,i,a,r,f,d=e[7].toFixed(0)+"",v,c;return{c(){l=o("div"),s=o("span"),s.textContent="🌪️",i=m(),a=o("span"),r=T("Rafales: "),f=o("strong"),v=T(d),c=T(" km/h"),t(s,"class","alert-icon svelte-h7ie36"),t(f,"class","svelte-h7ie36"),t(a,"class","alert-text svelte-h7ie36"),t(l,"class","alert gust-alert svelte-h7ie36")},m(p,u){E(p,l,u),n(l,s),n(l,i),n(l,a),n(a,r),n(a,f),n(f,v),n(f,c)},p(p,u){u[0]&128&&d!==(d=p[7].toFixed(0)+"")&&L(v,d)},d(p){p&&z(l)}}}function Tl(e){let l;return{c(){l=o("div"),l.innerHTML=' Weather OK',t(l,"class","status-ok svelte-h7ie36")},m(s,i){E(s,l,i)},d(s){s&&z(l)}}}function Mn(e){let l,s,i,a,r,f,d,v,c,p,u,_,b,h;function y(w,N){return w[21]?bn:w[19]?mn:w[20]?gn:w[17]?pn:w[18]?hn:vn}let k=y(e),M=k(e);function C(w,N){return w[0]&&w[1]?wn:_n}let g=C(e),S=g(e),I=e[6]&&yl(e),F=e[5]&&Ml(e),P=!e[23]&&Tl();return{c(){l=o("div"),s=o("div"),i=o("div"),i.textContent="📻",a=m(),M.c(),r=m(),f=o("div"),d=m(),v=o("div"),S.c(),c=m(),p=o("div"),u=m(),_=o("div"),I&&I.c(),b=m(),F&&F.c(),h=m(),P&&P.c(),t(i,"class","flex-icon svelte-h7ie36"),R(i,"connected",e[2]),R(i,"disconnected",!e[2]),t(s,"class","flex-section svelte-h7ie36"),t(f,"class","separator svelte-h7ie36"),t(v,"class","grayline-section svelte-h7ie36"),t(p,"class","separator svelte-h7ie36"),t(_,"class","weather-section svelte-h7ie36"),t(l,"class","status-banner svelte-h7ie36"),R(l,"has-warning",e[23])},m(w,N){E(w,l,N),n(l,s),n(s,i),n(s,a),M.m(s,null),n(l,r),n(l,f),n(l,d),n(l,v),S.m(v,null),n(l,c),n(l,p),n(l,u),n(l,_),I&&I.m(_,null),n(_,b),F&&F.m(_,null),n(_,h),P&&P.m(_,null)},p(w,N){N[0]&4&&R(i,"connected",w[2]),N[0]&4&&R(i,"disconnected",!w[2]),k===(k=y(w))&&M?M.p(w,N):(M.d(1),M=k(w),M&&(M.c(),M.m(s,null))),g===(g=C(w))&&S?S.p(w,N):(S.d(1),S=g(w),S&&(S.c(),S.m(v,null))),w[6]?I?I.p(w,N):(I=yl(w),I.c(),I.m(_,b)):I&&(I.d(1),I=null),w[5]?F?F.p(w,N):(F=Ml(w),F.c(),F.m(_,h)):F&&(F.d(1),F=null),w[23]?P&&(P.d(1),P=null):P||(P=Tl(),P.c(),P.m(_,null)),N[0]&8388608&&R(l,"has-warning",w[23])},i:_e,o:_e,d(w){w&&z(l),M.d(),S.d(),I&&I.d(),F&&F.d(),P&&P.d()}}}function Cl(e,l,s){const i=Math.PI/180,a=Tn(e),r=2*Math.PI/365*(a-1+(e.getHours()-12)/24),f=229.18*(75e-6+.001868*Math.cos(r)-.032077*Math.sin(r)-.014615*Math.cos(2*r)-.040849*Math.sin(2*r)),d=.006918-.399912*Math.cos(r)+.070257*Math.sin(r)-.006758*Math.cos(2*r)+907e-6*Math.sin(2*r)-.002697*Math.cos(3*r)+.00148*Math.sin(3*r),v=l*i,c=90.833*i,p=Math.cos(c)/(Math.cos(v)*Math.cos(d))-Math.tan(v)*Math.tan(d);if(p>1||p<-1)return{sunrise:null,sunset:null};const u=Math.acos(p)/i,_=720-4*(s+u)-f,b=720-4*(s-u)-f,h=new Date(e);h.setUTCHours(0,0,0,0),h.setUTCMinutes(_);const y=new Date(e);return y.setUTCHours(0,0,0,0),y.setUTCMinutes(b),{sunrise:h,sunset:y}}function Tn(e){const l=new Date(e.getFullYear(),0,0),s=e-l,i=1e3*60*60*24;return Math.floor(s/i)}function Pt(e){return e?e.toLocaleTimeString("fr-FR",{hour:"2-digit",minute:"2-digit"}):"--:--"}function Sl(e){return!e||e===0?"---":e<10?e.toFixed(4):e<100?e.toFixed(3):e.toFixed(2)}function Cn(e){return!e||e===0?"":e>=1.8&&e<=2?"160M":e>=3.5&&e<=4?"80M":e>=5.3&&e<=5.4?"60M":e>=7&&e<=7.3?"40M":e>=10.1&&e<=10.15?"30M":e>=14&&e<=14.35?"20M":e>=18.068&&e<=18.168?"17M":e>=21&&e<=21.45?"15M":e>=24.89&&e<=24.99?"12M":e>=28&&e<=29.7?"10M":e>=50&&e<=54?"6M":e>=144&&e<=148?"2M":e>=430&&e<=440?"70CM":""}function Sn(e){return{"160M":"#9c27b0","80M":"#673ab7","60M":"#3f51b5","40M":"#2196f3","30M":"#00bcd4","20M":"#009688","17M":"#4caf50","15M":"#8bc34a","12M":"#cddc39","10M":"#ffeb3b","6M":"#ff9800","2M":"#ff5722","70CM":"#f44336"}[e]||"#4fc3f7"}function Fn(e,l,s){let i,a,r,f,d,v,c,p,u,_,b,h,y,k,M,C,g,S,I,F,P,{flexradio:w=null}=l,{weather:N=null}=l,{latitude:A=null}=l,{longitude:X=null}=l,{windWarningThreshold:$=30}=l,{gustWarningThreshold:re=50}=l,{graylineWindow:H=30}=l,O=null,le=null,J=!1,q="",W="",se=new Date,K;Vl(()=>{fe(),K=setInterval(()=>{se=new Date,Me(),ee()},1e4)}),Zl(()=>{K&&clearInterval(K)});function fe(){if(!A||!X)return;const Z=Cl(new Date,A,X);s(12,O=Z.sunrise),s(13,le=Z.sunset),Me(),ee()}function Me(){if(!O||!le){s(14,J=!1);return}const V=se.getTime(),Z=H*60*1e3,ie=Math.abs(V-O.getTime())<=Z,ce=Math.abs(V-le.getTime())<=Z;s(14,J=ie||ce),s(15,q=ie?"sunrise":ce?"sunset":"")}function ee(){if(!O||!le){s(16,W="");return}const V=se.getTime();let Z=null,ie="";if(V0?s(16,W=`${ie} in ${ae}h${ue.toString().padStart(2,"0")}m`):s(16,W=`${ie} in ${ue}m`)}}return e.$$set=V=>{"flexradio"in V&&s(26,w=V.flexradio),"weather"in V&&s(27,N=V.weather),"latitude"in V&&s(0,A=V.latitude),"longitude"in V&&s(1,X=V.longitude),"windWarningThreshold"in V&&s(28,$=V.windWarningThreshold),"gustWarningThreshold"in V&&s(29,re=V.gustWarningThreshold),"graylineWindow"in V&&s(30,H=V.graylineWindow)},e.$$.update=()=>{e.$$.dirty[0]&67108864&&s(3,i=(w==null?void 0:w.frequency)||0),e.$$.dirty[0]&67108864&&s(25,a=(w==null?void 0:w.mode)||""),e.$$.dirty[0]&67108864&&s(24,r=(w==null?void 0:w.tx)||!1),e.$$.dirty[0]&67108864&&s(2,f=(w==null?void 0:w.connected)||!1),e.$$.dirty[0]&67108864&&s(31,d=(w==null?void 0:w.radio_on)||!1),e.$$.dirty[0]&67108864&&s(11,v=(w==null?void 0:w.radio_info)||""),e.$$.dirty[0]&67108864&&s(10,c=(w==null?void 0:w.callsign)||""),e.$$.dirty[0]&67108864&&s(9,p=(w==null?void 0:w.model)||""),e.$$.dirty[0]&67108864&&s(32,u=(w==null?void 0:w.active_slices)||0),e.$$.dirty[0]&3&&A&&X&&fe(),e.$$.dirty[0]&3596|e.$$.dirty[1]&3&&console.log("FlexRadio status:",{connected:f,radioOn:d,frequency:i,activeSlices:u,radioInfo:v,callsign:c,model:p}),e.$$.dirty[0]&134217728&&s(8,_=(N==null?void 0:N.wind_speed)||0),e.$$.dirty[0]&134217728&&s(7,b=(N==null?void 0:N.wind_gust)||0),e.$$.dirty[0]&268435712&&s(6,h=_>=$),e.$$.dirty[0]&536871040&&s(5,y=b>=re),e.$$.dirty[0]&96&&s(23,k=h||y),e.$$.dirty[0]&8&&s(4,M=Cn(i)),e.$$.dirty[0]&16&&s(22,C=Sn(M)),e.$$.dirty[0]&8|e.$$.dirty[1]&1&&s(21,g=d&&i>0),e.$$.dirty[0]&8|e.$$.dirty[1]&3&&s(20,S=d&&i===0&&u===0),e.$$.dirty[0]&8|e.$$.dirty[1]&3&&s(19,I=d&&i===0&&u>0),e.$$.dirty[0]&4&&s(18,F=!f),e.$$.dirty[0]&4|e.$$.dirty[1]&1&&s(17,P=f&&!d)},[A,X,f,i,M,y,h,b,_,p,c,v,O,le,J,q,W,P,F,I,S,g,C,k,r,a,w,N,$,re,H,d,u]}class Pn extends ht{constructor(l){super(),vt(this,l,Fn,Mn,at,{flexradio:26,weather:27,latitude:0,longitude:1,windWarningThreshold:28,gustWarningThreshold:29,graylineWindow:30},null,[-1,-1])}}function Fl(e,l,s){var f;const i=e.slice();i[10]=l[s];const a=i[1].find(function(...v){return e[9](i[10],...v)});i[11]=a;const r=((f=i[11])==null?void 0:f.state)||!1;return i[12]=r,i}function Pl(e){let l,s,i,a,r,f,d=e[12]?"ON":"OFF",v,c,p,u,_,b,h,y;function k(){return e[8](e[10])}return{c(){l=o("div"),s=o("div"),i=o("div"),a=o("div"),a.textContent=`${e[3][e[10]]}`,r=m(),f=o("div"),v=T(d),c=m(),p=o("button"),u=o("div"),u.innerHTML='
',b=m(),t(a,"class","relay-name svelte-1krmqub"),t(f,"class","relay-status svelte-1krmqub"),t(i,"class","relay-details svelte-1krmqub"),t(s,"class","relay-info svelte-1krmqub"),t(u,"class","toggle-track svelte-1krmqub"),t(p,"class","relay-toggle svelte-1krmqub"),p.disabled=_=e[0][e[10]],R(p,"active",e[12]),R(p,"loading",e[0][e[10]]),t(l,"class","relay-card svelte-1krmqub"),R(l,"relay-on",e[12])},m(M,C){E(M,l,C),n(l,s),n(s,i),n(i,a),n(i,r),n(i,f),n(f,v),n(l,c),n(l,p),n(p,u),n(l,b),h||(y=Se(p,"click",k),h=!0)},p(M,C){e=M,C&2&&d!==(d=e[12]?"ON":"OFF")&&L(v,d),C&1&&_!==(_=e[0][e[10]])&&(p.disabled=_),C&2&&R(p,"active",e[12]),C&1&&R(p,"loading",e[0][e[10]]),C&2&&R(l,"relay-on",e[12])},d(M){M&&z(l),h=!1,y()}}}function On(e){let l,s,i,a,r,f,d,v,c,p,u,_,b,h,y,k=ut([1,2,3,4,5]),M=[];for(let C=0;C<5;C+=1)M[C]=Pl(Fl(e,k,C));return{c(){l=o("div"),s=o("div"),i=o("h2"),i.textContent="WebSwitch",a=m(),r=o("span"),f=m(),d=o("div"),v=o("div");for(let C=0;C<5;C+=1)M[C].c();c=m(),p=o("div"),u=o("button"),u.innerHTML=` + ALL ON`,_=m(),b=o("button"),b.innerHTML=` + ALL OFF`,t(i,"class","svelte-1krmqub"),t(r,"class","status-dot svelte-1krmqub"),R(r,"disconnected",!e[2]),t(s,"class","card-header svelte-1krmqub"),t(v,"class","relays svelte-1krmqub"),t(u,"class","control-btn all-on svelte-1krmqub"),t(b,"class","control-btn all-off svelte-1krmqub"),t(p,"class","controls svelte-1krmqub"),t(d,"class","metrics svelte-1krmqub"),t(l,"class","card svelte-1krmqub")},m(C,g){E(C,l,g),n(l,s),n(s,i),n(s,a),n(s,r),n(l,f),n(l,d),n(d,v);for(let S=0;S<5;S+=1)M[S]&&M[S].m(v,null);n(d,c),n(d,p),n(p,u),n(p,_),n(p,b),h||(y=[Se(u,"click",e[5]),Se(b,"click",e[6])],h=!0)},p(C,[g]){if(g&4&&R(r,"disconnected",!C[2]),g&27){k=ut([1,2,3,4,5]);let S;for(S=0;S<5;S+=1){const I=Fl(C,k,S);M[S]?M[S].p(I,g):(M[S]=Pl(I),M[S].c(),M[S].m(v,null))}for(;S<5;S+=1)M[S].d(1)}},i:_e,o:_e,d(C){C&&z(l),Dt(M,C),h=!1,nt(y)}}}function An(e,l,s){let i,a,{status:r}=l;const f={1:"Power Supply",2:"PGXL",3:"TGXL",4:"Flex Radio Start",5:"Reserve"};let d={};async function v(b){const h=i.find(k=>k.number===b),y=(h==null?void 0:h.state)||!1;s(0,d[b]=!0,d);try{y?await Ae.webswitch.relayOff(b):await Ae.webswitch.relayOn(b)}catch(k){console.error("Failed to toggle relay:",k),alert("Failed to control relay")}finally{s(0,d[b]=!1,d)}}async function c(){try{await Ae.webswitch.allOn()}catch(b){console.error("Failed to turn all on:",b)}}async function p(){try{await Ae.webswitch.allOff()}catch(b){console.error("Failed to turn all off:",b)}}const u=b=>v(b),_=(b,h)=>h.number===b;return e.$$set=b=>{"status"in b&&s(7,r=b.status)},e.$$.update=()=>{e.$$.dirty&128&&s(1,i=(r==null?void 0:r.relays)||[]),e.$$.dirty&128&&s(2,a=(r==null?void 0:r.connected)||!1)},[d,i,a,f,v,c,p,r,u,_]}class In extends ht{constructor(l){super(),vt(this,l,An,On,at,{status:7})}}function Nn(e){let l,s,i,a,r,f,d,v,c,p,u,_,b,h,y,k,M,C=e[1].toFixed(0)+"",g,S,I,F,P,w,N,A,X,$=e[2].toFixed(2)+"",re,H,O,le,J,q,W,se=e[3].toFixed(1)+"",K,fe,Me,ee,V,Z,ie,ce,ae,ue,ne=e[12].toFixed(1)+"",Ie,Ce,Ne,qe,Oe,Fe,te,ke,Q,j,x,B,de,Y=e[15].toFixed(0)+"",ve,G,me,he,ze,Ye,Ve=e[14].toFixed(1)+"",Re,Xe,We,Ee,$e,De,Qe=e[13].toFixed(1)+"",Ze,xe,Be,pe,Te,et,pt,rt,st,Le,Ke,Mt,He,bt,tt,it,Ge,lt,je,Ue,ot,Je,Pe,Tt;return{c(){l=o("div"),s=o("div"),i=o("h2"),i.textContent="Power Genius XL",a=m(),r=o("div"),f=o("button"),d=T(e[7]),v=m(),c=o("span"),p=m(),u=o("div"),_=o("div"),b=o("div"),h=o("div"),y=o("span"),y.textContent="Power",k=m(),M=o("span"),g=T(C),S=T(" W"),I=m(),F=o("div"),P=o("div"),w=o("div"),N=m(),A=o("div"),X=o("div"),re=T($),H=m(),O=o("div"),O.textContent="SWR",le=m(),J=o("div"),q=o("div"),W=o("div"),K=T(se),fe=T("°"),Me=m(),ee=o("div"),ee.textContent="PA Temp",V=m(),Z=o("div"),ie=o("div"),ce=m(),ae=o("div"),ue=o("div"),Ie=T(ne),Ce=T("°"),Ne=m(),qe=o("div"),qe.textContent="HL Temp",Oe=m(),Fe=o("div"),te=o("div"),ke=m(),Q=o("div"),j=o("div"),x=o("div"),x.textContent="VAC",B=m(),de=o("div"),ve=T(Y),G=m(),me=o("div"),he=o("div"),he.textContent="VDD",ze=m(),Ye=o("div"),Re=T(Ve),Xe=m(),We=o("div"),Ee=o("div"),Ee.textContent="ID Peak",$e=m(),De=o("div"),Ze=T(Qe),xe=m(),Be=o("div"),pe=o("div"),Te=o("span"),Te.textContent="Band A",et=m(),pt=o("span"),rt=T(e[10]),st=m(),Le=o("div"),Ke=o("span"),Ke.textContent="Band B",Mt=m(),He=o("span"),bt=T(e[9]),tt=m(),it=o("div"),Ge=o("label"),Ge.textContent="Fan Mode",lt=m(),je=o("select"),Ue=o("option"),Ue.textContent="Standard",ot=o("option"),ot.textContent="Contest",Je=o("option"),Je.textContent="Broadcast",t(i,"class","svelte-1q56zag"),t(f,"class","state-badge svelte-1q56zag"),R(f,"idle",e[0]==="IDLE"),R(f,"transmit",e[0].includes("TRANSMIT")),t(c,"class","status-dot svelte-1q56zag"),R(c,"disconnected",!e[8]),t(r,"class","header-right svelte-1q56zag"),t(s,"class","card-header svelte-1q56zag"),t(y,"class","power-label-inline svelte-1q56zag"),t(M,"class","power-value-inline svelte-1q56zag"),t(h,"class","power-header svelte-1q56zag"),t(w,"class","power-bar-fill svelte-1q56zag"),oe(w,"width",e[4]+"%"),t(P,"class","power-bar-bg svelte-1q56zag"),t(F,"class","power-bar-container svelte-1q56zag"),t(b,"class","power-section svelte-1q56zag"),t(X,"class","swr-value-compact svelte-1q56zag"),t(O,"class","swr-label-compact svelte-1q56zag"),t(A,"class","swr-circle-compact svelte-1q56zag"),oe(A,"--swr-color",e[5]),t(_,"class","power-swr-row svelte-1q56zag"),t(W,"class","temp-value svelte-1q56zag"),oe(W,"color",e[6]),t(ee,"class","temp-label svelte-1q56zag"),t(ie,"class","temp-mini-fill svelte-1q56zag"),oe(ie,"width",e[3]/80*100+"%"),oe(ie,"background",e[6]),t(Z,"class","temp-mini-bar svelte-1q56zag"),t(q,"class","temp-item svelte-1q56zag"),t(ue,"class","temp-value svelte-1q56zag"),oe(ue,"color",e[6]),t(qe,"class","temp-label svelte-1q56zag"),t(te,"class","temp-mini-fill svelte-1q56zag"),oe(te,"width",e[12]/80*100+"%"),oe(te,"background",e[6]),t(Fe,"class","temp-mini-bar svelte-1q56zag"),t(ae,"class","temp-item svelte-1q56zag"),t(J,"class","temp-group svelte-1q56zag"),t(x,"class","param-label svelte-1q56zag"),t(de,"class","param-value svelte-1q56zag"),t(j,"class","param-box svelte-1q56zag"),t(he,"class","param-label svelte-1q56zag"),t(Ye,"class","param-value svelte-1q56zag"),t(me,"class","param-box svelte-1q56zag"),t(Ee,"class","param-label svelte-1q56zag"),t(De,"class","param-value svelte-1q56zag"),t(We,"class","param-box svelte-1q56zag"),t(Q,"class","params-grid svelte-1q56zag"),t(Te,"class","band-label svelte-1q56zag"),t(pt,"class","band-value svelte-1q56zag"),t(pe,"class","band-item svelte-1q56zag"),t(Ke,"class","band-label svelte-1q56zag"),t(He,"class","band-value svelte-1q56zag"),t(Le,"class","band-item svelte-1q56zag"),t(Be,"class","band-display svelte-1q56zag"),t(Ge,"for","fan-mode-select"),t(Ge,"class","control-label svelte-1q56zag"),Ue.__value="STANDARD",Ot(Ue,Ue.__value),ot.__value="CONTEST",Ot(ot,ot.__value),Je.__value="BROADCAST",Ot(Je,Je.__value),t(je,"id","fan-mode-select"),t(je,"class","svelte-1q56zag"),t(it,"class","fan-control svelte-1q56zag"),t(u,"class","metrics svelte-1q56zag"),t(l,"class","card svelte-1q56zag")},m(be,we){E(be,l,we),n(l,s),n(s,i),n(s,a),n(s,r),n(r,f),n(f,d),n(r,v),n(r,c),n(l,p),n(l,u),n(u,_),n(_,b),n(b,h),n(h,y),n(h,k),n(h,M),n(M,g),n(M,S),n(b,I),n(b,F),n(F,P),n(P,w),n(_,N),n(_,A),n(A,X),n(X,re),n(A,H),n(A,O),n(u,le),n(u,J),n(J,q),n(q,W),n(W,K),n(W,fe),n(q,Me),n(q,ee),n(q,V),n(q,Z),n(Z,ie),n(J,ce),n(J,ae),n(ae,ue),n(ue,Ie),n(ue,Ce),n(ae,Ne),n(ae,qe),n(ae,Oe),n(ae,Fe),n(Fe,te),n(u,ke),n(u,Q),n(Q,j),n(j,x),n(j,B),n(j,de),n(de,ve),n(Q,G),n(Q,me),n(me,he),n(me,ze),n(me,Ye),n(Ye,Re),n(Q,Xe),n(Q,We),n(We,Ee),n(We,$e),n(We,De),n(De,Ze),n(u,xe),n(u,Be),n(Be,pe),n(pe,Te),n(pe,et),n(pe,pt),n(pt,rt),n(Be,st),n(Be,Le),n(Le,Ke),n(Le,Mt),n(Le,He),n(He,bt),n(u,tt),n(u,it),n(it,Ge),n(it,lt),n(it,je),n(je,Ue),n(je,ot),n(je,Je),Nt(je,e[11]),Pe||(Tt=[Se(f,"click",e[17]),Se(je,"change",e[19])],Pe=!0)},p(be,[we]){we&128&&L(d,be[7]),we&1&&R(f,"idle",be[0]==="IDLE"),we&1&&R(f,"transmit",be[0].includes("TRANSMIT")),we&256&&R(c,"disconnected",!be[8]),we&2&&C!==(C=be[1].toFixed(0)+"")&&L(g,C),we&16&&oe(w,"width",be[4]+"%"),we&4&&$!==($=be[2].toFixed(2)+"")&&L(re,$),we&32&&oe(A,"--swr-color",be[5]),we&8&&se!==(se=be[3].toFixed(1)+"")&&L(K,se),we&64&&oe(W,"color",be[6]),we&8&&oe(ie,"width",be[3]/80*100+"%"),we&64&&oe(ie,"background",be[6]),we&4096&&ne!==(ne=be[12].toFixed(1)+"")&&L(Ie,ne),we&64&&oe(ue,"color",be[6]),we&4096&&oe(te,"width",be[12]/80*100+"%"),we&64&&oe(te,"background",be[6]),we&32768&&Y!==(Y=be[15].toFixed(0)+"")&&L(ve,Y),we&16384&&Ve!==(Ve=be[14].toFixed(1)+"")&&L(Re,Ve),we&8192&&Qe!==(Qe=be[13].toFixed(1)+"")&&L(Ze,Qe),we&1024&&L(rt,be[10]),we&512&&L(bt,be[9]),we&2048&&Nt(je,be[11])},i:_e,o:_e,d(be){be&&z(l),Pe=!1,nt(Tt)}}}function qn(e,l,s){let i,a,r,f,d,v,c,p,u,_,b,h,y,k,M,C,{status:g}=l;async function S(P){try{await Ae.power.setFanMode(P)}catch(w){console.error("Failed to set fan mode:",w)}}async function I(){try{const P=u==="IDLE"?0:1;await Ae.power.setOperate(P)}catch(P){console.error("Failed to toggle operate:",P)}}const F=P=>S(P.target.value);return e.$$set=P=>{"status"in P&&s(18,g=P.status)},e.$$.update=()=>{e.$$.dirty&262144&&s(1,i=(g==null?void 0:g.power_forward)||0),e.$$.dirty&262144&&g!=null&&g.power_reflected,e.$$.dirty&262144&&s(2,a=(g==null?void 0:g.swr)||1),e.$$.dirty&262144&&s(15,r=(g==null?void 0:g.voltage)||0),e.$$.dirty&262144&&s(14,f=(g==null?void 0:g.vdd)||0),e.$$.dirty&262144&&g!=null&&g.current,e.$$.dirty&262144&&s(13,d=(g==null?void 0:g.peak_current)||0),e.$$.dirty&262144&&s(3,v=(g==null?void 0:g.temperature)||0),e.$$.dirty&262144&&s(12,c=(g==null?void 0:g.harmonic_load_temp)||0),e.$$.dirty&262144&&s(11,p=(g==null?void 0:g.fan_mode)||"CONTEST"),e.$$.dirty&262144&&s(0,u=(g==null?void 0:g.state)||"IDLE"),e.$$.dirty&262144&&s(10,_=(g==null?void 0:g.band_a)||"0"),e.$$.dirty&262144&&s(9,b=(g==null?void 0:g.band_b)||"0"),e.$$.dirty&262144&&s(8,h=(g==null?void 0:g.connected)||!1),e.$$.dirty&1&&s(7,y=u.replace("TRANSMIT_A","TRANSMIT").replace("TRANSMIT_B","TRANSMIT")),e.$$.dirty&8&&s(6,k=v<40?"#4caf50":v<60?"#ffc107":v<75?"#ff9800":"#f44336"),e.$$.dirty&4&&s(5,M=a<1.5?"#4caf50":a<2?"#ffc107":a<3?"#ff9800":"#f44336"),e.$$.dirty&2&&s(4,C=Math.min(i/2e3*100,100))},[u,i,a,v,C,M,k,y,h,b,_,p,c,d,f,r,S,I,g,F]}class Dn extends ht{constructor(l){super(),vt(this,l,qn,Nn,at,{status:18})}}function zn(e){let l,s,i,a,r,f,d,v,c,p,u,_,b,h,y,k,M,C=e[0].toFixed(0)+"",g,S,I,F,P,w,N,A,X,$=e[1].toFixed(2)+"",re,H,O,le,J,q,W,se,K,fe,Me,ee,V,Z,ie,ce,ae,ue,ne,Ie,Ce,Ne,qe,Oe,Fe,te,ke,Q,j=(e[11]/1e3).toFixed(3)+"",x,B,de,Y,ve,G,me,he=(e[10]/1e3).toFixed(3)+"",ze,Ye,Ve,Re,Xe,We=e[8]===1?"OPERATE":"STANDBY",Ee,$e,De,Qe,Ze,xe,Be;return{c(){l=o("div"),s=o("div"),i=o("h2"),i.textContent="Tuner Genius XL",a=m(),r=o("div"),f=o("span"),d=T(e[12]),v=m(),c=o("span"),p=m(),u=o("div"),_=o("div"),b=o("div"),h=o("div"),y=o("span"),y.textContent="Power",k=m(),M=o("span"),g=T(C),S=T(" W"),I=m(),F=o("div"),P=o("div"),w=o("div"),N=m(),A=o("div"),X=o("div"),re=T($),H=m(),O=o("div"),O.textContent="SWR",le=m(),J=o("div"),q=o("div"),W=o("div"),se=T(e[7]),K=m(),fe=o("div"),fe.textContent="C1",Me=m(),ee=o("div"),V=o("div"),Z=T(e[6]),ie=m(),ce=o("div"),ce.textContent="L",ae=m(),ue=o("div"),ne=o("div"),Ie=T(e[5]),Ce=m(),Ne=o("div"),Ne.textContent="C2",qe=m(),Oe=o("div"),Fe=o("div"),te=o("div"),te.textContent="Freq A",ke=m(),Q=o("div"),x=T(j),B=o("span"),B.textContent="MHz",de=m(),Y=o("div"),ve=o("div"),ve.textContent="Freq B",G=m(),me=o("div"),ze=T(he),Ye=o("span"),Ye.textContent="MHz",Ve=m(),Re=o("div"),Xe=o("button"),Ee=T(We),$e=m(),De=o("button"),De.textContent="BYPASS",Qe=m(),Ze=o("button"),Ze.innerHTML=` + AUTO TUNE`,t(i,"class","svelte-tr7g0r"),t(f,"class","tuning-badge svelte-tr7g0r"),R(f,"tuning",e[12]==="TUNING"),t(c,"class","status-dot svelte-tr7g0r"),R(c,"disconnected",!e[4]),t(r,"class","header-right svelte-tr7g0r"),t(s,"class","card-header svelte-tr7g0r"),t(y,"class","power-label-inline svelte-tr7g0r"),t(M,"class","power-value-inline svelte-tr7g0r"),t(h,"class","power-header svelte-tr7g0r"),t(w,"class","power-bar-fill svelte-tr7g0r"),oe(w,"width",e[2]+"%"),t(P,"class","power-bar-bg svelte-tr7g0r"),t(F,"class","power-bar-container svelte-tr7g0r"),t(b,"class","power-section svelte-tr7g0r"),t(X,"class","swr-value-compact svelte-tr7g0r"),t(O,"class","swr-label-compact svelte-tr7g0r"),t(A,"class","swr-circle-compact svelte-tr7g0r"),oe(A,"--swr-color",e[3]),t(_,"class","power-swr-row svelte-tr7g0r"),t(W,"class","cap-value svelte-tr7g0r"),t(fe,"class","cap-label svelte-tr7g0r"),t(q,"class","cap-item svelte-tr7g0r"),t(V,"class","cap-value svelte-tr7g0r"),t(ce,"class","cap-label svelte-tr7g0r"),t(ee,"class","cap-item svelte-tr7g0r"),t(ne,"class","cap-value svelte-tr7g0r"),t(Ne,"class","cap-label svelte-tr7g0r"),t(ue,"class","cap-item svelte-tr7g0r"),t(J,"class","capacitors svelte-tr7g0r"),t(te,"class","freq-label svelte-tr7g0r"),t(B,"class","freq-unit svelte-tr7g0r"),t(Q,"class","freq-value svelte-tr7g0r"),t(Fe,"class","freq-item svelte-tr7g0r"),t(ve,"class","freq-label svelte-tr7g0r"),t(Ye,"class","freq-unit svelte-tr7g0r"),t(me,"class","freq-value svelte-tr7g0r"),t(Y,"class","freq-item svelte-tr7g0r"),t(Oe,"class","freq-display svelte-tr7g0r"),t(Xe,"class","control-btn operate svelte-tr7g0r"),R(Xe,"active",e[8]===1),t(De,"class","control-btn bypass svelte-tr7g0r"),R(De,"active",e[9]),t(Re,"class","controls svelte-tr7g0r"),t(Ze,"class","tune-btn svelte-tr7g0r"),t(u,"class","metrics svelte-tr7g0r"),t(l,"class","card svelte-tr7g0r")},m(pe,Te){E(pe,l,Te),n(l,s),n(s,i),n(s,a),n(s,r),n(r,f),n(f,d),n(r,v),n(r,c),n(l,p),n(l,u),n(u,_),n(_,b),n(b,h),n(h,y),n(h,k),n(h,M),n(M,g),n(M,S),n(b,I),n(b,F),n(F,P),n(P,w),n(_,N),n(_,A),n(A,X),n(X,re),n(A,H),n(A,O),n(u,le),n(u,J),n(J,q),n(q,W),n(W,se),n(q,K),n(q,fe),n(J,Me),n(J,ee),n(ee,V),n(V,Z),n(ee,ie),n(ee,ce),n(J,ae),n(J,ue),n(ue,ne),n(ne,Ie),n(ue,Ce),n(ue,Ne),n(u,qe),n(u,Oe),n(Oe,Fe),n(Fe,te),n(Fe,ke),n(Fe,Q),n(Q,x),n(Q,B),n(Oe,de),n(Oe,Y),n(Y,ve),n(Y,G),n(Y,me),n(me,ze),n(me,Ye),n(u,Ve),n(u,Re),n(Re,Xe),n(Xe,Ee),n(Re,$e),n(Re,De),n(u,Qe),n(u,Ze),xe||(Be=[Se(Xe,"click",e[17]),Se(De,"click",e[18]),Se(Ze,"click",e[13])],xe=!0)},p(pe,[Te]){Te&4096&&L(d,pe[12]),Te&4096&&R(f,"tuning",pe[12]==="TUNING"),Te&16&&R(c,"disconnected",!pe[4]),Te&1&&C!==(C=pe[0].toFixed(0)+"")&&L(g,C),Te&4&&oe(w,"width",pe[2]+"%"),Te&2&&$!==($=pe[1].toFixed(2)+"")&&L(re,$),Te&8&&oe(A,"--swr-color",pe[3]),Te&128&&L(se,pe[7]),Te&64&&L(Z,pe[6]),Te&32&&L(Ie,pe[5]),Te&2048&&j!==(j=(pe[11]/1e3).toFixed(3)+"")&&L(x,j),Te&1024&&he!==(he=(pe[10]/1e3).toFixed(3)+"")&&L(ze,he),Te&256&&We!==(We=pe[8]===1?"OPERATE":"STANDBY")&&L(Ee,We),Te&256&&R(Xe,"active",pe[8]===1),Te&512&&R(De,"active",pe[9])},i:_e,o:_e,d(pe){pe&&z(l),xe=!1,nt(Be)}}}function En(e,l,s){let i,a,r,f,d,v,c,p,u,_,b,h,y,{status:k}=l;async function M(){try{await Ae.tuner.autoTune()}catch(F){console.error("Failed to tune:",F)}}async function C(F){try{await Ae.tuner.setBypass(F)}catch(P){console.error("Failed to set bypass:",P)}}async function g(F){try{await Ae.tuner.setOperate(F)}catch(P){console.error("Failed to set operate:",P)}}const S=()=>g(c===1?0:1),I=()=>C(v?0:1);return e.$$set=F=>{"status"in F&&s(16,k=F.status)},e.$$.update=()=>{e.$$.dirty&65536&&s(0,i=(k==null?void 0:k.power_forward)||0),e.$$.dirty&65536&&s(1,a=(k==null?void 0:k.swr)||1),e.$$.dirty&65536&&s(12,r=(k==null?void 0:k.tuning_status)||"READY"),e.$$.dirty&65536&&s(11,f=(k==null?void 0:k.frequency_a)||0),e.$$.dirty&65536&&s(10,d=(k==null?void 0:k.frequency_b)||0),e.$$.dirty&65536&&s(9,v=(k==null?void 0:k.bypass)||!1),e.$$.dirty&65536&&s(8,c=(k==null?void 0:k.state)||0),e.$$.dirty&65536&&s(7,p=(k==null?void 0:k.c1)||0),e.$$.dirty&65536&&s(6,u=(k==null?void 0:k.l)||0),e.$$.dirty&65536&&s(5,_=(k==null?void 0:k.c2)||0),e.$$.dirty&65536&&s(4,b=(k==null?void 0:k.connected)||!1),e.$$.dirty&2&&s(3,h=a<1.5?"#4caf50":a<2?"#ffc107":a<3?"#ff9800":"#f44336"),e.$$.dirty&1&&s(2,y=Math.min(i/2e3*100,100))},[i,a,y,h,b,_,u,p,c,v,d,f,r,M,C,g,k,S,I]}class Ln extends ht{constructor(l){super(),vt(this,l,En,zn,at,{status:16})}}function Ol(e,l,s){const i=e.slice();i[14]=l[s];const a=i[1].tx&&i[1].tx_ant===i[14].number;i[15]=a;const r=i[0].tx&&i[0].tx_ant===i[14].number;i[16]=r;const f=!i[1].tx&&i[1].rx_ant===i[14].number;i[17]=f;const d=!i[0].tx&&i[0].rx_ant===i[14].number;i[18]=d;const v=i[15]||i[16];i[19]=v;const c=i[17]||i[15];i[20]=c;const p=i[18]||i[16];return i[21]=p,i}function Al(e){let l,s,i=e[14].name+"",a,r,f,d,v,c,p,u,_;function b(){return e[11](e[14])}function h(){return e[12](e[14])}return{c(){l=o("div"),s=o("div"),a=T(i),r=m(),f=o("div"),d=o("button"),d.textContent="A",v=m(),c=o("button"),c.textContent="B",p=m(),t(s,"class","antenna-name svelte-1sfbaek"),t(d,"class","port-btn svelte-1sfbaek"),R(d,"active",e[20]),t(c,"class","port-btn svelte-1sfbaek"),R(c,"active",e[21]),t(f,"class","antenna-ports svelte-1sfbaek"),t(l,"class","antenna-card svelte-1sfbaek"),R(l,"tx",e[19]),R(l,"active-a",e[20]),R(l,"active-b",e[21])},m(y,k){E(y,l,k),n(l,s),n(s,a),n(l,r),n(l,f),n(f,d),n(f,v),n(f,c),n(l,p),u||(_=[Se(d,"click",b),Se(c,"click",h)],u=!0)},p(y,k){e=y,k&16&&i!==(i=e[14].name+"")&&L(a,i),k&18&&R(d,"active",e[20]),k&17&&R(c,"active",e[21]),k&19&&R(l,"tx",e[19]),k&18&&R(l,"active-a",e[20]),k&17&&R(l,"active-b",e[21])},d(y){y&&z(l),u=!1,nt(_)}}}function Rn(e){let l,s,i,a,r,f,d,v,c,p,u=(e[1].source||"FLEX")+"",_,b,h,y,k=(e[0].source||"FLEX")+"",M,C,g,S,I,F,P,w,N,A,X,$,re,H,O,le,J=ut(e[4]),q=[];for(let W=0;W🔄 + REBOOT`,t(i,"class","svelte-1sfbaek"),t(r,"class","status-dot svelte-1sfbaek"),R(r,"disconnected",!e[5]),t(s,"class","card-header svelte-1sfbaek"),t(p,"class","source-label svelte-1sfbaek"),t(c,"class","source-item svelte-1sfbaek"),t(y,"class","source-label svelte-1sfbaek"),t(h,"class","source-item svelte-1sfbaek"),t(v,"class","sources svelte-1sfbaek"),t(I,"class","band-value svelte-1sfbaek"),t(S,"class","band-item svelte-1sfbaek"),t(N,"class","band-value svelte-1sfbaek"),t(w,"class","band-item svelte-1sfbaek"),t(g,"class","bands svelte-1sfbaek"),t($,"class","antennas svelte-1sfbaek"),t(H,"class","reboot-btn svelte-1sfbaek"),t(d,"class","metrics svelte-1sfbaek"),t(l,"class","card svelte-1sfbaek")},m(W,se){E(W,l,se),n(l,s),n(s,i),n(s,a),n(s,r),n(l,f),n(l,d),n(d,v),n(v,c),n(c,p),n(p,_),n(v,b),n(v,h),n(h,y),n(y,M),n(d,C),n(d,g),n(g,S),n(S,I),n(I,F),n(g,P),n(g,w),n(w,N),n(N,A),n(d,X),n(d,$);for(let K=0;Ku(1,M.number),k=M=>u(2,M.number);return e.$$set=M=>{"status"in M&&s(8,c=M.status)},e.$$.update=()=>{e.$$.dirty&256&&s(5,i=(c==null?void 0:c.connected)||!1),e.$$.dirty&256&&s(1,a=(c==null?void 0:c.port_a)||{}),e.$$.dirty&256&&s(0,r=(c==null?void 0:c.port_b)||{}),e.$$.dirty&256&&s(4,f=(c==null?void 0:c.antennas)||[]),e.$$.dirty&2&&s(3,d=p[a.band]||"None"),e.$$.dirty&1&&s(2,v=p[r.band]||"None"),e.$$.dirty&1795&&c&&(a.tx!==_||r.tx!==b)&&(console.log("AntennaGenius TX state changed:",{portA_tx:a.tx,portB_tx:r.tx,portA_tx_ant:a.tx_ant,portB_tx_ant:r.tx_ant}),s(9,_=a.tx),s(10,b=r.tx))},[r,a,v,d,f,i,u,h,c,_,b,y,k]}class Bn extends ht{constructor(l){super(),vt(this,l,Wn,Rn,at,{status:8})}}function Il(e,l,s){const i=e.slice();i[16]=l[s];const a=150+125*Math.sin(i[16]*Math.PI/180);i[17]=a;const r=150-125*Math.cos(i[16]*Math.PI/180);return i[18]=r,i}function Nl(e){let l,s,i,a;return{c(){l=o("span"),s=T("→ "),i=T(e[0]),a=T("°"),t(l,"class","target-indicator svelte-1532ixo")},m(r,f){E(r,l,f),n(l,s),n(l,i),n(l,a)},p(r,f){f&1&&L(i,r[0])},d(r){r&&z(l)}}}function ql(e){let l,s,i,a,r;return{c(){l=D("g"),s=D("line"),i=D("g"),a=D("polygon"),t(s,"x1","0"),t(s,"y1","0"),t(s,"x2","0"),t(s,"y2","-125"),t(s,"stroke","rgba(255, 255, 255, 0.3)"),t(s,"stroke-width","2"),t(s,"stroke-dasharray","5,5"),t(s,"opacity","0.6"),t(a,"points","0,-8 -5,5 5,5"),t(a,"fill","rgba(255, 255, 255, 0.4)"),t(a,"stroke","rgba(255, 255, 255, 0.5)"),t(a,"stroke-width","1"),t(i,"transform","translate(0, -125)"),t(l,"transform",r="rotate("+e[3]+")")},m(f,d){E(f,l,d),n(l,s),n(l,i),n(i,a)},p(f,d){d&8&&r!==(r="rotate("+f[3]+")")&&t(l,"transform",r)},d(f){f&&z(l)}}}function Dl(e){let l,s,i,a,r;return{c(){l=D("path"),s=D("line"),i=D("line"),a=D("g"),r=D("polygon"),t(l,"d","M 0,0 L "+-Math.sin(15*Math.PI/180)*130+","+-Math.cos(15*Math.PI/180)*130+` \r + A 130,130 0 0,1 `+Math.sin(15*Math.PI/180)*130+","+-Math.cos(15*Math.PI/180)*130+" Z"),t(l,"fill","url(#beamGradient)"),t(l,"opacity","0.85"),t(s,"x1","0"),t(s,"y1","0"),t(s,"x2",-Math.sin(15*Math.PI/180)*130),t(s,"y2",-Math.cos(15*Math.PI/180)*130),t(s,"stroke","#4fc3f7"),t(s,"stroke-width","2"),t(s,"opacity","0.9"),t(i,"x1","0"),t(i,"y1","0"),t(i,"x2",Math.sin(15*Math.PI/180)*130),t(i,"y2",-Math.cos(15*Math.PI/180)*130),t(i,"stroke","#4fc3f7"),t(i,"stroke-width","2"),t(i,"opacity","0.9"),t(r,"points","0,-20 -8,5 0,0 8,5"),t(r,"fill","#4fc3f7"),t(r,"stroke","#0288d1"),t(r,"stroke-width","2"),oe(r,"filter","drop-shadow(0 0 10px rgba(79, 195, 247, 1))"),t(a,"transform","translate(0, -110)")},m(f,d){E(f,l,d),E(f,s,d),E(f,i,d),E(f,a,d),n(a,r)},p:_e,d(f){f&&(z(l),z(s),z(i),z(a))}}}function zl(e){let l,s,i,a,r;return{c(){l=D("path"),s=D("line"),i=D("line"),a=D("g"),r=D("polygon"),t(l,"d","M 0,0 L "+-Math.sin(15*Math.PI/180)*130+","+Math.cos(15*Math.PI/180)*130+` \r + A 130,130 0 0,0 `+Math.sin(15*Math.PI/180)*130+","+Math.cos(15*Math.PI/180)*130+" Z"),t(l,"fill","url(#beamGradient)"),t(l,"opacity","0.85"),t(s,"x1","0"),t(s,"y1","0"),t(s,"x2",-Math.sin(15*Math.PI/180)*130),t(s,"y2",Math.cos(15*Math.PI/180)*130),t(s,"stroke","#4fc3f7"),t(s,"stroke-width","2"),t(s,"opacity","0.9"),t(i,"x1","0"),t(i,"y1","0"),t(i,"x2",Math.sin(15*Math.PI/180)*130),t(i,"y2",Math.cos(15*Math.PI/180)*130),t(i,"stroke","#4fc3f7"),t(i,"stroke-width","2"),t(i,"opacity","0.9"),t(r,"points","0,20 -8,-5 0,0 8,-5"),t(r,"fill","#4fc3f7"),t(r,"stroke","#0288d1"),t(r,"stroke-width","2"),oe(r,"filter","drop-shadow(0 0 10px rgba(79, 195, 247, 1))"),t(a,"transform","translate(0, 110)")},m(f,d){E(f,l,d),E(f,s,d),E(f,i,d),E(f,a,d),n(a,r)},p:_e,d(f){f&&(z(l),z(s),z(i),z(a))}}}function El(e){let l,s,i,a,r,f,d,v,c,p;return{c(){l=D("path"),s=D("path"),i=D("line"),a=D("line"),r=D("line"),f=D("line"),d=D("g"),v=D("polygon"),c=D("g"),p=D("polygon"),t(l,"d","M 0,0 L "+-Math.sin(15*Math.PI/180)*130+","+-Math.cos(15*Math.PI/180)*130+` \r + A 130,130 0 0,1 `+Math.sin(15*Math.PI/180)*130+","+-Math.cos(15*Math.PI/180)*130+" Z"),t(l,"fill","url(#beamGradient)"),t(l,"opacity","0.7"),t(s,"d","M 0,0 L "+-Math.sin(15*Math.PI/180)*130+","+Math.cos(15*Math.PI/180)*130+` \r + A 130,130 0 0,0 `+Math.sin(15*Math.PI/180)*130+","+Math.cos(15*Math.PI/180)*130+" Z"),t(s,"fill","url(#beamGradient)"),t(s,"opacity","0.7"),t(i,"x1","0"),t(i,"y1","0"),t(i,"x2",-Math.sin(15*Math.PI/180)*130),t(i,"y2",-Math.cos(15*Math.PI/180)*130),t(i,"stroke","#4fc3f7"),t(i,"stroke-width","2"),t(i,"opacity","0.8"),t(a,"x1","0"),t(a,"y1","0"),t(a,"x2",Math.sin(15*Math.PI/180)*130),t(a,"y2",-Math.cos(15*Math.PI/180)*130),t(a,"stroke","#4fc3f7"),t(a,"stroke-width","2"),t(a,"opacity","0.8"),t(r,"x1","0"),t(r,"y1","0"),t(r,"x2",-Math.sin(15*Math.PI/180)*130),t(r,"y2",Math.cos(15*Math.PI/180)*130),t(r,"stroke","#4fc3f7"),t(r,"stroke-width","2"),t(r,"opacity","0.8"),t(f,"x1","0"),t(f,"y1","0"),t(f,"x2",Math.sin(15*Math.PI/180)*130),t(f,"y2",Math.cos(15*Math.PI/180)*130),t(f,"stroke","#4fc3f7"),t(f,"stroke-width","2"),t(f,"opacity","0.8"),t(v,"points","0,-20 -8,5 0,0 8,5"),t(v,"fill","#4fc3f7"),t(v,"stroke","#0288d1"),t(v,"stroke-width","2"),oe(v,"filter","drop-shadow(0 0 10px rgba(79, 195, 247, 1))"),t(d,"transform","translate(0, -110)"),t(p,"points","0,20 -8,-5 0,0 8,-5"),t(p,"fill","#4fc3f7"),t(p,"stroke","#0288d1"),t(p,"stroke-width","2"),oe(p,"filter","drop-shadow(0 0 10px rgba(79, 195, 247, 1))"),t(c,"transform","translate(0, 110)")},m(u,_){E(u,l,_),E(u,s,_),E(u,i,_),E(u,a,_),E(u,r,_),E(u,f,_),E(u,d,_),n(d,v),E(u,c,_),n(c,p)},p:_e,d(u){u&&(z(l),z(s),z(i),z(a),z(r),z(f),z(d),z(c))}}}function Ll(e){let l,s,i,a,r,f;return{c(){l=D("g"),s=D("line"),i=D("g"),a=D("polygon"),r=D("animate"),t(s,"x1","0"),t(s,"y1","0"),t(s,"x2","0"),t(s,"y2","-135"),t(s,"stroke","#ffc107"),t(s,"stroke-width","3"),t(s,"stroke-dasharray","8,4"),t(s,"opacity","0.9"),t(r,"attributeName","opacity"),t(r,"values","0.8;1;0.8"),t(r,"dur","1s"),t(r,"repeatCount","indefinite"),t(a,"points","0,-12 -8,6 0,2 8,6"),t(a,"fill","#ffc107"),t(a,"stroke","#ff9800"),t(a,"stroke-width","1.5"),oe(a,"filter","drop-shadow(0 0 10px rgba(255, 193, 7, 0.8))"),t(i,"transform","translate(0, -135)"),t(l,"transform",f="rotate("+e[0]+")")},m(d,v){E(d,l,v),n(l,s),n(l,i),n(i,a),n(a,r)},p(d,v){v&1&&f!==(f="rotate("+d[0]+")")&&t(l,"transform",f)},d(d){d&&z(l)}}}function Rl(e){let l,s,i;return{c(){l=D("text"),s=T(e[16]),i=T("°"),t(l,"x",e[17]),t(l,"y",e[18]),t(l,"text-anchor","middle"),t(l,"dominant-baseline","middle"),t(l,"class","degree-label svelte-1532ixo")},m(a,r){E(a,l,r),n(l,s),n(l,i)},p:_e,d(a){a&&z(l)}}}function Wl(e){let l;return{c(){l=o("div"),l.innerHTML='
Physical antenna
Radiation pattern
',t(l,"class","map-legend svelte-1532ixo")},m(s,i){E(s,l,i)},d(s){s&&z(l)}}}function Gn(e){let l,s,i,a,r,f,d,v,c,p,u,_,b,h,y,k,M,C,g,S,I,F,P,w,N,A,X,$,re,H,O,le,J,q,W,se,K,fe,Me,ee,V,Z,ie,ce,ae,ue,ne,Ie,Ce,Ne,qe,Oe,Fe,te=e[2]&&e[0]!==null&&Nl(e),ke=(e[4]===1||e[4]===2)&&ql(e),Q=e[4]===0&&Dl(),j=e[4]===1&&zl(),x=e[4]===2&&El(),B=e[2]&&e[0]!==null&&Ll(e),de=ut([45,135,225,315]),Y=[];for(let G=0;G<4;G+=1)Y[G]=Rl(Il(e,de,G));let ve=(e[4]===1||e[4]===2)&&Wl();return{c(){l=o("div"),s=o("div"),i=o("h2"),i.textContent="Rotator Genius",a=m(),r=o("span"),f=m(),d=o("div"),v=o("div"),c=o("div"),p=o("div"),p.textContent="CURRENT HEADING",u=m(),_=o("div"),b=T(e[3]),h=T(`°\r + `),te&&te.c(),y=m(),k=o("div"),M=o("button"),M.textContent="↺",C=m(),g=o("button"),g.textContent="■",S=m(),I=o("button"),I.textContent="↻",F=m(),P=o("div"),w=D("svg"),N=D("defs"),A=D("radialGradient"),X=D("stop"),$=D("stop"),re=D("circle"),H=D("circle"),O=D("circle"),le=D("circle"),J=D("g"),ke&&ke.c(),q=D("g"),Q&&Q.c(),W=It(),j&&j.c(),se=It(),x&&x.c(),B&&B.c(),fe=D("circle"),Me=D("animate"),ee=D("circle"),V=D("animate"),Z=D("animate"),ie=D("text"),ce=T("N"),ae=D("text"),ue=T("E"),ne=D("text"),Ie=T("S"),Ce=D("text"),Ne=T("W");for(let G=0;G<4;G+=1)Y[G].c();qe=m(),ve&&ve.c(),t(i,"class","svelte-1532ixo"),t(r,"class","status-dot svelte-1532ixo"),R(r,"disconnected",!e[1]),t(s,"class","card-header svelte-1532ixo"),t(p,"class","heading-label svelte-1532ixo"),t(_,"class","heading-value svelte-1532ixo"),t(c,"class","heading-display-compact svelte-1532ixo"),t(M,"class","btn-mini ccw svelte-1532ixo"),t(M,"title","Rotate Counter-Clockwise"),t(g,"class","btn-mini stop svelte-1532ixo"),t(g,"title","Stop Rotation"),t(I,"class","btn-mini cw svelte-1532ixo"),t(I,"title","Rotate Clockwise"),t(k,"class","controls-compact svelte-1532ixo"),t(v,"class","heading-controls-row svelte-1532ixo"),t(X,"offset","0%"),oe(X,"stop-color","rgba(79, 195, 247, 0.7)"),oe(X,"stop-opacity","1"),t($,"offset","100%"),oe($,"stop-color","rgba(79, 195, 247, 0)"),oe($,"stop-opacity","0"),t(A,"id","beamGradient"),t(re,"cx","150"),t(re,"cy","150"),t(re,"r","140"),t(re,"fill","rgba(30, 64, 175, 0.15)"),t(re,"stroke","rgba(79, 195, 247, 0.4)"),t(re,"stroke-width","2"),t(H,"cx","150"),t(H,"cy","150"),t(H,"r","105"),t(H,"fill","none"),t(H,"stroke","rgba(79,195,247,0.2)"),t(H,"stroke-width","1"),t(H,"stroke-dasharray","3,3"),t(O,"cx","150"),t(O,"cy","150"),t(O,"r","70"),t(O,"fill","none"),t(O,"stroke","rgba(79,195,247,0.2)"),t(O,"stroke-width","1"),t(O,"stroke-dasharray","3,3"),t(le,"cx","150"),t(le,"cy","150"),t(le,"r","35"),t(le,"fill","none"),t(le,"stroke","rgba(79,195,247,0.2)"),t(le,"stroke-width","1"),t(le,"stroke-dasharray","3,3"),t(q,"transform",K="rotate("+e[3]+")"),t(Me,"attributeName","r"),t(Me,"values","5;7;5"),t(Me,"dur","2s"),t(Me,"repeatCount","indefinite"),t(fe,"cx","0"),t(fe,"cy","0"),t(fe,"r","5"),t(fe,"fill","#f44336"),t(fe,"stroke","#fff"),t(fe,"stroke-width","2"),t(V,"attributeName","r"),t(V,"values","10;16;10"),t(V,"dur","2s"),t(V,"repeatCount","indefinite"),t(Z,"attributeName","opacity"),t(Z,"values","0.5;0;0.5"),t(Z,"dur","2s"),t(Z,"repeatCount","indefinite"),t(ee,"cx","0"),t(ee,"cy","0"),t(ee,"r","10"),t(ee,"fill","none"),t(ee,"stroke","#f44336"),t(ee,"stroke-width","1.5"),t(ee,"opacity","0.5"),t(J,"transform","translate(150, 150)"),t(ie,"x","150"),t(ie,"y","20"),t(ie,"text-anchor","middle"),t(ie,"class","cardinal svelte-1532ixo"),t(ae,"x","280"),t(ae,"y","155"),t(ae,"text-anchor","middle"),t(ae,"class","cardinal svelte-1532ixo"),t(ne,"x","150"),t(ne,"y","285"),t(ne,"text-anchor","middle"),t(ne,"class","cardinal svelte-1532ixo"),t(Ce,"x","20"),t(Ce,"y","155"),t(Ce,"text-anchor","middle"),t(Ce,"class","cardinal svelte-1532ixo"),t(w,"viewBox","0 0 300 300"),t(w,"class","map-svg clickable-compass svelte-1532ixo"),t(w,"role","button"),t(w,"tabindex","0"),t(w,"aria-label","Click to rotate antenna to direction"),t(P,"class","map-container svelte-1532ixo"),t(d,"class","metrics svelte-1532ixo"),t(l,"class","card svelte-1532ixo")},m(G,me){E(G,l,me),n(l,s),n(s,i),n(s,a),n(s,r),n(l,f),n(l,d),n(d,v),n(v,c),n(c,p),n(c,u),n(c,_),n(_,b),n(_,h),te&&te.m(_,null),n(v,y),n(v,k),n(k,M),n(k,C),n(k,g),n(k,S),n(k,I),n(d,F),n(d,P),n(P,w),n(w,N),n(N,A),n(A,X),n(A,$),n(w,re),n(w,H),n(w,O),n(w,le),n(w,J),ke&&ke.m(J,null),n(J,q),Q&&Q.m(q,null),n(q,W),j&&j.m(q,null),n(q,se),x&&x.m(q,null),B&&B.m(J,null),n(J,fe),n(fe,Me),n(J,ee),n(ee,V),n(ee,Z),n(w,ie),n(ie,ce),n(w,ae),n(ae,ue),n(w,ne),n(ne,Ie),n(w,Ce),n(Ce,Ne);for(let he=0;he<4;he+=1)Y[he]&&Y[he].m(w,null);n(d,qe),ve&&ve.m(d,null),Oe||(Fe=[Se(M,"click",e[6]),Se(g,"click",e[7]),Se(I,"click",e[5]),Se(w,"click",e[8]),Se(w,"keydown",e[15])],Oe=!0)},p(G,[me]){if(me&2&&R(r,"disconnected",!G[1]),me&8&&L(b,G[3]),G[2]&&G[0]!==null?te?te.p(G,me):(te=Nl(G),te.c(),te.m(_,null)):te&&(te.d(1),te=null),G[4]===1||G[4]===2?ke?ke.p(G,me):(ke=ql(G),ke.c(),ke.m(J,q)):ke&&(ke.d(1),ke=null),G[4]===0?Q?Q.p(G,me):(Q=Dl(),Q.c(),Q.m(q,W)):Q&&(Q.d(1),Q=null),G[4]===1?j?j.p(G,me):(j=zl(),j.c(),j.m(q,se)):j&&(j.d(1),j=null),G[4]===2?x?x.p(G,me):(x=El(),x.c(),x.m(q,null)):x&&(x.d(1),x=null),me&8&&K!==(K="rotate("+G[3]+")")&&t(q,"transform",K),G[2]&&G[0]!==null?B?B.p(G,me):(B=Ll(G),B.c(),B.m(J,fe)):B&&(B.d(1),B=null),me&0){de=ut([45,135,225,315]);let he;for(he=0;he<4;he+=1){const ze=Il(G,de,he);Y[he]?Y[he].p(ze,me):(Y[he]=Rl(ze),Y[he].c(),Y[he].m(w,null))}for(;he<4;he+=1)Y[he].d(1)}G[4]===1||G[4]===2?ve||(ve=Wl(),ve.c(),ve.m(d,null)):ve&&(ve.d(1),ve=null)},i:_e,o:_e,d(G){G&&z(l),te&&te.d(),ke&&ke.d(),Q&&Q.d(),j&&j.d(),x&&x.d(),B&&B.d(),Dt(Y,G),ve&&ve.d(),Oe=!1,nt(Fe)}}}function Un(e,l,s){let i,a,r,f,d,v,{status:c}=l,{ultrabeam:p=null}=l,u=null,_=!1,b=null;async function h(){try{await Ae.rotator.rotateCW()}catch(g){console.error("Failed to rotate CW:",g)}}async function y(){try{await Ae.rotator.rotateCCW()}catch(g){console.error("Failed to rotate CCW:",g)}}async function k(){try{s(12,b=null),await Ae.rotator.stop()}catch(g){console.error("Failed to stop:",g)}}async function M(g){const I=g.currentTarget.getBoundingClientRect(),F=I.width/2,P=I.height/2,w=g.clientX-I.left-F,N=g.clientY-I.top-P;let A=Math.atan2(w,-N)*(180/Math.PI);A<0&&(A+=360);const $=(Math.round(A/5)*5+360)%360;try{await Ae.rotator.setHeading($),s(12,b=$)}catch(re){console.error("Failed to set heading:",re)}}const C=g=>g.key==="Enter"&&M(g);return e.$$set=g=>{"status"in g&&s(9,c=g.status),"ultrabeam"in g&&s(10,p=g.ultrabeam)},e.$$.update=()=>{if(e.$$.dirty&1024&&s(4,i=(p==null?void 0:p.direction)??0),e.$$.dirty&2560&&(c==null?void 0:c.heading)!==void 0&&(c==null?void 0:c.heading)!==null){const g=c.heading;u===null?(s(11,u=g),console.log(` ✓ First load, set to ${u}°`)):g===0&&u>10&&u<350?console.log(` ✗ IGNORED glitch jump from ${u}° to 0°`):s(11,u=g)}if(e.$$.dirty&2048&&s(3,a=u!==null?u:0),e.$$.dirty&512&&s(1,_=(c==null?void 0:c.connected)||!1),e.$$.dirty&512&&s(13,r=(c==null?void 0:c.target_heading)??null),e.$$.dirty&10240&&s(14,f=r!==null&&u!==null&&(()=>{const g=Math.abs(r-u);return Math.min(g,360-g)>2})()),e.$$.dirty&6144&&b!==null&&u!==null){const g=Math.abs(u-b);Math.min(g,360-g)<3&&s(12,b=null)}e.$$.dirty&28672&&s(0,d=b??(f?r:null)),e.$$.dirty&2049&&s(2,v=d!==null&&u!==null&&(()=>{const g=Math.abs(d-u);return Math.min(g,360-g)>2})())},[d,_,v,a,i,h,y,k,M,c,p,u,b,r,f,C]}class Jn extends ht{constructor(l){super(),vt(this,l,Un,Gn,at,{status:9,ultrabeam:10})}}function Bl(e,l,s){const i=e.slice();return i[35]=l[s],i}function Gl(e){let l,s=e[35].label+"",i;return{c(){l=o("option"),i=T(s),l.__value=e[35].value,Ot(l,l.__value)},m(a,r){E(a,l,r),n(l,i)},p:_e,d(a){a&&z(l)}}}function Ul(e){let l,s,i,a,r,f,d,v,c,p=e[6].toFixed(0)+"",u,_;return{c(){l=o("div"),s=o("h3"),s.textContent="Motors Moving...",i=m(),a=o("div"),r=o("div"),f=m(),d=o("div"),v=T(e[0]),c=T(" / 60 ("),u=T(p),_=T("%)"),t(s,"class","svelte-niu5h3"),t(r,"class","progress-fill svelte-niu5h3"),oe(r,"width",e[6]+"%"),t(a,"class","progress-bar svelte-niu5h3"),t(d,"class","progress-text svelte-niu5h3"),t(l,"class","progress-section svelte-niu5h3")},m(b,h){E(b,l,h),n(l,s),n(l,i),n(l,a),n(a,r),n(l,f),n(l,d),n(d,v),n(d,c),n(d,u),n(d,_)},p(b,h){h[0]&64&&oe(r,"width",b[6]+"%"),h[0]&1&&L(v,b[0]),h[0]&64&&p!==(p=b[6].toFixed(0)+"")&&L(u,p)},d(b){b&&z(l)}}}function Xn(e){let l,s,i,a,r,f,d,v,c,p,u,_,b=(e[1]/1e3).toFixed(3)+"",h,y,k,M,C,g,S,I,F,P,w,N,A,X=e[10][e[2]]+"",$,re,H,O,le,J,q,W,se,K,fe,Me,ee,V,Z,ie,ce,ae,ue,ne,Ie,Ce,Ne,qe,Oe,Fe,te,ke,Q=ut(e[11]),j=[];for(let B=0;B0&&Ul(e);return{c(){l=o("div"),s=o("div"),i=o("h2"),i.textContent="Ultrabeam VL2.3",a=m(),r=o("span"),f=m(),d=o("div"),v=o("div"),c=o("div"),p=o("div"),p.textContent="Frequency",u=m(),_=o("div"),h=T(b),y=T(" MHz"),k=m(),M=o("div"),C=o("div"),C.textContent="Band",g=m(),S=o("div"),I=T(e[7]),F=m(),P=o("div"),w=o("div"),w.textContent="Direction",N=m(),A=o("div"),$=T(X),re=m(),H=o("div"),O=o("h3"),O.textContent="Auto Tracking",le=m(),J=o("div"),q=o("label"),W=o("input"),se=m(),K=o("span"),K.textContent="Enable Auto-Track from Tuner",fe=m(),Me=o("div"),ee=o("label"),ee.textContent="Threshold:",V=m(),Z=o("select");for(let B=0;B↓ + Retract Elements`,t(i,"class","svelte-niu5h3"),t(r,"class","status-dot svelte-niu5h3"),R(r,"disconnected",!e[9]),t(s,"class","card-header svelte-niu5h3"),t(p,"class","status-label svelte-niu5h3"),t(_,"class","status-value freq svelte-niu5h3"),t(c,"class","status-item svelte-niu5h3"),t(C,"class","status-label svelte-niu5h3"),t(S,"class","status-value band svelte-niu5h3"),t(M,"class","status-item svelte-niu5h3"),t(w,"class","status-label svelte-niu5h3"),t(A,"class","status-value direction svelte-niu5h3"),t(P,"class","status-item svelte-niu5h3"),t(v,"class","status-grid svelte-niu5h3"),t(O,"class","svelte-niu5h3"),t(W,"type","checkbox"),t(W,"class","svelte-niu5h3"),t(q,"class","toggle-label svelte-niu5h3"),t(ee,"for","threshold-select"),t(ee,"class","svelte-niu5h3"),t(Z,"id","threshold-select"),e[4]===void 0&&qt(()=>e[22].call(Z)),t(Me,"class","threshold-group svelte-niu5h3"),t(J,"class","auto-track-controls svelte-niu5h3"),t(ae,"class","dir-btn svelte-niu5h3"),R(ae,"active",e[5]===0),t(ne,"class","dir-btn svelte-niu5h3"),R(ne,"active",e[5]===1),t(Ce,"class","dir-btn svelte-niu5h3"),R(Ce,"active",e[5]===2),t(ce,"class","direction-buttons svelte-niu5h3"),t(H,"class","control-section compact svelte-niu5h3"),t(Fe,"class","btn-danger"),t(Oe,"class","actions svelte-niu5h3"),t(d,"class","metrics svelte-niu5h3"),t(l,"class","card svelte-niu5h3")},m(B,de){E(B,l,de),n(l,s),n(s,i),n(s,a),n(s,r),n(l,f),n(l,d),n(d,v),n(v,c),n(c,p),n(c,u),n(c,_),n(_,h),n(_,y),n(v,k),n(v,M),n(M,C),n(M,g),n(M,S),n(S,I),n(v,F),n(v,P),n(P,w),n(P,N),n(P,A),n(A,$),n(d,re),n(d,H),n(H,O),n(H,le),n(H,J),n(J,q),n(q,W),W.checked=e[3],n(q,se),n(q,K),n(J,fe),n(J,Me),n(Me,ee),n(Me,V),n(Me,Z);for(let Y=0;Y0?x?x.p(B,de):(x=Ul(B),x.c(),x.m(d,qe)):x&&(x.d(1),x=null)},i:_e,o:_e,d(B){B&&z(l),Dt(j,B),x&&x.d(),te=!1,nt(ke)}}}function jn(e,l,s){let i,a,r,f,d,v,c,p,u,_,b,{status:h}=l,{flexradio:y=null}=l;const k=["6M","10M","12M","15M","17M","20M","30M","40M"];function M(O,le){return le>=0&&le<=7?k[le]:O>=7e3&&O<=7300?"40M":O>=10100&&O<=10150?"30M":O>=14e3&&O<=14350?"20M":O>=18068&&O<=18168?"17M":O>=21e3&&O<=21450?"15M":O>=24890&&O<=24990?"12M":O>=28e3&&O<=29700?"10M":O>=5e4&&O<=54e3?"6M":"Unknown"}const C=["Normal","180°","Bi-Dir"],g=[{value:25,label:"25 kHz"},{value:50,label:"50 kHz"},{value:100,label:"100 kHz"}];let S=!0,I=25,F=0;async function P(){if(a!==0)try{await Ae.ultrabeam.setFrequency(a,F),await Ae.ultrabeam.setDirection(F)}catch(O){console.log("Direction change sent (may show code 30 if busy):",O)}}async function w(){try{await Ae.ultrabeam.setAutoTrack(S,I)}catch(O){console.error("Failed to update auto-track:",O)}}async function N(){if(confirm("Retract all antenna elements?"))try{await Ae.ultrabeam.retract()}catch(O){console.error("Failed to retract:",O)}}function A(){S=this.checked,s(3,S)}function X(){I=tn(this),s(4,I),s(11,g)}const $=()=>{s(5,F=0),P()},re=()=>{s(5,F=1),P()},H=()=>{s(5,F=2),P()};return e.$$set=O=>{"status"in O&&s(15,h=O.status),"flexradio"in O&&s(16,y=O.flexradio)},e.$$.update=()=>{e.$$.dirty[0]&32768&&s(9,i=(h==null?void 0:h.connected)||!1),e.$$.dirty[0]&32768&&s(1,a=(h==null?void 0:h.frequency)||0),e.$$.dirty[0]&32768&&s(18,r=(h==null?void 0:h.band)||0),e.$$.dirty[0]&32768&&s(2,f=(h==null?void 0:h.direction)||0),e.$$.dirty[0]&32768&&s(8,d=(h==null?void 0:h.motors_moving)||0),e.$$.dirty[0]&32768&&s(17,v=(h==null?void 0:h.progress_total)||0),e.$$.dirty[0]&32768&&s(0,c=(h==null?void 0:h.progress_current)||0),e.$$.dirty[0]&32768&&h!=null&&h.element_lengths,e.$$.dirty[0]&32768&&h&&`${h.firmware_major}${h.firmware_minor}`,e.$$.dirty[0]&65536&&s(20,p=(y==null?void 0:y.connected)||!1),e.$$.dirty[0]&65536&&s(19,u=(y==null?void 0:y.interlock_state)||null),e.$$.dirty[0]&524288,e.$$.dirty[0]&1638400&&y&&console.log("FlexRadio data:",{connected:y.connected,interlock_state:y.interlock_state,interlockConnected:p,interlockState:u}),e.$$.dirty[0]&262146&&s(7,_=M(a,r)),e.$$.dirty[0]&4&&s(5,F=f),e.$$.dirty[0]&262144,e.$$.dirty[0]&131073&&s(6,b=v>0?c/60*100:0)},[c,a,f,S,I,F,b,_,d,i,C,g,P,w,N,h,y,v,r,u,p,A,X,$,re,H]}class Yn extends ht{constructor(l){super(),vt(this,l,jn,Xn,at,{status:15,flexradio:16},null,[-1,-1])}}function Vn(e){var Tt,be,we,Jt,Xt,jt,Yt,Vt,Zt,Kt,Ht;let l,s,i,a,r,f,d,v,c,p,u=e[1]?"Connected":"Disconnected",_,b,h,y,k,M,C,g=e[7].sfi+"",S,I,F,P,w,N=e[7].sunspots+"",A,X,$,re,H,O=e[7].a_index+"",le,J,q,W,se,K=e[7].k_index+"",fe,Me,ee,V,Z,ie=e[7].geomag+"",ce,ae,ue,ne,Ie,Ce,Ne=e[6].wind_speed.toFixed(1)+"",qe,Oe,Fe,te,ke,Q=e[6].wind_gust.toFixed(1)+"",j,x,B,de,Y,ve=e[6].temp.toFixed(1)+"",G,me,he,ze,Ye,Ve=e[6].feels_like.toFixed(1)+"",Re,Xe,We,Ee,$e,De=Jl(e[2])+"",Qe,Ze,xe,Be=e[2].toLocaleDateString()+"",pe,Te,et,pt,rt,st,Le,Ke,Mt,He,bt,tt,it,Ge,lt,je,Ue,ot,Je,Pe;return et=new Pn({props:{flexradio:(Tt=e[0])==null?void 0:Tt.flexradio,weather:(be=e[0])==null?void 0:be.weather,latitude:e[4],longitude:e[5],windWarningThreshold:30,gustWarningThreshold:50}}),Ke=new In({props:{status:(we=e[0])==null?void 0:we.webswitch}}),He=new Dn({props:{status:(Jt=e[0])==null?void 0:Jt.power_genius}}),tt=new Ln({props:{status:(Xt=e[0])==null?void 0:Xt.tuner_genius,flexradio:(jt=e[0])==null?void 0:jt.flexradio}}),lt=new Bn({props:{status:(Yt=e[0])==null?void 0:Yt.antenna_genius}}),Ue=new Yn({props:{status:(Vt=e[0])==null?void 0:Vt.ultrabeam,flexradio:(Zt=e[0])==null?void 0:Zt.flexradio}}),Je=new Jn({props:{status:(Kt=e[0])==null?void 0:Kt.rotator_genius,ultrabeam:(Ht=e[0])==null?void 0:Ht.ultrabeam}}),{c(){l=o("div"),s=o("header"),i=o("div"),a=o("h1"),r=T(e[3]),f=T(" Shack"),d=m(),v=o("div"),c=o("span"),p=m(),_=T(u),b=m(),h=o("div"),y=o("div"),k=o("span"),M=T("SFI "),C=o("span"),S=T(g),I=m(),F=o("span"),P=T("Spots "),w=o("span"),A=T(N),X=m(),$=o("span"),re=T("A "),H=o("span"),le=T(O),J=m(),q=o("span"),W=T("K "),se=o("span"),fe=T(K),Me=m(),ee=o("span"),V=T("G "),Z=o("span"),ce=T(ie),ae=m(),ue=o("div"),ne=o("div"),Ie=o("span"),Ce=T("🌬️ "),qe=T(Ne),Oe=T(" km/h"),Fe=m(),te=o("span"),ke=T("💨 "),j=T(Q),x=T(" km/h"),B=m(),de=o("span"),Y=T("🌡️ "),G=T(ve),me=T(" °C"),he=m(),ze=o("span"),Ye=T("→ "),Re=T(Ve),Xe=T(" °C"),We=m(),Ee=o("div"),$e=o("span"),Qe=T(De),Ze=m(),xe=o("span"),pe=T(Be),Te=m(),mt(et.$$.fragment),pt=m(),rt=o("main"),st=o("div"),Le=o("div"),mt(Ke.$$.fragment),Mt=m(),mt(He.$$.fragment),bt=m(),mt(tt.$$.fragment),it=m(),Ge=o("div"),mt(lt.$$.fragment),je=m(),mt(Ue.$$.fragment),ot=m(),mt(Je.$$.fragment),t(a,"class","svelte-114zpok"),t(c,"class","status-indicator"),R(c,"status-online",e[1]),R(c,"status-offline",!e[1]),t(v,"class","connection-status svelte-114zpok"),t(i,"class","header-left svelte-114zpok"),t(C,"class","value svelte-114zpok"),t(k,"class","solar-item svelte-114zpok"),t(w,"class","value svelte-114zpok"),t(F,"class","solar-item svelte-114zpok"),t(H,"class","value svelte-114zpok"),t($,"class","solar-item svelte-114zpok"),t(se,"class","value svelte-114zpok"),t(q,"class","solar-item svelte-114zpok"),t(Z,"class","value svelte-114zpok"),t(ee,"class","solar-item svelte-114zpok"),t(y,"class","solar-info svelte-114zpok"),t(h,"class","header-center svelte-114zpok"),t(Ie,"title","Wind"),t(te,"title","Gust"),t(de,"title","Temperature"),t(ze,"title","Feels like"),t(ne,"class","weather-info svelte-114zpok"),t($e,"class","time svelte-114zpok"),t(xe,"class","date svelte-114zpok"),t(Ee,"class","clock svelte-114zpok"),t(ue,"class","header-right svelte-114zpok"),t(s,"class","svelte-114zpok"),t(Le,"class","row svelte-114zpok"),t(Ge,"class","row svelte-114zpok"),t(st,"class","dashboard-grid svelte-114zpok"),t(rt,"class","svelte-114zpok"),t(l,"class","app svelte-114zpok")},m(U,ge){E(U,l,ge),n(l,s),n(s,i),n(i,a),n(a,r),n(a,f),n(i,d),n(i,v),n(v,c),n(v,p),n(v,_),n(s,b),n(s,h),n(h,y),n(y,k),n(k,M),n(k,C),n(C,S),n(y,I),n(y,F),n(F,P),n(F,w),n(w,A),n(y,X),n(y,$),n($,re),n($,H),n(H,le),n(y,J),n(y,q),n(q,W),n(q,se),n(se,fe),n(y,Me),n(y,ee),n(ee,V),n(ee,Z),n(Z,ce),n(s,ae),n(s,ue),n(ue,ne),n(ne,Ie),n(Ie,Ce),n(Ie,qe),n(Ie,Oe),n(ne,Fe),n(ne,te),n(te,ke),n(te,j),n(te,x),n(ne,B),n(ne,de),n(de,Y),n(de,G),n(de,me),n(ne,he),n(ne,ze),n(ze,Ye),n(ze,Re),n(ze,Xe),n(ue,We),n(ue,Ee),n(Ee,$e),n($e,Qe),n(Ee,Ze),n(Ee,xe),n(xe,pe),n(l,Te),dt(et,l,null),n(l,pt),n(l,rt),n(rt,st),n(st,Le),dt(Ke,Le,null),n(Le,Mt),dt(He,Le,null),n(Le,bt),dt(tt,Le,null),n(st,it),n(st,Ge),dt(lt,Ge,null),n(Ge,je),dt(Ue,Ge,null),n(Ge,ot),dt(Je,Ge,null),Pe=!0},p(U,[ge]){var el,tl,ll,nl,sl,il,ol,al,rl,cl,dl;(!Pe||ge&8)&&L(r,U[3]),(!Pe||ge&2)&&R(c,"status-online",U[1]),(!Pe||ge&2)&&R(c,"status-offline",!U[1]),(!Pe||ge&2)&&u!==(u=U[1]?"Connected":"Disconnected")&&L(_,u),(!Pe||ge&128)&&g!==(g=U[7].sfi+"")&&L(S,g),(!Pe||ge&128)&&N!==(N=U[7].sunspots+"")&&L(A,N),(!Pe||ge&128)&&O!==(O=U[7].a_index+"")&&L(le,O),(!Pe||ge&128)&&K!==(K=U[7].k_index+"")&&L(fe,K),(!Pe||ge&128)&&ie!==(ie=U[7].geomag+"")&&L(ce,ie),(!Pe||ge&64)&&Ne!==(Ne=U[6].wind_speed.toFixed(1)+"")&&L(qe,Ne),(!Pe||ge&64)&&Q!==(Q=U[6].wind_gust.toFixed(1)+"")&&L(j,Q),(!Pe||ge&64)&&ve!==(ve=U[6].temp.toFixed(1)+"")&&L(G,ve),(!Pe||ge&64)&&Ve!==(Ve=U[6].feels_like.toFixed(1)+"")&&L(Re,Ve),(!Pe||ge&4)&&De!==(De=Jl(U[2])+"")&&L(Qe,De),(!Pe||ge&4)&&Be!==(Be=U[2].toLocaleDateString()+"")&&L(pe,Be);const Ct={};ge&1&&(Ct.flexradio=(el=U[0])==null?void 0:el.flexradio),ge&1&&(Ct.weather=(tl=U[0])==null?void 0:tl.weather),ge&16&&(Ct.latitude=U[4]),ge&32&&(Ct.longitude=U[5]),et.$set(Ct);const Qt={};ge&1&&(Qt.status=(ll=U[0])==null?void 0:ll.webswitch),Ke.$set(Qt);const xt={};ge&1&&(xt.status=(nl=U[0])==null?void 0:nl.power_genius),He.$set(xt);const zt={};ge&1&&(zt.status=(sl=U[0])==null?void 0:sl.tuner_genius),ge&1&&(zt.flexradio=(il=U[0])==null?void 0:il.flexradio),tt.$set(zt);const $t={};ge&1&&($t.status=(ol=U[0])==null?void 0:ol.antenna_genius),lt.$set($t);const Et={};ge&1&&(Et.status=(al=U[0])==null?void 0:al.ultrabeam),ge&1&&(Et.flexradio=(rl=U[0])==null?void 0:rl.flexradio),Ue.$set(Et);const Lt={};ge&1&&(Lt.status=(cl=U[0])==null?void 0:cl.rotator_genius),ge&1&&(Lt.ultrabeam=(dl=U[0])==null?void 0:dl.ultrabeam),Je.$set(Lt)},i(U){Pe||(ct(et.$$.fragment,U),ct(Ke.$$.fragment,U),ct(He.$$.fragment,U),ct(tt.$$.fragment,U),ct(lt.$$.fragment,U),ct(Ue.$$.fragment,U),ct(Je.$$.fragment,U),Pe=!0)},o(U){gt(et.$$.fragment,U),gt(Ke.$$.fragment,U),gt(He.$$.fragment,U),gt(tt.$$.fragment,U),gt(lt.$$.fragment,U),gt(Ue.$$.fragment,U),gt(Je.$$.fragment,U),Pe=!1},d(U){U&&z(l),ft(et),ft(Ke),ft(He),ft(tt),ft(lt),ft(Ue),ft(Je)}}}function Jl(e){return e.toTimeString().slice(0,8)}function Zn(e,l,s){let i,a,r=null,f=!1,d=new Date,v="F4BPO",c=null,p=null;const u=Hl.subscribe(b=>{s(0,r=b)}),_=Gt.subscribe(b=>{s(1,f=b)});return Vl(async()=>{hl.connect();try{const h=await Ae.getConfig();h.callsign&&s(3,v=h.callsign),h.location&&(s(4,c=h.location.latitude),s(5,p=h.location.longitude))}catch(h){console.error("Failed to fetch config:",h)}const b=setInterval(()=>{s(2,d=new Date)},1e3);return()=>{clearInterval(b)}}),Zl(()=>{hl.disconnect(),u(),_()}),e.$$.update=()=>{e.$$.dirty&1&&s(7,i=(r==null?void 0:r.solar)||{sfi:0,sunspots:0,a_index:0,k_index:0,geomag:"Unknown"}),e.$$.dirty&1&&s(6,a=(r==null?void 0:r.weather)||{wind_speed:0,wind_gust:0,temp:0,feels_like:0})},[r,f,d,v,c,p,a,i]}class Kn extends ht{constructor(l){super(),vt(this,l,Zn,Vn,at,{})}}new Kn({target:document.getElementById("app")}); diff --git a/cmd/server/web/dist/assets/index-DhJaCyoq.css b/cmd/server/web/dist/assets/index-DhJaCyoq.css new file mode 100644 index 0000000..50fdca7 --- /dev/null +++ b/cmd/server/web/dist/assets/index-DhJaCyoq.css @@ -0,0 +1 @@ +.status-banner.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{display:flex;align-items:center;justify-content:space-between;padding:10px 24px;background:linear-gradient(135deg,#1a1a2e,#16213e,#0f3460);border-bottom:1px solid rgba(79,195,247,.15);gap:20px;flex-wrap:wrap}.status-banner.has-warning.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{background:linear-gradient(135deg,#1f1a12,#29201b,#2d1b0c);border-bottom-color:#f59e0b}.flex-section.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{display:flex;align-items:center;gap:12px}.flex-icon.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{font-size:20px;opacity:.8}.flex-icon.connected.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{opacity:1;filter:drop-shadow(0 0 4px rgba(79,195,247,.6))}.flex-icon.disconnected.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{opacity:.4;filter:grayscale(1)}.frequency-display.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{display:flex;align-items:baseline;gap:4px}.frequency.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{font-size:28px;font-weight:300;font-family:Roboto Mono,Consolas,monospace;color:var(--band-color, #4fc3f7);text-shadow:0 0 15px var(--band-color, rgba(79, 195, 247, .5));letter-spacing:1px}.unit.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{font-size:14px;color:#ffffff80;font-weight:400}.band-badge.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{padding:4px 10px;border-radius:4px;font-size:13px;font-weight:700;color:#000;text-shadow:none}.mode-badge.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{padding:4px 10px;background:#9c27b04d;border:1px solid rgba(156,39,176,.5);border-radius:4px;font-size:13px;font-weight:600;color:#ce93d8}.tx-indicator.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{padding:4px 10px;background:#f443364d;border:1px solid #f44336;border-radius:4px;font-size:13px;font-weight:700;color:#f44336;text-shadow:0 0 10px rgba(244,67,54,.8);animation:svelte-h7ie36-txPulse .5s ease-in-out infinite}@keyframes svelte-h7ie36-txPulse{0%,to{opacity:1}50%{opacity:.6}}.radio-status.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{display:flex;align-items:center;gap:8px}.radio-on-indicator.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{color:#22c55e;font-size:16px;animation:svelte-h7ie36-pulse 2s infinite}.radio-off-indicator.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{color:#ef4444;font-size:16px}@keyframes svelte-h7ie36-pulse{0%,to{opacity:1}50%{opacity:.5}}.radio-status-text.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{color:#ffffffe6;font-size:14px}.model-badge.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{padding:3px 8px;background:#4fc3f733;border:1px solid rgba(79,195,247,.4);border-radius:4px;font-size:12px;color:#4fc3f7}.callsign-badge.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{padding:3px 8px;background:#22c55e33;border:1px solid rgba(34,197,94,.4);border-radius:4px;font-size:12px;font-weight:600;color:#22c55e}.no-signal.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{color:#fff6;font-size:14px;font-style:italic}.separator.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{width:1px;height:30px;background:#fff3}.grayline-section.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{display:flex;align-items:center;gap:12px}.sun-times.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{display:flex;gap:12px}.sun-item.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{font-size:14px;color:#ffffffd9;display:flex;align-items:center;gap:6px}.sun-icon.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{flex-shrink:0}.sunrise-icon.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{color:#fbbf2499;filter:drop-shadow(0 0 4px rgba(251,191,36,.4))}.sunset-icon.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{color:#f9731699;filter:drop-shadow(0 0 4px rgba(249,115,22,.4))}.grayline-badge.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{padding:5px 12px;border-radius:4px;font-size:12px;font-weight:700;letter-spacing:1px;animation:svelte-h7ie36-graylinePulse 1.5s ease-in-out infinite}.grayline-badge.sunrise.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{background:linear-gradient(135deg,#ffb74d4d,#ff8a654d);border:1px solid rgba(255,183,77,.6);color:#ffcc80;text-shadow:0 0 10px rgba(255,183,77,.8)}.grayline-badge.sunset.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{background:linear-gradient(135deg,#ff8a654d,#ef53504d);border:1px solid rgba(255,138,101,.6);color:#ffab91;text-shadow:0 0 10px rgba(255,138,101,.8)}@keyframes svelte-h7ie36-graylinePulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.85;transform:scale(1.02)}}.next-event.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{font-size:12px;color:#ffffff80;font-style:italic}.no-location.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{font-size:13px;color:#fff6;font-style:italic}.weather-section.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{display:flex;align-items:center;gap:16px}.alert.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{display:flex;align-items:center;gap:8px;padding:6px 14px;border-radius:6px;animation:svelte-h7ie36-alertPulse 2s ease-in-out infinite}.wind-alert.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{background:#f59e0b33;border:1px solid rgba(245,158,11,.5)}.gust-alert.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{background:#ef444433;border:1px solid rgba(239,68,68,.5)}@keyframes svelte-h7ie36-alertPulse{0%,to{opacity:1}50%{opacity:.8}}.alert-icon.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{font-size:16px}.alert-text.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{font-size:13px;color:#ffffffe6}.alert-text.svelte-h7ie36 strong.svelte-h7ie36.svelte-h7ie36{color:#fbbf24;font-weight:700}.gust-alert.svelte-h7ie36 .alert-text.svelte-h7ie36 strong.svelte-h7ie36{color:#f87171}.status-ok.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{display:flex;align-items:center;gap:6px;padding:6px 14px;background:#22c55e1a;border:1px solid rgba(34,197,94,.3);border-radius:6px}.ok-icon.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{color:#22c55e;font-weight:700}.ok-text.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{font-size:13px;color:#22c55ee6}@media (max-width: 768px){.status-banner.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{padding:8px 16px;gap:12px}.frequency.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{font-size:22px}.separator.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{display:none}.flex-section.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36,.grayline-section.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36,.weather-section.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{width:100%;justify-content:center}}.card.svelte-z2csmj.svelte-z2csmj{background:linear-gradient(135deg,#1a2332,#0f1923);border:1px solid #2d3748;border-radius:8px;padding:0;overflow:hidden;box-shadow:0 4px 6px #0000004d}.card-header.svelte-z2csmj.svelte-z2csmj{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;background:#4fc3f70d;border-bottom:1px solid #2d3748}h2.svelte-z2csmj.svelte-z2csmj{font-size:14px;font-weight:600;color:var(--accent-cyan);margin:0;letter-spacing:.5px}.status-dot.svelte-z2csmj.svelte-z2csmj{width:8px;height:8px;border-radius:50%;background:#4caf50;box-shadow:0 0 8px #4caf50}.status-dot.disconnected.svelte-z2csmj.svelte-z2csmj{background:#f44336;box-shadow:0 0 8px #f44336}.metrics.svelte-z2csmj.svelte-z2csmj{padding:16px;display:flex;flex-direction:column;gap:12px}.relays.svelte-z2csmj.svelte-z2csmj{display:flex;flex-direction:column;gap:8px}.relay-card.svelte-z2csmj.svelte-z2csmj{display:flex;justify-content:space-between;align-items:center;padding:12px;background:var(--bg-tertiary);border-radius:6px;border:1px solid var(--border-color);transition:all .3s}.relay-card.relay-on.svelte-z2csmj.svelte-z2csmj{background:#4caf501a;border-color:#4caf504d;box-shadow:0 0 15px #4caf5033}.relay-info.svelte-z2csmj.svelte-z2csmj{display:flex;align-items:center}.relay-details.svelte-z2csmj.svelte-z2csmj{display:flex;flex-direction:column;gap:2px}.relay-name.svelte-z2csmj.svelte-z2csmj{font-size:12px;color:var(--text-primary);font-weight:500}.relay-status.svelte-z2csmj.svelte-z2csmj{font-size:10px;color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px}.relay-card.relay-on.svelte-z2csmj .relay-status.svelte-z2csmj{color:#4caf50;font-weight:600}.relay-toggle.svelte-z2csmj.svelte-z2csmj{padding:0;background:transparent;border:none;cursor:pointer}.toggle-track.svelte-z2csmj.svelte-z2csmj{width:52px;height:28px;background:var(--bg-primary);border:2px solid var(--border-color);border-radius:14px;position:relative;transition:all .3s}.relay-toggle.svelte-z2csmj:hover .toggle-track.svelte-z2csmj{border-color:var(--accent-cyan)}.relay-toggle.active.svelte-z2csmj .toggle-track.svelte-z2csmj{background:linear-gradient(135deg,#4caf50,#66bb6a);border-color:#4caf50;box-shadow:0 0 15px #4caf5080}.toggle-thumb.svelte-z2csmj.svelte-z2csmj{width:20px;height:20px;background:#fff;border-radius:50%;position:absolute;top:2px;left:2px;transition:all .3s;box-shadow:0 2px 4px #0000004d}.relay-toggle.active.svelte-z2csmj .toggle-thumb.svelte-z2csmj{transform:translate(24px)}.relay-toggle.svelte-z2csmj.svelte-z2csmj:disabled{opacity:.5;cursor:not-allowed}.controls.svelte-z2csmj.svelte-z2csmj{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:8px}.control-btn.svelte-z2csmj.svelte-z2csmj{padding:12px;border-radius:6px;font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;cursor:pointer;border:none;transition:all .2s;display:flex;align-items:center;justify-content:center;gap:6px}.control-btn.svelte-z2csmj.svelte-z2csmj:hover{transform:translateY(-2px)}.control-btn.svelte-z2csmj.svelte-z2csmj:active{transform:translateY(0)}.btn-icon.svelte-z2csmj.svelte-z2csmj{font-size:16px}.all-on.svelte-z2csmj.svelte-z2csmj{background:linear-gradient(135deg,#4caf50,#66bb6a);color:#fff;box-shadow:0 4px 12px #4caf5066}.all-on.svelte-z2csmj.svelte-z2csmj:hover{box-shadow:0 6px 16px #4caf5080}.all-off.svelte-z2csmj.svelte-z2csmj{background:linear-gradient(135deg,#f44336,#d32f2f);color:#fff;box-shadow:0 4px 12px #f4433666}.all-off.svelte-z2csmj.svelte-z2csmj:hover{box-shadow:0 6px 16px #f4433680}.card.svelte-vwcbgz{background:linear-gradient(135deg,#1a2332,#0f1923);border:1px solid #2d3748;border-radius:8px;padding:0;overflow:hidden;box-shadow:0 4px 6px #0000004d}.card-header.svelte-vwcbgz{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;background:#4fc3f70d;border-bottom:1px solid #2d3748}h2.svelte-vwcbgz{font-size:14px;font-weight:600;color:var(--accent-cyan);margin:0;letter-spacing:.5px}.header-right.svelte-vwcbgz{display:flex;align-items:center;gap:8px}.state-badge.svelte-vwcbgz{padding:4px 12px;border-radius:12px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;cursor:pointer;border:none;transition:all .2s}.state-badge.idle.svelte-vwcbgz{background:#4caf5033;color:#4caf50}.state-badge.transmit.svelte-vwcbgz{background:#ff980033;color:#ff9800;animation:svelte-vwcbgz-pulse 1s infinite}@keyframes svelte-vwcbgz-pulse{0%,to{opacity:1}50%{opacity:.7}}.status-dot.svelte-vwcbgz{width:8px;height:8px;border-radius:50%;background:#4caf50;box-shadow:0 0 8px #4caf50}.status-dot.disconnected.svelte-vwcbgz{background:#f44336;box-shadow:0 0 8px #f44336}.metrics.svelte-vwcbgz{padding:16px;display:flex;flex-direction:column;gap:10px}.power-swr-row.svelte-vwcbgz{display:flex;gap:16px;align-items:center}.power-section.svelte-vwcbgz{flex:1;background:#0f172a99;padding:12px;border-radius:10px;border:1px solid rgba(79,195,247,.2)}.power-header.svelte-vwcbgz{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}.power-label-inline.svelte-vwcbgz{font-size:12px;color:#ffffffb3;text-transform:uppercase;letter-spacing:.5px}.power-value-inline.svelte-vwcbgz{font-size:22px;font-weight:600;color:#66bb6a}.power-bar-container.svelte-vwcbgz{position:relative}.power-bar-bg.svelte-vwcbgz{width:100%;height:28px;background:#0000004d;border-radius:14px;overflow:hidden;position:relative}.power-bar-fill.svelte-vwcbgz{position:relative;height:100%;background:linear-gradient(90deg,#4caf50,#ffc107,#ff9800,#f44336);border-radius:14px;transition:width .3s ease}@keyframes svelte-vwcbgz-shimmer{0%{transform:translate(-100%)}to{transform:translate(100%)}}.swr-circle-compact.svelte-vwcbgz{width:90px;height:90px;border-radius:50%;background:radial-gradient(circle,rgba(79,195,247,.1),transparent);border:4px solid var(--swr-color);display:flex;flex-direction:column;align-items:center;justify-content:center;box-shadow:0 0 25px var(--swr-color);flex-shrink:0}.swr-value-compact.svelte-vwcbgz{font-size:28px;font-weight:700;color:var(--swr-color)}.swr-label-compact.svelte-vwcbgz{font-size:11px;color:#fff9;text-transform:uppercase;margin-top:2px}.temp-group.svelte-vwcbgz{display:grid;grid-template-columns:1fr 1fr;gap:12px}.temp-item.svelte-vwcbgz{display:flex;flex-direction:column;gap:4px;padding:12px;background:var(--bg-tertiary);border-radius:6px}.temp-value.svelte-vwcbgz{font-size:32px;font-weight:300;line-height:1}.temp-label.svelte-vwcbgz{font-size:10px;color:var(--text-muted);text-transform:uppercase}.temp-mini-bar.svelte-vwcbgz{height:4px;background:#ffffff1a;border-radius:2px;overflow:hidden;margin-top:4px}.temp-mini-fill.svelte-vwcbgz{height:100%;border-radius:2px;transition:width .3s ease}.params-grid.svelte-vwcbgz{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.param-box.svelte-vwcbgz{padding:8px;background:var(--bg-tertiary);border-radius:4px;text-align:center}.param-label.svelte-vwcbgz{font-size:9px;color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px}.param-value.svelte-vwcbgz{font-size:16px;font-weight:300;color:var(--text-primary);margin-top:2px}.band-display.svelte-vwcbgz{display:grid;grid-template-columns:1fr 1fr;gap:8px;padding:8px;background:#4fc3f70d;border-radius:6px}.band-item.svelte-vwcbgz{display:flex;justify-content:space-between;align-items:center}.band-label.svelte-vwcbgz{font-size:11px;color:var(--text-muted)}.band-value.svelte-vwcbgz{font-size:14px;font-weight:600;color:var(--accent-cyan)}.fan-control.svelte-vwcbgz{display:flex;flex-direction:column;gap:6px}.control-label.svelte-vwcbgz{font-size:11px;color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px}select.svelte-vwcbgz{background:var(--bg-tertiary);color:var(--text-primary);border:1px solid var(--border-color);border-radius:4px;padding:8px;font-size:12px;cursor:pointer;outline:none;transition:all .2s}select.svelte-vwcbgz:hover{border-color:var(--accent-cyan)}select.svelte-vwcbgz:focus{border-color:var(--accent-cyan);box-shadow:0 0 0 2px #4fc3f733}.card.svelte-zuda7{background:linear-gradient(135deg,#1a2332,#0f1923);border:1px solid #2d3748;border-radius:8px;padding:0;overflow:hidden;box-shadow:0 4px 6px #0000004d}.card-header.svelte-zuda7{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;background:#4fc3f70d;border-bottom:1px solid #2d3748}h2.svelte-zuda7{font-size:14px;font-weight:600;color:var(--accent-cyan);margin:0;letter-spacing:.5px}.header-right.svelte-zuda7{display:flex;align-items:center;gap:8px}.tuning-badge.svelte-zuda7{padding:4px 12px;border-radius:12px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;background:#4caf5033;color:#4caf50}.tuning-badge.tuning.svelte-zuda7{background:#ff980033;color:#ff9800;animation:svelte-zuda7-pulse 1s infinite}@keyframes svelte-zuda7-pulse{0%,to{opacity:1}50%{opacity:.7}}.status-dot.svelte-zuda7{width:8px;height:8px;border-radius:50%;background:#4caf50;box-shadow:0 0 8px #4caf50}.status-dot.disconnected.svelte-zuda7{background:#f44336;box-shadow:0 0 8px #f44336}.metrics.svelte-zuda7{padding:16px;display:flex;flex-direction:column;gap:10px}.power-swr-row.svelte-zuda7{display:flex;gap:16px;align-items:center}.power-section.svelte-zuda7{flex:1;background:#0f172a99;padding:12px;border-radius:10px;border:1px solid rgba(79,195,247,.2)}.power-header.svelte-zuda7{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}.power-label-inline.svelte-zuda7{font-size:12px;color:#ffffffb3;text-transform:uppercase;letter-spacing:.5px}.power-value-inline.svelte-zuda7{font-size:22px;font-weight:600;color:#66bb6a}.power-bar-container.svelte-zuda7{position:relative}.power-bar-bg.svelte-zuda7{width:100%;height:28px;background:#0000004d;border-radius:14px;overflow:hidden;position:relative}.power-bar-fill.svelte-zuda7{position:relative;height:100%;background:linear-gradient(90deg,#4caf50,#ffc107,#ff9800,#f44336);border-radius:14px;transition:width .3s ease}@keyframes svelte-zuda7-shimmer{0%{transform:translate(-100%)}to{transform:translate(100%)}}.swr-circle-compact.svelte-zuda7{width:90px;height:90px;border-radius:50%;background:radial-gradient(circle,rgba(79,195,247,.1),transparent);border:4px solid var(--swr-color);display:flex;flex-direction:column;align-items:center;justify-content:center;box-shadow:0 0 25px var(--swr-color);flex-shrink:0}.swr-value-compact.svelte-zuda7{font-size:28px;font-weight:700;color:var(--swr-color)}.swr-label-compact.svelte-zuda7{font-size:11px;color:#fff9;text-transform:uppercase;margin-top:2px}.capacitors.svelte-zuda7{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;padding:16px;background:#4fc3f70d;border-radius:6px;border:1px solid rgba(79,195,247,.2)}.cap-item.svelte-zuda7{display:flex;flex-direction:column;align-items:center;gap:4px}.cap-value.svelte-zuda7{font-size:20px;font-weight:300;color:var(--accent-cyan);text-shadow:0 0 15px rgba(79,195,247,.5)}.cap-label.svelte-zuda7{font-size:10px;color:var(--text-muted);text-transform:uppercase;letter-spacing:1px}.freq-display.svelte-zuda7{display:grid;grid-template-columns:1fr 1fr;gap:12px}.freq-item.svelte-zuda7{padding:10px;background:var(--bg-tertiary);border-radius:6px;display:flex;flex-direction:column;gap:4px}.freq-label.svelte-zuda7{font-size:9px;color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px}.freq-value.svelte-zuda7{font-size:16px;font-weight:300;color:var(--text-primary)}.freq-unit.svelte-zuda7{font-size:11px;color:var(--text-secondary);margin-left:2px}.controls.svelte-zuda7{display:grid;grid-template-columns:1fr 1fr;gap:8px}.control-btn.svelte-zuda7{padding:12px;border-radius:6px;font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;cursor:pointer;border:1px solid var(--border-color);background:var(--bg-tertiary);color:var(--text-primary);transition:all .2s}.control-btn.svelte-zuda7:hover{border-color:var(--accent-cyan);transform:translateY(-1px)}.control-btn.active.svelte-zuda7{background:var(--accent-cyan);border-color:var(--accent-cyan);color:#000;box-shadow:0 0 15px #4fc3f780}.tune-btn.svelte-zuda7{width:100%;padding:14px;border-radius:6px;font-size:13px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;cursor:pointer;border:none;background:linear-gradient(135deg,#f44336,#d32f2f);color:#fff;transition:all .2s;display:flex;align-items:center;justify-content:center;gap:8px;box-shadow:0 4px 12px #f4433666}.tune-btn.svelte-zuda7:hover{transform:translateY(-2px);box-shadow:0 6px 16px #f4433680}.tune-btn.svelte-zuda7:active{transform:translateY(0)}.tune-icon.svelte-zuda7{font-size:16px}.card.svelte-vlabwb{background:linear-gradient(135deg,#1a2332,#0f1923);border:1px solid #2d3748;border-radius:8px;padding:0;overflow:hidden;box-shadow:0 4px 6px #0000004d}.card-header.svelte-vlabwb{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;background:#4fc3f70d;border-bottom:1px solid #2d3748}h2.svelte-vlabwb{font-size:14px;font-weight:600;color:var(--accent-cyan);margin:0;letter-spacing:.5px}.status-dot.svelte-vlabwb{width:8px;height:8px;border-radius:50%;background:#4caf50;box-shadow:0 0 8px #4caf50}.status-dot.disconnected.svelte-vlabwb{background:#f44336;box-shadow:0 0 8px #f44336}.metrics.svelte-vlabwb{padding:16px;display:flex;flex-direction:column;gap:12px}.sources.svelte-vlabwb{display:grid;grid-template-columns:1fr 1fr;gap:8px}.source-item.svelte-vlabwb{padding:8px;background:var(--bg-tertiary);border-radius:4px;text-align:center}.source-label.svelte-vlabwb{font-size:12px;font-weight:600;color:var(--text-primary);text-transform:uppercase}.bands.svelte-vlabwb{display:grid;grid-template-columns:1fr 1fr;gap:8px}.band-item.svelte-vlabwb{padding:10px;background:#4fc3f71a;border:1px solid rgba(79,195,247,.3);border-radius:4px;text-align:center}.band-value.svelte-vlabwb{font-size:16px;font-weight:600;color:var(--accent-cyan)}.antennas.svelte-vlabwb{display:flex;flex-direction:column;gap:8px}.antenna-card.svelte-vlabwb{display:flex;justify-content:space-between;align-items:center;padding:12px;background:var(--bg-tertiary);border:2px solid var(--border-color);border-radius:6px;transition:all .3s}.antenna-card.active-a.svelte-vlabwb{background:#4caf5033;border-color:#4caf50;box-shadow:0 0 20px #4caf504d}.antenna-card.active-b.svelte-vlabwb{background:#2196f333;border-color:#2196f3;box-shadow:0 0 20px #2196f34d}.antenna-card.tx.svelte-vlabwb{background:#f4433633!important;border-color:#f44336!important;box-shadow:0 0 20px #f4433666!important}.antenna-name.svelte-vlabwb{font-size:14px;font-weight:500;color:var(--text-primary)}.antenna-ports.svelte-vlabwb{display:flex;gap:6px}.port-btn.svelte-vlabwb{width:36px;height:36px;border-radius:4px;font-size:14px;font-weight:600;cursor:pointer;border:1px solid var(--border-color);background:var(--bg-primary);color:var(--text-secondary);transition:all .2s}.port-btn.svelte-vlabwb:hover{border-color:var(--accent-cyan);transform:scale(1.05)}.port-btn.active.svelte-vlabwb{background:var(--accent-cyan);border-color:var(--accent-cyan);color:#000;box-shadow:0 0 12px #4fc3f780}.reboot-btn.svelte-vlabwb{width:100%;padding:12px;border-radius:6px;font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;cursor:pointer;border:none;background:linear-gradient(135deg,#ff9800,#f57c00);color:#fff;transition:all .2s;display:flex;align-items:center;justify-content:center;gap:6px;box-shadow:0 4px 12px #ff980066;margin-top:8px}.reboot-btn.svelte-vlabwb:hover{transform:translateY(-2px);box-shadow:0 6px 16px #ff980080}.reboot-btn.svelte-vlabwb:active{transform:translateY(0)}.reboot-icon.svelte-vlabwb{font-size:16px}.card.svelte-3omzwr{background:linear-gradient(135deg,#1a2332,#0f1923);border:1px solid #2d3748;border-radius:8px;padding:0;overflow:hidden;box-shadow:0 4px 6px #0000004d}.card-header.svelte-3omzwr{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;background:#4fc3f70d;border-bottom:1px solid #2d3748}h2.svelte-3omzwr{font-size:14px;font-weight:600;color:var(--accent-cyan);margin:0;letter-spacing:.5px}.status-dot.svelte-3omzwr{width:8px;height:8px;border-radius:50%;background:#4caf50;box-shadow:0 0 8px #4caf50}.status-dot.disconnected.svelte-3omzwr{background:#f44336;box-shadow:0 0 8px #f44336}.metrics.svelte-3omzwr{padding:16px;display:flex;flex-direction:column;gap:10px}.heading-controls-row.svelte-3omzwr{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:8px;background:#4fc3f71a;border-radius:6px;border:1px solid rgba(79,195,247,.3)}.heading-display-compact.svelte-3omzwr{flex:1;text-align:center}.controls-compact.svelte-3omzwr{display:flex;gap:6px}.btn-mini.svelte-3omzwr{width:36px;height:36px;border:2px solid rgba(79,195,247,.3);border-radius:6px;font-size:20px;font-weight:600;cursor:pointer;transition:all .2s;display:flex;align-items:center;justify-content:center;color:#ffffffb3;background:#4fc3f714}.btn-mini.svelte-3omzwr:hover{border-color:#4fc3f799;color:#ffffffe6;background:#4fc3f726;transform:translateY(-1px);box-shadow:0 0 15px #4fc3f74d}.btn-mini.ccw.svelte-3omzwr:hover{transform:translateY(-1px) rotate(-5deg)}.btn-mini.cw.svelte-3omzwr:hover{transform:translateY(-1px) rotate(5deg)}.btn-mini.stop.svelte-3omzwr:hover{border-color:#f44336;color:#f44336;background:#f4433626}.heading-label.svelte-3omzwr{font-size:10px;color:var(--text-muted);text-transform:uppercase;letter-spacing:1px;margin-bottom:4px}.heading-value.svelte-3omzwr{font-size:42px;font-weight:200;color:var(--accent-cyan);text-shadow:0 0 20px rgba(79,195,247,.5)}.target-indicator.svelte-3omzwr{font-size:24px;font-weight:400;color:#ffc107;margin-left:20px;text-shadow:0 0 15px rgba(255,193,7,.6);animation:svelte-3omzwr-targetPulse 1s ease-in-out infinite}@keyframes svelte-3omzwr-targetPulse{0%,to{opacity:.8}50%{opacity:1}}.map-container.svelte-3omzwr{display:flex;justify-content:center;padding:10px;background:#0a162899;border-radius:8px}.map-legend.svelte-3omzwr{display:flex;gap:20px;justify-content:center;padding:8px;margin-top:8px;background:#0a162866;border-radius:6px;font-size:12px;color:#ffffffb3}.legend-item.svelte-3omzwr{display:flex;align-items:center;gap:6px}.map-svg.svelte-3omzwr{width:100%;max-width:300px;height:auto}.clickable-compass.svelte-3omzwr{cursor:crosshair;-webkit-user-select:none;user-select:none;outline:none}.clickable-compass.svelte-3omzwr:hover{filter:brightness(1.1)}.cardinal.svelte-3omzwr{fill:var(--accent-cyan);font-size:16px;font-weight:700;text-shadow:0 0 10px rgba(79,195,247,.8)}.degree-label.svelte-3omzwr{fill:#4fc3f7b3;font-size:12px;font-weight:600}.card.svelte-17wppqz.svelte-17wppqz{background:linear-gradient(135deg,#1a2332,#0f1923);border:1px solid #2d3748;border-radius:8px;padding:0;overflow:hidden;box-shadow:0 4px 6px #0000004d}.card-header.svelte-17wppqz.svelte-17wppqz{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;background:#4fc3f70d;border-bottom:1px solid #2d3748;border-left:3px solid #4fc3f7}h2.svelte-17wppqz.svelte-17wppqz{margin:0;font-size:14px;font-weight:600;color:#4fc3f7;letter-spacing:.5px}h3.svelte-17wppqz.svelte-17wppqz{margin:0 0 12px;font-size:16px;font-weight:500;color:#4fc3f7}.status-dot.svelte-17wppqz.svelte-17wppqz{width:12px;height:12px;border-radius:50%;background:#4caf50;box-shadow:0 0 12px #4caf50cc;animation:svelte-17wppqz-pulse 2s ease-in-out infinite}.status-dot.disconnected.svelte-17wppqz.svelte-17wppqz{background:#666;box-shadow:none;animation:none}@keyframes svelte-17wppqz-pulse{0%,to{opacity:1}50%{opacity:.6}}.metrics.svelte-17wppqz.svelte-17wppqz{display:flex;flex-direction:column;gap:12px;padding:16px}.status-grid.svelte-17wppqz.svelte-17wppqz{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px}.status-item.svelte-17wppqz.svelte-17wppqz{background:#0f172a99;padding:16px;border-radius:12px;border:1px solid rgba(79,195,247,.2)}.status-label.svelte-17wppqz.svelte-17wppqz{font-size:12px;color:#fff9;text-transform:uppercase;letter-spacing:1px;margin-bottom:8px}.status-value.svelte-17wppqz.svelte-17wppqz{font-size:22px;font-weight:700;color:#4fc3f7;text-shadow:0 0 10px rgba(79,195,247,.5)}.status-value.freq.svelte-17wppqz.svelte-17wppqz{color:#66bb6a;font-size:22px;text-shadow:0 0 10px rgba(102,187,106,.5)}.status-value.band.svelte-17wppqz.svelte-17wppqz{color:#ffa726;text-shadow:0 0 10px rgba(255,167,38,.5)}.status-value.direction.svelte-17wppqz.svelte-17wppqz{color:#ab47bc;text-shadow:0 0 10px rgba(171,71,188,.5)}.control-section.svelte-17wppqz.svelte-17wppqz{background:#0f172a66;padding:12px;border-radius:12px;border:1px solid rgba(79,195,247,.2)}.control-section.compact.svelte-17wppqz.svelte-17wppqz{padding:16px}.auto-track-controls.svelte-17wppqz.svelte-17wppqz{display:flex;align-items:center;gap:20px;flex-wrap:wrap}.toggle-label.svelte-17wppqz.svelte-17wppqz{display:flex;align-items:center;gap:8px;cursor:pointer;color:#fff;font-size:14px}.toggle-label.svelte-17wppqz input[type=checkbox].svelte-17wppqz{width:20px;height:20px;cursor:pointer}.threshold-group.svelte-17wppqz.svelte-17wppqz{display:flex;align-items:center;gap:8px}.threshold-group.svelte-17wppqz label.svelte-17wppqz{font-size:14px;color:#fffc;white-space:nowrap}.direction-buttons.svelte-17wppqz.svelte-17wppqz{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-top:16px}.dir-btn.svelte-17wppqz.svelte-17wppqz{padding:12px 16px;border:2px solid rgba(79,195,247,.3);border-radius:8px;font-size:13px;font-weight:600;text-transform:uppercase;cursor:pointer;transition:all .2s;color:#ffffffb3;background:#4fc3f714;letter-spacing:.5px}.dir-btn.svelte-17wppqz.svelte-17wppqz:hover{border-color:#4fc3f799;color:#ffffffe6;background:#4fc3f726;transform:translateY(-1px)}.dir-btn.active.svelte-17wppqz.svelte-17wppqz{border-color:#4fc3f7;color:#4fc3f7;background:#4fc3f733;box-shadow:0 0 20px #4fc3f766;font-weight:700}.progress-section.svelte-17wppqz.svelte-17wppqz{background:#4fc3f71a;padding:16px;border-radius:8px;border:2px solid rgba(79,195,247,.3);margin-top:16px}.progress-section.svelte-17wppqz h3.svelte-17wppqz{margin:0 0 12px;font-size:14px;color:#4fc3f7;text-transform:uppercase;letter-spacing:.5px}.progress-bar.svelte-17wppqz.svelte-17wppqz{height:20px;background:#0f172a99;border-radius:10px;overflow:hidden;position:relative}.progress-fill.svelte-17wppqz.svelte-17wppqz{height:100%;background:linear-gradient(90deg,#4fc3f7,#03a9f4);transition:width .3s ease;border-radius:10px}.progress-text.svelte-17wppqz.svelte-17wppqz{text-align:center;font-size:13px;color:#fffc;margin-top:8px}.actions.svelte-17wppqz.svelte-17wppqz{display:flex;gap:12px}.app.svelte-a5dfm6.svelte-a5dfm6{min-height:100vh;display:flex;flex-direction:column}header.svelte-a5dfm6.svelte-a5dfm6{background:linear-gradient(135deg,#1a1a2e,#16213e,#0f3460);padding:8px 24px;display:flex;justify-content:space-between;align-items:center;box-shadow:0 4px 20px #0006;border-bottom:1px solid rgba(79,195,247,.2);flex-wrap:wrap;gap:16px}.header-left.svelte-a5dfm6.svelte-a5dfm6{display:flex;align-items:center;gap:16px}h1.svelte-a5dfm6.svelte-a5dfm6{font-size:24px;font-weight:500;margin:0;color:#fff}.connection-status.svelte-a5dfm6.svelte-a5dfm6{display:flex;align-items:center;gap:8px;font-size:14px;padding:6px 12px;background:#0000004d;border-radius:16px}.header-center.svelte-a5dfm6.svelte-a5dfm6{flex:1;display:flex;justify-content:center}.solar-info.svelte-a5dfm6.svelte-a5dfm6{display:flex;gap:20px;font-size:14px}.solar-item.svelte-a5dfm6.svelte-a5dfm6{color:#ffffffe6;font-size:13px;font-weight:600;letter-spacing:.3px}.solar-item.svelte-a5dfm6 .value.svelte-a5dfm6{font-weight:700;margin-left:4px;font-size:14px}.solar-item.svelte-a5dfm6:nth-child(1) .value.svelte-a5dfm6{color:#ffa726;text-shadow:0 0 8px rgba(255,167,38,.5)}.solar-item.svelte-a5dfm6:nth-child(2) .value.svelte-a5dfm6{color:#66bb6a;text-shadow:0 0 8px rgba(102,187,106,.5)}.solar-item.svelte-a5dfm6:nth-child(3) .value.svelte-a5dfm6{color:#42a5f5;text-shadow:0 0 8px rgba(66,165,245,.5)}.solar-item.svelte-a5dfm6:nth-child(4) .value.svelte-a5dfm6{color:#ef5350;text-shadow:0 0 8px rgba(239,83,80,.5)}.solar-item.svelte-a5dfm6:nth-child(5) .value.svelte-a5dfm6{color:#ab47bc;text-shadow:0 0 8px rgba(171,71,188,.5)}.header-right.svelte-a5dfm6.svelte-a5dfm6{display:flex;gap:20px;align-items:center}.weather-info.svelte-a5dfm6.svelte-a5dfm6{display:flex;gap:12px;font-size:14px;color:#ffffffe6}.clock.svelte-a5dfm6.svelte-a5dfm6{display:flex;flex-direction:column;align-items:flex-end}.time.svelte-a5dfm6.svelte-a5dfm6{font-size:18px;font-weight:500;color:#fff}.date.svelte-a5dfm6.svelte-a5dfm6{font-size:12px;color:#ffffffb3;padding-top:0}main.svelte-a5dfm6.svelte-a5dfm6{flex:1;padding:24px;overflow-y:auto}.dashboard-grid.svelte-a5dfm6.svelte-a5dfm6{display:flex;flex-direction:column;gap:24px;max-width:1800px;margin:0 auto}.row.svelte-a5dfm6.svelte-a5dfm6{display:flex;gap:24px;flex-wrap:wrap}.row.svelte-a5dfm6>*{flex:1;min-width:300px}@media (max-width: 1200px){.row.svelte-a5dfm6.svelte-a5dfm6{flex-direction:column}}@media (max-width: 768px){header.svelte-a5dfm6.svelte-a5dfm6{flex-direction:column;align-items:flex-start}.header-center.svelte-a5dfm6.svelte-a5dfm6,.header-right.svelte-a5dfm6.svelte-a5dfm6{width:100%;justify-content:flex-start}.solar-info.svelte-a5dfm6.svelte-a5dfm6{flex-wrap:wrap}}:root{--bg-primary: #0a1628;--bg-secondary: #1a2332;--bg-tertiary: #243447;--bg-hover: #2a3f5f;--text-primary: #e0e6ed;--text-secondary: #a0aec0;--text-muted: #718096;--accent-cyan: #4fc3f7;--accent-blue: #2196f3;--accent-green: #4caf50;--accent-orange: #ff9800;--accent-red: #f44336;--accent-purple: #9c27b0;--accent-yellow: #ffc107;--border-color: #2d3748;--border-light: #374151;--card-shadow: 0 1px 3px rgba(0, 0, 0, .3);--card-radius: 6px;--header-height: 56px;--spacing-xs: 4px;--spacing-sm: 8px;--spacing-md: 12px;--spacing-lg: 16px;--spacing-xl: 20px}*{box-sizing:border-box;margin:0;padding:0}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background:var(--bg-primary);color:var(--text-primary);font-size:13px;line-height:1.4;overflow-x:hidden}.app{display:flex;flex-direction:column;height:100vh;overflow:hidden}header{height:var(--header-height);background:var(--bg-secondary);border-bottom:1px solid var(--border-color);display:flex;align-items:center;justify-content:space-between;padding:0 var(--spacing-lg);flex-shrink:0}.header-left{display:flex;align-items:center;gap:var(--spacing-lg)}.header-left h1{font-size:16px;font-weight:600;color:var(--accent-cyan);letter-spacing:.5px}.connection-status{display:flex;align-items:center;gap:var(--spacing-sm);font-size:12px;color:var(--text-secondary)}.status-indicator{width:8px;height:8px;border-radius:50%;background:var(--accent-red);transition:background .3s}.status-indicator.status-online{background:var(--accent-green);box-shadow:0 0 8px var(--accent-green)}.header-center{display:flex;gap:var(--spacing-xl)}.solar-info{display:flex;gap:var(--spacing-md);font-size:12px}.solar-item{color:var(--text-secondary)}.solar-item .value{color:var(--accent-cyan);font-weight:600;margin-left:var(--spacing-xs)}.header-right{display:flex;align-items:center;gap:var(--spacing-lg)}.weather-info{display:flex;gap:var(--spacing-md);font-size:12px;color:var(--text-secondary)}.clock{display:flex;flex-direction:column;align-items:flex-end;font-size:11px}.clock .time{font-size:14px;font-weight:600;color:var(--text-primary)}.clock .date{color:var(--text-secondary)}main{flex:1;overflow-y:auto;padding:var(--spacing-md)}.dashboard-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:var(--spacing-md);max-width:1800px;margin:0 auto}.card{background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:var(--card-radius);padding:var(--spacing-md);box-shadow:var(--card-shadow);transition:border-color .2s}.card:hover{border-color:var(--border-light)}.card h2{font-size:14px;font-weight:600;color:var(--accent-cyan);margin-bottom:var(--spacing-md);display:flex;align-items:center;gap:var(--spacing-sm);letter-spacing:.5px}.card h2:before{content:"";width:3px;height:14px;background:var(--accent-cyan);border-radius:2px}.status-dot{width:8px;height:8px;border-radius:50%;background:var(--accent-green)}.status-dot.disconnected{background:var(--accent-red)}.label{font-size:11px;color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px;margin-bottom:var(--spacing-xs)}.value{font-size:18px;font-weight:300;color:var(--text-primary)}button,.button{background:var(--bg-tertiary);color:var(--text-primary);border:1px solid var(--border-color);border-radius:4px;padding:var(--spacing-sm) var(--spacing-md);font-size:12px;font-weight:500;cursor:pointer;transition:all .2s;text-transform:uppercase;letter-spacing:.5px}button:hover,.button:hover{background:var(--bg-hover);border-color:var(--border-light)}button:active,.button:active{transform:scale(.98)}button.primary{background:var(--accent-cyan);border-color:var(--accent-cyan);color:#000}button.primary:hover{background:#29b6f6;border-color:#29b6f6}button.success{background:var(--accent-green);border-color:var(--accent-green);color:#fff}button.danger{background:var(--accent-red);border-color:var(--accent-red);color:#fff}button:disabled{opacity:.5;cursor:not-allowed}select{background:var(--bg-tertiary);color:var(--text-primary);border:1px solid var(--border-color);border-radius:4px;padding:var(--spacing-sm);font-size:12px;cursor:pointer;outline:none;transition:all .2s}select:hover{border-color:var(--border-light)}select:focus{border-color:var(--accent-cyan)}.badge{display:inline-block;padding:4px 10px;border-radius:12px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.5px}.badge.green{background:#4caf5033;color:var(--accent-green)}.badge.red{background:#f4433633;color:var(--accent-red)}.badge.orange{background:#ff980033;color:var(--accent-orange)}.badge.cyan{background:#4fc3f733;color:var(--accent-cyan)}.badge.purple{background:#9c27b033;color:var(--accent-purple)}.bar{width:100%;height:6px;background:var(--bg-tertiary);border-radius:3px;overflow:hidden;margin:var(--spacing-xs) 0}.bar-fill{height:100%;background:linear-gradient(90deg,var(--accent-green),var(--accent-orange),var(--accent-red));transition:width .3s ease;border-radius:3px}.scale{display:flex;justify-content:space-between;font-size:10px;color:var(--text-muted);margin-top:var(--spacing-xs)}.metrics{display:flex;flex-direction:column;gap:var(--spacing-md)}.metric{display:flex;flex-direction:column;gap:var(--spacing-xs)}.metric-row{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--spacing-md)}.metric.small{min-width:0}.metric-value{display:flex;justify-content:space-between;align-items:baseline;flex-wrap:wrap}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:var(--bg-primary)}::-webkit-scrollbar-thumb{background:var(--bg-tertiary);border-radius:4px}::-webkit-scrollbar-thumb:hover{background:var(--bg-hover)}@media (max-width: 1400px){.dashboard-grid{grid-template-columns:repeat(auto-fit,minmax(250px,1fr))}}@media (max-width: 768px){header{flex-direction:column;height:auto;padding:var(--spacing-sm);gap:var(--spacing-sm)}.dashboard-grid{grid-template-columns:1fr}.header-center{order:3;width:100%}} diff --git a/cmd/server/web/dist/assets/index-bMbhvRow.css b/cmd/server/web/dist/assets/index-bMbhvRow.css new file mode 100644 index 0000000..d44c0f2 --- /dev/null +++ b/cmd/server/web/dist/assets/index-bMbhvRow.css @@ -0,0 +1 @@ +.status-banner.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{display:flex;align-items:center;justify-content:space-between;padding:10px 24px;background:linear-gradient(135deg,#1a1a2e,#16213e,#0f3460);border-bottom:1px solid rgba(79,195,247,.15);gap:20px;flex-wrap:wrap}.status-banner.has-warning.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{background:linear-gradient(135deg,#1f1a12,#29201b,#2d1b0c);border-bottom-color:#f59e0b}.flex-section.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{display:flex;align-items:center;gap:12px}.flex-icon.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{font-size:20px;opacity:.8}.flex-icon.connected.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{opacity:1;filter:drop-shadow(0 0 4px rgba(79,195,247,.6))}.flex-icon.disconnected.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{opacity:.4;filter:grayscale(1)}.frequency-display.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{display:flex;align-items:baseline;gap:4px}.frequency.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{font-size:28px;font-weight:300;font-family:Roboto Mono,Consolas,monospace;color:var(--band-color, #4fc3f7);text-shadow:0 0 15px var(--band-color, rgba(79, 195, 247, .5));letter-spacing:1px}.unit.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{font-size:14px;color:#ffffff80;font-weight:400}.band-badge.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{padding:4px 10px;border-radius:4px;font-size:13px;font-weight:700;color:#000;text-shadow:none}.mode-badge.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{padding:4px 10px;background:#9c27b04d;border:1px solid rgba(156,39,176,.5);border-radius:4px;font-size:13px;font-weight:600;color:#ce93d8}.tx-indicator.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{padding:4px 10px;background:#f443364d;border:1px solid #f44336;border-radius:4px;font-size:13px;font-weight:700;color:#f44336;text-shadow:0 0 10px rgba(244,67,54,.8);animation:svelte-h7ie36-txPulse .5s ease-in-out infinite}@keyframes svelte-h7ie36-txPulse{0%,to{opacity:1}50%{opacity:.6}}.radio-status.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{display:flex;align-items:center;gap:8px}.radio-on-indicator.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{color:#22c55e;font-size:16px;animation:svelte-h7ie36-pulse 2s infinite}.radio-off-indicator.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{color:#ef4444;font-size:16px}@keyframes svelte-h7ie36-pulse{0%,to{opacity:1}50%{opacity:.5}}.radio-status-text.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{color:#ffffffe6;font-size:14px}.model-badge.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{padding:3px 8px;background:#4fc3f733;border:1px solid rgba(79,195,247,.4);border-radius:4px;font-size:12px;color:#4fc3f7}.callsign-badge.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{padding:3px 8px;background:#22c55e33;border:1px solid rgba(34,197,94,.4);border-radius:4px;font-size:12px;font-weight:600;color:#22c55e}.no-signal.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{color:#fff6;font-size:14px;font-style:italic}.separator.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{width:1px;height:30px;background:#fff3}.grayline-section.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{display:flex;align-items:center;gap:12px}.sun-times.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{display:flex;gap:12px}.sun-item.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{font-size:14px;color:#ffffffd9;display:flex;align-items:center;gap:6px}.sun-icon.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{flex-shrink:0}.sunrise-icon.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{color:#fbbf2499;filter:drop-shadow(0 0 4px rgba(251,191,36,.4))}.sunset-icon.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{color:#f9731699;filter:drop-shadow(0 0 4px rgba(249,115,22,.4))}.grayline-badge.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{padding:5px 12px;border-radius:4px;font-size:12px;font-weight:700;letter-spacing:1px;animation:svelte-h7ie36-graylinePulse 1.5s ease-in-out infinite}.grayline-badge.sunrise.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{background:linear-gradient(135deg,#ffb74d4d,#ff8a654d);border:1px solid rgba(255,183,77,.6);color:#ffcc80;text-shadow:0 0 10px rgba(255,183,77,.8)}.grayline-badge.sunset.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{background:linear-gradient(135deg,#ff8a654d,#ef53504d);border:1px solid rgba(255,138,101,.6);color:#ffab91;text-shadow:0 0 10px rgba(255,138,101,.8)}@keyframes svelte-h7ie36-graylinePulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.85;transform:scale(1.02)}}.next-event.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{font-size:12px;color:#ffffff80;font-style:italic}.no-location.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{font-size:13px;color:#fff6;font-style:italic}.weather-section.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{display:flex;align-items:center;gap:16px}.alert.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{display:flex;align-items:center;gap:8px;padding:6px 14px;border-radius:6px;animation:svelte-h7ie36-alertPulse 2s ease-in-out infinite}.wind-alert.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{background:#f59e0b33;border:1px solid rgba(245,158,11,.5)}.gust-alert.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{background:#ef444433;border:1px solid rgba(239,68,68,.5)}@keyframes svelte-h7ie36-alertPulse{0%,to{opacity:1}50%{opacity:.8}}.alert-icon.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{font-size:16px}.alert-text.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{font-size:13px;color:#ffffffe6}.alert-text.svelte-h7ie36 strong.svelte-h7ie36.svelte-h7ie36{color:#fbbf24;font-weight:700}.gust-alert.svelte-h7ie36 .alert-text.svelte-h7ie36 strong.svelte-h7ie36{color:#f87171}.status-ok.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{display:flex;align-items:center;gap:6px;padding:6px 14px;background:#22c55e1a;border:1px solid rgba(34,197,94,.3);border-radius:6px}.ok-icon.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{color:#22c55e;font-weight:700}.ok-text.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{font-size:13px;color:#22c55ee6}@media (max-width: 768px){.status-banner.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{padding:8px 16px;gap:12px}.frequency.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{font-size:22px}.separator.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{display:none}.flex-section.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36,.grayline-section.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36,.weather-section.svelte-h7ie36.svelte-h7ie36.svelte-h7ie36{width:100%;justify-content:center}}.card.svelte-z2csmj.svelte-z2csmj{background:linear-gradient(135deg,#1a2332,#0f1923);border:1px solid #2d3748;border-radius:8px;padding:0;overflow:hidden;box-shadow:0 4px 6px #0000004d}.card-header.svelte-z2csmj.svelte-z2csmj{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;background:#4fc3f70d;border-bottom:1px solid #2d3748}h2.svelte-z2csmj.svelte-z2csmj{font-size:14px;font-weight:600;color:var(--accent-cyan);margin:0;letter-spacing:.5px}.status-dot.svelte-z2csmj.svelte-z2csmj{width:8px;height:8px;border-radius:50%;background:#4caf50;box-shadow:0 0 8px #4caf50}.status-dot.disconnected.svelte-z2csmj.svelte-z2csmj{background:#f44336;box-shadow:0 0 8px #f44336}.metrics.svelte-z2csmj.svelte-z2csmj{padding:16px;display:flex;flex-direction:column;gap:12px}.relays.svelte-z2csmj.svelte-z2csmj{display:flex;flex-direction:column;gap:8px}.relay-card.svelte-z2csmj.svelte-z2csmj{display:flex;justify-content:space-between;align-items:center;padding:12px;background:var(--bg-tertiary);border-radius:6px;border:1px solid var(--border-color);transition:all .3s}.relay-card.relay-on.svelte-z2csmj.svelte-z2csmj{background:#4caf501a;border-color:#4caf504d;box-shadow:0 0 15px #4caf5033}.relay-info.svelte-z2csmj.svelte-z2csmj{display:flex;align-items:center}.relay-details.svelte-z2csmj.svelte-z2csmj{display:flex;flex-direction:column;gap:2px}.relay-name.svelte-z2csmj.svelte-z2csmj{font-size:12px;color:var(--text-primary);font-weight:500}.relay-status.svelte-z2csmj.svelte-z2csmj{font-size:10px;color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px}.relay-card.relay-on.svelte-z2csmj .relay-status.svelte-z2csmj{color:#4caf50;font-weight:600}.relay-toggle.svelte-z2csmj.svelte-z2csmj{padding:0;background:transparent;border:none;cursor:pointer}.toggle-track.svelte-z2csmj.svelte-z2csmj{width:52px;height:28px;background:var(--bg-primary);border:2px solid var(--border-color);border-radius:14px;position:relative;transition:all .3s}.relay-toggle.svelte-z2csmj:hover .toggle-track.svelte-z2csmj{border-color:var(--accent-cyan)}.relay-toggle.active.svelte-z2csmj .toggle-track.svelte-z2csmj{background:linear-gradient(135deg,#4caf50,#66bb6a);border-color:#4caf50;box-shadow:0 0 15px #4caf5080}.toggle-thumb.svelte-z2csmj.svelte-z2csmj{width:20px;height:20px;background:#fff;border-radius:50%;position:absolute;top:2px;left:2px;transition:all .3s;box-shadow:0 2px 4px #0000004d}.relay-toggle.active.svelte-z2csmj .toggle-thumb.svelte-z2csmj{transform:translate(24px)}.relay-toggle.svelte-z2csmj.svelte-z2csmj:disabled{opacity:.5;cursor:not-allowed}.controls.svelte-z2csmj.svelte-z2csmj{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:8px}.control-btn.svelte-z2csmj.svelte-z2csmj{padding:12px;border-radius:6px;font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;cursor:pointer;border:none;transition:all .2s;display:flex;align-items:center;justify-content:center;gap:6px}.control-btn.svelte-z2csmj.svelte-z2csmj:hover{transform:translateY(-2px)}.control-btn.svelte-z2csmj.svelte-z2csmj:active{transform:translateY(0)}.btn-icon.svelte-z2csmj.svelte-z2csmj{font-size:16px}.all-on.svelte-z2csmj.svelte-z2csmj{background:linear-gradient(135deg,#4caf50,#66bb6a);color:#fff;box-shadow:0 4px 12px #4caf5066}.all-on.svelte-z2csmj.svelte-z2csmj:hover{box-shadow:0 6px 16px #4caf5080}.all-off.svelte-z2csmj.svelte-z2csmj{background:linear-gradient(135deg,#f44336,#d32f2f);color:#fff;box-shadow:0 4px 12px #f4433666}.all-off.svelte-z2csmj.svelte-z2csmj:hover{box-shadow:0 6px 16px #f4433680}.card.svelte-vwcbgz{background:linear-gradient(135deg,#1a2332,#0f1923);border:1px solid #2d3748;border-radius:8px;padding:0;overflow:hidden;box-shadow:0 4px 6px #0000004d}.card-header.svelte-vwcbgz{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;background:#4fc3f70d;border-bottom:1px solid #2d3748}h2.svelte-vwcbgz{font-size:14px;font-weight:600;color:var(--accent-cyan);margin:0;letter-spacing:.5px}.header-right.svelte-vwcbgz{display:flex;align-items:center;gap:8px}.state-badge.svelte-vwcbgz{padding:4px 12px;border-radius:12px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;cursor:pointer;border:none;transition:all .2s}.state-badge.idle.svelte-vwcbgz{background:#4caf5033;color:#4caf50}.state-badge.transmit.svelte-vwcbgz{background:#ff980033;color:#ff9800;animation:svelte-vwcbgz-pulse 1s infinite}@keyframes svelte-vwcbgz-pulse{0%,to{opacity:1}50%{opacity:.7}}.status-dot.svelte-vwcbgz{width:8px;height:8px;border-radius:50%;background:#4caf50;box-shadow:0 0 8px #4caf50}.status-dot.disconnected.svelte-vwcbgz{background:#f44336;box-shadow:0 0 8px #f44336}.metrics.svelte-vwcbgz{padding:16px;display:flex;flex-direction:column;gap:10px}.power-swr-row.svelte-vwcbgz{display:flex;gap:16px;align-items:center}.power-section.svelte-vwcbgz{flex:1;background:#0f172a99;padding:12px;border-radius:10px;border:1px solid rgba(79,195,247,.2)}.power-header.svelte-vwcbgz{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}.power-label-inline.svelte-vwcbgz{font-size:12px;color:#ffffffb3;text-transform:uppercase;letter-spacing:.5px}.power-value-inline.svelte-vwcbgz{font-size:22px;font-weight:600;color:#66bb6a}.power-bar-container.svelte-vwcbgz{position:relative}.power-bar-bg.svelte-vwcbgz{width:100%;height:28px;background:#0000004d;border-radius:14px;overflow:hidden;position:relative}.power-bar-fill.svelte-vwcbgz{position:relative;height:100%;background:linear-gradient(90deg,#4caf50,#ffc107,#ff9800,#f44336);border-radius:14px;transition:width .3s ease}@keyframes svelte-vwcbgz-shimmer{0%{transform:translate(-100%)}to{transform:translate(100%)}}.swr-circle-compact.svelte-vwcbgz{width:90px;height:90px;border-radius:50%;background:radial-gradient(circle,rgba(79,195,247,.1),transparent);border:4px solid var(--swr-color);display:flex;flex-direction:column;align-items:center;justify-content:center;box-shadow:0 0 25px var(--swr-color);flex-shrink:0}.swr-value-compact.svelte-vwcbgz{font-size:28px;font-weight:700;color:var(--swr-color)}.swr-label-compact.svelte-vwcbgz{font-size:11px;color:#fff9;text-transform:uppercase;margin-top:2px}.temp-group.svelte-vwcbgz{display:grid;grid-template-columns:1fr 1fr;gap:12px}.temp-item.svelte-vwcbgz{display:flex;flex-direction:column;gap:4px;padding:12px;background:var(--bg-tertiary);border-radius:6px}.temp-value.svelte-vwcbgz{font-size:32px;font-weight:300;line-height:1}.temp-label.svelte-vwcbgz{font-size:10px;color:var(--text-muted);text-transform:uppercase}.temp-mini-bar.svelte-vwcbgz{height:4px;background:#ffffff1a;border-radius:2px;overflow:hidden;margin-top:4px}.temp-mini-fill.svelte-vwcbgz{height:100%;border-radius:2px;transition:width .3s ease}.params-grid.svelte-vwcbgz{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.param-box.svelte-vwcbgz{padding:8px;background:var(--bg-tertiary);border-radius:4px;text-align:center}.param-label.svelte-vwcbgz{font-size:9px;color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px}.param-value.svelte-vwcbgz{font-size:16px;font-weight:300;color:var(--text-primary);margin-top:2px}.band-display.svelte-vwcbgz{display:grid;grid-template-columns:1fr 1fr;gap:8px;padding:8px;background:#4fc3f70d;border-radius:6px}.band-item.svelte-vwcbgz{display:flex;justify-content:space-between;align-items:center}.band-label.svelte-vwcbgz{font-size:11px;color:var(--text-muted)}.band-value.svelte-vwcbgz{font-size:14px;font-weight:600;color:var(--accent-cyan)}.fan-control.svelte-vwcbgz{display:flex;flex-direction:column;gap:6px}.control-label.svelte-vwcbgz{font-size:11px;color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px}select.svelte-vwcbgz{background:var(--bg-tertiary);color:var(--text-primary);border:1px solid var(--border-color);border-radius:4px;padding:8px;font-size:12px;cursor:pointer;outline:none;transition:all .2s}select.svelte-vwcbgz:hover{border-color:var(--accent-cyan)}select.svelte-vwcbgz:focus{border-color:var(--accent-cyan);box-shadow:0 0 0 2px #4fc3f733}.card.svelte-zuda7{background:linear-gradient(135deg,#1a2332,#0f1923);border:1px solid #2d3748;border-radius:8px;padding:0;overflow:hidden;box-shadow:0 4px 6px #0000004d}.card-header.svelte-zuda7{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;background:#4fc3f70d;border-bottom:1px solid #2d3748}h2.svelte-zuda7{font-size:14px;font-weight:600;color:var(--accent-cyan);margin:0;letter-spacing:.5px}.header-right.svelte-zuda7{display:flex;align-items:center;gap:8px}.tuning-badge.svelte-zuda7{padding:4px 12px;border-radius:12px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;background:#4caf5033;color:#4caf50}.tuning-badge.tuning.svelte-zuda7{background:#ff980033;color:#ff9800;animation:svelte-zuda7-pulse 1s infinite}@keyframes svelte-zuda7-pulse{0%,to{opacity:1}50%{opacity:.7}}.status-dot.svelte-zuda7{width:8px;height:8px;border-radius:50%;background:#4caf50;box-shadow:0 0 8px #4caf50}.status-dot.disconnected.svelte-zuda7{background:#f44336;box-shadow:0 0 8px #f44336}.metrics.svelte-zuda7{padding:16px;display:flex;flex-direction:column;gap:10px}.power-swr-row.svelte-zuda7{display:flex;gap:16px;align-items:center}.power-section.svelte-zuda7{flex:1;background:#0f172a99;padding:12px;border-radius:10px;border:1px solid rgba(79,195,247,.2)}.power-header.svelte-zuda7{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}.power-label-inline.svelte-zuda7{font-size:12px;color:#ffffffb3;text-transform:uppercase;letter-spacing:.5px}.power-value-inline.svelte-zuda7{font-size:22px;font-weight:600;color:#66bb6a}.power-bar-container.svelte-zuda7{position:relative}.power-bar-bg.svelte-zuda7{width:100%;height:28px;background:#0000004d;border-radius:14px;overflow:hidden;position:relative}.power-bar-fill.svelte-zuda7{position:relative;height:100%;background:linear-gradient(90deg,#4caf50,#ffc107,#ff9800,#f44336);border-radius:14px;transition:width .3s ease}@keyframes svelte-zuda7-shimmer{0%{transform:translate(-100%)}to{transform:translate(100%)}}.swr-circle-compact.svelte-zuda7{width:90px;height:90px;border-radius:50%;background:radial-gradient(circle,rgba(79,195,247,.1),transparent);border:4px solid var(--swr-color);display:flex;flex-direction:column;align-items:center;justify-content:center;box-shadow:0 0 25px var(--swr-color);flex-shrink:0}.swr-value-compact.svelte-zuda7{font-size:28px;font-weight:700;color:var(--swr-color)}.swr-label-compact.svelte-zuda7{font-size:11px;color:#fff9;text-transform:uppercase;margin-top:2px}.capacitors.svelte-zuda7{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;padding:16px;background:#4fc3f70d;border-radius:6px;border:1px solid rgba(79,195,247,.2)}.cap-item.svelte-zuda7{display:flex;flex-direction:column;align-items:center;gap:4px}.cap-value.svelte-zuda7{font-size:20px;font-weight:300;color:var(--accent-cyan);text-shadow:0 0 15px rgba(79,195,247,.5)}.cap-label.svelte-zuda7{font-size:10px;color:var(--text-muted);text-transform:uppercase;letter-spacing:1px}.freq-display.svelte-zuda7{display:grid;grid-template-columns:1fr 1fr;gap:12px}.freq-item.svelte-zuda7{padding:10px;background:var(--bg-tertiary);border-radius:6px;display:flex;flex-direction:column;gap:4px}.freq-label.svelte-zuda7{font-size:9px;color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px}.freq-value.svelte-zuda7{font-size:16px;font-weight:300;color:var(--text-primary)}.freq-unit.svelte-zuda7{font-size:11px;color:var(--text-secondary);margin-left:2px}.controls.svelte-zuda7{display:grid;grid-template-columns:1fr 1fr;gap:8px}.control-btn.svelte-zuda7{padding:12px;border-radius:6px;font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;cursor:pointer;border:1px solid var(--border-color);background:var(--bg-tertiary);color:var(--text-primary);transition:all .2s}.control-btn.svelte-zuda7:hover{border-color:var(--accent-cyan);transform:translateY(-1px)}.control-btn.active.svelte-zuda7{background:var(--accent-cyan);border-color:var(--accent-cyan);color:#000;box-shadow:0 0 15px #4fc3f780}.tune-btn.svelte-zuda7{width:100%;padding:14px;border-radius:6px;font-size:13px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;cursor:pointer;border:none;background:linear-gradient(135deg,#f44336,#d32f2f);color:#fff;transition:all .2s;display:flex;align-items:center;justify-content:center;gap:8px;box-shadow:0 4px 12px #f4433666}.tune-btn.svelte-zuda7:hover{transform:translateY(-2px);box-shadow:0 6px 16px #f4433680}.tune-btn.svelte-zuda7:active{transform:translateY(0)}.tune-icon.svelte-zuda7{font-size:16px}.card.svelte-vlabwb{background:linear-gradient(135deg,#1a2332,#0f1923);border:1px solid #2d3748;border-radius:8px;padding:0;overflow:hidden;box-shadow:0 4px 6px #0000004d}.card-header.svelte-vlabwb{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;background:#4fc3f70d;border-bottom:1px solid #2d3748}h2.svelte-vlabwb{font-size:14px;font-weight:600;color:var(--accent-cyan);margin:0;letter-spacing:.5px}.status-dot.svelte-vlabwb{width:8px;height:8px;border-radius:50%;background:#4caf50;box-shadow:0 0 8px #4caf50}.status-dot.disconnected.svelte-vlabwb{background:#f44336;box-shadow:0 0 8px #f44336}.metrics.svelte-vlabwb{padding:16px;display:flex;flex-direction:column;gap:12px}.sources.svelte-vlabwb{display:grid;grid-template-columns:1fr 1fr;gap:8px}.source-item.svelte-vlabwb{padding:8px;background:var(--bg-tertiary);border-radius:4px;text-align:center}.source-label.svelte-vlabwb{font-size:12px;font-weight:600;color:var(--text-primary);text-transform:uppercase}.bands.svelte-vlabwb{display:grid;grid-template-columns:1fr 1fr;gap:8px}.band-item.svelte-vlabwb{padding:10px;background:#4fc3f71a;border:1px solid rgba(79,195,247,.3);border-radius:4px;text-align:center}.band-value.svelte-vlabwb{font-size:16px;font-weight:600;color:var(--accent-cyan)}.antennas.svelte-vlabwb{display:flex;flex-direction:column;gap:8px}.antenna-card.svelte-vlabwb{display:flex;justify-content:space-between;align-items:center;padding:12px;background:var(--bg-tertiary);border:2px solid var(--border-color);border-radius:6px;transition:all .3s}.antenna-card.active-a.svelte-vlabwb{background:#4caf5033;border-color:#4caf50;box-shadow:0 0 20px #4caf504d}.antenna-card.active-b.svelte-vlabwb{background:#2196f333;border-color:#2196f3;box-shadow:0 0 20px #2196f34d}.antenna-card.tx.svelte-vlabwb{background:#f4433633!important;border-color:#f44336!important;box-shadow:0 0 20px #f4433666!important}.antenna-name.svelte-vlabwb{font-size:14px;font-weight:500;color:var(--text-primary)}.antenna-ports.svelte-vlabwb{display:flex;gap:6px}.port-btn.svelte-vlabwb{width:36px;height:36px;border-radius:4px;font-size:14px;font-weight:600;cursor:pointer;border:1px solid var(--border-color);background:var(--bg-primary);color:var(--text-secondary);transition:all .2s}.port-btn.svelte-vlabwb:hover{border-color:var(--accent-cyan);transform:scale(1.05)}.port-btn.active.svelte-vlabwb{background:var(--accent-cyan);border-color:var(--accent-cyan);color:#000;box-shadow:0 0 12px #4fc3f780}.reboot-btn.svelte-vlabwb{width:100%;padding:12px;border-radius:6px;font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;cursor:pointer;border:none;background:linear-gradient(135deg,#ff9800,#f57c00);color:#fff;transition:all .2s;display:flex;align-items:center;justify-content:center;gap:6px;box-shadow:0 4px 12px #ff980066;margin-top:8px}.reboot-btn.svelte-vlabwb:hover{transform:translateY(-2px);box-shadow:0 6px 16px #ff980080}.reboot-btn.svelte-vlabwb:active{transform:translateY(0)}.reboot-icon.svelte-vlabwb{font-size:16px}.card.svelte-3omzwr{background:linear-gradient(135deg,#1a2332,#0f1923);border:1px solid #2d3748;border-radius:8px;padding:0;overflow:hidden;box-shadow:0 4px 6px #0000004d}.card-header.svelte-3omzwr{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;background:#4fc3f70d;border-bottom:1px solid #2d3748}h2.svelte-3omzwr{font-size:14px;font-weight:600;color:var(--accent-cyan);margin:0;letter-spacing:.5px}.status-dot.svelte-3omzwr{width:8px;height:8px;border-radius:50%;background:#4caf50;box-shadow:0 0 8px #4caf50}.status-dot.disconnected.svelte-3omzwr{background:#f44336;box-shadow:0 0 8px #f44336}.metrics.svelte-3omzwr{padding:16px;display:flex;flex-direction:column;gap:10px}.heading-controls-row.svelte-3omzwr{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:8px;background:#4fc3f71a;border-radius:6px;border:1px solid rgba(79,195,247,.3)}.heading-display-compact.svelte-3omzwr{flex:1;text-align:center}.controls-compact.svelte-3omzwr{display:flex;gap:6px}.btn-mini.svelte-3omzwr{width:36px;height:36px;border:2px solid rgba(79,195,247,.3);border-radius:6px;font-size:20px;font-weight:600;cursor:pointer;transition:all .2s;display:flex;align-items:center;justify-content:center;color:#ffffffb3;background:#4fc3f714}.btn-mini.svelte-3omzwr:hover{border-color:#4fc3f799;color:#ffffffe6;background:#4fc3f726;transform:translateY(-1px);box-shadow:0 0 15px #4fc3f74d}.btn-mini.ccw.svelte-3omzwr:hover{transform:translateY(-1px) rotate(-5deg)}.btn-mini.cw.svelte-3omzwr:hover{transform:translateY(-1px) rotate(5deg)}.btn-mini.stop.svelte-3omzwr:hover{border-color:#f44336;color:#f44336;background:#f4433626}.heading-label.svelte-3omzwr{font-size:10px;color:var(--text-muted);text-transform:uppercase;letter-spacing:1px;margin-bottom:4px}.heading-value.svelte-3omzwr{font-size:42px;font-weight:200;color:var(--accent-cyan);text-shadow:0 0 20px rgba(79,195,247,.5)}.target-indicator.svelte-3omzwr{font-size:24px;font-weight:400;color:#ffc107;margin-left:20px;text-shadow:0 0 15px rgba(255,193,7,.6);animation:svelte-3omzwr-targetPulse 1s ease-in-out infinite}@keyframes svelte-3omzwr-targetPulse{0%,to{opacity:.8}50%{opacity:1}}.map-container.svelte-3omzwr{display:flex;justify-content:center;padding:10px;background:#0a162899;border-radius:8px}.map-legend.svelte-3omzwr{display:flex;gap:20px;justify-content:center;padding:8px;margin-top:8px;background:#0a162866;border-radius:6px;font-size:12px;color:#ffffffb3}.legend-item.svelte-3omzwr{display:flex;align-items:center;gap:6px}.map-svg.svelte-3omzwr{width:100%;max-width:300px;height:auto}.clickable-compass.svelte-3omzwr{cursor:crosshair;-webkit-user-select:none;user-select:none;outline:none}.clickable-compass.svelte-3omzwr:hover{filter:brightness(1.1)}.cardinal.svelte-3omzwr{fill:var(--accent-cyan);font-size:16px;font-weight:700;text-shadow:0 0 10px rgba(79,195,247,.8)}.degree-label.svelte-3omzwr{fill:#4fc3f7b3;font-size:12px;font-weight:600}.card.svelte-t8himz.svelte-t8himz{background:linear-gradient(135deg,#1a2332,#0f1923);border:1px solid #2d3748;border-radius:8px;padding:0;overflow:hidden;box-shadow:0 4px 6px #0000004d}.card-header.svelte-t8himz.svelte-t8himz{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;background:#4fc3f70d;border-bottom:1px solid #2d3748;border-left:3px solid #4fc3f7}h2.svelte-t8himz.svelte-t8himz{margin:0;font-size:14px;font-weight:600;color:#4fc3f7;letter-spacing:.5px}h3.svelte-t8himz.svelte-t8himz{margin:0 0 12px;font-size:16px;font-weight:500;color:#4fc3f7}.status-dot.svelte-t8himz.svelte-t8himz{width:12px;height:12px;border-radius:50%;background:#4caf50;box-shadow:0 0 12px #4caf50cc;animation:svelte-t8himz-pulse 2s ease-in-out infinite}.status-dot.disconnected.svelte-t8himz.svelte-t8himz{background:#666;box-shadow:none;animation:none}@keyframes svelte-t8himz-pulse{0%,to{opacity:1}50%{opacity:.6}}.metrics.svelte-t8himz.svelte-t8himz{display:flex;flex-direction:column;gap:12px;padding:16px}.status-grid.svelte-t8himz.svelte-t8himz{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px}.status-item.svelte-t8himz.svelte-t8himz{background:#0f172a99;padding:16px;border-radius:12px;border:1px solid rgba(79,195,247,.2)}.status-label.svelte-t8himz.svelte-t8himz{font-size:12px;color:#fff9;text-transform:uppercase;letter-spacing:1px;margin-bottom:8px}.status-value.svelte-t8himz.svelte-t8himz{font-size:22px;font-weight:700;color:#4fc3f7;text-shadow:0 0 10px rgba(79,195,247,.5)}.status-value.freq.svelte-t8himz.svelte-t8himz{color:#66bb6a;font-size:22px;text-shadow:0 0 10px rgba(102,187,106,.5)}.status-value.band.svelte-t8himz.svelte-t8himz{color:#ffa726;text-shadow:0 0 10px rgba(255,167,38,.5)}.status-value.direction.svelte-t8himz.svelte-t8himz{color:#ab47bc;text-shadow:0 0 10px rgba(171,71,188,.5)}.control-section.svelte-t8himz.svelte-t8himz{background:#0f172a66;padding:12px;border-radius:12px;border:1px solid rgba(79,195,247,.2)}.control-section.compact.svelte-t8himz.svelte-t8himz{padding:16px}.auto-track-controls.svelte-t8himz.svelte-t8himz{display:flex;align-items:center;gap:20px;flex-wrap:wrap}.toggle-label.svelte-t8himz.svelte-t8himz{display:flex;align-items:center;gap:8px;cursor:pointer;color:#fff;font-size:14px}.toggle-label.svelte-t8himz input[type=checkbox].svelte-t8himz{width:20px;height:20px;cursor:pointer}.threshold-group.svelte-t8himz.svelte-t8himz{display:flex;align-items:center;gap:8px}.threshold-group.svelte-t8himz label.svelte-t8himz{font-size:14px;color:#fffc;white-space:nowrap}.direction-buttons.svelte-t8himz.svelte-t8himz{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-top:16px}.dir-btn.svelte-t8himz.svelte-t8himz{padding:12px 16px;border:2px solid rgba(79,195,247,.3);border-radius:8px;font-size:13px;font-weight:600;text-transform:uppercase;cursor:pointer;transition:all .2s;color:#ffffffb3;background:#4fc3f714;letter-spacing:.5px}.dir-btn.svelte-t8himz.svelte-t8himz:hover{border-color:#4fc3f799;color:#ffffffe6;background:#4fc3f726;transform:translateY(-1px)}.dir-btn.active.svelte-t8himz.svelte-t8himz{border-color:#4fc3f7;color:#4fc3f7;background:#4fc3f733;box-shadow:0 0 20px #4fc3f766;font-weight:700}.progress-section.svelte-t8himz.svelte-t8himz{background:#4fc3f71a;padding:16px;border-radius:8px;border:2px solid rgba(79,195,247,.3);margin-top:16px}.progress-section.svelte-t8himz h3.svelte-t8himz{margin:0 0 12px;font-size:14px;color:#4fc3f7;text-transform:uppercase;letter-spacing:.5px}.progress-bar.svelte-t8himz.svelte-t8himz{height:20px;background:#0f172a99;border-radius:10px;overflow:hidden;position:relative}.progress-fill.svelte-t8himz.svelte-t8himz{height:100%;background:linear-gradient(90deg,#4fc3f7,#03a9f4);transition:width .3s ease;border-radius:10px}.progress-text.svelte-t8himz.svelte-t8himz{text-align:center;font-size:13px;color:#fffc;margin-top:8px}.actions.svelte-t8himz.svelte-t8himz{display:flex;gap:12px}.app.svelte-a5dfm6.svelte-a5dfm6{min-height:100vh;display:flex;flex-direction:column}header.svelte-a5dfm6.svelte-a5dfm6{background:linear-gradient(135deg,#1a1a2e,#16213e,#0f3460);padding:8px 24px;display:flex;justify-content:space-between;align-items:center;box-shadow:0 4px 20px #0006;border-bottom:1px solid rgba(79,195,247,.2);flex-wrap:wrap;gap:16px}.header-left.svelte-a5dfm6.svelte-a5dfm6{display:flex;align-items:center;gap:16px}h1.svelte-a5dfm6.svelte-a5dfm6{font-size:24px;font-weight:500;margin:0;color:#fff}.connection-status.svelte-a5dfm6.svelte-a5dfm6{display:flex;align-items:center;gap:8px;font-size:14px;padding:6px 12px;background:#0000004d;border-radius:16px}.header-center.svelte-a5dfm6.svelte-a5dfm6{flex:1;display:flex;justify-content:center}.solar-info.svelte-a5dfm6.svelte-a5dfm6{display:flex;gap:20px;font-size:14px}.solar-item.svelte-a5dfm6.svelte-a5dfm6{color:#ffffffe6;font-size:13px;font-weight:600;letter-spacing:.3px}.solar-item.svelte-a5dfm6 .value.svelte-a5dfm6{font-weight:700;margin-left:4px;font-size:14px}.solar-item.svelte-a5dfm6:nth-child(1) .value.svelte-a5dfm6{color:#ffa726;text-shadow:0 0 8px rgba(255,167,38,.5)}.solar-item.svelte-a5dfm6:nth-child(2) .value.svelte-a5dfm6{color:#66bb6a;text-shadow:0 0 8px rgba(102,187,106,.5)}.solar-item.svelte-a5dfm6:nth-child(3) .value.svelte-a5dfm6{color:#42a5f5;text-shadow:0 0 8px rgba(66,165,245,.5)}.solar-item.svelte-a5dfm6:nth-child(4) .value.svelte-a5dfm6{color:#ef5350;text-shadow:0 0 8px rgba(239,83,80,.5)}.solar-item.svelte-a5dfm6:nth-child(5) .value.svelte-a5dfm6{color:#ab47bc;text-shadow:0 0 8px rgba(171,71,188,.5)}.header-right.svelte-a5dfm6.svelte-a5dfm6{display:flex;gap:20px;align-items:center}.weather-info.svelte-a5dfm6.svelte-a5dfm6{display:flex;gap:12px;font-size:14px;color:#ffffffe6}.clock.svelte-a5dfm6.svelte-a5dfm6{display:flex;flex-direction:column;align-items:flex-end}.time.svelte-a5dfm6.svelte-a5dfm6{font-size:18px;font-weight:500;color:#fff}.date.svelte-a5dfm6.svelte-a5dfm6{font-size:12px;color:#ffffffb3;padding-top:0}main.svelte-a5dfm6.svelte-a5dfm6{flex:1;padding:24px;overflow-y:auto}.dashboard-grid.svelte-a5dfm6.svelte-a5dfm6{display:flex;flex-direction:column;gap:24px;max-width:1800px;margin:0 auto}.row.svelte-a5dfm6.svelte-a5dfm6{display:flex;gap:24px;flex-wrap:wrap}.row.svelte-a5dfm6>*{flex:1;min-width:300px}@media (max-width: 1200px){.row.svelte-a5dfm6.svelte-a5dfm6{flex-direction:column}}@media (max-width: 768px){header.svelte-a5dfm6.svelte-a5dfm6{flex-direction:column;align-items:flex-start}.header-center.svelte-a5dfm6.svelte-a5dfm6,.header-right.svelte-a5dfm6.svelte-a5dfm6{width:100%;justify-content:flex-start}.solar-info.svelte-a5dfm6.svelte-a5dfm6{flex-wrap:wrap}}:root{--bg-primary: #0a1628;--bg-secondary: #1a2332;--bg-tertiary: #243447;--bg-hover: #2a3f5f;--text-primary: #e0e6ed;--text-secondary: #a0aec0;--text-muted: #718096;--accent-cyan: #4fc3f7;--accent-blue: #2196f3;--accent-green: #4caf50;--accent-orange: #ff9800;--accent-red: #f44336;--accent-purple: #9c27b0;--accent-yellow: #ffc107;--border-color: #2d3748;--border-light: #374151;--card-shadow: 0 1px 3px rgba(0, 0, 0, .3);--card-radius: 6px;--header-height: 56px;--spacing-xs: 4px;--spacing-sm: 8px;--spacing-md: 12px;--spacing-lg: 16px;--spacing-xl: 20px}*{box-sizing:border-box;margin:0;padding:0}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background:var(--bg-primary);color:var(--text-primary);font-size:13px;line-height:1.4;overflow-x:hidden}.app{display:flex;flex-direction:column;height:100vh;overflow:hidden}header{height:var(--header-height);background:var(--bg-secondary);border-bottom:1px solid var(--border-color);display:flex;align-items:center;justify-content:space-between;padding:0 var(--spacing-lg);flex-shrink:0}.header-left{display:flex;align-items:center;gap:var(--spacing-lg)}.header-left h1{font-size:16px;font-weight:600;color:var(--accent-cyan);letter-spacing:.5px}.connection-status{display:flex;align-items:center;gap:var(--spacing-sm);font-size:12px;color:var(--text-secondary)}.status-indicator{width:8px;height:8px;border-radius:50%;background:var(--accent-red);transition:background .3s}.status-indicator.status-online{background:var(--accent-green);box-shadow:0 0 8px var(--accent-green)}.header-center{display:flex;gap:var(--spacing-xl)}.solar-info{display:flex;gap:var(--spacing-md);font-size:12px}.solar-item{color:var(--text-secondary)}.solar-item .value{color:var(--accent-cyan);font-weight:600;margin-left:var(--spacing-xs)}.header-right{display:flex;align-items:center;gap:var(--spacing-lg)}.weather-info{display:flex;gap:var(--spacing-md);font-size:12px;color:var(--text-secondary)}.clock{display:flex;flex-direction:column;align-items:flex-end;font-size:11px}.clock .time{font-size:14px;font-weight:600;color:var(--text-primary)}.clock .date{color:var(--text-secondary)}main{flex:1;overflow-y:auto;padding:var(--spacing-md)}.dashboard-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:var(--spacing-md);max-width:1800px;margin:0 auto}.card{background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:var(--card-radius);padding:var(--spacing-md);box-shadow:var(--card-shadow);transition:border-color .2s}.card:hover{border-color:var(--border-light)}.card h2{font-size:14px;font-weight:600;color:var(--accent-cyan);margin-bottom:var(--spacing-md);display:flex;align-items:center;gap:var(--spacing-sm);letter-spacing:.5px}.card h2:before{content:"";width:3px;height:14px;background:var(--accent-cyan);border-radius:2px}.status-dot{width:8px;height:8px;border-radius:50%;background:var(--accent-green)}.status-dot.disconnected{background:var(--accent-red)}.label{font-size:11px;color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px;margin-bottom:var(--spacing-xs)}.value{font-size:18px;font-weight:300;color:var(--text-primary)}button,.button{background:var(--bg-tertiary);color:var(--text-primary);border:1px solid var(--border-color);border-radius:4px;padding:var(--spacing-sm) var(--spacing-md);font-size:12px;font-weight:500;cursor:pointer;transition:all .2s;text-transform:uppercase;letter-spacing:.5px}button:hover,.button:hover{background:var(--bg-hover);border-color:var(--border-light)}button:active,.button:active{transform:scale(.98)}button.primary{background:var(--accent-cyan);border-color:var(--accent-cyan);color:#000}button.primary:hover{background:#29b6f6;border-color:#29b6f6}button.success{background:var(--accent-green);border-color:var(--accent-green);color:#fff}button.danger{background:var(--accent-red);border-color:var(--accent-red);color:#fff}button:disabled{opacity:.5;cursor:not-allowed}select{background:var(--bg-tertiary);color:var(--text-primary);border:1px solid var(--border-color);border-radius:4px;padding:var(--spacing-sm);font-size:12px;cursor:pointer;outline:none;transition:all .2s}select:hover{border-color:var(--border-light)}select:focus{border-color:var(--accent-cyan)}.badge{display:inline-block;padding:4px 10px;border-radius:12px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.5px}.badge.green{background:#4caf5033;color:var(--accent-green)}.badge.red{background:#f4433633;color:var(--accent-red)}.badge.orange{background:#ff980033;color:var(--accent-orange)}.badge.cyan{background:#4fc3f733;color:var(--accent-cyan)}.badge.purple{background:#9c27b033;color:var(--accent-purple)}.bar{width:100%;height:6px;background:var(--bg-tertiary);border-radius:3px;overflow:hidden;margin:var(--spacing-xs) 0}.bar-fill{height:100%;background:linear-gradient(90deg,var(--accent-green),var(--accent-orange),var(--accent-red));transition:width .3s ease;border-radius:3px}.scale{display:flex;justify-content:space-between;font-size:10px;color:var(--text-muted);margin-top:var(--spacing-xs)}.metrics{display:flex;flex-direction:column;gap:var(--spacing-md)}.metric{display:flex;flex-direction:column;gap:var(--spacing-xs)}.metric-row{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--spacing-md)}.metric.small{min-width:0}.metric-value{display:flex;justify-content:space-between;align-items:baseline;flex-wrap:wrap}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:var(--bg-primary)}::-webkit-scrollbar-thumb{background:var(--bg-tertiary);border-radius:4px}::-webkit-scrollbar-thumb:hover{background:var(--bg-hover)}@media (max-width: 1400px){.dashboard-grid{grid-template-columns:repeat(auto-fit,minmax(250px,1fr))}}@media (max-width: 768px){header{flex-direction:column;height:auto;padding:var(--spacing-sm);gap:var(--spacing-sm)}.dashboard-grid{grid-template-columns:1fr}.header-center{order:3;width:100%}} diff --git a/cmd/server/web/dist/assets/index-iLwnoiIw.js b/cmd/server/web/dist/assets/index-iLwnoiIw.js new file mode 100644 index 0000000..4cc1f27 --- /dev/null +++ b/cmd/server/web/dist/assets/index-iLwnoiIw.js @@ -0,0 +1,11 @@ +var ql=Object.defineProperty;var xl=(e,l,s)=>l in e?ql(e,l,{enumerable:!0,configurable:!0,writable:!0,value:s}):e[l]=s;var Wt=(e,l,s)=>xl(e,typeof l!="symbol"?l+"":l,s);(function(){const l=document.createElement("link").relList;if(l&&l.supports&&l.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))i(o);new MutationObserver(o=>{for(const r of o)if(r.type==="childList")for(const f of r.addedNodes)f.tagName==="LINK"&&f.rel==="modulepreload"&&i(f)}).observe(document,{childList:!0,subtree:!0});function s(o){const r={};return o.integrity&&(r.integrity=o.integrity),o.referrerPolicy&&(r.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?r.credentials="include":o.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function i(o){if(o.ep)return;o.ep=!0;const r=s(o);fetch(o.href,r)}})();function we(){}function Xl(e){return e()}function fl(){return Object.create(null)}function nt(e){e.forEach(Xl)}function Yl(e){return typeof e=="function"}function ot(e,l){return e!=e?l==l:e!==l||e&&typeof e=="object"||typeof e=="function"}function $l(e){return Object.keys(e).length===0}function n(e,l){e.appendChild(l)}function L(e,l,s){e.insertBefore(l,s||null)}function E(e){e.parentNode&&e.parentNode.removeChild(e)}function Dt(e,l){for(let s=0;se.removeEventListener(l,s,i)}function t(e,l,s){s==null?e.removeAttribute(l):e.getAttribute(l)!==s&&e.setAttribute(l,s)}function en(e){return Array.from(e.childNodes)}function R(e,l){l=""+l,e.data!==l&&(e.data=l)}function Pt(e,l){e.value=l??""}function ae(e,l,s,i){s==null?e.style.removeProperty(l):e.style.setProperty(l,s,"")}function It(e,l,s){for(let i=0;ie.indexOf(i)===-1?l.push(i):s.push(i)),s.forEach(i=>i()),kt=l}const Ot=new Set;let on;function ct(e,l){e&&e.i&&(Ot.delete(e),e.i(l))}function pt(e,l,s,i){if(e&&e.o){if(Ot.has(e))return;Ot.add(e),on.c.push(()=>{Ot.delete(e)}),e.o(l)}}function ut(e){return(e==null?void 0:e.length)!==void 0?e:Array.from(e)}function bt(e){e&&e.c()}function dt(e,l,s){const{fragment:i,after_update:o}=e.$$;i&&i.m(l,s),Nt(()=>{const r=e.$$.on_mount.map(Xl).filter(Yl);e.$$.on_destroy?e.$$.on_destroy.push(...r):nt(r),e.$$.on_mount=[]}),o.forEach(Nt)}function ft(e,l){const s=e.$$;s.fragment!==null&&(an(s.after_update),nt(s.on_destroy),s.fragment&&s.fragment.d(l),s.on_destroy=s.fragment=null,s.ctx=[])}function rn(e,l){e.$$.dirty[0]===-1&&(yt.push(e),nn(),e.$$.dirty.fill(0)),e.$$.dirty[l/31|0]|=1<{const h=g.length?g[0]:w;return c.ctx&&o(c.ctx[u],c.ctx[u]=h)&&(!c.skip_bound&&c.bound[u]&&c.bound[u](h),m&&rn(e,u)),w}):[],c.update(),m=!0,nt(c.before_update),c.fragment=i?i(c.ctx):!1,l.target){if(l.hydrate){const u=en(l.target);c.fragment&&c.fragment.l(u),u.forEach(E)}else c.fragment&&c.fragment.c();l.intro&&ct(e.$$.fragment),dt(e,l.target,l.anchor),Hl()}Ct(v)}class ht{constructor(){Wt(this,"$$");Wt(this,"$$set")}$destroy(){ft(this,1),this.$destroy=we}$on(l,s){if(!Yl(s))return we;const i=this.$$.callbacks[l]||(this.$$.callbacks[l]=[]);return i.push(s),()=>{const o=i.indexOf(s);o!==-1&&i.splice(o,1)}}$set(l){this.$$set&&!$l(l)&&(this.$$.skip_bound=!0,this.$$set(l),this.$$.skip_bound=!1)}}const cn="4";typeof window<"u"&&(window.__svelte||(window.__svelte={v:new Set})).v.add(cn);const _t=[];function Ut(e,l=we){let s;const i=new Set;function o(d){if(ot(e,d)&&(e=d,s)){const v=!_t.length;for(const c of i)c[1](),_t.push(c,e);if(v){for(let c=0;c<_t.length;c+=2)_t[c][0](_t[c+1]);_t.length=0}}}function r(d){o(d(e))}function f(d,v=we){const c=[d,v];return i.add(c),i.size===1&&(s=l(o,r)||we),d(e),()=>{i.delete(c),i.size===0&&s&&(s(),s=null)}}return{set:o,update:r,subscribe:f}}const jt=Ut(!1),Ql=Ut(null),dn=Ut(null);class fn{constructor(){this.ws=null,this.reconnectTimeout=null,this.reconnectDelay=3e3}connect(){const s=`${window.location.protocol==="https:"?"wss:":"ws:"}//${window.location.host}/ws`;try{this.ws=new WebSocket(s),this.ws.onopen=()=>{console.log("WebSocket connected"),jt.set(!0)},this.ws.onmessage=i=>{try{const o=JSON.parse(i.data);o.type==="update"&&(console.log("System status updated:",o.data),Ql.set(o.data),dn.set(new Date(o.timestamp)))}catch(o){console.error("Error parsing message:",o)}},this.ws.onerror=i=>{console.error("WebSocket error:",i)},this.ws.onclose=()=>{console.log("WebSocket disconnected"),jt.set(!1),this.scheduleReconnect()}}catch(i){console.error("Error creating WebSocket:",i),this.scheduleReconnect()}}scheduleReconnect(){this.reconnectTimeout&&clearTimeout(this.reconnectTimeout),this.reconnectTimeout=setTimeout(()=>{console.log("Attempting to reconnect..."),this.connect()},this.reconnectDelay)}send(l){this.ws&&this.ws.readyState===WebSocket.OPEN&&this.ws.send(JSON.stringify(l))}disconnect(){this.reconnectTimeout&&clearTimeout(this.reconnectTimeout),this.ws&&this.ws.close()}}const hl=new fn,un="/api";async function ke(e,l={}){try{const s=await fetch(`${un}${e}`,{...l,headers:{"Content-Type":"application/json",...l.headers}});if(!s.ok)throw new Error(`HTTP error! status: ${s.status}`);return await s.json()}catch(s){throw console.error("API request failed:",s),s}}const Oe={getStatus:()=>ke("/status"),getConfig:()=>ke("/config"),webswitch:{relayOn:e=>ke(`/webswitch/relay/on?relay=${e}`,{method:"POST"}),relayOff:e=>ke(`/webswitch/relay/off?relay=${e}`,{method:"POST"}),allOn:()=>ke("/webswitch/all/on",{method:"POST"}),allOff:()=>ke("/webswitch/all/off",{method:"POST"})},rotator:{move:(e,l)=>ke("/rotator/move",{method:"POST",body:JSON.stringify({rotator:e,azimuth:l})}),cw:e=>ke(`/rotator/cw?rotator=${e}`,{method:"POST"}),ccw:e=>ke(`/rotator/ccw?rotator=${e}`,{method:"POST"}),stop:()=>ke("/rotator/stop",{method:"POST"})},tuner:{setOperate:e=>ke("/tuner/operate",{method:"POST",body:JSON.stringify({value:e})}),setBypass:e=>ke("/tuner/bypass",{method:"POST",body:JSON.stringify({value:e})}),autoTune:()=>ke("/tuner/autotune",{method:"POST"})},antenna:{selectAntenna:(e,l)=>ke("/antenna/select",{method:"POST",body:JSON.stringify({port:e,antenna:l})}),deselectAntenna:(e,l)=>ke("/antenna/deselect",{method:"POST",body:JSON.stringify({port:e,antenna:l})}),reboot:()=>ke("/antenna/reboot",{method:"POST"})},power:{setFanMode:e=>ke("/power/fanmode",{method:"POST",body:JSON.stringify({mode:e})}),setOperate:e=>ke("/power/operate",{method:"POST",body:JSON.stringify({value:e})})},rotator:{setHeading:e=>ke("/rotator/heading",{method:"POST",body:JSON.stringify({heading:e})}),rotateCW:()=>ke("/rotator/cw",{method:"POST"}),rotateCCW:()=>ke("/rotator/ccw",{method:"POST"}),stop:()=>ke("/rotator/stop",{method:"POST"})},ultrabeam:{setFrequency:(e,l)=>ke("/ultrabeam/frequency",{method:"POST",body:JSON.stringify({frequency:e,direction:l})}),retract:()=>ke("/ultrabeam/retract",{method:"POST"}),setAutoTrack:(e,l)=>ke("/ultrabeam/autotrack",{method:"POST",body:JSON.stringify({enabled:e,threshold:l})}),setDirection:e=>ke("/ultrabeam/direction",{method:"POST",body:JSON.stringify({direction:e})})}};function vn(e){let l;return{c(){l=a("span"),l.textContent="Checking FlexRadio...",t(l,"class","no-signal svelte-h7ie36")},m(s,i){L(s,l,i)},p:we,d(s){s&&E(l)}}}function hn(e){let l;return{c(){l=a("span"),l.textContent="FlexRadio not connected",t(l,"class","no-signal svelte-h7ie36")},m(s,i){L(s,l,i)},p:we,d(s){s&&E(l)}}}function mn(e){let l;return{c(){l=a("div"),l.innerHTML=' TCP connected, radio off',t(l,"class","radio-status svelte-h7ie36")},m(s,i){L(s,l,i)},p:we,d(s){s&&E(l)}}}function pn(e){let l,s,i,o,r=(e[11]||"Radio is on")+"",f,d,v,c=e[9]&&ml(e),m=e[10]&&pl(e);return{c(){l=a("div"),s=a("span"),s.textContent="●",i=b(),o=a("span"),f=z(r),d=b(),c&&c.c(),v=b(),m&&m.c(),t(s,"class","radio-on-indicator svelte-h7ie36"),t(o,"class","radio-status-text svelte-h7ie36"),t(l,"class","radio-status svelte-h7ie36")},m(u,w){L(u,l,w),n(l,s),n(l,i),n(l,o),n(o,f),n(l,d),c&&c.m(l,null),n(l,v),m&&m.m(l,null)},p(u,w){w[0]&2048&&r!==(r=(u[11]||"Radio is on")+"")&&R(f,r),u[9]?c?c.p(u,w):(c=ml(u),c.c(),c.m(l,v)):c&&(c.d(1),c=null),u[10]?m?m.p(u,w):(m=pl(u),m.c(),m.m(l,null)):m&&(m.d(1),m=null)},d(u){u&&E(l),c&&c.d(),m&&m.d()}}}function bn(e){let l,s,i,o,r,f,d=e[9]&&bl(e),v=e[10]&&gl(e);return{c(){l=a("div"),s=a("span"),s.textContent="●",i=b(),o=a("span"),o.textContent="Slice active, waiting for frequency...",r=b(),d&&d.c(),f=b(),v&&v.c(),t(s,"class","radio-on-indicator svelte-h7ie36"),t(o,"class","radio-status-text svelte-h7ie36"),t(l,"class","radio-status svelte-h7ie36")},m(c,m){L(c,l,m),n(l,s),n(l,i),n(l,o),n(l,r),d&&d.m(l,null),n(l,f),v&&v.m(l,null)},p(c,m){c[9]?d?d.p(c,m):(d=bl(c),d.c(),d.m(l,f)):d&&(d.d(1),d=null),c[10]?v?v.p(c,m):(v=gl(c),v.c(),v.m(l,null)):v&&(v.d(1),v=null)},d(c){c&&E(l),d&&d.d(),v&&v.d()}}}function gn(e){let l,s,i=Cl(e[3])+"",o,r,f,d,v,c,m,u=e[4]&&wl(e),w=e[25]&&_l(e),g=e[24]&&yl();return{c(){l=a("div"),s=a("span"),o=z(i),r=b(),f=a("span"),f.textContent="MHz",d=b(),u&&u.c(),v=b(),w&&w.c(),c=b(),g&&g.c(),m=At(),t(s,"class","frequency svelte-h7ie36"),ae(s,"--band-color",e[22]),t(f,"class","unit svelte-h7ie36"),t(l,"class","frequency-display svelte-h7ie36")},m(h,k){L(h,l,k),n(l,s),n(s,o),n(l,r),n(l,f),L(h,d,k),u&&u.m(h,k),L(h,v,k),w&&w.m(h,k),L(h,c,k),g&&g.m(h,k),L(h,m,k)},p(h,k){k[0]&8&&i!==(i=Cl(h[3])+"")&&R(o,i),k[0]&4194304&&ae(s,"--band-color",h[22]),h[4]?u?u.p(h,k):(u=wl(h),u.c(),u.m(v.parentNode,v)):u&&(u.d(1),u=null),h[25]?w?w.p(h,k):(w=_l(h),w.c(),w.m(c.parentNode,c)):w&&(w.d(1),w=null),h[24]?g||(g=yl(),g.c(),g.m(m.parentNode,m)):g&&(g.d(1),g=null)},d(h){h&&(E(l),E(d),E(v),E(c),E(m)),u&&u.d(h),w&&w.d(h),g&&g.d(h)}}}function ml(e){let l,s;return{c(){l=a("span"),s=z(e[9]),t(l,"class","model-badge svelte-h7ie36")},m(i,o){L(i,l,o),n(l,s)},p(i,o){o[0]&512&&R(s,i[9])},d(i){i&&E(l)}}}function pl(e){let l,s;return{c(){l=a("span"),s=z(e[10]),t(l,"class","callsign-badge svelte-h7ie36")},m(i,o){L(i,l,o),n(l,s)},p(i,o){o[0]&1024&&R(s,i[10])},d(i){i&&E(l)}}}function bl(e){let l,s;return{c(){l=a("span"),s=z(e[9]),t(l,"class","model-badge svelte-h7ie36")},m(i,o){L(i,l,o),n(l,s)},p(i,o){o[0]&512&&R(s,i[9])},d(i){i&&E(l)}}}function gl(e){let l,s;return{c(){l=a("span"),s=z(e[10]),t(l,"class","callsign-badge svelte-h7ie36")},m(i,o){L(i,l,o),n(l,s)},p(i,o){o[0]&1024&&R(s,i[10])},d(i){i&&E(l)}}}function wl(e){let l,s;return{c(){l=a("span"),s=z(e[4]),t(l,"class","band-badge svelte-h7ie36"),ae(l,"background-color",e[22])},m(i,o){L(i,l,o),n(l,s)},p(i,o){o[0]&16&&R(s,i[4]),o[0]&4194304&&ae(l,"background-color",i[22])},d(i){i&&E(l)}}}function _l(e){let l,s;return{c(){l=a("span"),s=z(e[25]),t(l,"class","mode-badge svelte-h7ie36")},m(i,o){L(i,l,o),n(l,s)},p(i,o){o[0]&33554432&&R(s,i[25])},d(i){i&&E(l)}}}function yl(e){let l;return{c(){l=a("span"),l.textContent="TX",t(l,"class","tx-indicator svelte-h7ie36")},m(s,i){L(s,l,i)},d(s){s&&E(l)}}}function wn(e){let l;return{c(){l=a("span"),l.textContent="📍 Position not set",t(l,"class","no-location svelte-h7ie36")},m(s,i){L(s,l,i)},p:we,d(s){s&&E(l)}}}function _n(e){let l,s,i,o,r,f,d,v,c=Ft(e[12])+"",m,u,w,g,h,k,y,M,T,p=Ft(e[13])+"",C,A,S;function F(O,X){if(O[14])return kn;if(O[16])return yn}let _=F(e),I=_&&_(e);return{c(){l=a("div"),s=a("span"),i=D("svg"),o=D("line"),r=D("path"),f=D("path"),d=D("path"),v=b(),m=z(c),u=b(),w=a("span"),g=D("svg"),h=D("line"),k=D("path"),y=D("path"),M=D("path"),T=b(),C=z(p),A=b(),I&&I.c(),S=At(),t(o,"x1","2"),t(o,"y1","18"),t(o,"x2","22"),t(o,"y2","18"),t(o,"stroke","currentColor"),t(o,"stroke-width","1.5"),t(o,"opacity","0.5"),t(r,"d","M12 18 A6 6 0 0 1 12 6 A6 6 0 0 1 12 18"),t(r,"fill","#fbbf24"),t(f,"d","M12 2v3M5.6 5.6l2.1 2.1M2 12h3M19 12h3M18.4 5.6l-2.1 2.1"),t(f,"stroke","#fbbf24"),t(f,"stroke-width","2"),t(f,"stroke-linecap","round"),t(d,"d","M12 14l-3 3M12 14l3 3M12 14v5"),t(d,"stroke","#22c55e"),t(d,"stroke-width","2"),t(d,"stroke-linecap","round"),t(d,"fill","none"),t(i,"class","sun-icon sunrise-icon svelte-h7ie36"),t(i,"width","18"),t(i,"height","18"),t(i,"viewBox","0 0 24 24"),t(s,"class","sun-item svelte-h7ie36"),t(s,"title","Sunrise"),t(h,"x1","2"),t(h,"y1","18"),t(h,"x2","22"),t(h,"y2","18"),t(h,"stroke","currentColor"),t(h,"stroke-width","1.5"),t(h,"opacity","0.5"),t(k,"d","M12 18 A6 6 0 0 1 12 6 A6 6 0 0 1 12 18"),t(k,"fill","#f97316"),t(y,"d","M12 2v3M5.6 5.6l2.1 2.1M2 12h3M19 12h3M18.4 5.6l-2.1 2.1"),t(y,"stroke","#f97316"),t(y,"stroke-width","2"),t(y,"stroke-linecap","round"),t(y,"opacity","0.7"),t(M,"d","M12 22l-3-3M12 22l3-3M12 22v-5"),t(M,"stroke","#ef4444"),t(M,"stroke-width","2"),t(M,"stroke-linecap","round"),t(M,"fill","none"),t(g,"class","sun-icon sunset-icon svelte-h7ie36"),t(g,"width","18"),t(g,"height","18"),t(g,"viewBox","0 0 24 24"),t(w,"class","sun-item svelte-h7ie36"),t(w,"title","Sunset"),t(l,"class","sun-times svelte-h7ie36")},m(O,X){L(O,l,X),n(l,s),n(s,i),n(i,o),n(i,r),n(i,f),n(i,d),n(s,v),n(s,m),n(l,u),n(l,w),n(w,g),n(g,h),n(g,k),n(g,y),n(g,M),n(w,T),n(w,C),L(O,A,X),I&&I.m(O,X),L(O,S,X)},p(O,X){X[0]&4096&&c!==(c=Ft(O[12])+"")&&R(m,c),X[0]&8192&&p!==(p=Ft(O[13])+"")&&R(C,p),_===(_=F(O))&&I?I.p(O,X):(I&&I.d(1),I=_&&_(O),I&&(I.c(),I.m(S.parentNode,S)))},d(O){O&&(E(l),E(A),E(S)),I&&I.d(O)}}}function yn(e){let l,s;return{c(){l=a("span"),s=z(e[16]),t(l,"class","next-event svelte-h7ie36")},m(i,o){L(i,l,o),n(l,s)},p(i,o){o[0]&65536&&R(s,i[16])},d(i){i&&E(l)}}}function kn(e){let l;return{c(){l=a("span"),l.textContent="✨ Grayline",t(l,"class","grayline-badge svelte-h7ie36"),W(l,"sunrise",e[15]==="sunrise"),W(l,"sunset",e[15]==="sunset")},m(s,i){L(s,l,i)},p(s,i){i[0]&32768&&W(l,"sunrise",s[15]==="sunrise"),i[0]&32768&&W(l,"sunset",s[15]==="sunset")},d(s){s&&E(l)}}}function kl(e){let l,s,i,o,r,f,d=e[8].toFixed(0)+"",v,c;return{c(){l=a("div"),s=a("span"),s.textContent="⚠️",i=b(),o=a("span"),r=z("Vent: "),f=a("strong"),v=z(d),c=z(" km/h"),t(s,"class","alert-icon svelte-h7ie36"),t(f,"class","svelte-h7ie36"),t(o,"class","alert-text svelte-h7ie36"),t(l,"class","alert wind-alert svelte-h7ie36")},m(m,u){L(m,l,u),n(l,s),n(l,i),n(l,o),n(o,r),n(o,f),n(f,v),n(f,c)},p(m,u){u[0]&256&&d!==(d=m[8].toFixed(0)+"")&&R(v,d)},d(m){m&&E(l)}}}function Ml(e){let l,s,i,o,r,f,d=e[7].toFixed(0)+"",v,c;return{c(){l=a("div"),s=a("span"),s.textContent="🌪️",i=b(),o=a("span"),r=z("Rafales: "),f=a("strong"),v=z(d),c=z(" km/h"),t(s,"class","alert-icon svelte-h7ie36"),t(f,"class","svelte-h7ie36"),t(o,"class","alert-text svelte-h7ie36"),t(l,"class","alert gust-alert svelte-h7ie36")},m(m,u){L(m,l,u),n(l,s),n(l,i),n(l,o),n(o,r),n(o,f),n(f,v),n(f,c)},p(m,u){u[0]&128&&d!==(d=m[7].toFixed(0)+"")&&R(v,d)},d(m){m&&E(l)}}}function zl(e){let l;return{c(){l=a("div"),l.innerHTML=' Weather OK',t(l,"class","status-ok svelte-h7ie36")},m(s,i){L(s,l,i)},d(s){s&&E(l)}}}function Mn(e){let l,s,i,o,r,f,d,v,c,m,u,w,g,h;function k(_,I){return _[21]?gn:_[19]?bn:_[20]?pn:_[17]?mn:_[18]?hn:vn}let y=k(e),M=y(e);function T(_,I){return _[0]&&_[1]?_n:wn}let p=T(e),C=p(e),A=e[6]&&kl(e),S=e[5]&&Ml(e),F=!e[23]&&zl();return{c(){l=a("div"),s=a("div"),i=a("div"),i.textContent="📻",o=b(),M.c(),r=b(),f=a("div"),d=b(),v=a("div"),C.c(),c=b(),m=a("div"),u=b(),w=a("div"),A&&A.c(),g=b(),S&&S.c(),h=b(),F&&F.c(),t(i,"class","flex-icon svelte-h7ie36"),W(i,"connected",e[2]),W(i,"disconnected",!e[2]),t(s,"class","flex-section svelte-h7ie36"),t(f,"class","separator svelte-h7ie36"),t(v,"class","grayline-section svelte-h7ie36"),t(m,"class","separator svelte-h7ie36"),t(w,"class","weather-section svelte-h7ie36"),t(l,"class","status-banner svelte-h7ie36"),W(l,"has-warning",e[23])},m(_,I){L(_,l,I),n(l,s),n(s,i),n(s,o),M.m(s,null),n(l,r),n(l,f),n(l,d),n(l,v),C.m(v,null),n(l,c),n(l,m),n(l,u),n(l,w),A&&A.m(w,null),n(w,g),S&&S.m(w,null),n(w,h),F&&F.m(w,null)},p(_,I){I[0]&4&&W(i,"connected",_[2]),I[0]&4&&W(i,"disconnected",!_[2]),y===(y=k(_))&&M?M.p(_,I):(M.d(1),M=y(_),M&&(M.c(),M.m(s,null))),p===(p=T(_))&&C?C.p(_,I):(C.d(1),C=p(_),C&&(C.c(),C.m(v,null))),_[6]?A?A.p(_,I):(A=kl(_),A.c(),A.m(w,g)):A&&(A.d(1),A=null),_[5]?S?S.p(_,I):(S=Ml(_),S.c(),S.m(w,h)):S&&(S.d(1),S=null),_[23]?F&&(F.d(1),F=null):F||(F=zl(),F.c(),F.m(w,null)),I[0]&8388608&&W(l,"has-warning",_[23])},i:we,o:we,d(_){_&&E(l),M.d(),C.d(),A&&A.d(),S&&S.d(),F&&F.d()}}}function Tl(e,l,s){const i=Math.PI/180,o=zn(e),r=2*Math.PI/365*(o-1+(e.getHours()-12)/24),f=229.18*(75e-6+.001868*Math.cos(r)-.032077*Math.sin(r)-.014615*Math.cos(2*r)-.040849*Math.sin(2*r)),d=.006918-.399912*Math.cos(r)+.070257*Math.sin(r)-.006758*Math.cos(2*r)+907e-6*Math.sin(2*r)-.002697*Math.cos(3*r)+.00148*Math.sin(3*r),v=l*i,c=90.833*i,m=Math.cos(c)/(Math.cos(v)*Math.cos(d))-Math.tan(v)*Math.tan(d);if(m>1||m<-1)return{sunrise:null,sunset:null};const u=Math.acos(m)/i,w=720-4*(s+u)-f,g=720-4*(s-u)-f,h=new Date(e);h.setUTCHours(0,0,0,0),h.setUTCMinutes(w);const k=new Date(e);return k.setUTCHours(0,0,0,0),k.setUTCMinutes(g),{sunrise:h,sunset:k}}function zn(e){const l=new Date(e.getFullYear(),0,0),s=e-l,i=1e3*60*60*24;return Math.floor(s/i)}function Ft(e){return e?e.toLocaleTimeString("fr-FR",{hour:"2-digit",minute:"2-digit"}):"--:--"}function Cl(e){return!e||e===0?"---":e<10?e.toFixed(4):e<100?e.toFixed(3):e.toFixed(2)}function Tn(e){return!e||e===0?"":e>=1.8&&e<=2?"160M":e>=3.5&&e<=4?"80M":e>=5.3&&e<=5.4?"60M":e>=7&&e<=7.3?"40M":e>=10.1&&e<=10.15?"30M":e>=14&&e<=14.35?"20M":e>=18.068&&e<=18.168?"17M":e>=21&&e<=21.45?"15M":e>=24.89&&e<=24.99?"12M":e>=28&&e<=29.7?"10M":e>=50&&e<=54?"6M":e>=144&&e<=148?"2M":e>=430&&e<=440?"70CM":""}function Cn(e){return{"160M":"#9c27b0","80M":"#673ab7","60M":"#3f51b5","40M":"#2196f3","30M":"#00bcd4","20M":"#009688","17M":"#4caf50","15M":"#8bc34a","12M":"#cddc39","10M":"#ffeb3b","6M":"#ff9800","2M":"#ff5722","70CM":"#f44336"}[e]||"#4fc3f7"}function Sn(e,l,s){let i,o,r,f,d,v,c,m,u,w,g,h,k,y,M,T,p,C,A,S,F,{flexradio:_=null}=l,{weather:I=null}=l,{latitude:O=null}=l,{longitude:X=null}=l,{windWarningThreshold:$=30}=l,{gustWarningThreshold:re=50}=l,{graylineWindow:Q=30}=l,P=null,le=null,J=!1,N="",B="",se=new Date,H;Zl(()=>{fe(),H=setInterval(()=>{se=new Date,Me(),ee()},1e4)}),Kl(()=>{H&&clearInterval(H)});function fe(){if(!O||!X)return;const K=Tl(new Date,O,X);s(12,P=K.sunrise),s(13,le=K.sunset),Me(),ee()}function Me(){if(!P||!le){s(14,J=!1);return}const Z=se.getTime(),K=Q*60*1e3,ie=Math.abs(Z-P.getTime())<=K,ce=Math.abs(Z-le.getTime())<=K;s(14,J=ie||ce),s(15,N=ie?"sunrise":ce?"sunset":"")}function ee(){if(!P||!le){s(16,B="");return}const Z=se.getTime();let K=null,ie="";if(Z0?s(16,B=`${ie} in ${oe}h${ue.toString().padStart(2,"0")}m`):s(16,B=`${ie} in ${ue}m`)}}return e.$$set=Z=>{"flexradio"in Z&&s(26,_=Z.flexradio),"weather"in Z&&s(27,I=Z.weather),"latitude"in Z&&s(0,O=Z.latitude),"longitude"in Z&&s(1,X=Z.longitude),"windWarningThreshold"in Z&&s(28,$=Z.windWarningThreshold),"gustWarningThreshold"in Z&&s(29,re=Z.gustWarningThreshold),"graylineWindow"in Z&&s(30,Q=Z.graylineWindow)},e.$$.update=()=>{e.$$.dirty[0]&67108864&&s(3,i=(_==null?void 0:_.frequency)||0),e.$$.dirty[0]&67108864&&s(25,o=(_==null?void 0:_.mode)||""),e.$$.dirty[0]&67108864&&s(24,r=(_==null?void 0:_.tx)||!1),e.$$.dirty[0]&67108864&&s(2,f=(_==null?void 0:_.connected)||!1),e.$$.dirty[0]&67108864&&s(31,d=(_==null?void 0:_.radio_on)||!1),e.$$.dirty[0]&67108864&&s(11,v=(_==null?void 0:_.radio_info)||""),e.$$.dirty[0]&67108864&&s(10,c=(_==null?void 0:_.callsign)||""),e.$$.dirty[0]&67108864&&s(9,m=(_==null?void 0:_.model)||""),e.$$.dirty[0]&67108864&&s(32,u=(_==null?void 0:_.active_slices)||0),e.$$.dirty[0]&3&&O&&X&&fe(),e.$$.dirty[0]&3596|e.$$.dirty[1]&3&&console.log("FlexRadio status:",{connected:f,radioOn:d,frequency:i,activeSlices:u,radioInfo:v,callsign:c,model:m}),e.$$.dirty[0]&134217728&&s(8,w=(I==null?void 0:I.wind_speed)||0),e.$$.dirty[0]&134217728&&s(7,g=(I==null?void 0:I.wind_gust)||0),e.$$.dirty[0]&268435712&&s(6,h=w>=$),e.$$.dirty[0]&536871040&&s(5,k=g>=re),e.$$.dirty[0]&96&&s(23,y=h||k),e.$$.dirty[0]&8&&s(4,M=Tn(i)),e.$$.dirty[0]&16&&s(22,T=Cn(M)),e.$$.dirty[0]&8|e.$$.dirty[1]&1&&s(21,p=d&&i>0),e.$$.dirty[0]&8|e.$$.dirty[1]&3&&s(20,C=d&&i===0&&u===0),e.$$.dirty[0]&8|e.$$.dirty[1]&3&&s(19,A=d&&i===0&&u>0),e.$$.dirty[0]&4&&s(18,S=!f),e.$$.dirty[0]&4|e.$$.dirty[1]&1&&s(17,F=f&&!d)},[O,X,f,i,M,k,h,g,w,m,c,v,P,le,J,N,B,F,S,A,C,p,T,y,r,o,_,I,$,re,Q,d,u]}class Fn extends ht{constructor(l){super(),vt(this,l,Sn,Mn,ot,{flexradio:26,weather:27,latitude:0,longitude:1,windWarningThreshold:28,gustWarningThreshold:29,graylineWindow:30},null,[-1,-1])}}function Sl(e,l,s){var f;const i=e.slice();i[10]=l[s];const o=i[1].find(function(...v){return e[9](i[10],...v)});i[11]=o;const r=((f=i[11])==null?void 0:f.state)||!1;return i[12]=r,i}function Fl(e){let l,s,i,o,r,f,d=e[12]?"ON":"OFF",v,c,m,u,w,g,h,k;function y(){return e[8](e[10])}return{c(){l=a("div"),s=a("div"),i=a("div"),o=a("div"),o.textContent=`${e[3][e[10]]}`,r=b(),f=a("div"),v=z(d),c=b(),m=a("button"),u=a("div"),u.innerHTML='
',g=b(),t(o,"class","relay-name svelte-z2csmj"),t(f,"class","relay-status svelte-z2csmj"),t(i,"class","relay-details svelte-z2csmj"),t(s,"class","relay-info svelte-z2csmj"),t(u,"class","toggle-track svelte-z2csmj"),t(m,"class","relay-toggle svelte-z2csmj"),m.disabled=w=e[0][e[10]],W(m,"active",e[12]),W(m,"loading",e[0][e[10]]),t(l,"class","relay-card svelte-z2csmj"),W(l,"relay-on",e[12])},m(M,T){L(M,l,T),n(l,s),n(s,i),n(i,o),n(i,r),n(i,f),n(f,v),n(l,c),n(l,m),n(m,u),n(l,g),h||(k=Ce(m,"click",y),h=!0)},p(M,T){e=M,T&2&&d!==(d=e[12]?"ON":"OFF")&&R(v,d),T&1&&w!==(w=e[0][e[10]])&&(m.disabled=w),T&2&&W(m,"active",e[12]),T&1&&W(m,"loading",e[0][e[10]]),T&2&&W(l,"relay-on",e[12])},d(M){M&&E(l),h=!1,k()}}}function Pn(e){let l,s,i,o,r,f,d,v,c,m,u,w,g,h,k,y=ut([1,2,3,4,5]),M=[];for(let T=0;T<5;T+=1)M[T]=Fl(Sl(e,y,T));return{c(){l=a("div"),s=a("div"),i=a("h2"),i.textContent="WebSwitch",o=b(),r=a("span"),f=b(),d=a("div"),v=a("div");for(let T=0;T<5;T+=1)M[T].c();c=b(),m=a("div"),u=a("button"),u.innerHTML=` + ALL ON`,w=b(),g=a("button"),g.innerHTML=` + ALL OFF`,t(i,"class","svelte-z2csmj"),t(r,"class","status-dot svelte-z2csmj"),W(r,"disconnected",!e[2]),t(s,"class","card-header svelte-z2csmj"),t(v,"class","relays svelte-z2csmj"),t(u,"class","control-btn all-on svelte-z2csmj"),t(g,"class","control-btn all-off svelte-z2csmj"),t(m,"class","controls svelte-z2csmj"),t(d,"class","metrics svelte-z2csmj"),t(l,"class","card svelte-z2csmj")},m(T,p){L(T,l,p),n(l,s),n(s,i),n(s,o),n(s,r),n(l,f),n(l,d),n(d,v);for(let C=0;C<5;C+=1)M[C]&&M[C].m(v,null);n(d,c),n(d,m),n(m,u),n(m,w),n(m,g),h||(k=[Ce(u,"click",e[5]),Ce(g,"click",e[6])],h=!0)},p(T,[p]){if(p&4&&W(r,"disconnected",!T[2]),p&27){y=ut([1,2,3,4,5]);let C;for(C=0;C<5;C+=1){const A=Sl(T,y,C);M[C]?M[C].p(A,p):(M[C]=Fl(A),M[C].c(),M[C].m(v,null))}for(;C<5;C+=1)M[C].d(1)}},i:we,o:we,d(T){T&&E(l),Dt(M,T),h=!1,nt(k)}}}function On(e,l,s){let i,o,{status:r}=l;const f={1:"Power Supply",2:"PGXL",3:"TGXL",4:"Flex Radio Start",5:"Reserve"};let d={};async function v(g){const h=i.find(y=>y.number===g),k=(h==null?void 0:h.state)||!1;s(0,d[g]=!0,d);try{k?await Oe.webswitch.relayOff(g):await Oe.webswitch.relayOn(g)}catch(y){console.error("Failed to toggle relay:",y),alert("Failed to control relay")}finally{s(0,d[g]=!1,d)}}async function c(){try{await Oe.webswitch.allOn()}catch(g){console.error("Failed to turn all on:",g)}}async function m(){try{await Oe.webswitch.allOff()}catch(g){console.error("Failed to turn all off:",g)}}const u=g=>v(g),w=(g,h)=>h.number===g;return e.$$set=g=>{"status"in g&&s(7,r=g.status)},e.$$.update=()=>{e.$$.dirty&128&&s(1,i=(r==null?void 0:r.relays)||[]),e.$$.dirty&128&&s(2,o=(r==null?void 0:r.connected)||!1)},[d,i,o,f,v,c,m,r,u,w]}class An extends ht{constructor(l){super(),vt(this,l,On,Pn,ot,{status:7})}}function In(e){let l,s,i,o,r,f,d,v,c,m,u,w,g,h,k,y,M,T=e[1].toFixed(0)+"",p,C,A,S,F,_,I,O,X,$=e[2].toFixed(2)+"",re,Q,P,le,J,N,B,se=e[3].toFixed(1)+"",H,fe,Me,ee,Z,K,ie,ce,oe,ue,ne=e[12].toFixed(1)+"",Ae,Te,Ie,Ne,Pe,Se,te,ye,q,Y,x,G,de,V=e[15].toFixed(0)+"",ve,j,be,he,Ee,Ve,Ze=e[14].toFixed(1)+"",We,Xe,Be,Le,$e,De,qe=e[13].toFixed(1)+"",Ke,xe,Ge,me,ze,et,mt,rt,st,Re,He,Mt,Qe,gt,tt,it,je,lt,Ye,Ue,at,Je,Fe,zt;return{c(){l=a("div"),s=a("div"),i=a("h2"),i.textContent="Power Genius XL",o=b(),r=a("div"),f=a("button"),d=z(e[7]),v=b(),c=a("span"),m=b(),u=a("div"),w=a("div"),g=a("div"),h=a("div"),k=a("span"),k.textContent="Power",y=b(),M=a("span"),p=z(T),C=z(" W"),A=b(),S=a("div"),F=a("div"),_=a("div"),I=b(),O=a("div"),X=a("div"),re=z($),Q=b(),P=a("div"),P.textContent="SWR",le=b(),J=a("div"),N=a("div"),B=a("div"),H=z(se),fe=z("°"),Me=b(),ee=a("div"),ee.textContent="PA Temp",Z=b(),K=a("div"),ie=a("div"),ce=b(),oe=a("div"),ue=a("div"),Ae=z(ne),Te=z("°"),Ie=b(),Ne=a("div"),Ne.textContent="HL Temp",Pe=b(),Se=a("div"),te=a("div"),ye=b(),q=a("div"),Y=a("div"),x=a("div"),x.textContent="VAC",G=b(),de=a("div"),ve=z(V),j=b(),be=a("div"),he=a("div"),he.textContent="VDD",Ee=b(),Ve=a("div"),We=z(Ze),Xe=b(),Be=a("div"),Le=a("div"),Le.textContent="ID Peak",$e=b(),De=a("div"),Ke=z(qe),xe=b(),Ge=a("div"),me=a("div"),ze=a("span"),ze.textContent="Band A",et=b(),mt=a("span"),rt=z(e[10]),st=b(),Re=a("div"),He=a("span"),He.textContent="Band B",Mt=b(),Qe=a("span"),gt=z(e[9]),tt=b(),it=a("div"),je=a("label"),je.textContent="Fan Mode",lt=b(),Ye=a("select"),Ue=a("option"),Ue.textContent="Standard",at=a("option"),at.textContent="Contest",Je=a("option"),Je.textContent="Broadcast",t(i,"class","svelte-vwcbgz"),t(f,"class","state-badge svelte-vwcbgz"),W(f,"idle",e[0]==="IDLE"),W(f,"transmit",e[0].includes("TRANSMIT")),t(c,"class","status-dot svelte-vwcbgz"),W(c,"disconnected",!e[8]),t(r,"class","header-right svelte-vwcbgz"),t(s,"class","card-header svelte-vwcbgz"),t(k,"class","power-label-inline svelte-vwcbgz"),t(M,"class","power-value-inline svelte-vwcbgz"),t(h,"class","power-header svelte-vwcbgz"),t(_,"class","power-bar-fill svelte-vwcbgz"),ae(_,"width",e[4]+"%"),t(F,"class","power-bar-bg svelte-vwcbgz"),t(S,"class","power-bar-container svelte-vwcbgz"),t(g,"class","power-section svelte-vwcbgz"),t(X,"class","swr-value-compact svelte-vwcbgz"),t(P,"class","swr-label-compact svelte-vwcbgz"),t(O,"class","swr-circle-compact svelte-vwcbgz"),ae(O,"--swr-color",e[5]),t(w,"class","power-swr-row svelte-vwcbgz"),t(B,"class","temp-value svelte-vwcbgz"),ae(B,"color",e[6]),t(ee,"class","temp-label svelte-vwcbgz"),t(ie,"class","temp-mini-fill svelte-vwcbgz"),ae(ie,"width",e[3]/80*100+"%"),ae(ie,"background",e[6]),t(K,"class","temp-mini-bar svelte-vwcbgz"),t(N,"class","temp-item svelte-vwcbgz"),t(ue,"class","temp-value svelte-vwcbgz"),ae(ue,"color",e[6]),t(Ne,"class","temp-label svelte-vwcbgz"),t(te,"class","temp-mini-fill svelte-vwcbgz"),ae(te,"width",e[12]/80*100+"%"),ae(te,"background",e[6]),t(Se,"class","temp-mini-bar svelte-vwcbgz"),t(oe,"class","temp-item svelte-vwcbgz"),t(J,"class","temp-group svelte-vwcbgz"),t(x,"class","param-label svelte-vwcbgz"),t(de,"class","param-value svelte-vwcbgz"),t(Y,"class","param-box svelte-vwcbgz"),t(he,"class","param-label svelte-vwcbgz"),t(Ve,"class","param-value svelte-vwcbgz"),t(be,"class","param-box svelte-vwcbgz"),t(Le,"class","param-label svelte-vwcbgz"),t(De,"class","param-value svelte-vwcbgz"),t(Be,"class","param-box svelte-vwcbgz"),t(q,"class","params-grid svelte-vwcbgz"),t(ze,"class","band-label svelte-vwcbgz"),t(mt,"class","band-value svelte-vwcbgz"),t(me,"class","band-item svelte-vwcbgz"),t(He,"class","band-label svelte-vwcbgz"),t(Qe,"class","band-value svelte-vwcbgz"),t(Re,"class","band-item svelte-vwcbgz"),t(Ge,"class","band-display svelte-vwcbgz"),t(je,"for","fan-mode-select"),t(je,"class","control-label svelte-vwcbgz"),Ue.__value="STANDARD",Pt(Ue,Ue.__value),at.__value="CONTEST",Pt(at,at.__value),Je.__value="BROADCAST",Pt(Je,Je.__value),t(Ye,"id","fan-mode-select"),t(Ye,"class","svelte-vwcbgz"),t(it,"class","fan-control svelte-vwcbgz"),t(u,"class","metrics svelte-vwcbgz"),t(l,"class","card svelte-vwcbgz")},m(ge,_e){L(ge,l,_e),n(l,s),n(s,i),n(s,o),n(s,r),n(r,f),n(f,d),n(r,v),n(r,c),n(l,m),n(l,u),n(u,w),n(w,g),n(g,h),n(h,k),n(h,y),n(h,M),n(M,p),n(M,C),n(g,A),n(g,S),n(S,F),n(F,_),n(w,I),n(w,O),n(O,X),n(X,re),n(O,Q),n(O,P),n(u,le),n(u,J),n(J,N),n(N,B),n(B,H),n(B,fe),n(N,Me),n(N,ee),n(N,Z),n(N,K),n(K,ie),n(J,ce),n(J,oe),n(oe,ue),n(ue,Ae),n(ue,Te),n(oe,Ie),n(oe,Ne),n(oe,Pe),n(oe,Se),n(Se,te),n(u,ye),n(u,q),n(q,Y),n(Y,x),n(Y,G),n(Y,de),n(de,ve),n(q,j),n(q,be),n(be,he),n(be,Ee),n(be,Ve),n(Ve,We),n(q,Xe),n(q,Be),n(Be,Le),n(Be,$e),n(Be,De),n(De,Ke),n(u,xe),n(u,Ge),n(Ge,me),n(me,ze),n(me,et),n(me,mt),n(mt,rt),n(Ge,st),n(Ge,Re),n(Re,He),n(Re,Mt),n(Re,Qe),n(Qe,gt),n(u,tt),n(u,it),n(it,je),n(it,lt),n(it,Ye),n(Ye,Ue),n(Ye,at),n(Ye,Je),It(Ye,e[11]),Fe||(zt=[Ce(f,"click",e[17]),Ce(Ye,"change",e[19])],Fe=!0)},p(ge,[_e]){_e&128&&R(d,ge[7]),_e&1&&W(f,"idle",ge[0]==="IDLE"),_e&1&&W(f,"transmit",ge[0].includes("TRANSMIT")),_e&256&&W(c,"disconnected",!ge[8]),_e&2&&T!==(T=ge[1].toFixed(0)+"")&&R(p,T),_e&16&&ae(_,"width",ge[4]+"%"),_e&4&&$!==($=ge[2].toFixed(2)+"")&&R(re,$),_e&32&&ae(O,"--swr-color",ge[5]),_e&8&&se!==(se=ge[3].toFixed(1)+"")&&R(H,se),_e&64&&ae(B,"color",ge[6]),_e&8&&ae(ie,"width",ge[3]/80*100+"%"),_e&64&&ae(ie,"background",ge[6]),_e&4096&&ne!==(ne=ge[12].toFixed(1)+"")&&R(Ae,ne),_e&64&&ae(ue,"color",ge[6]),_e&4096&&ae(te,"width",ge[12]/80*100+"%"),_e&64&&ae(te,"background",ge[6]),_e&32768&&V!==(V=ge[15].toFixed(0)+"")&&R(ve,V),_e&16384&&Ze!==(Ze=ge[14].toFixed(1)+"")&&R(We,Ze),_e&8192&&qe!==(qe=ge[13].toFixed(1)+"")&&R(Ke,qe),_e&1024&&R(rt,ge[10]),_e&512&&R(gt,ge[9]),_e&2048&&It(Ye,ge[11])},i:we,o:we,d(ge){ge&&E(l),Fe=!1,nt(zt)}}}function Nn(e,l,s){let i,o,r,f,d,v,c,m,u,w,g,h,k,y,M,T,{status:p}=l;async function C(F){try{await Oe.power.setFanMode(F)}catch(_){console.error("Failed to set fan mode:",_)}}async function A(){try{const F=u==="IDLE"?0:1;await Oe.power.setOperate(F)}catch(F){console.error("Failed to toggle operate:",F)}}const S=F=>C(F.target.value);return e.$$set=F=>{"status"in F&&s(18,p=F.status)},e.$$.update=()=>{e.$$.dirty&262144&&s(1,i=(p==null?void 0:p.power_forward)||0),e.$$.dirty&262144&&p!=null&&p.power_reflected,e.$$.dirty&262144&&s(2,o=(p==null?void 0:p.swr)||1),e.$$.dirty&262144&&s(15,r=(p==null?void 0:p.voltage)||0),e.$$.dirty&262144&&s(14,f=(p==null?void 0:p.vdd)||0),e.$$.dirty&262144&&p!=null&&p.current,e.$$.dirty&262144&&s(13,d=(p==null?void 0:p.peak_current)||0),e.$$.dirty&262144&&s(3,v=(p==null?void 0:p.temperature)||0),e.$$.dirty&262144&&s(12,c=(p==null?void 0:p.harmonic_load_temp)||0),e.$$.dirty&262144&&s(11,m=(p==null?void 0:p.fan_mode)||"CONTEST"),e.$$.dirty&262144&&s(0,u=(p==null?void 0:p.state)||"IDLE"),e.$$.dirty&262144&&s(10,w=(p==null?void 0:p.band_a)||"0"),e.$$.dirty&262144&&s(9,g=(p==null?void 0:p.band_b)||"0"),e.$$.dirty&262144&&s(8,h=(p==null?void 0:p.connected)||!1),e.$$.dirty&1&&s(7,k=u.replace("TRANSMIT_A","TRANSMIT").replace("TRANSMIT_B","TRANSMIT")),e.$$.dirty&8&&s(6,y=v<40?"#4caf50":v<60?"#ffc107":v<75?"#ff9800":"#f44336"),e.$$.dirty&4&&s(5,M=o<1.5?"#4caf50":o<2?"#ffc107":o<3?"#ff9800":"#f44336"),e.$$.dirty&2&&s(4,T=Math.min(i/2e3*100,100))},[u,i,o,v,T,M,y,k,h,g,w,m,c,d,f,r,C,A,p,S]}class Dn extends ht{constructor(l){super(),vt(this,l,Nn,In,ot,{status:18})}}function En(e){let l,s,i,o,r,f,d,v,c,m,u,w,g,h,k,y,M,T=e[0].toFixed(0)+"",p,C,A,S,F,_,I,O,X,$=e[1].toFixed(2)+"",re,Q,P,le,J,N,B,se,H,fe,Me,ee,Z,K,ie,ce,oe,ue,ne,Ae,Te,Ie,Ne,Pe,Se,te,ye,q,Y=(e[11]/1e3).toFixed(3)+"",x,G,de,V,ve,j,be,he=(e[10]/1e3).toFixed(3)+"",Ee,Ve,Ze,We,Xe,Be=e[8]===1?"OPERATE":"STANDBY",Le,$e,De,qe,Ke,xe,Ge;return{c(){l=a("div"),s=a("div"),i=a("h2"),i.textContent="Tuner Genius XL",o=b(),r=a("div"),f=a("span"),d=z(e[12]),v=b(),c=a("span"),m=b(),u=a("div"),w=a("div"),g=a("div"),h=a("div"),k=a("span"),k.textContent="Power",y=b(),M=a("span"),p=z(T),C=z(" W"),A=b(),S=a("div"),F=a("div"),_=a("div"),I=b(),O=a("div"),X=a("div"),re=z($),Q=b(),P=a("div"),P.textContent="SWR",le=b(),J=a("div"),N=a("div"),B=a("div"),se=z(e[7]),H=b(),fe=a("div"),fe.textContent="C1",Me=b(),ee=a("div"),Z=a("div"),K=z(e[6]),ie=b(),ce=a("div"),ce.textContent="L",oe=b(),ue=a("div"),ne=a("div"),Ae=z(e[5]),Te=b(),Ie=a("div"),Ie.textContent="C2",Ne=b(),Pe=a("div"),Se=a("div"),te=a("div"),te.textContent="Freq A",ye=b(),q=a("div"),x=z(Y),G=a("span"),G.textContent="MHz",de=b(),V=a("div"),ve=a("div"),ve.textContent="Freq B",j=b(),be=a("div"),Ee=z(he),Ve=a("span"),Ve.textContent="MHz",Ze=b(),We=a("div"),Xe=a("button"),Le=z(Be),$e=b(),De=a("button"),De.textContent="BYPASS",qe=b(),Ke=a("button"),Ke.innerHTML=` + AUTO TUNE`,t(i,"class","svelte-zuda7"),t(f,"class","tuning-badge svelte-zuda7"),W(f,"tuning",e[12]==="TUNING"),t(c,"class","status-dot svelte-zuda7"),W(c,"disconnected",!e[4]),t(r,"class","header-right svelte-zuda7"),t(s,"class","card-header svelte-zuda7"),t(k,"class","power-label-inline svelte-zuda7"),t(M,"class","power-value-inline svelte-zuda7"),t(h,"class","power-header svelte-zuda7"),t(_,"class","power-bar-fill svelte-zuda7"),ae(_,"width",e[2]+"%"),t(F,"class","power-bar-bg svelte-zuda7"),t(S,"class","power-bar-container svelte-zuda7"),t(g,"class","power-section svelte-zuda7"),t(X,"class","swr-value-compact svelte-zuda7"),t(P,"class","swr-label-compact svelte-zuda7"),t(O,"class","swr-circle-compact svelte-zuda7"),ae(O,"--swr-color",e[3]),t(w,"class","power-swr-row svelte-zuda7"),t(B,"class","cap-value svelte-zuda7"),t(fe,"class","cap-label svelte-zuda7"),t(N,"class","cap-item svelte-zuda7"),t(Z,"class","cap-value svelte-zuda7"),t(ce,"class","cap-label svelte-zuda7"),t(ee,"class","cap-item svelte-zuda7"),t(ne,"class","cap-value svelte-zuda7"),t(Ie,"class","cap-label svelte-zuda7"),t(ue,"class","cap-item svelte-zuda7"),t(J,"class","capacitors svelte-zuda7"),t(te,"class","freq-label svelte-zuda7"),t(G,"class","freq-unit svelte-zuda7"),t(q,"class","freq-value svelte-zuda7"),t(Se,"class","freq-item svelte-zuda7"),t(ve,"class","freq-label svelte-zuda7"),t(Ve,"class","freq-unit svelte-zuda7"),t(be,"class","freq-value svelte-zuda7"),t(V,"class","freq-item svelte-zuda7"),t(Pe,"class","freq-display svelte-zuda7"),t(Xe,"class","control-btn operate svelte-zuda7"),W(Xe,"active",e[8]===1),t(De,"class","control-btn bypass svelte-zuda7"),W(De,"active",e[9]),t(We,"class","controls svelte-zuda7"),t(Ke,"class","tune-btn svelte-zuda7"),t(u,"class","metrics svelte-zuda7"),t(l,"class","card svelte-zuda7")},m(me,ze){L(me,l,ze),n(l,s),n(s,i),n(s,o),n(s,r),n(r,f),n(f,d),n(r,v),n(r,c),n(l,m),n(l,u),n(u,w),n(w,g),n(g,h),n(h,k),n(h,y),n(h,M),n(M,p),n(M,C),n(g,A),n(g,S),n(S,F),n(F,_),n(w,I),n(w,O),n(O,X),n(X,re),n(O,Q),n(O,P),n(u,le),n(u,J),n(J,N),n(N,B),n(B,se),n(N,H),n(N,fe),n(J,Me),n(J,ee),n(ee,Z),n(Z,K),n(ee,ie),n(ee,ce),n(J,oe),n(J,ue),n(ue,ne),n(ne,Ae),n(ue,Te),n(ue,Ie),n(u,Ne),n(u,Pe),n(Pe,Se),n(Se,te),n(Se,ye),n(Se,q),n(q,x),n(q,G),n(Pe,de),n(Pe,V),n(V,ve),n(V,j),n(V,be),n(be,Ee),n(be,Ve),n(u,Ze),n(u,We),n(We,Xe),n(Xe,Le),n(We,$e),n(We,De),n(u,qe),n(u,Ke),xe||(Ge=[Ce(Xe,"click",e[17]),Ce(De,"click",e[18]),Ce(Ke,"click",e[13])],xe=!0)},p(me,[ze]){ze&4096&&R(d,me[12]),ze&4096&&W(f,"tuning",me[12]==="TUNING"),ze&16&&W(c,"disconnected",!me[4]),ze&1&&T!==(T=me[0].toFixed(0)+"")&&R(p,T),ze&4&&ae(_,"width",me[2]+"%"),ze&2&&$!==($=me[1].toFixed(2)+"")&&R(re,$),ze&8&&ae(O,"--swr-color",me[3]),ze&128&&R(se,me[7]),ze&64&&R(K,me[6]),ze&32&&R(Ae,me[5]),ze&2048&&Y!==(Y=(me[11]/1e3).toFixed(3)+"")&&R(x,Y),ze&1024&&he!==(he=(me[10]/1e3).toFixed(3)+"")&&R(Ee,he),ze&256&&Be!==(Be=me[8]===1?"OPERATE":"STANDBY")&&R(Le,Be),ze&256&&W(Xe,"active",me[8]===1),ze&512&&W(De,"active",me[9])},i:we,o:we,d(me){me&&E(l),xe=!1,nt(Ge)}}}function Ln(e,l,s){let i,o,r,f,d,v,c,m,u,w,g,h,k,{status:y}=l;async function M(){try{await Oe.tuner.autoTune()}catch(S){console.error("Failed to tune:",S)}}async function T(S){try{await Oe.tuner.setBypass(S)}catch(F){console.error("Failed to set bypass:",F)}}async function p(S){try{await Oe.tuner.setOperate(S)}catch(F){console.error("Failed to set operate:",F)}}const C=()=>p(c===1?0:1),A=()=>T(v?0:1);return e.$$set=S=>{"status"in S&&s(16,y=S.status)},e.$$.update=()=>{e.$$.dirty&65536&&s(0,i=(y==null?void 0:y.power_forward)||0),e.$$.dirty&65536&&s(1,o=(y==null?void 0:y.swr)||1),e.$$.dirty&65536&&s(12,r=(y==null?void 0:y.tuning_status)||"READY"),e.$$.dirty&65536&&s(11,f=(y==null?void 0:y.frequency_a)||0),e.$$.dirty&65536&&s(10,d=(y==null?void 0:y.frequency_b)||0),e.$$.dirty&65536&&s(9,v=(y==null?void 0:y.bypass)||!1),e.$$.dirty&65536&&s(8,c=(y==null?void 0:y.state)||0),e.$$.dirty&65536&&s(7,m=(y==null?void 0:y.c1)||0),e.$$.dirty&65536&&s(6,u=(y==null?void 0:y.l)||0),e.$$.dirty&65536&&s(5,w=(y==null?void 0:y.c2)||0),e.$$.dirty&65536&&s(4,g=(y==null?void 0:y.connected)||!1),e.$$.dirty&2&&s(3,h=o<1.5?"#4caf50":o<2?"#ffc107":o<3?"#ff9800":"#f44336"),e.$$.dirty&1&&s(2,k=Math.min(i/2e3*100,100))},[i,o,k,h,g,w,u,m,c,v,d,f,r,M,T,p,y,C,A]}class Rn extends ht{constructor(l){super(),vt(this,l,Ln,En,ot,{status:16})}}function Pl(e,l,s){const i=e.slice();i[14]=l[s];const o=i[1].tx&&i[1].tx_ant===i[14].number;i[15]=o;const r=i[0].tx&&i[0].tx_ant===i[14].number;i[16]=r;const f=!i[1].tx&&i[1].rx_ant===i[14].number;i[17]=f;const d=!i[0].tx&&i[0].rx_ant===i[14].number;i[18]=d;const v=i[15]||i[16];i[19]=v;const c=i[17]||i[15];i[20]=c;const m=i[18]||i[16];return i[21]=m,i}function Ol(e){let l,s,i=e[14].name+"",o,r,f,d,v,c,m,u,w;function g(){return e[11](e[14])}function h(){return e[12](e[14])}return{c(){l=a("div"),s=a("div"),o=z(i),r=b(),f=a("div"),d=a("button"),d.textContent="A",v=b(),c=a("button"),c.textContent="B",m=b(),t(s,"class","antenna-name svelte-vlabwb"),t(d,"class","port-btn svelte-vlabwb"),W(d,"active",e[20]),t(c,"class","port-btn svelte-vlabwb"),W(c,"active",e[21]),t(f,"class","antenna-ports svelte-vlabwb"),t(l,"class","antenna-card svelte-vlabwb"),W(l,"tx",e[19]),W(l,"active-a",e[20]),W(l,"active-b",e[21])},m(k,y){L(k,l,y),n(l,s),n(s,o),n(l,r),n(l,f),n(f,d),n(f,v),n(f,c),n(l,m),u||(w=[Ce(d,"click",g),Ce(c,"click",h)],u=!0)},p(k,y){e=k,y&16&&i!==(i=e[14].name+"")&&R(o,i),y&18&&W(d,"active",e[20]),y&17&&W(c,"active",e[21]),y&19&&W(l,"tx",e[19]),y&18&&W(l,"active-a",e[20]),y&17&&W(l,"active-b",e[21])},d(k){k&&E(l),u=!1,nt(w)}}}function Wn(e){let l,s,i,o,r,f,d,v,c,m,u=(e[1].source||"FLEX")+"",w,g,h,k,y=(e[0].source||"FLEX")+"",M,T,p,C,A,S,F,_,I,O,X,$,re,Q,P,le,J=ut(e[4]),N=[];for(let B=0;B🔄 + REBOOT`,t(i,"class","svelte-vlabwb"),t(r,"class","status-dot svelte-vlabwb"),W(r,"disconnected",!e[5]),t(s,"class","card-header svelte-vlabwb"),t(m,"class","source-label svelte-vlabwb"),t(c,"class","source-item svelte-vlabwb"),t(k,"class","source-label svelte-vlabwb"),t(h,"class","source-item svelte-vlabwb"),t(v,"class","sources svelte-vlabwb"),t(A,"class","band-value svelte-vlabwb"),t(C,"class","band-item svelte-vlabwb"),t(I,"class","band-value svelte-vlabwb"),t(_,"class","band-item svelte-vlabwb"),t(p,"class","bands svelte-vlabwb"),t($,"class","antennas svelte-vlabwb"),t(Q,"class","reboot-btn svelte-vlabwb"),t(d,"class","metrics svelte-vlabwb"),t(l,"class","card svelte-vlabwb")},m(B,se){L(B,l,se),n(l,s),n(s,i),n(s,o),n(s,r),n(l,f),n(l,d),n(d,v),n(v,c),n(c,m),n(m,w),n(v,g),n(v,h),n(h,k),n(k,M),n(d,T),n(d,p),n(p,C),n(C,A),n(A,S),n(p,F),n(p,_),n(_,I),n(I,O),n(d,X),n(d,$);for(let H=0;Hu(1,M.number),y=M=>u(2,M.number);return e.$$set=M=>{"status"in M&&s(8,c=M.status)},e.$$.update=()=>{e.$$.dirty&256&&s(5,i=(c==null?void 0:c.connected)||!1),e.$$.dirty&256&&s(1,o=(c==null?void 0:c.port_a)||{}),e.$$.dirty&256&&s(0,r=(c==null?void 0:c.port_b)||{}),e.$$.dirty&256&&s(4,f=(c==null?void 0:c.antennas)||[]),e.$$.dirty&2&&s(3,d=m[o.band]||"None"),e.$$.dirty&1&&s(2,v=m[r.band]||"None"),e.$$.dirty&1795&&c&&(o.tx!==w||r.tx!==g)&&(console.log("AntennaGenius TX state changed:",{portA_tx:o.tx,portB_tx:r.tx,portA_tx_ant:o.tx_ant,portB_tx_ant:r.tx_ant}),s(9,w=o.tx),s(10,g=r.tx))},[r,o,v,d,f,i,u,h,c,w,g,k,y]}class Gn extends ht{constructor(l){super(),vt(this,l,Bn,Wn,ot,{status:8})}}function Al(e,l,s){const i=e.slice();i[16]=l[s];const o=150+125*Math.sin(i[16]*Math.PI/180);i[17]=o;const r=150-125*Math.cos(i[16]*Math.PI/180);return i[18]=r,i}function Il(e){let l,s,i,o;return{c(){l=a("span"),s=z("→ "),i=z(e[0]),o=z("°"),t(l,"class","target-indicator svelte-3omzwr")},m(r,f){L(r,l,f),n(l,s),n(l,i),n(l,o)},p(r,f){f&1&&R(i,r[0])},d(r){r&&E(l)}}}function Nl(e){let l,s,i,o,r;return{c(){l=D("g"),s=D("line"),i=D("g"),o=D("polygon"),t(s,"x1","0"),t(s,"y1","0"),t(s,"x2","0"),t(s,"y2","-125"),t(s,"stroke","rgba(255, 255, 255, 0.3)"),t(s,"stroke-width","2"),t(s,"stroke-dasharray","5,5"),t(s,"opacity","0.6"),t(o,"points","0,-8 -5,5 5,5"),t(o,"fill","rgba(255, 255, 255, 0.4)"),t(o,"stroke","rgba(255, 255, 255, 0.5)"),t(o,"stroke-width","1"),t(i,"transform","translate(0, -125)"),t(l,"transform",r="rotate("+e[3]+")")},m(f,d){L(f,l,d),n(l,s),n(l,i),n(i,o)},p(f,d){d&8&&r!==(r="rotate("+f[3]+")")&&t(l,"transform",r)},d(f){f&&E(l)}}}function Dl(e){let l,s,i,o,r;return{c(){l=D("path"),s=D("line"),i=D("line"),o=D("g"),r=D("polygon"),t(l,"d","M 0,0 L "+-Math.sin(15*Math.PI/180)*130+","+-Math.cos(15*Math.PI/180)*130+` \r + A 130,130 0 0,1 `+Math.sin(15*Math.PI/180)*130+","+-Math.cos(15*Math.PI/180)*130+" Z"),t(l,"fill","url(#beamGradient)"),t(l,"opacity","0.85"),t(s,"x1","0"),t(s,"y1","0"),t(s,"x2",-Math.sin(15*Math.PI/180)*130),t(s,"y2",-Math.cos(15*Math.PI/180)*130),t(s,"stroke","#4fc3f7"),t(s,"stroke-width","2"),t(s,"opacity","0.9"),t(i,"x1","0"),t(i,"y1","0"),t(i,"x2",Math.sin(15*Math.PI/180)*130),t(i,"y2",-Math.cos(15*Math.PI/180)*130),t(i,"stroke","#4fc3f7"),t(i,"stroke-width","2"),t(i,"opacity","0.9"),t(r,"points","0,-20 -8,5 0,0 8,5"),t(r,"fill","#4fc3f7"),t(r,"stroke","#0288d1"),t(r,"stroke-width","2"),ae(r,"filter","drop-shadow(0 0 10px rgba(79, 195, 247, 1))"),t(o,"transform","translate(0, -110)")},m(f,d){L(f,l,d),L(f,s,d),L(f,i,d),L(f,o,d),n(o,r)},p:we,d(f){f&&(E(l),E(s),E(i),E(o))}}}function El(e){let l,s,i,o,r;return{c(){l=D("path"),s=D("line"),i=D("line"),o=D("g"),r=D("polygon"),t(l,"d","M 0,0 L "+-Math.sin(15*Math.PI/180)*130+","+Math.cos(15*Math.PI/180)*130+` \r + A 130,130 0 0,0 `+Math.sin(15*Math.PI/180)*130+","+Math.cos(15*Math.PI/180)*130+" Z"),t(l,"fill","url(#beamGradient)"),t(l,"opacity","0.85"),t(s,"x1","0"),t(s,"y1","0"),t(s,"x2",-Math.sin(15*Math.PI/180)*130),t(s,"y2",Math.cos(15*Math.PI/180)*130),t(s,"stroke","#4fc3f7"),t(s,"stroke-width","2"),t(s,"opacity","0.9"),t(i,"x1","0"),t(i,"y1","0"),t(i,"x2",Math.sin(15*Math.PI/180)*130),t(i,"y2",Math.cos(15*Math.PI/180)*130),t(i,"stroke","#4fc3f7"),t(i,"stroke-width","2"),t(i,"opacity","0.9"),t(r,"points","0,20 -8,-5 0,0 8,-5"),t(r,"fill","#4fc3f7"),t(r,"stroke","#0288d1"),t(r,"stroke-width","2"),ae(r,"filter","drop-shadow(0 0 10px rgba(79, 195, 247, 1))"),t(o,"transform","translate(0, 110)")},m(f,d){L(f,l,d),L(f,s,d),L(f,i,d),L(f,o,d),n(o,r)},p:we,d(f){f&&(E(l),E(s),E(i),E(o))}}}function Ll(e){let l,s,i,o,r,f,d,v,c,m;return{c(){l=D("path"),s=D("path"),i=D("line"),o=D("line"),r=D("line"),f=D("line"),d=D("g"),v=D("polygon"),c=D("g"),m=D("polygon"),t(l,"d","M 0,0 L "+-Math.sin(15*Math.PI/180)*130+","+-Math.cos(15*Math.PI/180)*130+` \r + A 130,130 0 0,1 `+Math.sin(15*Math.PI/180)*130+","+-Math.cos(15*Math.PI/180)*130+" Z"),t(l,"fill","url(#beamGradient)"),t(l,"opacity","0.7"),t(s,"d","M 0,0 L "+-Math.sin(15*Math.PI/180)*130+","+Math.cos(15*Math.PI/180)*130+` \r + A 130,130 0 0,0 `+Math.sin(15*Math.PI/180)*130+","+Math.cos(15*Math.PI/180)*130+" Z"),t(s,"fill","url(#beamGradient)"),t(s,"opacity","0.7"),t(i,"x1","0"),t(i,"y1","0"),t(i,"x2",-Math.sin(15*Math.PI/180)*130),t(i,"y2",-Math.cos(15*Math.PI/180)*130),t(i,"stroke","#4fc3f7"),t(i,"stroke-width","2"),t(i,"opacity","0.8"),t(o,"x1","0"),t(o,"y1","0"),t(o,"x2",Math.sin(15*Math.PI/180)*130),t(o,"y2",-Math.cos(15*Math.PI/180)*130),t(o,"stroke","#4fc3f7"),t(o,"stroke-width","2"),t(o,"opacity","0.8"),t(r,"x1","0"),t(r,"y1","0"),t(r,"x2",-Math.sin(15*Math.PI/180)*130),t(r,"y2",Math.cos(15*Math.PI/180)*130),t(r,"stroke","#4fc3f7"),t(r,"stroke-width","2"),t(r,"opacity","0.8"),t(f,"x1","0"),t(f,"y1","0"),t(f,"x2",Math.sin(15*Math.PI/180)*130),t(f,"y2",Math.cos(15*Math.PI/180)*130),t(f,"stroke","#4fc3f7"),t(f,"stroke-width","2"),t(f,"opacity","0.8"),t(v,"points","0,-20 -8,5 0,0 8,5"),t(v,"fill","#4fc3f7"),t(v,"stroke","#0288d1"),t(v,"stroke-width","2"),ae(v,"filter","drop-shadow(0 0 10px rgba(79, 195, 247, 1))"),t(d,"transform","translate(0, -110)"),t(m,"points","0,20 -8,-5 0,0 8,-5"),t(m,"fill","#4fc3f7"),t(m,"stroke","#0288d1"),t(m,"stroke-width","2"),ae(m,"filter","drop-shadow(0 0 10px rgba(79, 195, 247, 1))"),t(c,"transform","translate(0, 110)")},m(u,w){L(u,l,w),L(u,s,w),L(u,i,w),L(u,o,w),L(u,r,w),L(u,f,w),L(u,d,w),n(d,v),L(u,c,w),n(c,m)},p:we,d(u){u&&(E(l),E(s),E(i),E(o),E(r),E(f),E(d),E(c))}}}function Rl(e){let l,s,i,o,r,f;return{c(){l=D("g"),s=D("line"),i=D("g"),o=D("polygon"),r=D("animate"),t(s,"x1","0"),t(s,"y1","0"),t(s,"x2","0"),t(s,"y2","-135"),t(s,"stroke","#ffc107"),t(s,"stroke-width","3"),t(s,"stroke-dasharray","8,4"),t(s,"opacity","0.9"),t(r,"attributeName","opacity"),t(r,"values","0.8;1;0.8"),t(r,"dur","1s"),t(r,"repeatCount","indefinite"),t(o,"points","0,-12 -8,6 0,2 8,6"),t(o,"fill","#ffc107"),t(o,"stroke","#ff9800"),t(o,"stroke-width","1.5"),ae(o,"filter","drop-shadow(0 0 10px rgba(255, 193, 7, 0.8))"),t(i,"transform","translate(0, -135)"),t(l,"transform",f="rotate("+e[0]+")")},m(d,v){L(d,l,v),n(l,s),n(l,i),n(i,o),n(o,r)},p(d,v){v&1&&f!==(f="rotate("+d[0]+")")&&t(l,"transform",f)},d(d){d&&E(l)}}}function Wl(e){let l,s,i;return{c(){l=D("text"),s=z(e[16]),i=z("°"),t(l,"x",e[17]),t(l,"y",e[18]),t(l,"text-anchor","middle"),t(l,"dominant-baseline","middle"),t(l,"class","degree-label svelte-3omzwr")},m(o,r){L(o,l,r),n(l,s),n(l,i)},p:we,d(o){o&&E(l)}}}function Bl(e){let l;return{c(){l=a("div"),l.innerHTML='
Physical antenna
Radiation pattern
',t(l,"class","map-legend svelte-3omzwr")},m(s,i){L(s,l,i)},d(s){s&&E(l)}}}function jn(e){let l,s,i,o,r,f,d,v,c,m,u,w,g,h,k,y,M,T,p,C,A,S,F,_,I,O,X,$,re,Q,P,le,J,N,B,se,H,fe,Me,ee,Z,K,ie,ce,oe,ue,ne,Ae,Te,Ie,Ne,Pe,Se,te=e[2]&&e[0]!==null&&Il(e),ye=(e[4]===1||e[4]===2)&&Nl(e),q=e[4]===0&&Dl(),Y=e[4]===1&&El(),x=e[4]===2&&Ll(),G=e[2]&&e[0]!==null&&Rl(e),de=ut([45,135,225,315]),V=[];for(let j=0;j<4;j+=1)V[j]=Wl(Al(e,de,j));let ve=(e[4]===1||e[4]===2)&&Bl();return{c(){l=a("div"),s=a("div"),i=a("h2"),i.textContent="Rotator Genius",o=b(),r=a("span"),f=b(),d=a("div"),v=a("div"),c=a("div"),m=a("div"),m.textContent="CURRENT HEADING",u=b(),w=a("div"),g=z(e[3]),h=z(`°\r + `),te&&te.c(),k=b(),y=a("div"),M=a("button"),M.textContent="↺",T=b(),p=a("button"),p.textContent="■",C=b(),A=a("button"),A.textContent="↻",S=b(),F=a("div"),_=D("svg"),I=D("defs"),O=D("radialGradient"),X=D("stop"),$=D("stop"),re=D("circle"),Q=D("circle"),P=D("circle"),le=D("circle"),J=D("g"),ye&&ye.c(),N=D("g"),q&&q.c(),B=At(),Y&&Y.c(),se=At(),x&&x.c(),G&&G.c(),fe=D("circle"),Me=D("animate"),ee=D("circle"),Z=D("animate"),K=D("animate"),ie=D("text"),ce=z("N"),oe=D("text"),ue=z("E"),ne=D("text"),Ae=z("S"),Te=D("text"),Ie=z("W");for(let j=0;j<4;j+=1)V[j].c();Ne=b(),ve&&ve.c(),t(i,"class","svelte-3omzwr"),t(r,"class","status-dot svelte-3omzwr"),W(r,"disconnected",!e[1]),t(s,"class","card-header svelte-3omzwr"),t(m,"class","heading-label svelte-3omzwr"),t(w,"class","heading-value svelte-3omzwr"),t(c,"class","heading-display-compact svelte-3omzwr"),t(M,"class","btn-mini ccw svelte-3omzwr"),t(M,"title","Rotate Counter-Clockwise"),t(p,"class","btn-mini stop svelte-3omzwr"),t(p,"title","Stop Rotation"),t(A,"class","btn-mini cw svelte-3omzwr"),t(A,"title","Rotate Clockwise"),t(y,"class","controls-compact svelte-3omzwr"),t(v,"class","heading-controls-row svelte-3omzwr"),t(X,"offset","0%"),ae(X,"stop-color","rgba(79, 195, 247, 0.7)"),ae(X,"stop-opacity","1"),t($,"offset","100%"),ae($,"stop-color","rgba(79, 195, 247, 0)"),ae($,"stop-opacity","0"),t(O,"id","beamGradient"),t(re,"cx","150"),t(re,"cy","150"),t(re,"r","140"),t(re,"fill","rgba(30, 64, 175, 0.15)"),t(re,"stroke","rgba(79, 195, 247, 0.4)"),t(re,"stroke-width","2"),t(Q,"cx","150"),t(Q,"cy","150"),t(Q,"r","105"),t(Q,"fill","none"),t(Q,"stroke","rgba(79,195,247,0.2)"),t(Q,"stroke-width","1"),t(Q,"stroke-dasharray","3,3"),t(P,"cx","150"),t(P,"cy","150"),t(P,"r","70"),t(P,"fill","none"),t(P,"stroke","rgba(79,195,247,0.2)"),t(P,"stroke-width","1"),t(P,"stroke-dasharray","3,3"),t(le,"cx","150"),t(le,"cy","150"),t(le,"r","35"),t(le,"fill","none"),t(le,"stroke","rgba(79,195,247,0.2)"),t(le,"stroke-width","1"),t(le,"stroke-dasharray","3,3"),t(N,"transform",H="rotate("+e[3]+")"),t(Me,"attributeName","r"),t(Me,"values","5;7;5"),t(Me,"dur","2s"),t(Me,"repeatCount","indefinite"),t(fe,"cx","0"),t(fe,"cy","0"),t(fe,"r","5"),t(fe,"fill","#f44336"),t(fe,"stroke","#fff"),t(fe,"stroke-width","2"),t(Z,"attributeName","r"),t(Z,"values","10;16;10"),t(Z,"dur","2s"),t(Z,"repeatCount","indefinite"),t(K,"attributeName","opacity"),t(K,"values","0.5;0;0.5"),t(K,"dur","2s"),t(K,"repeatCount","indefinite"),t(ee,"cx","0"),t(ee,"cy","0"),t(ee,"r","10"),t(ee,"fill","none"),t(ee,"stroke","#f44336"),t(ee,"stroke-width","1.5"),t(ee,"opacity","0.5"),t(J,"transform","translate(150, 150)"),t(ie,"x","150"),t(ie,"y","20"),t(ie,"text-anchor","middle"),t(ie,"class","cardinal svelte-3omzwr"),t(oe,"x","280"),t(oe,"y","155"),t(oe,"text-anchor","middle"),t(oe,"class","cardinal svelte-3omzwr"),t(ne,"x","150"),t(ne,"y","285"),t(ne,"text-anchor","middle"),t(ne,"class","cardinal svelte-3omzwr"),t(Te,"x","20"),t(Te,"y","155"),t(Te,"text-anchor","middle"),t(Te,"class","cardinal svelte-3omzwr"),t(_,"viewBox","0 0 300 300"),t(_,"class","map-svg clickable-compass svelte-3omzwr"),t(_,"role","button"),t(_,"tabindex","0"),t(_,"aria-label","Click to rotate antenna to direction"),t(F,"class","map-container svelte-3omzwr"),t(d,"class","metrics svelte-3omzwr"),t(l,"class","card svelte-3omzwr")},m(j,be){L(j,l,be),n(l,s),n(s,i),n(s,o),n(s,r),n(l,f),n(l,d),n(d,v),n(v,c),n(c,m),n(c,u),n(c,w),n(w,g),n(w,h),te&&te.m(w,null),n(v,k),n(v,y),n(y,M),n(y,T),n(y,p),n(y,C),n(y,A),n(d,S),n(d,F),n(F,_),n(_,I),n(I,O),n(O,X),n(O,$),n(_,re),n(_,Q),n(_,P),n(_,le),n(_,J),ye&&ye.m(J,null),n(J,N),q&&q.m(N,null),n(N,B),Y&&Y.m(N,null),n(N,se),x&&x.m(N,null),G&&G.m(J,null),n(J,fe),n(fe,Me),n(J,ee),n(ee,Z),n(ee,K),n(_,ie),n(ie,ce),n(_,oe),n(oe,ue),n(_,ne),n(ne,Ae),n(_,Te),n(Te,Ie);for(let he=0;he<4;he+=1)V[he]&&V[he].m(_,null);n(d,Ne),ve&&ve.m(d,null),Pe||(Se=[Ce(M,"click",e[6]),Ce(p,"click",e[7]),Ce(A,"click",e[5]),Ce(_,"click",e[8]),Ce(_,"keydown",e[15])],Pe=!0)},p(j,[be]){if(be&2&&W(r,"disconnected",!j[1]),be&8&&R(g,j[3]),j[2]&&j[0]!==null?te?te.p(j,be):(te=Il(j),te.c(),te.m(w,null)):te&&(te.d(1),te=null),j[4]===1||j[4]===2?ye?ye.p(j,be):(ye=Nl(j),ye.c(),ye.m(J,N)):ye&&(ye.d(1),ye=null),j[4]===0?q?q.p(j,be):(q=Dl(),q.c(),q.m(N,B)):q&&(q.d(1),q=null),j[4]===1?Y?Y.p(j,be):(Y=El(),Y.c(),Y.m(N,se)):Y&&(Y.d(1),Y=null),j[4]===2?x?x.p(j,be):(x=Ll(),x.c(),x.m(N,null)):x&&(x.d(1),x=null),be&8&&H!==(H="rotate("+j[3]+")")&&t(N,"transform",H),j[2]&&j[0]!==null?G?G.p(j,be):(G=Rl(j),G.c(),G.m(J,fe)):G&&(G.d(1),G=null),be&0){de=ut([45,135,225,315]);let he;for(he=0;he<4;he+=1){const Ee=Al(j,de,he);V[he]?V[he].p(Ee,be):(V[he]=Wl(Ee),V[he].c(),V[he].m(_,null))}for(;he<4;he+=1)V[he].d(1)}j[4]===1||j[4]===2?ve||(ve=Bl(),ve.c(),ve.m(d,null)):ve&&(ve.d(1),ve=null)},i:we,o:we,d(j){j&&E(l),te&&te.d(),ye&&ye.d(),q&&q.d(),Y&&Y.d(),x&&x.d(),G&&G.d(),Dt(V,j),ve&&ve.d(),Pe=!1,nt(Se)}}}function Un(e,l,s){let i,o,r,f,d,v,{status:c}=l,{ultrabeam:m=null}=l,u=null,w=!1,g=null;async function h(){try{await Oe.rotator.rotateCW()}catch(p){console.error("Failed to rotate CW:",p)}}async function k(){try{await Oe.rotator.rotateCCW()}catch(p){console.error("Failed to rotate CCW:",p)}}async function y(){try{s(12,g=null),await Oe.rotator.stop()}catch(p){console.error("Failed to stop:",p)}}async function M(p){const A=p.currentTarget.getBoundingClientRect(),S=A.width/2,F=A.height/2,_=p.clientX-A.left-S,I=p.clientY-A.top-F;let O=Math.atan2(_,-I)*(180/Math.PI);O<0&&(O+=360);const $=(Math.round(O/5)*5+360)%360;try{await Oe.rotator.setHeading($),s(12,g=$)}catch(re){console.error("Failed to set heading:",re)}}const T=p=>p.key==="Enter"&&M(p);return e.$$set=p=>{"status"in p&&s(9,c=p.status),"ultrabeam"in p&&s(10,m=p.ultrabeam)},e.$$.update=()=>{if(e.$$.dirty&1024&&s(4,i=(m==null?void 0:m.direction)??0),e.$$.dirty&2560&&(c==null?void 0:c.heading)!==void 0&&(c==null?void 0:c.heading)!==null){const p=c.heading;u===null?(s(11,u=p),console.log(` ✓ First load, set to ${u}°`)):p===0&&u>10&&u<350?console.log(` ✗ IGNORED glitch jump from ${u}° to 0°`):s(11,u=p)}if(e.$$.dirty&2048&&s(3,o=u!==null?u:0),e.$$.dirty&512&&s(1,w=(c==null?void 0:c.connected)||!1),e.$$.dirty&512&&s(13,r=(c==null?void 0:c.target_heading)??null),e.$$.dirty&10240&&s(14,f=r!==null&&u!==null&&(()=>{const p=Math.abs(r-u);return Math.min(p,360-p)>2})()),e.$$.dirty&6144&&g!==null&&u!==null){const p=Math.abs(u-g);Math.min(p,360-p)<3&&s(12,g=null)}e.$$.dirty&28672&&s(0,d=g??(f?r:null)),e.$$.dirty&2049&&s(2,v=d!==null&&u!==null&&(()=>{const p=Math.abs(d-u);return Math.min(p,360-p)>2})())},[d,w,v,o,i,h,k,y,M,c,m,u,g,r,f,T]}class Jn extends ht{constructor(l){super(),vt(this,l,Un,jn,ot,{status:9,ultrabeam:10})}}function Gl(e,l,s){const i=e.slice();return i[35]=l[s],i}function jl(e){let l,s=e[35].label+"",i;return{c(){l=a("option"),i=z(s),l.__value=e[35].value,Pt(l,l.__value)},m(o,r){L(o,l,r),n(l,i)},p:we,d(o){o&&E(l)}}}function Ul(e){let l,s,i,o,r,f,d,v,c,m=e[6].toFixed(0)+"",u,w;return{c(){l=a("div"),s=a("h3"),s.textContent="Motors Moving...",i=b(),o=a("div"),r=a("div"),f=b(),d=a("div"),v=z(e[0]),c=z(" / 60 ("),u=z(m),w=z("%)"),t(s,"class","svelte-t8himz"),t(r,"class","progress-fill svelte-t8himz"),ae(r,"width",e[6]+"%"),t(o,"class","progress-bar svelte-t8himz"),t(d,"class","progress-text svelte-t8himz"),t(l,"class","progress-section svelte-t8himz")},m(g,h){L(g,l,h),n(l,s),n(l,i),n(l,o),n(o,r),n(l,f),n(l,d),n(d,v),n(d,c),n(d,u),n(d,w)},p(g,h){h[0]&64&&ae(r,"width",g[6]+"%"),h[0]&1&&R(v,g[0]),h[0]&64&&m!==(m=g[6].toFixed(0)+"")&&R(u,m)},d(g){g&&E(l)}}}function Xn(e){let l,s,i,o,r,f,d,v,c,m,u,w,g=(e[1]/1e3).toFixed(3)+"",h,k,y,M,T,p,C,A,S,F,_,I,O,X=e[10][e[2]]+"",$,re,Q,P,le,J,N,B,se,H,fe,Me,ee,Z,K,ie,ce,oe,ue,ne,Ae,Te,Ie,Ne,Pe,Se,te,ye,q=ut(e[11]),Y=[];for(let G=0;G0&&Ul(e);return{c(){l=a("div"),s=a("div"),i=a("h2"),i.textContent="Ultrabeam",o=b(),r=a("span"),f=b(),d=a("div"),v=a("div"),c=a("div"),m=a("div"),m.textContent="Frequency",u=b(),w=a("div"),h=z(g),k=z(" MHz"),y=b(),M=a("div"),T=a("div"),T.textContent="Band",p=b(),C=a("div"),A=z(e[7]),S=b(),F=a("div"),_=a("div"),_.textContent="Direction",I=b(),O=a("div"),$=z(X),re=b(),Q=a("div"),P=a("h3"),P.textContent="Auto Tracking",le=b(),J=a("div"),N=a("label"),B=a("input"),se=b(),H=a("span"),H.textContent="Enable Auto-Track from Tuner",fe=b(),Me=a("div"),ee=a("label"),ee.textContent="Threshold:",Z=b(),K=a("select");for(let G=0;G↓ + Retract Elements`,t(i,"class","svelte-t8himz"),t(r,"class","status-dot svelte-t8himz"),W(r,"disconnected",!e[9]),t(s,"class","card-header svelte-t8himz"),t(m,"class","status-label svelte-t8himz"),t(w,"class","status-value freq svelte-t8himz"),t(c,"class","status-item svelte-t8himz"),t(T,"class","status-label svelte-t8himz"),t(C,"class","status-value band svelte-t8himz"),t(M,"class","status-item svelte-t8himz"),t(_,"class","status-label svelte-t8himz"),t(O,"class","status-value direction svelte-t8himz"),t(F,"class","status-item svelte-t8himz"),t(v,"class","status-grid svelte-t8himz"),t(P,"class","svelte-t8himz"),t(B,"type","checkbox"),t(B,"class","svelte-t8himz"),t(N,"class","toggle-label svelte-t8himz"),t(ee,"for","threshold-select"),t(ee,"class","svelte-t8himz"),t(K,"id","threshold-select"),e[4]===void 0&&Nt(()=>e[22].call(K)),t(Me,"class","threshold-group svelte-t8himz"),t(J,"class","auto-track-controls svelte-t8himz"),t(oe,"class","dir-btn svelte-t8himz"),W(oe,"active",e[5]===0),t(ne,"class","dir-btn svelte-t8himz"),W(ne,"active",e[5]===1),t(Te,"class","dir-btn svelte-t8himz"),W(Te,"active",e[5]===2),t(ce,"class","direction-buttons svelte-t8himz"),t(Q,"class","control-section compact svelte-t8himz"),t(Se,"class","btn-danger"),t(Pe,"class","actions svelte-t8himz"),t(d,"class","metrics svelte-t8himz"),t(l,"class","card svelte-t8himz")},m(G,de){L(G,l,de),n(l,s),n(s,i),n(s,o),n(s,r),n(l,f),n(l,d),n(d,v),n(v,c),n(c,m),n(c,u),n(c,w),n(w,h),n(w,k),n(v,y),n(v,M),n(M,T),n(M,p),n(M,C),n(C,A),n(v,S),n(v,F),n(F,_),n(F,I),n(F,O),n(O,$),n(d,re),n(d,Q),n(Q,P),n(Q,le),n(Q,J),n(J,N),n(N,B),B.checked=e[3],n(N,se),n(N,H),n(J,fe),n(J,Me),n(Me,ee),n(Me,Z),n(Me,K);for(let V=0;V0?x?x.p(G,de):(x=Ul(G),x.c(),x.m(d,Ne)):x&&(x.d(1),x=null)},i:we,o:we,d(G){G&&E(l),Dt(Y,G),x&&x.d(),te=!1,nt(ye)}}}function Yn(e,l,s){let i,o,r,f,d,v,c,m,u,w,g,{status:h}=l,{flexradio:k=null}=l;const y=["6M","10M","12M","15M","17M","20M","30M","40M"];function M(P,le){return le>=0&&le<=7?y[le]:P>=7e3&&P<=7300?"40M":P>=10100&&P<=10150?"30M":P>=14e3&&P<=14350?"20M":P>=18068&&P<=18168?"17M":P>=21e3&&P<=21450?"15M":P>=24890&&P<=24990?"12M":P>=28e3&&P<=29700?"10M":P>=5e4&&P<=54e3?"6M":"Unknown"}const T=["Normal","180°","Bi-Dir"],p=[{value:25,label:"25 kHz"},{value:50,label:"50 kHz"},{value:100,label:"100 kHz"}];let C=!0,A=25,S=0;async function F(){if(o!==0)try{await Oe.ultrabeam.setFrequency(o,S),await Oe.ultrabeam.setDirection(S)}catch(P){console.log("Direction change sent (may show code 30 if busy):",P)}}async function _(){try{await Oe.ultrabeam.setAutoTrack(C,A)}catch(P){console.error("Failed to update auto-track:",P)}}async function I(){if(confirm("Retract all antenna elements?"))try{await Oe.ultrabeam.retract()}catch(P){console.error("Failed to retract:",P)}}function O(){C=this.checked,s(3,C)}function X(){A=tn(this),s(4,A),s(11,p)}const $=()=>{s(5,S=0),F()},re=()=>{s(5,S=1),F()},Q=()=>{s(5,S=2),F()};return e.$$set=P=>{"status"in P&&s(15,h=P.status),"flexradio"in P&&s(16,k=P.flexradio)},e.$$.update=()=>{e.$$.dirty[0]&32768&&s(9,i=(h==null?void 0:h.connected)||!1),e.$$.dirty[0]&32768&&s(1,o=(h==null?void 0:h.frequency)||0),e.$$.dirty[0]&32768&&s(18,r=(h==null?void 0:h.band)||0),e.$$.dirty[0]&32768&&s(2,f=(h==null?void 0:h.direction)||0),e.$$.dirty[0]&32768&&s(8,d=(h==null?void 0:h.motors_moving)||0),e.$$.dirty[0]&32768&&s(17,v=(h==null?void 0:h.progress_total)||0),e.$$.dirty[0]&32768&&s(0,c=(h==null?void 0:h.progress_current)||0),e.$$.dirty[0]&32768&&h!=null&&h.element_lengths,e.$$.dirty[0]&32768&&h&&`${h.firmware_major}${h.firmware_minor}`,e.$$.dirty[0]&65536&&s(20,m=(k==null?void 0:k.connected)||!1),e.$$.dirty[0]&65536&&s(19,u=(k==null?void 0:k.interlock_state)||null),e.$$.dirty[0]&524288,e.$$.dirty[0]&1638400&&k&&console.log("FlexRadio data:",{connected:k.connected,interlock_state:k.interlock_state,interlockConnected:m,interlockState:u}),e.$$.dirty[0]&262146&&s(7,w=M(o,r)),e.$$.dirty[0]&4&&s(5,S=f),e.$$.dirty[0]&262144,e.$$.dirty[0]&131073&&s(6,g=v>0?c/60*100:0)},[c,o,f,C,A,S,g,w,d,i,T,p,F,_,I,h,k,v,r,u,m,O,X,$,re,Q]}class Vn extends ht{constructor(l){super(),vt(this,l,Yn,Xn,ot,{status:15,flexradio:16},null,[-1,-1])}}function Zn(e){var zt,ge,_e,Jt,Xt,Yt,Vt,Zt,Kt,Ht,Qt;let l,s,i,o,r,f,d,v,c,m,u=e[1]?"Connected":"Disconnected",w,g,h,k,y,M,T,p=e[7].sfi+"",C,A,S,F,_,I=e[7].sunspots+"",O,X,$,re,Q,P=e[7].a_index+"",le,J,N,B,se,H=e[7].k_index+"",fe,Me,ee,Z,K,ie=e[7].geomag+"",ce,oe,ue,ne,Ae,Te,Ie=e[6].wind_speed.toFixed(1)+"",Ne,Pe,Se,te,ye,q=e[6].wind_gust.toFixed(1)+"",Y,x,G,de,V,ve=e[6].temp.toFixed(1)+"",j,be,he,Ee,Ve,Ze=e[6].feels_like.toFixed(1)+"",We,Xe,Be,Le,$e,De=Jl(e[2])+"",qe,Ke,xe,Ge=e[2].toLocaleDateString()+"",me,ze,et,mt,rt,st,Re,He,Mt,Qe,gt,tt,it,je,lt,Ye,Ue,at,Je,Fe;return et=new Fn({props:{flexradio:(zt=e[0])==null?void 0:zt.flexradio,weather:(ge=e[0])==null?void 0:ge.weather,latitude:e[4],longitude:e[5],windWarningThreshold:30,gustWarningThreshold:50}}),He=new An({props:{status:(_e=e[0])==null?void 0:_e.webswitch}}),Qe=new Dn({props:{status:(Jt=e[0])==null?void 0:Jt.power_genius}}),tt=new Rn({props:{status:(Xt=e[0])==null?void 0:Xt.tuner_genius,flexradio:(Yt=e[0])==null?void 0:Yt.flexradio}}),lt=new Gn({props:{status:(Vt=e[0])==null?void 0:Vt.antenna_genius}}),Ue=new Vn({props:{status:(Zt=e[0])==null?void 0:Zt.ultrabeam,flexradio:(Kt=e[0])==null?void 0:Kt.flexradio}}),Je=new Jn({props:{status:(Ht=e[0])==null?void 0:Ht.rotator_genius,ultrabeam:(Qt=e[0])==null?void 0:Qt.ultrabeam}}),{c(){l=a("div"),s=a("header"),i=a("div"),o=a("h1"),r=z(e[3]),f=z(" Shack"),d=b(),v=a("div"),c=a("span"),m=b(),w=z(u),g=b(),h=a("div"),k=a("div"),y=a("span"),M=z("SFI "),T=a("span"),C=z(p),A=b(),S=a("span"),F=z("Spots "),_=a("span"),O=z(I),X=b(),$=a("span"),re=z("A "),Q=a("span"),le=z(P),J=b(),N=a("span"),B=z("K "),se=a("span"),fe=z(H),Me=b(),ee=a("span"),Z=z("G "),K=a("span"),ce=z(ie),oe=b(),ue=a("div"),ne=a("div"),Ae=a("span"),Te=z("🌬️ "),Ne=z(Ie),Pe=z(" km/h"),Se=b(),te=a("span"),ye=z("💨 "),Y=z(q),x=z(" km/h"),G=b(),de=a("span"),V=z("🌡️ "),j=z(ve),be=z(" °C"),he=b(),Ee=a("span"),Ve=z("→ "),We=z(Ze),Xe=z(" °C"),Be=b(),Le=a("div"),$e=a("span"),qe=z(De),Ke=b(),xe=a("span"),me=z(Ge),ze=b(),bt(et.$$.fragment),mt=b(),rt=a("main"),st=a("div"),Re=a("div"),bt(He.$$.fragment),Mt=b(),bt(Qe.$$.fragment),gt=b(),bt(tt.$$.fragment),it=b(),je=a("div"),bt(lt.$$.fragment),Ye=b(),bt(Ue.$$.fragment),at=b(),bt(Je.$$.fragment),t(o,"class","svelte-a5dfm6"),t(c,"class","status-indicator"),W(c,"status-online",e[1]),W(c,"status-offline",!e[1]),t(v,"class","connection-status svelte-a5dfm6"),t(i,"class","header-left svelte-a5dfm6"),t(T,"class","value svelte-a5dfm6"),t(y,"class","solar-item svelte-a5dfm6"),t(_,"class","value svelte-a5dfm6"),t(S,"class","solar-item svelte-a5dfm6"),t(Q,"class","value svelte-a5dfm6"),t($,"class","solar-item svelte-a5dfm6"),t(se,"class","value svelte-a5dfm6"),t(N,"class","solar-item svelte-a5dfm6"),t(K,"class","value svelte-a5dfm6"),t(ee,"class","solar-item svelte-a5dfm6"),t(k,"class","solar-info svelte-a5dfm6"),t(h,"class","header-center svelte-a5dfm6"),t(Ae,"title","Wind"),t(te,"title","Gust"),t(de,"title","Temperature"),t(Ee,"title","Feels like"),t(ne,"class","weather-info svelte-a5dfm6"),t($e,"class","time svelte-a5dfm6"),t(xe,"class","date svelte-a5dfm6"),t(Le,"class","clock svelte-a5dfm6"),t(ue,"class","header-right svelte-a5dfm6"),t(s,"class","svelte-a5dfm6"),t(Re,"class","row svelte-a5dfm6"),t(je,"class","row svelte-a5dfm6"),t(st,"class","dashboard-grid svelte-a5dfm6"),t(rt,"class","svelte-a5dfm6"),t(l,"class","app svelte-a5dfm6")},m(U,pe){L(U,l,pe),n(l,s),n(s,i),n(i,o),n(o,r),n(o,f),n(i,d),n(i,v),n(v,c),n(v,m),n(v,w),n(s,g),n(s,h),n(h,k),n(k,y),n(y,M),n(y,T),n(T,C),n(k,A),n(k,S),n(S,F),n(S,_),n(_,O),n(k,X),n(k,$),n($,re),n($,Q),n(Q,le),n(k,J),n(k,N),n(N,B),n(N,se),n(se,fe),n(k,Me),n(k,ee),n(ee,Z),n(ee,K),n(K,ce),n(s,oe),n(s,ue),n(ue,ne),n(ne,Ae),n(Ae,Te),n(Ae,Ne),n(Ae,Pe),n(ne,Se),n(ne,te),n(te,ye),n(te,Y),n(te,x),n(ne,G),n(ne,de),n(de,V),n(de,j),n(de,be),n(ne,he),n(ne,Ee),n(Ee,Ve),n(Ee,We),n(Ee,Xe),n(ue,Be),n(ue,Le),n(Le,$e),n($e,qe),n(Le,Ke),n(Le,xe),n(xe,me),n(l,ze),dt(et,l,null),n(l,mt),n(l,rt),n(rt,st),n(st,Re),dt(He,Re,null),n(Re,Mt),dt(Qe,Re,null),n(Re,gt),dt(tt,Re,null),n(st,it),n(st,je),dt(lt,je,null),n(je,Ye),dt(Ue,je,null),n(je,at),dt(Je,je,null),Fe=!0},p(U,[pe]){var el,tl,ll,nl,sl,il,al,ol,rl,cl,dl;(!Fe||pe&8)&&R(r,U[3]),(!Fe||pe&2)&&W(c,"status-online",U[1]),(!Fe||pe&2)&&W(c,"status-offline",!U[1]),(!Fe||pe&2)&&u!==(u=U[1]?"Connected":"Disconnected")&&R(w,u),(!Fe||pe&128)&&p!==(p=U[7].sfi+"")&&R(C,p),(!Fe||pe&128)&&I!==(I=U[7].sunspots+"")&&R(O,I),(!Fe||pe&128)&&P!==(P=U[7].a_index+"")&&R(le,P),(!Fe||pe&128)&&H!==(H=U[7].k_index+"")&&R(fe,H),(!Fe||pe&128)&&ie!==(ie=U[7].geomag+"")&&R(ce,ie),(!Fe||pe&64)&&Ie!==(Ie=U[6].wind_speed.toFixed(1)+"")&&R(Ne,Ie),(!Fe||pe&64)&&q!==(q=U[6].wind_gust.toFixed(1)+"")&&R(Y,q),(!Fe||pe&64)&&ve!==(ve=U[6].temp.toFixed(1)+"")&&R(j,ve),(!Fe||pe&64)&&Ze!==(Ze=U[6].feels_like.toFixed(1)+"")&&R(We,Ze),(!Fe||pe&4)&&De!==(De=Jl(U[2])+"")&&R(qe,De),(!Fe||pe&4)&&Ge!==(Ge=U[2].toLocaleDateString()+"")&&R(me,Ge);const Tt={};pe&1&&(Tt.flexradio=(el=U[0])==null?void 0:el.flexradio),pe&1&&(Tt.weather=(tl=U[0])==null?void 0:tl.weather),pe&16&&(Tt.latitude=U[4]),pe&32&&(Tt.longitude=U[5]),et.$set(Tt);const qt={};pe&1&&(qt.status=(ll=U[0])==null?void 0:ll.webswitch),He.$set(qt);const xt={};pe&1&&(xt.status=(nl=U[0])==null?void 0:nl.power_genius),Qe.$set(xt);const Et={};pe&1&&(Et.status=(sl=U[0])==null?void 0:sl.tuner_genius),pe&1&&(Et.flexradio=(il=U[0])==null?void 0:il.flexradio),tt.$set(Et);const $t={};pe&1&&($t.status=(al=U[0])==null?void 0:al.antenna_genius),lt.$set($t);const Lt={};pe&1&&(Lt.status=(ol=U[0])==null?void 0:ol.ultrabeam),pe&1&&(Lt.flexradio=(rl=U[0])==null?void 0:rl.flexradio),Ue.$set(Lt);const Rt={};pe&1&&(Rt.status=(cl=U[0])==null?void 0:cl.rotator_genius),pe&1&&(Rt.ultrabeam=(dl=U[0])==null?void 0:dl.ultrabeam),Je.$set(Rt)},i(U){Fe||(ct(et.$$.fragment,U),ct(He.$$.fragment,U),ct(Qe.$$.fragment,U),ct(tt.$$.fragment,U),ct(lt.$$.fragment,U),ct(Ue.$$.fragment,U),ct(Je.$$.fragment,U),Fe=!0)},o(U){pt(et.$$.fragment,U),pt(He.$$.fragment,U),pt(Qe.$$.fragment,U),pt(tt.$$.fragment,U),pt(lt.$$.fragment,U),pt(Ue.$$.fragment,U),pt(Je.$$.fragment,U),Fe=!1},d(U){U&&E(l),ft(et),ft(He),ft(Qe),ft(tt),ft(lt),ft(Ue),ft(Je)}}}function Jl(e){return e.toTimeString().slice(0,8)}function Kn(e,l,s){let i,o,r=null,f=!1,d=new Date,v="F4BPO",c=null,m=null;const u=Ql.subscribe(g=>{s(0,r=g)}),w=jt.subscribe(g=>{s(1,f=g)});return Zl(async()=>{hl.connect();try{const h=await Oe.getConfig();h.callsign&&s(3,v=h.callsign),h.location&&(s(4,c=h.location.latitude),s(5,m=h.location.longitude))}catch(h){console.error("Failed to fetch config:",h)}const g=setInterval(()=>{s(2,d=new Date)},1e3);return()=>{clearInterval(g)}}),Kl(()=>{hl.disconnect(),u(),w()}),e.$$.update=()=>{e.$$.dirty&1&&s(7,i=(r==null?void 0:r.solar)||{sfi:0,sunspots:0,a_index:0,k_index:0,geomag:"Unknown"}),e.$$.dirty&1&&s(6,o=(r==null?void 0:r.weather)||{wind_speed:0,wind_gust:0,temp:0,feels_like:0})},[r,f,d,v,c,m,o,i]}class Hn extends ht{constructor(l){super(),vt(this,l,Kn,Zn,ot,{})}}new Hn({target:document.getElementById("app")}); diff --git a/cmd/server/web/dist/index.html b/cmd/server/web/dist/index.html index 07e4270..c9ae829 100644 --- a/cmd/server/web/dist/index.html +++ b/cmd/server/web/dist/index.html @@ -7,8 +7,8 @@ - - + +
diff --git a/web/src/App.svelte b/web/src/App.svelte index 9f0e9c6..e3a1791 100644 --- a/web/src/App.svelte +++ b/web/src/App.svelte @@ -282,6 +282,7 @@ display: flex; gap: 24px; flex-wrap: wrap; + align-items: stretch; } .row > :global(*) { diff --git a/web/src/components/AntennaGenius.svelte b/web/src/components/AntennaGenius.svelte index f6f055b..f0ffe10 100644 --- a/web/src/components/AntennaGenius.svelte +++ b/web/src/components/AntennaGenius.svelte @@ -148,6 +148,9 @@ padding: 0; overflow: hidden; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.3); + height: 100%; + display: flex; + flex-direction: column; } .card-header { @@ -185,6 +188,7 @@ display: flex; flex-direction: column; gap: 12px; + flex: 1; } /* Sources */ diff --git a/web/src/components/PowerGenius.svelte b/web/src/components/PowerGenius.svelte index b0a25f0..8200011 100644 --- a/web/src/components/PowerGenius.svelte +++ b/web/src/components/PowerGenius.svelte @@ -151,6 +151,9 @@ padding: 0; overflow: hidden; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.3); + height: 100%; + display: flex; + flex-direction: column; } .card-header { @@ -222,6 +225,7 @@ display: flex; flex-direction: column; gap: 10px; + flex: 1; } /* Power Display */ diff --git a/web/src/components/RotatorGenius.svelte b/web/src/components/RotatorGenius.svelte index b95c461..6cec8e9 100644 --- a/web/src/components/RotatorGenius.svelte +++ b/web/src/components/RotatorGenius.svelte @@ -368,6 +368,9 @@ padding: 0; overflow: hidden; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.3); + height: 100%; + display: flex; + flex-direction: column; } .card-header { @@ -405,6 +408,7 @@ display: flex; flex-direction: column; gap: 10px; + flex: 1; } .heading-controls-row { @@ -549,4 +553,4 @@ font-size: 12px; font-weight: 600; } - + \ No newline at end of file diff --git a/web/src/components/StatusBanner.svelte b/web/src/components/StatusBanner.svelte index 51747f6..04da3a7 100644 --- a/web/src/components/StatusBanner.svelte +++ b/web/src/components/StatusBanner.svelte @@ -508,11 +508,6 @@ 50% { opacity: 0.6; } } - .slice-waiting { - color: #fbbf24; /* Jaune pour "en attente" */ - animation: pulse 1.5s infinite; -} - /* Radio status indicators */ .radio-status { display: flex; diff --git a/web/src/components/TunerGenius.svelte b/web/src/components/TunerGenius.svelte index 558ee24..35894b1 100644 --- a/web/src/components/TunerGenius.svelte +++ b/web/src/components/TunerGenius.svelte @@ -140,6 +140,9 @@ padding: 0; overflow: hidden; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.3); + height: 100%; + display: flex; + flex-direction: column; } .card-header { @@ -205,6 +208,7 @@ display: flex; flex-direction: column; gap: 10px; + flex: 1; } /* Power Display */ @@ -377,6 +381,7 @@ display: grid; grid-template-columns: 1fr 1fr; gap: 8px; + flex: 1; } .control-btn { diff --git a/web/src/components/Ultrabeam.svelte b/web/src/components/Ultrabeam.svelte index 4ecb926..d319733 100644 --- a/web/src/components/Ultrabeam.svelte +++ b/web/src/components/Ultrabeam.svelte @@ -163,10 +163,8 @@

Ultrabeam VL2.3

-
-
@@ -323,20 +321,24 @@ + \ No newline at end of file diff --git a/web/src/components/WebSwitch.svelte b/web/src/components/WebSwitch.svelte index 65e1506..cb159af 100644 --- a/web/src/components/WebSwitch.svelte +++ b/web/src/components/WebSwitch.svelte @@ -106,6 +106,9 @@ padding: 0; overflow: hidden; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.3); + height: 100%; + display: flex; + flex-direction: column; } .card-header { @@ -143,6 +146,7 @@ display: flex; flex-direction: column; gap: 12px; + flex: 1; } /* Relays */ @@ -253,6 +257,7 @@ grid-template-columns: 1fr 1fr; gap: 8px; margin-top: 8px; + flex: 1; } .control-btn {