diff --git a/repeater/templates/nav.html b/repeater/templates/nav.html index dc35fad..9eb248b 100644 --- a/repeater/templates/nav.html +++ b/repeater/templates/nav.html @@ -225,8 +225,114 @@ margin-left: 0.125rem; } - /* Remove noise floor bar styling */ - .noise-floor-bar-container, .noise-floor-bar { display: none !important; } + /* Control button styling */ + .control-buttons { + display: flex; + flex-direction: column; + gap: var(--spacing-sm); + margin-bottom: var(--spacing-md); + } + + .control-btn { + display: flex; + align-items: center; + gap: var(--spacing-sm); + padding: var(--spacing-sm); + background: rgba(255, 255, 255, 0.05); + border: 1px solid rgba(255, 255, 255, 0.1); + border-radius: 6px; + color: #d4d4d4; + cursor: pointer; + transition: all 0.2s; + font-size: 0.875rem; + } + + .control-btn:hover { + background: rgba(255, 255, 255, 0.1); + border-color: rgba(255, 255, 255, 0.2); + } + + .control-btn.control-btn-active { + background: rgba(16, 185, 129, 0.1); + border-color: rgba(16, 185, 129, 0.3); + color: #10b981; + } + + .control-btn.control-btn-warning { + background: rgba(217, 119, 6, 0.1); + border-color: rgba(217, 119, 6, 0.3); + color: #d97706; + } + + .control-btn .icon { + width: 18px; + height: 18px; + flex-shrink: 0; + } + + .control-label { + display: flex; + flex-direction: column; + align-items: flex-start; + flex-grow: 1; + } + + .control-title { + font-weight: 500; + font-size: 0.875rem; + } + + .control-value { + font-size: 0.75rem; + opacity: 0.8; + } + + /* Duty cycle stats styling */ + .duty-cycle-stats { + margin-bottom: var(--spacing-md); + } + + .duty-cycle-bar-container { + width: 100%; + height: 4px; + background-color: rgba(255, 255, 255, 0.1); + border-radius: 2px; + overflow: hidden; + margin-bottom: var(--spacing-xs); + } + + .duty-cycle-bar { + height: 100%; + background-color: #4ade80; + border-radius: 2px; + transition: all 0.3s ease; + width: 0%; + } + + .duty-cycle-text { + color: #8b949e; + font-size: 0.75rem; + } + + /* Status and version badges */ + .status-badge, .version-badge { + padding: 2px 6px; + border-radius: 4px; + font-size: 0.75rem; + font-weight: 500; + text-transform: uppercase; + letter-spacing: 0.025em; + } + + .status-badge { + background-color: #10b981; + color: #ffffff; + } + + .version-badge { + background-color: rgba(255, 255, 255, 0.1); + color: #8b949e; + } /* Color states for noise floor value */ #noise-floor-value.excellent { @@ -320,18 +426,11 @@ // Update noise floor const noiseFloor = data.noise_floor_dbm; const noiseFloorValue = document.getElementById('noise-floor-value'); - const noiseFloorBar = document.getElementById('noise-floor-bar'); if (noiseFloor !== null && noiseFloor !== undefined) { // Display noise floor value noiseFloorValue.textContent = noiseFloor.toFixed(1); - // Calculate bar width (map -120 to -80 dBm range to 0-100%) - const minDbm = -120; - const maxDbm = -80; - const percentage = Math.min(Math.max((noiseFloor - minDbm) / (maxDbm - minDbm) * 100, 0), 100); - noiseFloorBar.style.width = percentage + '%'; - // Color code based on noise level noiseFloorValue.className = ''; if (noiseFloor < -115) { @@ -352,7 +451,6 @@ renderNoiseFloorSparkline(); } else { noiseFloorValue.textContent = '--'; - noiseFloorBar.style.width = '0%'; noiseFloorValue.className = ''; // Sparkline: clear if no data noiseFloorHistory.length = 0;