mirror of
https://github.com/smittix/intercept.git
synced 2026-06-19 19:06:15 -07:00
fix: resolve two-window hang and sweep UI/theming updates
Fix app becoming unresponsive when two browser windows are open: the root cause was HTTP/1.1 connection pool exhaustion (6-connection limit per origin). VoiceAlerts was opening 3 SSE streams per window by default, so two windows produced 8 connections and permanently starved all regular HTTP requests. - voice-alerts.js: default all streams to false (opt-in) to stay within the browser connection limit; existing user preferences in localStorage are preserved - routes/alerts.py: replace direct AlertManager.stream_events() with sse_stream_fanout so both windows receive every alert instead of competing for the same queue - routes/bluetooth_v2.py: same fanout fix via subscribe_fanout_queue, preserving named SSE events (device_update, scan_started, etc.) Also includes accumulated UI/theming changes: accent-cyan CSS variable sweep across mode CSS/JS files, standalone dashboard pages, template updates, satellite TLE data refresh, and tile provider default rename. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,14 +1,16 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" class="{% if offline_settings.tile_provider in ['cartodb_dark', 'cartodb_dark_cyan'] %}map-cyber-enabled{% endif %}">
|
||||
<head>
|
||||
<script>(function(){var t=localStorage.getItem('intercept-ui-tier')||'enhanced';document.documentElement.setAttribute('data-ui-tier',t);})();</script>
|
||||
<meta charset="UTF-8">
|
||||
<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') }}">
|
||||
{% else %}
|
||||
<link href="https://fonts.googleapis.com/css2?family=Roboto+Condensed:wght@300;400;500;600;700&display=swap" rel="stylesheet">
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;600;700&family=Roboto+Condensed:wght@300;400;500;600;700&display=swap" rel="stylesheet">
|
||||
{% endif %}
|
||||
<link rel="stylesheet" href="{{ url_for('static', filename='css/core/variables.css') }}">
|
||||
<link rel="stylesheet" href="{{ url_for('static', filename='css/responsive.css') }}">
|
||||
<link rel="stylesheet" href="{{ url_for('static', filename='css/agents.css') }}">
|
||||
<link rel="stylesheet" href="{{ url_for('static', filename='css/core/layout.css') }}">
|
||||
@@ -18,8 +20,8 @@
|
||||
* { margin: 0; padding: 0; box-sizing: border-box; }
|
||||
|
||||
:root {
|
||||
--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-sans: 'Inter', 'Roboto Condensed', 'Helvetica Neue', Arial, sans-serif;
|
||||
--font-mono: 'JetBrains Mono', 'Fira Code', 'Source Code Pro', Consolas, monospace;
|
||||
--bg-primary: #0a0c10;
|
||||
--bg-secondary: #0f1218;
|
||||
--bg-tertiary: #151a23;
|
||||
@@ -28,12 +30,29 @@
|
||||
--text-dim: #4b5563;
|
||||
--border-color: #1f2937;
|
||||
--accent-cyan: #4a9eff;
|
||||
--accent-cyan-rgb: 74, 158, 255;
|
||||
--accent-green: #22c55e;
|
||||
--accent-red: #ef4444;
|
||||
--accent-orange: #f59e0b;
|
||||
--accent-purple: #a855f7;
|
||||
}
|
||||
|
||||
html[data-ui-tier="enhanced"] {
|
||||
--bg-primary: #000000;
|
||||
--bg-secondary: #020404;
|
||||
--bg-tertiary: #040808;
|
||||
--border-color: rgba(46, 125, 138, 0.18);
|
||||
--accent-cyan: #2e7d8a;
|
||||
--accent-cyan-rgb: 46, 125, 138;
|
||||
}
|
||||
|
||||
html[data-ui-tier="lean"] {
|
||||
--bg-primary: #111111;
|
||||
--bg-secondary: #181818;
|
||||
--bg-tertiary: #1f1f1f;
|
||||
--border-color: #2a2a2a;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: var(--font-sans);
|
||||
background: var(--bg-primary);
|
||||
@@ -161,7 +180,7 @@
|
||||
.panel-count {
|
||||
font-size: 10px;
|
||||
padding: 2px 8px;
|
||||
background: rgba(74, 158, 255, 0.2);
|
||||
background: rgba(var(--accent-cyan-rgb), 0.2);
|
||||
color: var(--accent-cyan);
|
||||
border-radius: 10px;
|
||||
font-family: var(--font-mono);
|
||||
@@ -192,7 +211,7 @@
|
||||
}
|
||||
|
||||
.panel-tab.active {
|
||||
background: rgba(74, 158, 255, 0.1);
|
||||
background: rgba(var(--accent-cyan-rgb), 0.1);
|
||||
color: var(--accent-cyan);
|
||||
border-color: var(--accent-cyan);
|
||||
}
|
||||
@@ -230,7 +249,7 @@
|
||||
}
|
||||
|
||||
.data-table tr:hover {
|
||||
background: rgba(74, 158, 255, 0.05);
|
||||
background: rgba(var(--accent-cyan-rgb), 0.05);
|
||||
}
|
||||
|
||||
.mono {
|
||||
@@ -249,7 +268,7 @@
|
||||
gap: 4px;
|
||||
padding: 2px 6px;
|
||||
font-size: 9px;
|
||||
background: rgba(74, 158, 255, 0.15);
|
||||
background: rgba(var(--accent-cyan-rgb), 0.15);
|
||||
color: var(--accent-cyan);
|
||||
border-radius: 8px;
|
||||
font-family: var(--font-mono);
|
||||
@@ -439,7 +458,7 @@
|
||||
gap: 6px;
|
||||
margin-top: 4px;
|
||||
padding: 3px 8px;
|
||||
background: rgba(74, 158, 255, 0.1);
|
||||
background: rgba(var(--accent-cyan-rgb), 0.1);
|
||||
border-radius: 4px;
|
||||
font-size: 10px;
|
||||
}
|
||||
@@ -497,7 +516,7 @@
|
||||
letter-spacing: 0.5px;
|
||||
}
|
||||
|
||||
.type-badge.type-wifi { background: rgba(74, 158, 255, 0.2); color: var(--accent-cyan); }
|
||||
.type-badge.type-wifi { background: rgba(var(--accent-cyan-rgb), 0.2); color: var(--accent-cyan); }
|
||||
.type-badge.type-bluetooth { background: rgba(168, 85, 247, 0.2); color: var(--accent-purple); }
|
||||
.type-badge.type-adsb { background: rgba(34, 197, 94, 0.2); color: var(--accent-green); }
|
||||
.type-badge.type-ais { background: rgba(245, 158, 11, 0.2); color: var(--accent-orange); }
|
||||
|
||||
Reference in New Issue
Block a user