mirror of
https://github.com/smittix/intercept.git
synced 2026-04-24 06:40:00 -07:00
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:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;">
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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('');
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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 %}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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') }}">
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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 — ~$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
|
||||
<--------->
|
||||
====+==== 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 — Quadrifilar Helix (Best — ~$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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user