// services.jsx — Services page for Version Française Pour Elle
// Real HTML menu, verified hair prices, "Book on Fresha" for unverified.
function ServicesPage({ lang }) {
const D = window.VFPE_DATA;
const t = D.t[lang];
const [active, setActive] = React.useState("hair");
// Sticky category nav — IntersectionObserver tracks which section is in view.
React.useEffect(() => {
const opts = { rootMargin: "-120px 0px -50% 0px", threshold: 0 };
const io = new IntersectionObserver((entries) => {
entries.forEach((e) => {
if (e.isIntersecting) setActive(e.target.id);
});
}, opts);
document.querySelectorAll("[data-cat]").forEach((el) => io.observe(el));
return () => io.disconnect();
}, []);
const scrollTo = (id) => {
const el = document.getElementById(id);
if (!el) return;
const top = el.getBoundingClientRect().top + window.scrollY - 130;
window.scrollTo({ top, behavior: "smooth" });
};
return (
{/* ── Hero band ─────────────────────────────────────────── */}
{lang === "fr" ? "La Carte" : "The Menu"}
{lang === "fr" ? <>Soins & rituels, tarifs en clair.>
: <>Treatments & rituals, prices in plain sight.>}
{lang === "fr"
? "Tous les tarifs « cheveux » sont publiés. Pour les autres prestations, réservez sur Fresha — un devis vous est proposé en quelques secondes."
: "All hair prices are published. For other treatments, book through Fresha — you'll see your quote in seconds."}
{/* ── Sticky category nav ──────────────────────────────── */}