/* eslint-disable */ // BOOK PAGE — multi-step mock flow const PB_B = window.PB_DATA; // Curated booking-flow service set with mock prices (clearly tagged "estimate" — research has only colour verified). const BOOK_SERVICES = [ { id: 'airtouch-crown', name: 'Airtouch Crown', cat: 'Hair Colour', dur: '3 hr', price: 1000, verified: true }, { id: 'balayage', name: 'Balayage / Shatush', cat: 'Hair Colour', dur: '5 hr 20 min', price: 1200, verified: true, from: true }, { id: 'roots-colour', name: 'Roots Colour', cat: 'Hair Colour', dur: '2 hr', price: 357, verified: true }, { id: 'blow-dry', name: 'Signature Blow Dry', cat: 'Hair Styling', dur: '40 min', consult: true }, { id: 'buccal', name: 'Buccal Cosmetology', cat: 'Skin', dur: '60 min', consult: true }, { id: 'salmon-dna', name: 'Salmon DNA Facial', cat: 'Skin', dur: '75 min', consult: true }, { id: 'gua-sha', name: 'Gua Sha Facial', cat: 'Skin', dur: '60 min', consult: true }, { id: 'jp-mani', name: 'Japanese Manicure', cat: 'Nails', dur: '60 min', consult: true }, ]; const BOOK_STYLISTS = [ { id: 'any', name: 'Any available', role: '— First open chair', rating: null, img: null }, { id: 'anastasia', name: 'Anastasiia', role: 'Hair Stylist', rating: 5.0, img: 'media/team-anastasia.webp' }, { id: 'iness', name: 'Ines', role: 'Hair Stylist', rating: 5.0, img: 'media/team-iness.webp' }, { id: 'ayan', name: 'Ayan', role: 'Hair Stylist', rating: 5.0, img: 'media/team-ayan.webp' }, { id: 'joanne', name: 'Jo Anne', role: 'Masseur', rating: 5.0, img: 'media/team-joanne.webp' }, { id: 'diane', name: 'Diana May', role: 'Nail Technician', rating: 4.9, img: 'media/team-diane.webp' }, { id: 'namarig', name: 'Namarig', role: 'Cosmetologist', rating: 4.8, img: 'media/team-namarig.webp' }, ]; function generateDays() { // Next 14 days starting today const out = []; const start = new Date('2026-05-22T10:00:00'); // pinned for reproducibility const dow = ['SUN','MON','TUE','WED','THU','FRI','SAT']; for (let i = 0; i < 14; i++) { const d = new Date(start.getTime() + i * 86400000); out.push({ key: d.toISOString().slice(0,10), dow: dow[d.getDay()], dt: d.getDate(), month: d.toLocaleString('en-US',{ month: 'short' }), disabled: false, // open Mon-Sun }); } return out; } const TIME_SLOTS = ['10:00','10:30','11:00','11:30','12:00','12:30','13:00','13:30','14:00','14:30','15:00','15:30','16:00','16:30','17:00','17:30','18:00','18:30','19:00','19:30']; const DISABLED_SLOTS = new Set(['12:00','15:30','17:00']); // fake "booked" times function StepBar({ step }) { const labels = ['Service', 'Stylist', 'Date & Time', 'Your details', 'Confirm']; return (
Book online in under a minute — or send us a note on WhatsApp. Every appointment opens with a complimentary consultation.
Our clients return for specific stylists. Choose by name, or pick the first open chair.
We’ve held {svc.name} with {stylist.name} on {day} at {slot}. A confirmation is on its way to your mobile.