// Shared building blocks
const { useEffect, useRef, useState, useMemo } = React;
const Section = ({ id, eyebrow, title, sub, children, className = '', titleClass = '' }) => (
{(eyebrow || title || sub) && (
{eyebrow &&
{eyebrow}
}
{title &&
{title}
}
{sub &&
{sub}
}
)}
{children}
);
const Eyebrow = ({ children, dot = true }) => (
{dot && }
{children}
);
// Brand swirl mark (the "e" from the logo, abstracted)
const SwirlMark = ({ size = 28, animate = true }) => (
);
// Use-on-scroll reveal
function useReveal() {
useEffect(() => {
const els = document.querySelectorAll('.reveal');
const io = new IntersectionObserver((entries) => {
entries.forEach(e => { if (e.isIntersecting) { e.target.classList.add('in'); io.unobserve(e.target); } });
}, { threshold: 0.12 });
els.forEach(el => io.observe(el));
return () => io.disconnect();
});
}
window.Section = Section;
window.Eyebrow = Eyebrow;
window.SwirlMark = SwirlMark;
window.useReveal = useReveal;