/* App root: routing, language, tweaks, scroll handling */ const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{ "palette": "terracotta", "displayFont": "Cormorant Garamond", "useGradientHeadlines": false, "denseGrid": false }/*EDITMODE-END*/; const PALETTES = { terracotta: { terracotta:"#B5654A", terracotta_deep:"#974F37", gold:"#B08D57", ink:"#1A1614", noir:"#0E0C0B", cream:"#F6F1EA" }, noir: { terracotta:"#C9A063", terracotta_deep:"#A87E45", gold:"#C9A063", ink:"#0E0C0B", noir:"#000000", cream:"#F2EFE9" }, rose: { terracotta:"#A24F66", terracotta_deep:"#7F3A4F", gold:"#B08D57", ink:"#1E1418", noir:"#120B0F", cream:"#F8EFEB" }, sage: { terracotta:"#7B8C6A", terracotta_deep:"#5A6B4D", gold:"#B08D57", ink:"#1A1F18", noir:"#0E1310", cream:"#F1EFE6" } }; const DISPLAY_FONTS = { "Cormorant Garamond": "'Cormorant Garamond', Georgia, serif", "Playfair Display": "'Playfair Display', Georgia, serif", "Libre Bodoni": "'Libre Bodoni', 'Bodoni 72', Georgia, serif", "DM Serif Display": "'DM Serif Display', Georgia, serif" }; function App() { const [route, setRoute] = React.useState("home"); const [caseId, setCaseId] = React.useState("white-garden"); const [lang, setLang] = React.useState("en"); const [scrolled, setScrolled] = React.useState(false); const tweaks = useTweaks(TWEAK_DEFAULTS); const t = tweaks.values; // Allow other components to navigate via window.__nav React.useEffect(() => { window.__nav = (r) => { setRoute(r); window.scrollTo({top:0, behavior:"smooth"}); }; }, []); // Scroll watcher for nav background React.useEffect(() => { const handler = () => setScrolled(window.scrollY > 80); window.addEventListener("scroll", handler, { passive:true }); handler(); return () => window.removeEventListener("scroll", handler); }, []); // Scroll to top when route changes React.useEffect(() => { window.scrollTo({top:0, behavior:"instant"}); }, [route]); // Apply RTL + language React.useEffect(() => { document.body.dir = COPY[lang].dir; document.documentElement.lang = lang; }, [lang]); // Apply tweaks → CSS vars React.useEffect(() => { const p = PALETTES[t.palette] || PALETTES.terracotta; const r = document.documentElement.style; r.setProperty('--terracotta', p.terracotta); r.setProperty('--terracotta-deep', p.terracotta_deep); r.setProperty('--gold', p.gold); r.setProperty('--ink', p.ink); r.setProperty('--noir', p.noir); r.setProperty('--cream', p.cream); r.setProperty('--display', DISPLAY_FONTS[t.displayFont] || DISPLAY_FONTS["Cormorant Garamond"]); // Load Playfair / DM Serif / Bodoni from Google Fonts if needed const needsFont = t.displayFont; if (needsFont && needsFont !== "Cormorant Garamond") { const id = `gf-${needsFont.replace(/\s+/g,'')}`; if (!document.getElementById(id)) { const l = document.createElement('link'); l.id = id; l.rel = "stylesheet"; const family = needsFont.replace(/\s+/g,'+'); l.href = `https://fonts.googleapis.com/css2?family=${family}:wght@300;400;500;600&display=swap`; document.head.appendChild(l); } } }, [t.palette, t.displayFont]); // Determine nav tone — hero/dark on home top, case study, cta-band edges const navTone = (route === "home" && !scrolled) || (route === "case" && !scrolled) ? "dark" : "light"; let page; switch(route){ case "portfolio": page = ; break; case "case": page = ; break; case "services": page = ; break; case "about": page = ; break; case "contact": page = ; break; default: page = ; } return ( <>