// hero-orb.jsx — Premium abstract 3D orb visual for the hero // Pure SVG. Renders an iridescent metallic sphere with an // orbiting agent/process diagram overlaid — looks like a real product visual, // not a stock AI gradient. const HeroOrb = () => { const ref = React.useRef(null); const [t, setT] = React.useState(0); React.useEffect(() => { let raf, start = performance.now(); const tick = (now) => { setT((now - start) / 1000); raf = requestAnimationFrame(tick); }; raf = requestAnimationFrame(tick); return () => cancelAnimationFrame(raf); }, []); // Parallax to mouse const [pt, setPt] = React.useState({ x: 0, y: 0 }); React.useEffect(() => { const onMove = (e) => { const r = ref.current?.getBoundingClientRect(); if (!r) return; const cx = r.left + r.width / 2; const cy = r.top + r.height / 2; const nx = (e.clientX - cx) / r.width; const ny = (e.clientY - cy) / r.height; setPt({ x: Math.max(-1, Math.min(1, nx)), y: Math.max(-1, Math.min(1, ny)) }); }; window.addEventListener("mousemove", onMove, { passive: true }); return () => window.removeEventListener("mousemove", onMove); }, []); const px = pt.x * 8; const py = pt.y * 8; // Orbit nodes const nodes = [ { label: "INPUT", angle: -110, r: 230, k: "in" }, { label: "AGENT", angle: -35, r: 250, k: "ag" }, { label: "TOOLS", angle: 55, r: 235, k: "tl" }, { label: "OUTPUT", angle: 140, r: 245, k: "ou" }, ]; return (
{/* Sphere body — soft pearlescent gradient; not generic purple */} {/* Hot specular */} {/* Accent rim glow */} {/* Equator band */} {/* Floor shadow */} {/* Noise fog */} {/* Floor shadow */} {/* Outer rings — process orbit */} {/* The sphere */} {/* Equator databand: animated tick marks */} {Array.from({ length: 22 }).map((_, i) => ( ))} {/* Specular highlight */} {/* Crescent terminator hint */} {/* Orbit nodes — process / agent topology */} {nodes.map((n, i) => { const wob = Math.sin(t * 0.6 + i) * 4; const a = (n.angle * Math.PI) / 180; const r = n.r + wob; const x = Math.cos(a) * r; const y = Math.sin(a) * r; return ( {n.label} ); })} {/* Tiny floating data ticks */} {Array.from({ length: 5 }).map((_, i) => { const a = t * 0.4 + i * 1.4; const r = 290 + Math.sin(a * 1.3) * 6; const x = Math.cos(a) * r; const y = Math.sin(a) * r; return ; })} {/* Floating chip overlay — shows it's a real system */}
agent.run
trace_a3f1 {(1.24 + Math.sin(t)*0.04).toFixed(2)}s
queue {Math.floor(12 + (Math.sin(t*0.6)+1)*9)}
tools/3
); }; window.HeroOrb = HeroOrb;