Email ou mot de passe incorrect. Veuillez réessayer.
Email invalide
Mot de passe requis
Vous avez reçu un code d'invitation ?
Rejoindre un espace duo

Votre partenaire vous a partagé un code ? Créez d'abord votre compte puis entrez le code ici.

Email invalide
✅ Un email vous a été envoyé à
Vérifiez votre boîte de réception et vos spams.
Le lien est valable 1 heure.
const inp = document.getElementById('inp-pwd'); const btn = document.getElementById('btn-show-pwd'); if(inp.type==='password'){ inp.type='text'; btn.textContent='🙈'; } else { inp.type='password'; btn.textContent='👁'; } }); // ── LOGIN ── document.getElementById('btn-login').addEventListener('click', async ()=>{ const email = document.getElementById('inp-email').value.trim(); const pwd = document.getElementById('inp-pwd').value; const alert = document.getElementById('login-alert'); let ok = true; // Validation email const errEmail = document.getElementById('err-email'); if(!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)){ document.getElementById('inp-email').classList.add('error'); errEmail.classList.add('show'); ok=false; } else { document.getElementById('inp-email').classList.remove('error'); errEmail.classList.remove('show'); } // Validation pwd const errPwd = document.getElementById('err-pwd'); if(!pwd){ document.getElementById('inp-pwd').classList.add('error'); errPwd.classList.add('show'); ok=false; } else { document.getElementById('inp-pwd').classList.remove('error'); errPwd.classList.remove('show'); } if(!ok) return; // Loading const btn = document.getElementById('btn-login'); btn.classList.add('loading'); btn.disabled=true; alert.classList.remove('show'); // Simuler Firebase Auth (en prod : firebase.auth().signInWithEmailAndPassword) setTimeout(()=>{ btn.classList.remove('loading'); btn.disabled=false; // Simuler erreur pour démo alert.classList.add('show'); // En prod : window.location.href = '/app/dashboard.html'; }, 1500); }); // Appuyer sur Entrée document.getElementById('inp-pwd').addEventListener('keydown', e=>{ if(e.key==='Enter') document.getElementById('btn-login').click(); }); // ── MOT DE PASSE OUBLIÉ ── document.getElementById('link-forgot').addEventListener('click', e=>{ e.preventDefault(); document.getElementById('login-page').style.display='none'; document.getElementById('forgot-page').style.display='block'; window.scrollTo({top:0,behavior:'smooth'}); }); document.getElementById('btn-back-login').addEventListener('click',()=>{ document.getElementById('login-page').style.display='block'; document.getElementById('forgot-page').style.display='none'; document.getElementById('forgot-success').classList.remove('show'); }); document.getElementById('btn-forgot').addEventListener('click',()=>{ const email = document.getElementById('inp-forgot-email').value.trim(); const err = document.getElementById('err-forgot-email'); if(!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)){ document.getElementById('inp-forgot-email').classList.add('error'); err.classList.add('show'); return; } document.getElementById('inp-forgot-email').classList.remove('error'); err.classList.remove('show'); const btn = document.getElementById('btn-forgot'); btn.classList.add('loading'); btn.disabled=true; setTimeout(()=>{ btn.classList.remove('loading'); btn.disabled=false; document.getElementById('forgot-email-sent').textContent = email; document.getElementById('forgot-success').classList.add('show'); btn.style.display='none'; }, 1500); }); // ── CODE INVITATION ── document.getElementById('btn-code').addEventListener('click',()=>{ const code = document.getElementById('inp-code').value.trim().toUpperCase(); const result = document.getElementById('code-result'); if(code.length < 8){ result.className='code-result err show'; result.textContent='Code invalide. Vérifiez le code envoyé par votre partenaire.'; return; } // Simuler vérification (en prod : vérifier dans Firebase) result.className='code-result ok show'; result.innerHTML='✅ Code valide ! Créez votre compte pour rejoindre cet espace.'; }); // Uppercase automatique sur le code document.getElementById('inp-code').addEventListener('input', function(){ this.value = this.value.toUpperCase(); });