// shell.jsx — Header, Footer, Page wrapper function Header({ route }) { const [open, setOpen] = useState(false); const [scrolled, setScrolled] = useState(false); useEffect(() => { const onScroll = () => setScrolled(window.scrollY > 12); onScroll(); window.addEventListener("scroll", onScroll, { passive: true }); return () => window.removeEventListener("scroll", onScroll); }, []); const items = [ { to: "home", label: "Home" }, { to: "services", label: "Services" }, { to: "case-studies", label: "Case Studies" }, { to: "portfolio", label: "Portfolio" }, { to: "testimonials", label: "Feedback" }, { to: "about", label: "About" }, { to: "blog", label: "Blog" }, { to: "contact", label: "Contact" }]; return ( {items.map((it) => {it.label} )} Book a demo setOpen((v) => !v)}> {open && {items.map((it) => setOpen(false)}> {it.label} )} setOpen(false)}>Book a demo → } ); } function Footer() { return ( ); } // Page transition shell function PageFrame({ children, routeKey }) { const [mounted, setMounted] = useState(false); useEffect(() => { setMounted(false); const a = requestAnimationFrame(() => requestAnimationFrame(() => setMounted(true))); return () => cancelAnimationFrame(a); }, [routeKey]); return ( {children} ); } Object.assign(window, { Header, Footer, PageFrame });