/* 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 => (
))}
{/* 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 */}
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} €
)}
{plan.features.map((f,i) => (
-
{f}
))}
{plan.excluded?.map((f,i) => (
-
{f}
))}
);
}
/* ============================== 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 ? (
) : (
<>
>
)}
>
) : (
)}
Sin tarjeta · 25 consultas/mes · cancelas cuando quieras
);
}
function ModalFeature({ icon, text }) {
return (
{text}
);
}
Object.assign(window, { Seguridad, Pricing, CtaAurora, Footer, LoginModal });