/* At a glance — kinetic metric board: scroll-driven reveal, roll-up digits, spotlight hover. */ const STATS = [ { v: 37, suf: '+', k: 'Websites shipped', d: 'Screenshots supplied by ZaviFx', note: 'Every build in the showcase above is live work — filter the portfolio by category to open each one full page.' }, { v: 12, suf: '', k: 'Disciplines in-house', d: 'Strategy to performance', note: 'One brief covers SEO, build, design, content and paid — coordinated by a single strategist.' }, { t: 'Hyderabad', k: 'Where the team sits', d: 'Working worldwide', note: 'Telangana, India — engagements run across IST, GMT and EST windows.' }, { v: 48, suf: 'h', k: 'Proposal turnaround', d: 'After the discovery call', note: 'Scope, timeline and a fixed price in writing, within two working days of the first call.' }, ]; function StatsBoard() { const ref = React.useRef(null); const [live, setLive] = React.useState(false); React.useEffect(() => { const el = ref.current; if (!el) return; if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) { setLive(true); return; } const io = new IntersectionObserver((es) => { if (es[0].isIntersecting) { setLive(true); io.disconnect(); } }, { threshold: 0.25 }); io.observe(el); return () => io.disconnect(); }, []); const move = (e) => { const el = e.currentTarget, r = el.getBoundingClientRect(); el.style.setProperty('--mx', (e.clientX - r.left) + 'px'); el.style.setProperty('--my', (e.clientY - r.top) + 'px'); }; return (
); } Object.assign(window, { StatsBoard, STATS });