/* ========================= WEDDINGS & EVENTS ========================= */ function WeddingsPage({ go }) { const [step, setStep] = useState(1); const [form, setForm] = useState({ type: "Wedding", guests: "100-200", date: "", venue: "", name: "", email: "", phone: "", budget: "AED 50K – 100K", vision: "", }); const update = (k, v) => setForm((f) => ({ ...f, [k]: v })); const submitted = step === 99; return (
{/* HERO */}
Weddings & Events · By the atelier

We build the flowers
you remember.

Concept, build and tear-down. Ceremony aisles to after-party walls. One atelier, end-to-end.

{/* WHAT WE DO */}
What we do

Eight chapters.
One celebration.

We engage early — moodboards, walkthroughs, a built sample. You see the day before it happens.

{[ ["01", "Discovery", "We meet, you tell us about the day. We listen for the small things."], ["02", "Mood & palette", "Boards, palettes, varieties. A floral language we'll write the day in."], ["03", "Site visit", "We walk the venue with you — lighting, scale, sightlines."], ["04", "Sample build", "A 1/4-scale or full-size sample of the centerpiece, in the studio."], ["05", "Production", "Hand-build in our d3 atelier. Cold-chain to the venue."], ["06", "Install", "Crew on site from morning. Aisle, tablescape, backdrop, install."], ["07", "Live show", "We stay on site through cocktail hour for any quick changes."], ["08", "Tear-down", "Out by 2 am. The venue looks the way you found it."], ].map(([n, h, b]) => (
{n}
{h}
{b}
))}
{/* PORTFOLIO STRIP — placeholder gated by permissions */}
Selected work · names withheld

From the archive.

We don’t share client or event names without explicit permission. Full portfolio with credits available on enquiry.

{[ { src: "media/category-events.webp", label: "Marquee · 220 guests · 2024", span: 7, ratio: "5/3" }, { src: "media/editorial-03.webp", label: "Backdrop · graduation · 2026", span: 5, ratio: "1/1" }, { src: "media/category-decor.webp", label: "Tablescape · private home", span: 5, ratio: "5/6" }, { src: "media/editorial-01.webp", label: "Welcome flowers · launch", span: 4, ratio: "4/5" }, { src: "media/product-luxury-02.webp", label: "Head table · 1.2 m install", span: 3, ratio: "3/4" }, ].map((it, i) => (
{it.label}
{it.label}
))}
{/* ENQUIRY FORM */}
Start an enquiry

Tell us about the day.
We’ll do the rest.

A senior florist replies within one business day. Or send a quick note on WhatsApp.

WhatsApp · {CONTACT.mobile}
{submitted ? (
Merci.

We’ll reply to {form.email || "your email"}{" "} within one business day. For anything urgent, WhatsApp{" "} {CONTACT.mobile}.

) : (
{["The event", "About you", "Vision"].map((s, i) => { const n = i + 1; return ( ); })}
{step === 1 && (
update("type", v)} options={[ "Wedding", "Engagement", "Corporate event", "Launch / brand", "Birthday", "Private celebration", "Other", ]} /> update("guests", v)} options={["< 50", "50-100", "100-200", "200-500", "500+"]} />
update("date", v)} /> update("venue", v)} placeholder="e.g. Atlantis · Dubai" />
)} {step === 2 && (
update("name", v)} placeholder="Full name" />
update("email", v)} placeholder="you@elsewhere.com" /> update("phone", v)} placeholder="+971 ..." />
update("budget", v)} options={[ "Under AED 25K", "AED 25K – 50K", "AED 50K – 100K", "AED 100K – 250K", "AED 250K +", "Open to advice", ]} />
)} {step === 3 && (
update("vision", v)} placeholder="Mood, palette, varieties, references — say as much or as little as you'd like." />
Attachments (PDFs, moodboards) can be sent in reply once we’ve received your note.
)}
)}
); } function FormField({ label, type = "text", value, onChange, options, placeholder }) { const baseStyle = { width: "100%", background: "transparent", border: 0, borderBottom: "1px solid rgba(251,246,240,0.3)", padding: "12px 0", fontSize: 16, color: "var(--ivory)", outline: "none", fontFamily: "inherit", }; return (