// Builders Lab, Founder, Join, Footer const { useEffect: useE5, useState: useS5, useRef: useR5 } = React; function BuildersLab({ t }) { const ref = useR5(null); const [inView, setInView] = useS5(false); useE5(() => { const io = new IntersectionObserver(([e]) => e.isIntersecting && setInView(true), { threshold: 0.15 }); if (ref.current) io.observe(ref.current); return () => io.disconnect(); }, []); return (
{/* giant backing circle */}
NEW — {t.lab.eyebrow}

The Builders Lab

{t.lab.sub}

{t.lab.part} · Equigent
{/* Three-circle diagram */}
{[ { label: t.lab.bubble1.t, sub: t.lab.bubble1.s, c: '#f4a8b8', x: 25, y: 50, size: 0.56 }, { label: t.lab.bubble2.t, sub: t.lab.bubble2.s, c: '#f06b8f', x: 50, y: 30, size: 0.56 }, { label: t.lab.bubble3.t, sub: t.lab.bubble3.s, c: '#e85a5a', x: 50, y: 68, size: 0.56 }, ].map((b, i) => (
{b.label}
{b.sub}
))}
{t.lab.overlap}
{t.lab.cta1} {t.lab.cta2}
); } function Founder({ t }) { const ref = useR5(null); const [inView, setInView] = useS5(false); useE5(() => { const io = new IntersectionObserver(([e]) => e.isIntersecting && setInView(true), { threshold: 0.15 }); if (ref.current) io.observe(ref.current); return () => io.disconnect(); }, []); return (
Sol Michaela Dominique e.currentTarget.style.transform = 'scale(1.04)'} onMouseLeave={(e) => e.currentTarget.style.transform = 'scale(1)'} />
Founder Lund · Stockholm
{t.founder.eyebrow}
{t.founder.quote}
Sol Michaela Dominique
{t.founder.role}
{(t.founder.stats || []).map((s, i) => (
{s.n}
{s.l}
))}
); } function Join({ t }) { const ref = useR5(null); const [inView, setInView] = useS5(false); const [email, setEmail] = useS5(''); const [sent, setSent] = useS5(false); const [consent, setConsent] = useS5(false); useE5(() => { const io = new IntersectionObserver(([e]) => e.isIntersecting && setInView(true), { threshold: 0.2 }); if (ref.current) io.observe(ref.current); return () => io.disconnect(); }, []); return (
{/* ambient */}
{t.join.eyebrow}

{t.join.l1} {t.join.l2}.

{t.join.sub}

{ e.preventDefault(); if (!consent) return; // Formspree endpoint — replace this URL with the one from formspree.io // The account should be set up with solmichaela@femquity.com const FORMSPREE = 'https://formspree.io/f/REPLACE_WITH_YOUR_FORMSPREE_ID'; if (FORMSPREE.includes('REPLACE_WITH')) { // Fallback: open user's email client window.location.href = `mailto:solmichaela@femquity.com?subject=Cohort%2003%20application%20request&body=${encodeURIComponent('Hi Sol,\n\nI\'d like to request the application for Cohort 03.\n\nEmail: ' + email + '\n\n— Sent from femquity.com')}`; setSent(true); return; } fetch(FORMSPREE, { method: 'POST', headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' }, body: JSON.stringify({ email, consent: true, source: 'femquity.com — join form' }), }).then(() => setSent(true)).catch(() => setSent(true)); }} className={`reveal d3 ${inView ? 'in' : ''}`} style={{ display: 'flex', flexDirection: 'column', gap: 12, maxWidth: 500, margin: '0 auto', }} >
setEmail(e.target.value)} style={{ flex: 1, background: 'transparent', border: 0, padding: '12px 20px', color: 'var(--ivory)', fontSize: 14, outline: 'none', fontFamily: 'var(--sans)', }} />
{t.join.fineprint}
); } function Footer({ t }) { return ( ); } window.BuildersLab = BuildersLab; window.Founder = Founder; window.Join = Join; window.Footer = Footer;