/* Shared landing-page bits: section header, buttons, scroll-reveal wrapper. */ function SectionHead({ eyebrow, title, sub, center, maxw }) { return (
{eyebrow}

{title}

{sub &&

{sub}

}
); } /* Gold-filled primary action. Renders as when href given, else ; } /* Outlined gold action. */ function GhostCTA({ label, icon, href, onClick, style = {} }) { const base = { fontFamily: "var(--font-sans)", fontSize: 13, fontWeight: 500, letterSpacing: "0.15em", textTransform: "uppercase", color: "var(--accent)", background: "transparent", border: "1px solid var(--border-gold-strong)", borderRadius: "var(--r-sm)", padding: "15px 28px", cursor: "pointer", transition: "border-color var(--dur) var(--ease), background-color var(--dur) var(--ease), color var(--dur) var(--ease), transform var(--dur) var(--ease)", display: "inline-flex", alignItems: "center", gap: 11, textDecoration: "none", ...style }; const hov = e => { e.currentTarget.style.borderColor = "var(--accent)"; e.currentTarget.style.background = "rgba(209,169,90,0.08)"; }; const out = e => { e.currentTarget.style.borderColor = "var(--border-gold-strong)"; e.currentTarget.style.background = "transparent"; }; const inner = {icon && }{label}; const isExternal = href && /^https?:\/\//i.test(href); return href ? {inner} : ; } /* Fades + rises children into view once on scroll. */ function Reveal({ children, delay = 0, style = {} }) { const ref = React.useRef(null); const [vis, setVis] = React.useState(false); React.useEffect(() => { const el = ref.current; if (!el) return; if (window.matchMedia("(prefers-reduced-motion: reduce)").matches) { setVis(true); return; } const io = new IntersectionObserver((es) => { es.forEach(e => { if (e.isIntersecting) { setVis(true); io.disconnect(); } }); }, { threshold: 0.12, rootMargin: "0px 0px -8% 0px" }); io.observe(el); return () => io.disconnect(); }, []); return (
{children}
); } /* Thin gold flourish — — used as a small divider ornament. */ function Flourish({ style = {} }) { return (
); } Object.assign(window, { SectionHead, PrimaryCTA, GhostCTA, Reveal, Flourish });