// Pages — BRA Tours (with i18n) const Disclaimer = () => { const { t } = useLang(); return (
!
{t.disclaimer.lead} {t.disclaimer.body}
); }; // === Localized price-table builder === const buildPriceTables = (t) => { const pt = t.prices.priceTables; const code = t.code; const orMore = pt.rowOrMore; const onetwo = code === 'pt' ? '1 ou 2' : code === 'en' ? '1 or 2' : '1 o 2'; const upN = (n) => (code === 'pt' ? 'até ' : code === 'en' ? 'up to ' : 'hasta ') + n; const up = pt.colUpTo; return { dubai: { title: pt.dubaiTitle, cols: [pt.colPassengers, `${up} 4h`, `${up} 6h`, `${up} 8h`, pt.colExtraHour], rows: [ [onetwo, '400 USD', '500 USD', '600 USD', '60 USD/h'], [upN(4), '450 USD', '550 USD', '650 USD', '70 USD/h'], [upN(6), '500 USD', '600 USD', '700 USD', '80 USD/h'], [upN(8), '550 USD', '650 USD', '750 USD', '90 USD/h'], [`09 ${orMore}`, '55 USD/pp', '80 USD/pp', '100 USD/pp', '100 USD/h'], ], }, ad: { title: pt.adTitle, cols: [pt.colPassengers, `${up} 4h*`, `${up} 8h`, `${up} 10h`, pt.colExtraHour], rows: [ [onetwo, '400 USD', '650 USD', '700 USD', '60 USD/h'], [upN(4), '450 USD', '700 USD', '750 USD', '70 USD/h'], [upN(6), '500 USD', '750 USD', '800 USD', '80 USD/h'], [upN(8), '550 USD', '800 USD', '850 USD', '90 USD/h'], [`09 ${orMore}`, '55 USD/pp', '100 USD/pp', '120 USD/pp', '100 USD/h'], ], note: pt.adNote, }, sh: { title: pt.shTitle, cols: [pt.colPassengers, `${up} 4h`, `${up} 6h`, `${up} 8h`, pt.colExtraHour], rows: [ [onetwo, '450 USD', '550 USD', '650 USD', '60 USD/h'], [upN(4), '500 USD', '600 USD', '700 USD', '70 USD/h'], [upN(6), '550 USD', '650 USD', '750 USD', '80 USD/h'], [upN(8), '600 USD', '700 USD', '800 USD', '90 USD/h'], [`09 ${orMore}`, '65 USD/pp', '90 USD/pp', '110 USD/pp', '100 USD/h'], ], }, transfer: { title: pt.transferTitle, cols: [pt.colPassengers, pt.colRoundtrip, pt.colAirportDxb, pt.colAirportAd, pt.colOneWayAd], rows: [ [onetwo, '200 USD', '250 USD', '350 USD', '250 USD'], [upN(4), '220 USD', '280 USD', '400 USD', '270 USD'], [upN(6), '260 USD', '300 USD', '500 USD', '310 USD'], [upN(8), '280 USD', '350 USD', '600 USD', '350 USD'], [`09 ${orMore}`, '350 USD', '400 USD', '700 USD', '400 USD'], ], note: pt.transferNote, }, }; }; const HomePage = ({ go }) => { const { t, lang } = useLang(); return (
{/* Hero */}
{t.home.eyebrow}
Al Fahidi

{t.home.headlineA} {t.home.headlineB}
{t.home.headlineC}

Safari

{t.home.lede}

{t.home.ctaWa}
Burj Al Arab
Gold Souk Abu Dhabi Museu do Futuro Dubai Moderna
{/* Featured tours */}
{t.home.featuredTitleA} {t.home.featuredTitleB}} action={ go('tours')}>{t.home.viewAllN.replace('{n}', TOURS.length)} } />
{TOURS.slice(0, 3).map((tour) => go('tour', id)} />)}
x.id === 'safari-vip')} onOpen={(id) => go('tour', id)} layout="wide" />
{[TOURS.find((x) => x.id === 'helicoptero'), TOURS.find((x) => x.id === 'yacht'), TOURS.find((x) => x.id === 'veuve-clicquot')].map((tour) => go('tour', id)} />)}
{/* About / Mariana split */}
Mariana
{t.home.founderEyebrow}

{t.home.founderTitleA} {t.home.founderTitleB}

{t.home.founderP1}

{t.home.founderP2}

{/* Tickets preview */}
{t.home.ticketsTitleA} {t.home.ticketsTitleB}} action={ go('ingressos')}>{t.home.ticketsCta} } />
{t.home.ticketsItems.map((tk, i) => (
{t.home.ticketLabel}
{tk.l}
{tk.v}
))}
{/* CTA */}
{t.home.ctaBigEyebrow}

{t.home.ctaBigTitleA}

{t.home.ctaBigTitleB}

WhatsApp +971 55 242 7448 reservation@bratoursdubai.com
); }; const BigStat = ({ n, l }) =>
{n}
{l}
; // Tours listing const ToursPage = ({ go }) => { const { t, lang } = useLang(); const [region, setRegion] = React.useState('__all'); const regions = Array.from(new Set(TOURS.map((tour) => localizedTour(tour, lang).region))); const filtered = TOURS.filter((tour) => region === '__all' || localizedTour(tour, lang).region === region); return (
{t.tours.eyebrowN.replace('{n}', TOURS.length)}

{t.tours.titleA} {t.tours.titleB}

{t.tours.lede}

{t.tours.filter}
{[['__all', t.tours.all], ...regions.map(r => [r, r])].map(([v, l]) => )}
{filtered.length} {t.tours.of} {TOURS.length}
{filtered.map((tour) => go('tour', id)} />)}
); }; // Tour detail const TourPage = ({ tourId, go }) => { const { t, lang } = useLang(); const baseTour = TOURS.find((x) => x.id === tourId) || TOURS[0]; const tour = localizedTour(baseTour, lang); return (
{tour.region} · {tour.duration} · {tour.group}

{tour.name}

{tour.summary}

{tour.name}
{t.tour.optionsEyebrow}

{t.tour.optionsTitleA} {t.tour.optionsTitleB}

{tour.options.map((o, i) =>
{o.label}
{o.body}
)}
{t.tour.highlightsEyebrow}

{t.tour.highlightsTitle}

{tour.highlights.map((h, i) =>
{h}
)}
{t.tour.similarTitleA} {tour.region}} action={ go('tours')}>{t.common.viewAll} } />
{TOURS.filter((x) => x.id !== baseTour.id).slice(0, 3).map((x) => go('tour', id)} />)}
); }; // Prices page const PrecosPage = ({ go }) => { const { t } = useLang(); const tables = buildPriceTables(t); return (
{t.prices.eyebrow}

{t.prices.titleA} {t.prices.titleB}

{t.prices.lede}

{t.prices.payEyebrow}

{t.prices.payTitle}

    {t.prices.payItems.map(([k, v], i) => (
  • {k} {v}
  • ))}
{t.prices.notesEyebrow}

{t.prices.notesTitle}

{t.prices.notes1}

{t.prices.notes2}

); }; // Tickets page const IngressosPage = () => { const { t } = useLang(); return (
{t.tickets.eyebrow}

{t.tickets.titleA} {t.tickets.titleB}

{t.tickets.lede}

{/* Dubai list */}

{t.tickets.dubai}

{TICKETS_DUBAI.map(([n, v], i) => )}
{t.tickets.tableAttraction}{t.tickets.tableValue}
{n}{v}
{/* Abu Dhabi list + CTA card to balance height */}

{t.tickets.abuDhabi}

{TICKETS_ABU_DHABI.map(([n, v], i) => )}
{t.tickets.tableAttraction}{t.tickets.tableValue}
{n}{v}
{/* Image */} Louvre Abu Dhabi {/* CTA Card */}
{t.tickets.ctaEyebrow}

{t.tickets.ctaTitle}

{t.tickets.ctaBody}

    {t.tickets.ctaBullets.map((b, i) =>
  • {b}
  • )}
{t.tickets.ctaButton}
); }; // Sobre / About const SobrePage = ({ go }) => { const { t, lang } = useLang(); const mariana = GUIDES.find((g) => g.name === 'Mariana'); const others = GUIDES.filter((g) => g.name !== 'Mariana'); const lMariana = mariana ? localizedGuide(mariana, lang) : null; const lInfo = localizedInfo(lang); return (
{t.about.eyebrow}

{t.about.titleA} {t.about.titleB}

{t.about.lede}

{t.about.teamTitleA} {t.about.teamTitleB}} /> {lMariana &&
{lMariana.name}
{t.about.featuredEyebrow}

{lMariana.name}

{lMariana.role}

{lMariana.bio}

}
{others.map((g, i) => { const lg = localizedGuide(g, lang); return (
{g.img ? {g.name} :
{g.name}
}
{g.name}
{lg.role}

{lg.bio}

); })}
{t.about.infoTitleA} {t.about.infoTitleB}} />
{lInfo.map((info, idx) =>
{String(idx + 1).padStart(2, '0')}

{info.title}

{info.body}

)}
); }; // Contato const ContatoPage = () => { const { t } = useLang(); const [status, setStatus] = React.useState('idle'); // idle | sending | success | error const handleSubmit = async (e) => { e.preventDefault(); setStatus('sending'); const data = new FormData(e.target); try { const res = await fetch('https://formspree.io/f/maqznrbb', { method: 'POST', body: data, headers: { Accept: 'application/json' } }); if (res.ok) { setStatus('success'); e.target.reset(); } else { setStatus('error'); } } catch (_) { setStatus('error'); } }; return (
{t.contact.eyebrow}

{t.contact.titleA} {t.contact.titleB}

{status === 'success' && (
✓ {t.contact.successMsg || 'Mensagem enviada! Entraremos em contato em breve.'}
)} {status === 'error' && (
{t.contact.errorMsg || 'Algo deu errado. Tente novamente ou fale pelo WhatsApp.'}
)}
{t.contact.or}

{t.contact.response}

QR Code
{t.contact.qrEyebrow}
{t.contact.qrCompany}
wa.me/971552427448
WhatsApp Business
); }; const Field = ({ label, placeholder, multiline, name, type, required }) => { const Tag = multiline ? 'textarea' : 'input'; return ( ); }; Object.assign(window, { HomePage, ToursPage, TourPage, PrecosPage, IngressosPage, SobrePage, ContatoPage, Disclaimer });