// Enquiry modal — multi-step, sector-qualified per design brief const { useState: useStateE, useEffect: useEffectE, useRef: useRefE } = React; function EnquiryModal({ open, onClose, t, initialSector = null }) { const [step, setStep] = useStateE(0); const [data, setData] = useStateE({ sector: initialSector, name: "", email: "", phone: "", date: "", guests: "", venue: "", message: "", }); const [submitted, setSubmitted] = useStateE(false); useEffectE(() => { if (open) { setStep(initialSector ? 1 : 0); setData((d) => ({ ...d, sector: initialSector || d.sector })); setSubmitted(false); document.body.style.overflow = "hidden"; } else { document.body.style.overflow = ""; } return () => { document.body.style.overflow = ""; }; }, [open, initialSector]); useEffectE(() => { const onKey = (e) => { if (e.key === "Escape" && open) onClose(); }; window.addEventListener("keydown", onKey); return () => window.removeEventListener("keydown", onKey); }, [open, onClose]); if (!open) return null; const set = (k, v) => setData((d) => ({ ...d, [k]: v })); const canStep1 = !!data.sector; const canStep2 = data.name.trim() && /.+@.+\..+/.test(data.email); const submit = () => setSubmitted(true); return (
e.stopPropagation()} style={{ width: "min(560px, 100%)", height: "100%", background: "var(--paper)", overflowY: "auto", display: "flex", flexDirection: "column", animation: "slideIn 0.4s cubic-bezier(0.22, 1, 0.36, 1)", }}>
{submitted ? "Received" : step === 0 ? "Step 1 of 3 · Sector" : step === 1 ? "Step 2 of 3 · Details" : "Step 3 of 3 · Project"}
{submitted ? ( ) : (
{step === 0 && } {step === 1 && } {step === 2 && }
{step < 2 ? ( ) : ( )}
)}
); } function StepDots({ step }) { return (
{[0, 1, 2].map((i) => ( ))}
); } function SectorStep({ data, set }) { const sectors = [ { id: "wedding", title: "Wedding", desc: "Ceremony, reception and the days around them.", img: "media/wedding-1.webp" }, { id: "corporate", title: "Corporate", desc: "Galas, launches, exhibitions and brand activations.", img: "media/corporate-tile.webp" }, { id: "social", title: "Social", desc: "Milestones, anniversaries, private celebrations.", img: "media/social-tile.webp" }, ]; return (

What are we planning?

So we can route your enquiry to the right designer.

{sectors.map((s) => ( ))}
); } function DetailsStep({ data, set }) { return (

How can we reach you?

Personal and discreet — we do not share details with third parties.

set("name", e.target.value)} placeholder="Full name" />
set("email", e.target.value)} placeholder="you@email.com" />
set("phone", e.target.value)} placeholder="+971…" />
); } function ProjectStep({ data, set }) { return (

Tell us about the event.

Approximate is fine. We'll refine in the consultation.

set("date", e.target.value)} placeholder="e.g. Autumn 2026" />
set("guests", e.target.value)} placeholder="Approx." />
set("venue", e.target.value)} placeholder="City, venue if known" />