// App entry — router, language state, tweaks. const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{ "heroLayout": "poster", "accent": "ember", "density": "standard", "defaultLang": "ko" }/*EDITMODE-END*/; const ACCENTS = { ember: { color: '#cc4a1c', tone: 'ember', label: 'Ember' }, forest: { color: '#3d6b3a', tone: 'forest', label: 'Forest' }, dusk: { color: '#445d7e', tone: 'dusk', label: 'Dusk Blue' }, mono: { color: '#191712', tone: 'mono', label: 'Monochrome' }, }; function App() { const [tweaks, setTweak] = useTweaks(TWEAK_DEFAULTS); const [route, setRoute] = React.useState(() => { const h = (location.hash || '').replace('#', ''); const ids = ['home','about','sermons','events','welcome','gallery','contact']; return ids.includes(h) ? h : 'home'; }); const [lang, setLang] = React.useState(tweaks.defaultLang || 'ko'); React.useEffect(() => { history.replaceState(null, '', `#${route}`); window.scrollTo({ top: 0, behavior: 'smooth' }); }, [route]); React.useEffect(() => { document.body.dataset.density = tweaks.density; const a = ACCENTS[tweaks.accent] || ACCENTS.ember; document.documentElement.style.setProperty('--accent', a.color); }, [tweaks.density, tweaks.accent]); React.useEffect(() => { document.documentElement.lang = lang; }, [lang]); const t = CONTENT[lang]; const accentObj = ACCENTS[tweaks.accent] || ACCENTS.ember; const accent = accentObj.color; const accentTone = accentObj.tone; const pageProps = { lang, t, setRoute, accent, accentTone }; return ( <>