/* ============================================================
STREAM WITH LIEN — App shell, routing, language state
============================================================ */
/* Shared hero for inner pages lives in components.jsx (window.PageHero) */
const ROUTES = ["home", "setup", "muziekbingo", "playlists", "letters", "loveletters", "contact", "webshop"];
function App() {
const [lang, setLang] = useState(() => localStorage.getItem("swl-lang") || "nl");
const [route, setRoute] = useState(() => {
const h = (location.hash || "").replace("#", "");
return ROUTES.includes(h) ? h : "home";
});
// Demo: pretend Lien is live (drives the live badge)
const [live] = useState(true);
useEffect(() => { localStorage.setItem("swl-lang", lang); }, [lang]);
useEffect(() => {
document.documentElement.lang = lang;
}, [lang]);
const go = useCallback((id) => {
setRoute(id);
history.replaceState(null, "", "#" + id);
window.scrollTo({ top: 0, behavior: "auto" });
}, []);
useEffect(() => {
const onHash = () => {
const h = (location.hash || "").replace("#", "");
if (ROUTES.includes(h)) setRoute(h);
};
window.addEventListener("hashchange", onHash);
return () => window.removeEventListener("hashchange", onHash);
}, []);
const S = window.SITE;
const ui = S.ui[lang];
const navItems = S.nav[lang];
let page = null;
const common = { d: S, ui, social: S.social, live, go, lang };
switch (route) {
case "home": page =