/* HLiD — DSGVO cookie / tracking banner. Design principle: NO cookies for analytics, ever. Reach measurement runs cookieless (self-hosted Umami + Plausible; PostHog EU in memory-persistence mode — no cookie, no localStorage identifier, no session replay). Error logging is Sentry, self-hosted in the EU, errors only. The only browser storage is functional localStorage: locale + this banner's dismissal. If anything cookie-based or replay-based is ever added, this banner must become a real opt-in consent dialog FIRST (TKG 2021 §165 Abs 3). */ const BANNER_COPY = { EN: { title: 'We respect your privacy', body: 'This site sets no marketing or tracking cookies. Reach measurement runs cookieless on privacy-preserving tools, and error logging is self-hosted in the EU. Your browser stores only your language preference and this notice. Details are in the privacy policy.', accept: 'Got it', more: 'Privacy policy', }, DE: { title: 'Wir achten Ihre Privatsphäre', body: 'Diese Website setzt keine Marketing- oder Tracking-Cookies. Die Reichweitenmessung läuft cookiefrei über datenschutzfreundliche Tools, die Fehlerprotokollierung läuft auf eigener Infrastruktur in der EU. Ihr Browser speichert nur Ihre Sprachwahl und diesen Hinweis. Details in der Datenschutzerklärung.', accept: 'Verstanden', more: 'Datenschutz', }, }; function CookieBanner() { const { locale } = useT(); const [visible, setVisible] = React.useState(false); React.useEffect(() => { try { const ack = localStorage.getItem('hlid.privacy.ack'); if (ack !== '1') setVisible(true); } catch { setVisible(true); } }, []); const accept = () => { try { localStorage.setItem('hlid.privacy.ack', '1'); } catch {} setVisible(false); }; if (!visible) return null; const c = BANNER_COPY[locale] || BANNER_COPY.EN; return (
{c.more} →
); } Object.assign(window, { CookieBanner });