Release v2.13.0 - WiFi client display in AP detail drawer

Features:
- Display connected clients for access points in detail drawer
- Real-time client updates via SSE streaming
- Client cards show MAC, vendor, RSSI, probed SSIDs, and last seen
- Count badge in Connected Clients header

Other changes:
- Updated aircraft database
- CSS and template refinements

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Smittix
2026-02-04 17:44:23 +00:00
parent bf7026cc9f
commit 340b300aa4
27 changed files with 365 additions and 132 deletions
+2 -2
View File
@@ -5,8 +5,8 @@
}
:root {
--font-sans: 'JetBrains Mono', 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
--font-mono: 'JetBrains Mono', 'Fira Code', 'Consolas', monospace;
--font-sans: 'Space Mono', 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
--font-mono: 'Space Mono', 'Fira Code', 'Consolas', monospace;
--bg-dark: #0a0c10;
--bg-panel: #0f1218;
--bg-card: #151a23;
+2 -2
View File
@@ -5,8 +5,8 @@
}
:root {
--font-sans: 'JetBrains Mono', 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
--font-mono: 'JetBrains Mono', 'Fira Code', 'Consolas', monospace;
--font-sans: 'Space Mono', 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
--font-mono: 'Space Mono', 'Fira Code', 'Consolas', monospace;
--bg-dark: #0a0c10;
--bg-panel: #0f1218;
--bg-card: #141a24;
+2 -2
View File
@@ -5,8 +5,8 @@
/* CSS Variables (inherited from main theme) */
:root {
--font-sans: 'JetBrains Mono', 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
--font-mono: 'JetBrains Mono', 'Fira Code', 'Consolas', monospace;
--font-sans: 'Space Mono', 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
--font-mono: 'Space Mono', 'Fira Code', 'Consolas', monospace;
--bg-primary: #0a0a0f;
--bg-secondary: #12121a;
--text-primary: #e0e0e0;
+6 -6
View File
@@ -8,8 +8,8 @@
}
:root {
--font-sans: 'JetBrains Mono', 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
--font-mono: 'JetBrains Mono', 'Fira Code', 'Consolas', monospace;
--font-sans: 'Space Mono', 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
--font-mono: 'Space Mono', 'Fira Code', 'Consolas', monospace;
--bg-dark: #0a0c10;
--bg-panel: #0f1218;
--bg-card: #151a23;
@@ -440,7 +440,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', 'JetBrains Mono', monospace;
font-family: 'Orbitron', 'Space Mono', monospace;
font-size: 11px;
font-weight: 500;
letter-spacing: 2px;
@@ -512,7 +512,7 @@ body {
}
.vessel-name {
font-family: 'Orbitron', 'JetBrains Mono', monospace;
font-family: 'Orbitron', 'Space Mono', monospace;
font-size: 16px;
font-weight: 700;
color: var(--accent-cyan);
@@ -606,7 +606,7 @@ body {
}
.vessel-item-name {
font-family: 'Orbitron', 'JetBrains Mono', monospace;
font-family: 'Orbitron', 'Space Mono', monospace;
font-size: 12px;
font-weight: 600;
color: var(--accent-cyan);
@@ -1150,7 +1150,7 @@ body {
}
.dsc-distress-alert .dsc-alert-header {
font-family: 'Orbitron', 'JetBrains Mono', monospace;
font-family: 'Orbitron', 'Space Mono', monospace;
font-size: 24px;
font-weight: 700;
color: var(--accent-red);
+2 -2
View File
@@ -73,8 +73,8 @@
/* ============================================
TYPOGRAPHY
============================================ */
--font-sans: 'JetBrains Mono', 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
--font-mono: 'JetBrains Mono', 'Fira Code', 'Consolas', monospace;
--font-sans: 'Space Mono', ui-monospace, 'SF Mono', monospace;
--font-mono: 'Space Mono', ui-monospace, 'SF Mono', 'Consolas', monospace;
/* Font sizes */
--text-xs: 10px;
+5 -54
View File
@@ -1,67 +1,18 @@
/* Local font declarations for offline mode */
/* Inter - Primary UI font */
/* Space Mono - Console font */
@font-face {
font-family: 'Inter';
font-family: 'Space Mono';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('/static/vendor/fonts/Inter-Regular.woff2') format('woff2');
src: url('/static/vendor/fonts/SpaceMono-Regular.woff2') format('woff2');
}
@font-face {
font-family: 'Inter';
font-style: normal;
font-weight: 500;
font-display: swap;
src: url('/static/vendor/fonts/Inter-Medium.woff2') format('woff2');
}
@font-face {
font-family: 'Inter';
font-style: normal;
font-weight: 600;
font-display: swap;
src: url('/static/vendor/fonts/Inter-SemiBold.woff2') format('woff2');
}
@font-face {
font-family: 'Inter';
font-family: 'Space Mono';
font-style: normal;
font-weight: 700;
font-display: swap;
src: url('/static/vendor/fonts/Inter-Bold.woff2') format('woff2');
}
/* JetBrains Mono - Monospace/code font */
@font-face {
font-family: 'JetBrains Mono';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('/static/vendor/fonts/JetBrainsMono-Regular.woff2') format('woff2');
}
@font-face {
font-family: 'JetBrains Mono';
font-style: normal;
font-weight: 500;
font-display: swap;
src: url('/static/vendor/fonts/JetBrainsMono-Medium.woff2') format('woff2');
}
@font-face {
font-family: 'JetBrains Mono';
font-style: normal;
font-weight: 600;
font-display: swap;
src: url('/static/vendor/fonts/JetBrainsMono-SemiBold.woff2') format('woff2');
}
@font-face {
font-family: 'JetBrains Mono';
font-style: normal;
font-weight: 700;
font-display: swap;
src: url('/static/vendor/fonts/JetBrainsMono-Bold.woff2') format('woff2');
src: url('/static/vendor/fonts/SpaceMono-Bold.woff2') format('woff2');
}
+64
View File
@@ -323,6 +323,11 @@
box-shadow: 0 6px 14px rgba(5, 9, 15, 0.35);
}
/* Position relative needed for absolute positioned icon children */
.nav-tool-btn {
position: relative;
}
.mode-nav-btn:focus-visible,
.mode-nav-dropdown-btn:focus-visible,
.nav-action-btn:focus-visible,
@@ -330,3 +335,62 @@
outline: 2px solid var(--accent-cyan, #4d7dbf);
outline-offset: 2px;
}
/* Nav tool button SVG sizing and styling */
.nav-tool-btn svg {
width: 14px;
height: 14px;
stroke: currentColor;
}
.nav-tool-btn .icon {
display: inline-flex;
align-items: center;
justify-content: center;
}
.nav-tool-btn .icon svg {
width: 14px;
height: 14px;
stroke: currentColor;
}
/* Theme toggle icon states */
.nav-tool-btn .icon-sun,
.nav-tool-btn .icon-moon {
position: absolute;
transition: opacity 0.2s, transform 0.2s;
}
.nav-tool-btn .icon-sun {
opacity: 0;
transform: rotate(-90deg);
}
.nav-tool-btn .icon-moon {
opacity: 1;
transform: rotate(0deg);
}
[data-theme="light"] .nav-tool-btn .icon-sun {
opacity: 1;
transform: rotate(0deg);
}
[data-theme="light"] .nav-tool-btn .icon-moon {
opacity: 0;
transform: rotate(90deg);
}
/* Effects/animations toggle icon states */
.nav-tool-btn .icon-effects-off {
display: none;
}
[data-animations="off"] .nav-tool-btn .icon-effects-on {
display: none;
}
[data-animations="off"] .nav-tool-btn .icon-effects-off {
display: flex;
}
+84 -4
View File
@@ -5,8 +5,8 @@
}
:root {
--font-sans: 'JetBrains Mono', 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
--font-mono: 'JetBrains Mono', 'Fira Code', 'Consolas', monospace;
--font-sans: 'Space Mono', 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
--font-mono: 'Space Mono', 'Fira Code', 'Consolas', monospace;
/* Tactical dark palette */
--bg-primary: #0a0c10;
--bg-secondary: #0f1218;
@@ -3808,6 +3808,86 @@ header h1 .tagline {
text-transform: uppercase;
}
.wifi-client-count-badge {
display: inline-block;
font-size: 10px;
padding: 1px 6px;
background: var(--accent-cyan);
color: var(--bg-primary);
border-radius: 10px;
font-weight: 600;
margin-left: 6px;
vertical-align: middle;
}
.wifi-client-list {
display: flex;
flex-direction: column;
gap: 8px;
max-height: 200px;
overflow-y: auto;
}
.wifi-client-card {
display: flex;
justify-content: space-between;
align-items: center;
padding: 8px 10px;
background: var(--bg-secondary);
border: 1px solid var(--border-color);
border-radius: 4px;
}
.wifi-client-identity {
display: flex;
flex-direction: column;
gap: 2px;
}
.wifi-client-mac {
font-family: monospace;
font-size: 12px;
color: var(--text-primary);
}
.wifi-client-vendor {
font-size: 10px;
color: var(--text-dim);
}
.wifi-client-probes {
display: flex;
flex-wrap: wrap;
gap: 4px;
margin-top: 4px;
}
.wifi-client-probe-badge {
font-size: 9px;
padding: 2px 6px;
background: var(--bg-tertiary);
border-radius: 3px;
color: var(--text-secondary);
}
.wifi-client-signal {
display: flex;
flex-direction: column;
align-items: flex-end;
gap: 2px;
}
.wifi-client-rssi {
font-size: 12px;
font-weight: 500;
color: var(--text-primary);
}
.wifi-client-lastseen {
font-size: 9px;
color: var(--text-dim);
}
/* WiFi Responsive */
@media (max-width: 1400px) {
.wifi-main-content {
@@ -6019,7 +6099,7 @@ body::before {
}
.module-header {
font-family: 'Orbitron', 'JetBrains Mono', monospace;
font-family: 'Orbitron', 'Space Mono', monospace;
font-size: 10px;
font-weight: 600;
color: var(--accent-cyan);
@@ -6197,7 +6277,7 @@ body::before {
/* Listening Mode Selector Buttons */
.radio-mode-btn {
padding: 12px 24px;
font-family: 'Orbitron', 'JetBrains Mono', monospace;
font-family: 'Orbitron', 'Space Mono', monospace;
font-size: 13px;
font-weight: 600;
text-transform: uppercase;
+2 -2
View File
@@ -5,8 +5,8 @@
}
:root {
--font-sans: 'JetBrains Mono', 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
--font-mono: 'JetBrains Mono', 'Fira Code', 'Consolas', monospace;
--font-sans: 'Space Mono', 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
--font-mono: 'Space Mono', 'Fira Code', 'Consolas', monospace;
--bg-dark: #0a0c10;
--bg-panel: #0f1218;
--bg-card: #151a23;