// Klyvio — Auth.jsx v3 // Un seul écran de connexion — admin ou client selon les identifiants const ADMIN_EMAIL = "romain@klyvio.fr"; const ADMIN_PASSWORD = "KYakana28*"; function LoginView({ onAdminSuccess, onClientSuccess }) { const [email, setEmail] = useState(""); const [secret, setSecret] = useState(""); const [err, setErr] = useState(""); const [loading, setLoading] = useState(false); // Code client = 6 car. alphanumériques ET email != admin const isAdminEmail = email.trim().toLowerCase() === ADMIN_EMAIL; const looksLikeCode = !isAdminEmail && /^[A-Z0-9]{6}$/.test(secret.toUpperCase()); const submit = () => { setErr(""); if (!email || !secret) { setErr("Veuillez remplir tous les champs."); return; } setLoading(true); setTimeout(() => { // Tentative admin if (email.trim().toLowerCase() === ADMIN_EMAIL && secret === ADMIN_PASSWORD) { onAdminSuccess(); return; } // Tentative client (email + code 6 car.) try { const all = JSON.parse(localStorage.getItem("klyvio_audits") || "[]"); const found = all.find(a => (a.email || "").toLowerCase().trim() === email.toLowerCase().trim() && (a.id || "") === secret.toUpperCase() ); if (found) { onClientSuccess(found); return; } } catch {} setErr("Identifiants incorrects. Vérifiez votre email et votre code d'accès ou mot de passe."); setLoading(false); }, 700); }; return (
Klyvio — Audit IA

Se connecter

Accédez à votre rapport ou à l'espace administrateur.

setEmail(e.target.value)} placeholder="votre@email.fr" autoFocus />
setSecret(looksLikeCode ? e.target.value.toUpperCase() : e.target.value)} onKeyDown={e => e.key === "Enter" && submit()} placeholder="ABC123 ou ••••••••" style={looksLikeCode ? { textTransform: "uppercase", letterSpacing: "0.25em", fontFamily: "var(--mono, monospace)", fontSize: 20, textAlign: "center", } : {}} />

Clients : entrez le code à 6 caractères reçu à la fin de l'audit.
Administrateur : entrez votre mot de passe habituel.

{err && (
{err}
)}
); } // CodeReveal — affiché après génération du rapport function CodeReveal({ code, company, onContinue }) { const [copied, setCopied] = useState(false); const copyCode = () => { const done = () => { setCopied(true); setTimeout(() => setCopied(false), 2500); }; // Méthode moderne (HTTPS) if (navigator.clipboard && navigator.clipboard.writeText) { navigator.clipboard.writeText(code).then(done).catch(() => fallback()); } else { fallback(); } function fallback() { // Méthode universelle — fonctionne sans HTTPS (Claude Design, Live Server) const el = document.createElement("textarea"); el.value = code; el.style.cssText = "position:fixed;top:0;left:0;opacity:0;pointer-events:none"; document.body.appendChild(el); el.focus(); el.select(); try { document.execCommand("copy"); done(); } catch {} document.body.removeChild(el); } }; return (
Audit généré avec succès

Votre rapport est prêt.

Conservez ce code — il vous permettra de retrouver votre rapport et de modifier vos réponses à tout moment.

Votre code d'accès
{code}
Email associé :{" "} {company?.email || "non renseigné"}
); } window.LoginView = LoginView; window.CodeReveal = CodeReveal;