// Shared page primitives — hero, prose, reveal hook
const useReveal = () => {
React.useEffect(() => {
if (!window.gsap || !window.ScrollTrigger) return;
const els = document.querySelectorAll("[data-reveal]");
window.gsap.from(els, {
y: 28, opacity: 0, duration: 0.9, stagger: 0.06, ease: "expo.out",
});
const scrollEls = document.querySelectorAll("[data-reveal-scroll]");
scrollEls.forEach(el => {
window.gsap.from(el, {
scrollTrigger: { trigger: el, start: "top 85%" },
y: 32, opacity: 0, duration: 0.9, ease: "expo.out",
});
});
}, []);
};
window.useReveal = useReveal;
const PageHero = ({ eyebrow, title, lead, tint = "var(--cobalt-700)" }) => (
{/* subtle brand glow */}
{eyebrow}
{title}
{lead && (
{lead}
)}
);
window.PageHero = PageHero;
const Prose = ({ children, maxw = 760 }) => (
);
window.Prose = Prose;
const H2 = ({ children }) => (
{children}
);
window.H2 = H2;
const P = ({ children }) => (
{children}
);
window.P = P;
const Meta = ({ items = [] }) => (
{items.map(([label, value]) => (
{label}
{value}
))}
);
window.Meta = Meta;
const UL = ({ items = [] }) => (
{items.map((item, i) => (
-
{item}
))}
);
window.UL = UL;
// Pill button — solid + outline variants used across the site
const Btn = ({ href, children, variant = "primary", target, rel, onClick, type }) => {
const styles = {
primary: {
background: "var(--ink-900)", color: "var(--paper)",
border: "1px solid var(--ink-900)",
},
accent: {
background: "var(--brand-gradient)", color: "var(--paper)",
border: "1px solid transparent",
},
ghost: {
background: "transparent", color: "var(--ink-900)",
border: "1px solid var(--border-strong)",
},
invert: {
background: "var(--paper)", color: "var(--ink-900)",
border: "1px solid var(--paper)",
},
}[variant];
const Tag = href ? "a" : "button";
return (
{ e.currentTarget.style.transform = "translateY(-1px)"; e.currentTarget.style.boxShadow = "0 10px 24px rgba(46,91,255,0.20)"; }}
onMouseLeave={e => { e.currentTarget.style.transform = "translateY(0)"; e.currentTarget.style.boxShadow = "none"; }}
>
{children}
);
};
window.Btn = Btn;