/* Blackstock — Checkout / Onboarding flow */ const CheckoutPage = ({ onNavigate }) => { const [step, setStep] = React.useState(1); const [plan, setPlan] = React.useState('PRO'); const [billing, setBilling] = React.useState('monthly'); const [accounts, setAccounts] = React.useState(2); const [email, setEmail] = React.useState(''); const [coupon, setCoupon] = React.useState(''); const [couponApplied, setCouponApplied] = React.useState(false); // CheckoutPage está deprecado: el flujo comercial ahora se hace por // llamada (BookingModal). Si alguien aterriza aquí, redirigimos al // home y abrimos la reserva de llamada automáticamente. React.useEffect(() => { if (typeof window.bsOpenBooking === 'function') { window.bsOpenBooking(); } onNavigate && onNavigate('home'); }, []); const planMap = { BASIC: { monthly: 22.90, max: 1 }, PRO: { monthly: 149.90, max: 4 }, }; const price = (planMap[plan] || planMap.BASIC).monthly; const discount = couponApplied ? Math.round(price * 0.2 * 100) / 100 : 0; const total = Math.round((price - discount) * 100) / 100; return (
{/* Compact nav */}
● PAGO SEGURO · STRIPE
{/* Step indicator */}
{[ { n: 1, l: 'Plan' }, { n: 2, l: 'Cuenta' }, { n: 3, l: 'Pago' }]. map((s, i) =>
= s.n ? 'var(--acid)' : 'var(--bg-2)', color: step >= s.n ? '#000' : 'var(--fg-3)', border: '1px solid', borderColor: step >= s.n ? 'var(--acid)' : 'var(--line-2)', display: 'flex', alignItems: 'center', justifyContent: 'center', fontFamily: 'var(--font-mono)', fontSize: 12, fontWeight: 700 }}>{step > s.n ? '✓' : s.n}
= s.n ? 'var(--fg)' : 'var(--fg-3)', textTransform: 'uppercase' }}>{s.l}
{i < 2 &&
s.n ? 'var(--acid)' : 'var(--line)' }} />} )}
{/* Left form */}
{step === 1 && } {step === 2 && } {step === 3 && }
{/* Right summary */}
); }; const Step1Plan = ({ plan, setPlan, billing, setBilling, accounts, setAccounts, planMap }) => { const plans = [ { id: 'BASIC', tag: 'Estándar', desc: 'Todo Blackstock. Opera desde tu equipo.' }, { id: 'PRO', tag: 'Incluye Bazooka', desc: 'Todo Blackstock + worker remoto 24/7.', highlight: true }]; return (

Elige tu plan

Cambias o cancelas cuando quieras. Sin permanencia. Facturación mensual.

{/* Toggle anual eliminado: solo facturación mensual */}
{plans.map((p) => )}
); }; const Step2Account = ({ email, setEmail }) =>

Crea tu cuenta

Acceso inmediato al panel y a la academia. Recibes el welcome kit en tu email.

{[ { label: 'EMAIL', placeholder: 'tu@email.com', value: email, onChange: setEmail, type: 'email' }, { label: 'NOMBRE', placeholder: 'Tu nombre', type: 'text' }, { label: 'TELÉFONO (opcional)', placeholder: '+34 ...', type: 'tel' }]. map((f, i) =>
f.onChange && f.onChange(e.target.value)} style={{ width: '100%', height: 52, padding: '0 18px', background: 'var(--bg-1)', border: '1px solid var(--line-2)', borderRadius: 12, color: 'var(--fg)', fontSize: 15, fontFamily: 'var(--font-body)', outline: 'none' }} onFocus={(e) => e.target.style.borderColor = 'var(--acid)'} onBlur={(e) => e.target.style.borderColor = 'var(--line-2)'} />
)}
; const Step3Payment = ({ coupon, setCoupon, couponApplied, setCouponApplied }) =>

Método de pago

Pago seguro. Te cobramos hoy y se renueva mensualmente. Cancelas cuando quieras.

Acceso inmediato. Activamos el panel en cuanto se confirma el pago.
{['Tarjeta', 'PayPal', 'Bizum'].map((m, i) => )}
setCoupon(e.target.value)} placeholder="EJ. RESELLER20" style={{ flex: 1, height: 52, padding: '0 18px', background: 'var(--bg-1)', border: '1px solid var(--line-2)', borderRadius: 12, color: 'var(--fg)', fontSize: 15, fontFamily: 'var(--font-mono)', outline: 'none' }} />
; const OrderSummary = ({ plan, planMap, billing, price, discount, total, couponApplied }) =>
RESUMEN
BLACKSTOCK {plan}
Facturación mensual · hasta {planMap[plan].max} cuenta{planMap[plan].max > 1 ? 's' : ''}
{price}€
{/* Whats included */}
INCLUIDO
{[ 'Bot de mercado ilimitado', 'IA negociadora', 'Multicuenta unificada', 'Restocks automáticos', 'Academia + comunidad', 'Soporte prioritario']. map((f, i) =>
{f}
)}
Subtotal{price}€
{couponApplied &&
Descuento (20%)−{discount}€
}
TOTAL HOY {total}€
Renovación mensual · cancelas cuando quieras
🛡 Pago seguro con Stripe. Sin permanencia.
; Object.assign(window, { CheckoutPage, Step1Plan, Step2Account, Step3Payment, OrderSummary });