// pesito — Three steps + SPEI deposit animation + Trust strip + Schedule + Testimonials + FAQ + final CTA + footer const ThreeSteps = ({ lang, onSimulate }) => { const t = lang === 'es' ? { eyebrow: 'Tres pasos. Cero sorpresas.', title: 'Pides. Vemos. Llega.', sub: 'No te vamos a hacer subir 14 documentos ni hablar con un asesor. La burocracia se queda en el banco de tus papás.', steps: [ { n: '01', title: 'Solicitas', body: 'Cuéntanos quién eres, cuánto y por cuánto. Tres minutos. Tu dedo, tu teléfono, tu silencio.', time: '3 min', icon: 'user' }, { n: '02', title: 'Revisamos', body: 'Nuestros modelos miran tu historial — y un humano, si hace falta. Te decimos que sí o que no, y por qué.', time: '< 2 min', icon: 'shield' }, { n: '03', title: 'Recibes', body: 'Si sí, los pesos llegan a tu cuenta por SPEI antes de que apagues la pantalla.', time: '5 seg', icon: 'spei' }, ], cta: 'Ver cómo se ve el depósito', } : { eyebrow: 'Три шага. Ноль сюрпризов.', title: 'Просите. Видим. Приходит.', sub: 'Никаких 14 документов и звонков консультанту. Бюрократия — в банке ваших родителей.', steps: [ { n: '01', title: 'Заявка', body: 'Расскажите кто вы, сколько и насколько. Три минуты. Ваш палец, ваш телефон, ваша тишина.', time: '3 мин', icon: 'user' }, { n: '02', title: 'Проверка', body: 'Наши модели смотрят историю — и человек, если надо. Говорим да или нет, и почему.', time: '< 2 мин', icon: 'shield' }, { n: '03', title: 'Получаете', body: 'Если да, песо приходят на счёт через SPEI до того, как вы погасите экран.', time: '5 сек', icon: 'spei' }, ], cta: 'Посмотреть как приходит', }; return (
{t.eyebrow}

{t.title}

{t.sub}

{t.steps.map((s, i) => (
{s.n}
{s.time}
{s.title}
{s.body}
))}
); }; // SPEI deposit modal sheet — 5-second animation const SPEISheet = ({ lang, open, onClose, principal }) => { const [phase, setPhase] = React.useState(0); // 0:requesting,1:approved,2:routing,3:deposited React.useEffect(() => { if (!open) { setPhase(0); return; } const timers = [ setTimeout(() => setPhase(1), 1100), setTimeout(() => setPhase(2), 2300), setTimeout(() => setPhase(3), 3700), ]; return () => timers.forEach(clearTimeout); }, [open]); if (!open) return null; const t = lang === 'es' ? { title: 'Depósito en vivo', sub: 'Así se ve cuando tu préstamo llega. En serio.', states: [ 'Solicitud enviada a CNBV/UIF', '✓ Aprobado por modelo de riesgo', 'Ruteando por SPEI · Banxico', '✓ Depositado en tu cuenta', ], label: 'Importe', bank: 'BBVA México · ****7841', ref: 'REF SPEI 2604RDM', close: 'Cerrar', } : { title: 'Перевод в реальном времени', sub: 'Вот как выглядит, когда заём приходит. Серьёзно.', states: [ 'Запрос отправлен в CNBV/UIF', '✓ Одобрено моделью риска', 'Маршрут SPEI · Banxico', '✓ Зачислено на счёт', ], label: 'Сумма', bank: 'BBVA México · ****7841', ref: 'REF SPEI 2604RDM', close: 'Закрыть', }; return (
e.stopPropagation()} style={{ background: 'var(--surface)', borderRadius: '24px 24px 0 0', width: '100%', maxWidth: 520, padding: 28, paddingBottom: 36, animation: 'sheetIn 360ms cubic-bezier(0.2, 0.8, 0.2, 1)', boxShadow: '0 -10px 40px rgba(63,38,24,0.2)', }}>
{t.title}
{t.sub}
{/* Big amount card */}
{t.label} {t.ref}
= 3 ? 'var(--sun)' : '#fff', transition: 'color 600ms ease' }}> $ {principal.toLocaleString('en-US')} MXN
{t.bank}
{/* States */}
{t.states.map((s, i) => (
= i ? 1 : 0.3, transition: 'opacity 320ms ease', }}>
i ? 'var(--green)' : (phase === i ? 'var(--brand)' : 'var(--surface-3)'), display: 'flex', alignItems: 'center', justifyContent: 'center', color: '#fff', flexShrink: 0, transition: 'background 220ms ease', }}> {phase > i ? : (phase === i ?
:
)}
= i ? 'var(--ink)' : 'var(--ink-soft)' }}> {s}
{phase === i && i < 3 &&
...
}
))}
{phase === 3 && (
{lang === 'es' ? 'Los pesos están en tu cuenta. De verdad.' : 'Песо у вас на счёте. Серьёзно.'}
)}
); }; // Trust strip const TrustStrip = ({ lang }) => { const t = lang === 'es' ? { eyebrow: 'Regulado, supervisado, vigilado.', title: 'No somos los primos del banco. Estamos en la lista.', chips: [ ['CNBV', 'Comisión Nacional Bancaria y de Valores nos audita.'], ['CONDUSEF', 'Si te queda duda, ahí pueden quejarse de nosotros.'], ['SPEI', 'Banxico mueve los pesos. Nosotros solo decimos cuántos.'], ['UIF', 'Sí, reportamos a la Unidad de Inteligencia Financiera.'], ['LFPDPPP', 'Tus datos son tuyos. Aviso de privacidad legible.'], ], note: 'SOFOM ENR Bonum, S.A. de C.V., entidad regulada por CNBV y supervisada por CONDUSEF, registro CONDUSEF #pendiente. Consulta tu historial en Buró de Crédito.', } : { eyebrow: 'Регулируется, проверяется, наблюдается.', title: 'Мы не кузены банка. Мы в реестре.', chips: [ ['CNBV', 'Национальная банковская комиссия аудирует нас.'], ['CONDUSEF', 'Если что — туда жалуются на нас.'], ['SPEI', 'Banxico двигает песо. Мы лишь говорим сколько.'], ['UIF', 'Да, отчитываемся в финразведку.'], ['LFPDPPP', 'Ваши данные — ваши. Уведомление по-человечески.'], ], note: 'SOFOM ENR Bonum, S.A. de C.V., регулируется CNBV и под надзором CONDUSEF, регистрация #ожидание. Запрос в Бюро Кредитов.', }; return (
{t.eyebrow}

{t.title}

{t.chips.map(([k, v], i) => (
{k}
{v}
))}
{t.note}
); }; // Payment schedule visual const Schedule = ({ lang, term, quincenal }) => { const t = lang === 'es' ? { eyebrow: 'Cronograma. Sin sorpresas.', title: ['Mira los pagos', 'antes de firmar.'], sub: 'Cada barrita es una quincena. La altura es lo que pagas. La línea de abajo es lo que ya pagaste.', paid: 'pagado', pending: 'por pagar', payment: 'pago', } : { eyebrow: 'График. Без сюрпризов.', title: ['Смотрите платежи', 'до подписи.'], sub: 'Каждый столбик — двухнедельный период. Высота — сколько платите. Линия снизу — сколько уже заплачено.', paid: 'оплачено', pending: 'к оплате', payment: 'платёж', }; // Generate fake schedule with first 2 paid, rest pending const today = new Date(); const items = Array.from({ length: term }, (_, i) => ({ idx: i + 1, paid: i < 2, date: new Date(today.getTime() + i * 14 * 24 * 3600 * 1000), amount: quincenal, })); const months = ['Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic']; const monthsRu = ['Янв', 'Фев', 'Мар', 'Апр', 'Май', 'Июн', 'Июл', 'Авг', 'Сен', 'Окт', 'Ноя', 'Дек']; return (
{t.eyebrow}

{t.title[0]}
{t.title[1]}

{t.sub}

{items.map((it) => (
${(it.amount).toLocaleString('en-US')}
{it.paid &&
}
{(lang === 'es' ? months : monthsRu)[it.date.getMonth()]} {it.date.getDate()}
#{String(it.idx).padStart(2, '0')}
))}
{t.paid} {t.pending} 2/{term} {t.paid}
); }; const Testimonials = ({ lang }) => { const t = lang === 'es' ? { eyebrow: 'Nos lo dicen ellos.', title: 'Verdaderos pesos, verdaderas personas.', items: [ { who: 'Daniela R., 34', city: 'CDMX', stars: 5, text: '"Pagué la inscripción del Felipe sin pedírselo a mi mamá. Y sin tener que mentirle a nadie sobre el CAT."' }, { who: 'Mauricio T., 41', city: 'Guadalajara', stars: 5, text: '"Lo pedí a las 11:47 de la noche desde el camión. A las 11:48 ya tenía el dinero. Pensé que era estafa hasta que fui a la cajera."' }, { who: 'Karla V., 28', city: 'Monterrey', stars: 5, text: '"Lo pagué tres semanas antes y me cobraron menos. La primera vez que un préstamo me sale más barato por portarme bien."' }, { who: 'Iván P., 52', city: 'Puebla', stars: 4, text: '"Llamé al teléfono. Contestó una persona. Me explicó las cuentas. No volvió a llamar para venderme nada. Increíble."' }, ], } : { eyebrow: 'Они нам говорят.', title: 'Реальные песо, реальные люди.', items: [ { who: 'Daniela R., 34', city: 'CDMX', stars: 5, text: '"Заплатила за школу Фелипе, не прося маму. И не пришлось никому врать про CAT."' }, { who: 'Mauricio T., 41', city: 'Guadalajara', stars: 5, text: '"Попросил в 23:47 из автобуса. В 23:48 деньги были на счёте. Думал — мошенники, пока не дошёл до банкомата."' }, { who: 'Karla V., 28', city: 'Monterrey', stars: 5, text: '"Заплатила на 3 недели раньше — стало дешевле. Впервые заём дешевле за хорошее поведение."' }, { who: 'Iván P., 52', city: 'Puebla', stars: 4, text: '"Позвонил. Ответил человек. Объяснил цифры. Не перезванивал что-то впаривать. Невероятно."' }, ], }; return (
{t.eyebrow}

{t.title}

{t.items.map((item, i) => (
{Array.from({ length: 5 }, (_, k) => ( ))}
{item.text}
{item.who} {item.city}
))}
); }; const FAQ = ({ lang }) => { const t = lang === 'es' ? { eyebrow: 'Las preguntas que de verdad nos hacen.', title: 'Sin asterisco. Sin "consulte términos".', items: [ ['¿Cuánto puedo pedir la primera vez?', 'Empiezas chiquito. Hasta $5,000 MXN si es tu primera vez con nosotros. Si pagas a tiempo, en la siguiente subimos hasta $100,000. Sin trámite, sin pedir nada extra.'], ['¿En cuánto tiempo me llega el dinero?', 'Si tu solicitud se aprueba antes de las 6 pm, llega ese mismo día por SPEI. Después de las 6 pm, cae al siguiente día hábil. Banxico es quien decide la velocidad final, no nosotros.'], ['¿Qué documentos necesito?', 'Tu INE, un comprobante de domicilio (no más viejo de 3 meses), tu CLABE bancaria. Y un selfie con la INE. Eso es todo. Si te pedimos otra cosa, dudaríamos hasta de nosotros mismos.'], ['¿Y si pago antes? ¿Me cobran de más?', 'No. Pagas el principal, los intereses devengados hasta el día que pagaste, y ya. Cero penalización por prepago — está en el contrato, en letra grande, en la cláusula 7.'], ['¿Qué pasa si me atraso?', 'Te llamamos. No te gritamos, no te ponemos a tu vecino. Tienes 5 días de gracia, después se devenga moratorio del 0.15% diario sobre el saldo vencido. Y sí, lo reportamos al Buró.'], ['¿Consultan mi Buró de Crédito?', 'Sí. Es obligatorio por ley para evaluar tu capacidad de pago. Si no quieres que lo consultemos, no podemos prestarte. Es así de claro.'], ], } : { eyebrow: 'Вопросы, которые нам реально задают.', title: 'Без звёздочек. Без "см. условия".', items: [ ['Сколько можно взять в первый раз?', 'Начинаете с малого. До $5,000 MXN при первой заявке. Заплатите вовремя — в следующий раз до $100,000. Без бумажек.'], ['Когда придут деньги?', 'Если одобрено до 18:00 — в тот же день через SPEI. После 18:00 — на следующий рабочий день. Скорость определяет Banxico, не мы.'], ['Какие документы нужны?', 'INE, справка адреса (не старше 3 мес), CLABE банка. И селфи с INE. Всё. Если просим больше — сомневаемся в себе.'], ['А если заплачу раньше?', 'Платите основной долг, проценты до даты оплаты, и всё. Ноль штрафов за досрочное погашение — крупным шрифтом в пункте 7 договора.'], ['Что если просрочу?', 'Звоним. Не кричим, не обзваниваем соседей. 5 дней льготных, потом 0.15% в день на просроченный остаток. И да, передаём в Бюро.'], ['Запрашиваете Бюро?', 'Да. Закон обязывает оценить платёжеспособность. Не хотите — не сможем выдать. Прямо говорим.'], ], }; const [open, setOpen] = React.useState(0); return (
{t.eyebrow}

{t.title}

{t.items.map(([q, a], i) => (
{a}
))}
); }; const FinalCTA = ({ lang, onApply }) => { const t = lang === 'es' ? { title: ['Listo.', 'Pide tu préstamo.'], sub: 'Sin asteriscos. Sin letra chica. Sin que te llamemos cinco veces para venderte un seguro.', cta: 'Empezar solicitud', note: 'Tres minutos. Una sola pantalla. Tu silencio respetado.', } : { title: ['Готово.', 'Берите заём.'], sub: 'Без звёздочек. Без мелкого шрифта. Без пяти звонков с предложением страховки.', cta: 'Начать заявку', note: 'Три минуты. Один экран. Ваша тишина — ваша.', }; return (

{t.title[0]}
{t.title[1]}

{t.sub}

{t.note}
); }; const Footer = ({ lang }) => { const t = lang === 'es' ? { legal: 'SOFOM ENR Bonum, S.A. de C.V., entidad regulada por la CNBV y supervisada por la CONDUSEF, registro CONDUSEF #pendiente. Operamos bajo la Ley General de Organizaciones y Actividades Auxiliares del Crédito.', cat: 'CAT informativo 518% sin IVA · cálculo sobre $5,000 MXN a 8 quincenas · vigente al 01/05/2026', cols: [ ['Producto', ['Calculadora', 'Cómo funciona', 'Tarifas', 'Solicitar']], ['Legal', ['Aviso de privacidad', 'Términos del contrato', 'CAT y comisiones', 'Buró de Crédito']], ['Empresa', ['Quiénes somos', 'Atención a clientes', 'Reporta una queja', 'Trabaja en pesito']], ], rights: '© 2026 pesito · Hecho con respeto en Ciudad de México.', } : { legal: 'SOFOM ENR Bonum, S.A. de C.V., регулируется CNBV и под надзором CONDUSEF, рег. #ожидание. Работаем по Общему закону об организациях кредита.', cat: 'CAT информативный 518% без НДС · расчёт на $5,000 MXN, 8 двухнед. · действует с 01/05/2026', cols: [ ['Продукт', ['Калькулятор', 'Как работает', 'Тарифы', 'Заявка']], ['Юридическое', ['Уведомление о приватности', 'Условия договора', 'CAT и комиссии', 'Бюро кредитов']], ['Компания', ['О нас', 'Поддержка', 'Жалоба', 'Работа в pesito']], ], rights: '© 2026 pesito · Сделано с уважением в Мехико.', }; return ( ); }; Object.assign(window, { ThreeSteps, SPEISheet, TrustStrip, Schedule, Testimonials, FAQ, FinalCTA, Footer });