// pesito — Topbar (iOS glass) + Hero (editorial)
const Topbar = ({ lang, setLang, onApply, onScroll }) => {
const navs = lang === 'es'
? [['calc', 'Calculadora'], ['steps', 'Cómo funciona'], ['faq', 'Preguntas'], ['trust', 'Regulación']]
: [['calc', 'Калькулятор'], ['steps', 'Как работает'], ['faq', 'Вопросы'], ['trust', 'Регулирование']];
return (
);
};
const Hero = ({ lang, onApply, onScroll }) => {
const t = lang === 'es' ? {
eyebrow: 'préstamos honestos',
h1: ['De pesito', 'a pesito.', Sin letra chica.],
sub: 'Préstamos personales en México de $200 a $100,000. Tasas y comisiones a la vista, antes de firmar.',
stats: [['3 min', 'solicitud'], ['5 seg', 'depósito SPEI'], ['0', 'letra chica']],
cta: 'Pedir préstamo',
secondary: 'Calcular primero',
cardLabel: 'Tu préstamo',
cardTerm: '8 quincenas',
cardNote: 'sin penalización por prepago',
cardCAT: 'CAT 518% sin IVA',
} : {
eyebrow: 'честные займы',
h1: ['От песо', 'к песо.', Без мелкого шрифта.],
sub: 'Личные займы в Мексике от $200 до $100,000. Все ставки и комиссии видны до подписи.',
stats: [['3 мин', 'заявка'], ['5 сек', 'перевод SPEI'], ['0', 'скрытых сборов']],
cta: 'Подать заявку',
secondary: 'Сначала рассчитать',
cardLabel: 'Ваш заём',
cardTerm: '8 двухнедельных',
cardNote: 'без штрафа за досрочное погашение',
cardCAT: 'CAT 518% без НДС',
};
return (
{t.eyebrow} · es-MX
{t.h1[0]}
{t.h1[1]}
{t.h1[2]}
{t.sub}
{t.stats.map(([n, label], i) => (
))}
{/* Editorial card on right */}
);
};
const HeroCard = ({ lang, t }) => {
const [tilt, setTilt] = React.useState({ x: 0, y: 0 });
const onMove = (e) => {
const r = e.currentTarget.getBoundingClientRect();
const x = ((e.clientX - r.left) / r.width - 0.5) * 4;
const y = ((e.clientY - r.top) / r.height - 0.5) * -4;
setTilt({ x, y });
};
// 8-quincena schedule: heights vary slightly so it reads as data, not decoration
const bars = [0.78, 0.82, 0.76, 0.84, 0.80, 0.78, 0.82, 0.78];
const dates = ['14 may','28 may','11 jun','25 jun','9 jul','23 jul','6 ago','20 ago'];
const datesRu = ['14.05','28.05','11.06','25.06','09.07','23.07','06.08','20.08'];
const ds = lang === 'es' ? dates : datesRu;
return (
setTilt({ x: 0, y: 0 })}
style={{
position: 'relative',
transform: `perspective(1400px) rotateY(${tilt.x}deg) rotateX(${tilt.y}deg)`,
transition: 'transform 220ms ease-out',
transformStyle: 'preserve-3d',
height: '100%',
}}>
{/* paper sheet — taller, denser, more trust signals */}
{/* corner perforation — paper-fold cue */}
{/* HEADER: contract id + brand mark */}
{t.cardLabel}
SOFOM ENR · MXN-001 · 2026
{/* AMOUNT — bigger, more prominent */}
$5,000MXN
{t.cardTerm} · {t.cardNote}
{/* PAYMENT META */}
{lang === 'es' ? 'Pago quincenal' : 'Платёж раз в 2 нед.'}
$863
{lang === 'es' ? 'Total a pagar' : 'Всего к оплате'}
$6,900
{/* SCHEDULE — 8 quincenas visualised. Trust comes from showing the data. */}
{lang === 'es' ? 'Cronograma · 8 pagos' : 'График · 8 платежей'}
{lang === 'es' ? 'cada 14 días' : 'каждые 14 дней'}
{bars.map((h, i) => (
))}
{ds.map((d, i) => (
{d}
))}
{/* TRUST STRIP — regulatory badges */}
{[
{ k: 'CNBV', v: lang === 'es' ? 'regulado' : 'регулир.' },
{ k: 'CONDUSEF', v: lang === 'es' ? 'supervisado' : 'надзор' },
{ k: 'SPEI', v: lang === 'es' ? 'Banxico' : 'Banxico' },
].map((b, i) => (
))}
{/* FOOTER — CAT + verified */}
{t.cardCAT}
{lang === 'es' ? 'verificado' : 'проверено'}
{/* Stamp — kept smaller, tucked at bottom-right */}
SPEI · {lang === 'es' ? '5 seg' : '5 сек'}
);
};
Object.assign(window, { Topbar, Hero });