/* EnableUnion — layout (topbar, header/nav, footer, logo, cookie banner) */ const { useState, useEffect, useMemo } = React; /* ───────────── tiny hash router ───────────── */ function useRoute() { const get = () => { const h = window.location.hash || "#/"; return h.replace(/^#/, "") || "/"; }; const [route, setRoute] = useState(get); useEffect(() => { const on = () => { setRoute(get()); window.scrollTo({ top: 0, behavior: "instant" }); }; window.addEventListener("hashchange", on); return () => window.removeEventListener("hashchange", on); }, []); return route; } function NavLink({ to, current, children, ...rest }) { const active = current === to || (to !== "/" && current.startsWith(to)); return ( {children} ); } /* ───────────── logo ───────────── */ function Logo({ inFooter }) { return ( EnableUnion SASU · MMXXVI ); } /* ───────────── topbar ───────────── */ function TopBar({ t, lang, setLang }) { return (
{t.topbar_left}
{t.topbar_right}
); } /* ───────────── header / nav ───────────── */ function Header({ t, route }) { return (
); } /* ───────────── crest ornament ───────────── */ function Crest({ letter }) { return (