// Biolite — main app
function App() {
const [route, setRoute] = useState({ page: "home" });
const [booking, setBooking] = useState(false);
const [bookingTreatment, setBookingTreatment] = useState(null);
const tweakDefaults = /*EDITMODE-BEGIN*/{
"accent": "gold",
"density": "editorial",
"showStickyRail": true
}/*EDITMODE-END*/;
const [tweaks, setTweak] = useTweaks(tweakDefaults);
// Apply tweaks via CSS vars
useEffect(() => {
const root = document.documentElement;
if (tweaks.accent === "gold") {
root.style.setProperty("--brand-grad", "linear-gradient(180deg, #FCEDC9 0%, #EAC175 100%)");
root.style.setProperty("--brand-grad-h", "linear-gradient(90deg, #FCEDC9 0%, #EAC175 100%)");
root.style.setProperty("--gold-1", "#FCEDC9");
root.style.setProperty("--gold-2", "#EAC175");
root.style.setProperty("--gold-deep", "#B79766");
} else if (tweaks.accent === "moss") {
root.style.setProperty("--brand-grad", "linear-gradient(180deg, #9DBDB1 0%, #2C463F 100%)");
root.style.setProperty("--brand-grad-h", "linear-gradient(90deg, #9DBDB1 0%, #2C463F 100%)");
root.style.setProperty("--gold-1", "#D6E1D9");
root.style.setProperty("--gold-2", "#6B8278");
root.style.setProperty("--gold-deep", "#2C463F");
} else if (tweaks.accent === "rose") {
root.style.setProperty("--brand-grad", "linear-gradient(180deg, #F0CDB9 0%, #B07A60 100%)");
root.style.setProperty("--brand-grad-h", "linear-gradient(90deg, #F0CDB9 0%, #B07A60 100%)");
root.style.setProperty("--gold-1", "#F0CDB9");
root.style.setProperty("--gold-2", "#C68E72");
root.style.setProperty("--gold-deep", "#9C6549");
} else if (tweaks.accent === "ink") {
root.style.setProperty("--brand-grad", "linear-gradient(180deg, #5C6F69 0%, #1B2724 100%)");
root.style.setProperty("--brand-grad-h", "linear-gradient(90deg, #5C6F69 0%, #1B2724 100%)");
root.style.setProperty("--gold-1", "#5C6F69");
root.style.setProperty("--gold-2", "#2E3B36");
root.style.setProperty("--gold-deep", "#3F524C");
}
}, [tweaks.accent]);
useEffect(() => {
const root = document.documentElement;
if (tweaks.density === "editorial") {
root.style.setProperty("--gutter", "32px");
} else if (tweaks.density === "compact") {
root.style.setProperty("--gutter", "24px");
} else if (tweaks.density === "spacious") {
root.style.setProperty("--gutter", "48px");
}
}, [tweaks.density]);
// Reset scroll on route change
useEffect(() => {
window.scrollTo({ top: 0, behavior: "instant" });
}, [route.page, route.id]);
const openBooking = () => setBooking(true);
const closeBooking = () => { setBooking(false); setBookingTreatment(null); };
let screen = null;
if (route.page === "home") screen =