// Site chrome — sticky nav, footer, big-CTA band. function Nav({ lang, setLang, route, setRoute, t, accent }) { const [scrolled, setScrolled] = React.useState(false); const [mobileOpen, setMobileOpen] = React.useState(false); React.useEffect(() => { const onScroll = () => setScrolled(window.scrollY > 14); onScroll(); window.addEventListener('scroll', onScroll, { passive: true }); return () => window.removeEventListener('scroll', onScroll); }, []); return ( Skip to content { e.preventDefault(); setRoute('home'); setMobileOpen(false); }}> {lang === 'ko' ? '그리심소망' : 'GHPC'} {t.nav.map(([id, label]) => ( { e.preventDefault(); setRoute(id); }} className={`nav-link ${route === id ? 'is-active' : ''}`} style={{ '--accent': accent }}> {label} ))} setLang('ko')}>KO setLang('en')}>EN setMobileOpen(o => !o)} aria-label="Menu" aria-expanded={mobileOpen} aria-controls="mobile-menu"> {t.nav.map(([id, label]) => ( { e.preventDefault(); setRoute(id); setMobileOpen(false); }} className={`mobile-link ${route === id ? 'is-active' : ''}`}> {label} ))} ); } function CTABand({ lang, t, setRoute, accent }) { return ( {t.misc.bigCta} setRoute('contact')} style={{ background: accent, borderColor: accent }}> {t.cta} → setRoute('welcome')}> {t.misc.forFirstTime} ); } function Footer({ lang, t, setRoute, accent }) { return ( ); } Object.assign(window, { Nav, CTABand, Footer });