// Shared header component for all pages const Header = ({ active }) => { const links = [ { href: "index.html", label: "Start", key: "start" }, { href: "produkte.html", label: "Leistungen", key: "produkte" }, { href: "referenzen.html", label: "Referenzen", key: "referenzen" }, { href: "unternehmen.html", label: "Unternehmen", key: "unternehmen" }, { href: "kontakt.html", label: "Kontakt", key: "kontakt" }, ]; const [open, setOpen] = React.useState(false); React.useEffect(() => { if (open) { document.body.style.overflow = "hidden"; const onKey = (e) => { if (e.key === "Escape") setOpen(false); }; window.addEventListener("keydown", onKey); return () => { document.body.style.overflow = ""; window.removeEventListener("keydown", onKey); }; } }, [open]); return ( <>
Tischlerei Göke GmbH
EST. 1929
Paderborn-Benhausen
05252 6291 WhatsApp
Beratung anfragen
{/* Mobile drawer */}
setOpen(false)}>
); }; const Footer = () => ( ); // Reveal-on-scroll observer. Anything already above the viewport on load // is marked .in immediately so deep-links / scroll-restoration don't leave // blank cards above the fold. const useReveal = () => { React.useEffect(() => { const els = document.querySelectorAll(".reveal"); const vh = window.innerHeight; els.forEach(el => { const r = el.getBoundingClientRect(); if (r.top < vh) el.classList.add("in"); }); const io = new IntersectionObserver((entries) => { entries.forEach(e => { if (e.isIntersecting) { e.target.classList.add("in"); io.unobserve(e.target); } }); }, { threshold: 0.08, rootMargin: "0px 0px -40px 0px" }); els.forEach(el => { if (!el.classList.contains("in")) io.observe(el); }); return () => io.disconnect(); }, []); }; Object.assign(window, { Header, Footer, useReveal });