/* global React, ReactDOM, IK, RealWeddingsSection, CaseStudy, DestinationsSection, ServicesSection, PressSection, AboutSection, PackagesSection, EnquirySection, Footer, Wordmark, TweaksPanel, TweakSection, TweakRadio, TweakColor, TweakToggle, useTweaks */ const { useState, useEffect, useRef } = React; // === NAV === function Nav({ lang, onLang, onEnquire }) { const T = IK.t[lang]; const [scrolled, setScrolled] = useState(false); const [open, setOpen] = useState(false); useEffect(() => { const onScroll = () => setScrolled(window.scrollY > 24); window.addEventListener("scroll", onScroll, { passive: true }); return () => window.removeEventListener("scroll", onScroll); }, []); const items = [ ["real-weddings", T.nav[0]], ["destinations", T.nav[1]], ["services", T.nav[2]], ["about", T.nav[3]], ["press", T.nav[4]], ["contact", T.nav[5]], ]; return (
{ e.preventDefault(); window.scrollTo({ top: 0, behavior: "smooth" }); }}>
{["en","ar"].map(L => ( ))}
{T.enquire}
{open && (
setOpen(false)} style={{ position: "fixed", inset: 0, background: "rgba(251,247,242,.98)", zIndex: 100, padding: 40, display: "flex", flexDirection: "column", gap: 32, }}>
)}
); } // === HERO === function Hero({ lang }) { const T = IK.t[lang]; const [imgIdx, setImgIdx] = useState(0); const heroImages = [ "media/wedding-shiv-jessica-decor.webp", "media/hero-portfolio-sahl3228.webp", "media/wedding-phuket-beach-mandap.webp", "media/destination-greece-01.webp", ]; useEffect(() => { const t = setInterval(() => setImgIdx(i => (i + 1) % heroImages.length), 6500); return () => clearInterval(t); }, []); return (
{heroImages.map((src, i) => ( ))}
  {T.heroEyebrow}

{T.heroTitleA}{" "} {T.heroTitleB}
{T.heroTitleC}

{T.heroSub}

{/* hero meta corners */}
00 — Home
{String(imgIdx + 1).padStart(2,"0")} / {String(heroImages.length).padStart(2,"0")}
{heroImages.map((_, i) => (
); } // === IKIGAI INTRO === function IntroSection({ lang }) { return (
  01 — Philosophy

Ikigai — the Japanese idea of a reason for being.  For us, that's standing beside a couple at four in the morning — before the first guest arrives, and again after the last one leaves.

We weave South-Asian, multicultural and destination weddings — Haldi to reception, Phuket to Kefalonia. We don't sell packages on a card. We listen, we propose, we hold the calendar, the budget and the difficult conversation about cousins. The rest is your story, told slowly.

); } // === FEATURED WEDDING (editorial double-feature) === function FeaturedWedding({ lang, onOpen }) { const w = IK.weddings[0]; // Greece return (
Featured story · 2024

{w.title[lang]}.

{w.excerpt[lang]} Two ceremonies, four functions and one very long, very joyful Sunday lunch above the Aegean.

{w.functions.map(f => {f} )}
Consent + photographer credit pending
); } // === TWEAKS === const PALETTES = { "Rose & Ivory": { rose: "#C98B86", roseDeep: "#A56862", paper: "#FBF7F2", paper2: "#F6EFE7", blush: "#F2E6E4", line: "#E7DDD2", ink: "#1C1A19", swatch: ["#C98B86","#FBF7F2","#1C1A19"] }, "Marigold": { rose: "#C46A2E", roseDeep: "#8E4717", paper: "#FBF6EC", paper2: "#F4ECDC", blush: "#F1E2C8", line: "#E5D6B8", ink: "#1F1810", swatch: ["#C46A2E","#FBF6EC","#1F1810"] }, "Henna": { rose: "#8B3E2F", roseDeep: "#5D2519", paper: "#F8F1E8", paper2: "#EFE2D2", blush: "#E8D3C2", line: "#D6BFA8", ink: "#1A100A", swatch: ["#8B3E2F","#F8F1E8","#1A100A"] }, "Sage & Cream": { rose: "#7A8F76", roseDeep: "#4E6549", paper: "#F8F5EE", paper2: "#EEEAE0", blush: "#E0E2D5", line: "#D0D2C0", ink: "#1A1C18", swatch: ["#7A8F76","#F8F5EE","#1A1C18"] }, }; const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{ "lang": "en", "palette": "Rose & Ivory", "dense": false, "showConsent": true }/*EDITMODE-END*/; function applyTweaks(t) { const root = document.documentElement; root.setAttribute("dir", t.lang === "ar" ? "rtl" : "ltr"); root.setAttribute("lang", t.lang); window.__ikLang = t.lang; const p = PALETTES[t.palette] || PALETTES["Rose & Ivory"]; root.style.setProperty("--rose", p.rose); root.style.setProperty("--rose-deep", p.roseDeep); root.style.setProperty("--paper", p.paper); root.style.setProperty("--paper-2", p.paper2); root.style.setProperty("--blush", p.blush); root.style.setProperty("--line", p.line); root.style.setProperty("--ink", p.ink); document.body.style.fontSize = t.dense ? "15px" : "16px"; // expose consent flag for components window.__ikShowConsent = t.showConsent; } // === ROOT === function App() { const [t, setTweak] = useTweaks(TWEAK_DEFAULTS); const lang = t.lang; const [openCase, setOpenCase] = useState(null); useEffect(() => { applyTweaks(t); }, [t]); return (