From afff54e43b3ce446f3f6d5a265a6f0bb17c45973 Mon Sep 17 00:00:00 2001 From: Myron Blair Date: Tue, 2 Jun 2026 02:20:07 +0000 Subject: [PATCH] Restore working page + clean orbital network map rebuild Reverted to c8e0020 (all 10 effects working) then added net map cleanly: - Used var/for instead of const/let/arrow-functions to avoid any closure/scope issues - Orbital ring layout: JARVIS hub center, 4 concentric rings (proxmox/services/agents/devices) - Rings rotate at different speeds/directions independently - Spoke lines hub-to-each-node with cyan inbound and orange outbound particles - Node labels point outward from center, never overlap - Tiny green/red status dot on every non-hub node - Hover shows node info card (name/IP/status/ring) - Open: say/type show network map / network topology / show connections - Close: say/type close map / close network / dismiss map - All other features (mic, voice, text, panels) unaffected --- public_html/index.html | 615 +++++++++++++++++------------------------ 1 file changed, 249 insertions(+), 366 deletions(-) diff --git a/public_html/index.html b/public_html/index.html index 19eb24c..c6ebe78 100644 --- a/public_html/index.html +++ b/public_html/index.html @@ -754,69 +754,6 @@ 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:52px;left:0; - width:min(860px,86vw); - height:min(570px,76vh); - z-index:200; - display:none;flex-direction:column; - background:rgba(0,4,18,0.96); - border:1px solid rgba(0,212,255,0.28); - border-top:none;border-left:none; - transform-origin:0 0; - backdrop-filter:blur(14px); - overflow:hidden; - box-shadow:6px 6px 40px rgba(0,0,0,0.75),0 0 50px rgba(0,212,255,0.05); -} -#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)} @@ -868,6 +805,45 @@ body::after{ .panel-noise-layer{position:absolute;inset:0;pointer-events:none;z-index:20;border-radius:var(--r); background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='4'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.1'/%3E%3C/svg%3E"); background-size:100% 100%;mix-blend-mode:screen;animation:staticBurst 0.28s ease forwards} + +/* ── NETWORK MAP OVERLAY ─────────────────────────────────────────────── */ +#netMapOverlay{position:fixed;top:52px;left:0;width:min(820px,84vw);height:min(540px,74vh); + z-index:200;display:none;flex-direction:column; + background:rgba(0,4,18,0.96);border:1px solid rgba(0,212,255,0.28); + border-top:none;border-left:none;transform-origin:0 0;backdrop-filter:blur(14px); + overflow:hidden;box-shadow:6px 6px 40px rgba(0,0,0,0.75),0 0 50px rgba(0,212,255,0.05)} +#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 / 18px 1px no-repeat, + linear-gradient(to bottom,rgba(0,212,255,0.7),rgba(0,212,255,0.7)) top left / 1px 18px no-repeat, + linear-gradient(to right,rgba(0,212,255,0.7),rgba(0,212,255,0.7)) top right / 18px 1px no-repeat, + linear-gradient(to bottom,rgba(0,212,255,0.7),rgba(0,212,255,0.7)) top right / 1px 18px no-repeat, + linear-gradient(to right,rgba(0,212,255,0.7),rgba(0,212,255,0.7)) bottom left / 18px 1px no-repeat, + linear-gradient(to bottom,rgba(0,212,255,0.7),rgba(0,212,255,0.7)) bottom left / 1px 18px no-repeat, + linear-gradient(to right,rgba(0,212,255,0.7),rgba(0,212,255,0.7)) bottom right / 18px 1px no-repeat, + linear-gradient(to bottom,rgba(0,212,255,0.7),rgba(0,212,255,0.7)) bottom right / 1px 18px no-repeat} +#netMapOverlay.nm-open{display:flex;animation:nmExplode 0.45s cubic-bezier(0.4,0,0.2,1) forwards} +#netMapOverlay.nm-closing{animation:nmCollapse 0.3s cubic-bezier(0.4,0,0.2,1) forwards} +@keyframes nmExplode{0%{transform:scale(0.04,0.06);opacity:0}60%{opacity:1}100%{transform:scale(1);opacity:1}} +@keyframes nmCollapse{0%{transform:scale(1);opacity:1}100%{transform:scale(0.04,0.06);opacity:0}} +#nmHeader{display:flex;align-items:center;justify-content:space-between;padding:7px 16px; + flex-shrink:0;border-bottom:1px solid rgba(0,212,255,0.16);background:rgba(0,8,28,0.6);z-index:2;position:relative} +#nmTitle{font-family:var(--font-display);font-size:0.62rem;letter-spacing:4px;color:var(--cyan);display:flex;align-items:center;gap:10px} +#nmTitle .nm-pulse{width:6px;height:6px;border-radius:50%;background:var(--cyan);box-shadow:0 0 7px var(--cyan);animation:corePulse 1.5s infinite} +#nmStats{font-family:var(--font-mono);font-size:0.58rem;color:var(--text-dim);display:flex;gap:16px} +#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.56rem;padding:3px 10px;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:16px;align-items:center;padding:5px 16px;flex-shrink:0; + border-top:1px solid rgba(0,212,255,0.1);font-family:var(--font-mono);font-size:0.54rem; + color:var(--text-dim);background:rgba(0,8,28,0.6);z-index:2;position:relative} +.nm-leg-dot{width:7px;height:7px;border-radius:50%;display:inline-block;margin-right:4px;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:7px 11px;font-family:var(--font-mono); + font-size:0.6rem;display:none;min-width:150px;box-shadow:0 0 18px rgba(0,212,255,0.12)} +#nmNodeInfo .ni-title{color:var(--cyan);font-size:0.62rem;letter-spacing:2px;margin-bottom:3px} +#nmNodeInfo .ni-row{color:var(--text-dim);margin:2px 0} @@ -1120,35 +1096,28 @@ body::after{ +
-
-
- ◈ NETWORK TOPOLOGY — LIVE FEED -
-
- NODES  |  - ONLINE  |  - AGENTS -
-
-
SAY "CLOSE MAP" TO DISMISS
+
◈ NETWORK TOPOLOGY — LIVE
+
NODES  ·  ONLINE  ·  AGENTS
+
+ SAY "CLOSE MAP"
- AGENT ONLINE - AGENT OFFLINE - PROXMOX - HA / AI - DEVICE - CYAN FLOW = DATA IN  ·  ORANGE FLOW = COMMANDS OUT + PROXMOX + SERVICES + AGENTS + DEVICES + OFFLINE + CYAN = DATA IN · ORANGE = CMD OUT
-
+
-