/* global React, ReactDOM, Nav, Footer, Fab, BookBar, BookingModal, HomePage, TreatmentsPage, SignaturePage, MembershipsPage, CafePage, GalleryPage, AboutPage, ReviewsPage, ContactPage, TweaksPanel, useTweaks, TweakSection, TweakRadio, TweakColor, TweakSelect */ const { useState, useEffect } = React; function App() { // Tweakable defaults const [t, setTweak] = useTweaks(/*EDITMODE-BEGIN*/{ "accent": "#C9A56A", "surface": "#F7F2EA", "text": "#2A241F", "displayFont":"Cormorant Garamond", "lang": "en" }/*EDITMODE-END*/); // Apply tweaks to CSS vars / lang useEffect(() => { const r = document.documentElement; r.style.setProperty('--champagne', t.accent); r.style.setProperty('--ivory', t.surface); r.style.setProperty('--espresso', t.text); if (t.displayFont) r.style.setProperty('--display', `"${t.displayFont}", "Times New Roman", serif`); r.setAttribute('dir', t.lang === 'ar' ? 'rtl' : 'ltr'); r.setAttribute('lang', t.lang); }, [t.accent, t.surface, t.text, t.displayFont, t.lang]); // Hash-based page routing const seededRoute = window.__BYTESGLUE_SHOWCASE_ROUTE || 'home'; const initial = (window.location.hash.replace('#','') || seededRoute); const [page, setPageState] = useState(initial); const setPage = (p) => { setPageState(p); window.location.hash = p; window.scrollTo({top:0, behavior:'instant'}); }; useEffect(() => { const onHash = () => { const next = window.location.hash.replace('#','') || (window.__BYTESGLUE_SHOWCASE_ROUTE || 'home'); if (next !== page) { setPageState(next); window.scrollTo({top:0, behavior:'instant'}); } }; window.addEventListener('hashchange', onHash); return () => window.removeEventListener('hashchange', onHash); }, [page]); // Booking modal const [bookingOpen, setBookingOpen] = useState(false); const openBooking = () => setBookingOpen(true); // Lang const lang = t.lang; const setLang = (l) => setTweak('lang', l); const PAGES = { home: () => , treatments: () => , signature: () => , memberships: () => , cafe: () => , gallery: () => , about: () => , reviews: () => , contact: () => , }; const Page = PAGES[page] || PAGES.home; return ( <> setBookingOpen(false)} /> setTweak('accent', v)} /> setTweak('surface', v)} /> setTweak('text', v)} /> setTweak('displayFont', v)} /> setTweak('lang', v)} /> {['home','treatments','signature','memberships','cafe','gallery','about','reviews','contact'].map(p => ( setPage(p)} style={{ padding:'8px 10px', fontSize:11, letterSpacing:'0.14em', textTransform:'uppercase', border:'1px solid ' + (page===p ? 'var(--espresso)' : 'var(--line)'), background: page===p ? 'var(--espresso)' : 'var(--cream-card)', color: page===p ? 'var(--ivory)' : 'var(--espresso)', cursor:'pointer' }}> {p} ))} > ); } ReactDOM.createRoot(document.getElementById('root')).render();