{"id":3904,"date":"2026-05-22T23:10:28","date_gmt":"2026-05-22T22:10:28","guid":{"rendered":"https:\/\/pappaye.be\/?page_id=3904"},"modified":"2026-10-15T10:17:22","modified_gmt":"2026-10-15T09:17:22","slug":"connexion","status":"publish","type":"page","link":"https:\/\/pappaye.be\/en\/connexion\/","title":{"rendered":"connexion"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"3904\" class=\"elementor elementor-3904\">\n\t\t\t\t<div class=\"elementor-element elementor-element-815d386 e-flex e-con-boxed e-con e-parent\" data-id=\"815d386\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7402cb7 elementor-widget elementor-widget-html\" data-id=\"7402cb7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!-- ============================================================\r\n     PAPPAYE \u2014 PAGE DE CONNEXION ETUDIANT\r\n     A coller dans une page HTML WordPress \/ Elementor\r\n     Firebase Auth uniquement: email + mot de passe\r\n     ============================================================ -->\r\n\r\n<style>\r\n  #ppe-login * { box-sizing: border-box; margin: 0; padding: 0; }\r\n  #ppe-login {\r\n    font-family: 'Roboto', sans-serif;\r\n    max-width: 680px;\r\n    margin: 0 auto;\r\n    padding: 8px;\r\n    color: #374151;\r\n  }\r\n  #ppe-login .card {\r\n    background: #fff;\r\n    border-radius: 20px;\r\n    overflow: hidden;\r\n    box-shadow: 0 8px 48px rgba(15,23,42,.12), 0 1px 4px rgba(0,0,0,.06);\r\n  }\r\n  #ppe-login .head {\r\n    background: linear-gradient(145deg, #ff7a18 0%, #54B435 100%);\r\n    padding: 44px 36px 36px;\r\n    text-align: center;\r\n    color: #fff;\r\n  }\r\n  #ppe-login .head h2 {pou\r\n    font-family: 'Inter', sans-serif;\r\n    font-size: clamp(1.5rem, 4vw, 2rem);\r\n    margin-bottom: 8px;\r\n  }\r\n  #ppe-login .head p { color: rgba(255,255,255,.92); }\r\n  #ppe-login .body { padding: 40px; }\r\n  @media (max-width: 540px) { #ppe-login .body { padding: 24px; } }\r\n  #ppe-login .section-label {\r\n    font-family: 'Inter', sans-serif;\r\n    font-size: .72rem;\r\n    font-weight: 700;\r\n    text-transform: uppercase;\r\n    letter-spacing: 1.2px;\r\n    color: #ff7a18;\r\n    margin-bottom: 16px;\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 8px;\r\n  }\r\n  #ppe-login .section-label::after { content: ''; flex: 1; height: 1px; background: #ffe4c7; }\r\n  #ppe-login .field { margin-bottom: 18px; }\r\n  #ppe-login label {\r\n    display: block;\r\n    font-size: .875rem;\r\n    font-weight: 600;\r\n    color: #111827;\r\n    margin-bottom: 8px;\r\n  }\r\n  #ppe-login .req { color: #ef4444; }\r\n  #ppe-login .hint { color: #9ca3af; font-weight: 400; font-size: .78rem; }\r\n  #ppe-login .inp {\r\n    width: 100%;\r\n    height: 50px;\r\n    padding: 0 16px;\r\n    border: 1.5px solid #e5e7eb;\r\n    border-radius: 10px;\r\n    background: #f9fafb;\r\n    outline: none;\r\n    transition: .18s;\r\n    font-size: .95rem;\r\n  }\r\n  #ppe-login .inp:focus {\r\n    background: #fff;\r\n    border-color: #ff7a18;\r\n    box-shadow: 0 0 0 3px rgba(255,122,24,.18);\r\n  }\r\n  #ppe-login .inp.err {\r\n    border-color: #ef4444;\r\n    box-shadow: 0 0 0 3px rgba(239,68,68,.10);\r\n    background: #fff;\r\n  }\r\n  #ppe-login .ferr { display: none; margin-top: 6px; font-size: .78rem; color: #ef4444; }\r\n  #ppe-login .ferr.show { display: block; }\r\n  #ppe-login .password-box {\r\n    background: #f8fafc;\r\n    border: 1px solid #e5e7eb;\r\n    border-radius: 14px;\r\n    padding: 16px;\r\n  }\r\n  #ppe-login .divider { border: none; border-top: 1px solid #f3f4f6; margin: 30px 0 24px; }\r\n  #ppe-login .btn-submit {\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    gap: 10px;\r\n    width: 100%;\r\n    height: 56px;\r\n    border: none;\r\n    border-radius: 14px;\r\n    background: #cbd5e1;\r\n    color: #fff;\r\n    font-family: 'Inter', sans-serif;\r\n    font-size: 1rem;\r\n    font-weight: 700;\r\n    letter-spacing: .5px;\r\n    text-transform: uppercase;\r\n    cursor: not-allowed;\r\n    transition: .2s;\r\n  }\r\n  #ppe-login .btn-submit.ready {\r\n    cursor: pointer;\r\n    background: linear-gradient(145deg, #ff7a18, #54B435);\r\n    box-shadow: 0 8px 28px rgba(255,122,24,.22);\r\n  }\r\n  #ppe-login .btn-submit.ready:hover:not(:disabled) { transform: translateY(-2px); opacity: .96; }\r\n  #ppe-login .spinner {\r\n    display: none;\r\n    width: 20px;\r\n    height: 20px;\r\n    border: 2.5px solid rgba(255,255,255,.3);\r\n    border-top-color: #fff;\r\n    border-radius: 50%;\r\n    animation: ppeSpin .7s linear infinite;\r\n  }\r\n  @keyframes ppeSpin { to { transform: rotate(360deg); } }\r\n  #ppe-login .alert {\r\n    display: none;\r\n    margin-top: 18px;\r\n    border-radius: 12px;\r\n    padding: 18px 20px;\r\n    font-size: .9rem;\r\n    line-height: 1.65;\r\n  }\r\n  #ppe-login .alert.show { display: block; }\r\n  #ppe-login .alert-ok { background: #f0fdf4; border: 1.5px solid #86efac; color: #166534; }\r\n  #ppe-login .alert-ko { background: #fff5f5; border: 1.5px solid #fca5a5; color: #7f1d1d; }\r\n  #ppe-login .alert-head { display: flex; align-items: center; gap: 10px; font-family: 'Inter', sans-serif; font-weight: 700; margin-bottom: 6px; }\r\n  #ppe-login .links {\r\n    display: flex;\r\n    justify-content: space-between;\r\n    gap: 12px;\r\n    margin-top: 14px;\r\n    font-size: .88rem;\r\n    flex-wrap: wrap;\r\n  }\r\n  #ppe-login .links a {\r\n    color: #ff7a18;\r\n    text-decoration: none;\r\n    font-weight: 600;\r\n  }\r\n  #ppe-login .links a:hover { text-decoration: underline; }\r\n  #ppe-login .note {\r\n    display: flex;\r\n    gap: 10px;\r\n    background: #fffaf5;\r\n    border-left: 3px solid #ff7a18;\r\n    border-radius: 0 8px 8px 0;\r\n    padding: 14px 16px;\r\n    font-size: .84rem;\r\n    color: #6b7280;\r\n    margin-top: 18px;\r\n  }\r\n<\/style>\r\n\r\n<div id=\"ppe-login\">\r\n  <div class=\"card\">\r\n    <div class=\"head\">\r\n      <h2>Se connecter<\/h2>\r\n      <p>Acc\u00e8de \u00e0 ton compte \u00e9tudiant avec Firebase Auth.<\/p>\r\n    <\/div>\r\n\r\n    <div class=\"body\">\r\n      <form id=\"ppe-login-form\" novalidate>\r\n        <div class=\"section-label\">Tes identifiants<\/div>\r\n\r\n        <div class=\"field\">\r\n          <label for=\"ppe-login-email\">Email \u00e9tudiant <span class=\"req\">*<\/span> <span class=\"hint\">@student.uclouvain.be \/ @etudiant.uclouvain.be<\/span><\/label>\r\n          <input type=\"email\" id=\"ppe-login-email\" class=\"inp\" placeholder=\"prenom.nom@student.uclouvain.be\" autocomplete=\"email\" required>\r\n          <span class=\"ferr\" id=\"ppe-login-email-err\">Utilise ton email \u00e9tudiant UCL.<\/span>\r\n        <\/div>\r\n\r\n        <div class=\"password-box\">\r\n          <div class=\"field\" style=\"margin-bottom:0;\">\r\n            <label for=\"ppe-login-pass\">Mot de passe <span class=\"req\">*<\/span><\/label>\r\n            <input type=\"password\" id=\"ppe-login-pass\" class=\"inp\" placeholder=\"Ton mot de passe\" autocomplete=\"current-password\" required>\r\n            <span class=\"ferr\" id=\"ppe-login-pass-err\">Le mot de passe est requis.<\/span>\r\n          <\/div>\r\n        <\/div>\r\n\r\n        <div class=\"links\">\r\n          <a href=\"\/createaccount\/\" id=\"ppe-create-link\">Cr\u00e9er mon compte<\/a>\r\n          <a href=\"#\" id=\"ppe-forgot-link\">Mot de passe oubli\u00e9 ?<\/a>\r\n        <\/div>\r\n\r\n        <div id=\"ppe-forgot-section\" style=\"display:none; margin-top:14px; background:#fffaf5; border:1.5px solid #fdba74; border-radius:12px; padding:16px 18px;\">\r\n          <div style=\"font-size:.85rem; font-weight:600; color:#9a3412; margin-bottom:10px;\">R\u00e9initialiser le mot de passe<\/div>\r\n          <div class=\"field\" style=\"margin-bottom:10px;\">\r\n            <input type=\"email\" id=\"ppe-reset-email\" class=\"inp\" placeholder=\"prenom.nom@student.uclouvain.be\" autocomplete=\"email\">\r\n            <span class=\"ferr\" id=\"ppe-reset-email-err\">Saisis ton email \u00e9tudiant.<\/span>\r\n          <\/div>\r\n          <button type=\"button\" id=\"ppe-reset-btn\" style=\"height:42px; padding:0 20px; border:none; border-radius:10px; background:linear-gradient(145deg,#ff7a18,#54B435); color:#fff; font-family:'Inter',sans-serif; font-size:.88rem; font-weight:700; cursor:pointer; transition:.2s;\">Envoyer le lien<\/button>\r\n          <div class=\"alert alert-ok\" id=\"ppe-reset-ok\" role=\"alert\" style=\"margin-top:12px;\">\r\n            <div class=\"alert-head\" style=\"color:#166534;\">\r\n              <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#166534\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M22 11.08V12a10 10 0 1 1-5.93-9.14\"\/><polyline points=\"22 4 12 14.01 9 11.01\"\/><\/svg>\r\n              Email envoy\u00e9\r\n            <\/div>\r\n            <div id=\"ppe-reset-ok-body\"><\/div>\r\n          <\/div>\r\n          <div class=\"alert alert-ko\" id=\"ppe-reset-ko\" role=\"alert\" style=\"margin-top:12px;\">\r\n            <div class=\"alert-head\"><svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#b91c1c\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"\/><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"\/><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"\/><\/svg>Erreur<\/div>\r\n            <div id=\"ppe-reset-ko-body\"><\/div>\r\n          <\/div>\r\n        <\/div>\r\n\r\n        <div class=\"note\">\r\n          <span>Apr\u00e8s une connexion r\u00e9ussie, tu seras envoy\u00e9 vers la page de compl\u00e9tion du profil \u00e9tudiant.<\/span>\r\n        <\/div>\r\n\r\n        <hr class=\"divider\">\r\n\r\n        <button type=\"submit\" class=\"btn-submit\" id=\"ppe-login-btn\" disabled>\r\n          <div class=\"spinner\" id=\"ppe-login-spinner\"><\/div>\r\n          <svg id=\"ppe-login-btn-ico\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"white\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n            <path d=\"M15 3h4a2 2 0 0 1 2 2v4\"><\/path>\r\n            <path d=\"M10 14L21 3\"><\/path>\r\n            <path d=\"M21 15v4a2 2 0 0 1-2 2h-4\"><\/path>\r\n            <path d=\"M4 14v4a2 2 0 0 0 2 2h4\"><\/path>\r\n          <\/svg>\r\n          <span id=\"ppe-login-btn-label\">Se connecter<\/span>\r\n        <\/button>\r\n\r\n        <div class=\"alert alert-ok\" id=\"ppe-login-ok\" role=\"alert\">\r\n          <div class=\"alert-head\">\r\n            <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#166534\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n              <path d=\"M22 11.08V12a10 10 0 1 1-5.93-9.14\"><\/path>\r\n              <polyline points=\"22 4 12 14.01 9 11.01\"><\/polyline>\r\n            <\/svg>\r\n            Connexion r\u00e9ussie\r\n          <\/div>\r\n          <div id=\"ppe-login-ok-body\"><\/div>\r\n        <\/div>\r\n\r\n        <div class=\"alert alert-ko\" id=\"ppe-login-ko\" role=\"alert\">\r\n          <div class=\"alert-head\">\r\n            <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#b91c1c\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n              <circle cx=\"12\" cy=\"12\" r=\"10\"><\/circle>\r\n              <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"><\/line>\r\n              <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"><\/line>\r\n            <\/svg>\r\n            Une erreur est survenue\r\n          <\/div>\r\n          <div id=\"ppe-login-ko-body\"><\/div>\r\n        <\/div>\r\n      <\/form>\r\n    <\/div>\r\n  <\/div>\r\n<\/div>\r\n\r\n<script type=\"module\">\r\n  import { initializeApp } from 'https:\/\/www.gstatic.com\/firebasejs\/10.12.5\/firebase-app.js';\r\n  import { getAuth, signInWithEmailAndPassword, sendPasswordResetEmail, sendEmailVerification } from 'https:\/\/www.gstatic.com\/firebasejs\/10.12.5\/firebase-auth.js';\r\n\r\n  const firebaseConfig = {\r\n    apiKey: 'AIzaSyDq-Tj0upfcyD2l8ta0cL-3J75zoNGqE-I',\r\n    authDomain: 'pappaye-e6ff0.firebaseapp.com',\r\n    projectId: 'pappaye-e6ff0',\r\n    storageBucket: 'pappaye-e6ff0.firebasestorage.app',\r\n    messagingSenderId: '707692637016',\r\n    appId: '1:707692637016:web:a9cc3dbecb8ffbb047d32d',\r\n    measurementId: 'G-06XSGEGF81'\r\n  };\r\n\r\n  initializeApp(firebaseConfig);\r\n  const auth = getAuth();\r\n\r\n  const MY_PROFILE_URL = '\/myaccount\/';\r\n  \/\/ Permalien WordPress de la page de creation de compte (etape 1).\r\n  const CREATE_ACCOUNT_URL = '\/createaccount\/';\r\n\r\n  document.getElementById('ppe-create-link').setAttribute('href', CREATE_ACCOUNT_URL);\r\n\r\n  const form = document.getElementById('ppe-login-form');\r\n  const email = document.getElementById('ppe-login-email');\r\n  const pass = document.getElementById('ppe-login-pass');\r\n  const btn = document.getElementById('ppe-login-btn');\r\n  const btnLabel = document.getElementById('ppe-login-btn-label');\r\n  const btnIco = document.getElementById('ppe-login-btn-ico');\r\n  const spinner = document.getElementById('ppe-login-spinner');\r\n  const okBox = document.getElementById('ppe-login-ok');\r\n  const okBody = document.getElementById('ppe-login-ok-body');\r\n  const koBox = document.getElementById('ppe-login-ko');\r\n  const koBody = document.getElementById('ppe-login-ko-body');\r\n\r\n  const errorMap = {\r\n    'auth\/invalid-email': 'Email invalide.',\r\n    'auth\/user-disabled': 'Ce compte a \u00e9t\u00e9 d\u00e9sactiv\u00e9.',\r\n    'auth\/user-not-found': 'Aucun compte trouv\u00e9 avec cet email.',\r\n    'auth\/wrong-password': 'Mot de passe incorrect.',\r\n    'auth\/invalid-credential': 'Email ou mot de passe incorrect.',\r\n    'auth\/network-request-failed': 'Probl\u00e8me r\u00e9seau, r\u00e9essaie.'\r\n  };\r\n\r\n  function isUclStudentEmail(value) {\r\n    if (!value) return false;\r\n    if (!\/^[^\\s@]+@[^\\s@]+\\.[^\\s@]{2,}$\/.test(value)) return false;\r\n    const domain = value.split('@')[1].toLowerCase();\r\n    const allowed = ['student.uclouvain.be', 'etudiant.uclouvain.be', 'student.ucl.be', 'etudiant.ucl.be', 'student.vinci.be', 'student.ephec.be', 'student.helha.be'];\r\n    return allowed.some((item) => domain === item || domain.endsWith('.' + item));\r\n  }\r\n\r\n  function setError(el, id, on, message) {\r\n    const box = document.getElementById(id);\r\n    el.classList.toggle('err', on);\r\n    box.textContent = on ? message : '';\r\n    box.classList.toggle('show', on);\r\n  }\r\n\r\n  function isReady() {\r\n    return isUclStudentEmail(email.value.trim()) && pass.value.length > 0;\r\n  }\r\n\r\n  function refreshButton() {\r\n    const ready = isReady();\r\n    btn.disabled = !ready;\r\n    btn.classList.toggle('ready', ready);\r\n    btnLabel.textContent = ready ? 'Connexion pr\u00eate' : 'Se connecter';\r\n  }\r\n\r\n  function validate() {\r\n    let ok = true;\r\n\r\n    const emailOk = isUclStudentEmail(email.value.trim());\r\n    setError(email, 'ppe-login-email-err', !emailOk, 'Utilise ton email \u00e9tudiant UCL.');\r\n    ok = ok && emailOk;\r\n\r\n    const passOk = pass.value.length > 0;\r\n    setError(pass, 'ppe-login-pass-err', !passOk, 'Le mot de passe est requis.');\r\n    ok = ok && passOk;\r\n\r\n    refreshButton();\r\n    return ok;\r\n  }\r\n\r\n  function showMessage(type, html) {\r\n    okBox.classList.remove('show');\r\n    koBox.classList.remove('show');\r\n    if (type === 'ok') {\r\n      okBody.innerHTML = html;\r\n      okBox.classList.add('show');\r\n      okBox.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\r\n      return;\r\n    }\r\n    koBody.innerHTML = html;\r\n    koBox.classList.add('show');\r\n    koBox.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\r\n  }\r\n\r\n  function setLoading(on) {\r\n    btn.disabled = on || !isReady();\r\n    spinner.style.display = on ? 'block' : 'none';\r\n    btnIco.style.display = on ? 'none' : 'inline';\r\n    btnLabel.textContent = on ? 'Connexion en cours\u2026' : (isReady() ? 'Connexion pr\u00eate' : 'Se connecter');\r\n  }\r\n\r\n  function showVerifyPrompt(user) {\r\n    showMessage('ko',\r\n      '<strong>V\u00e9rifie ton adresse email<\/strong> pour pouvoir imprimer.<br>' +\r\n      'Un lien de v\u00e9rification a \u00e9t\u00e9 envoy\u00e9 \u00e0 <strong>' + user.email + '<\/strong> (pense \u00e0 regarder les spams).<br><br>' +\r\n      '<button type=\"button\" id=\"ppe-verify-check\" style=\"margin-right:8px;\">J\\'ai cliqu\u00e9 sur le lien<\/button>' +\r\n      '<button type=\"button\" id=\"ppe-verify-resend\">Renvoyer l\\'email<\/button>' +\r\n      '<div id=\"ppe-verify-status\" style=\"margin-top:8px;\"><\/div>'\r\n    );\r\n    const status = document.getElementById('ppe-verify-status');\r\n    document.getElementById('ppe-verify-check').addEventListener('click', async function () {\r\n      try {\r\n        await user.reload();\r\n        if (auth.currentUser && auth.currentUser.emailVerified) {\r\n          window.location.href = MY_PROFILE_URL;\r\n        } else {\r\n          status.textContent = 'Ton email n\\'est pas encore v\u00e9rifi\u00e9.';\r\n        }\r\n      } catch (e) {\r\n        status.textContent = errorMap[e.code] || e.message || 'Erreur inconnue.';\r\n      }\r\n    });\r\n    document.getElementById('ppe-verify-resend').addEventListener('click', async function () {\r\n      try {\r\n        await sendEmailVerification(user);\r\n        status.textContent = 'Email de v\u00e9rification renvoy\u00e9.';\r\n      } catch (e) {\r\n        status.textContent = errorMap[e.code] || e.message || 'Impossible d\\'envoyer l\\'email.';\r\n      }\r\n    });\r\n  }\r\n\r\n  [email, pass].forEach((el) => {\r\n    el.addEventListener('input', validate);\r\n    el.addEventListener('change', validate);\r\n  });\r\n\r\n  form.addEventListener('submit', async (event) => {\r\n    event.preventDefault();\r\n\r\n    if (!validate()) {\r\n      const first = document.querySelector('#ppe-login .err');\r\n      if (first) first.scrollIntoView({ behavior: 'smooth', block: 'center' });\r\n      return;\r\n    }\r\n\r\n    setLoading(true);\r\n\r\n    try {\r\n      const credential = await signInWithEmailAndPassword(auth, email.value.trim(), pass.value);\r\n      if (!credential.user.emailVerified) {\r\n        \/\/ Impression interdite sans email verifie (controle aussi fait cote serveur) : ecran \"verifie ton email\".\r\n        showVerifyPrompt(credential.user);\r\n        form.reset();\r\n        refreshButton();\r\n        return;\r\n      }\r\n      showMessage('ok',\r\n        'Tu es connect\u00e9 avec <strong>' + credential.user.email + '<\/strong>.<br><br>' +\r\n        'Tu vas maintenant \u00eatre redirig\u00e9 vers ta page profil.'\r\n      );\r\n      form.reset();\r\n      refreshButton();\r\n      window.setTimeout(function () {\r\n          window.location.href = MY_PROFILE_URL;\r\n      }, 700);\r\n    } catch (error) {\r\n      console.error(error);\r\n      showMessage('ko', errorMap[error.code] || error.message || 'Erreur inconnue.');\r\n    } finally {\r\n      setLoading(false);\r\n    }\r\n  });\r\n\r\n  \/\/ Mot de passe oubli\u00e9\r\n  const forgotLink = document.getElementById('ppe-forgot-link');\r\n  const forgotSection = document.getElementById('ppe-forgot-section');\r\n  const resetEmail = document.getElementById('ppe-reset-email');\r\n  const resetBtn = document.getElementById('ppe-reset-btn');\r\n  const resetOk = document.getElementById('ppe-reset-ok');\r\n  const resetKo = document.getElementById('ppe-reset-ko');\r\n\r\n  const resetErrorMap = {\r\n    'auth\/user-not-found': 'Aucun compte trouv\u00e9 avec cet email.',\r\n    'auth\/invalid-email': 'Email invalide.',\r\n    'auth\/too-many-requests': 'Trop de tentatives. R\u00e9essaie plus tard.',\r\n    'auth\/network-request-failed': 'Probl\u00e8me r\u00e9seau, r\u00e9essaie.',\r\n  };\r\n\r\n  forgotLink.addEventListener('click', function (event) {\r\n    event.preventDefault();\r\n    const isVisible = forgotSection.style.display !== 'none';\r\n    forgotSection.style.display = isVisible ? 'none' : 'block';\r\n    if (!isVisible) {\r\n      resetEmail.value = email.value.trim();\r\n      resetOk.classList.remove('show');\r\n      resetKo.classList.remove('show');\r\n      resetEmail.focus();\r\n    }\r\n  });\r\n\r\n  resetBtn.addEventListener('click', async function () {\r\n    resetOk.classList.remove('show');\r\n    resetKo.classList.remove('show');\r\n\r\n    const val = resetEmail.value.trim();\r\n    const errEl = document.getElementById('ppe-reset-email-err');\r\n    if (!val) {\r\n      errEl.classList.add('show');\r\n      resetEmail.classList.add('err');\r\n      return;\r\n    }\r\n    errEl.classList.remove('show');\r\n    resetEmail.classList.remove('err');\r\n\r\n    resetBtn.disabled = true;\r\n    resetBtn.textContent = 'Envoi\u2026';\r\n    try {\r\n      await sendPasswordResetEmail(auth, val);\r\n      document.getElementById('ppe-reset-ok-body').textContent =\r\n        'Un lien de r\u00e9initialisation a \u00e9t\u00e9 envoy\u00e9 \u00e0 ' + val + '. V\u00e9rifie ta bo\u00eete mail (et les spams).';\r\n      resetOk.classList.add('show');\r\n      resetBtn.textContent = 'Envoy\u00e9 \u2713';\r\n    } catch (error) {\r\n      document.getElementById('ppe-reset-ko-body').textContent =\r\n        resetErrorMap[error.code] || error.message || 'Erreur inconnue.';\r\n      resetKo.classList.add('show');\r\n      resetBtn.disabled = false;\r\n      resetBtn.textContent = 'Envoyer le lien';\r\n    }\r\n  });\r\n\r\n  validate();\r\n<\/script>\r\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Se connecter Acc\u00e8de \u00e0 ton compte \u00e9tudiant avec Firebase Auth. Tes identifiants Email \u00e9tudiant * @student.uclouvain.be \/ @etudiant.uclouvain.be Utilise ton [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"om_disable_all_campaigns":false,"site-sidebar-layout":"no-sidebar","site-content-layout":"","ast-site-content-layout":"full-width-container","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"disabled","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-3904","page","type-page","status-publish","hentry"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.4 - aioseo.com -->\n\t<meta name=\"description\" content=\"Se connecter Acc\u00e8de \u00e0 ton compte \u00e9tudiant avec Firebase Auth. Tes identifiants Email \u00e9tudiant * @student.uclouvain.be \/ @etudiant.uclouvain.be Utilise ton email \u00e9tudiant UCL. Mot de passe * Le mot de passe est requis. Cr\u00e9er mon compte Mot de passe oubli\u00e9 ? R\u00e9initialiser le mot de passe Saisis ton email \u00e9tudiant. Envoyer le lien Email envoy\u00e9\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/pappaye.be\/en\/connexion\/\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_GB\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Pappaye - Impression gratuite pout \u00e9tudiants\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"connexion - Pappaye\" \/>\n\t\t<meta property=\"og:description\" content=\"Se connecter Acc\u00e8de \u00e0 ton compte \u00e9tudiant avec Firebase Auth. Tes identifiants Email \u00e9tudiant * @student.uclouvain.be \/ @etudiant.uclouvain.be Utilise ton email \u00e9tudiant UCL. Mot de passe * Le mot de passe est requis. Cr\u00e9er mon compte Mot de passe oubli\u00e9 ? R\u00e9initialiser le mot de passe Saisis ton email \u00e9tudiant. Envoyer le lien Email envoy\u00e9\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/pappaye.be\/en\/connexion\/\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/pappaye.be\/wp-content\/uploads\/2025\/09\/Unknown-removebg-preview.png\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/pappaye.be\/wp-content\/uploads\/2025\/09\/Unknown-removebg-preview.png\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2026-05-22T22:10:28+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2026-10-15T09:17:22+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:title\" content=\"connexion - Pappaye\" \/>\n\t\t<meta name=\"twitter:description\" content=\"Se connecter Acc\u00e8de \u00e0 ton compte \u00e9tudiant avec Firebase Auth. Tes identifiants Email \u00e9tudiant * @student.uclouvain.be \/ @etudiant.uclouvain.be Utilise ton email \u00e9tudiant UCL. Mot de passe * Le mot de passe est requis. Cr\u00e9er mon compte Mot de passe oubli\u00e9 ? R\u00e9initialiser le mot de passe Saisis ton email \u00e9tudiant. Envoyer le lien Email envoy\u00e9\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/pappaye.be\/wp-content\/uploads\/2025\/09\/Unknown-removebg-preview.png\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/pappaye.be\\\/en\\\/connexion\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/pappaye.be\\\/en\\\/#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/pappaye.be\\\/en\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/pappaye.be\\\/en\\\/connexion\\\/#listItem\",\"name\":\"connexion\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/pappaye.be\\\/en\\\/connexion\\\/#listItem\",\"position\":2,\"name\":\"connexion\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/pappaye.be\\\/en\\\/#listItem\",\"name\":\"Home\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/pappaye.be\\\/en\\\/#organization\",\"name\":\"Pappaye\",\"description\":\"Impression gratuite pout \\u00e9tudiants\",\"url\":\"https:\\\/\\\/pappaye.be\\\/en\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/pappaye.be\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/Unknown-removebg-preview.png\",\"@id\":\"https:\\\/\\\/pappaye.be\\\/en\\\/connexion\\\/#organizationLogo\",\"width\":500,\"height\":500},\"image\":{\"@id\":\"https:\\\/\\\/pappaye.be\\\/en\\\/connexion\\\/#organizationLogo\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/pappaye.be\\\/en\\\/connexion\\\/#webpage\",\"url\":\"https:\\\/\\\/pappaye.be\\\/en\\\/connexion\\\/\",\"name\":\"connexion - Pappaye\",\"description\":\"Se connecter Acc\\u00e8de \\u00e0 ton compte \\u00e9tudiant avec Firebase Auth. Tes identifiants Email \\u00e9tudiant * @student.uclouvain.be \\\/ @etudiant.uclouvain.be Utilise ton email \\u00e9tudiant UCL. Mot de passe * Le mot de passe est requis. Cr\\u00e9er mon compte Mot de passe oubli\\u00e9 ? R\\u00e9initialiser le mot de passe Saisis ton email \\u00e9tudiant. Envoyer le lien Email envoy\\u00e9\",\"inLanguage\":\"en-GB\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/pappaye.be\\\/en\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/pappaye.be\\\/en\\\/connexion\\\/#breadcrumblist\"},\"datePublished\":\"2026-05-22T23:10:28+01:00\",\"dateModified\":\"2026-10-15T10:17:22+01:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/pappaye.be\\\/en\\\/#website\",\"url\":\"https:\\\/\\\/pappaye.be\\\/en\\\/\",\"name\":\"Pappaye\",\"description\":\"Impression gratuite pout \\u00e9tudiants\",\"inLanguage\":\"en-GB\",\"publisher\":{\"@id\":\"https:\\\/\\\/pappaye.be\\\/en\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"connexion - Pappaye","description":"Se connecter Acc\u00e8de \u00e0 ton compte \u00e9tudiant avec Firebase Auth. Tes identifiants Email \u00e9tudiant * @student.uclouvain.be \/ @etudiant.uclouvain.be Utilise ton email \u00e9tudiant UCL. Mot de passe * Le mot de passe est requis. Cr\u00e9er mon compte Mot de passe oubli\u00e9 ? R\u00e9initialiser le mot de passe Saisis ton email \u00e9tudiant. Envoyer le lien Email envoy\u00e9","canonical_url":"https:\/\/pappaye.be\/en\/connexion\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BreadcrumbList","@id":"https:\/\/pappaye.be\/en\/connexion\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/pappaye.be\/en\/#listItem","position":1,"name":"Home","item":"https:\/\/pappaye.be\/en\/","nextItem":{"@type":"ListItem","@id":"https:\/\/pappaye.be\/en\/connexion\/#listItem","name":"connexion"}},{"@type":"ListItem","@id":"https:\/\/pappaye.be\/en\/connexion\/#listItem","position":2,"name":"connexion","previousItem":{"@type":"ListItem","@id":"https:\/\/pappaye.be\/en\/#listItem","name":"Home"}}]},{"@type":"Organization","@id":"https:\/\/pappaye.be\/en\/#organization","name":"Pappaye","description":"Impression gratuite pout \u00e9tudiants","url":"https:\/\/pappaye.be\/en\/","logo":{"@type":"ImageObject","url":"https:\/\/pappaye.be\/wp-content\/uploads\/2025\/09\/Unknown-removebg-preview.png","@id":"https:\/\/pappaye.be\/en\/connexion\/#organizationLogo","width":500,"height":500},"image":{"@id":"https:\/\/pappaye.be\/en\/connexion\/#organizationLogo"}},{"@type":"WebPage","@id":"https:\/\/pappaye.be\/en\/connexion\/#webpage","url":"https:\/\/pappaye.be\/en\/connexion\/","name":"connexion - Pappaye","description":"Se connecter Acc\u00e8de \u00e0 ton compte \u00e9tudiant avec Firebase Auth. Tes identifiants Email \u00e9tudiant * @student.uclouvain.be \/ @etudiant.uclouvain.be Utilise ton email \u00e9tudiant UCL. Mot de passe * Le mot de passe est requis. Cr\u00e9er mon compte Mot de passe oubli\u00e9 ? R\u00e9initialiser le mot de passe Saisis ton email \u00e9tudiant. Envoyer le lien Email envoy\u00e9","inLanguage":"en-GB","isPartOf":{"@id":"https:\/\/pappaye.be\/en\/#website"},"breadcrumb":{"@id":"https:\/\/pappaye.be\/en\/connexion\/#breadcrumblist"},"datePublished":"2026-05-22T23:10:28+01:00","dateModified":"2026-10-15T10:17:22+01:00"},{"@type":"WebSite","@id":"https:\/\/pappaye.be\/en\/#website","url":"https:\/\/pappaye.be\/en\/","name":"Pappaye","description":"Impression gratuite pout \u00e9tudiants","inLanguage":"en-GB","publisher":{"@id":"https:\/\/pappaye.be\/en\/#organization"}}]},"og:locale":"en_GB","og:site_name":"Pappaye - Impression gratuite pout \u00e9tudiants","og:type":"article","og:title":"connexion - Pappaye","og:description":"Se connecter Acc\u00e8de \u00e0 ton compte \u00e9tudiant avec Firebase Auth. Tes identifiants Email \u00e9tudiant * @student.uclouvain.be \/ @etudiant.uclouvain.be Utilise ton email \u00e9tudiant UCL. Mot de passe * Le mot de passe est requis. Cr\u00e9er mon compte Mot de passe oubli\u00e9 ? R\u00e9initialiser le mot de passe Saisis ton email \u00e9tudiant. Envoyer le lien Email envoy\u00e9","og:url":"https:\/\/pappaye.be\/en\/connexion\/","og:image":"https:\/\/pappaye.be\/wp-content\/uploads\/2025\/09\/Unknown-removebg-preview.png","og:image:secure_url":"https:\/\/pappaye.be\/wp-content\/uploads\/2025\/09\/Unknown-removebg-preview.png","article:published_time":"2026-05-22T22:10:28+00:00","article:modified_time":"2026-10-15T09:17:22+00:00","twitter:card":"summary_large_image","twitter:title":"connexion - Pappaye","twitter:description":"Se connecter Acc\u00e8de \u00e0 ton compte \u00e9tudiant avec Firebase Auth. Tes identifiants Email \u00e9tudiant * @student.uclouvain.be \/ @etudiant.uclouvain.be Utilise ton email \u00e9tudiant UCL. Mot de passe * Le mot de passe est requis. Cr\u00e9er mon compte Mot de passe oubli\u00e9 ? R\u00e9initialiser le mot de passe Saisis ton email \u00e9tudiant. Envoyer le lien Email envoy\u00e9","twitter:image":"https:\/\/pappaye.be\/wp-content\/uploads\/2025\/09\/Unknown-removebg-preview.png"},"aioseo_meta_data":{"post_id":"3904","title":null,"description":null,"keywords":null,"keyphrases":{"focus":[],"additional":[]},"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":"","og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"WebPage","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":"-1","robots_max_videopreview":"-1","robots_max_imagepreview":"large","priority":null,"frequency":"default","local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":{"faqs":[],"keyPoints":[],"schemas":[],"titles":[],"descriptions":[],"socialPosts":{"email":[],"linkedin":[],"twitter":[],"facebook":[],"instagram":[]}},"created":"2026-05-22 22:10:30","updated":"2026-10-15 09:32:07","seo_analyzer_scan_date":null,"focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/pappaye.be\/en\/\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tconnexion\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/pappaye.be\/en\/"},{"label":"connexion","link":"https:\/\/pappaye.be\/en\/connexion\/"}],"_links":{"self":[{"href":"https:\/\/pappaye.be\/en\/wp-json\/wp\/v2\/pages\/3904","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pappaye.be\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/pappaye.be\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/pappaye.be\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/pappaye.be\/en\/wp-json\/wp\/v2\/comments?post=3904"}],"version-history":[{"count":16,"href":"https:\/\/pappaye.be\/en\/wp-json\/wp\/v2\/pages\/3904\/revisions"}],"predecessor-version":[{"id":4862,"href":"https:\/\/pappaye.be\/en\/wp-json\/wp\/v2\/pages\/3904\/revisions\/4862"}],"wp:attachment":[{"href":"https:\/\/pappaye.be\/en\/wp-json\/wp\/v2\/media?parent=3904"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}