// App — production wiring (no Tweaks panel). // Theme + language preferences persist to localStorage so the site behaves like // a real product rather than a prototype. const SF_PREFS_KEY = 'sfl.prefs.v1'; const SF_DEFAULTS = { accent: '#E36918', cardStyle: 'spec', dark: false, lang: 'en' }; const loadPrefs = () => { try { const raw = localStorage.getItem(SF_PREFS_KEY); if (!raw) return SF_DEFAULTS; return { ...SF_DEFAULTS, ...JSON.parse(raw) }; } catch (_) { return SF_DEFAULTS; } }; const SFApp = () => { const [prefs, setPrefs] = React.useState(loadPrefs); const setPref = (k, v) => setPrefs(p => { const next = { ...p, [k]: v }; try { localStorage.setItem(SF_PREFS_KEY, JSON.stringify(next)); } catch (_) {} return next; }); const [page, setPage] = React.useState('home'); React.useEffect(() => { document.documentElement.dataset.theme = prefs.dark ? 'dark' : 'light'; }, [prefs.dark]); React.useEffect(() => { document.documentElement.lang = prefs.lang === 'zh' ? 'zh-Hant' : 'en'; }, [prefs.lang]); React.useEffect(() => { window.scrollTo(0, 0); }, [page]); const { lang, accent, cardStyle, dark } = prefs; return (
setPref('lang', v)} dark={dark} setDark={(v)=>setPref('dark', v)} accent={accent} page={page} setPage={setPage} /> {page === 'home' && (
)} {page === 'services' && (
{lang==='en'?'All services':'所有服務'}

{lang==='en' ? 'One team. Ten capabilities.' : '一個團隊,十項能力。'}

{lang==='en' ? 'Every project we run sits in one of these ten capabilities — usually a few, working together.' : '每個項目都屬於以下十項能力之一 — 通常是幾項組合運作。'}

)} {page.startsWith('pillar:') && ( )} {page === 'industries' && ( )} {page.startsWith('industry:') && ( )} {page === 'contact' && (
)} {/* WhatsApp FAB */} e.currentTarget.style.transform='translateY(-2px)'} onMouseLeave={e=>e.currentTarget.style.transform='translateY(0)'}>
); }; const root = ReactDOM.createRoot(document.getElementById('root')); root.render();