// Object 1 — W1NNER — Main sections. Export to window for cross-script access.
function Nav({ t, locale, setLocale, onCta }) {
const isAr = locale === 'ar';
return (
{t.nav.project}
/
{t.nav.community}
{['en', 'ar'].map(l => (
))}
);
}
function Hero({ t, variant, onCta, onBrochure }) {
const heroImg = 'media/render-winner-tower.webp';
const editorialImg = 'media/render-up-view.webp';
return (
{variant !== 'editorial' && (
)}
{t.hero.eyebrow}
Object 1 · 2026 — 2027
W1NNER
{t.hero.line}
- {t.hero.community}
- {t.hero.communityVal}
- {t.hero.typology}
- {t.hero.typologyVal}
- {t.hero.status}
- {t.hero.statusVal}
- {t.hero.pricing}
- {t.hero.pricingVal}
{variant === 'editorial' && (
)}
{variant === 'fullbleed' && (
{t.hero.scroll} ↓
)}
);
}
function SectionHead({ plate, title, sub }) {
return (
);
}
function Concept({ t }) {
return (
{t.concept.pull}
{t.concept.meta1Label}
{t.concept.meta1Val}
{t.concept.meta2Label}
{t.concept.meta2Val}
);
}
function Location({ t }) {
return (
{t.location.poi.map((p, i) => (
-
{String(i + 1).padStart(2, '0')}
{p.name}
{p.dur}
))}
{t.location.note}
);
}
function Amenities({ t, platesOn }) {
return (
{t.amenities.items.map((it, i) => (
{it.name}
{`P.${String(i + 1).padStart(2, '0')}`}
{it.cap}
))}
);
}
function Residences({ t, onCta }) {
return (
{t.residences.rows.map((r, i) => (
))}
Accuracy. {t.residences.disclosure}
);
}
function Gallery({ t, layout }) {
const items = [
{ src: 'render-object1-main.webp', lbl: 'Pl. 01 · Tower at dusk', cls: 'g-1' },
{ src: 'amenity-pool-night.webp', lbl: 'Pl. 02 · Pool deck, evening', cls: 'g-2' },
{ src: 'interior-lobby-main.webp', lbl: 'Pl. 03 · W1NNER lobby', cls: 'g-3' },
{ src: 'amenity-balcony-view.webp', lbl: 'Pl. 04 · Balcony · sunset', cls: 'g-4' },
{ src: 'render-aerial-air-view.webp', lbl: 'Pl. 05 · Aerial · podium', cls: 'g-5' },
{ src: 'amenity-pool-view1.webp', lbl: 'Pl. 06 · Pool · daylight', cls: 'g-6' },
{ src: 'render-podium-top.webp', lbl: 'Pl. 07 · Podium garden', cls: 'g-7' },
];
return (
{items.map((it, i) => (
))}
);
}
function Momentum({ t }) {
return (
{t.momentum.cells.map((c, i) => (
))}
{t.momentum.attr}
);
}
function Contact({ t }) {
return (
);
}
function Footer({ t }) {
return (
);
}
Object.assign(window, { Nav, Hero, Concept, Location, Amenities, Residences, Gallery, Momentum, Contact, Footer, SectionHead });