/* ===================================================================== result.jsx — Pantalla de resultado + modales (Calendly, Stripe, email, compartir, contacto). Todos los "backends" están simulados de forma creíble y marcados con // MOCK para el handoff al dev. ===================================================================== */ const RC = window.Cotizador; /* --- Modal de contacto (escalas grandes que abren "Contactar equipo") --- */ function ContactModal({ open, onClose }) { const [sent, setSent] = useStateUI(false); useEffectUI(() => { if (open) setSent(false); }, [open]); return (
{!sent ? (

Hablemos de tu proyecto a medida

Para este tamaño preferimos cotizar contigo en una llamada. Déjanos tu correo y un especialista te contacta en menos de 24 horas.

) : (

Recibido

Te escribiremos por correo muy pronto.

)}
); } /* --- Modal Calendly (mock) --- */ function CalendlyModal({ open, onClose }) { const [day, setDay] = useStateUI(null); const [slot, setSlot] = useStateUI(null); const [done, setDone] = useStateUI(false); useEffectUI(() => { if (open) { setDay(null); setSlot(null); setDone(false); } }, [open]); const days = []; const base = new Date(); const dow = ["dom", "lun", "mar", "mié", "jue", "vie", "sáb"]; const mon = ["ene", "feb", "mar", "abr", "may", "jun", "jul", "ago", "sep", "oct", "nov", "dic"]; let added = 0, cursor = 1; while (added < 8) { const d = new Date(base.getTime() + cursor * 86400000); if (d.getDay() !== 0 && d.getDay() !== 6) { days.push(d); added++; } cursor++; } const slots = ["9:00", "10:30", "12:00", "14:00", "15:30", "17:00"]; return (

Agenda una llamada · 30 min

Con un especialista de Sell-U · zona horaria local
{!done ? (
Elige un día
{days.map((d, i) => { const sel = day === i; return ( ); })}
{day !== null && (
Elige un horario
{slots.map(s => { const sel = slot === s; return ( ); })}
)}
{/* MOCK: aquí se incrustaría el iframe real de Calendly */}Demo · integración Calendly simulada
) : (

Llamada agendada

{dow[days[day].getDay()]} {days[day].getDate()} de {mon[days[day].getMonth()]} · {slot} h.
Te enviamos la invitación por correo.

)}
); } /* --- Modal Stripe (mock checkout) --- */ function StripeModal({ open, onClose, deposit }) { const [done, setDone] = useStateUI(false); useEffectUI(() => { if (open) setDone(false); }, [open]); return (

Bloquear tu cupo

{!done ? (
Anticipo (50%)
Se descuenta del total final
{RC.fmtUSD(deposit)} USD
{/* MOCK: redirección real a Stripe Checkout */}Pago seguro · demo simulada
) : (

Cupo reservado

Recibimos tu anticipo de {RC.fmtUSD(deposit)} USD. Arrancamos tu proyecto y te escribimos por correo.

)}
); } /* --- Modal de email --- */ function EmailModal({ open, onClose }) { const [sent, setSent] = useStateUI(false); const [email, setEmail] = useStateUI(""); useEffectUI(() => { if (open) { setSent(false); setEmail(""); } }, [open]); const valid = /.+@.+\..+/.test(email); return (
{!sent ? (

Enviarte esta cotización

Te mandamos el desglose completo y el enlace para reabrirla cuando quieras.

setEmail(e.target.value)} placeholder="tu@correo.com" className="cotz-input" style={{ width: "100%", marginTop: 16 }} />
) : (

Enviada

Revisa {email} en unos minutos.

)}
); } Object.assign(window, { ContactModal, CalendlyModal, StripeModal, EmailModal });