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 <noreply@anthropic.com>
This commit is contained in:
Smittix
2026-02-16 23:29:05 +00:00
parent 53b23fc2f7
commit 5e9fcc5c49
28 changed files with 160 additions and 183 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -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);
}

View File

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

View File

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

View File

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

View File

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

View File

@@ -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);
}

View File

@@ -833,11 +833,11 @@ function renderUpdateStatus(data) {
<div style="display: grid; gap: 8px; font-size: 12px;">
<div style="display: flex; justify-content: space-between;">
<span style="color: var(--text-dim);">Current Version</span>
<span style="font-family: 'Space Mono', monospace; color: var(--text-primary);">v${data.current_version}</span>
<span style="font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; color: var(--text-primary);">v${data.current_version}</span>
</div>
<div style="display: flex; justify-content: space-between;">
<span style="color: var(--text-dim);">Latest Version</span>
<span style="font-family: 'Space Mono', monospace; color: ${data.update_available ? 'var(--accent-green)' : 'var(--text-primary)'};">v${data.latest_version}</span>
<span style="font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; color: ${data.update_available ? 'var(--accent-green)' : 'var(--text-primary)'};">v${data.latest_version}</span>
</div>
${data.last_check ? `
<div style="display: flex; justify-content: space-between;">

View File

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

View File

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

View File

@@ -84,7 +84,7 @@ const SpyStations = (function() {
modeContainer.innerHTML = modes.map(m => `
<label class="inline-checkbox">
<input type="checkbox" data-mode="${m}" checked onchange="SpyStations.applyFilters()">
<span style="font-family: 'Space Mono', monospace; font-size: 10px;">${m}</span>
<span style="font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 10px;">${m}</span>
</label>
`).join('');
}

View File

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

View File

@@ -566,7 +566,7 @@ const WeatherSat = (function() {
</div>
<div style="display: flex; align-items: center; justify-content: space-between; margin-top: 4px;">
<span class="wxsat-pass-quality ${pass.quality}">${pass.quality}</span>
<span style="font-size: 10px; color: var(--text-dim); font-family: 'JetBrains Mono', monospace;">${countdown}</span>
<span style="font-size: 10px; color: var(--text-dim); font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif;">${countdown}</span>
</div>
<div style="margin-top: 6px; text-align: right;">
<button class="wxsat-strip-btn" onclick="event.stopPropagation(); WeatherSat.startPass('${escapeHtml(pass.satellite)}')" style="font-size: 10px; padding: 2px 8px;">Capture</button>
@@ -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);
}

View File

@@ -6,7 +6,7 @@
<title>AIRCRAFT RADAR // INTERCEPT - See the Invisible</title>
<!-- Fonts - Conditional CDN/Local loading -->
{% if offline_settings.fonts_source == 'local' %}
<link rel="stylesheet" href="{{ url_for('static', filename='css/fonts-local.css') }}">
<link href="https://fonts.googleapis.com/css2?family=Roboto+Condensed:wght@300;400;500;600;700&display=swap" rel="stylesheet">
{% else %}
<link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600;700&display=swap" rel="stylesheet">
{% 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);
});

View File

@@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>ADS-B History // INTERCEPT</title>
{% if offline_settings.fonts_source == 'local' %}
<link rel="stylesheet" href="{{ url_for('static', filename='css/fonts-local.css') }}">
<link href="https://fonts.googleapis.com/css2?family=Roboto+Condensed:wght@300;400;500;600;700&display=swap" rel="stylesheet">
{% else %}
<link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600;700&display=swap" rel="stylesheet">
{% 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);
}

View File

@@ -6,7 +6,7 @@
<title>VESSEL RADAR // INTERCEPT - See the Invisible</title>
<!-- Fonts - Conditional CDN/Local loading -->
{% if offline_settings.fonts_source == 'local' %}
<link rel="stylesheet" href="{{ url_for('static', filename='css/fonts-local.css') }}">
<link href="https://fonts.googleapis.com/css2?family=Roboto+Condensed:wght@300;400;500;600;700&display=swap" rel="stylesheet">
{% else %}
<link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600;700&family=Orbitron:wght@400;500;600;700&display=swap" rel="stylesheet">
{% endif %}

View File

@@ -25,12 +25,8 @@
window.INTERCEPT_DEFAULT_LON = {{ default_longitude | tojson }};
</script>
<script src="{{ url_for('static', filename='js/core/observer-location.js') }}"></script>
<!-- Fonts - Conditional CDN/Local loading -->
{% if offline_settings.fonts_source == 'local' %}
<link rel="stylesheet" href="{{ url_for('static', filename='css/fonts-local.css') }}">
{% else %}
<link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600;700&display=swap" rel="stylesheet">
{% endif %}
<!-- Fonts -->
<link href="https://fonts.googleapis.com/css2?family=Roboto+Condensed:wght@300;400;500;600;700&display=swap" rel="stylesheet">
<!-- Leaflet.js for APRS map - Conditional CDN/Local loading -->
{% if offline_settings.assets_source == 'local' %}
<link rel="stylesheet" href="{{ url_for('static', filename='vendor/leaflet/leaflet.css') }}">
@@ -2562,7 +2558,7 @@
<!-- Signal Scope -->
<div id="sstvScopePanel" style="display: none; margin-bottom: 12px;">
<div style="background: #0a0a0a; border: 1px solid #1e1a2e; border-radius: 6px; padding: 8px 10px; font-family: 'JetBrains Mono', 'Fira Code', monospace;">
<div style="background: #0a0a0a; border: 1px solid #1e1a2e; border-radius: 6px; padding: 8px 10px; font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif;">
<div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 6px; font-size: 10px; color: #555; text-transform: uppercase; letter-spacing: 1px;">
<span>Signal Scope</span>
<div style="display: flex; gap: 14px;">
@@ -2829,7 +2825,7 @@
<!-- Signal Scope -->
<div id="sstvGeneralScopePanel" style="display: none; margin-bottom: 12px;">
<div style="background: #0a0a0a; border: 1px solid #1e1a2e; border-radius: 6px; padding: 8px 10px; font-family: 'JetBrains Mono', 'Fira Code', monospace;">
<div style="background: #0a0a0a; border: 1px solid #1e1a2e; border-radius: 6px; padding: 8px 10px; font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif;">
<div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 6px; font-size: 10px; color: #555; text-transform: uppercase; letter-spacing: 1px;">
<span>Signal Scope</span>
<div style="display: flex; gap: 14px;">
@@ -2921,7 +2917,7 @@
<!-- Pager Signal Scope -->
<div id="pagerScopePanel" style="display: none; margin-bottom: 12px;">
<div style="background: #0a0a0a; border: 1px solid #1a1a2e; border-radius: 6px; padding: 8px 10px; font-family: 'JetBrains Mono', 'Fira Code', monospace;">
<div style="background: #0a0a0a; border: 1px solid #1a1a2e; border-radius: 6px; padding: 8px 10px; font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif;">
<div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 6px; font-size: 10px; color: #555; text-transform: uppercase; letter-spacing: 1px;">
<span>Signal Scope</span>
<div style="display: flex; gap: 14px;">
@@ -2939,7 +2935,7 @@
<!-- Sensor Signal Scope -->
<div id="sensorScopePanel" style="display: none; margin-bottom: 12px;">
<div style="background: #0a0a0a; border: 1px solid #1a2e1a; border-radius: 6px; padding: 8px 10px; font-family: 'JetBrains Mono', 'Fira Code', monospace;">
<div style="background: #0a0a0a; border: 1px solid #1a2e1a; border-radius: 6px; padding: 8px 10px; font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif;">
<div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 6px; font-size: 10px; color: #555; text-transform: uppercase; letter-spacing: 1px;">
<span>Signal Scope</span>
<div style="display: flex; gap: 14px;">
@@ -5852,7 +5848,7 @@
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);
}
@@ -5868,7 +5864,7 @@
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);
}
@@ -8522,7 +8518,7 @@
// Draw total in center
ctx.fillStyle = '#fff';
ctx.font = 'bold 16px Space Mono';
ctx.font = 'bold 16px Roboto Condensed';
ctx.textAlign = 'center';
ctx.textBaseline = 'middle';
ctx.fillText(total, cx, cy);
@@ -10342,7 +10338,7 @@
// Label
if (el > 0) {
ctx.fillStyle = '#444';
ctx.font = '10px Space Mono';
ctx.font = '10px Roboto Condensed';
ctx.textAlign = 'center';
ctx.fillText(el + '°', cx, cy - r + 12);
}
@@ -10415,7 +10411,7 @@
// Label
ctx.fillStyle = '#fff';
ctx.font = '11px Space Mono';
ctx.font = '11px Roboto Condensed';
ctx.fillText(pass.satellite, maxX + 10, maxY - 5);
}
}

View File

@@ -6,12 +6,8 @@
<title>{% block title %}iNTERCEPT{% endblock %} // iNTERCEPT</title>
<link rel="icon" type="image/svg+xml" href="{{ url_for('static', filename='favicon.svg') }}">
{# Fonts - Conditional CDN/Local loading #}
{% if offline_settings and offline_settings.fonts_source == 'local' %}
<link rel="stylesheet" href="{{ url_for('static', filename='css/fonts-local.css') }}">
{% else %}
<link href="https://fonts.googleapis.com/css2?family=Space+Mono:wght@400;700&display=swap" rel="stylesheet">
{% endif %}
{# Fonts #}
<link href="https://fonts.googleapis.com/css2?family=Roboto+Condensed:wght@300;400;500;600;700&display=swap" rel="stylesheet">
{# Core CSS (Design System) #}
<link rel="stylesheet" href="{{ url_for('static', filename='css/core/variables.css') }}">

View File

@@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Network Monitor // INTERCEPT</title>
{% if offline_settings.fonts_source == 'local' %}
<link rel="stylesheet" href="{{ url_for('static', filename='css/fonts-local.css') }}">
<link href="https://fonts.googleapis.com/css2?family=Roboto+Condensed:wght@300;400;500;600;700&display=swap" rel="stylesheet">
{% else %}
<link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600;700&display=swap" rel="stylesheet">
{% endif %}
@@ -18,8 +18,8 @@
* { margin: 0; padding: 0; box-sizing: border-box; }
:root {
--font-sans: 'Space Mono', 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
--font-mono: 'Space Mono', 'Fira Code', 'Consolas', 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-primary: #0a0c10;
--bg-secondary: #0f1218;
--bg-tertiary: #151a23;

View File

@@ -23,7 +23,7 @@
</div>
<div class="form-group" style="margin-top: 8px;">
<label>Device Serial <span style="color: var(--text-dim); font-weight: normal;">(optional)</span></label>
<input type="text" id="subghzDeviceSerial" placeholder="auto-detect" style="font-family: 'JetBrains Mono', monospace; font-size: 11px;">
<input type="text" id="subghzDeviceSerial" placeholder="auto-detect" style="font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 11px;">
</div>
</div>
@@ -55,12 +55,12 @@
<div class="form-group">
<label>LNA Gain (0-40 dB)</label>
<input type="range" id="subghzLnaGain" min="0" max="40" value="24" step="8" oninput="document.getElementById('subghzLnaVal').textContent=this.value">
<span id="subghzLnaVal" style="font-family: 'JetBrains Mono', monospace; font-size: 11px; color: var(--text-secondary);">24</span>
<span id="subghzLnaVal" style="font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 11px; color: var(--text-secondary);">24</span>
</div>
<div class="form-group">
<label>VGA Gain (0-62 dB)</label>
<input type="range" id="subghzVgaGain" min="0" max="62" value="20" step="2" oninput="document.getElementById('subghzVgaVal').textContent=this.value">
<span id="subghzVgaVal" style="font-family: 'JetBrains Mono', monospace; font-size: 11px; color: var(--text-secondary);">20</span>
<span id="subghzVgaVal" style="font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 11px; color: var(--text-secondary);">20</span>
</div>
<div class="form-group">
<label>Sample Rate</label>
@@ -143,7 +143,7 @@
<div class="form-group">
<label>TX VGA Gain (0-47 dB)</label>
<input type="range" id="subghzTxGain" min="0" max="47" value="20" step="1" oninput="document.getElementById('subghzTxGainVal').textContent=this.value">
<span id="subghzTxGainVal" style="font-family: 'JetBrains Mono', monospace; font-size: 11px; color: var(--text-secondary);">20</span>
<span id="subghzTxGainVal" style="font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 11px; color: var(--text-secondary);">20</span>
</div>
<div class="form-group">
<label>Max Duration (seconds)</label>

View File

@@ -54,7 +54,7 @@
<div style="background: var(--bg-primary); border: 1px solid var(--border-color); border-radius: 4px; padding: 10px; margin-bottom: 10px;">
<strong style="color: var(--accent-cyan); font-size: 12px;">V-Dipole (Easiest &mdash; ~$5)</strong>
<div style="margin: 8px 0; padding: 8px; background: var(--bg-tertiary); border-radius: 3px; font-family: 'JetBrains Mono', monospace; font-size: 10px; color: var(--text-secondary); white-space: pre; line-height: 1.3; text-align: center;"> coax to SDR
<div style="margin: 8px 0; padding: 8px; background: var(--bg-tertiary); border-radius: 3px; font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 10px; color: var(--text-secondary); white-space: pre; line-height: 1.3; text-align: center;"> coax to SDR
|
===+=== feed point
/ \
@@ -80,7 +80,7 @@
<div style="background: var(--bg-primary); border: 1px solid var(--border-color); border-radius: 4px; padding: 10px; margin-bottom: 10px;">
<strong style="color: var(--accent-cyan); font-size: 12px;">Turnstile / Crossed Dipole (~$10-15)</strong>
<div style="margin: 8px 0; padding: 8px; background: var(--bg-tertiary); border-radius: 3px; font-family: 'JetBrains Mono', monospace; font-size: 10px; color: var(--text-secondary); white-space: pre; line-height: 1.3; text-align: center;"> 53.4cm
<div style="margin: 8px 0; padding: 8px; background: var(--bg-tertiary); border-radius: 3px; font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 10px; color: var(--text-secondary); white-space: pre; line-height: 1.3; text-align: center;"> 53.4cm
&lt;---------&gt;
====+==== dipole 1
|
@@ -105,7 +105,7 @@
<div style="background: var(--bg-primary); border: 1px solid var(--border-color); border-radius: 4px; padding: 10px; margin-bottom: 10px;">
<strong style="color: #00ff88; font-size: 12px;">QFH &mdash; Quadrifilar Helix (Best &mdash; ~$20-30)</strong>
<div style="margin: 8px 0; padding: 8px; background: var(--bg-tertiary); border-radius: 3px; font-family: 'JetBrains Mono', monospace; font-size: 10px; color: var(--text-secondary); white-space: pre; line-height: 1.3; text-align: center;"> ___
<div style="margin: 8px 0; padding: 8px; background: var(--bg-tertiary); border-radius: 3px; font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 10px; color: var(--text-secondary); white-space: pre; line-height: 1.3; text-align: center;"> ___
/ \ two helix loops
| | | twisted 90 deg
| | | around a mast
@@ -200,7 +200,7 @@
</div>
<div class="form-group">
<label>File Path (server-side)</label>
<input type="text" id="wxsatTestFilePath" value="data/weather_sat/samples/noaa_apt_argentina.wav" style="font-family: 'JetBrains Mono', monospace; font-size: 11px;">
<input type="text" id="wxsatTestFilePath" value="data/weather_sat/samples/noaa_apt_argentina.wav" style="font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; font-size: 11px;">
</div>
<div class="form-group">
<label>Sample Rate</label>
@@ -230,7 +230,7 @@
Enable Auto-Capture
</label>
</div>
<div id="wxsatSchedulerStatus" style="font-size: 11px; color: var(--text-dim); font-family: 'JetBrains Mono', monospace; margin-top: 4px;">
<div id="wxsatSchedulerStatus" style="font-size: 11px; color: var(--text-dim); font-family: 'Roboto Condensed', 'Arial Narrow', sans-serif; margin-top: 4px;">
Disabled
</div>
</div>

View File

@@ -54,7 +54,7 @@
<div class="settings-row">
<div class="settings-label">
<span class="settings-label-text">Web Fonts</span>
<span class="settings-label-desc">Space Mono</span>
<span class="settings-label-desc">Roboto Condensed</span>
</div>
<select id="fontsSource" class="settings-select" onchange="Settings.setFontsSource(this.value)">
<option value="cdn">Google Fonts (Online)</option>
@@ -108,7 +108,7 @@
<span class="asset-badge checking" id="statusInter">Checking...</span>
</div>
<div class="asset-status-row">
<span class="asset-name">Space Mono</span>
<span class="asset-name">Roboto Condensed</span>
<span class="asset-badge checking" id="statusJetbrains">Checking...</span>
</div>
</div>

View File

@@ -6,7 +6,7 @@
<title>SATELLITE COMMAND // iNTERCEPT - See the Invisible</title>
<!-- Fonts - Conditional CDN/Local loading -->
{% if offline_settings.fonts_source == 'local' %}
<link rel="stylesheet" href="{{ url_for('static', filename='css/fonts-local.css') }}">
<link href="https://fonts.googleapis.com/css2?family=Roboto+Condensed:wght@300;400;500;600;700&display=swap" rel="stylesheet">
{% else %}
<link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600;700&display=swap" rel="stylesheet">
{% endif %}
@@ -622,7 +622,7 @@
ctx.stroke();
ctx.fillStyle = 'rgba(0, 212, 255, 0.4)';
ctx.font = '10px Space Mono';
ctx.font = '10px Roboto Condensed';
ctx.fillText(el + '°', cx + 5, cy - r + 12);
}
@@ -990,7 +990,7 @@
ctx.stroke();
ctx.fillStyle = 'rgba(0, 212, 255, 0.4)';
ctx.font = '10px Space Mono';
ctx.font = '10px Roboto Condensed';
ctx.fillText(elRing + '°', cx + 5, cy - r + 12);
}
@@ -1057,7 +1057,7 @@
ctx.textAlign = 'center';
ctx.fillText(satellites[selectedSatellite]?.name || 'SAT', x, y - 20);
ctx.font = '10px Space Mono';
ctx.font = '10px Roboto Condensed';
ctx.fillStyle = el > 0 ? '#00ff88' : '#ff4444';
ctx.fillText(el.toFixed(1) + '°', x, y + 25);
} else {
@@ -1106,7 +1106,7 @@
ctx.textAlign = 'center';
ctx.fillText(satellites[selectedSatellite]?.name || 'SAT', x, y - 20);
ctx.font = '10px Space Mono';
ctx.font = '10px Roboto Condensed';
ctx.fillStyle = el > 0 ? '#00ff88' : '#ff4444';
ctx.fillText(el.toFixed(1) + '°', x, y + 25);
}