// ============================================================ // MONOGRAM — Home screen // ============================================================ function HomeScreen({ setRoute, locale, hero }) { const t = COPY[locale]; // Parallax & cursor sheen for hero const heroRef = useRef(null); const letterRef = useRef(null); const bgRef = useRef(null); useEffect(() => { const onScroll = () => { const y = window.scrollY; if (bgRef.current) bgRef.current.style.transform = `translate3d(0, ${y * 0.18}px, 0) scale(${1 + y * 0.0002})`; if (letterRef.current) letterRef.current.style.transform = `translate3d(0, ${-y * 0.12}px, 0) rotate(${y * 0.01}deg)`; }; window.addEventListener("scroll", onScroll, { passive: true }); return () => window.removeEventListener("scroll", onScroll); }, []); return (
); } // ============================================================================= // Hero — three variants // ============================================================================= function Hero({ hero, setRoute, locale, bgRef, letterRef, heroRef }) { const t = COPY[locale].hero; const tNav = COPY[locale].nav; if (hero === "split") { return (
{t.eyebrow}

{t.h1a}
{t.h1b}

{t.tufte} {t.tufteCite}
); } if (hero === "magazine") { return (
MONOGRAM · Issue 01 Escaping Flatland Dubai · d3
{t.eyebrow}

{t.h1a} {t.h1b}

{t.tufte}{t.tufteCite}
Vol. 01 · Concept By appointment · d3 +971 50 456 3365
); } // Default: full-bleed concept plate return (
{t.eyebrow}

{t.h1a}
{t.h1b}

{t.tufte} {t.tufteCite}
— Studio {t.meta1} {t.meta2} {t.meta3}
{locale === "ar" ? "اسحب للأسفل" : "Scroll · paper to sculpture"}
); } // ============================================================================= // Offering split // ============================================================================= function OfferingSplit({ setRoute, locale }) { const t = COPY[locale].offering; return (
setRoute({ name: "collection", id: "sculptural" })}>
{t.jewelleryNum}

{t.jewelleryTitle} {t.jewelleryTitleItal}

{t.jewelleryDesc}

{t.jewelleryCta}
{t.inviteNum}

{t.inviteTitle} {t.inviteTitleItal}

{t.inviteDesc}

{t.inviteCta}
); } // ============================================================================= // Collections strip // ============================================================================= function CollectionsStrip({ setRoute, locale }) { const t = COPY[locale].collSection; return (
{COLLECTIONS.map((c, i) => (
setRoute({ name: "collection", id: c.id })}>
{locale === "ar" ? c.nameAr : c.nameEn}
0{i + 1}

{locale === "ar" ? c.descAr : c.descEn}

))}
); } // ============================================================================= // Concept block // ============================================================================= function ConceptBlock({ locale }) { const t = COPY[locale].concept; return (
{t.caption}

{t.title} {t.titleItal}

{t.lead}

{t.p1}

{t.p2}

{t.letters.map((l, i) => (
{l.role} {l.name}
{l.ar}
{locale === "ar" ? "ملاحظة" : "note"} {l.note}
))}
); } // ============================================================================= // Credibility strip // ============================================================================= function CredibilityStrip({ locale }) { const t = COPY[locale].cred; return (
{t.items.map((it, i) => (
{it.year}
{it.title}
{it.where}

{it.note}

))}
); } // ============================================================================= // Contact band // ============================================================================= function ContactBand({ setRoute, locale }) { const t = COPY[locale].contact; return (
{t.num} · {t.title}

{t.title} {t.titleItal}

{t.sub}

{t.cta}
{t.l1}
{t.v1}
{t.l2}
{t.v2}
{t.l3}
{t.v3}
{t.l4}
{t.v4}
); } Object.assign(window, { HomeScreen });