feat: Introduce Nucleo as the main AI agent identity

- Add Nucleo atom logo with animated orbiting electrons
- Redesign FAB with glassmorphism effect and purple gradient
- Add connection indicator (green dot) when terminal is open
- Update FloatingTerminal header with Nucleo branding
- Add PermissionRequest hook support with red alert animation
- Document Nucleo in README with visual states table
- Create official Nucleo logo SVG in docs/
This commit is contained in:
2026-02-14 02:56:50 -06:00
parent d9e2548fb8
commit 47f5524416
6 changed files with 368 additions and 52 deletions

61
docs/nucleo-logo.svg Normal file
View File

@@ -0,0 +1,61 @@
<svg width="120" height="120" viewBox="0 0 120 120" fill="none" xmlns="http://www.w3.org/2000/svg">
<defs>
<radialGradient id="coreGradient" cx="50%" cy="30%" r="60%">
<stop offset="0%" stop-color="#c4b5fd"/>
<stop offset="50%" stop-color="#a78bfa"/>
<stop offset="100%" stop-color="#6366f1"/>
</radialGradient>
<linearGradient id="orbitGradient1" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" stop-color="#818cf8" stop-opacity="0.9"/>
<stop offset="50%" stop-color="#a78bfa" stop-opacity="0.5"/>
<stop offset="100%" stop-color="#818cf8" stop-opacity="0.9"/>
</linearGradient>
<linearGradient id="electronGradient" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" stop-color="#e0e7ff"/>
<stop offset="100%" stop-color="#a78bfa"/>
</linearGradient>
<filter id="glow" x="-50%" y="-50%" width="200%" height="200%">
<feGaussianBlur stdDeviation="3" result="blur"/>
<feMerge>
<feMergeNode in="blur"/>
<feMergeNode in="SourceGraphic"/>
</feMerge>
</filter>
<filter id="coreGlow" x="-100%" y="-100%" width="300%" height="300%">
<feGaussianBlur stdDeviation="6" result="blur"/>
<feMerge>
<feMergeNode in="blur"/>
<feMergeNode in="SourceGraphic"/>
</feMerge>
</filter>
</defs>
<!-- Background circle (subtle) -->
<circle cx="60" cy="60" r="55" fill="none" stroke="#4f46e5" stroke-width="1" opacity="0.2"/>
<!-- Orbital rings -->
<ellipse cx="60" cy="60" rx="45" ry="18" stroke="url(#orbitGradient1)" stroke-width="2" fill="none" transform="rotate(-30 60 60)" opacity="0.7"/>
<ellipse cx="60" cy="60" rx="45" ry="18" stroke="url(#orbitGradient1)" stroke-width="2" fill="none" transform="rotate(30 60 60)" opacity="0.5"/>
<ellipse cx="60" cy="60" rx="45" ry="18" stroke="url(#orbitGradient1)" stroke-width="2" fill="none" transform="rotate(90 60 60)" opacity="0.6"/>
<!-- Core nucleus with glow -->
<circle cx="60" cy="60" r="18" fill="url(#coreGradient)" filter="url(#coreGlow)"/>
<circle cx="60" cy="60" r="14" fill="url(#coreGradient)" opacity="0.8"/>
<circle cx="55" cy="55" r="5" fill="white" opacity="0.4"/>
<!-- Electrons with glow -->
<circle cx="60" cy="15" r="7" fill="url(#electronGradient)" filter="url(#glow)">
<animateTransform attributeName="transform" type="rotate" from="0 60 60" to="360 60 60" dur="4s" repeatCount="indefinite"/>
</circle>
<circle cx="100" cy="70" r="6" fill="url(#electronGradient)" filter="url(#glow)">
<animateTransform attributeName="transform" type="rotate" from="120 60 60" to="480 60 60" dur="5s" repeatCount="indefinite"/>
</circle>
<circle cx="20" cy="70" r="6" fill="url(#electronGradient)" filter="url(#glow)">
<animateTransform attributeName="transform" type="rotate" from="240 60 60" to="600 60 60" dur="4.5s" repeatCount="indefinite"/>
</circle>
<!-- Small accent electrons -->
<circle cx="60" cy="105" r="4" fill="#c4b5fd" opacity="0.6">
<animateTransform attributeName="transform" type="rotate" from="180 60 60" to="540 60 60" dur="6s" repeatCount="indefinite"/>
</circle>
</svg>

After

Width:  |  Height:  |  Size: 3.1 KiB