// sections.jsx — chapter sections for Marsa Cove off-plan microsite. // Loaded after data.js and components.jsx. const { useState, useMemo, useEffect, useRef } = React; // helper: render mixed string/{ it: "italic" } token arrays window.renderTokens = function renderTokens(toks) { if (typeof toks === "string") return toks; if (!Array.isArray(toks)) return null; return toks.map((t, i) => { if (typeof t === "string") return {t}; if (t && typeof t === "object" && t.it) return {t.it}; return null; }); }; // ─── Overview (pillars) ───────────────────────────────────────────── window.Overview = function Overview({ L }) { return (
{L.pillars.eyebrow}

{renderTokens(L.pillars.title)}

An honest off-plan template — built for the way D&B's investor team actually briefs clients on a new Dubai launch. No fabricated prices, specs sourced only when the developer confirms them.

{window.PILLARS.map((p, i) => (
{p.num}

{renderTokens(p.title)}

{p.body}

))}
); }; // ─── Bridge (dark editorial quote) ───────────────────────────────── window.Bridge = function Bridge({ L }) { return (
{L.bridge.eyebrow}

{renderTokens(L.bridge.quote)}

Status
{window.PROJECT.status}
Location
{window.PROJECT.area}
Completion
{window.PROJECT.completion}
Payment plan
{window.PROJECT.paymentPlan}
Handled by
D&B Properties
); }; // ─── Design / Architecture ───────────────────────────────────────── window.Design = function Design({ L }) { return (
{L.design.eyebrow}

{renderTokens(L.design.title)}

{L.design.p1}

{L.design.p2}

Floors
G + 24
Frontage
180 m
Aspect
Sea-facing
Material
Travertine · Bronze
); }; // ─── Residences ──────────────────────────────────────────────────── window.Residences = function Residences({ L }) { const [active, setActive] = useState(window.RESIDENCES[1].ref); return (
{L.residences.eyebrow}

{renderTokens(L.residences.title)}

{L.residences.note}

{window.RESIDENCES.map((r, i) => (
setActive(r.ref)} >
{r.img ? (
) : (
{r.placeholder || "Render pending"}
)} {r.chip}

{renderTokens(r.title)}

Beds
{r.beds}
Baths
{r.bath}
{r.sizeUnit}
{r.size}
Price on Application {r.aspect}
))}
); }; // ─── Amenities ───────────────────────────────────────────────────── window.Amenities = function Amenities({ L }) { return (
{L.amenities.eyebrow}

{renderTokens(L.amenities.title)}

{L.amenities.note}

{window.AMENITIES.map((a, i) => (
{a.num}
{renderTokens(a.name)}
{a.desc}
))}
); }; // ─── Location (list + schematic map) ────────────────────────────── window.Location = function Location({ L }) { // Schematic positions (% relative to map shell) const pins = [ { x: 24, y: 64, label: "Sheikh Zayed Rd" }, { x: 60, y: 38, label: "Palm Jumeirah" }, { x: 76, y: 48, label: "Dubai Marina" }, { x: 14, y: 30, label: "DWC Airport" }, { x: 84, y: 16, label: "Downtown" }, { x: 92, y: 64, label: "DXB" }, { x: 32, y: 22, label: "Expo City" }, ]; return (
{L.location.eyebrow}

{renderTokens(L.location.title)}

{L.location.note}

Marsa Cove · Schematic
N ↑
{/* coastline suggestion */}
Marsa Cove
{pins.map((p, i) => (
{p.label}
))}
{window.LOCATION.map((row) => (
{row.num}
{row.name} {row.sub}
{row.dur}
))}
); }; // ─── Gallery ─────────────────────────────────────────────────────── window.Gallery = function Gallery({ L }) { const [tab, setTab] = useState("exteriors"); const tabs = [ { id: "exteriors", label: "Exteriors" }, { id: "interiors", label: "Interiors" }, { id: "location", label: "Context" }, ]; const items = window.GALLERY[tab]; return ( ); }; // ─── Trust strip ─────────────────────────────────────────────────── window.Trust = function Trust({ L }) { return (
{L.trust.eyebrow}

{renderTokens(L.trust.title)}

{window.TRUST.map((t, i) => (
{t.label}
{renderTokens(t.val)}
{t.src}
))}
); }; // ─── Agent card ──────────────────────────────────────────────────── window.AgentCard = function AgentCard({ L }) { const a = window.AGENT; return (
{L.agent.eyebrow}

{a.name}

{a.role}

"{a.quote}"

{a.brn} · Multilingual: EN / AR
{ e.preventDefault(); window.dispatchEvent(new CustomEvent("open-register")); }}> Register Interest WhatsApp Thomas
); };