{"id":2932,"date":"2025-08-14T12:29:17","date_gmt":"2025-08-14T12:29:17","guid":{"rendered":"https:\/\/eliteservicesenegal.com\/?page_id=2932"},"modified":"2026-08-04T08:29:11","modified_gmt":"2026-08-04T08:29:11","slug":"suivi-de-vos-dossiers","status":"publish","type":"page","link":"https:\/\/eliteservicesenegal.com\/index.php\/suivi-de-vos-dossiers\/","title":{"rendered":"CONSULTER SON DOSSIER"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"2932\" class=\"elementor elementor-2932\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-d5c3937 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"d5c3937\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-6515e36\" data-id=\"6515e36\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-374de06 elementor-widget elementor-widget-heading\" data-id=\"374de06\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\">Vos Exigences Font Notre Force<\/h1>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6fe196a elementor-widget elementor-widget-heading\" data-id=\"6fe196a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h5 class=\"elementor-heading-title elementor-size-default\">VOS DOSSIERS EN TEMPS R\u00c9EL<\/h5>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-668bf68 elementor-widget elementor-widget-shortcode\" data-id=\"668bf68\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">    <style>\n      \/* Interface moderne et professionnelle *\/\n      .es-suivi-wrap { \n        max-width: 900px; \n        margin: 32px auto; \n        font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif; \n        color: #1a202c;\n        background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n        border-radius: 20px;\n        padding: 2px;\n        box-shadow: 0 20px 40px rgba(102, 126, 234, 0.1);\n      }\n      \n      .es-inner-wrap {\n        background: white;\n        border-radius: 18px;\n        padding: 40px;\n      }\n      \n      .es-header {\n        text-align: center;\n        margin-bottom: 40px;\n      }\n      \n      .es-title { \n        font-size: 32px; \n        font-weight: 700; \n        margin-bottom: 12px; \n        color: #2d3748;\n        background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n        -webkit-background-clip: text;\n        -webkit-text-fill-color: transparent;\n        background-clip: text;\n      }\n      \n      .es-subtitle {\n        font-size: 16px;\n        color: #718096;\n        margin-bottom: 0;\n      }\n      \n      .es-card { \n        background: #ffffff; \n        border: 2px solid #f7fafc; \n        border-radius: 16px; \n        padding: 32px; \n        box-shadow: 0 4px 20px rgba(0,0,0,.08);\n        transition: all 0.3s ease;\n      }\n      \n      .es-card:hover {\n        box-shadow: 0 8px 30px rgba(0,0,0,.12);\n        transform: translateY(-2px);\n      }\n      \n      .es-form { \n        display: grid; \n        gap: 24px; \n      }\n      \n      .es-form-grid {\n        display: grid;\n        grid-template-columns: 1fr;\n        gap: 20px;\n      }\n      \n      @media (min-width: 768px) {\n        .es-form-grid {\n          grid-template-columns: repeat(2, 1fr);\n        }\n      }\n      \n      .es-field { \n        position: relative;\n        margin-bottom: 20px;\n      }\n      \n      .es-label { \n        font-size: 14px; \n        font-weight: 600;\n        color: #4a5568; \n        margin-bottom: 8px;\n        display: block;\n      }\n      \n      .es-input { \n        width: 100%;\n        border: 2px solid #e2e8f0; \n        border-radius: 12px; \n        padding: 16px 20px; \n        font-size: 16px; \n        outline: none; \n        transition: all 0.2s ease;\n        background: #f8f9fa;\n        box-sizing: border-box;\n      }\n      \n      .es-input:focus { \n        border-color: #667eea; \n        box-shadow: 0 0 0 4px rgba(102, 126, 234, 0.1);\n        background: white;\n        transform: translateY(-1px);\n      }\n      \n      .es-actions { \n        display: flex; \n        gap: 16px; \n        align-items: center; \n        justify-content: center;\n        margin-top: 8px;\n        flex-wrap: wrap;\n      }\n      \n      .es-btn { \n        background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n        color: #fff; \n        border: none; \n        border-radius: 12px; \n        padding: 16px 32px; \n        font-weight: 600;\n        font-size: 16px;\n        cursor: pointer; \n        transition: all 0.2s ease;\n        box-shadow: 0 4px 15px rgba(102, 126, 234, 0.3);\n      }\n      \n      .es-btn:hover { \n        transform: translateY(-2px);\n        box-shadow: 0 8px 25px rgba(102, 126, 234, 0.4);\n      }\n      \n      .es-btn:active { \n        transform: translateY(0px); \n      }\n      \n      .es-btn:disabled {\n        opacity: 0.6;\n        cursor: not-allowed;\n        transform: none;\n      }\n      \n      .es-btn-secondary {\n        background: #f8f9fa;\n        color: #2d3748;\n        border: 2px solid #e2e8f0;\n        box-shadow: none;\n      }\n      \n      .es-help { \n        font-size: 14px; \n        color: #718096; \n        text-align: center; \n        margin-top: 16px;\n        padding: 16px;\n        background: #f7fafc;\n        border-radius: 8px;\n        border-left: 4px solid #667eea;\n      }\n      \n      .es-link-text {\n        text-align: center;\n        margin-top: 16px;\n      }\n      \n      .es-link-text a {\n        color: #667eea;\n        font-size: 14px;\n        text-decoration: none;\n        font-weight: 600;\n      }\n      \n      .es-link-text a:hover {\n        text-decoration: underline;\n      }\n      \n      .es-error { \n        color: #e53e3e; \n        background: #fed7d7; \n        border: 2px solid #fc8181; \n        padding: 16px 20px; \n        border-radius: 12px; \n        margin-top: 20px;\n        display: flex;\n        align-items: center;\n        gap: 12px;\n      }\n      \n      .es-error::before {\n        content: \"\u26a0\ufe0f\";\n        font-size: 20px;\n      }\n      \n      .es-info { \n        color: #2c5282; \n        background: #bee3f8; \n        border: 2px solid #63b3ed; \n        padding: 16px 20px; \n        border-radius: 12px; \n        margin-top: 20px;\n        display: flex;\n        align-items: center;\n        gap: 12px;\n      }\n      \n      .es-info::before {\n        content: \"\u2139\ufe0f\";\n        font-size: 20px;\n      }\n\n      .es-success {\n        color: #1e7e34;\n        background: #d4edda;\n        border: 2px solid #86d99b;\n        padding: 16px 20px;\n        border-radius: 12px;\n        margin-top: 20px;\n        display: flex;\n        align-items: center;\n        gap: 12px;\n      }\n\n      .es-success::before {\n        content: \"\u2705\";\n        font-size: 20px;\n      }\n      \n      .es-loader { \n        display: none; \n        font-size: 16px; \n        color: #667eea;\n        font-weight: 500;\n      }\n      \n      .es-loader.on { \n        display: inline-flex; \n        align-items: center; \n        gap: 12px; \n      }\n      \n      .es-spinner { \n        width: 20px; \n        height: 20px; \n        border: 3px solid #e2e8f0; \n        border-top-color: #667eea; \n        border-radius: 50%; \n        animation: es-spin 1s linear infinite; \n      }\n      \n      @keyframes es-spin { \n        to { transform: rotate(360deg); } \n      }\n      \n      .es-results { \n        margin-top: 32px; \n        display: flex; \n        flex-direction: column; \n        gap: 20px; \n      }\n      \n      .es-results-header {\n        text-align: center;\n        padding-bottom: 16px;\n        border-bottom: 2px solid #e2e8f0;\n      }\n      \n      .es-count { \n        font-size: 18px; \n        color: #2d3748; \n        font-weight: 600;\n        margin: 0;\n      }\n      \n      .es-result-card { \n        display: flex; \n        justify-content: space-between; \n        align-items: center; \n        gap: 20px; \n        background: linear-gradient(135deg, #f8f9fa 0%, #ffffff 100%); \n        border: 2px solid #e2e8f0; \n        border-radius: 16px; \n        padding: 24px; \n        box-shadow: 0 4px 15px rgba(0,0,0,.06);\n        transition: all 0.3s ease;\n        position: relative;\n        overflow: hidden;\n      }\n      \n      .es-result-card::before {\n        content: '';\n        position: absolute;\n        top: 0;\n        left: 0;\n        width: 4px;\n        height: 100%;\n        background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n      }\n      \n      .es-result-card:hover { \n        transform: translateY(-3px);\n        box-shadow: 0 8px 25px rgba(0,0,0,.1);\n        border-color: #667eea;\n      }\n      \n      .es-main { \n        display: flex; \n        flex-direction: column; \n        gap: 8px; \n        min-width: 0; \n        flex: 1;\n      }\n      \n      .es-line { \n        display: flex; \n        flex-wrap: wrap; \n        gap: 12px; \n        align-items: center; \n      }\n      \n      .es-cat { \n        font-weight: 700; \n        color: #2d3748; \n        font-size: 18px;\n      }\n      \n      .es-status { \n        font-size: 13px; \n        background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); \n        color: white; \n        border-radius: 20px; \n        padding: 6px 16px; \n        font-weight: 600;\n        box-shadow: 0 2px 8px rgba(102, 126, 234, 0.3);\n      }\n      \n      .es-date { \n        font-size: 14px; \n        color: #718096; \n        display: flex;\n        align-items: center;\n        gap: 6px;\n      }\n      \n      .es-date::before {\n        content: \"\ud83d\udd52\";\n      }\n      \n      .es-actions-right { \n        display: flex; \n        gap: 12px; \n        flex-shrink: 0; \n      }\n      \n      .es-link { \n        text-decoration: none; \n        background: linear-gradient(135deg, #10b981 0%, #059669 100%); \n        color: #fff; \n        border-radius: 12px; \n        padding: 12px 20px; \n        font-size: 14px; \n        font-weight: 600;\n        transition: all 0.2s ease;\n        box-shadow: 0 4px 15px rgba(16, 185, 129, 0.3);\n        display: flex;\n        align-items: center;\n        gap: 8px;\n      }\n      \n      .es-link:hover { \n        transform: translateY(-2px);\n        box-shadow: 0 8px 25px rgba(16, 185, 129, 0.4);\n      }\n      \n      \/* Animations d'entr\u00e9e *\/\n      @keyframes slideInUp {\n        from {\n          opacity: 0;\n          transform: translateY(30px);\n        }\n        to {\n          opacity: 1;\n          transform: translateY(0);\n        }\n      }\n      \n      .es-result-card {\n        animation: slideInUp 0.5s ease-out;\n      }\n\n      #es-card-creation {\n        margin-top: 20px;\n      }\n      \n      \/* Responsive design optimis\u00e9 pour mobile *\/\n      @media (max-width: 768px) {\n        .es-suivi-wrap {\n          margin: 8px;\n          border-radius: 16px;\n        }\n        \n        .es-inner-wrap {\n          padding: 20px 16px;\n        }\n        \n        .es-header {\n          margin-bottom: 24px;\n        }\n        \n        .es-title {\n          font-size: 24px;\n          line-height: 1.2;\n        }\n        \n        .es-subtitle {\n          font-size: 14px;\n        }\n        \n        .es-card {\n          padding: 20px 16px;\n          border-radius: 12px;\n        }\n        \n        .es-form-grid {\n          grid-template-columns: 1fr;\n          gap: 16px;\n        }\n        \n        .es-input {\n          padding: 12px 16px;\n          font-size: 16px; \/* \u00c9vite le zoom sur iOS *\/\n        }\n        \n        .es-btn {\n          width: 100%;\n          padding: 14px 24px;\n          font-size: 15px;\n        }\n        \n        .es-result-card {\n          flex-direction: column;\n          align-items: stretch;\n          gap: 12px;\n          padding: 16px;\n          margin-bottom: 12px;\n        }\n        \n        .es-actions-right {\n          align-self: stretch;\n          justify-content: center;\n          margin-top: 8px;\n        }\n        \n        .es-link {\n          flex: 1;\n          justify-content: center;\n          padding: 10px 16px;\n          font-size: 13px;\n          text-align: center;\n        }\n        \n        .es-actions {\n          flex-direction: column;\n          gap: 12px;\n          margin-top: 16px;\n        }\n      }\n    <\/style>\n\n    <div class=\"es-suivi-wrap\" id=\"es-suivi-root\"\n         data-ajax-url=\"https:\/\/eliteservicesenegal.com\/wp-admin\/admin-ajax.php\"\n         data-nonce=\"d4045e1d3f\">\n\n      <div class=\"es-inner-wrap\">\n        <div class=\"es-header\">\n          <h1 class=\"es-title\">Consultation de Dossier<\/h1>\n          <p class=\"es-subtitle\">Suivez l'avancement de votre dossier en temps r\u00e9el<\/p>\n        <\/div>\n\n        <div class=\"es-card\">\n\n          <!-- ETAPE 1 : num\u00e9ro de t\u00e9l\u00e9phone -->\n          <div id=\"es-step-telephone\">\n            <div class=\"es-field\">\n              <label class=\"es-label\" for=\"es-telephone-init\">\ud83d\udcf1 Num\u00e9ro de t\u00e9l\u00e9phone<\/label>\n              <input class=\"es-input\" type=\"tel\" id=\"es-telephone-init\" placeholder=\"Votre num\u00e9ro de t\u00e9l\u00e9phone\">\n            <\/div>\n            <div class=\"es-actions\">\n              <button class=\"es-btn\" id=\"es-btn-continuer\" type=\"button\">Continuer<\/button>\n            <\/div>\n          <\/div>\n\n          <!-- ETAPE 2A : mot de passe (client d\u00e9j\u00e0 connu) -->\n          <div id=\"es-step-password\" style=\"display:none;\">\n            <div class=\"es-field\">\n              <label class=\"es-label\" for=\"es-password-login\">\ud83d\udd12 Mot de passe<\/label>\n              <input class=\"es-input\" type=\"password\" id=\"es-password-login\" placeholder=\"Votre mot de passe\">\n            <\/div>\n            <div class=\"es-actions\">\n              <button class=\"es-btn\" id=\"es-btn-login\" type=\"button\">\ud83d\udd0d Se connecter<\/button>\n            <\/div>\n            <div class=\"es-link-text\">\n              <a href=\"#\" id=\"es-link-oublie\">Mot de passe oubli\u00e9, ou premi\u00e8re visite avec ce num\u00e9ro ?<\/a>\n            <\/div>\n          <\/div>\n\n          <!-- ETAPE 2B : nom \/ pr\u00e9nom (premi\u00e8re visite) -->\n          <div id=\"es-step-identite\" style=\"display:none;\">\n            <div class=\"es-form-grid\">\n              <div class=\"es-field\">\n                <label class=\"es-label\" for=\"es-nom\">\ud83d\udc64 Nom<\/label>\n                <input class=\"es-input\" type=\"text\" id=\"es-nom\" placeholder=\"Nom\">\n              <\/div>\n              <div class=\"es-field\">\n                <label class=\"es-label\" for=\"es-prenom\">\ud83d\udc64 Pr\u00e9nom<\/label>\n                <input class=\"es-input\" type=\"text\" id=\"es-prenom\" placeholder=\"Pr\u00e9nom\">\n              <\/div>\n            <\/div>\n            <div class=\"es-actions\">\n              <button class=\"es-btn\" id=\"es-btn-rechercher\" type=\"button\">\ud83d\udd0d Rechercher mon dossier<\/button>\n              <button class=\"es-btn es-btn-secondary\" id=\"es-btn-retour-tel\" type=\"button\">\u2190 Retour<\/button>\n            <\/div>\n            <div class=\"es-help\">\n              \ud83d\udca1 Saisissez les m\u00eames informations que lors du d\u00e9p\u00f4t de votre dossier.\n            <\/div>\n          <\/div>\n\n          <div class=\"es-actions\">\n            <span class=\"es-loader\" id=\"es-loader\">\n              <span class=\"es-spinner\"><\/span>\n              Chargement\u2026\n            <\/span>\n          <\/div>\n\n          <div class=\"es-error\" id=\"es-error\" style=\"display:none;\"><\/div>\n        <\/div>\n\n        <!-- Panneau de cr\u00e9ation \/ r\u00e9initialisation de mot de passe -->\n        <div class=\"es-card\" id=\"es-card-creation\" style=\"display:none;\">\n          <h2 id=\"es-creation-title\" style=\"margin-top:0;\">\ud83d\udd10 Cr\u00e9ez votre mot de passe<\/h2>\n          <p class=\"es-subtitle\" id=\"es-creation-subtitle\">La prochaine fois, connectez-vous directement avec votre num\u00e9ro et ce mot de passe.<\/p>\n          <div class=\"es-form-grid\">\n            <div class=\"es-field\">\n              <label class=\"es-label\" for=\"es-new-password\">Nouveau mot de passe<\/label>\n              <input class=\"es-input\" type=\"password\" id=\"es-new-password\" placeholder=\"6 caract\u00e8res minimum\">\n            <\/div>\n            <div class=\"es-field\">\n              <label class=\"es-label\" for=\"es-new-password-confirm\">Confirmer le mot de passe<\/label>\n              <input class=\"es-input\" type=\"password\" id=\"es-new-password-confirm\" placeholder=\"Ressaisissez le mot de passe\">\n            <\/div>\n          <\/div>\n          <div class=\"es-actions\">\n            <button class=\"es-btn\" id=\"es-btn-creer-password\" type=\"button\">\u2705 Enregistrer mon mot de passe<\/button>\n          <\/div>\n          <div class=\"es-error\" id=\"es-password-error\" style=\"display:none;\"><\/div>\n          <div class=\"es-success\" id=\"es-password-success\" style=\"display:none;\"><\/div>\n        <\/div>\n\n        <div class=\"es-results\" id=\"es-results\" style=\"display:none;\">\n          <div class=\"es-results-header\">\n            <h2 class=\"es-count\" id=\"es-count\"><\/h2>\n          <\/div>\n          <div id=\"es-list\"><\/div>\n        <\/div>\n\n        <div class=\"es-info\" id=\"es-empty\" style=\"display:none;\">\n          <strong>Aucun dossier trouv\u00e9<\/strong><br>\n          V\u00e9rifiez les informations saisies.\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <script>\n      (function(){\n        const root = document.getElementById('es-suivi-root');\n        const ajaxUrl = root.getAttribute('data-ajax-url');\n        const nonce = root.getAttribute('data-nonce');\n\n        \/\/ Etapes\n        const stepTelephone = document.getElementById('es-step-telephone');\n        const stepPassword  = document.getElementById('es-step-password');\n        const stepIdentite  = document.getElementById('es-step-identite');\n\n        const telephoneInit = document.getElementById('es-telephone-init');\n        const passwordLogin = document.getElementById('es-password-login');\n        const nomInput = document.getElementById('es-nom');\n        const prenomInput = document.getElementById('es-prenom');\n\n        const btnContinuer = document.getElementById('es-btn-continuer');\n        const btnLogin = document.getElementById('es-btn-login');\n        const btnRechercher = document.getElementById('es-btn-rechercher');\n        const btnRetourTel = document.getElementById('es-btn-retour-tel');\n        const linkOublie = document.getElementById('es-link-oublie');\n\n        const loader = document.getElementById('es-loader');\n        const error  = document.getElementById('es-error');\n        const resultsWrap = document.getElementById('es-results');\n        const countEl = document.getElementById('es-count');\n        const listEl  = document.getElementById('es-list');\n        const emptyEl = document.getElementById('es-empty');\n\n        \/\/ Panneau cr\u00e9ation mot de passe\n        const cardCreation = document.getElementById('es-card-creation');\n        const creationTitle = document.getElementById('es-creation-title');\n        const creationSubtitle = document.getElementById('es-creation-subtitle');\n        const newPassword = document.getElementById('es-new-password');\n        const newPasswordConfirm = document.getElementById('es-new-password-confirm');\n        const btnCreerPassword = document.getElementById('es-btn-creer-password');\n        const passwordError = document.getElementById('es-password-error');\n        const passwordSuccess = document.getElementById('es-password-success');\n\n        let currentTelephone = '';\n        let currentNom = '';\n        let currentPrenom = '';\n        let forcedReset = false; \/\/ true si l'utilisateur passe par \"mot de passe oubli\u00e9\"\n\n        function showLoader(on) {\n          loader.classList.toggle('on', on);\n        }\n\n        function showError(msg) {\n          error.textContent = \"\u26a0\ufe0f \" + msg;\n          error.style.display = 'flex';\n        }\n\n        function hideError() {\n          error.style.display = 'none';\n        }\n\n        function resetResultsUI() {\n          emptyEl.style.display = 'none';\n          resultsWrap.style.display = 'none';\n          listEl.innerHTML = '';\n          countEl.textContent = '';\n          cardCreation.style.display = 'none';\n          passwordError.style.display = 'none';\n          passwordSuccess.style.display = 'none';\n          newPassword.value = '';\n          newPasswordConfirm.value = '';\n        }\n\n        function getStatusIcon(statut) {\n          const status = statut.toLowerCase();\n          if (status.includes('en cours') || status.includes('traitement')) return '\u23f3';\n          if (status.includes('termin\u00e9') || status.includes('fini') || status.includes('valid\u00e9')) return '\u2705';\n          if (status.includes('attente') || status.includes('suspendu')) return '\u23f8\ufe0f';\n          if (status.includes('annul\u00e9') || status.includes('rejet\u00e9')) return '\u274c';\n          return '\ud83d\udccb';\n        }\n\n        function formatDateDisplay(dateStr) {\n          return dateStr; \/\/ d\u00e9j\u00e0 format\u00e9 c\u00f4t\u00e9 serveur\n        }\n\n        function renderResults(dossiers) {\n          listEl.innerHTML = '';\n          if (!dossiers || !dossiers.length) {\n            emptyEl.style.display = 'block';\n            return;\n          }\n          resultsWrap.style.display = 'block';\n          countEl.textContent = `\ud83c\udf89 ${dossiers.length} dossier${dossiers.length > 1 ? 's' : ''} trouv\u00e9${dossiers.length > 1 ? 's' : ''}`;\n\n          dossiers.forEach((r, index) => {\n            const card = document.createElement('div');\n            card.className = 'es-result-card';\n            card.style.animationDelay = (index * 0.1) + 's';\n\n            const statusIcon = getStatusIcon(r.statut);\n\n            card.innerHTML = `\n              <div class=\"es-main\">\n                <div class=\"es-line\">\n                  <div class=\"es-cat\">\ud83d\udccb ${r.categorie}<\/div>\n                  <div class=\"es-status\">${statusIcon} ${r.statut}<\/div>\n                <\/div>\n                <div class=\"es-date\">Mis \u00e0 jour : ${formatDateDisplay(r.date_update)}<\/div>\n              <\/div>\n              <div class=\"es-actions-right\">\n                ${r.lien_dropbox ? `<a class=\"es-link\" href=\"${r.lien_dropbox}\" target=\"_blank\">\ud83d\udcc2 Ouvrir<\/a>` : '<span style=\"color: #718096; font-size: 13px;\">Aucun document<\/span>'}\n              <\/div>`;\n            listEl.appendChild(card);\n          });\n        }\n\n        function goToStepTelephone() {\n          stepTelephone.style.display = 'block';\n          stepPassword.style.display = 'none';\n          stepIdentite.style.display = 'none';\n          hideError();\n        }\n\n        function goToStepPassword() {\n          stepTelephone.style.display = 'none';\n          stepPassword.style.display = 'block';\n          stepIdentite.style.display = 'none';\n          passwordLogin.value = '';\n          hideError();\n        }\n\n        function goToStepIdentite() {\n          stepTelephone.style.display = 'none';\n          stepPassword.style.display = 'none';\n          stepIdentite.style.display = 'block';\n          hideError();\n        }\n\n        function showCreationPanel(reset) {\n          forcedReset = !!reset;\n          creationTitle.textContent = reset ? '\ud83d\udd10 R\u00e9initialisez votre mot de passe' : '\ud83d\udd10 Cr\u00e9ez votre mot de passe';\n          creationSubtitle.textContent = reset\n            ? 'Choisissez un nouveau mot de passe pour vous reconnecter la prochaine fois.'\n            : 'La prochaine fois, connectez-vous directement avec votre num\u00e9ro et ce mot de passe.';\n          cardCreation.style.display = 'block';\n        }\n\n        \/\/ === Etape 1 : saisie t\u00e9l\u00e9phone -> v\u00e9rifie si un compte existe ===\n        btnContinuer.addEventListener('click', async () => {\n          hideError();\n          resetResultsUI();\n          const tel = telephoneInit.value.trim();\n          if (!tel || tel.length < 8) {\n            showError('Merci de saisir un num\u00e9ro de t\u00e9l\u00e9phone valide.');\n            return;\n          }\n          currentTelephone = tel;\n\n          showLoader(true);\n          btnContinuer.disabled = true;\n          try {\n            const body = new URLSearchParams();\n            body.append('action', 'es_check_compte');\n            body.append('_ajax_nonce', nonce);\n            body.append('telephone', currentTelephone);\n\n            const resp = await fetch(ajaxUrl, { method: 'POST', body });\n            const data = await resp.json();\n\n            if (!data.success) {\n              throw new Error(data.data || 'Une erreur est survenue.');\n            }\n\n            if (data.data.has_account) {\n              goToStepPassword();\n            } else {\n              goToStepIdentite();\n            }\n          } catch (err) {\n            showError(err.message);\n          } finally {\n            showLoader(false);\n            btnContinuer.disabled = false;\n          }\n        });\n\n        btnRetourTel.addEventListener('click', () => {\n          goToStepTelephone();\n        });\n\n        linkOublie.addEventListener('click', (e) => {\n          e.preventDefault();\n          goToStepIdentite();\n        });\n\n        \/\/ === Etape 2A : connexion par mot de passe ===\n        btnLogin.addEventListener('click', async () => {\n          hideError();\n          resetResultsUI();\n          const pass = passwordLogin.value;\n          if (!pass) {\n            showError('Merci de saisir votre mot de passe.');\n            return;\n          }\n\n          showLoader(true);\n          btnLogin.disabled = true;\n          try {\n            const body = new URLSearchParams();\n            body.append('action', 'es_login_password');\n            body.append('_ajax_nonce', nonce);\n            body.append('telephone', currentTelephone);\n            body.append('password', pass);\n\n            const resp = await fetch(ajaxUrl, { method: 'POST', body });\n            const data = await resp.json();\n\n            if (!data.success) {\n              throw new Error(data.data || 'Num\u00e9ro ou mot de passe incorrect.');\n            }\n\n            renderResults(data.data.dossiers);\n          } catch (err) {\n            showError(err.message);\n          } finally {\n            showLoader(false);\n            btnLogin.disabled = false;\n          }\n        });\n\n        \/\/ === Etape 2B : recherche par nom \/ pr\u00e9nom \/ t\u00e9l\u00e9phone (premi\u00e8re visite ou reset) ===\n        btnRechercher.addEventListener('click', async () => {\n          hideError();\n          resetResultsUI();\n          const nom = nomInput.value.trim();\n          const prenom = prenomInput.value.trim();\n\n          if (!nom || !prenom) {\n            showError('Merci de renseigner votre nom et votre pr\u00e9nom.');\n            return;\n          }\n          currentNom = nom;\n          currentPrenom = prenom;\n\n          showLoader(true);\n          btnRechercher.disabled = true;\n          try {\n            const body = new URLSearchParams();\n            body.append('action', 'es_rechercher_dossier');\n            body.append('_ajax_nonce', nonce);\n            body.append('nom', currentNom);\n            body.append('prenom', currentPrenom);\n            body.append('telephone', currentTelephone);\n\n            const resp = await fetch(ajaxUrl, { method: 'POST', body });\n            const data = await resp.json();\n\n            if (!data.success) {\n              throw new Error(data.data || 'Erreur lors de la recherche de votre dossier.');\n            }\n\n            renderResults(data.data.dossiers);\n\n            if (data.data.dossiers && data.data.dossiers.length) {\n              if (forcedReset || !data.data.account_exists) {\n                showCreationPanel(!!data.data.account_exists);\n              }\n            }\n          } catch (err) {\n            showError(err.message);\n          } finally {\n            showLoader(false);\n            btnRechercher.disabled = false;\n          }\n        });\n\n        \/\/ === Cr\u00e9ation \/ r\u00e9initialisation du mot de passe ===\n        btnCreerPassword.addEventListener('click', async () => {\n          passwordError.style.display = 'none';\n          passwordSuccess.style.display = 'none';\n\n          const pass = newPassword.value;\n          const passConfirm = newPasswordConfirm.value;\n\n          if (pass.length < 6) {\n            passwordError.textContent = '\u26a0\ufe0f Le mot de passe doit contenir au moins 6 caract\u00e8res.';\n            passwordError.style.display = 'flex';\n            return;\n          }\n          if (pass !== passConfirm) {\n            passwordError.textContent = '\u26a0\ufe0f Les mots de passe ne correspondent pas.';\n            passwordError.style.display = 'flex';\n            return;\n          }\n\n          btnCreerPassword.disabled = true;\n          try {\n            const body = new URLSearchParams();\n            body.append('action', 'es_creer_mot_de_passe');\n            body.append('_ajax_nonce', nonce);\n            body.append('nom', currentNom);\n            body.append('prenom', currentPrenom);\n            body.append('telephone', currentTelephone);\n            body.append('password', pass);\n            body.append('password_confirm', passConfirm);\n\n            const resp = await fetch(ajaxUrl, { method: 'POST', body });\n            const data = await resp.json();\n\n            if (!data.success) {\n              throw new Error(data.data || 'Impossible d\\'enregistrer le mot de passe.');\n            }\n\n            passwordSuccess.textContent = 'Votre mot de passe a \u00e9t\u00e9 enregistr\u00e9. La prochaine fois, connectez-vous directement avec votre num\u00e9ro de t\u00e9l\u00e9phone.';\n            passwordSuccess.style.display = 'flex';\n            newPassword.value = '';\n            newPasswordConfirm.value = '';\n          } catch (err) {\n            passwordError.textContent = \"\u26a0\ufe0f \" + err.message;\n            passwordError.style.display = 'flex';\n          } finally {\n            btnCreerPassword.disabled = false;\n          }\n        });\n\n      })();\n    <\/script>\n    \n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-7c7837c elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"7c7837c\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-0bb6cd7\" data-id=\"0bb6cd7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Vos Exigences Font Notre Force VOS DOSSIERS EN TEMPS R\u00c9EL<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_glsr_average":0,"_glsr_ranking":0,"_glsr_reviews":0,"footnotes":""},"class_list":["post-2932","page","type-page","status-publish","hentry"],"featured_image_urls":{},"_links":{"self":[{"href":"https:\/\/eliteservicesenegal.com\/index.php\/wp-json\/wp\/v2\/pages\/2932","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/eliteservicesenegal.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/eliteservicesenegal.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/eliteservicesenegal.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/eliteservicesenegal.com\/index.php\/wp-json\/wp\/v2\/comments?post=2932"}],"version-history":[{"count":65,"href":"https:\/\/eliteservicesenegal.com\/index.php\/wp-json\/wp\/v2\/pages\/2932\/revisions"}],"predecessor-version":[{"id":3597,"href":"https:\/\/eliteservicesenegal.com\/index.php\/wp-json\/wp\/v2\/pages\/2932\/revisions\/3597"}],"wp:attachment":[{"href":"https:\/\/eliteservicesenegal.com\/index.php\/wp-json\/wp\/v2\/media?parent=2932"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}