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 @@