/* IGI — App shell, router, tweaks */ const TWEAKS_DEFAULTS = /*EDITMODE-BEGIN*/{ "accent": "#2563eb", "navyTone": "navy", "fontPair": "manrope_newsreader", "showTrustBar": true, "showChat": true, "showStickyCTA": true, "heroVariant": "split" }/*EDITMODE-END*/; function App() { const [route, setRoute] = React.useState(() => { const h = window.location.hash.replace('#/', '') || 'home'; return h; }); const [tweaks, setTweak] = useTweaks(TWEAKS_DEFAULTS); React.useEffect(() => { const onHash = () => setRoute(window.location.hash.replace('#/', '') || 'home'); window.addEventListener('hashchange', onHash); return () => window.removeEventListener('hashchange', onHash); }, []); React.useEffect(() => { window.scrollTo({ top: 0, behavior: 'instant' }); }, [route]); const navigate = (r) => { window.location.hash = `#/${r}`; setRoute(r); }; // Apply tweak overrides React.useEffect(() => { document.documentElement.style.setProperty('--blue-600', tweaks.accent); document.documentElement.style.setProperty('--blue-700', shade(tweaks.accent, -0.12)); document.documentElement.style.setProperty('--blue-500', shade(tweaks.accent, 0.1)); document.documentElement.style.setProperty('--blue-50', shade(tweaks.accent, 0.92)); const navyMap = { navy: ['#0a2540', '#061a30', '#0f2d52', '#f1f5fa'], slate: ['#1e293b', '#0f172a', '#334155', '#f1f5f9'], forest: ['#14532d', '#0a2e1a', '#166534', '#f0fdf4'], espresso: ['#3f2a1d', '#231510', '#5a3d2b', '#faf6f1'], }; const [n8, n9, n7, n50] = navyMap[tweaks.navyTone] || navyMap.navy; document.documentElement.style.setProperty('--navy-800', n8); document.documentElement.style.setProperty('--navy-900', n9); document.documentElement.style.setProperty('--navy-700', n7); document.documentElement.style.setProperty('--navy-50', n50); const fontMap = { manrope_newsreader: ['"Manrope"', '"Newsreader"'], jakarta_serif: ['"Plus Jakarta Sans"', '"Crimson Pro"'], dm_dm: ['"DM Sans"', '"DM Serif Display"'], ibm: ['"IBM Plex Sans"', '"IBM Plex Serif"'], }; const [sans, serif] = fontMap[tweaks.fontPair] || fontMap.manrope_newsreader; document.documentElement.style.setProperty('--font-sans', `${sans}, -apple-system, system-ui, sans-serif`); document.documentElement.style.setProperty('--font-serif', `${serif}, Georgia, serif`); }, [tweaks]); const showChrome = route !== 'quote-fullscreen'; return ( <> {showChrome &&