From 8c96ebbc424c5f970871ed7b4dff2de8cc951673 Mon Sep 17 00:00:00 2001 From: Myron Blair Date: Tue, 2 Jun 2026 00:38:08 +0000 Subject: [PATCH] Network topology overlay: voice/chat triggered full-screen viz with directional flow particles - Voice: say show network map / network topology / show connections to open - Voice: say close map / dismiss / close network to close - Same commands work in chat text input - Explode animation: overlay expands from top-left reactor position with clip-path wipe - Collapse animation: folds back to reactor on close - Visualization: live node graph with bezier curved edges, hub (JARVIS) at center - Inner ring: all registered agents (agents color-coded by type: proxmox=green, HA=gold, etc) - Outer ring: netscan-discovered devices - Rotating orbit rings on hub and agent nodes - Pulsing radial glow per node keyed to online status - Hub cross-hair targeting lines - Directional particle flow: - CYAN particles: data/heartbeats flowing FROM agents TO JARVIS hub - ORANGE particles: commands flowing FROM JARVIS hub TO agents - All particles travel curved bezier paths, fade at endpoints, glow with shadows - Mouse hover: node info card shows name/IP/status/type - Stats bar: total nodes, online count, agent count - Background: faint hex grid overlay for sci-fi depth --- public_html/index.html | 429 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 428 insertions(+), 1 deletion(-) diff --git a/public_html/index.html b/public_html/index.html index 8f3dd39..e74dd08 100644 --- a/public_html/index.html +++ b/public_html/index.html @@ -754,6 +754,67 @@ body::after{ animation:shimmer 1.5s infinite;border-radius:4px;height:12px; } @keyframes shimmer{0%{background-position:200% 0}100%{background-position:-200% 0}} + +/* ── NETWORK MAP OVERLAY ─────────────────────────────────────────────── */ +#netMapOverlay{ + position:fixed;top:48px;left:0; + width:100vw;height:calc(100vh - 80px); + z-index:200; + display:none;flex-direction:column; + background:rgba(0,4,16,0.97); + border-right:1px solid rgba(0,212,255,0.35); + border-bottom:1px solid rgba(0,212,255,0.35); + transform-origin:0 0; + backdrop-filter:blur(12px); + overflow:hidden; +} +#netMapOverlay::after{ + content:'';position:absolute;inset:0;pointer-events:none;z-index:1; + background: + linear-gradient(to right,rgba(0,212,255,0.7),rgba(0,212,255,0.7)) top left / 20px 1px no-repeat, + linear-gradient(to bottom,rgba(0,212,255,0.7),rgba(0,212,255,0.7)) top left / 1px 20px no-repeat, + linear-gradient(to right,rgba(0,212,255,0.7),rgba(0,212,255,0.7)) top right / 20px 1px no-repeat, + linear-gradient(to bottom,rgba(0,212,255,0.7),rgba(0,212,255,0.7)) top right / 1px 20px no-repeat, + linear-gradient(to right,rgba(0,212,255,0.7),rgba(0,212,255,0.7)) bottom left / 20px 1px no-repeat, + linear-gradient(to bottom,rgba(0,212,255,0.7),rgba(0,212,255,0.7)) bottom left / 1px 20px no-repeat, + linear-gradient(to right,rgba(0,212,255,0.7),rgba(0,212,255,0.7)) bottom right / 20px 1px no-repeat, + linear-gradient(to bottom,rgba(0,212,255,0.7),rgba(0,212,255,0.7)) bottom right / 1px 20px no-repeat; +} +#netMapOverlay.nm-open{display:flex;animation:nmExplode 0.5s cubic-bezier(0.4,0,0.2,1) forwards} +#netMapOverlay.nm-closing{animation:nmCollapse 0.32s cubic-bezier(0.4,0,0.2,1) forwards} +@keyframes nmExplode{0%{transform:scale(0.04,0.06);opacity:0;clip-path:inset(0 100% 100% 0)}60%{opacity:1}100%{transform:scale(1,1);opacity:1;clip-path:inset(0 0% 0% 0)}} +@keyframes nmCollapse{0%{transform:scale(1,1);opacity:1}100%{transform:scale(0.04,0.06);opacity:0}} +#nmHeader{ + display:flex;align-items:center;justify-content:space-between; + padding:8px 18px;flex-shrink:0; + border-bottom:1px solid rgba(0,212,255,0.18); + background:rgba(0,8,28,0.6); + z-index:2;position:relative; +} +#nmTitle{font-family:var(--font-display);font-size:0.65rem;letter-spacing:4px;color:var(--cyan);display:flex;align-items:center;gap:12px} +#nmTitle .nm-pulse{width:7px;height:7px;border-radius:50%;background:var(--cyan);box-shadow:0 0 8px var(--cyan);animation:corePulse 1.5s infinite} +#nmStats{font-family:var(--font-mono);font-size:0.6rem;color:var(--text-dim);display:flex;gap:20px} +#nmStats span{color:var(--cyan)} +#nmClose{background:none;border:1px solid rgba(0,212,255,0.3);color:var(--text-dim);font-family:var(--font-mono);font-size:0.58rem;padding:4px 12px;cursor:pointer;letter-spacing:2px;transition:all 0.2s} +#nmClose:hover{border-color:var(--red);color:var(--red)} +#nmCanvas{flex:1;display:block;z-index:2;position:relative} +#nmLegend{ + display:flex;gap:18px;align-items:center; + padding:6px 18px;flex-shrink:0; + border-top:1px solid rgba(0,212,255,0.12); + font-family:var(--font-mono);font-size:0.56rem;color:var(--text-dim); + background:rgba(0,8,28,0.6);z-index:2;position:relative; +} +.nm-leg-dot{width:8px;height:8px;border-radius:50%;display:inline-block;margin-right:5px;flex-shrink:0} +#nmNodeInfo{ + position:absolute;pointer-events:none;z-index:10; + background:rgba(0,8,30,0.95);border:1px solid rgba(0,212,255,0.4); + padding:8px 12px;font-family:var(--font-mono);font-size:0.62rem; + display:none;min-width:160px; + box-shadow:0 0 20px rgba(0,212,255,0.15); +} +#nmNodeInfo .ni-title{color:var(--cyan);font-size:0.65rem;letter-spacing:2px;margin-bottom:4px} +#nmNodeInfo .ni-row{color:var(--text-dim);margin:2px 0} .text-cyan{color:var(--cyan)} .text-green{color:var(--green)} .text-orange{color:var(--orange)} @@ -1057,6 +1118,35 @@ body::after{ + +
+
+
+
+ ◈ NETWORK TOPOLOGY — LIVE FEED +
+
+ NODES  |  + ONLINE  |  + AGENTS +
+
+
SAY "CLOSE MAP" TO DISMISS
+ +
+
+ +
+ AGENT ONLINE + AGENT OFFLINE + PROXMOX + HA / AI + DEVICE + CYAN FLOW = DATA IN  ·  ORANGE FLOW = COMMANDS OUT +
+
+
+