// Header, Footer, shared chrome const { useState, useEffect } = React; function BrandMark() { return (
ActiveManage
); } function Logo({ onClick }) { return ( ActiveManage ); } const NAV = [ { id: "bespoke", label: "Bespoke", href: "#/bespoke" }, { id: "platform", label: "Platform", href: "#/platform" }, { id: "pricing", label: "Pricing", href: "#/pricing" }, { id: "docs", label: "Docs", href: "#/docs" }, { id: "security", label: "Security", href: "#/security" }, { id: "about", label: "About", href: "#/about" }, { id: "faq", label: "FAQ", href: "#/faq" }, ]; function Header({ route, onNavigate, theme, onToggleTheme }) { const [open, setOpen] = useState(false); // Close menu on route change useEffect(() => { setOpen(false); }, [route]); // Lock body scroll while open useEffect(() => { if (open) { const prev = document.body.style.overflow; document.body.style.overflow = "hidden"; return () => { document.body.style.overflow = prev; }; } }, [open]); const go = (id) => { onNavigate(id); setOpen(false); }; return (
{ e.preventDefault(); go("home"); }} />
Sign in { e.preventDefault(); onNavigate("contact"); }}> Let's chat
{/* Mobile menu — rendered as sibling so backdrop-filter on header doesn't trap fixed positioning */}
setOpen(false)}>Sign in { e.preventDefault(); go("contact"); }}> Let's chat
© 2024 ActiveManage Ltd.
); } function Footer({ onNavigate }) { return ( ); } Object.assign(window, { Header, Footer, BrandMark, Logo, NAV });