From 5e9fcc5c49b66435550176931697d981220b6137 Mon Sep 17 00:00:00 2001 From: Smittix Date: Mon, 16 Feb 2026 23:29:05 +0000 Subject: [PATCH] feat: Switch application font to Roboto Condensed Replace IBM Plex Mono, Space Mono, and JetBrains Mono with Roboto Condensed across all CSS variables, inline styles, canvas ctx.font references, and Google Fonts CDN links. Updates 28 files covering templates, stylesheets, and JS modules for consistent typography. Co-Authored-By: Claude Opus 4.6 --- static/css/adsb_dashboard.css | 4 +- static/css/adsb_history.css | 4 +- static/css/ais_dashboard.css | 12 +- static/css/core/variables.css | 4 +- static/css/fonts-local.css | 19 +-- static/css/global-nav.css | 2 +- static/css/help-modal.css | 6 +- static/css/index.css | 8 +- static/css/modes/subghz.css | 114 +++++++++--------- static/css/modes/weather-satellite.css | 44 +++---- static/css/satellite_dashboard.css | 4 +- static/js/core/app.js | 4 +- static/js/core/settings-manager.js | 4 +- static/js/modes/gps.js | 8 +- static/js/modes/listening-post.js | 2 +- static/js/modes/spy-stations.js | 2 +- static/js/modes/subghz.js | 4 +- static/js/modes/weather-satellite.js | 8 +- templates/adsb_dashboard.html | 8 +- templates/adsb_history.html | 8 +- templates/ais_dashboard.html | 2 +- templates/index.html | 26 ++-- templates/layout/base.html | 8 +- templates/network_monitor.html | 6 +- templates/partials/modes/subghz.html | 8 +- .../partials/modes/weather-satellite.html | 10 +- templates/partials/settings-modal.html | 4 +- templates/satellite_dashboard.html | 10 +- 28 files changed, 160 insertions(+), 183 deletions(-) diff --git a/static/css/adsb_dashboard.css b/static/css/adsb_dashboard.css index 170820d..4009113 100644 --- a/static/css/adsb_dashboard.css +++ b/static/css/adsb_dashboard.css @@ -5,8 +5,8 @@ } :root { - --font-sans: 'IBM Plex Mono', 'Space Mono', ui-monospace, 'SF Mono', 'Consolas', 'Menlo', monospace; - --font-mono: 'IBM Plex Mono', 'Space Mono', ui-monospace, 'SF Mono', 'Consolas', 'Menlo', monospace; + --font-sans: 'Roboto Condensed', 'Arial Narrow', Roboto, 'Helvetica Neue', Arial, sans-serif; + --font-mono: 'Roboto Condensed', 'Arial Narrow', Roboto, 'Helvetica Neue', Arial, sans-serif; --bg-dark: #0b1118; --bg-panel: #101823; --bg-card: #151f2b; diff --git a/static/css/adsb_history.css b/static/css/adsb_history.css index 397747d..45b3512 100644 --- a/static/css/adsb_history.css +++ b/static/css/adsb_history.css @@ -5,8 +5,8 @@ } :root { - --font-sans: 'IBM Plex Mono', 'Space Mono', ui-monospace, 'SF Mono', 'Consolas', 'Menlo', monospace; - --font-mono: 'IBM Plex Mono', 'Space Mono', ui-monospace, 'SF Mono', 'Consolas', 'Menlo', monospace; + --font-sans: 'Roboto Condensed', 'Arial Narrow', Roboto, 'Helvetica Neue', Arial, sans-serif; + --font-mono: 'Roboto Condensed', 'Arial Narrow', Roboto, 'Helvetica Neue', Arial, sans-serif; --bg-dark: #0b1118; --bg-panel: #101823; --bg-card: #151f2b; diff --git a/static/css/ais_dashboard.css b/static/css/ais_dashboard.css index 319b08a..b69642b 100644 --- a/static/css/ais_dashboard.css +++ b/static/css/ais_dashboard.css @@ -8,8 +8,8 @@ } :root { - --font-sans: 'IBM Plex Mono', 'Space Mono', ui-monospace, 'SF Mono', 'Consolas', 'Menlo', monospace; - --font-mono: 'IBM Plex Mono', 'Space Mono', ui-monospace, 'SF Mono', 'Consolas', 'Menlo', monospace; + --font-sans: 'Roboto Condensed', 'Arial Narrow', Roboto, 'Helvetica Neue', Arial, sans-serif; + --font-mono: 'Roboto Condensed', 'Arial Narrow', Roboto, 'Helvetica Neue', Arial, sans-serif; --bg-dark: #0b1118; --bg-panel: #101823; --bg-card: #151f2b; @@ -496,7 +496,7 @@ body { padding: 10px 15px; background: rgba(74, 158, 255, 0.05); border-bottom: 1px solid rgba(74, 158, 255, 0.1); - font-family: 'Orbitron', 'Space Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 11px; font-weight: 500; letter-spacing: 2px; @@ -568,7 +568,7 @@ body { } .vessel-name { - font-family: 'Orbitron', 'Space Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 16px; font-weight: 700; color: var(--accent-cyan); @@ -662,7 +662,7 @@ body { } .vessel-item-name { - font-family: 'Orbitron', 'Space Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 12px; font-weight: 600; color: var(--accent-cyan); @@ -1223,7 +1223,7 @@ body { } .dsc-distress-alert .dsc-alert-header { - font-family: 'Orbitron', 'Space Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 24px; font-weight: 700; color: var(--accent-red); diff --git a/static/css/core/variables.css b/static/css/core/variables.css index 06942b6..930d55c 100644 --- a/static/css/core/variables.css +++ b/static/css/core/variables.css @@ -78,8 +78,8 @@ /* ============================================ TYPOGRAPHY ============================================ */ - --font-sans: 'IBM Plex Mono', 'Space Mono', ui-monospace, 'SF Mono', 'Consolas', 'Menlo', monospace; - --font-mono: 'IBM Plex Mono', 'Space Mono', ui-monospace, 'SF Mono', 'Consolas', 'Menlo', monospace; + --font-sans: 'Roboto Condensed', 'Arial Narrow', Roboto, 'Helvetica Neue', Arial, sans-serif; + --font-mono: 'Roboto Condensed', 'Arial Narrow', Roboto, 'Helvetica Neue', Arial, sans-serif; /* Font sizes */ --text-xs: 10px; diff --git a/static/css/fonts-local.css b/static/css/fonts-local.css index ed3c9e6..30fd2c5 100644 --- a/static/css/fonts-local.css +++ b/static/css/fonts-local.css @@ -1,18 +1,3 @@ /* Local font declarations for offline mode */ - -/* Space Mono - Console font */ -@font-face { - font-family: 'Space Mono'; - font-style: normal; - font-weight: 400; - font-display: swap; - src: url('/static/vendor/fonts/SpaceMono-Regular.woff2') format('woff2'); -} - -@font-face { - font-family: 'Space Mono'; - font-style: normal; - font-weight: 700; - font-display: swap; - src: url('/static/vendor/fonts/SpaceMono-Bold.woff2') format('woff2'); -} +/* Note: Roboto Condensed local files not yet bundled - this is a placeholder */ +/* Font is loaded via Google Fonts CDN; offline mode will fall back to Arial Narrow / system sans-serif */ diff --git a/static/css/global-nav.css b/static/css/global-nav.css index c3951e5..ccccd64 100644 --- a/static/css/global-nav.css +++ b/static/css/global-nav.css @@ -434,6 +434,6 @@ a.nav-dashboard-btn:hover { } .nav-dashboard-btn .nav-label { - font-family: var(--font-mono, 'JetBrains Mono', monospace); + font-family: var(--font-mono, 'Roboto Condensed', 'Arial Narrow', sans-serif); letter-spacing: 0.5px; } diff --git a/static/css/help-modal.css b/static/css/help-modal.css index 51b0a16..dc6c406 100644 --- a/static/css/help-modal.css +++ b/static/css/help-modal.css @@ -14,7 +14,7 @@ z-index: 10000; overflow-y: auto; padding: 40px 20px; - font-family: var(--font-mono, 'IBM Plex Mono', 'Space Mono', ui-monospace, monospace); + font-family: var(--font-mono, 'Roboto Condensed', 'Arial Narrow', sans-serif); } .help-modal.active { @@ -155,7 +155,7 @@ border: none; color: var(--text-secondary, #9ca3af); cursor: pointer; - font-family: var(--font-mono, 'IBM Plex Mono', 'Space Mono', ui-monospace, monospace); + font-family: var(--font-mono, 'Roboto Condensed', 'Arial Narrow', sans-serif); font-size: 10px; text-transform: uppercase; letter-spacing: 1px; @@ -200,7 +200,7 @@ background: var(--bg-tertiary, #151a23); padding: 1px 5px; border-radius: 3px; - font-family: var(--font-mono, 'IBM Plex Mono', 'Space Mono', ui-monospace, monospace); + font-family: var(--font-mono, 'Roboto Condensed', 'Arial Narrow', sans-serif); font-size: 10.5px; color: var(--accent-cyan, #4a9eff); } diff --git a/static/css/index.css b/static/css/index.css index 413ffee..d15f773 100644 --- a/static/css/index.css +++ b/static/css/index.css @@ -5,8 +5,8 @@ } :root { - --font-sans: 'IBM Plex Mono', 'Space Mono', ui-monospace, 'SF Mono', 'Consolas', 'Menlo', monospace; - --font-mono: 'IBM Plex Mono', 'Space Mono', ui-monospace, 'SF Mono', 'Consolas', 'Menlo', monospace; + --font-sans: 'Roboto Condensed', 'Arial Narrow', Roboto, 'Helvetica Neue', Arial, sans-serif; + --font-mono: 'Roboto Condensed', 'Arial Narrow', Roboto, 'Helvetica Neue', Arial, sans-serif; /* Tactical dark palette */ --bg-primary: #0b1118; --bg-secondary: #101823; @@ -6372,7 +6372,7 @@ body::before { } .module-header { - font-family: 'Orbitron', 'Space Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 10px; font-weight: 600; color: var(--accent-cyan); @@ -6550,7 +6550,7 @@ body::before { /* Listening Mode Selector Buttons */ .radio-mode-btn { padding: 12px 24px; - font-family: 'Orbitron', 'Space Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 13px; font-weight: 600; text-transform: uppercase; diff --git a/static/css/modes/subghz.css b/static/css/modes/subghz.css index 157e9fa..6fca8a2 100644 --- a/static/css/modes/subghz.css +++ b/static/css/modes/subghz.css @@ -5,7 +5,7 @@ padding: 8px 10px; background: var(--bg-tertiary, #1a1f2e); border-radius: 4px; - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 11px; } @@ -86,7 +86,7 @@ border-radius: 4px; background: var(--bg-tertiary, #1a1f2e); color: var(--text-primary, #e0e0e0); - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 11px; cursor: pointer; transition: background 0.15s, border-color 0.15s; @@ -113,7 +113,7 @@ border-bottom: 2px solid transparent; background: transparent; color: var(--text-dim, #666); - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 11px; text-transform: uppercase; cursor: pointer; @@ -153,7 +153,7 @@ display: inline-flex; align-items: center; gap: 7px; - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 10px; color: var(--text-secondary, #999); text-transform: uppercase; @@ -168,7 +168,7 @@ } .subghz-trigger-grid label { - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 9px; color: var(--text-dim, #666); text-transform: uppercase; @@ -182,7 +182,7 @@ border-radius: 4px; background: var(--bg-primary, #0d1117); color: var(--text-primary, #e0e0e0); - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 10px; } @@ -192,7 +192,7 @@ .subghz-trigger-help { margin: 0; - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 9px; color: var(--text-dim, #666); line-height: 1.4; @@ -207,7 +207,7 @@ background: var(--bg-tertiary, #1a1f2e); border-radius: 4px; margin-bottom: 10px; - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 11px; } @@ -264,7 +264,7 @@ border-radius: 4px; background: transparent; color: var(--text-primary, #e0e0e0); - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 12px; cursor: pointer; transition: background 0.15s, border-color 0.15s; @@ -369,7 +369,7 @@ background: var(--bg-tertiary, #1a1f2e); border: 1px solid var(--border-color, #2a3040); border-radius: 4px; - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 11px; min-width: 0; transition: border-color 0.15s, box-shadow 0.15s, background 0.15s; @@ -416,7 +416,7 @@ display: inline-flex; align-items: center; gap: 8px; - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 9px; text-transform: uppercase; letter-spacing: 0.5px; @@ -446,7 +446,7 @@ padding: 1px 6px; border-radius: 999px; border: 1px solid var(--border-color, #2a3040); - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 9px; letter-spacing: 0.35px; color: var(--text-dim, #666); @@ -512,7 +512,7 @@ color: var(--text-dim, #666); font-size: 10px; cursor: pointer; - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; } .subghz-capture-actions button:hover { @@ -554,7 +554,7 @@ border-radius: 4px; color: var(--accent-red, #ff4444); font-size: 10px; - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; line-height: 1.4; margin-bottom: 8px; } @@ -591,7 +591,7 @@ border-radius: 6px; padding: 12px; overflow-y: auto; - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 12px; color: var(--text-primary, #e0e0e0); min-height: 200px; @@ -695,12 +695,12 @@ .subghz-tx-modal .tx-freq { color: var(--accent-cyan, #00d4ff); font-weight: 600; - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; } .subghz-tx-modal .tx-duration { color: var(--text-dim, #666); - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; } .subghz-tx-segment-box { @@ -742,7 +742,7 @@ border-radius: 4px; background: var(--bg-primary, #0d1117); color: var(--text-primary, #e0e0e0); - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 11px; } @@ -755,7 +755,7 @@ margin-bottom: 0 !important; font-size: 11px !important; color: var(--accent-cyan, #00d4ff) !important; - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; } .subghz-tx-burst-assist { @@ -768,7 +768,7 @@ } .subghz-tx-burst-title { - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 10px; color: var(--text-dim, #666); text-transform: uppercase; @@ -805,7 +805,7 @@ .subghz-tx-burst-range { margin: 0 0 8px 0; - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 10px; color: var(--accent-cyan, #00d4ff); } @@ -839,7 +839,7 @@ padding: 6px; border: 1px dashed var(--border-color, #2a3040); border-radius: 4px; - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 10px; color: var(--text-dim, #666); line-height: 1.4; @@ -854,7 +854,7 @@ border: 1px solid var(--border-color, #2a3040); border-radius: 4px; background: rgba(0, 0, 0, 0.15); - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 10px; color: var(--text-secondary, #999); } @@ -865,7 +865,7 @@ border-radius: 3px; background: transparent; color: #00d4ff; - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 10px; cursor: pointer; } @@ -884,7 +884,7 @@ .subghz-tx-modal-actions button { padding: 8px 20px; border-radius: 4px; - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 12px; cursor: pointer; border: 1px solid; @@ -926,7 +926,7 @@ color: var(--text-dim, #666); font-size: 12px; padding: 24px 12px; - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; } .subghz-captures-list-main .subghz-empty { @@ -943,7 +943,7 @@ border: 1px solid #2a3040; border-radius: 4px; padding: 5px 9px; - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 11px; z-index: 9999; display: none; @@ -970,7 +970,7 @@ min-width: 180px; padding: 4px 0; box-shadow: 0 6px 20px rgba(0, 0, 0, 0.6); - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 11px; } @@ -1029,7 +1029,7 @@ border-radius: 3px; background: transparent; color: var(--text-primary, #e0e0e0); - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 10px; cursor: pointer; transition: background 0.12s, border-color 0.12s, color 0.12s; @@ -1068,7 +1068,7 @@ content: 'No peaks detected'; color: var(--text-dim, #666); font-size: 10px; - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; padding: 6px 0; text-align: center; } @@ -1082,7 +1082,7 @@ border: 1px solid var(--border-color, #2a3040); border-radius: 3px; cursor: pointer; - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 10px; transition: border-color 0.12s; } @@ -1108,7 +1108,7 @@ border: 1px solid var(--border-color, #2a3040); border-radius: 6px; padding: 6px 12px; - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 11px; flex-shrink: 0; flex-wrap: wrap; @@ -1192,7 +1192,7 @@ border-radius: 3px; background: transparent; color: #22c55e; - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 10px; cursor: pointer; text-transform: uppercase; @@ -1211,7 +1211,7 @@ padding: 2px 8px; border: 1px solid var(--border-color, #2a3040); border-radius: 3px; - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 10px; color: var(--text-secondary, #999); letter-spacing: 0.3px; @@ -1263,7 +1263,7 @@ display: flex; align-items: center; gap: 6px; - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 10px; } @@ -1300,7 +1300,7 @@ border-radius: 999px; margin-left: auto; margin-right: 8px; - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 10px; color: var(--text-dim, #666); background: rgba(0, 0, 0, 0.15); @@ -1365,7 +1365,7 @@ padding: 6px 12px; overflow-y: auto; max-height: 114px; - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 10px; line-height: 1.6; } @@ -1402,7 +1402,7 @@ } .subghz-hub-header-title { - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 20px; font-weight: 700; color: var(--accent-cyan, #00d4ff); @@ -1410,7 +1410,7 @@ } .subghz-hub-header-sub { - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 11px; color: var(--text-dim, #666); margin-top: 2px; @@ -1472,14 +1472,14 @@ } .subghz-hub-title { - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 14px; font-weight: 600; color: var(--text-primary, #e0e0e0); } .subghz-hub-desc { - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 10px; color: var(--text-dim, #666); } @@ -1526,7 +1526,7 @@ } .subghz-saved-selection-count { - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 10px; color: var(--accent-cyan, #00d4ff); margin-right: 4px; @@ -1538,7 +1538,7 @@ border-radius: 4px; background: transparent; color: var(--text-secondary, #999); - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 11px; cursor: pointer; transition: border-color 0.15s, color 0.15s; @@ -1550,7 +1550,7 @@ } .subghz-op-panel-title { - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 12px; color: var(--text-primary, #e0e0e0); text-transform: uppercase; @@ -1620,7 +1620,7 @@ display: flex; align-items: center; gap: 8px; - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 14px; font-weight: 600; color: var(--accent-red, #ff4444); @@ -1654,14 +1654,14 @@ } .subghz-rx-info-label { - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 9px; color: var(--text-dim, #666); letter-spacing: 0.5px; } .subghz-rx-info-value { - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 16px; font-weight: 600; color: var(--text-primary, #e0e0e0); @@ -1688,7 +1688,7 @@ border: 1px solid var(--border-color, #2a3040); border-radius: 4px; background: rgba(0, 0, 0, 0.22); - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; } .subghz-rx-hint-label { @@ -1722,7 +1722,7 @@ padding: 2px 8px; border: 1px solid var(--border-color, #2a3040); border-radius: 999px; - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 10px; color: var(--text-dim, #666); background: rgba(0, 0, 0, 0.2); @@ -1741,7 +1741,7 @@ } .subghz-rx-level-label { - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 9px; color: var(--text-dim, #666); letter-spacing: 0.5px; @@ -1772,7 +1772,7 @@ } .subghz-rx-scope-label { - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 9px; color: var(--text-dim, #666); letter-spacing: 0.5px; @@ -1832,7 +1832,7 @@ display: flex; align-items: center; gap: 6px; - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 9px; color: var(--text-dim, #666); letter-spacing: 0.4px; @@ -1854,7 +1854,7 @@ border-radius: 4px; background: transparent; color: var(--text-secondary, #999); - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 10px; cursor: pointer; transition: border-color 0.15s, color 0.15s, background 0.15s; @@ -1938,7 +1938,7 @@ } .subghz-tx-label { - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 14px; font-weight: 600; color: var(--accent-red, #ff4444); @@ -1958,14 +1958,14 @@ } .subghz-tx-info-label { - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 9px; color: var(--text-dim, #666); letter-spacing: 0.5px; } .subghz-tx-info-value { - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 16px; font-weight: 600; color: var(--text-primary, #e0e0e0); @@ -1998,7 +1998,7 @@ } .subghz-sweep-peaks-title { - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 10px; color: var(--text-dim, #666); text-transform: uppercase; diff --git a/static/css/modes/weather-satellite.css b/static/css/modes/weather-satellite.css index 940b5f9..a1f3392 100644 --- a/static/css/modes/weather-satellite.css +++ b/static/css/modes/weather-satellite.css @@ -49,7 +49,7 @@ .wxsat-strip-status-text { font-size: 12px; color: var(--text-secondary, #999); - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; } .wxsat-strip-btn { @@ -59,7 +59,7 @@ background: transparent; color: var(--text-primary, #e0e0e0); font-size: 11px; - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; cursor: pointer; transition: all 0.2s; } @@ -92,7 +92,7 @@ .wxsat-strip-value { font-size: 13px; - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; color: var(--text-primary, #e0e0e0); } @@ -114,7 +114,7 @@ gap: 6px; cursor: pointer; font-size: 10px; - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; color: var(--text-dim, #666); text-transform: uppercase; letter-spacing: 0.5px; @@ -146,7 +146,7 @@ border-radius: 3px; color: var(--text-primary, #e0e0e0); font-size: 11px; - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; } .wxsat-loc-input:focus { @@ -225,7 +225,7 @@ .wxsat-cd-value { font-size: 16px; font-weight: 700; - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; color: var(--text-primary, #e0e0e0); line-height: 1; } @@ -248,13 +248,13 @@ font-size: 12px; font-weight: 600; color: var(--accent-cyan, #00d4ff); - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; } .wxsat-countdown-detail { font-size: 10px; color: var(--text-dim, #666); - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; } /* ===== Timeline ===== */ @@ -314,7 +314,7 @@ justify-content: space-between; font-size: 8px; color: var(--text-dim, #666); - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; } /* ===== Pass Predictions Panel ===== */ @@ -349,7 +349,7 @@ .wxsat-passes-count { font-size: 11px; color: var(--accent-cyan, #00d4ff); - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; } .wxsat-passes-list { @@ -387,7 +387,7 @@ background: rgba(255, 187, 0, 0.15); color: #ffbb00; margin-left: 6px; - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; text-transform: uppercase; letter-spacing: 0.5px; } @@ -409,7 +409,7 @@ font-size: 10px; padding: 2px 6px; border-radius: 3px; - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; } .wxsat-pass-mode.apt { @@ -428,7 +428,7 @@ gap: 4px; font-size: 11px; color: var(--text-dim, #666); - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; } .wxsat-pass-detail-label { @@ -499,7 +499,7 @@ .wxsat-panel-subtitle { font-size: 10px; color: var(--accent-cyan, #00d4ff); - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; } #wxsatPolarCanvas { @@ -547,7 +547,7 @@ .wxsat-gallery-count { font-size: 11px; color: var(--accent-cyan, #00d4ff); - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; } .wxsat-gallery-grid { @@ -636,7 +636,7 @@ .wxsat-image-product { font-size: 10px; color: var(--accent-cyan, #00d4ff); - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; } .wxsat-image-timestamp { @@ -649,7 +649,7 @@ .wxsat-date-header { grid-column: 1 / -1; font-size: 11px; - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; color: var(--text-dim, #666); text-transform: uppercase; letter-spacing: 0.5px; @@ -708,7 +708,7 @@ .wxsat-capture-message { font-size: 11px; color: var(--text-secondary, #999); - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; @@ -719,7 +719,7 @@ .wxsat-capture-elapsed { font-size: 11px; color: var(--text-dim, #666); - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; flex-shrink: 0; } @@ -785,7 +785,7 @@ border-radius: 4px; color: var(--text-secondary, #999); font-size: 12px; - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; text-align: center; } @@ -941,7 +941,7 @@ display: flex; align-items: center; gap: 4px; - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; } .wxsat-phase-step { @@ -1012,7 +1012,7 @@ max-height: 160px; padding: 6px 12px; background: var(--bg-primary, #0d1117); - font-family: 'JetBrains Mono', monospace; + font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 10px; line-height: 1.6; } diff --git a/static/css/satellite_dashboard.css b/static/css/satellite_dashboard.css index 8a83aed..f3a691f 100644 --- a/static/css/satellite_dashboard.css +++ b/static/css/satellite_dashboard.css @@ -5,8 +5,8 @@ } :root { - --font-sans: 'IBM Plex Mono', 'Space Mono', ui-monospace, 'SF Mono', 'Consolas', 'Menlo', monospace; - --font-mono: 'IBM Plex Mono', 'Space Mono', ui-monospace, 'SF Mono', 'Consolas', 'Menlo', monospace; + --font-sans: 'Roboto Condensed', 'Arial Narrow', Roboto, 'Helvetica Neue', Arial, sans-serif; + --font-mono: 'Roboto Condensed', 'Arial Narrow', Roboto, 'Helvetica Neue', Arial, sans-serif; --bg-dark: #0b1118; --bg-panel: #101823; --bg-card: #151f2b; diff --git a/static/js/core/app.js b/static/js/core/app.js index 820ee7c..6eaf918 100644 --- a/static/js/core/app.js +++ b/static/js/core/app.js @@ -373,7 +373,7 @@ function showInfo(text) { const infoEl = document.createElement('div'); infoEl.className = 'info-msg'; - infoEl.style.cssText = 'padding: 12px 15px; margin-bottom: 8px; background: #0a0a0a; border: 1px solid #1a1a1a; border-left: 2px solid #00d4ff; font-family: "Space Mono", monospace; font-size: 11px; color: #888; word-break: break-all;'; + infoEl.style.cssText = 'padding: 12px 15px; margin-bottom: 8px; background: #0a0a0a; border: 1px solid #1a1a1a; border-left: 2px solid #00d4ff; font-family: "Roboto Condensed", "Arial Narrow", sans-serif; font-size: 11px; color: #888; word-break: break-all;'; infoEl.textContent = text; output.insertBefore(infoEl, output.firstChild); } @@ -387,7 +387,7 @@ function showError(text) { const errorEl = document.createElement('div'); errorEl.className = 'error-msg'; - errorEl.style.cssText = 'padding: 12px 15px; margin-bottom: 8px; background: #1a0a0a; border: 1px solid #2a1a1a; border-left: 2px solid #ff3366; font-family: "Space Mono", monospace; font-size: 11px; color: #ff6688; word-break: break-all;'; + errorEl.style.cssText = 'padding: 12px 15px; margin-bottom: 8px; background: #1a0a0a; border: 1px solid #2a1a1a; border-left: 2px solid #ff3366; font-family: "Roboto Condensed", "Arial Narrow", sans-serif; font-size: 11px; color: #ff6688; word-break: break-all;'; errorEl.textContent = '⚠ ' + text; output.insertBefore(errorEl, output.firstChild); } diff --git a/static/js/core/settings-manager.js b/static/js/core/settings-manager.js index 35649c2..1a5e922 100644 --- a/static/js/core/settings-manager.js +++ b/static/js/core/settings-manager.js @@ -833,11 +833,11 @@ function renderUpdateStatus(data) {
Current Version - v${data.current_version} + v${data.current_version}
Latest Version - v${data.latest_version} + v${data.latest_version}
${data.last_check ? `
diff --git a/static/js/modes/gps.js b/static/js/modes/gps.js index f343995..906dde4 100644 --- a/static/js/modes/gps.js +++ b/static/js/modes/gps.js @@ -291,7 +291,7 @@ const GPS = (function() { // PRN label ctx.fillStyle = color; - ctx.font = '8px JetBrains Mono, monospace'; + ctx.font = '8px Roboto Condensed, monospace'; ctx.textAlign = 'center'; ctx.textBaseline = 'bottom'; ctx.fillText(sat.prn, px, py - dotSize - 2); @@ -299,7 +299,7 @@ const GPS = (function() { // SNR value if (sat.snr != null) { ctx.fillStyle = 'rgba(255,255,255,0.4)'; - ctx.font = '7px JetBrains Mono, monospace'; + ctx.font = '7px Roboto Condensed, monospace'; ctx.textBaseline = 'top'; ctx.fillText(Math.round(sat.snr), px, py + dotSize + 1); } @@ -331,7 +331,7 @@ const GPS = (function() { ctx.stroke(); // Label ctx.fillStyle = '#555'; - ctx.font = '9px JetBrains Mono, monospace'; + ctx.font = '9px Roboto Condensed, monospace'; ctx.textAlign = 'left'; ctx.textBaseline = 'middle'; ctx.fillText(el + '\u00b0', cx + gr + 3, cy - 2); @@ -346,7 +346,7 @@ const GPS = (function() { // Cardinal directions ctx.fillStyle = '#888'; - ctx.font = 'bold 11px JetBrains Mono, monospace'; + ctx.font = 'bold 11px Roboto Condensed, monospace'; ctx.textAlign = 'center'; ctx.textBaseline = 'middle'; ctx.fillText('N', cx, cy - r - 12); diff --git a/static/js/modes/listening-post.js b/static/js/modes/listening-post.js index a8eec79..70f49fb 100644 --- a/static/js/modes/listening-post.js +++ b/static/js/modes/listening-post.js @@ -1483,7 +1483,7 @@ function drawAudioVisualizer() { } ctx.fillStyle = 'rgba(255, 255, 255, 0.3)'; - ctx.font = '8px Space Mono'; + ctx.font = '8px Roboto Condensed'; ctx.fillText('0', 2, canvas.height - 2); ctx.fillText('4kHz', canvas.width / 4, canvas.height - 2); ctx.fillText('8kHz', canvas.width / 2, canvas.height - 2); diff --git a/static/js/modes/spy-stations.js b/static/js/modes/spy-stations.js index d2a58e0..d6d3c34 100644 --- a/static/js/modes/spy-stations.js +++ b/static/js/modes/spy-stations.js @@ -84,7 +84,7 @@ const SpyStations = (function() { modeContainer.innerHTML = modes.map(m => ` `).join(''); } diff --git a/static/js/modes/subghz.js b/static/js/modes/subghz.js index 66f7695..6d5a350 100644 --- a/static/js/modes/subghz.js +++ b/static/js/modes/subghz.js @@ -1754,7 +1754,7 @@ const SubGhz = (function() { // Grid ctx.strokeStyle = '#1a1f2e'; ctx.lineWidth = 1; - ctx.font = '10px JetBrains Mono, monospace'; + ctx.font = '10px Roboto Condensed, monospace'; ctx.fillStyle = '#666'; for (let db = powerMin; db <= powerMax; db += 20) { @@ -1824,7 +1824,7 @@ const SubGhz = (function() { ctx.lineTo(x + 4, y - 2); ctx.closePath(); ctx.fill(); - ctx.font = '9px JetBrains Mono, monospace'; + ctx.font = '9px Roboto Condensed, monospace'; ctx.fillStyle = 'rgba(255, 170, 0, 0.8)'; ctx.textAlign = 'center'; ctx.fillText(peak.freq.toFixed(1), x, y - 10); diff --git a/static/js/modes/weather-satellite.js b/static/js/modes/weather-satellite.js index 6aec996..0b8aa3f 100644 --- a/static/js/modes/weather-satellite.js +++ b/static/js/modes/weather-satellite.js @@ -566,7 +566,7 @@ const WeatherSat = (function() {
${pass.quality} - ${countdown} + ${countdown}
@@ -610,7 +610,7 @@ const WeatherSat = (function() { ctx.stroke(); // Label ctx.fillStyle = '#555'; - ctx.font = '9px JetBrains Mono, monospace'; + ctx.font = '9px Roboto Condensed, monospace'; ctx.textAlign = 'left'; ctx.fillText(el + '\u00b0', cx + gr + 3, cy - 2); }); @@ -624,7 +624,7 @@ const WeatherSat = (function() { // Cardinal directions ctx.fillStyle = '#666'; - ctx.font = '10px JetBrains Mono, monospace'; + ctx.font = '10px Roboto Condensed, monospace'; ctx.textAlign = 'center'; ctx.textBaseline = 'middle'; ctx.fillText('N', cx, cy - r - 10); @@ -692,7 +692,7 @@ const WeatherSat = (function() { ctx.arc(cx + r * maxR * Math.cos(maxAz), cy + r * maxR * Math.sin(maxAz), 3, 0, Math.PI * 2); ctx.fill(); ctx.fillStyle = color; - ctx.font = '9px JetBrains Mono, monospace'; + ctx.font = '9px Roboto Condensed, monospace'; ctx.textAlign = 'center'; ctx.fillText(Math.round(maxEl) + '\u00b0', cx + r * maxR * Math.cos(maxAz), cy + r * maxR * Math.sin(maxAz) - 8); } diff --git a/templates/adsb_dashboard.html b/templates/adsb_dashboard.html index dfe6878..1ac6380 100644 --- a/templates/adsb_dashboard.html +++ b/templates/adsb_dashboard.html @@ -6,7 +6,7 @@ AIRCRAFT RADAR // INTERCEPT - See the Invisible {% if offline_settings.fonts_source == 'local' %} - + {% else %} {% endif %} @@ -1454,7 +1454,7 @@ ACARS: ${r.statistics.acarsMessages} messages`; // Range label const rangeNm = Math.round(maxRange * ratio); ctx.fillStyle = 'rgba(0, 255, 255, 0.5)'; - ctx.font = '10px Space Mono'; + ctx.font = '10px Roboto Condensed'; ctx.fillText(`${rangeNm}`, this.centerX + r + 5, this.centerY + 4); }); } @@ -1595,7 +1595,7 @@ ACARS: ${r.statistics.acarsMessages} messages`; // Label if (blip.callsign || blip.selected) { ctx.fillStyle = '#00ffff'; - ctx.font = '9px Space Mono'; + ctx.font = '9px Roboto Condensed'; ctx.textAlign = 'left'; ctx.fillText(blip.callsign || blip.icao, blip.x + 8, blip.y - 5); if (blip.altitude) { @@ -1713,7 +1713,7 @@ ACARS: ${r.statistics.acarsMessages} messages`; // Range label const rangeNm = Math.round(maxRange * ratio); ctx.fillStyle = 'rgba(0, 255, 255, 0.4)'; - ctx.font = '10px Space Mono'; + ctx.font = '10px Roboto Condensed'; ctx.fillText(`${rangeNm}nm`, centerX + r + 5, centerY); }); diff --git a/templates/adsb_history.html b/templates/adsb_history.html index 33f9a48..5ca1248 100644 --- a/templates/adsb_history.html +++ b/templates/adsb_history.html @@ -5,7 +5,7 @@ ADS-B History // INTERCEPT {% if offline_settings.fonts_source == 'local' %} - + {% else %} {% endif %} @@ -472,7 +472,7 @@ if (!points.length) { ctx.fillStyle = 'rgba(156, 163, 175, 0.6)'; - ctx.font = '12px "Space Mono", monospace'; + ctx.font = '12px "Roboto Condensed", "Arial Narrow", sans-serif'; ctx.fillText(`No ${label.toLowerCase()} data`, 12, height / 2); return; } @@ -480,7 +480,7 @@ const series = points.map(p => p[field]).filter(v => v !== null && v !== undefined); if (!series.length) { ctx.fillStyle = 'rgba(156, 163, 175, 0.6)'; - ctx.font = '12px "Space Mono", monospace'; + ctx.font = '12px "Roboto Condensed", "Arial Narrow", sans-serif'; ctx.fillText(`No ${label.toLowerCase()} data`, 12, height / 2); return; } @@ -521,7 +521,7 @@ } ctx.fillStyle = 'rgba(226, 232, 240, 0.8)'; - ctx.font = '11px "Space Mono", monospace'; + ctx.font = '11px "Roboto Condensed", "Arial Narrow", sans-serif'; ctx.fillText(`${maxVal} ${unit}`, 12, padding); ctx.fillText(`${minVal} ${unit}`, 12, height - padding); } diff --git a/templates/ais_dashboard.html b/templates/ais_dashboard.html index 492ac68..216ce83 100644 --- a/templates/ais_dashboard.html +++ b/templates/ais_dashboard.html @@ -6,7 +6,7 @@ VESSEL RADAR // INTERCEPT - See the Invisible {% if offline_settings.fonts_source == 'local' %} - + {% else %} {% endif %} diff --git a/templates/index.html b/templates/index.html index 5ef4f36..342d7d9 100644 --- a/templates/index.html +++ b/templates/index.html @@ -25,12 +25,8 @@ window.INTERCEPT_DEFAULT_LON = {{ default_longitude | tojson }}; - - {% if offline_settings.fonts_source == 'local' %} - - {% else %} - - {% endif %} + + {% if offline_settings.assets_source == 'local' %} @@ -2562,7 +2558,7 @@