/* pricing.jsx — Seguridad, Pricing, FAQ, CTA Aurora, Footer, LoginModal (light theme) */ /* ============================== SEGURIDAD ============================== */ function Seguridad() { const badges = [ { t: 'RGPD UE', d: 'Cumplimiento estricto del Reglamento (UE) 2016/679.', i: 'shield' }, { t: 'Servidores en la UE', d: 'Datos almacenados exclusivamente en Frankfurt y París.', i: 'globe' }, { t: 'No entrenamos modelos', d: 'Tus expedientes nunca alimentan ningún modelo, propio ni de terceros.', i: 'lock' }, { t: 'Cifrado AES-256', d: 'En tránsito (TLS 1.3) y en reposo. Claves rotadas mensualmente.', i: 'cpu' }, ]; return (
Seguridad jurídica

Tratamos la seguridad como
obligación jurídica, no como claim.

Cada documento que entra en Mentaly está cifrado, aislado y procesado en infraestructura europea — sin excepciones.

{badges.map(b => (
{b.t}
{b.d}
))}
{/* Trust strip */}
Auditoría externa anual
Conforme a ISO/IEC 27001 y ENS nivel medio.
{['ISO 27001','ENS medio','SOC 2 Type II','CCN-CERT'].map(t => ( {t} ))}
); } /* ============================== PRICING ============================== */ function Pricing({ onLoginRequired }) { const [yearly, setYearly] = useState(false); const plans = [ { id: 'free', name: 'Free', tagline: 'Para probar Mentaly', monthly: 0, yearly: 0, cta: 'Empezar gratis', features: ['Modo General · 25 consultas/mes','Acceso a los 4 modos','5 análisis PDF/mes (≤50 págs)','Historial de 30 días'], excluded: ['PDFs de hasta 10.000 páginas','Modo conversación con seguimiento','Soporte prioritario'], }, { id: 'pro', name: 'Pro', tagline: 'Para abogados autónomos', highlight: true, monthly: 29, yearly: 23, cta: 'Probar Pro · 14 días', features: ['Los 4 modos de razonamiento','PDFs hasta 10.000 páginas','Historial ilimitado por caso','Citas verificadas BOE/CENDOJ','Modo conversación de seguimiento','Soporte por email en 24 h'], }, { id: 'despacho', name: 'Despacho', tagline: 'Hasta 10 abogados', monthly: 79, yearly: 63, cta: 'Hablar con ventas', features: ['Todo lo de Pro','Multi-usuario con permisos por rol','Plantillas y biblioteca compartida','SSO con Google Workspace','Soporte prioritario en 4 h'], }, { id: 'enterprise', name: 'Enterprise', tagline: 'A medida', monthly: null, yearly: null, cta: 'Solicitar demo', features: ['Despliegue privado en la UE','Integraciones (Sharepoint, LexNET)','Customer Success dedicado','Auditoría conjunta anual','SLA del 99,95 %'], }, ]; return (
Mejor IA jurídica, la mitad de precio.} kicker="Sin tarjeta para empezar. Sin permanencia. Cancela cuando quieras." > {/* Toggle */}
{plans.map(p => )}

Precios sin IVA · 14 días de prueba gratuita en Pro · Sin permanencia

); } function PricingCard({ plan, yearly, onLoginRequired }) { const price = plan.monthly === null ? 'a medida' : (yearly ? plan.yearly : plan.monthly); const showEuro = price !== 'a medida'; return (
{plan.highlight && (
Más elegido
)}
{plan.name}
{plan.tagline}
{showEuro && } {price} {showEuro && / mes}
{showEuro && yearly && plan.monthly > 0 && (
facturado anualmente · ahorras {(plan.monthly - plan.yearly) * 12} €
)}
); } /* ============================== CTA FINAL con AURORA ============================== */ function CtaAurora({ onLoginRequired, ctaCopy = 'antes de redactar.' }) { return (
{/* the new blob-aurora */} {/* warm overlay to soften */}
3 consultas gratis sin registro · 25/mes con cuenta

La IA que piensa
{ctaCopy}

Empieza con 3 consultas sin registro. Contínua con 25 al mes — sin tarjeta.

Volver al buscador
RGPD UE Cifrado AES-256 Sin permanencia
); } /* ============================== FOOTER ============================== */ function Footer() { const cols = [ { h: 'Producto', items: ['La app', 'Modos de IA', 'Seguridad', 'Integraciones', 'Roadmap'] }, { h: 'Empresa', items: ['Sobre Mentaly', 'Manifiesto', 'Trabaja con nosotros', 'Prensa', 'Contacto'] }, { h: 'Legal', items: ['Aviso legal', 'Privacidad · RGPD', 'Cookies', 'Términos', 'Compliance'] }, { h: 'Recursos', items: ['Blog jurídico', 'Plantillas', 'Guías de uso', 'API docs', 'Estado del servicio'] }, ]; return ( ); } /* ============================== LOGIN MODAL ============================== */ function LoginModal({ open, onClose, query, mode, googleClientId }) { const [tab, setTab] = useState('google'); const [email, setEmail] = useState(''); const [password, setPassword] = useState(''); const activeClientId = googleClientId || "525582855260-8a44ivfa6h93atld3f61ohsc8qjnroqm.apps.googleusercontent.com"; useEffect(() => { if (!open) return; const onKey = (e) => { if (e.key === 'Escape') onClose(); }; document.addEventListener('keydown', onKey); document.body.style.overflow = 'hidden'; return () => { document.removeEventListener('keydown', onKey); document.body.style.overflow = ''; }; }, [open, onClose]); useEffect(() => { const handleMessage = (e) => { if (e.data && e.data.type === 'GOOGLE_LOGIN_SUCCESS') { const email = e.data.email || ''; const name = e.data.name || ''; const dest = (window.location.protocol === 'file:' || window.location.hostname === 'localhost' || window.location.hostname === '127.0.0.1') ? `dashboard/index.html#/chat?email=${encodeURIComponent(email)}&name=${encodeURIComponent(name)}&provider=google` : `/app/#/chat?email=${encodeURIComponent(email)}&name=${encodeURIComponent(name)}&provider=google`; window.location.href = dest; } }; window.addEventListener('message', handleMessage); return () => window.removeEventListener('message', handleMessage); }, []); useEffect(() => { if (!open || !activeClientId) return; let timer; const initGoogleBtn = () => { if (window.google && window.google.accounts && window.google.accounts.id) { window.google.accounts.id.initialize({ client_id: activeClientId, callback: (response) => { if (response.credential) { try { const base64Url = response.credential.split('.')[1]; const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/'); const jsonPayload = decodeURIComponent(window.atob(base64).split('').map(function(c) { return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2); }).join('')); const payload = JSON.parse(jsonPayload); if (payload.name) { const settings = JSON.parse(localStorage.getItem('mentaly_settings_v1') || '{}'); settings.fullName = payload.name; settings.email = payload.email; settings.provider = 'google'; localStorage.setItem('mentaly_settings_v1', JSON.stringify(settings)); } } catch (e) { console.error("Error decoding JWT:", e); } const dest = (window.location.protocol === 'file:' || window.location.hostname === 'localhost' || window.location.hostname === '127.0.0.1') ? `dashboard/index.html#/chat?email=${encodeURIComponent(payload.email)}&name=${encodeURIComponent(payload.name || '')}&provider=google` : `/app/#/chat?email=${encodeURIComponent(payload.email)}&name=${encodeURIComponent(payload.name || '')}&provider=google`; window.location.href = dest; } } }); const btnContainer = document.getElementById("google-signin-btn"); if (btnContainer) { window.google.accounts.id.renderButton( btnContainer, { theme: "outline", size: "large", width: 380, text: "continue_with", shape: "rectangular" } ); } } else { timer = setTimeout(initGoogleBtn, 100); } }; initGoogleBtn(); return () => { if (timer) clearTimeout(timer); }; }, [open, activeClientId]); if (!open) return null; return (

Continúa con Mentaly

Crea tu cuenta gratis para seguir consultando.

{query && (
Tu consulta queda guardada
“{query}”
)} {/* Tabs */}
{tab === 'google' ? ( <> {activeClientId ? (
) : ( <>
)} ) : (
{ e.preventDefault(); const namePart = email.split('@')[0]; const fullName = namePart.charAt(0).toUpperCase() + namePart.slice(1); try { const settings = JSON.parse(localStorage.getItem('mentaly_settings_v1') || '{}'); settings.email = email; settings.provider = 'email'; settings.fullName = fullName; localStorage.setItem('mentaly_settings_v1', JSON.stringify(settings)); } catch (err) {} const dest = (window.location.protocol === 'file:' || window.location.hostname === 'localhost' || window.location.hostname === '127.0.0.1') ? `dashboard/index.html#/chat?email=${encodeURIComponent(email)}&name=${encodeURIComponent(fullName)}&provider=email` : `/app/#/chat?email=${encodeURIComponent(email)}&name=${encodeURIComponent(fullName)}&provider=email`; window.location.href = dest; }} className="space-y-3">

¿Ya tienes cuenta? Inicia sesión

)}
Sin tarjeta · 25 consultas/mes · cancelas cuando quieras
); } function ModalFeature({ icon, text }) { return (
  • {text}
  • ); } Object.assign(window, { Seguridad, Pricing, CtaAurora, Footer, LoginModal });