/* Pages: Home, Portfolio, CaseStudy, Services, About, Contact */ const TYPE_LABEL = { weddings:"Wedding", luxury:"Private", corporate:"Brand", social:"Social" }; const TYPE_LABEL_AR = { weddings:"عُرس", luxury:"خاص", corporate:"علامة", social:"اجتماعي" }; /* =================== HOME =================== */ const Home = ({ lang, setRoute, setCaseId }) => { const t = COPY[lang]; const featured = ["white-garden","oceanside-canopy","midnight-garden","brand-activation-01"]; const featuredEvents = featured.map(id => EVENTS.find(e=>e.id===id)); return (
{/* HERO */}
{t.hero.eyebrow}{lang==="en"?"Luxury event design studio":"استوديو فعاليات فاخر"}

{t.hero.tagline_a} {t.hero.tagline_b}
{t.hero.tagline_c} {t.hero.tagline_d}

{lang==="en" ? "Event Chic Designs — Dubai, since 2015." : "Event Chic Designs — دبي، منذ ٢٠١٥."} {t.hero.blurb}
{t.hero.marquee.map((m,i)=>(· {m}))}
{/* EVENT TYPE TILES */}
{lang==="en"?"What we design":"ما نُصمّم"}

{t.types.title}

{t.types.lede}

{t.types.items.map(it => (
{ window.__filterType = it.id; setRoute("portfolio"); }}>
{it.num} · {lang==="en"?"Category":"تصنيف"}
{it.title}
{it.desc}
{lang==="en"?"See work":"شاهد"}
))}
{/* FEATURED — editorial grid */}
{t.featured.eyebrow}

{t.featured.title}

{ setCaseId(featuredEvents[0].id); setRoute("case"); }}/> { setCaseId(featuredEvents[1].id); setRoute("case"); }}/> { setCaseId(featuredEvents[2].id); setRoute("case"); }}/> { setCaseId(featuredEvents[3].id); setRoute("case"); }}/>
{/* TAGLINE STRIP */}
Passion & perfection
Tagline since 2015Studio motto
{/* PROCESS */} {/* PRESS */} {/* CTA BAND */}
); }; const FeatBlock = ({ e, cols, h, lang, onOpen }) => (
{e.title}/
{lang==="ar"?e.title_ar:e.title}
{lang==="ar"?e.location_ar:e.location} · {e.year}
); /* =================== PORTFOLIO =================== */ const Portfolio = ({ lang, setRoute, setCaseId }) => { const t = COPY[lang]; const [filter, setFilter] = React.useState(window.__filterType || "all"); React.useEffect(()=>{ if (window.__filterType) { setFilter(window.__filterType); delete window.__filterType; } }, []); const filtered = filter === "all" ? EVENTS : EVENTS.filter(e => e.type === filter); // mosaic layout — alternate spans const spans = ["span 5","span 7","span 7","span 5","span 6","span 6","span 8","span 4","span 4","span 8","span 6","span 6"]; const heights = [520, 520, 480, 480, 540, 540, 460, 460, 460, 460, 500, 500]; return (
{t.portfolio.eyebrow}{lang==="en"?"All projects":"كل الأعمال"}

{t.portfolio.title}.

{t.portfolio.lede}

{lang==="en"?"Filter":"تصنيف"}: {Object.entries(t.portfolio.filters).map(([k,lbl])=>( ))} {filtered.length} {t.portfolio.countSuffix}
{filtered.map((e, i) => (
{ setCaseId(e.id); setRoute("case"); }}>
{e.title}/ {lang==="ar" ? TYPE_LABEL_AR[e.type] : TYPE_LABEL[e.type]} · {e.year}
{lang==="ar"?e.title_ar:e.title}
{e.year}
{lang==="ar"?e.location_ar:e.location}
))}
{lang==="en" ? "Each project is published once photographer credit and (for weddings) subject consent are confirmed. New entries are added monthly." : "تُنشَر كل دراسة حالة عند تأكيد حقوق التصوير وموافقة الأشخاص. تُضاف أعمال جديدة شهرياً."} Rights gated
); }; /* =================== CASE STUDY =================== */ const CaseStudy = ({ caseId, lang, setRoute, setCaseId }) => { const t = COPY[lang]; const e = EVENTS.find(x => x.id === caseId) || EVENTS[0]; const [lb, setLb] = React.useState(-1); const related = EVENTS.filter(x => x.type === e.type && x.id !== e.id).slice(0, 3); // gallery span pattern const gSpans = ["span 7","span 5","span 6","span 6","span 12","span 4","span 8","span 6","span 6"]; const gHeights = [620, 480, 520, 520, 720, 480, 580, 500, 500]; return (
{e.title}/
{lang==="ar"?TYPE_LABEL_AR[e.type]:TYPE_LABEL[e.type]}{e.year}{lang==="ar"?e.location_ar:e.location}

{lang==="ar"?e.title_ar:e.title}

{lang==="en"?"Event type":"النوع"}
{lang==="ar"?TYPE_LABEL_AR[e.type]:TYPE_LABEL[e.type]}
{lang==="en"?"Location":"الموقع"}
{lang==="ar"?e.location_ar:e.location}
{lang==="en"?"Scope":"النطاق"}
{lang==="ar"?e.scope_ar:e.scope}
{lang==="en"?"Year":"السنة"}
{e.year}

{lang==="en" ? <>The brief, the build,
the day. : <>الفكرة، البناء،
اليوم.}

{(lang==="ar"?e.narrative_ar:e.narrative).map((p, i)=>(

{p}

))}
{lang==="en" ? "Photographer credit: [TBC — confirmed per event] · Subject consent on file." : "حقوق التصوير: [يُؤكَّد لكل حدث] · موافقة الأشخاص محفوظة."} Credit gated
{e.images.map((src, i)=>(
setLb(i)}>
))}
“{lang==="ar"?e.pull_ar:e.pull}”
— Jardel Silva · {lang==="en"?"Founder & Lead Designer":"المؤسس والمصمم الرئيسي"}
{/* Related */}

{lang==="en"?"Related projects":"أعمال ذات صلة"}

{related.map((re, i)=>(
{ setCaseId(re.id); window.scrollTo({top:0, behavior:"smooth"}); }}>
{lang==="ar"?TYPE_LABEL_AR[re.type]:TYPE_LABEL[re.type]} · {re.year}
{lang==="ar"?re.title_ar:re.title}
{re.year}
))}
{lb >= 0 && ( setLb(-1)} onPrev={()=>setLb((lb - 1 + e.images.length) % e.images.length)} onNext={()=>setLb((lb + 1) % e.images.length)}/> )}
); }; /* =================== SERVICES =================== */ const Services = ({ lang, setRoute }) => { const t = COPY[lang]; return (
{t.services.eyebrow}{lang==="en"?"Studio capabilities":"خدمات الاستوديو"}

{t.services.title}

{t.services.lede}

{SERVICES.map((s, i) => (
{String(i+1).padStart(2,"0")} / 0{SERVICES.length}
{lang==="ar"?s.nm_ar:s.nm}
{lang==="ar"?s.ds_ar:s.ds}
    {(lang==="ar"?s.bullets_ar:s.bullets).map((b, j)=>(
  • {b}
  • ))}
))}
); }; /* =================== ABOUT =================== */ const About = ({ lang, setRoute }) => { const t = COPY[lang]; return (
{t.about.eyebrow}{lang==="en"?"Founder & studio":"المؤسس والاستوديو"}

{t.about.title.split('.').map((part, i, arr)=> i === arr.length - 1 ? part : {part}.)}

Studio
{lang==="en" ? "Portrait subject to be confirmed against founder; portrait rights to be cleared." : "تأكيد هوية الصورة وحقوقها مطلوب."} TBC

{t.about.lede}

{t.about.body.map((p,i)=>(

{p}

))}
{t.about.stats.map((s,i)=>(
{s.v}
{s.l}
))}
{/* International note */}
{lang==="en"?"International":"دولي"}

{lang==="en"?"Beyond the GCC.":"خارج الخليج."}

{lang==="en" ? "The studio has produced events across Angola, London, Paris, the Netherlands, Brazil, Nigeria and India. Destination briefs are taken on a case-by-case basis once the dates, scope and rights position are clear." : "أنتج الاستوديو فعاليات في أنغولا، لندن، باريس، هولندا، البرازيل، نيجيريا، والهند. تُقبَل مشاريع الوجهات بحسب التواريخ والنطاق والحقوق."}

{lang==="en" ? "Founder-stated; specific events confirmed individually." : "تصريح من المؤسس؛ تؤكَّد الأحداث فردياً."} Founder claim

); }; /* =================== CONTACT =================== */ const Contact = ({ lang, setRoute }) => { const t = COPY[lang]; const [form, setForm] = React.useState({ name:"", email:"", phone:"", type:"", date:"", guests:"", venue:"", message:"" }); const [sent, setSent] = React.useState(false); const submit = (e) => { e.preventDefault(); setSent(true); window.scrollTo({top: 0, behavior:"smooth"}); }; const set = (k,v) => setForm(f => ({...f, [k]:v})); return (
{t.contact.eyebrow}{lang==="en"?"Begin the design":"ابدأ التصميم"}

{t.contact.title.split('.').map((part, i, arr)=>i === arr.length - 1 ? part : {part}.)}

{t.contact.lede}

{sent ? (
{lang==="en"?"Sent":"أُرسِل"}

{t.contact.form.sent}

) : (
set("name", e.target.value)}/>
set("email", e.target.value)}/>
set("phone", e.target.value)}/>
set("date", e.target.value)}/>
set("guests", e.target.value)} placeholder="100"/>
set("venue", e.target.value)} placeholder={lang==="en"?"Hotel, beach, private estate…":"فندق، شاطئ، خاص…"}/>