// Header + language switcher + nav (with mobile burger menu) const Header = ({ active, onNav, lang, setLang, dark = false, t }) => { const [scrolled, setScrolled] = React.useState(false); const [menuOpen, setMenuOpen] = React.useState(false); const [isMobile, setIsMobile] = React.useState( typeof window !== "undefined" && window.matchMedia("(max-width: 768px)").matches ); React.useEffect(() => { const onScroll = () => setScrolled(window.scrollY > 80); onScroll(); window.addEventListener("scroll", onScroll, { passive: true }); return () => window.removeEventListener("scroll", onScroll); }, []); React.useEffect(() => { const mq = window.matchMedia("(max-width: 768px)"); const handle = (e) => setIsMobile(e.matches); mq.addEventListener("change", handle); return () => mq.removeEventListener("change", handle); }, []); // close menu after nav const goTo = (id) => { setMenuOpen(false); onNav(id); }; const items = [ { id: "object", label: t.nav.object }, { id: "surroundings", label: t.nav.surroundings }, { id: "prices", label: t.nav.prices }, { id: "contact", label: t.nav.contact } ]; const onLight = scrolled || menuOpen; const fg = onLight ? "var(--graphite)" : "var(--bone)"; const fgMuted = onLight ? "var(--fg-muted)" : "rgba(245,241,234,0.7)"; const goldFg = "var(--gold)"; return (
{t.nav_lead}
{/* Desktop nav */} {!isMobile && ( )}
{["de", "it", "en"].map((l, i) => {i < 2 && ยท} )} {/* Burger toggle (mobile only) */} {isMobile && ( )}
{/* Mobile menu drawer */} {isMobile && menuOpen && (
{items.map((it) => { e.preventDefault(); goTo(it.id); }} href={`#${it.id}`} style={{ fontFamily: "var(--font-sans)", letterSpacing: "0.22em", textTransform: "uppercase", cursor: "pointer", textDecoration: "none", color: active === it.id ? goldFg : "var(--graphite)", padding: "14px 4px", fontSize: 15, borderBottom: "1px solid var(--border)" }}>{it.label} )}
)}
); }; window.Header = Header;