// portal-app.jsx — Main app: Login, navigation, Home, Perfil, Operator mode const { useState, useMemo } = React; // ── Lookup helpers ───────────────────────────────────────────────────────────── function findPatient(query) { const q = query.trim().toLowerCase(); return (window.PATIENTS || []).find(p => p.dni.replace(/-/g,'').includes(q.replace(/-/g,'')) || p.whatsapp.replace(/[^0-9]/g,'').includes(q.replace(/[^0-9]/g,'')) || p.nombre.toLowerCase().includes(q) ); } // ── LoginScreen ─────────────────────────────────────────────────────────────── function LoginScreen({ onLogin, onOperatorMode }) { const C = window.C; const [query, setQuery] = useState(''); const [error, setError] = useState(''); const [loading, setLoading] = useState(false); const handleSearch = () => { if (!query.trim()) return; setLoading(true); setError(''); setTimeout(() => { const patient = findPatient(query); setLoading(false); if (patient) { onLogin(patient); } else { setError('No encontramos ningún socio con ese DNI o número. ¿Estás inscrito en Club Santos?'); } }, 600); }; return (