// Weddings hub — sector page with filter const { useState: useStateW, useMemo: useMemoW } = React; function Weddings({ onRoute, onEnquire, t }) { const [filter, setFilter] = useStateW("All"); const filtered = useMemoW(() => { if (filter === "All") return WEDDING_PROJECTS; return WEDDING_PROJECTS.filter((p) => (TAG_MAP[p.id] || []).includes(filter)); }, [filter]); return (
p.href === "case" ? onRoute("case") : null} />
); } function WeddingsHero({ t }) { return (
I · Weddings

The once-in-a-lifetime,
planned like it.

Local & destination 40 — 1,200 guests* Planned 3 to 12 months out *press figures
); } function WeddingsIntro() { const r = useReveal(); return (
Photographer credits
Varna Studios · Andy Mac Photography · DaniB Photo · EKO Studios · DEN Photo

We plan a small number of weddings each year so the studio can sit with yours — its families, its faiths, its room, its weather — long enough to design it properly.

{[ ["Concept", "Renderings, mood, palette"], ["Production", "Floral, set, AV, build"], ["Day-of", "Run-of-show, guest care, travel"], ].map(([k, d]) => (
{k}
{d}
))}
); } function WeddingsFilter({ tags, active, onSet, count }) { return (
Filter {tags.map((t) => ( ))}
{count} project{count !== 1 ? "s" : ""}
); } function WeddingsGrid({ projects, onProject }) { return (
{projects.map((p, i) => ( onProject(p)} index={i} /> ))}
); } function ProjectCard({ project, onClick, index }) { const [hover, setHover] = useStateW(false); // editorial varying spans — featured wide; alternate big/small const layout = (() => { if (project.featured) return { col: "span 12", ratio: "16/9", big: true }; const pattern = index % 5; if (pattern === 0) return { col: "span 7", ratio: "4/5" }; if (pattern === 1) return { col: "span 5", ratio: "3/4" }; if (pattern === 2) return { col: "span 5", ratio: "4/5", offset: true }; if (pattern === 3) return { col: "span 7", ratio: "3/2" }; return { col: "span 6", ratio: "4/5" }; })(); const tags = (TAG_MAP[project.id] || []); return (
setHover(true)} onMouseLeave={() => setHover(false)} style={{ gridColumn: layout.col, cursor: project.href === "case" ? "pointer" : "default", position: "relative", marginTop: layout.offset ? 64 : 0, }}>
{project.name} {project.featured && (
Case study
)}
© {project.photographer}

{project.name}

{project.venue} · {project.location} · {project.year}
{tags.map((tag) => ( {tag} ))}
{project.featured && (
{project.scale} · {project.palette} Read case study
)}
); } function WeddingsApproachBlock() { const r = useReveal(); return (

Every event theme is developed from scratch.

Inspired by our conversations with each couple — custom concept renderings, visual inspiration, floor plans, décor selections. Production and management are kept in-house so the design survives the room change.

e.preventDefault()} className="btn-link">Our methodology
); } function WeddingsCTA({ onEnquire, t }) { return (

Tell us about
your wedding.

Three rounds of design conversations, in person or on a call. We respond personally to every enquiry within two working days.

+971 4 433 4363
); } Object.assign(window, { Weddings });