/* LW Design Group — app shell, router, tweaks */
const { useState: uS, useEffect: uE } = React;
const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{
"palette": "paper",
"displayFont": "cormorant",
"density": "editorial",
"language": "en",
"showRefBadge": true
}/*EDITMODE-END*/;
function App() {
const [t, setT] = useTweaks(TWEAK_DEFAULTS);
const { palette, displayFont, density, language, showRefBadge } = t;
/* lightweight route state — hash-driven so refresh keeps page */
const [route, setRoute] = uS(() => parseHash());
uE(() => {
const on = () => setRoute(parseHash());
window.addEventListener("hashchange", on);
return () => window.removeEventListener("hashchange", on);
}, []);
uE(() => { window.scrollTo({ top: 0, behavior: "instant" }); }, [route.name, route.params.slug]);
function go(name, params) {
const h = "#/" + name + (params ? "?" + new URLSearchParams(params).toString() : "");
window.location.hash = h;
}
/* lang/density/palette → root data-attrs */
uE(() => {
const root = document.documentElement;
root.setAttribute("data-palette", palette);
root.setAttribute("data-display", displayFont);
root.setAttribute("data-density", density);
root.setAttribute("dir", language === "ar" ? "rtl" : "ltr");
root.setAttribute("lang", language);
root.setAttribute("data-ref-on", String(showRefBadge));
}, [palette, displayFont, density, language, showRefBadge]);
const setLang = (L) => setT("language", L);
const page = (() => {
switch (route.name) {
case "projects": return