// Capabilities section — min-h-screen, full-bleed video bg, 3 cards const { motion: capMotion } = window.Motion; const { useEffect: capUseEffect, useRef: capUseRef, useState: capUseState } = React; const CAP_VIDEO = "https://d8j0ntlcm91z4.cloudfront.net/user_38xzZboKViGWJOttwIXH07lWA1P/hf_20260418_094631_d30ab262-45ee-4b7d-99f3-5d5848c8ef13.mp4"; // whileInView is unreliable on the framer-motion 10.18.0 UMD build. Use a // hook-driven IntersectionObserver that flips an `animate` prop instead. function useInViewOnce(threshold = 0.2) { const ref = capUseRef(null); const [shown, setShown] = capUseState(false); capUseEffect(() => { const el = ref.current; if (!el) return; const io = new IntersectionObserver( (entries) => { entries.forEach((e) => { if (e.isIntersecting) { setShown(true); io.disconnect(); } }); }, { threshold } ); io.observe(el); return () => io.disconnect(); }, []); return [ref, shown]; } const fadeUp = (delay = 0, shown = true) => ({ initial: { filter: 'blur(10px)', opacity: 0, y: 20 }, animate: shown ? { filter: 'blur(0px)', opacity: 1, y: 0 } : { filter: 'blur(10px)', opacity: 0, y: 20 }, transition: { duration: 0.8, ease: 'easeOut', delay }, }); function CapTag({ children }) { return ( {children} ); } function CapCard({ icon, tags, title, body, delay }) { const [ref, shown] = useInViewOnce(0.15); return ( {/* Large gold icon */}
{icon}
{/* Big title */}

{title}

{/* Tag pills */}
{tags.map((t) => ( {t} ))}
{/* Body */}

{body}

); } function Capabilities() { return (
); } function CapContent() { const [kickerRef, kickerShown] = useInViewOnce(0.2); const [headRef, headShown] = useInViewOnce(0.2); return (

// Cómo funciona

Tu energía,
explicada.
} tags={['20 seg', 'Automático']} title="Medí" body="Respondé 3 preguntas en 20 segundos cada mañana o conectá tu wearable y WuClock lo hace solo." /> } tags={['MTC', 'Personalizado']} title="Entendé" body="WuClock te explica por qué te sentís como te sentís hoy. En tu idioma. Sin jerga técnica. Con la precisión de 5.000 años de medicina oriental." /> } tags={['8 min', 'Tu elemento']} title="Actuá" body="Un ritual personalizado según tu elemento, tu clasificación del día y cómo dormiste anoche." />
); } function CapStatsRow() { const [ref, shown] = useInViewOnce(0.2); const stats = [ { num: '200+', label: 'Usuarios activos' }, { num: '5.000 años', label: 'De sabiduría MTC' }, { num: 'Latam', label: 'Hecho desde Argentina' }, ]; return ( {stats.map((s, i) => ( {i > 0 && (
)}
{s.num}
{s.label}
))} ); } Object.assign(window, { Capabilities, useInViewOnce, fadeUp });