/* HeroBurst — radial particle burst à la Stripe, magenta → violet → deep purple */ const { useMemo } = React; function HeroBurst({ density = 1, intensity = 1 }) { const rays = useMemo(() => { const count = Math.round(180 * density); const arr = []; // pseudo-random but deterministic let seed = 7; const rnd = () => { seed = (seed * 9301 + 49297) % 233280; return seed / 233280; }; for (let i = 0; i < count; i++) { const angle = (i / count) * Math.PI * 2 + rnd() * 0.04; const lengthBase = 320 + rnd() * 360; const length = lengthBase * (0.6 + rnd() * 0.8); const startR = 30 + rnd() * 40; const opacity = 0.15 + rnd() * 0.55; const width = rnd() < 0.85 ? 0.6 : 1.4; const dur = 4 + rnd() * 8; const delay = rnd() * 6; arr.push({ angle, length, startR, opacity, width, dur, delay }); } return arr; }, [density]); const particles = useMemo(() => { const count = Math.round(80 * density); const arr = []; let seed = 23; const rnd = () => { seed = (seed * 9301 + 49297) % 233280; return seed / 233280; }; for (let i = 0; i < count; i++) { const r = 60 + rnd() * 460; const angle = rnd() * Math.PI * 2; const x = Math.cos(angle) * r; const y = Math.sin(angle) * r; const size = 0.8 + rnd() * 2.2; const dur = 6 + rnd() * 10; const delay = rnd() * 8; const opacity = 0.3 + rnd() * 0.7; arr.push({ x, y, size, dur, delay, opacity }); } return arr; }, [density]); const cx = 600, cy = 600; return ( ); } window.HeroBurst = HeroBurst;