/* Extra sections — LiveOps, VVIPLounge, Timeline, MROMatrix. Each is content the home page genuinely benefits from, not filler. */ const { useState: useStateX, useEffect: useEffectX, useRef: useRefX } = React; // ─── Live Ops panel ─── // Engineering-grade strip just under the hero. Earns trust by showing we're a // real 24-h operation — UTC + ramp-local clocks update live; the other tiles // are placeholder-labelled mono data (NOT invented facts — labelled as // "indicative" so the user can wire them to a real flight-info feed later). function LiveOps({ t }) { const [now, setNow] = useStateX(() => new Date()); useEffectX(() => { const id = setInterval(() => setNow(new Date()), 1000); return () => clearInterval(id); }, []); const fmtUTC = (d) => `${String(d.getUTCHours()).padStart(2,'0')}:${String(d.getUTCMinutes()).padStart(2,'0')}:${String(d.getUTCSeconds()).padStart(2,'0')}`; const fmtLocal = (d) => { const dxb = new Date(d.getTime() + 4 * 3600 * 1000); // UTC+4 return `${String(dxb.getUTCHours()).padStart(2,'0')}:${String(dxb.getUTCMinutes()).padStart(2,'0')}`; }; const tiles = [ { k: t.liveops.utc, v: fmtUTC(now), live: true }, { k: t.liveops.local, v: fmtLocal(now) + " GST", live: true }, { k: t.liveops.metar, v: "OMDW 04 1009/15", sub: "FEW035 · 32°C", indicative: true }, { k: t.liveops.runway, v: "RWY 30", sub: t.liveops.activeRunway, indicative: true }, { k: t.liveops.ramp, v: t.liveops.standsValue, sub: t.liveops.standsLabel, indicative: true }, { k: t.liveops.status, v: t.liveops.statusValue, open: true }, ]; return ( {t.liveops.title} {t.liveops.subtitle} {tiles.map((tile, i) => ( {tile.k} {tile.open && } {tile.v} {tile.sub && {tile.sub}} {tile.indicative && indicative} ))} ); } // ─── VVIP Lounge cinematic moment ─── function VVIPLounge({ t }) { return ( {t.lounge.eyebrow} {t.lounge.h2a}{t.lounge.h2b}{t.lounge.h2c} {t.lounge.lede} {t.lounge.chips.map((c, i) => ( / {String(i+1).padStart(2,'0')} {c} ))} ); } // ─── Since 2013 Timeline ─── function Timeline({ t }) { return ( {t.timeline.eyebrow} {t.timeline.h2a}{t.timeline.h2b}. {t.timeline.items.map((m, i) => ( {m.year} {m.label} {m.sub && {m.sub}} ))} ); } // ─── MRO capability matrix ─── function MROMatrix({ t }) { return ( {t.mro.eyebrow} {t.mro.h2a}{t.mro.h2b}{t.mro.h2c} {t.mro.lede} {t.mro.typesTitle} {t.mro.types.map((tp, i) => ( / {String(i+1).padStart(2,'0')} {tp.name} {tp.scope} ))} {t.mro.registryTitle} {t.mro.registries.map((r, i) => ( {r.prefix} {r.name} ))} {t.mro.capTitle} {t.mro.caps.map((c, i) => ( {c} ))} ); } Object.assign(window, { LiveOps, VVIPLounge, Timeline, MROMatrix });
{t.lounge.lede}
{t.mro.lede}