Spaces:
Running
Design a next-generation Multi-Agent AI Collaboration Platform that redefines the paradigm of human-AI workflows through a revolutionary, production-grade interface. This is not an iteration—it is a complete reimagining of how autonomous agents, human operators, and complex data systems visually coexist and interact.
Browse filesDesign Philosophy & Visual Direction:
Aesthetic: Sophisticated "Post-Corporate" futurism—clean, authoritative, yet organic. Move beyond sterile SaaS templates. Think: Blade Runner 2049 meets Notion, with the functional density of a Bloomberg Terminal and the elegance of Linear.
Color Architecture: Strictly no dominant purple. Instead, deploy a chromatic strategy using:
Primary: Deep oceanic teal (#0A4F4F) to electric coral (#FF6B6B) gradient system, OR charcoal slate (#1A1D21) with vermillion (#E85D04) and citron (#CCFF00) accents
Semantic Coding: Distinctive hues for agent types (Autonomous=warm amber, Human=neutral blue, System=cool slate, Execution=vibrant emerald)
Dark Mode Native: True OLED black (#000000) backgrounds with high-contrast zinc (#A1A1AA) typography and luminous accent glows
Interaction States: Micro-gradients that shift with data velocity—subtle, non-distracting bioluminescent cues
Spatial & Interaction Design:
Canvas-First Architecture: Infinite zoomable workspace (Figma-like) where agents exist as intelligent "nodes" with orbital awareness—not static sidebar lists
Glassmorphic Intelligence: Agents manifest as semi-transparent, depth-layered entities with real-time activity indicators (neural pulse animations, subtle bloom effects)
Dynamic Topology: Visual representation of agent relationships as living, breathing connection lines (bezier curves with data-pulse animations) that thicken with bandwidth and shift color with sentiment/confidence scores
Ambient Awareness: Non-intrusive peripheral vision system—agents working in background show subtle edge-glow; urgent interventions use spatial audio-visual cues from the correct vector
Component & UX Specifications:
Agent Avatars: Abstract geometric forms (icosahedrons, mobius strips) rather than human faces, with distinct motion signatures—each agent type has unique "breathing" rhythms and particle trails when moving across the canvas
Collaboration Stream: Chronological feed transformed into a horizontal "Time-Reel" at screen bottom, showing agent decisions as filmstrip cells with scrubbable history
Command Interface: Omnibar with contextual intelligence—natural language input that expands into node-based logic trees (visual programming meets chat)
Conflict Resolution UI: When agents disagree, visual "tension zones" emerge—gradient meshes that require conscious human mediation through tactile slider controls
Data Corporeality: Files and datasets rendered as manipulable 3D artifacts with physics—drag a document onto an agent, watch it "absorb" with satisfying haptic-visual feedback
Typography & Micro-interactions:
Font System: Inter or Geist for UI elements; Space Grotesk or Plus Jakarta Sans for agent communications—distinct voice for machine vs. human text
Motion Physics: Everything springs, never oscillates. Agents arrive with orchestrated entrances (scale + blur resolve). 60fps minimum on all transitions. Damping values: 0.8 (snappy but substantial)
Negative Space: Aggressive information density with intelligent decluttering—agents fade to wireframe outlines when not in focus, expanding to full detail on proximity hover
Technical Rigor:
Responsive Liquid Layouts: From 4K multi-monitor setups (agents spread across spatial zones) to mobile (stacked card metaphor with gesture-based orchestration)
Accessibility WCAG 2.1 AA+: High contrast mode available, reduced motion alternatives for neurodivergent users, screen reader optimized with semantic agent status announcements
Design Token System: Complete atomic design methodology with CSS variables for all glow effects, z-index layers, and easing curves
Emotional Outcome: The interface should evoke control without overwhelm—users feel like orchestral conductors, not database administrators. Every pixel should communicate that this is a thinking system, not a tool.
- README.md +8 -5
- index.html +302 -19
- style.css +275 -18
|
@@ -1,10 +1,13 @@
|
|
| 1 |
---
|
| 2 |
-
title: Synapse Canvas
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
sdk: static
|
| 7 |
pinned: false
|
|
|
|
|
|
|
| 8 |
---
|
| 9 |
|
| 10 |
-
|
|
|
|
|
|
| 1 |
---
|
| 2 |
+
title: Synapse Canvas 🧠
|
| 3 |
+
colorFrom: green
|
| 4 |
+
colorTo: red
|
| 5 |
+
emoji: 🐳
|
| 6 |
sdk: static
|
| 7 |
pinned: false
|
| 8 |
+
tags:
|
| 9 |
+
- deepsite-v3
|
| 10 |
---
|
| 11 |
|
| 12 |
+
# Welcome to your new DeepSite project!
|
| 13 |
+
This project was created with [DeepSite](https://huggingface.co/deepsite).
|
|
@@ -1,19 +1,302 @@
|
|
| 1 |
-
<!
|
| 2 |
-
<html>
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
| 19 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<!DOCTYPE html>
|
| 2 |
+
<html lang="en">
|
| 3 |
+
<head>
|
| 4 |
+
<meta charset="UTF-8">
|
| 5 |
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
| 6 |
+
<title>Synapse Canvas — Multi-Agent AI Collaboration Platform</title>
|
| 7 |
+
<link rel="stylesheet" href="style.css">
|
| 8 |
+
<script src="https://cdn.tailwindcss.com"></script>
|
| 9 |
+
<script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script>
|
| 10 |
+
<script src="https://unpkg.com/feather-icons"></script>
|
| 11 |
+
<script>
|
| 12 |
+
tailwind.config = {
|
| 13 |
+
darkMode: 'class',
|
| 14 |
+
theme: {
|
| 15 |
+
extend: {
|
| 16 |
+
colors: {
|
| 17 |
+
ocean: {
|
| 18 |
+
900: '#0A4F4F',
|
| 19 |
+
800: '#0D6B6B',
|
| 20 |
+
700: '#108888',
|
| 21 |
+
600: '#14A5A5',
|
| 22 |
+
500: '#17C2C2',
|
| 23 |
+
},
|
| 24 |
+
coral: {
|
| 25 |
+
500: '#FF6B6B',
|
| 26 |
+
400: '#FF8585',
|
| 27 |
+
300: '#FF9F9F',
|
| 28 |
+
},
|
| 29 |
+
charcoal: {
|
| 30 |
+
950: '#000000',
|
| 31 |
+
900: '#0A0A0F',
|
| 32 |
+
800: '#141419',
|
| 33 |
+
700: '#1A1D21',
|
| 34 |
+
600: '#252830',
|
| 35 |
+
},
|
| 36 |
+
vermillion: {
|
| 37 |
+
500: '#E85D04',
|
| 38 |
+
400: '#F0701A',
|
| 39 |
+
},
|
| 40 |
+
citron: {
|
| 41 |
+
500: '#CCFF00',
|
| 42 |
+
400: '#D4FF33',
|
| 43 |
+
},
|
| 44 |
+
agent: {
|
| 45 |
+
autonomous: '#F59E0B',
|
| 46 |
+
human: '#3B82F6',
|
| 47 |
+
system: '#64748B',
|
| 48 |
+
execution: '#10B981',
|
| 49 |
+
}
|
| 50 |
+
},
|
| 51 |
+
fontFamily: {
|
| 52 |
+
sans: ['Inter', 'system-ui', 'sans-serif'],
|
| 53 |
+
mono: ['JetBrains Mono', 'monospace'],
|
| 54 |
+
display: ['Space Grotesk', 'sans-serif'],
|
| 55 |
+
},
|
| 56 |
+
animation: {
|
| 57 |
+
'neural-pulse': 'neuralPulse 2s ease-in-out infinite',
|
| 58 |
+
'data-flow': 'dataFlow 1.5s ease-in-out infinite',
|
| 59 |
+
'bloom-glow': 'bloomGlow 3s ease-in-out infinite',
|
| 60 |
+
'agent-breathe': 'agentBreathe 4s ease-in-out infinite',
|
| 61 |
+
'orbit': 'orbit 20s linear infinite',
|
| 62 |
+
},
|
| 63 |
+
keyframes: {
|
| 64 |
+
neuralPulse: {
|
| 65 |
+
'0%, 100%': { opacity: 0.4, transform: 'scale(1)' },
|
| 66 |
+
'50%': { opacity: 1, transform: 'scale(1.05)' },
|
| 67 |
+
},
|
| 68 |
+
dataFlow: {
|
| 69 |
+
'0%': { strokeDashoffset: '100' },
|
| 70 |
+
'100%': { strokeDashoffset: '0' },
|
| 71 |
+
},
|
| 72 |
+
bloomGlow: {
|
| 73 |
+
'0%, 100%': { filter: 'blur(20px) opacity(0.5)' },
|
| 74 |
+
'50%': { filter: 'blur(30px) opacity(0.8)' },
|
| 75 |
+
},
|
| 76 |
+
agentBreathe: {
|
| 77 |
+
'0%, 100%': { transform: 'scale(0.98)', opacity: 0.9 },
|
| 78 |
+
'50%': { transform: 'scale(1.02)', opacity: 1 },
|
| 79 |
+
},
|
| 80 |
+
orbit: {
|
| 81 |
+
'0%': { transform: 'rotate(0deg)' },
|
| 82 |
+
'100%': { transform: 'rotate(360deg)' },
|
| 83 |
+
}
|
| 84 |
+
}
|
| 85 |
+
}
|
| 86 |
+
}
|
| 87 |
+
}
|
| 88 |
+
</script>
|
| 89 |
+
<link rel="preconnect" href="https://fonts.googleapis.com">
|
| 90 |
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
| 91 |
+
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500&family=Space+Grotesk:wght@400;500;600;700&display=swap" rel="stylesheet">
|
| 92 |
+
</head>
|
| 93 |
+
<body class="bg-charcoal-950 text-zinc-300 font-sans overflow-hidden">
|
| 94 |
+
<!-- Ambient Background Layer -->
|
| 95 |
+
<div class="fixed inset-0 pointer-events-none">
|
| 96 |
+
<div class="absolute inset-0 bg-[radial-gradient(ellipse_at_top_left,_var(--tw-gradient-stops))] from-ocean-900/20 via-transparent to-transparent"></div>
|
| 97 |
+
<div class="absolute top-0 right-0 w-96 h-96 bg-coral-500/10 rounded-full blur-3xl animate-bloom-glow"></div>
|
| 98 |
+
<div class="absolute bottom-0 left-0 w-64 h-64 bg-citron-500/5 rounded-full blur-2xl"></div>
|
| 99 |
+
<!-- Grid Pattern -->
|
| 100 |
+
<div class="absolute inset-0 opacity-[0.03]" style="background-image: linear-gradient(rgba(255,255,255,0.1) 1px, transparent 1px), linear-gradient(90deg, rgba(255,255,255,0.1) 1px, transparent 1px); background-size: 60px 60px;"></div>
|
| 101 |
+
</div>
|
| 102 |
+
|
| 103 |
+
<!-- Main Application Container -->
|
| 104 |
+
<div id="app" class="relative h-screen w-full flex flex-col">
|
| 105 |
+
|
| 106 |
+
<!-- Top Navigation Bar -->
|
| 107 |
+
<synapse-header></synapse-header>
|
| 108 |
+
|
| 109 |
+
<!-- Workspace Area -->
|
| 110 |
+
<div class="flex-1 flex relative overflow-hidden">
|
| 111 |
+
|
| 112 |
+
<!-- Left Sidebar: Agent Palette -->
|
| 113 |
+
<synapse-agent-palette></synapse-agent-palette>
|
| 114 |
+
|
| 115 |
+
<!-- Infinite Canvas -->
|
| 116 |
+
<main id="canvas-container" class="flex-1 relative overflow-hidden cursor-grab active:cursor-grabbing">
|
| 117 |
+
<!-- Transform Layer for Pan/Zoom -->
|
| 118 |
+
<div id="canvas-transform" class="absolute inset-0 origin-center transition-transform duration-75 ease-out" style="transform: translate(0px, 0px) scale(1);">
|
| 119 |
+
|
| 120 |
+
<!-- Canvas Grid -->
|
| 121 |
+
<div class="absolute inset-0 opacity-[0.05]" style="background-image: radial-gradient(circle, rgba(255,255,255,0.3) 1px, transparent 1px); background-size: 40px 40px;"></div>
|
| 122 |
+
|
| 123 |
+
<!-- Connection Layer (SVG) -->
|
| 124 |
+
<svg id="connection-layer" class="absolute inset-0 w-full h-full pointer-events-none">
|
| 125 |
+
<defs>
|
| 126 |
+
<linearGradient id="flow-gradient" x1="0%" y1="0%" x2="100%" y2="0%">
|
| 127 |
+
<stop offset="0%" stop-color="#0A4F4F" stop-opacity="0.2" />
|
| 128 |
+
<stop offset="50%" stop-color="#CCFF00" stop-opacity="0.6" />
|
| 129 |
+
<stop offset="100%" stop-color="#E85D04" stop-opacity="0.2" />
|
| 130 |
+
</linearGradient>
|
| 131 |
+
<filter id="glow">
|
| 132 |
+
<feGaussianBlur stdDeviation="3" result="coloredBlur"/>
|
| 133 |
+
<feMerge>
|
| 134 |
+
<feMergeNode in="coloredBlur"/>
|
| 135 |
+
<feMergeNode in="SourceGraphic"/>
|
| 136 |
+
</feMerge>
|
| 137 |
+
</filter>
|
| 138 |
+
</defs>
|
| 139 |
+
<!-- Dynamic connections rendered here -->
|
| 140 |
+
</svg>
|
| 141 |
+
|
| 142 |
+
<!-- Agent Nodes Layer -->
|
| 143 |
+
<div id="nodes-layer" class="absolute inset-0">
|
| 144 |
+
<!-- Nodes rendered dynamically -->
|
| 145 |
+
</div>
|
| 146 |
+
|
| 147 |
+
<!-- Floating Context Menu -->
|
| 148 |
+
<div id="context-menu" class="absolute hidden bg-charcoal-800/95 backdrop-blur-xl border border-charcoal-600 rounded-xl shadow-2xl p-2 min-w-[200px] z-50">
|
| 149 |
+
<div class="px-3 py-2 text-xs font-medium text-zinc-500 uppercase tracking-wider">Actions</div>
|
| 150 |
+
<button class="w-full text-left px-3 py-2 text-sm text-zinc-300 hover:bg-charcoal-700 rounded-lg flex items-center gap-2 transition-colors">
|
| 151 |
+
<i data-feather="zap" class="w-4 h-4 text-citron-500"></i>
|
| 152 |
+
Execute Workflow
|
| 153 |
+
</button>
|
| 154 |
+
<button class="w-full text-left px-3 py-2 text-sm text-zinc-300 hover:bg-charcoal-700 rounded-lg flex items-center gap-2 transition-colors">
|
| 155 |
+
<i data-feather="git-branch" class="w-4 h-4 text-ocean-500"></i>
|
| 156 |
+
Fork Agent
|
| 157 |
+
</button>
|
| 158 |
+
<button class="w-full text-left px-3 py-2 text-sm text-zinc-300 hover:bg-charcoal-700 rounded-lg flex items-center gap-2 transition-colors">
|
| 159 |
+
<i data-feather="shield" class="w-4 h-4 text-coral-500"></i>
|
| 160 |
+
Isolate & Debug
|
| 161 |
+
</button>
|
| 162 |
+
<div class="h-px bg-charcoal-600 my-2"></div>
|
| 163 |
+
<button class="w-full text-left px-3 py-2 text-sm text-zinc-400 hover:text-coral-500 hover:bg-coral-500/10 rounded-lg flex items-center gap-2 transition-colors">
|
| 164 |
+
<i data-feather="trash-2" class="w-4 h-4"></i>
|
| 165 |
+
Terminate Agent
|
| 166 |
+
</button>
|
| 167 |
+
</div>
|
| 168 |
+
</div>
|
| 169 |
+
|
| 170 |
+
<!-- Canvas Controls -->
|
| 171 |
+
<div class="absolute bottom-6 right-6 flex flex-col gap-2">
|
| 172 |
+
<button id="zoom-in" class="w-10 h-10 bg-charcoal-800/90 backdrop-blur border border-charcoal-600 rounded-lg flex items-center justify-center text-zinc-400 hover:text-white hover:border-ocean-500 transition-all">
|
| 173 |
+
<i data-feather="plus" class="w-5 h-5"></i>
|
| 174 |
+
</button>
|
| 175 |
+
<button id="zoom-reset" class="w-10 h-10 bg-charcoal-800/90 backdrop-blur border border-charcoal-600 rounded-lg flex items-center justify-center text-zinc-400 hover:text-white hover:border-ocean-500 transition-all text-xs font-mono">
|
| 176 |
+
100%
|
| 177 |
+
</button>
|
| 178 |
+
<button id="zoom-out" class="w-10 h-10 bg-charcoal-800/90 backdrop-blur border border-charcoal-600 rounded-lg flex items-center justify-center text-zinc-400 hover:text-white hover:border-ocean-500 transition-all">
|
| 179 |
+
<i data-feather="minus" class="w-5 h-5"></i>
|
| 180 |
+
</button>
|
| 181 |
+
</div>
|
| 182 |
+
|
| 183 |
+
<!-- Mini-map -->
|
| 184 |
+
<div class="absolute top-6 right-6 w-48 h-32 bg-charcoal-900/90 backdrop-blur border border-charcoal-700 rounded-lg overflow-hidden">
|
| 185 |
+
<div class="absolute inset-0 opacity-30" style="background-image: radial-gradient(circle, rgba(255,255,255,0.2) 1px, transparent 1px); background-size: 8px 8px;"></div>
|
| 186 |
+
<div id="minimap-viewport" class="absolute border-2 border-ocean-500/50 bg-ocean-500/10 rounded" style="left: 20%; top: 20%; width: 40%; height: 40%;"></div>
|
| 187 |
+
<!-- Minimap dots for nodes -->
|
| 188 |
+
<div class="absolute w-1.5 h-1.5 rounded-full bg-agent-autonomous" style="left: 30%; top: 35%;"></div>
|
| 189 |
+
<div class="absolute w-1.5 h-1.5 rounded-full bg-agent-human" style="left: 50%; top: 45%;"></div>
|
| 190 |
+
<div class="absolute w-1.5 h-1.5 rounded-full bg-agent-execution" style="left: 40%; top: 55%;"></div>
|
| 191 |
+
</div>
|
| 192 |
+
</main>
|
| 193 |
+
|
| 194 |
+
<!-- Right Panel: Inspector -->
|
| 195 |
+
<synapse-inspector></synapse-inspector>
|
| 196 |
+
</div>
|
| 197 |
+
|
| 198 |
+
<!-- Bottom Time-Reel -->
|
| 199 |
+
<synapse-time-reel></synapse-time-reel>
|
| 200 |
+
|
| 201 |
+
<!-- Omnibar Command Interface -->
|
| 202 |
+
<div id="omnibar" class="fixed bottom-32 left-1/2 -translate-x-1/2 w-[600px] max-w-[90vw] opacity-0 pointer-events-none transition-all duration-300 z-50">
|
| 203 |
+
<div class="bg-charcoal-800/95 backdrop-blur-2xl border border-charcoal-600 rounded-2xl shadow-2xl overflow-hidden">
|
| 204 |
+
<div class="flex items-center gap-3 px-4 py-3 border-b border-charcoal-700">
|
| 205 |
+
<i data-feather="terminal" class="w-5 h-5 text-citron-500"></i>
|
| 206 |
+
<input type="text" placeholder="Command agents, query data, or create workflows..."
|
| 207 |
+
class="flex-1 bg-transparent text-white placeholder-zinc-500 outline-none font-mono text-sm">
|
| 208 |
+
<span class="text-xs text-zinc-500 px-2 py-1 bg-charcoal-700 rounded">⌘K</span>
|
| 209 |
+
</div>
|
| 210 |
+
<div class="max-h-64 overflow-y-auto">
|
| 211 |
+
<div class="px-4 py-2 text-xs font-medium text-zinc-500 uppercase tracking-wider">Recent Commands</div>
|
| 212 |
+
<button class="w-full text-left px-4 py-3 hover:bg-charcoal-700/50 flex items-center gap-3 transition-colors group">
|
| 213 |
+
<div class="w-8 h-8 rounded-lg bg-agent-autonomous/20 flex items-center justify-center">
|
| 214 |
+
<i data-feather="cpu" class="w-4 h-4 text-agent-autonomous"></i>
|
| 215 |
+
</div>
|
| 216 |
+
<div class="flex-1">
|
| 217 |
+
<div class="text-sm text-zinc-200 group-hover:text-white">Deploy sentiment analysis agent</div>
|
| 218 |
+
<div class="text-xs text-zinc-500">Autonomous • Marketing pipeline</div>
|
| 219 |
+
</div>
|
| 220 |
+
</button>
|
| 221 |
+
<button class="w-full text-left px-4 py-3 hover:bg-charcoal-700/50 flex items-center gap-3 transition-colors group">
|
| 222 |
+
<div class="w-8 h-8 rounded-lg bg-agent-execution/20 flex items-center justify-center">
|
| 223 |
+
<i data-feather="database" class="w-4 h-4 text-agent-execution"></i>
|
| 224 |
+
</div>
|
| 225 |
+
<div class="flex-1">
|
| 226 |
+
<div class="text-sm text-zinc-200 group-hover:text-white">Sync Q3 financial projections</div>
|
| 227 |
+
<div class="text-xs text-zinc-500">Execution • 2.4GB dataset</div>
|
| 228 |
+
</div>
|
| 229 |
+
</button>
|
| 230 |
+
</div>
|
| 231 |
+
</div>
|
| 232 |
+
</div>
|
| 233 |
+
|
| 234 |
+
<!-- Conflict Resolution Modal -->
|
| 235 |
+
<div id="conflict-modal" class="fixed inset-0 bg-black/80 backdrop-blur-sm z-50 hidden items-center justify-center">
|
| 236 |
+
<div class="bg-charcoal-900 border border-charcoal-600 rounded-2xl max-w-2xl w-full mx-4 overflow-hidden">
|
| 237 |
+
<div class="p-6 border-b border-charcoal-700">
|
| 238 |
+
<div class="flex items-center gap-3 mb-2">
|
| 239 |
+
<div class="w-10 h-10 rounded-full bg-gradient-to-br from-coral-500 to-vermillion-500 flex items-center justify-center animate-pulse">
|
| 240 |
+
<i data-feather="alert-triangle" class="w-5 h-5 text-white"></i>
|
| 241 |
+
</div>
|
| 242 |
+
<div>
|
| 243 |
+
<h3 class="text-lg font-semibold text-white">Agent Conflict Detected</h3>
|
| 244 |
+
<p class="text-sm text-zinc-400">Resolution required for workflow integrity</p>
|
| 245 |
+
</div>
|
| 246 |
+
</div>
|
| 247 |
+
</div>
|
| 248 |
+
<div class="p-6 space-y-4">
|
| 249 |
+
<div class="flex gap-4">
|
| 250 |
+
<div class="flex-1 p-4 bg-charcoal-800 rounded-xl border border-agent-autonomous/30">
|
| 251 |
+
<div class="flex items-center gap-2 mb-2">
|
| 252 |
+
<div class="w-2 h-2 rounded-full bg-agent-autonomous animate-pulse"></div>
|
| 253 |
+
<span class="text-sm font-medium text-agent-autonomous">Analyzer-7</span>
|
| 254 |
+
</div>
|
| 255 |
+
<p class="text-sm text-zinc-300">Recommend immediate market exit based on volatility signals. Confidence: 94%</p>
|
| 256 |
+
</div>
|
| 257 |
+
<div class="flex-1 p-4 bg-charcoal-800 rounded-xl border border-agent-human/30">
|
| 258 |
+
<div class="flex items-center gap-2 mb-2">
|
| 259 |
+
<div class="w-2 h-2 rounded-full bg-agent-human"></div>
|
| 260 |
+
<span class="text-sm font-medium text-agent-human">Strategist-3</span>
|
| 261 |
+
</div>
|
| 262 |
+
<p class="text-sm text-zinc-300">Advocate holding position. Pattern matches 2019 recovery. Confidence: 87%</p>
|
| 263 |
+
</div>
|
| 264 |
+
</div>
|
| 265 |
+
<div class="relative">
|
| 266 |
+
<div class="h-2 bg-charcoal-700 rounded-full overflow-hidden">
|
| 267 |
+
<div id="conflict-slider-track" class="absolute inset-y-0 left-1/2 w-1 bg-gradient-to-r from-agent-autonomous via-white to-agent-human"></div>
|
| 268 |
+
</div>
|
| 269 |
+
<input type="range" min="0" max="100" value="50"
|
| 270 |
+
class="absolute inset-0 w-full h-full opacity-0 cursor-grab active:cursor-grabbing"
|
| 271 |
+
id="conflict-slider">
|
| 272 |
+
<div class="flex justify-between mt-2 text-xs text-zinc-500">
|
| 273 |
+
<span>Follow Analyzer-7</span>
|
| 274 |
+
<span id="conflict-value" class="text-white font-mono">50%</span>
|
| 275 |
+
<span>Follow Strategist-3</span>
|
| 276 |
+
</div>
|
| 277 |
+
</div>
|
| 278 |
+
</div>
|
| 279 |
+
<div class="p-6 border-t border-charcoal-700 flex gap-3">
|
| 280 |
+
<button class="flex-1 py-3 bg-coral-500 hover:bg-coral-400 text-white rounded-xl font-medium transition-colors">
|
| 281 |
+
Override & Decide
|
| 282 |
+
</button>
|
| 283 |
+
<button class="px-6 py-3 border border-charcoal-600 hover:bg-charcoal-800 text-zinc-300 rounded-xl transition-colors" onclick="document.getElementById('conflict-modal').classList.add('hidden')">
|
| 284 |
+
Defer
|
| 285 |
+
</button>
|
| 286 |
+
</div>
|
| 287 |
+
</div>
|
| 288 |
+
</div>
|
| 289 |
+
</div>
|
| 290 |
+
|
| 291 |
+
<!-- Component Scripts -->
|
| 292 |
+
<script src="components/synapse-header.js"></script>
|
| 293 |
+
<script src="components/synapse-agent-palette.js"></script>
|
| 294 |
+
<script src="components/synapse-inspector.js"></script>
|
| 295 |
+
<script src="components/synapse-time-reel.js"></script>
|
| 296 |
+
<script src="components/synapse-agent-node.js"></script>
|
| 297 |
+
|
| 298 |
+
<script src="script.js"></script>
|
| 299 |
+
<script>feather.replace();</script>
|
| 300 |
+
<script src="https://huggingface.co/deepsite/deepsite-badge.js"></script>
|
| 301 |
+
</body>
|
| 302 |
+
</html>
|
|
@@ -1,28 +1,285 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
body {
|
| 2 |
-
|
| 3 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4 |
}
|
| 5 |
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
}
|
| 10 |
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
font-size: 15px;
|
| 14 |
-
margin-bottom: 10px;
|
| 15 |
-
margin-top: 5px;
|
| 16 |
}
|
| 17 |
|
| 18 |
-
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
padding: 16px;
|
| 22 |
-
border: 1px solid lightgray;
|
| 23 |
-
border-radius: 16px;
|
| 24 |
}
|
| 25 |
|
| 26 |
-
|
| 27 |
-
|
|
|
|
|
|
|
|
|
|
| 28 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/* Synapse Canvas — Design Token System */
|
| 2 |
+
|
| 3 |
+
:root {
|
| 4 |
+
/* Core Colors */
|
| 5 |
+
--color-ocean-900: #0A4F4F;
|
| 6 |
+
--color-ocean-500: #17C2C2;
|
| 7 |
+
--color-coral-500: #FF6B6B;
|
| 8 |
+
--color-charcoal-950: #000000;
|
| 9 |
+
--color-charcoal-900: #0A0A0F;
|
| 10 |
+
--color-charcoal-800: #141419;
|
| 11 |
+
--color-charcoal-700: #1A1D21;
|
| 12 |
+
--color-vermillion-500: #E85D04;
|
| 13 |
+
--color-citron-500: #CCFF00;
|
| 14 |
+
|
| 15 |
+
/* Agent Semantic Colors */
|
| 16 |
+
--agent-autonomous: #F59E0B;
|
| 17 |
+
--agent-human: #3B82F6;
|
| 18 |
+
--agent-system: #64748B;
|
| 19 |
+
--agent-execution: #10B981;
|
| 20 |
+
|
| 21 |
+
/* Typography */
|
| 22 |
+
--font-sans: 'Inter', system-ui, sans-serif;
|
| 23 |
+
--font-mono: 'JetBrains Mono', monospace;
|
| 24 |
+
--font-display: 'Space Grotesk', sans-serif;
|
| 25 |
+
|
| 26 |
+
/* Motion */
|
| 27 |
+
--ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
|
| 28 |
+
--ease-smooth: cubic-bezier(0.4, 0, 0.2, 1);
|
| 29 |
+
--duration-instant: 150ms;
|
| 30 |
+
--duration-fast: 250ms;
|
| 31 |
+
--duration-normal: 400ms;
|
| 32 |
+
--duration-slow: 600ms;
|
| 33 |
+
|
| 34 |
+
/* Z-Index Scale */
|
| 35 |
+
--z-background: -1;
|
| 36 |
+
--z-base: 0;
|
| 37 |
+
--z-elevated: 10;
|
| 38 |
+
--z-floating: 100;
|
| 39 |
+
--z-overlay: 1000;
|
| 40 |
+
--z-modal: 2000;
|
| 41 |
+
--z-toast: 3000;
|
| 42 |
+
|
| 43 |
+
/* Glow Effects */
|
| 44 |
+
--glow-ocean: 0 0 20px rgba(23, 194, 194, 0.3);
|
| 45 |
+
--glow-coral: 0 0 20px rgba(255, 107, 107, 0.3);
|
| 46 |
+
--glow-citron: 0 0 20px rgba(204, 255, 0, 0.3);
|
| 47 |
+
--glow-agent-autonomous: 0 0 15px rgba(245, 158, 11, 0.4);
|
| 48 |
+
--glow-agent-human: 0 0 15px rgba(59, 130, 246, 0.4);
|
| 49 |
+
--glow-agent-execution: 0 0 15px rgba(16, 185, 129, 0.4);
|
| 50 |
+
}
|
| 51 |
+
|
| 52 |
+
/* Base Reset */
|
| 53 |
+
*, *::before, *::after {
|
| 54 |
+
box-sizing: border-box;
|
| 55 |
+
margin: 0;
|
| 56 |
+
padding: 0;
|
| 57 |
+
}
|
| 58 |
+
|
| 59 |
+
html {
|
| 60 |
+
font-size: 16px;
|
| 61 |
+
-webkit-font-smoothing: antialiased;
|
| 62 |
+
-moz-osx-font-smoothing: grayscale;
|
| 63 |
+
}
|
| 64 |
+
|
| 65 |
body {
|
| 66 |
+
font-family: var(--font-sans);
|
| 67 |
+
background: var(--color-charcoal-950);
|
| 68 |
+
color: #A1A1AA;
|
| 69 |
+
line-height: 1.5;
|
| 70 |
+
overflow: hidden;
|
| 71 |
+
}
|
| 72 |
+
|
| 73 |
+
/* Scrollbar Styling */
|
| 74 |
+
::-webkit-scrollbar {
|
| 75 |
+
width: 6px;
|
| 76 |
+
height: 6px;
|
| 77 |
+
}
|
| 78 |
+
|
| 79 |
+
::-webkit-scrollbar-track {
|
| 80 |
+
background: var(--color-charcoal-900);
|
| 81 |
+
}
|
| 82 |
+
|
| 83 |
+
::-webkit-scrollbar-thumb {
|
| 84 |
+
background: var(--color-charcoal-700);
|
| 85 |
+
border-radius: 3px;
|
| 86 |
+
}
|
| 87 |
+
|
| 88 |
+
::-webkit-scrollbar-thumb:hover {
|
| 89 |
+
background: var(--color-charcoal-600);
|
| 90 |
+
}
|
| 91 |
+
|
| 92 |
+
/* Selection */
|
| 93 |
+
::selection {
|
| 94 |
+
background: rgba(23, 194, 194, 0.3);
|
| 95 |
+
color: white;
|
| 96 |
+
}
|
| 97 |
+
|
| 98 |
+
/* Focus States */
|
| 99 |
+
:focus-visible {
|
| 100 |
+
outline: 2px solid var(--color-ocean-500);
|
| 101 |
+
outline-offset: 2px;
|
| 102 |
+
}
|
| 103 |
+
|
| 104 |
+
/* Agent Node Base Styles */
|
| 105 |
+
.agent-node {
|
| 106 |
+
position: absolute;
|
| 107 |
+
width: 280px;
|
| 108 |
+
transition: all var(--duration-fast) var(--ease-spring);
|
| 109 |
+
transform-origin: center center;
|
| 110 |
+
}
|
| 111 |
+
|
| 112 |
+
.agent-node:hover {
|
| 113 |
+
z-index: var(--z-floating);
|
| 114 |
+
}
|
| 115 |
+
|
| 116 |
+
.agent-node.focused {
|
| 117 |
+
z-index: calc(var(--z-floating) + 10);
|
| 118 |
+
}
|
| 119 |
+
|
| 120 |
+
.agent-node.wireframe {
|
| 121 |
+
opacity: 0.6;
|
| 122 |
+
}
|
| 123 |
+
|
| 124 |
+
.agent-node.wireframe .node-content {
|
| 125 |
+
background: transparent;
|
| 126 |
+
border-style: dashed;
|
| 127 |
+
}
|
| 128 |
+
|
| 129 |
+
/* Glassmorphism Base */
|
| 130 |
+
.glass {
|
| 131 |
+
background: rgba(20, 20, 25, 0.8);
|
| 132 |
+
backdrop-filter: blur(20px) saturate(180%);
|
| 133 |
+
-webkit-backdrop-filter: blur(20px) saturate(180%);
|
| 134 |
+
border: 1px solid rgba(255, 255, 255, 0.08);
|
| 135 |
+
}
|
| 136 |
+
|
| 137 |
+
.glass-strong {
|
| 138 |
+
background: rgba(26, 29, 33, 0.95);
|
| 139 |
+
backdrop-filter: blur(40px) saturate(200%);
|
| 140 |
+
-webkit-backdrop-filter: blur(40px) saturate(200%);
|
| 141 |
+
border: 1px solid rgba(255, 255, 255, 0.12);
|
| 142 |
+
}
|
| 143 |
+
|
| 144 |
+
/* Connection Lines */
|
| 145 |
+
.connection-line {
|
| 146 |
+
fill: none;
|
| 147 |
+
stroke-width: 2;
|
| 148 |
+
stroke-linecap: round;
|
| 149 |
+
pointer-events: stroke;
|
| 150 |
+
transition: all var(--duration-fast) var(--ease-smooth);
|
| 151 |
}
|
| 152 |
|
| 153 |
+
.connection-line:hover {
|
| 154 |
+
stroke-width: 4;
|
| 155 |
+
filter: url(#glow);
|
| 156 |
}
|
| 157 |
|
| 158 |
+
.connection-line.active {
|
| 159 |
+
animation: dataPulse 1s ease-in-out infinite;
|
|
|
|
|
|
|
|
|
|
| 160 |
}
|
| 161 |
|
| 162 |
+
@keyframes dataPulse {
|
| 163 |
+
0%, 100% { stroke-opacity: 0.4; }
|
| 164 |
+
50% { stroke-opacity: 1; }
|
|
|
|
|
|
|
|
|
|
| 165 |
}
|
| 166 |
|
| 167 |
+
/* Data Flow Particles */
|
| 168 |
+
.data-particle {
|
| 169 |
+
fill: var(--color-citron-500);
|
| 170 |
+
filter: url(#glow);
|
| 171 |
+
animation: flowAlongPath 2s linear infinite;
|
| 172 |
}
|
| 173 |
+
|
| 174 |
+
@keyframes flowAlongPath {
|
| 175 |
+
0% { offset-distance: 0%; opacity: 0; }
|
| 176 |
+
10% { opacity: 1; }
|
| 177 |
+
90% { opacity: 1; }
|
| 178 |
+
100% { offset-distance: 100%; opacity: 0; }
|
| 179 |
+
}
|
| 180 |
+
|
| 181 |
+
/* Neural Pulse Animation */
|
| 182 |
+
.neural-pulse {
|
| 183 |
+
position: relative;
|
| 184 |
+
}
|
| 185 |
+
|
| 186 |
+
.neural-pulse::after {
|
| 187 |
+
content: '';
|
| 188 |
+
position: absolute;
|
| 189 |
+
inset: -4px;
|
| 190 |
+
border-radius: inherit;
|
| 191 |
+
background: inherit;
|
| 192 |
+
opacity: 0;
|
| 193 |
+
animation: pulseRing 2s ease-out infinite;
|
| 194 |
+
z-index: -1;
|
| 195 |
+
}
|
| 196 |
+
|
| 197 |
+
@keyframes pulseRing {
|
| 198 |
+
0% { transform: scale(1); opacity: 0.5; }
|
| 199 |
+
100% { transform: scale(1.5); opacity: 0; }
|
| 200 |
+
}
|
| 201 |
+
|
| 202 |
+
/* Agent Avatar Geometries */
|
| 203 |
+
.agent-avatar {
|
| 204 |
+
width: 48px;
|
| 205 |
+
height: 48px;
|
| 206 |
+
position: relative;
|
| 207 |
+
display: flex;
|
| 208 |
+
align-items: center;
|
| 209 |
+
justify-content: center;
|
| 210 |
+
}
|
| 211 |
+
|
| 212 |
+
.agent-avatar::before {
|
| 213 |
+
content: '';
|
| 214 |
+
position: absolute;
|
| 215 |
+
inset: 0;
|
| 216 |
+
border-radius: 12px;
|
| 217 |
+
background: linear-gradient(135deg, currentColor 0%, transparent 50%);
|
| 218 |
+
opacity: 0.3;
|
| 219 |
+
}
|
| 220 |
+
|
| 221 |
+
.agent-avatar.autonomous {
|
| 222 |
+
color: var(--agent-autonomous);
|
| 223 |
+
}
|
| 224 |
+
|
| 225 |
+
.agent-avatar.human {
|
| 226 |
+
color: var(--agent-human);
|
| 227 |
+
border-radius: 50%;
|
| 228 |
+
}
|
| 229 |
+
|
| 230 |
+
.agent-avatar.system {
|
| 231 |
+
color: var(--agent-system);
|
| 232 |
+
clip-path: polygon(50% 0%, 100% 25%, 100% 75%, 50% 100%, 0% 75%, 0% 25%);
|
| 233 |
+
}
|
| 234 |
+
|
| 235 |
+
.agent-avatar.execution {
|
| 236 |
+
color: var(--agent-execution);
|
| 237 |
+
border-radius: 4px;
|
| 238 |
+
transform: rotate(45deg);
|
| 239 |
+
}
|
| 240 |
+
|
| 241 |
+
.agent-avatar.execution > * {
|
| 242 |
+
transform: rotate(-45deg);
|
| 243 |
+
}
|
| 244 |
+
|
| 245 |
+
/* Activity Indicators */
|
| 246 |
+
.activity-indicator {
|
| 247 |
+
width: 8px;
|
| 248 |
+
height: 8px;
|
| 249 |
+
border-radius: 50%;
|
| 250 |
+
position: relative;
|
| 251 |
+
}
|
| 252 |
+
|
| 253 |
+
.activity-indicator.active {
|
| 254 |
+
animation: activityBlink 1.5s ease-in-out infinite;
|
| 255 |
+
}
|
| 256 |
+
|
| 257 |
+
.activity-indicator.processing {
|
| 258 |
+
animation: activitySpin 1s linear infinite;
|
| 259 |
+
}
|
| 260 |
+
|
| 261 |
+
@keyframes activityBlink {
|
| 262 |
+
0%, 100% { opacity: 0.3; transform: scale(1); }
|
| 263 |
+
50% { opacity: 1; transform: scale(1.2); }
|
| 264 |
+
}
|
| 265 |
+
|
| 266 |
+
@keyframes activitySpin {
|
| 267 |
+
0% { transform: rotate(0deg); }
|
| 268 |
+
100% { transform: rotate(360deg); }
|
| 269 |
+
}
|
| 270 |
+
|
| 271 |
+
/* Tension Zone (Conflict) */
|
| 272 |
+
.tension-zone {
|
| 273 |
+
position: absolute;
|
| 274 |
+
border-radius: 50%;
|
| 275 |
+
background: radial-gradient(ellipse at center,
|
| 276 |
+
rgba(232, 93, 4, 0.2) 0%,
|
| 277 |
+
rgba(255, 107, 107, 0.1) 40%,
|
| 278 |
+
transparent 70%
|
| 279 |
+
);
|
| 280 |
+
animation: tensionPulse 2s ease-in-out infinite;
|
| 281 |
+
pointer-events: none;
|
| 282 |
+
}
|
| 283 |
+
|
| 284 |
+
@keyframes tensionPulse {
|
| 285 |
+
0%, 100% { transform: scale(1); opacity: 0.6; }
|