/* global React */ const { useEffect, useRef, useState, useCallback } = React; /* IntersectionObserver-based reveal hook */ 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, rootMargin: '0px 0px -10% 0px' }); els.forEach(el => io.observe(el)); return () => io.disconnect(); }, []); } function Eyebrow({ children }) { return {children}; } function SectionHead({ eyebrow, title, subtitle, align }) { return (
{eyebrow && {eyebrow}}

{title}

{subtitle &&

{subtitle}

}
); } function Placeholder({ variant = "room", label }) { return (
{label && {label}}
); } Object.assign(window, { useReveal, Eyebrow, SectionHead, Placeholder });