/* global React */ const { useState, useEffect, useRef } = React; // ===== Icons ===== const Icon = { Logo: (props) => ( ), Star4: (props) => ( ), Sparkle: (props) => ( ), Moon: (props) => ( ), Check: (props) => ( ), Heart: (props) => ( ), Briefcase: (props) => ( ), Coin: (props) => ( ), Compass: (props) => ( ), Shield: (props) => ( ), Hand: (props) => ( ), Eye: (props) => ( ), Feather: (props) => ( ), Quote: (props) => ( ), Plus: (props) => ( ), Close: (props) => ( ), Instagram: (props) => ( ), Facebook: (props) => ( ), TikTok: (props) => ( ), YouTube: (props) => ( ), }; // ===== Decorative Sun-burst Corner ===== const SunBurst = ({ className = "" }) => ( ); // ===== Tarot card art ===== const TarotArt = () => ( THE STAR ); // ===== Decorative leaf/moon divider ===== const CelestialDivider = ({ size = 32 }) => ( ); // ===== Particles ===== const Particles = ({ count = 14 }) => { const particles = React.useMemo(() => Array.from({ length: count }, (_, i) => ({ left: Math.random() * 100, delay: Math.random() * 14, duration: 12 + Math.random() * 8, size: 1.5 + Math.random() * 2, opacity: 0.3 + Math.random() * 0.5, })), [count]); return (
{particles.map((p, i) => (
))}
); }; // ===== Scroll reveal hook ===== function useReveal() { const ref = useRef(null); useEffect(() => { if (!ref.current) return; const el = ref.current; const obs = new IntersectionObserver((entries) => { entries.forEach((e) => { if (e.isIntersecting) { e.target.classList.add("in"); obs.unobserve(e.target); } }); }, { threshold: 0.15 }); obs.observe(el); return () => obs.disconnect(); }, []); return ref; } Object.assign(window, { Icon, SunBurst, TarotArt, CelestialDivider, Particles, useReveal });