/* Root: app, routing, tweaks panel */ const { useState: useStateA, useEffect: useEffectA, useCallback: useCallbackA } = React; function App() { const t = window.useTweaks(window.TWEAK_DEFAULTS); const [tweaks, setTweak] = [t[0], t[1]]; // route state — supports 'home' | 'inventory' | 'vehicle' | 'services' | 'export' | 'contact' const [route, setRoute] = useStateA(() => { const h = window.location.hash.slice(1).split('/'); return h[0] || 'home'; }); const [vehicleId, setVehicleId] = useStateA(() => window.location.hash.split('/')[1] || VEHICLES[0].id); const go = useCallbackA((r, id) => { setRoute(r); if (id) setVehicleId(id); window.location.hash = id ? `${r}/${id}` : r; window.scrollTo({ top: 0, behavior: 'instant' }); }, []); useEffectA(() => { const onHash = () => { const [r, id] = window.location.hash.slice(1).split('/'); setRoute(r || 'home'); if (id) setVehicleId(id); }; window.addEventListener('hashchange', onHash); return () => window.removeEventListener('hashchange', onHash); }, []); // lead modal const [lead, setLead] = useStateA({ open: false, ctx: null }); const openLead = useCallbackA((ctx) => setLead({ open: true, ctx }), []); const closeLead = useCallbackA(() => setLead({ open: false, ctx: null }), []); // tweaks → html data attrs useEffectA(() => { const el = document.documentElement; el.setAttribute('data-palette', tweaks.palette); el.setAttribute('data-accent', tweaks.accent); el.setAttribute('data-display', tweaks.displayFont); el.setAttribute('data-hero', tweaks.heroTreatment); el.setAttribute('data-density', tweaks.density); el.setAttribute('dir', tweaks.locale === 'ar' ? 'rtl' : 'ltr'); el.setAttribute('lang', tweaks.locale); }, [tweaks]); // set locale via tweaks: keep them in sync const setLocale = (loc) => setTweak('locale', loc); const locale = tweaks.locale === 'ar' ? 'ar' : 'en'; return ( <> {route === 'home' && } {route === 'inventory' && } {route === 'vehicle' && } {route === 'services' && } {route === 'export' && } {route === 'contact' && }