/* Sections — Problem, HowItWorks, WhyBrazil, Markets, Trust, Quote, Blog. */
function SectionHead({ eyebrow, title, body, align = 'left', max = 720 }) {
const center = align === 'center';
return (
{eyebrow}
{title}
{body &&
{body}
}
);
}
const PAD = { paddingTop:104, paddingBottom:104 };
/* 03 — Problem */
function Problem({ t }) {
const p = t.problem;
return (
{p.stats.map((s, i) => (
))}
{p.sources &&
{p.sources}
}
);
}
/* 04 — How it works: sticky intro left, four step nodes on one connector line right */
function HowItWorks({ t, bg = 'app' }) {
const h = t.how;
const TOKEN = 46;
return (
{/* one unbroken line through the four number tokens */}
{
if (!el || el.__bneMeasured) return; el.__bneMeasured = true;
const measure = () => {
const wrap = el.parentElement; if (!wrap) return;
const rows = wrap.querySelectorAll('[data-how-row]'); if (!rows.length) return;
const wr = wrap.getBoundingClientRect();
const lr = rows[rows.length-1].getBoundingClientRect();
el.style.height = Math.max(0, lr.top - wr.top) + 'px';
};
measure();
setTimeout(measure, 700); setTimeout(measure, 1600);
window.addEventListener('resize', measure);
if (window.ResizeObserver) { const ro = new ResizeObserver(measure); ro.observe(el.parentElement); }
}}>
{h.steps.map((s, i) => {
const hot = !!s.badge; /* step 02 = emphasized node */
return (
{s.n}
{s.t}
{s.badge && {s.badge}}
{s.b}
);
})}
);
}
/* 05 — Why Brazil (always purple) */
function WhyBrazil({ t }) {
const w = t.why;
return (
{/* atmospheric Brazil photo — background layer (drop a São Paulo skyline here) */}
{/* navy/purple overlay + soft top/bottom fades — photo reads as ambient texture */}
{w.points.map((pt, i) => (
))}
{/* Row 2 — three deeper columns with atmospheric photos */}
{w.advantage &&
{w.advantage.map((col, i) => (
))}
}
{w.note}
);
}
/* 07 — Markets */
function Markets({ t }) {
const m = t.markets;
return (
{m.cols.map((col, i) => (
))}
);
}
/* 09 — Trust & badges */
function Trust({ t }) {
const tr = t.trust;
return (
{tr.stats.map((s, i) => (
))}
{tr.badgeLabel}
{tr.badges.map((b, i) => (
{b}
))}
);
}
/* 10 — Brand-voice statement (no placeholder testimonials) */
function Quote({ t }) {
return (
“{t.quote.text}”
{t.quote.sub}
);
}
/* 11 — Blog / insights */
function Blog({ t }) {
const b = t.blog;
return (
{b.items.map((a, i) => (
{a.tag}
{a.t}
{b.soon}
·
{a.read}
))}
);
}
/* 05b — The Brazil Advantage (culture / creativity / code). Mid-purple band. */
function BrazilAdvantage({ t }) {
const a = t.brazilAdv;
return (
{a.cols.map((c, i) => (
))}
);
}
Object.assign(window, { SectionHead, Problem, HowItWorks, WhyBrazil, Markets, Trust, Quote, Blog, PAD, BrazilAdvantage });