templates/suggestion/index.html.twig line 1

Open in your IDE?
  1. {% extends 'layout.html.twig' %}
  2. {% block title %}
  3.   Suggestions IA | bambboo
  4. {% endblock %}
  5. {% block stylesheets %}
  6.   {{ parent() }}
  7.   <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/intl-tel-input/19.2.16/css/intlTelInput.css" />
  8.   <style>
  9.         .iti {
  10.             width: 100%;
  11.         }
  12.         .iti__flag-container {
  13.             display: block !important;
  14.         }
  15.         .iti__selected-flag {
  16.             display: flex !important;
  17.         }
  18.         .phone-client-error {
  19.             color: red;
  20.             font-size: 0.875em;
  21.             margin-top: 0.25rem;
  22.             display: none;
  23.         }
  24.         .server-form-error {
  25.             color: red;
  26.             font-size: 0.875em;
  27.             margin-top: 0.25rem;
  28.         }
  29.         #messageGreetingSelect,
  30.         #messageTextarea {
  31.             background-color: #f0f2f5;
  32.             border: none;
  33.             border-radius: 8px;
  34.             font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
  35.         }
  36.         #messageGreetingSelect:focus,
  37.         #messageTextarea:focus {
  38.             background-color: #ffffff;
  39.             box-shadow: none;
  40.             border: 1px solid #d1d1d1;
  41.         }
  42.         #messageGreetingSelect {
  43.             padding: 0.375rem 2.25rem 0.375rem 0.75rem;
  44.         }
  45.         .ai-comment-container {
  46.             max-height: 200px;
  47.             overflow: hidden;
  48.             position: relative;
  49.         }
  50.         .ai-comment-container::before {
  51.             content: '';
  52.             position: absolute;
  53.             bottom: 0;
  54.             left: 0;
  55.             right: 0;
  56.             height: 25px;
  57.             background: linear-gradient(to bottom, rgba(255, 255, 255, 0), rgba(255, 255, 255, 1));
  58.             pointer-events: none;
  59.             z-index: 1;
  60.         }
  61.         .ai-comment-container.expanded {
  62.             max-height: none;
  63.         }
  64.     /* Offcanvas LinkedIn : desktop 40% (40vw), min 440px pour que la phrase Chrome Store tienne sur une ligne */
  65.     .offcanvas.linkedin-connect-offcanvas {
  66.       --bs-offcanvas-width: 40vw;
  67.       min-width: 440px;
  68.     }
  69.     @media (max-width: 767.98px) {
  70.       .offcanvas.linkedin-connect-offcanvas {
  71.         --bs-offcanvas-width: 100vw;
  72.         min-width: 100%;
  73.       }
  74.     }
  75.     /* Masquer le guided tour sur les petits écrans (ici : < 1600px) */
  76.     @media (max-width: 1599.98px) {
  77.       #tour-start-modal,
  78.       #tour.popover-tour,
  79.       .popover-tour,
  80.       .tour-backdrop {
  81.         display: none !important;
  82.       }
  83.     }
  84.     /* Masquer l'option extension pour les navigateurs non-Chromium */
  85.     #btn-connexion-extension.hide-for-non-chromium {
  86.       display: none !important;
  87.       visibility: hidden !important;
  88.     }
  89.     /* Désactivation du picto par défaut de Bootstrap dans les accordions d'engagements */
  90.     #accordionEngagements .accordion-button::after,
  91.     #accordionEngagementsDesktop .accordion-button::after {
  92.       display: none !important;
  93.     }
  94.     /* Gestion des chevrons dans les accordions d'engagements */
  95.     #accordionEngagements .accordion-button.collapsed .bi-chevron-down,
  96.     #accordionEngagementsDesktop .accordion-button.collapsed .bi-chevron-down {
  97.       display: inline-block !important;
  98.     }
  99.     #accordionEngagements .accordion-button.collapsed .bi-chevron-up,
  100.     #accordionEngagementsDesktop .accordion-button.collapsed .bi-chevron-up {
  101.       display: none !important;
  102.     }
  103.     #accordionEngagements .accordion-button:not(.collapsed) .bi-chevron-down,
  104.     #accordionEngagementsDesktop .accordion-button:not(.collapsed) .bi-chevron-down {
  105.       display: none !important;
  106.     }
  107.     #accordionEngagements .accordion-button:not(.collapsed) .bi-chevron-up,
  108.     #accordionEngagementsDesktop .accordion-button:not(.collapsed) .bi-chevron-up {
  109.       display: inline-block !important;
  110.     }
  111.     /* Boutons "pré-étape" LinkedIn (ouvrir l'app) : hauteur augmentée */
  112.     .linkedin-prestep-btn {
  113.       min-height: 52px;
  114.       padding-top: 0.75rem;
  115.       padding-bottom: 0.75rem;
  116.     }
  117.     </style>
  118. {% endblock %}
  119. {% block body %}
  120.   {% set suggestionPageConfig = {
  121.     userId: app.user ? app.user.id : null,
  122.     chromeExtensionId: chrome_extension_id ?? null,
  123.     linkedinUrl: linkedinUrl ?? null,
  124.     hasExtension: hasExtension ? true : false,
  125.     hasCredentials: hasCredentials ? true : false,
  126.     userHasSeenPreviewModal: userHasSeenPreviewModal ? true : false,
  127.     urls: {
  128.       saveTimezone: path('api.onboarding.save_timezone'),
  129.       connectLinkedinExtension: path('api.onboarding.connect_linkedin_extension'),
  130.       connectLinkedin: path('api.onboarding.connect_linkedin'),
  131.       linkedinStatus: path('api.onboarding.linkedin_status'),
  132.       resolveCheckpoint: path('api.onboarding.resolve_checkpoint'),
  133.       initiateNetworkExtractionTemplate: path('user_initiate_network_extraction_v4', {id: 'PLACEHOLDER_ID'}),
  134.       login: path('app_login')
  135.     },
  136.     assets: {
  137.       bs5IntroTour: asset('js/bs5-intro-tour.js'),
  138.       intlTelInput: 'https://cdnjs.cloudflare.com/ajax/libs/intl-tel-input/19.2.16/js/intlTelInput.min.js',
  139.       intlTelInputUtils: 'https://cdnjs.cloudflare.com/ajax/libs/intl-tel-input/19.2.16/js/utils.js',
  140.       dotlottieWc: 'https://unpkg.com/@lottiefiles/dotlottie-wc@0.3.0/dist/dotlottie-wc.js',
  141.       dotlottiePlayer: 'https://unpkg.com/@dotlottie/player-component@2.7.12/dist/dotlottie-player.mjs'
  142.     }
  143.   } %}
  144.   <div id="suggestion-page-config" data-config="{{ suggestionPageConfig|json_encode|e('html_attr') }}"></div>
  145.   <script src="https://cdn.lordicon.com/lordicon.js"></script>
  146.   <!-- Pop-in "Je n'ai pas reçu la notification" + fallbacks (Carte 2) -->
  147.   <div class="modal fade" id="linkedin-no-notif-modal" tabindex="-1" aria-labelledby="linkedinNoNotifModalLabel" aria-hidden="true" data-bs-backdrop="static" data-bs-keyboard="false">
  148.     <div class="modal-dialog modal-dialog-centered">
  149.       <div class="modal-content p-4 ubuntu-regular">
  150.         <div class="modal-header border-0 text-center d-block">
  151.           <button type="button" class="btn-close position-absolute top-0 end-0 mt-3 me-3" data-bs-dismiss="modal" aria-label="Fermer"></button>
  152.           <h5 class="modal-title text-center ubuntu-bold" id="linkedinNoNotifModalLabel">
  153.             Avant de cliquer, ouvrez l'appli LinkedIn
  154.           </h5>
  155.         </div>
  156.         <div class="modal-body text-center">
  157.           <p class="ubuntu-regular mb-3">
  158.             Pour recevoir la notification, ouvrez votre appli LinkedIn avant de passer à l'étape suivante.
  159.           </p>
  160.           <button type="button" class="btn btn-primary w-100 mb-3" id="linkedin-no-notif-modal-opened-app" style="background-color: #0077B5; border-color: #0077B5;">
  161.             J'ai ouvert l'application LinkedIn
  162.           </button>
  163.           <button type="button" class="btn btn-link text-decoration-underline p-0 w-100 ubuntu-regular" id="linkedin-no-notif-modal-no-app" style="color: #1a1a1a;">
  164.             Je n'ai pas l'application LinkedIn
  165.           </button>
  166.         </div>
  167.       </div>
  168.     </div>
  169.   </div>
  170.   <!-- Modal mobile spécifique : Activez les notifications LinkedIn -->
  171.   <div class="modal fade" id="linkedin-no-notif-modal-mobile" tabindex="-1" aria-labelledby="linkedinNoNotifModalMobileLabel" aria-hidden="true" data-bs-backdrop="static" data-bs-keyboard="false">
  172.     <div class="modal-dialog modal-dialog-centered">
  173.       <div class="modal-content p-4 ubuntu-regular">
  174.         <div class="modal-header border-0 text-center d-block">
  175.           <button type="button" class="btn-close position-absolute top-0 end-0 mt-3 me-3" data-bs-dismiss="modal" aria-label="Fermer"></button>
  176.           <h5 class="modal-title text-center ubuntu-bold" id="linkedinNoNotifModalMobileLabel">
  177.             Activez les notifications LinkedIn
  178.           </h5>
  179.         </div>
  180.         <div class="modal-body text-center">
  181.           <p class="ubuntu-regular mb-3">
  182.             Pour valider votre connexion, vous devez activer les notifications de l'application LinkedIn dans les réglages de votre téléphone.
  183.           </p>
  184.           <ul class="text-start mb-3" style="list-style: decimal; padding-left: 1.25rem;">
  185.             <li>
  186.               Allez dans Réglages &gt; Notifications &gt; LinkedIn
  187.             </li>
  188.             <li>
  189.               Activez les notifications
  190.             </li>
  191.             <li>
  192.               Revenez ici et cliquez sur le bouton ci‑dessous
  193.             </li>
  194.           </ul>
  195.           <button type="button" class="btn btn-primary w-100 mb-3" id="linkedin-no-notif-modal-mobile-opened-app" style="background-color: #0077B5; border-color: #0077B5;">
  196.             J'ai activé les notifications ✓
  197.           </button>
  198.           <button type="button" class="btn btn-link text-decoration-underline p-0 w-100 ubuntu-regular" id="linkedin-no-notif-modal-mobile-no-app" style="color: #6c757d;">
  199.             Je n'ai pas l'application LinkedIn
  200.           </button>
  201.         </div>
  202.       </div>
  203.     </div>
  204.   </div>
  205.   <div class="modal fade" id="linkedin-no-app-extension-modal" tabindex="-1" aria-labelledby="linkedinNoAppExtensionModalLabel" aria-hidden="true" data-bs-backdrop="static" data-bs-keyboard="false">
  206.     <div class="modal-dialog modal-dialog-centered">
  207.       <div class="modal-content p-4 ubuntu-regular">
  208.         <div class="modal-header border-0 text-center d-block">
  209.           <button type="button" class="btn-close position-absolute top-0 end-0 mt-3 me-3" data-bs-dismiss="modal" aria-label="Fermer"></button>
  210.           <h5 class="modal-title text-center ubuntu-bold" id="linkedinNoAppExtensionModalLabel">
  211.             Connexion avec l'extension
  212.           </h5>
  213.         </div>
  214.         <div class="modal-body text-center">
  215.           <p class="ubuntu-regular mb-4">
  216.             Si vous n'avez pas l'application LinkedIn, il est préférable de vous connecter avec l'extension Bambboo.
  217.           </p>
  218.           <button type="button" class="btn btn-primary w-100 mb-2" id="linkedin-no-app-extension-modal-go" style="background-color: #0077B5; border-color: #0077B5;">
  219.             Passer à l'extension Bambboo
  220.           </button>
  221.           <button type="button" class="btn btn-link text-decoration-underline p-0 w-100 ubuntu-regular" id="linkedin-no-app-extension-modal-cancel" style="color: #1a1a1a;">
  222.             Annuler
  223.           </button>
  224.         </div>
  225.       </div>
  226.     </div>
  227.   </div>
  228.   <div class="modal fade" id="linkedin-no-app-install-modal" tabindex="-1" aria-labelledby="linkedinNoAppInstallModalLabel" aria-hidden="true" data-bs-backdrop="static" data-bs-keyboard="false">
  229.     <div class="modal-dialog modal-dialog-centered">
  230.       <div class="modal-content p-4 ubuntu-regular">
  231.         <div class="modal-header border-0 text-center d-block">
  232.           <button type="button" class="btn-close position-absolute top-0 end-0 mt-3 me-3" data-bs-dismiss="modal" aria-label="Fermer"></button>
  233.           <h5 class="modal-title text-center ubuntu-bold" id="linkedinNoAppInstallModalLabel">
  234.             Installer l'application LinkedIn
  235.           </h5>
  236.         </div>
  237.         <div class="modal-body text-center">
  238.           <p class="ubuntu-regular mb-4">
  239.             Il est nécessaire d'installer l'application LinkedIn pour pouvoir continuer.
  240.           </p>
  241.           <div class="d-flex flex-column gap-2 mb-4">
  242.             <a href="https://apps.apple.com/app/linkedin/id288429040" target="_blank" rel="noopener noreferrer" class="btn btn-outline-secondary">
  243.               App Store
  244.             </a>
  245.             <a href="https://play.google.com/store/apps/details?id=com.linkedin.android" target="_blank" rel="noopener noreferrer" class="btn btn-outline-secondary">
  246.               Play Store
  247.             </a>
  248.           </div>
  249.           <button type="button" class="btn btn-primary w-100 mb-2" id="linkedin-no-app-install-modal-done" style="background-color: #0077B5; border-color: #0077B5;">
  250.             J'ai installé l'application
  251.           </button>
  252.           <button type="button" class="btn btn-link text-decoration-underline p-0 w-100 ubuntu-regular" id="linkedin-no-app-install-modal-cancel" style="color: #1a1a1a;">
  253.             Annuler
  254.           </button>
  255.         </div>
  256.       </div>
  257.     </div>
  258.   </div>
  259.   {% if mobile_detect.isMobile() %}
  260.     <div class="container-fluid bg-clouded px-2 py-3 ubuntu min-vh-100 overflow-auto">
  261.       {% if not app.user.identityUid %}
  262.         <!-- BLOC : Connexion LinkedIn requise (Mobile) -->
  263.         <div id="connect-linkedin-container-mobile" class="container-fluid d-flex align-items-center justify-content-center" style="min-height: calc(100vh - 2rem); padding-top: 1rem; padding-bottom: 1rem;">
  264.           <div class="d-flex justify-content-center align-items-center px-3 w-100">
  265.             <div class="text-center p-4 p-md-5 rounded-3 w-100" style="background-color: #ffffff; box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1); max-width: 900px;">
  266.               <!-- Image LinkedIn -->
  267.               <div class="mb-3 mb-md-4 d-flex justify-content-center">
  268.                 <img src="{{ asset('img/connect-to-linkedin.png') }}" alt="Connectez votre compte LinkedIn" class="img-fluid" style="max-width: 60%; height: auto;"></div>
  269.                 <h2 class="ubuntu-bold fs-5 mb-2 px-2" style="color: #1a1a1a;">
  270.                   Connectez votre compte Linkedin
  271.                 </h2>
  272.                 <p class="ubuntu-regular mb-3 mb-md-4 fs-16 px-2" style="color: #1a1a1a;">
  273.                   Pour utiliser bambboo, vous devez connecter votre compte Linkedin.
  274.                 </p>
  275.                 <!-- Section Nos engagements de confidentialité - Accordion Bootstrap -->
  276.                 <div class="mb-3 mb-md-4">
  277.                   <div class="accordion" id="accordionEngagements">
  278.                     <div class="accordion-item" style="border: none; background-color: #f8f9fa; border-radius: 8px;">
  279.                       <h2 class="accordion-header" id="headingEngagements">
  280.                         <button class="accordion-button collapsed ubuntu-bold" type="button" data-bs-toggle="collapse" data-bs-target="#collapseEngagements" aria-expanded="false" aria-controls="collapseEngagements" style="background-color: #f8f9fa; color: #004d40; font-size: 0.875rem; box-shadow: none; padding: 1rem 1.25rem;">
  281.                           <img src="{{ asset('img/logomark.svg') }}" alt="bambboo" style="width: 20px; height: 20px; margin-right: 0.5rem; flex-shrink: 0;">
  282.                             <span class="flex-grow-1">
  283.                               Nos engagements de confidentialité
  284.                             </span>
  285.                             <i class="bi bi-chevron-down ms-2" style="color: #004d40; flex-shrink: 0;"></i>
  286.                             <i class="bi bi-chevron-up ms-2 d-none" style="color: #004d40; flex-shrink: 0;"></i>
  287.                           </button>
  288.                         </h2>
  289.                         <div id="collapseEngagements" class="accordion-collapse collapse" aria-labelledby="headingEngagements" data-bs-parent="#accordionEngagements">
  290.                           <div class="accordion-body text-start py-3 px-2 px-md-3" style="background-color: #f8f9fa;">
  291.                             <ul class="mb-0 ps-0" style="list-style: none; padding-left: 0;">
  292.                               <li class="mb-2 d-flex align-items-center">
  293.                                 <i class="bi bi-check-lg me-2" style="color: #198754; font-size: 0.9rem; font-weight: bold; flex-shrink: 0;"></i>
  294.                                 <span class="ubuntu-regular" style="color: #555; font-size: 0.875rem; line-height: 1.5; word-wrap: break-word; overflow-wrap: break-word;">
  295.                                   bambboo n'accède qu'aux données publiques de vos contacts LinkedIn
  296.                                 </span>
  297.                               </li>
  298.                               <li class="mb-2 d-flex align-items-center">
  299.                                 <i class="bi bi-check-lg me-2" style="color: #198754; font-size: 0.9rem; font-weight: bold; flex-shrink: 0;"></i>
  300.                                 <span class="ubuntu-regular" style="color: #555; font-size: 0.875rem; line-height: 1.5; word-wrap: break-word; overflow-wrap: break-word;">
  301.                                   L'usage des données a pour seule finalité d'identifier des opportunités professionnelles
  302.                                 </span>
  303.                               </li>
  304.                               <li class="mb-2 d-flex align-items-center">
  305.                                 <i class="bi bi-check-lg me-2" style="color: #198754; font-size: 0.9rem; font-weight: bold; flex-shrink: 0;"></i>
  306.                                 <span class="ubuntu-regular" style="color: #555; font-size: 0.875rem; line-height: 1.5; word-wrap: break-word; overflow-wrap: break-word;">
  307.                                   bambboo ne récolte aucune donnée sensible de vos contacts (ni tél., ni email)
  308.                                 </span>
  309.                               </li>
  310.                               <li class="mb-2 d-flex align-items-center">
  311.                                 <i class="bi bi-check-lg me-2" style="color: #198754; font-size: 0.9rem; font-weight: bold; flex-shrink: 0;"></i>
  312.                                 <span class="ubuntu-regular" style="color: #555; font-size: 0.875rem; line-height: 1.5; word-wrap: break-word; overflow-wrap: break-word;">
  313.                                   bambboo n'accède à aucun de vos messages ni activités LinkedIn
  314.                                 </span>
  315.                               </li>
  316.                               <li class="mb-0 d-flex align-items-center">
  317.                                 <i class="bi bi-check-lg me-2" style="color: #198754; font-size: 0.9rem; font-weight: bold; flex-shrink: 0;"></i>
  318.                                 <span class="ubuntu-regular" style="color: #555; font-size: 0.875rem; line-height: 1.5; word-wrap: break-word; overflow-wrap: break-word;">
  319.                                   bambboo applique le RGPD avec rigueur et transparence
  320.                                 </span>
  321.                               </li>
  322.                             </ul>
  323.                           </div>
  324.                         </div>
  325.                       </div>
  326.                     </div>
  327.                   </div>
  328.                   <button type="button" class="btn btn-primary px-4 py-2 ubuntu-medium w-100 w-md-auto" data-bs-toggle="offcanvas" data-bs-target="#linkedinConnectOffcanvas" aria-controls="linkedinConnectOffcanvas" style="background-color: #0077B5; border-color: #0077B5;">
  329.                     Connecter mon compte LinkedIn
  330.                   </button>
  331.                 </div>
  332.               </div>
  333.             </div>
  334.           {% endif %}
  335.           {% if app.user.identityUid %}
  336.             <div class="bambboo-mobile-only" style="display: none;">
  337.               {% if hasSuggestions %}
  338.                 <h1 id="page-main-title-mobile" class="ubuntu-bold fs-18 mb-3">
  339.                   Profils détectés par l'IA (
  340.                   {{ allPendingSuggestionsCount }}
  341.                   )
  342.                 </h1>
  343.                 <div class="" id="suggestions-global-container-mobile" data-is-tour-hidden="{{ is_tour_hidden ? 'true' : 'false' }}" data-hide-tour-url="{{ path('ajax_user_hide_suggestion_tour') }}" data-company-name="{{ company_name|e('html_attr') }}" data-create-message-url="{{ path('ajax_message_create') }}" data-update-refusal-url="{{ path('ajax_suggestion_update_refusal') }}" data-job-details-url-template="/job/JOB_ID_PLACEHOLDER/preview" data-ai-analysis-url-template="{{ path('api_suggestion_analyze', {'id': 'SUGGESTION_ID_PLACEHOLDER'}) }}" data-mark-preview-seen-url="{{ path('ajax_user_mark_linkedin_preview_modal_shown') }}" data-load-next-url="{{ path('ajax_suggestion_load_next') }}" data-template-formal="{{ user_template_formal|e('html_attr') }}" data-template-informal="{{ user_template_informal|e('html_attr') }}" data-greeting-informal="{{ user_greeting_informal|e('html_attr') }}">
  344.                   <div id="next-suggestion-loader-mobile" class="text-center mt-5" style="display: none;">
  345.                     <div class="spinner-border text-success" role="status">
  346.                       <span class="visually-hidden">
  347.                         Loading...
  348.                       </span>
  349.                     </div>
  350.                     <p class="mt-3 ubuntu-medium text-muted">
  351.                       Nous recherchons d'autres profils...
  352.                     </p>
  353.                   </div>
  354.                   <div id="current-job-offer-header-mobile" class="container job-offer-header-section mb-3" style="display: none;">
  355.                     <h2 id="current-job-title-mobile" class="ubuntu-bold fs-16 mb-1 d-flex align-items-center">
  356.                       <i class="bi bi-briefcase-fill me-2 text-success"></i>
  357.                       <a href="#" id="job-title-link-mobile" class="flex-grow-1 text-decoration-underline text-success" style="cursor: pointer;">
  358.                         <span id="job-title-text-mobile">
  359.                           Chargement de l'offre...
  360.                         </span>
  361.                       </a>
  362.                     </h2>
  363.                   </div>
  364.                   <div class="profile-stack-container-mobile mb-4" id="tour-step-2-mobile">
  365.                     {% for jobId, jobData in suggestionsByJob %}
  366.                       {% set job = jobData.job %}
  367.                       {% set currentSuggestionsInJob = jobData.suggestions %}
  368.                       {% set suggestionCountForThisJobInLoop = currentSuggestionsInJob|length %}
  369.                       {% if currentSuggestionsInJob|length > 0 %}
  370.                         {% for suggestion in currentSuggestionsInJob %}
  371.                           <div class="profile-card mb-4 rounded-2" data-profile-id="{{ suggestion.network.id }}" data-suggestion-id="{{ suggestion.id }}" data-job-id="{{ job.id }}" data-job-title="{{ job.title|escape('html_attr') }}" data-job-suggestion-count="{{ currentSuggestionsInJob|length }}" data-network-firstname="{{ suggestion.network.firstname|default('')|escape('html_attr') }}">
  372.                             <div class="card-content-wrapper">
  373.                               <div class="text-center mb-3">
  374.                                 {% if suggestion.network.photo %}
  375.                                   <img
  376.                                   src="{{ asset(suggestion.network.photo) }}" alt="{{ suggestion.network.firstname }} {{ suggestion.network.lastname }}" class="rounded-circle object-fit-cover mb-2" width="100" height="100">
  377.                                     {% else %}
  378.                                     <div class="initials-container">
  379.                                       {{ suggestion.network.firstname|slice(0, 1)|upper }}
  380.                                       {{ suggestion.network.lastname|slice(0, 1)|upper }}
  381.                                     </div>
  382.                                   {% endif %}
  383.                                   <div>
  384.                                     <h5 class="mb-3 ubuntu-medium">
  385.                                       {% if suggestion.network.linkedin %}
  386.                                         <a href="{{ suggestion.network.linkedin }}" target="_blank" class="text-dark text-decoration-none">
  387.                                           <i class="bi bi-linkedin me-1" style="color: #0A66C2;"></i>
  388.                                           {{ suggestion.network.firstname ~ ' ' ~  suggestion.network.lastname }}
  389.                                         </a>
  390.                                       {% else %}
  391.                                         {{ suggestion.network.firstname ~ ' ' ~  suggestion.network.lastname }}
  392.                                       {% endif %}
  393.                                     </h5>
  394.                                     <p class="mb-4 text-muted small ubuntu-light">
  395.                                       {{ suggestion.network.job }}
  396.                                     </p>
  397.                                   </div>
  398.                                 </div>
  399.                                 <div class="mb-3 ubuntu-regular ai-comment-container" style="font-size: 0.85rem;">
  400.                                   {% set lines = suggestion.comment|split('\n') %}
  401.                                   {% if lines|length > 0 %}
  402.                                     {% set hasBulletPoints = false %}
  403.                                     {% for line in lines %}
  404.                                       {% if line|trim|slice(0, 2) == '- ' %}
  405.                                         {% set hasBulletPoints = true %}
  406.                                       {% endif %}
  407.                                     {% endfor %}
  408.                                     {% if hasBulletPoints %}
  409.                                       <ul style="padding-left: 1.2rem; margin-bottom: 0; list-style-type: none;">
  410.                                         {% set bulletCount = 0 %}
  411.                                         {% for line in lines %}
  412.                                           {% set cleanLine = line|trim %}
  413.                                           {% if cleanLine is not empty and cleanLine|slice(0, 2) == '- ' and bulletCount < 2 %}
  414.                                             {% set bulletCount = bulletCount + 1 %}
  415.                                             <li style="margin-bottom: 0.5rem;">
  416.                                               <span style="color: #6c757d; margin-right: 0.5rem;">
  417.                                                 •
  418.                                               </span>
  419.                                               {{ cleanLine|slice(2) }}
  420.                                             </li>
  421.                                           {% endif %}
  422.                                         {% endfor %}
  423.                                       </ul>
  424.                                     {% else %}
  425.                                       <p style="margin-bottom: 0;">
  426.                                         {{ suggestion.comment }}
  427.                                       </p>
  428.                                     {% endif %}
  429.                                   {% endif %}
  430.                                 </div>
  431.                                 <div class="mb-3 text-center">
  432.                                   <button class="btn btn-outline-primary btn-sm ubuntu btn-view-ai-analysis rounded-pill px-4" data-bs-toggle="modal" data-bs-target="#aiAnalysisModal" data-suggestion-id="{{ suggestion.id }}">
  433.                                     En savoir plus...
  434.                                   </button>
  435.                                 </div>
  436.                                 <div class="bg-light pt-1 pb-3 px-2 rounded" id="tour-step-3-mobile">
  437.                                   <p class="mt-2 text-center fw-bold small mb-3 ubuntu-medium fs-13">
  438.                                     Comment lui envoyer l'opportunité ?
  439.                                   </p>
  440.                                   <div class="row gx-2">
  441.                                     <div class="col">
  442.                                       <a href="#" class="btn btn-outline-clover-light btn-action-formal ubuntu-regular w-100 px-3 py-2 fs-14" data-action="formal">
  443.                                         Vouvoyer
  444.                                       </a>
  445.                                     </div>
  446.                                     <div class="col">
  447.                                       <a href="#" class="btn btn-clover btn-action-informal ubuntu-regular w-100 px-3 py-2 fs-14" data-action="informal">
  448.                                         Tutoyer
  449.                                       </a>
  450.                                     </div>
  451.                                   </div>
  452.                                   <div class="text-center mt-3">
  453.                                     <a href="#" class="text-danger small btn-action-reject ubuntu-regular fs-14" data-action="reject">
  454.                                       <i class="bi bi-x-circle me-1"></i>
  455.                                       Ne pas lui envoyer l'opportunité
  456.                                     </a>
  457.                                   </div>
  458.                                 </div>
  459.                               </div>
  460.                             </div>
  461.                           {% endfor %}
  462.                         {% endif %}
  463.                       {% endfor %}
  464.                     </div>
  465.                   </div>
  466.                 {% else %}
  467.                   {% if hasEverProcessed %}
  468.                     <div class="mt-5 bg-white border rounded-2 p-5 text-center">
  469.                       <div class="col-10 offset-1 text-center" style="max-width: 360px; margin: 0 auto;">
  470.                         <h2 class="ubuntu-bold fs-4 mb-5">
  471.                           Bravo &#33; 🥳&nbsp;Vous avez partagé toutes les opportunités du moment.
  472.                         </h2>
  473.                         <p class="ubuntu-regular fs-5">
  474.                           Nous vous avertirons dès qu’une nouvelle pépite sera dénichée.
  475.                         </p>
  476.                         <div class="d-flex justify-content-center mt-3">
  477.                           <div class="spinner-border text-success" role="status" style="width: 3rem; height: 3rem;">
  478.                             <span class="visually-hidden">
  479.                               Chargement...
  480.                             </span>
  481.                           </div>
  482.                         </div>
  483.                       </div>
  484.                     </div>
  485.                   {% else %}
  486.                     <div class="mt-5 bg-white border rounded-2 p-4 p-md-5 text-center">
  487.                       <h2 class="ubuntu-bold fs-5 mb-4">
  488.                         Notre IA est en train de dénicher les pépites de votre réseau
  489.                       </h2>
  490.                       <div class="col-12 text-center ubuntu-regular">
  491.                         <ul class="list-unstyled d-inline-block text-start mb-4" style="font-size: 0.95rem;">
  492.                           {% if not phoneForm %}
  493.                             <li class="mb-2">
  494.                               ⏳ Cela peut prendre quelques heures voire quelques jours.
  495.                             </li>
  496.                             <li class="mb-2">
  497.                               🗨️ Vous recevrez un SMS quand des talents seront identifiés.
  498.                             </li>
  499.                             <li class="mb-2">
  500.                               📨 Vous leur partagerez alors les offres d'emploi en 1 clic depuis bambboo.
  501.                             </li>
  502.                           {% else %}
  503.                             <li class="mb-2">
  504.                               ⏳ Cela peut prendre quelques heures voire quelques jours.
  505.                             </li>
  506.                             <li class="mb-2 phone-prompt-message">
  507.                               🗨️ Laissez-nous votre numéro de téléphone pour recevoir un SMS quand des talents seront identifiés :
  508.                             </li>
  509.                           {% endif %}
  510.                         </ul>
  511.                         {% if phoneForm %}
  512.                           <div class="phone-form-container col-12 col-md-6 offset-md-3 mb-4" data-phone-input-id="{{ phoneForm.phone_input.vars.id }}" data-phone-hidden-id="{{ phoneForm.phone.vars.id }}" data-phone-client-error-base-id="phone-client-error-{{ phoneForm.phone_input.vars.id }}">
  513.                             {{ form_start(phoneForm, {'attr': {'class': 'user-phone-form', 'novalidate': 'novalidate' }}
  514.                             ) }}
  515.                             <div class="mb-3 position-relative">
  516.                               {{ form_widget(phoneForm.phone_input, {'attr': {'class': 'form-control form-control-lg' }}
  517.                               ) }}
  518.                               {{ form_widget(phoneForm.phone) }}
  519.                               <div id="phone-client-error-{{ phoneForm.phone_input.vars.id }}" class="phone-client-error"></div>
  520.                               <div class="server-form-error">
  521.                                 {{ form_errors(phoneForm.phone) }}
  522.                               </div>
  523.                               <div class="phone-form-general-error server-form-error" style="display:none;"></div>
  524.                             </div>
  525.                             <button type="submit" class="btn btn-clover btn-lg">
  526.                               Enregistrer mon numéro
  527.                             </button>
  528.                             {{ form_end(phoneForm) }}
  529.                           </div>
  530.                         {% endif %}
  531.                         <div class="d-flex justify-content-center mt-3">
  532.                           <div class="col-md-6 mt-5">
  533.                             <lord-icon src="https://cdn.lordicon.com/okgbpdra.json" trigger="loop" colors="primary:#08a88a,secondary:#0b3a3c" style="width:250px;height:250px"></lord-icon>
  534.                           </div>
  535.                         </div>
  536.                       </div>
  537.                     </div>
  538.                   {% endif %}
  539.                 {% endif %}
  540.               </div>
  541.             </div>
  542.           {% endif %}
  543.           <div class="modal fade" id="jobDetailsModalMobile" tabindex="-1" aria-labelledby="jobDetailsModalMobileLabel" aria-hidden="true">
  544.             <div class="modal-dialog modal-dialog-centered modal-lg">
  545.               <div class="modal-content">
  546.                 <div class="modal-header">
  547.                   <h5 class="modal-title ubuntu-bold" id="jobDetailsModalMobileLabel">
  548.                     Détails de l'opportunité
  549.                   </h5>
  550.                   <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
  551.                 </div>
  552.                 <div class="modal-body" id="jobDetailsModalMobileBody">
  553.                   <div class="text-center py-5">
  554.                     <div class="spinner-border text-primary" role="status">
  555.                       <span class="visually-hidden">
  556.                         Chargement...
  557.                       </span>
  558.                     </div>
  559.                   </div>
  560.                 </div>
  561.               </div>
  562.             </div>
  563.           </div>
  564.           <!-- Modals pour Vouvoyer / Tutoyer / Ne pas envoyer (mobile : doivent être dans le bloc mobile pour exister dans le DOM) -->
  565.           <div class="modal fade" id="confirmShareModal" tabindex="-1" aria-labelledby="confirmShareModalLabel" aria-hidden="true">
  566.             <div class="modal-dialog modal-dialog-centered">
  567.               <div class="modal-content p-3 ubuntu-regular">
  568.                 <div class="modal-header border-0">
  569.                   <h5 class="modal-title" id="confirmShareModalLabel">
  570.                     <i class="bi bi-lightbulb me-2" style="color: #f8c958;"></i>
  571.                     <strong>
  572.                       Partagez lui l'opportunité même si vous ne vous connaissez pas
  573.                     </strong>
  574.                   </h5>
  575.                   <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close" style="margin-top: -80px !important;"></button>
  576.                 </div>
  577.                 <div class="modal-body">
  578.                   <p>
  579.                     Au pire, on vous dira merci.
  580.                     <br/>
  581.                     Au mieux, ça va lui changer la vie.
  582.                   </p>
  583.                 </div>
  584.                 <div class="modal-footer border-0 justify-content-center d-flex">
  585.                   <button type="button" class="btn btn-secondary flex-fill" id="confirmShareModalRejectButton">
  586.                     Non, vraiment pas
  587.                   </button>
  588.                   <button type="button" class="btn btn-clover flex-fill" id="confirmShareModalAcceptButton">
  589.                     J'ai compris, je partage
  590.                   </button>
  591.                 </div>
  592.               </div>
  593.             </div>
  594.           </div>
  595.           <div class="modal fade" id="refusalReasonModal" tabindex="-1" aria-labelledby="refusalReasonModalLabel" aria-hidden="true">
  596.             <div class="modal-dialog modal-dialog-centered">
  597.               <div class="modal-content p-3 ubuntu-regular">
  598.                 <div class="modal-header">
  599.                   <h5 class="modal-title" id="refusalReasonModalLabel">
  600.                     <strong>
  601.                       Pourquoi refusez-vous de partager l'opportunité avec ce profil ?
  602.                     </strong>
  603.                     <small class="text-muted" style="font-size: 0.6em;">
  604.                       *obligatoire
  605.                     </small>
  606.                   </h5>
  607.                   <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close" style="margin-top: -80px !important;"></button>
  608.                 </div>
  609.                 <div class="modal-body">
  610.                   <form id="refusalReasonForm">
  611.                     <div class="form-check mb-2">
  612.                       <input class="form-check-input" type="radio" name="refusalReason" id="reasonKnownNotGood" value="Je le connais et je le déconseille.">
  613.                         <label class="form-check-label" for="reasonKnownNotGood">
  614.                           Je le connais et je le déconseille.
  615.                         </label>
  616.                       </div>
  617.                       <div class="form-check mb-2">
  618.                         <input class="form-check-input" type="radio" name="refusalReason" id="reasonNotKnownEnough" value="Je ne le connais pas, mais il ne me semble pas pertinent.">
  619.                           <label class="form-check-label" for="reasonNotKnownEnough">
  620.                             Je ne le connais pas, mais il ne me semble pas pertinent.
  621.                           </label>
  622.                         </div>
  623.                         <div class="form-check mb-3">
  624.                           <input class="form-check-input" type="radio" name="refusalReason" id="reasonOther" value="Autre">
  625.                             <label class="form-check-label" for="reasonOther">
  626.                               Autre
  627.                             </label>
  628.                           </div>
  629.                           <div class="mb-3" id="otherReasonTextContainer" style="display: none;">
  630.                             <textarea class="form-control" id="otherReasonText" rows="3" placeholder="Indiquez-nous la raison pour laquelle vous souhaitez retirer cette personne de la liste des candidats."></textarea>
  631.                           </div>
  632.                           <div id="refusalError" class="text-danger small mb-2" style="display: none;">
  633.                             Veuillez sélectionner une raison ou la spécifier.
  634.                           </div>
  635.                         </form>
  636.                       </div>
  637.                       <div class="modal-footer">
  638.                         <button type="button" class="btn btn-clover" id="submitRefusalReasonButton">
  639.                           Valider ma réponse
  640.                         </button>
  641.                       </div>
  642.                     </div>
  643.                   </div>
  644.                 </div>
  645.                 <div class="modal fade" id="sendMessageModal" tabindex="-1" aria-labelledby="sendMessageModalLabel" aria-hidden="true" data-bs-backdrop="static" data-bs-keyboard="false">
  646.                   <div class="modal-dialog modal-dialog-centered">
  647.                     <div class="modal-content p-3 ubuntu-regular">
  648.                       <div class="modal-header border-0">
  649.                         <h5 class="modal-title" id="sendMessageModalLabel">
  650.                           Votre message
  651.                         </h5>
  652.                         <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
  653.                       </div>
  654.                       <div class="modal-body">
  655.                         <form id="sendMessageForm">
  656.                           <div class="d-flex align-items-center mb-2">
  657.                             <select class="form-select" id="messageGreetingSelect" style="width: auto;">
  658.                               <option>
  659.                                 Bonjour
  660.                               </option>
  661.                               <option>
  662.                                 Salut
  663.                               </option>
  664.                               <option>
  665.                                 Hello
  666.                               </option>
  667.                               <option>
  668.                                 Hi
  669.                               </option>
  670.                               <option>
  671.                                 Coucou
  672.                               </option>
  673.                             </select>
  674.                             <span id="messageGreetingName" class="ms-2 fw-bold"></span>
  675.                           </div>
  676.                           <div class="mb-3">
  677.                             <textarea class="form-control" id="messageTextarea" rows="10" required></textarea>
  678.                           </div>
  679.                           <div class="form-check d-flex align-items-center">
  680.                             <input class="form-check-input mt-0" type="checkbox" value="" id="saveAsTemplateCheckbox" style="margin-right: 10px;">
  681.                               <label class="form-check-label" for="saveAsTemplateCheckbox" id="saveAsTemplateLabel" style="line-height: 1.2;"></label>
  682.                             </div>
  683.                           </form>
  684.                         </div>
  685.                         <div class="modal-footer border-0 justify-content-center">
  686.                           <button type="button" class="btn btn-clover px-5" id="sendMessageModalSendButton">
  687.                             Envoyer via LinkedIn
  688.                           </button>
  689.                         </div>
  690.                       </div>
  691.                     </div>
  692.                   </div>
  693.                 </div>
  694.                 <style>
  695.       /* Mobile only (ne dépend pas de Bootstrap)
  696.          - caché par défaut (sécurité desktop)
  697.          - affiché uniquement sur < 768px */
  698.       .bambboo-mobile-only {
  699.         display: none;
  700.       }
  701.       @media (max-width: 767.98px) {
  702.         .bambboo-mobile-only {
  703.           display: block !important;
  704.         }
  705.       }
  706.       /* Desktop : 40% de largeur */
  707.       .offcanvas.linkedin-connect-offcanvas {
  708.         width: 40% !important;
  709.       }
  710.       /* IMPORTANT : s'assurer que l'attribut HTML "hidden" masque réellement l'élément
  711.          (certains styles peuvent override le [hidden] UA stylesheet). */
  712.       #linkedinConnectOffcanvas [hidden] {
  713.         display: none !important;
  714.       }
  715.       
  716.       @media (max-width: 767.98px) {
  717.         .offcanvas.linkedin-connect-offcanvas,
  718.         .offcanvas.linkedin-connect-offcanvas.show,
  719.         .offcanvas.linkedin-connect-offcanvas.showing {
  720.           width: 100% !important;
  721.           max-width: 100% !important;
  722.         }
  723.         
  724.         #linkedinConnectOffcanvas {
  725.           width: 100% !important;
  726.           max-width: 100% !important;
  727.         }
  728.         
  729.         .linkedin-connect-offcanvas .offcanvas-body {
  730.           padding: 1rem !important;
  731.         }
  732.         
  733.         .linkedin-connect-offcanvas .fs-16 {
  734.           font-size: 0.9rem !important;
  735.         }
  736.         
  737.         .linkedin-connect-offcanvas .p-4 {
  738.           padding: 0.75rem !important;
  739.         }
  740.         
  741.         #linkedin-login-form,
  742.         #linkedin-checkpoint-form {
  743.           padding-left: 1rem !important;
  744.           padding-right: 1rem !important;
  745.           padding-top: 1rem !important;
  746.         }
  747.         
  748.         .linkedin-connect-offcanvas .linkedin-option-icon,
  749.         .linkedin-connect-offcanvas .me-3 {
  750.           width: 36px !important;
  751.           height: 36px !important;
  752.         }
  753.       }
  754.       
  755.       .linkedin-option-btn-primary:hover {
  756.         background-color: #E0F2FF !important;
  757.         border-color: #005885 !important;
  758.         transform: translateY(-2px);
  759.         box-shadow: 0 4px 12px rgba(0, 119, 181, 0.2);
  760.       }
  761.       
  762.       .linkedin-option-btn-primary:hover .me-3 {
  763.         background-color: #005885 !important;
  764.         transform: scale(1.05);
  765.       }
  766.       
  767.       .linkedin-option-btn-secondary:hover {
  768.         background-color: #f8f9fa !important;
  769.         border-color: #0077B5 !important;
  770.         border-width: 2px !important;
  771.         transform: translateY(-2px);
  772.         box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
  773.       }
  774.       
  775.       .linkedin-option-btn-secondary:hover .linkedin-option-icon {
  776.         background-color: #0077B5 !important;
  777.       }
  778.       
  779.       .linkedin-option-btn-secondary:hover .linkedin-option-icon .bi,
  780.       .linkedin-option-btn-secondary:hover .linkedin-option-icon i {
  781.         color: #fff !important;
  782.       }
  783.       
  784.       .linkedin-option-btn-secondary:hover .linkedin-option-icon svg path {
  785.         stroke: white !important;
  786.       }
  787.       
  788.       .linkedin-option-btn {
  789.         cursor: pointer;
  790.       }
  791.       
  792.       /* Liste ordonnée "Mot de passe oublié ?" : éviter les doublons (marker natif VS compteur fallback) */
  793.       #forgot-password-content ol {
  794.         margin-left: 0 !important;
  795.         padding-left: 0 !important;
  796.       }
  797.       /* Par défaut (desktop) : masquer le titre mobile */
  798.       .browser-recovery-box-body .browser-recovery-mobile-title {
  799.         display: none !important;
  800.       }
  801.       /* Mobile : masquer uniquement l'en-tête de la boîte (garder les étapes) */
  802.       @media (max-width: 767.98px) {
  803.         .browser-recovery-box-header {
  804.           display: none !important;
  805.         }
  806.         /* Mobile : aérer les étapes + afficher un titre contextuel */
  807.         .browser-recovery-box-body {
  808.           padding-left: 0.75rem;
  809.         }
  810.         .browser-recovery-box-body .browser-recovery-mobile-title {
  811.           display: block !important;
  812.         }
  813.       }
  814.       /* Fallback (navigateurs sans ::marker) : compteur custom */
  815.       #forgot-password-content ol {
  816.         counter-reset: list-counter;
  817.         list-style: none;
  818.       }
  819.       #forgot-password-content ol li {
  820.         counter-increment: list-counter;
  821.         position: relative;
  822.         padding-left: 0;
  823.       }
  824.       #forgot-password-content ol li::before {
  825.         content: counter(list-counter) ".";
  826.         position: absolute;
  827.         left: 0;
  828.         color: #0077B5 !important;
  829.         font-weight: bold !important;
  830.       }
  831.       /* Si ::marker est supporté, on repasse sur la numérotation native et on désactive le fallback */
  832.       @supports selector(::marker) {
  833.         #forgot-password-content ol {
  834.           list-style: decimal;
  835.           counter-reset: none;
  836.         }
  837.         #forgot-password-content ol li {
  838.           counter-increment: none;
  839.           padding-left: 0;
  840.           position: static;
  841.         }
  842.         #forgot-password-content ol li::before {
  843.           content: none;
  844.         }
  845.         #forgot-password-content ol li::marker {
  846.           color: #0077B5 !important;
  847.           font-weight: bold !important;
  848.           font-size: 1em !important;
  849.         }
  850.       }
  851.       
  852.       #forgot-password-toggle .bi-key {
  853.         color: #0abf7f !important;
  854.         font-weight: bold !important;
  855.       }
  856.       /* Zone tactile minimale pour le bouton œil (affichage mot de passe) sur mobile */
  857.       #linkedinConnectOffcanvas .password-toggle-btn {
  858.         min-width: 44px;
  859.         min-height: 44px;
  860.         cursor: pointer;
  861.       }
  862.       
  863.       .linkedin-option-btn:active {
  864.         transform: translateY(0);
  865.       }
  866.       
  867.     </style>
  868.                 <!-- Styles pour l'offcanvas LinkedIn (responsive) -->
  869.                 <!-- Offcanvas pour la connexion LinkedIn - Accessible depuis mobile et desktop -->
  870.                   <div class="offcanvas offcanvas-end linkedin-connect-offcanvas" tabindex="-1" id="linkedinConnectOffcanvas" data-bs-backdrop="static" data-bs-keyboard="false"> <div class="offcanvas-header border-bottom d-flex justify-content-between align-items-center" style="padding: 1rem 1.5rem;">
  871.                     <h5 class="offcanvas-title ubuntu-bold fs-16 d-flex align-items-center mb-0" id="linkedinConnectOffcanvasLabel" style="display: flex !important;">
  872.                       <i class="bi bi-linkedin me-2" style="color: #0077B5; font-size: 1.5rem;"></i>
  873.                       Connectez votre compte Linkedin
  874.                     </h5>
  875.                     <button type="button" class="btn btn-link text-dark p-0 ms-auto" data-bs-dismiss="offcanvas" aria-label="Close" style="opacity: 1; font-size: 1.5rem; text-decoration: none; line-height: 1;">
  876.                       <i class="fa-solid fa-xmark"></i>
  877.                     </button>
  878.                   </div>
  879.                   <div class="offcanvas-body linkedin-offcanvas-body px-4 py-4">
  880.                     <!-- Conteneur pour les options (masqué sur mobile, affiché sur desktop) -->
  881.                     <div id="linkedin-connection-options" class="d-none d-md-block">
  882.                       <!-- Option 1 : Connexion avec identifiants LinkedIn -->
  883.                       <button type="button" class="btn btn-link text-decoration-none p-0 mb-3 w-100 text-start linkedin-option-btn linkedin-option-btn-primary" id="btn-connexion-infinie" style="border: 2px solid #0077B5; background-color: #F0F8FF; border-radius: 8px; transition: all 0.3s ease;">
  884.                         <div class="p-4">
  885.                           <div class="d-flex align-items-start">
  886.                             <div class="me-3" style="width: 48px; height: 48px; display: flex; align-items: center; justify-content: center; background-color: #0077B5; border-radius: 8px; flex-shrink: 0; transition: all 0.3s ease;">
  887.                               <i class="bi bi-shield-lock" style="color: white; font-size: 24px;"></i>
  888.                             </div>
  889.                             <div class="flex-grow-1">
  890.                               <div class="d-flex align-items-start justify-content-between mb-2">
  891.                                 <h6 class="ubuntu-bold mb-0 fs-16" style="color: #1a1a1a;">
  892.                                   Connexion avec vos identifiants Linkedin
  893.                                 </h6>
  894.                                 <span class="badge bg-primary ubuntu-medium fs-16">
  895.                                   Recommandé
  896.                                 </span>
  897.                               </div>
  898.                               <p class="ubuntu-regular mb-0 fs-16" style="color: #666;">
  899.                                 Pour une connexion robuste et une reconnexion facile depuis n'importe quel appareil.
  900.                               </p>
  901.                             </div>
  902.                           </div>
  903.                         </div>
  904.                       </button>
  905.                       <!-- Option 2 : Se connecter avec l'extension (masqué sur mobile et quand formulaire affiché) -->
  906.                       <button type="button" class="btn btn-link text-decoration-none p-0 mb-3 w-100 text-start linkedin-option-btn linkedin-option-btn-secondary d-none d-md-block" id="btn-connexion-extension" style="border: 1px solid #dee2e6; background-color: #ffffff; border-radius: 8px; transition: all 0.3s ease;">
  907.                         <div class="p-4">
  908.                           <div class="d-flex align-items-start">
  909.                             <div class="me-3 linkedin-option-icon" style="width: 48px; height: 48px; display: flex; align-items: center; justify-content: center; background-color: #f8f9fa; border-radius: 8px; flex-shrink: 0; transition: all 0.3s ease;">
  910.                               <i class="bi bi-puzzle" style="color: #666; font-size: 24px;"></i>
  911.                             </div>
  912.                             <div class="flex-grow-1">
  913.                               <h6 class="ubuntu-bold mb-2 fs-16" style="color: #1a1a1a;">
  914.                                 Connexion avec l'extension bambboo
  915.                               </h6>
  916.                               <p class="ubuntu-regular mb-0 fs-16" style="color: #666;">
  917.                                 En cas de problème avec vos identifiants, l'extension bambboo permet d'utiliser la session Linkedin qui se trouve dans ce navigateur.
  918.                               </p>
  919.                             </div>
  920.                           </div>
  921.                         </div>
  922.                       </button>
  923.                     </div>
  924.                     <!-- Zone de statut pour la connexion via extension (cachée par défaut) -->
  925.                     <div id="linkedin-extension-status" style="display: none;">
  926.                       <button type="button" class="btn btn-link text-decoration-none p-0 mb-3 ubuntu-medium fs-16" id="btn-back-extension-install" style="color: #0077B5; padding: 0 !important;">
  927.                         <i class="bi bi-arrow-left me-2"></i>
  928.                         Retour
  929.                       </button>
  930.                       <div class="alert alert-primary mb-3 fs-16" id="extension-status-message" style="background-color: #E8F4F8; border-color: #0077B5; color: #004085;">
  931.                         <div class="d-flex align-items-center">
  932.                           <div class="spinner-border spinner-border-sm me-2" role="status" style="width: 1rem; height: 1rem;">
  933.                             <span class="visually-hidden">
  934.                               Chargement...
  935.                             </span>
  936.                           </div>
  937.                           <span id="extension-status-text">
  938.                             Vérification de l'extension...
  939.                           </span>
  940.                         </div>
  941.                       </div>
  942.                       <div class="alert alert-primary mb-3 fs-16" id="extension-connect-linkedin-message" style="display: none; background-color: #E8F4F8; border-color: #0077B5; color: #004085;">
  943.                         👉 Maintenant connectez vous à Linkedin dans ce navigateur
  944.                       </div>
  945.                       <div class="alert alert-warning mb-3 fs-16" id="extension-error-message" style="display: none;">
  946.                         <i class="fa-solid fa-exclamation-triangle me-2"></i>
  947.                         <span id="extension-error-text"></span>
  948.                       </div>
  949.                       <div id="extension-install-block">
  950.                         {% if not hasExtension %}
  951.                           <h2 class="h5 ubuntu-bold mb-3 mt-0" style="color: #1a1a1a;">
  952.                             Installez l'extension depuis le Chrome Store
  953.                           </h2>
  954.                           <div class="mb-3 fs-16" id="extension-download-alert" style="padding: 1rem; background-color: #f8f9fa; border-radius: 8px;">
  955.                             <div class="row align-items-center">
  956.                               <div class="col-md-6">
  957.                                 <ol class="list-unstyled mt-3 fs-6 mb-3">
  958.                                   <li class="mb-2">
  959.                                     <span>
  960.                                       1.
  961.                                     </span>
  962.                                     Vous allez être redirigé vers le Chrome Store
  963.                                   </li>
  964.                                   <li class="mb-2">
  965.                                     <span>
  966.                                       2.
  967.                                     </span>
  968.                                     Installez l'extension bambboo
  969.                                   </li>
  970.                                   <li class="mb-2">
  971.                                     <span>
  972.                                       3.
  973.                                     </span>
  974.                                     Puis revenez sur cette page
  975.                                   </li>
  976.                                 </ol>
  977.                               </div>
  978.                               <div class="col-md-6 text-center" style="position: relative;">
  979.                                 <img src="{{ asset('img/chrome-store.gif') }}" alt="Chrome Web Store" class="img-fluid" style="width: 100%; border-radius: 4px;" />
  980.                               </div>
  981.                             </div>
  982.                             <div class="d-flex gap-2 mt-3">
  983.                               <button type="button" class="btn btn-secondary flex-fill" id="btn-cancel-extension-install">
  984.                                 Annuler
  985.                               </button>
  986.                               <a href="https://chromewebstore.google.com/detail/bambboo/{{ chrome_extension_id }}" target="_blank" rel="noopener noreferrer" id="store-button" data-user-id="{{ app.user.id }}" class="btn btn-custom-green btn-clover flex-fill btn-install-extension-store">
  987.                                 Installer l'extension depuis le Chrome Store
  988.                               </a>
  989.                             </div>
  990.                           </div>
  991.                         {% endif %}
  992.                       </div>
  993.                       <div id="linkedin-oauth-button-container" style="display: none;" class="mb-3">
  994.                         <a href="#" id="linkedin-oauth-button" class="btn btn-primary w-100" style="background-color: #0077B5; border-color: #0077B5;">
  995.                           <i class="bi bi-linkedin me-2"></i>
  996.                           Me connecter à LinkedIn
  997.                         </a>
  998.                       </div>
  999.                       <div class="d-flex gap-2" id="extension-retry-container">
  1000.                         <button type="button" class="btn btn-primary flex-fill" id="btn-retry-extension" style="display: none; background-color: #0077B5; border-color: #0077B5;">
  1001.                           Réessayer
  1002.                         </button>
  1003.                       </div>
  1004.                     </div>
  1005.                     <!-- Formulaire LinkedIn (affiché directement sur mobile, caché sur desktop jusqu'à clic) -->
  1006.                     <div id="linkedin-login-form" class="d-block d-md-none" style="padding-left: 1rem; padding-right: 1rem; padding-top: 1rem;">
  1007.                       <div class="mb-3">
  1008.                         <label for="linkedin-email" class="form-label ubuntu-medium fs-16 mb-2">
  1009.                           Votre email Linkedin
  1010.                         </label>
  1011.                         <input type="email" class="form-control" id="linkedin-email" name="linkedin_email" placeholder="votre.email@example.com" required>
  1012.                           <div class="invalid-feedback" id="linkedin-email-error"></div>
  1013.                         </div>
  1014.                         <div class="mb-3">
  1015.                           <label for="linkedin-password" class="form-label ubuntu-medium fs-16 mb-2">
  1016.                             Votre mot de passe Linkedin
  1017.                           </label>
  1018.                           <div class="input-group">
  1019.                             <input type="password" class="form-control password-toggle-input" id="linkedin-password" name="linkedin_password" placeholder="mot de passe Linkedin" required>
  1020.                               <button type="button" class="input-group-text password-toggle-btn" aria-label="Afficher le mot de passe" title="Afficher le mot de passe">
  1021.                                 <i class="fa-regular fa-eye"></i>
  1022.                               </button>
  1023.                             </div>
  1024.                             <div class="invalid-feedback" id="linkedin-password-error"></div>
  1025.                           </div>
  1026.                           <!-- Checkbox pour sauvegarder les identifiants -->
  1027.                           <div class="mb-3">
  1028.                             <div class="form-check">
  1029.                               <input class="form-check-input" type="checkbox" id="save-linkedin-credentials" name="save_credentials" value="1" checked>
  1030.                                 <label class="form-check-label ubuntu-regular fs-16" for="save-linkedin-credentials" style="color: #1a1a1a;">
  1031.                                   Se souvenir de moi
  1032.                                 </label>
  1033.                               </div>
  1034.                             </div>
  1035.                             <div class="alert alert-danger mb-3 fs-16" id="linkedin-form-error" style="display: none;"></div>
  1036.                             <div class="d-flex gap-2">
  1037.                               <button type="button" class="btn btn-secondary flex-fill" id="btn-cancel-linkedin" data-bs-dismiss="offcanvas" aria-label="Fermer">
  1038.                                 Annuler
  1039.                               </button>
  1040.                               <button type="button" class="btn btn-primary flex-fill" id="btn-submit-linkedin" style="background-color: #0077B5; border-color: #0077B5;">
  1041.                                 <span class="spinner-border spinner-border-sm me-2" id="linkedin-spinner" style="display: none;" role="status" aria-hidden="true"></span>
  1042.                                 <span class="btn-submit-linkedin-label">
  1043.                                   Me connecter
  1044.                                 </span>
  1045.                               </button>
  1046.                             </div>
  1047.                             <div class="linkedin-patienter-message alert alert-info mt-2 mb-0 fs-16 ubuntu-regular" style="opacity: 0; transition: opacity 0.3s ease; display: none;" role="status">
  1048.                               Merci de patienter encore quelques secondes…
  1049.                             </div>
  1050.                             <hr/>
  1051.                             <!-- Section Mot de passe oublié - Nouveau design (Mobile) -->
  1052.                             <div class="mb-3 mt-4" id="forgot-password-section-mobile">
  1053.                               <a href="#" class="ubuntu-medium fs-16 mb-3" style="color: #1a1a1a; text-decoration: none; cursor: pointer;" id="forgot-password-toggle">
  1054.                                 <i class="bi bi-key me-2" style="color: #0abf7f !important; font-weight: bold !important;"></i>
  1055.                                 Mot de passe oublié ?
  1056.                               </a>
  1057.                               <div id="forgot-password-content" style="display: none;">
  1058.                                 <!-- Boîte 1 : Récupérer depuis votre navigateur -->
  1059.                                 <div id="browser-recovery-box-mobile" class="mt-3 mb-3 p-3 rounded" style="background-color: #F0F8FF; border: 1px solid #E0F0FF;">
  1060.                                   <div class="d-flex align-items-start browser-recovery-box-header">
  1061.                                     <div class="me-3" style="flex-shrink: 0;">
  1062.                                       <i id="browser-icon-mobile" class="fa-solid fa-browser" style="font-size: 2rem; color: #666;"></i>
  1063.                                     </div>
  1064.                                     <div class="flex-grow-1">
  1065.                                       <h3 class="ubuntu-bold fs-16 mb-2" style="color: #1a1a1a;">
  1066.                                         Récupérer depuis votre navigateur
  1067.                                       </h3>
  1068.                                       <p class="ubuntu-regular fs-16 mb-3" style="color: #1a1a1a;">
  1069.                                         Si votre mot de passe est enregistré dans votre navigateur
  1070.                                       </p>
  1071.                                     </div>
  1072.                                   </div>
  1073.                                   <div class="browser-recovery-box-body">
  1074.                                     <div class="browser-recovery-mobile-title ubuntu-bold fs-16 mb-2" style="color: #1a1a1a;">
  1075.                                       Depuis votre mobile
  1076.                                     </div>
  1077.                                     <div id="forgot-password-desktop" style="display: none;">
  1078.                                       <ol class="ubuntu-regular fs-16 mb-0" style="color: #1a1a1a;">
  1079.                                         <li class="mb-2">
  1080.                                           Copiez cette URL
  1081.                                           <div class="d-flex align-items-center gap-2 mt-2">
  1082.                                             <input type="text" class="form-control form-control-sm" id="password-manager-url-mobile" value="" readonly style="font-size: 0.75rem; cursor: pointer; width: 50%;" onclick="copyPasswordManagerUrl()">
  1083.                                               <button type="button" class="btn btn-sm btn-outline-secondary" onclick="copyPasswordManagerUrl()" title="Copier dans le presse-papier">
  1084.                                                 <i class="fa-regular fa-copy"></i>
  1085.                                               </button>
  1086.                                             </div>
  1087.                                           </li>
  1088.                                           <li class="mb-2">
  1089.                                             Ouvrez un nouvel onglet et coller l'URL
  1090.                                           </li>
  1091.                                           <li class="mb-2">
  1092.                                             Recherchez le mot de passe Linkedin
  1093.                                           </li>
  1094.                                           <li>
  1095.                                             Copiez le mot de passe enregistré et revenez ici
  1096.                                           </li>
  1097.                                         </ol>
  1098.                                       </div>
  1099.                                       <div id="forgot-password-android" style="display: none;">
  1100.                                         <ol class="ubuntu-regular fs-16 mb-0" style="color: #1a1a1a;">
  1101.                                           <li class="mb-2">
  1102.                                             Ouvrez le gestionnaire de mots de passe Google :
  1103.                                             <div class="mt-2">
  1104.                                               <a href="https://passwords.google.com/" target="_blank" class="btn btn-sm btn-primary" style="background-color: #0077B5; border-color: #0077B5;">
  1105.                                                 <i class="bi bi-box-arrow-up-right me-1"></i>
  1106.                                                 Ouvrir Google Password Manager
  1107.                                               </a>
  1108.                                             </div>
  1109.                                           </li>
  1110.                                           <li class="mb-2">
  1111.                                             Ou accédez via les paramètres Android :
  1112.                                             <div class="mt-2" style="color: #666; font-size: 0.85rem;">
  1113.                                               Paramètres → Google → Gestionnaire de mots de passe
  1114.                                             </div>
  1115.                                           </li>
  1116.                                           <li>
  1117.                                             Recherchez "LinkedIn" dans la liste
  1118.                                           </li>
  1119.                                         </ol>
  1120.                                       </div>
  1121.                                       <div id="forgot-password-ios" style="display: none;">
  1122.                                         <ol class="ubuntu-regular fs-16 mb-0" style="color: #1a1a1a;">
  1123.                                           <li class="mb-2">
  1124.                                             Ouvrez l'app
  1125.                                             <strong style="color: #0077B5;">
  1126.                                               Mots de passe
  1127.                                             </strong>
  1128.                                           </li>
  1129.                                           <li class="mb-2">
  1130.                                             Déverrouillez avec
  1131.                                             <strong style="color: #0077B5;">
  1132.                                               Face ID
  1133.                                             </strong>
  1134.                                             ou
  1135.                                             <strong style="color: #0077B5;">
  1136.                                               Touch ID
  1137.                                             </strong>
  1138.                                           </li>
  1139.                                           <li class="mb-2">
  1140.                                             Recherchez
  1141.                                             <strong style="color: #0077B5;">
  1142.                                               LinkedIn
  1143.                                             </strong>
  1144.                                           </li>
  1145.                                           <li>
  1146.                                             Copiez le mot de passe
  1147.                                           </li>
  1148.                                         </ol>
  1149.                                       </div>
  1150.                                       <div id="forgot-password-safari-desktop" style="display: none;">
  1151.                                         <ol class="ubuntu-regular fs-16 mb-0" style="color: #1a1a1a;">
  1152.                                           <li class="mb-2">
  1153.                                             Ouvrez Réglages de votre navigateur
  1154.                                           </li>
  1155.                                           <li class="mb-2">
  1156.                                             Allez dans Mots de passe
  1157.                                           </li>
  1158.                                           <li>
  1159.                                             Recherchez Linkedin
  1160.                                           </li>
  1161.                                         </ol>
  1162.                                       </div>
  1163.                                     </div>
  1164.                                   </div>
  1165.                                   <!-- Boîte 2 : Besoin d'aide? -->
  1166.                                   <div class="mb-3 p-3 rounded" style="background-color: #f8f9fa; border: 1px solid #e9ecef;">
  1167.                                     <div class="d-flex align-items-start">
  1168.                                       <div class="me-3" style="flex-shrink: 0;">
  1169.                                         <i class="bi bi-question-circle" style="font-size: 2rem; color: #666;"></i>
  1170.                                       </div>
  1171.                                       <div class="flex-grow-1">
  1172.                                         <h3 class="ubuntu-bold fs-16 mb-2" style="color: #1a1a1a;">
  1173.                                           Besoin d'aide?
  1174.                                         </h3>
  1175.                                         <p class="ubuntu-regular fs-16 mb-3" style="color: #1a1a1a;">
  1176.                                           Notre équipe support peut vous accompagner
  1177.                                         </p>
  1178.                                         <a href="javascript:void(0)" class="text-decoration-none" style="color: #0077B5;" data-bs-toggle="modal" data-bs-target="#modal-support" data-support-source="suggestion_page" role="button">
  1179.                                           Contacter le support
  1180.                                         </a>
  1181.                                       </div>
  1182.                                     </div>
  1183.                                   </div>
  1184.                                 </div>
  1185.                               </div>
  1186.                             </div>
  1187.                             <!-- Formulaire de checkpoint LinkedIn (caché par défaut) -->
  1188.                             <div id="linkedin-checkpoint-form" style="display: none; padding-left: 2rem; padding-right: 2rem; padding-top: 2rem;">
  1189.                               <div class="mb-3 fs-16 text-center" id="linkedin-checkpoint-message">
  1190.                                 <h2 id="linkedin-in-app-validation-title" class="ubuntu-bold fs-16 mb-3" style="display: none;">
  1191.                                   Rendez-vous sur votre application Linkedin…
  1192.                                 </h2>
  1193.                                 <p id="linkedin-checkpoint-message-text" class="ubuntu-bold mb-0">
  1194.                                   Saisissez le code reçu par SMS ou par e-mail :
  1195.                                 </p>
  1196.                                 <div id="linkedin-in-app-validation-spinner" class="d-flex justify-content-center mt-3" style="display: none;">
  1197.                                   <div role="status" aria-label="Chargement">
  1198.                                     <i class="fa-solid fa-circle-notch fa-spin" style="font-size: 2rem; color: #0d6efd;"></i>
  1199.                                   </div>
  1200.                                 </div>
  1201.                                 {% if mobile_detect.isMobile() %}
  1202.                                   <div class="mt-3 text-center">
  1203.                                     <a href="https://www.linkedin.com" target="_blank" rel="noopener noreferrer" id="linkedin-in-app-validation-open-linkedin" class="btn btn-primary w-100" style="display: none; background-color: #0077B5; border-color: #0077B5;">
  1204.                                       <i class="bi bi-linkedin me-2"></i>
  1205.                                       Ouvrir LinkedIn
  1206.                                     </a>
  1207.                                   </div>
  1208.                                 {% endif %}
  1209.                                 <div class="mt-3" id="linkedin-in-app-validation-no-notif-wrapper" style="display: none;">
  1210.                                   {% if mobile_detect.isMobile() %}
  1211.                                     <div class="text-center">
  1212.                                       <div class="mt-3 border rounded-3 overflow-hidden" style="background-color: #f8f9fa;">
  1213.                                         <a href="#" id="linkedin-in-app-validation-no-notif-toggle" class="d-flex align-items-center justify-content-between text-decoration-none px-3 py-3" style="color: #1a1a1a;" aria-expanded="false">
  1214.                                           <span class="ubuntu-bold">
  1215.                                             <i class="bi bi-lightbulb me-2" style="color: #f4c542;"></i>
  1216.                                             Vous n'avez pas reçu la notification ?
  1217.                                           </span>
  1218.                                           <i class="bi bi-chevron-down"></i>
  1219.                                         </a>
  1220.                                         <div id="linkedin-in-app-validation-no-notif-content-ios" style="display: none;" class="px-3 pb-3 text-start">
  1221.                                           <p class="ubuntu-regular mb-2" style="color: #1a1a1a;">
  1222.                                             Vérifiez que les notifications LinkedIn sont activées dans les réglages de votre téléphone
  1223.                                           </p>
  1224.                                           <div class="ubuntu-regular" style="color: #1a1a1a;">
  1225.                                             <strong>
  1226.                                               Sur iPhone
  1227.                                             </strong>
  1228.                                             , Réglages &gt; Notifications &gt; LinkedIn &gt; Autoriser les notifications
  1229.                                           </div>
  1230.                                         </div>
  1231.                                         <div id="linkedin-in-app-validation-no-notif-content-other" style="display: none;" class="px-3 pb-3 text-start">
  1232.                                           <p class="ubuntu-regular mb-2" style="color: #1a1a1a;">
  1233.                                             Vérifiez que les notifications LinkedIn sont activées dans les réglages de votre téléphone
  1234.                                           </p>
  1235.                                           <div class="ubuntu-regular" style="color: #1a1a1a;">
  1236.                                             <strong>
  1237.                                               Sur Android
  1238.                                             </strong>
  1239.                                             , Paramètres &gt; Applications &gt; LinkedIn &gt; Notifications &gt; Autoriser les notifications
  1240.                                           </div>
  1241.                                         </div>
  1242.                                       </div>
  1243.                                     </div>
  1244.                                   {% else %}
  1245.                                     <div class="text-center">
  1246.                                       <div class="mt-3 border rounded-3 overflow-hidden" style="background-color: #f8f9fa;">
  1247.                                         <a href="#" id="linkedin-in-app-validation-no-notif-toggle" class="d-flex align-items-center justify-content-between text-decoration-none px-3 py-3" style="color: #1a1a1a;" aria-expanded="false">
  1248.                                           <span class="ubuntu-bold">
  1249.                                             <i class="bi bi-lightbulb me-2" style="color: #f4c542;"></i>
  1250.                                             Vous n'avez pas reçu la notification ?
  1251.                                           </span>
  1252.                                           <i class="bi bi-chevron-down"></i>
  1253.                                         </a>
  1254.                                         <div id="linkedin-in-app-validation-no-notif-content-ios" style="display: none;" class="px-3 pb-3 text-start">
  1255.                                           <p class="ubuntu-regular mb-2" style="color: #1a1a1a;">
  1256.                                             Vérifiez que les notifications LinkedIn sont activées dans les réglages de votre téléphone
  1257.                                           </p>
  1258.                                           <div class="ubuntu-regular" style="color: #1a1a1a;">
  1259.                                             <strong>
  1260.                                               Sur iPhone
  1261.                                             </strong>
  1262.                                             , Réglages &gt; Notifications &gt; LinkedIn &gt; Autoriser les notifications
  1263.                                           </div>
  1264.                                         </div>
  1265.                                         <div id="linkedin-in-app-validation-no-notif-content-other" style="display: none;" class="px-3 pb-3 text-start">
  1266.                                           <p class="ubuntu-regular mb-2" style="color: #1a1a1a;">
  1267.                                             Vérifiez que les notifications LinkedIn sont activées dans les réglages de votre téléphone
  1268.                                           </p>
  1269.                                           <div class="ubuntu-regular" style="color: #1a1a1a;">
  1270.                                             <strong>
  1271.                                               Sur Android
  1272.                                             </strong>
  1273.                                             , Paramètres &gt; Applications &gt; LinkedIn &gt; Notifications &gt; Autoriser les notifications
  1274.                                           </div>
  1275.                                         </div>
  1276.                                       </div>
  1277.                                     </div>
  1278.                                   {% endif %}
  1279.                                 </div>
  1280.                                 <p id="linkedin-in-app-validation-footer" class="text-muted small mt-3 mb-0 text-center" style="display: none;">
  1281.                                   La connexion se fera automatiquement une fois validée.
  1282.                                 </p>
  1283.                               </div>
  1284.                               <div class="alert alert-info mb-3 fs-16" id="linkedin-checkpoint-phone-alert" style="display: none;">
  1285.                                 <span id="linkedin-checkpoint-phone-text"></span>
  1286.                               </div>
  1287.                               <div class="mb-3" id="linkedin-checkpoint-code-container">
  1288.                                 <label for="linkedin-checkpoint-code" class="form-label ubuntu-regular fs-16 mb-2">
  1289.                                   Code de vérification
  1290.                                 </label>
  1291.                                 <input type="text" class="form-control" id="linkedin-checkpoint-code" name="linkedin_checkpoint_code" placeholder="Entrez le code à 6 chiffres" maxlength="6">
  1292.                                   <div class="invalid-feedback" id="linkedin-checkpoint-code-error"></div>
  1293.                                 </div>
  1294.                                 <div class="alert alert-danger mb-3 fs-16" id="linkedin-checkpoint-form-error" style="display: none;"></div>
  1295.                                 <div data-checkpoint-actions="1">
  1296.                                   <div class="d-flex gap-2 mb-2">
  1297.                                     <button type="button" class="btn btn-primary flex-fill" id="btn-submit-checkpoint" style="background-color: #0077B5; border-color: #0077B5;">
  1298.                                       <span class="spinner-border spinner-border-sm me-2" id="linkedin-checkpoint-spinner" style="display: none;" role="status" aria-hidden="true"></span>
  1299.                                       Vérifier
  1300.                                     </button>
  1301.                                     <button type="button" class="btn btn-primary flex-fill" id="btn-retry-checkpoint" style="display: none; background-color: #0077B5; border-color: #0077B5;">
  1302.                                       <i class="fa-solid fa-rotate-right me-1"></i>
  1303.                                       Renvoyer la notification
  1304.                                     </button>
  1305.                                   </div>
  1306.                                   <div class="text-center">
  1307.                                     <button type="button" class="btn btn-link p-0 text-decoration-underline border-0 bg-transparent ubuntu-regular fs-16" id="btn-cancel-checkpoint" aria-label="Annuler la connexion" style="color: #1a1a1a;">
  1308.                                       Annuler
  1309.                                     </button>
  1310.                                   </div>
  1311.                                 </div>
  1312.                               </div>
  1313.                             </div>
  1314.                           <!-- Toggle mot de passe géré par linkedinConnect.js (click + touchend pour mobile) -->
  1315.                           <!-- Script pour gérer l'offcanvas LinkedIn -->
  1316.                           <!-- Script pour gérer la connexion LinkedIn -->
  1317.                         </div>
  1318.                         </div>
  1319.                       {% else %}
  1320.                         {% if not app.user.identityUid %}
  1321.                           <!-- BLOC : Connexion LinkedIn requise (affiché si pas de suggestions) -->
  1322.                           <div id="connect-linkedin-container" class="container-fluid h-100">
  1323.                             <div class="row h-100 justify-content-center align-items-center text-center">
  1324.                               <div class="col-md-8 col-lg-6 d-flex justify-content-center">
  1325.                                 <div class="text-center p-5 rounded-3" style="background-color: #ffffff; box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1); max-width: 900px; width: 100%;">
  1326.                                   <!-- Image LinkedIn -->
  1327.                                   <div class="mb-4 d-flex justify-content-center">
  1328.                                     <img src="{{ asset('img/connect-to-linkedin.png') }}" alt="Connectez votre compte LinkedIn" class="img-fluid" style="max-width: 60%; height: auto;"></div>
  1329.                                     <!-- Texte -->
  1330.                                     <h2 class="ubuntu-bold fs-5 mb-2" style="color: #1a1a1a;">
  1331.                                       Connectez votre compte Linkedin
  1332.                                     </h2>
  1333.                                     <p class="ubuntu-regular mb-4 fs-16" style="color: #1a1a1a;">
  1334.                                       Pour utiliser bambboo, vous devez connecter votre compte Linkedin.
  1335.                                     </p>
  1336.                                     <!-- Section Nos engagements de confidentialité - Accordion Bootstrap -->
  1337.                                     <div class="mb-4">
  1338.                                       <div class="accordion" id="accordionEngagementsDesktop">
  1339.                                         <div class="accordion-item" style="border: none; background-color: #f8f9fa; border-radius: 8px;">
  1340.                                           <h2 class="accordion-header" id="headingEngagementsDesktop">
  1341.                                             <button class="accordion-button collapsed ubuntu-bold" type="button" data-bs-toggle="collapse" data-bs-target="#collapseEngagementsDesktop" aria-expanded="false" aria-controls="collapseEngagementsDesktop" style="background-color: #f8f9fa; color: #004d40; font-size: 1rem; box-shadow: none; padding: 1rem 1.25rem;">
  1342.                                               <img src="{{ asset('img/logomark.svg') }}" alt="bambboo" style="width: 24px; height: 24px; margin-right: 0.5rem; flex-shrink: 0;">
  1343.                                                 <span class="flex-grow-1">
  1344.                                                   Nos engagements de confidentialité
  1345.                                                 </span>
  1346.                                                 <i class="bi bi-chevron-down ms-2" style="color: #004d40; flex-shrink: 0;"></i>
  1347.                                                 <i class="bi bi-chevron-up ms-2 d-none" style="color: #004d40; flex-shrink: 0;"></i>
  1348.                                               </button>
  1349.                                             </h2>
  1350.                                             <div id="collapseEngagementsDesktop" class="accordion-collapse collapse" aria-labelledby="headingEngagementsDesktop" data-bs-parent="#accordionEngagementsDesktop">
  1351.                                               <div class="accordion-body text-start py-4 px-3" style="background-color: #f8f9fa;">
  1352.                                                 <ul class="mb-0 ps-0" style="list-style: none; padding-left: 0;">
  1353.                                                   <li class="mb-2 d-flex align-items-center" style="min-width: 0; flex: 1;">
  1354.                                                     <i class="bi bi-check-lg me-2" style="color: #198754; font-size: 1rem; font-weight: bold; flex-shrink: 0;"></i>
  1355.                                                     <span class="ubuntu-regular" style="color: #555; font-size: 0.95rem; word-wrap: break-word; overflow-wrap: break-word;">
  1356.                                                       bambboo n'accède qu'aux données publiques de vos contacts LinkedIn
  1357.                                                     </span>
  1358.                                                   </li>
  1359.                                                   <li class="mb-2 d-flex align-items-center" style="min-width: 0; flex: 1;">
  1360.                                                     <i class="bi bi-check-lg me-2" style="color: #198754; font-size: 1rem; font-weight: bold; flex-shrink: 0;"></i>
  1361.                                                     <span class="ubuntu-regular" style="color: #555; font-size: 0.95rem; word-wrap: break-word; overflow-wrap: break-word;">
  1362.                                                       L'usage des données a pour seule finalité d'identifier des opportunités professionnelles
  1363.                                                     </span>
  1364.                                                   </li>
  1365.                                                   <li class="mb-2 d-flex align-items-center" style="min-width: 0; flex: 1;">
  1366.                                                     <i class="bi bi-check-lg me-2" style="color: #198754; font-size: 1rem; font-weight: bold; flex-shrink: 0;"></i>
  1367.                                                     <span class="ubuntu-regular" style="color: #555; font-size: 0.95rem; word-wrap: break-word; overflow-wrap: break-word;">
  1368.                                                       bambboo ne récolte aucune donnée sensible de vos contacts (ni tél., ni email)
  1369.                                                     </span>
  1370.                                                   </li>
  1371.                                                   <li class="mb-2 d-flex align-items-center" style="min-width: 0; flex: 1;">
  1372.                                                     <i class="bi bi-check-lg me-2" style="color: #198754; font-size: 1rem; font-weight: bold; flex-shrink: 0;"></i>
  1373.                                                     <span class="ubuntu-regular" style="color: #555; font-size: 0.95rem; word-wrap: break-word; overflow-wrap: break-word;">
  1374.                                                       bambboo n'accède à aucun de vos messages ni activités LinkedIn
  1375.                                                     </span>
  1376.                                                   </li>
  1377.                                                   <li class="mb-0 d-flex align-items-center" style="min-width: 0; flex: 1;">
  1378.                                                     <i class="bi bi-check-lg me-2" style="color: #198754; font-size: 1rem; font-weight: bold; flex-shrink: 0;"></i>
  1379.                                                     <span class="ubuntu-regular" style="color: #555; font-size: 0.95rem; word-wrap: break-word; overflow-wrap: break-word;">
  1380.                                                       bambboo applique le RGPD avec rigueur et transparence
  1381.                                                     </span>
  1382.                                                   </li>
  1383.                                                 </ul>
  1384.                                               </div>
  1385.                                             </div>
  1386.                                           </div>
  1387.                                         </div>
  1388.                                       </div>
  1389.                                       <button type="button" class="btn btn-primary px-4 py-2 ubuntu-medium" data-bs-toggle="offcanvas" data-bs-target="#linkedinConnectOffcanvas" aria-controls="linkedinConnectOffcanvas" style="background-color: #0077B5; border-color: #0077B5;">
  1390.                                         Connecter mon compte LinkedIn
  1391.                                       </button>
  1392.                                     </div>
  1393.                                   </div>
  1394.                                 </div>
  1395.                               </div>
  1396.                               <!-- Offcanvas LinkedIn (Desktop) -->
  1397.                               <div class="offcanvas offcanvas-end linkedin-connect-offcanvas" tabindex="-1" id="linkedinConnectOffcanvas" data-bs-backdrop="static" data-bs-keyboard="false">
  1398.                                 <div class="offcanvas-header border-bottom d-flex justify-content-between align-items-center" style="padding: 1rem 1.5rem;">
  1399.                                   <h5 class="offcanvas-title ubuntu-bold fs-16 d-flex align-items-center mb-0" id="linkedinConnectOffcanvasLabel" style="display: flex !important;">
  1400.                                     <i class="bi bi-linkedin me-2" style="color: #0077B5; font-size: 1.5rem;"></i>
  1401.                                     Connectez votre compte Linkedin
  1402.                                   </h5>
  1403.                                   <button type="button" class="btn btn-link text-dark p-0 ms-auto" data-bs-dismiss="offcanvas" aria-label="Close" style="opacity: 1; font-size: 1.5rem; text-decoration: none; line-height: 1;">
  1404.                                     <i class="fa-solid fa-xmark"></i>
  1405.                                   </button>
  1406.                                 </div>
  1407.                                 <div class="offcanvas-body linkedin-offcanvas-body px-4 py-4">
  1408.                                   <div id="linkedin-connection-options">
  1409.                                     <button type="button" class="btn btn-link text-decoration-none p-0 mb-3 w-100 text-start linkedin-option-btn linkedin-option-btn-primary" id="btn-connexion-infinie" style="border: 2px solid #0077B5; background-color: #F0F8FF; border-radius: 8px; transition: all 0.3s ease;">
  1410.                                       <div class="p-4">
  1411.                                         <div class="d-flex align-items-start">
  1412.                                           <div class="me-3" style="width: 48px; height: 48px; display: flex; align-items: center; justify-content: center; background-color: #0077B5; border-radius: 8px; flex-shrink: 0; transition: all 0.3s ease;">
  1413.                                             <i class="bi bi-shield-lock" style="color: white; font-size: 24px;"></i>
  1414.                                           </div>
  1415.                                           <div class="flex-grow-1">
  1416.                                             <div class="d-flex align-items-start justify-content-between mb-2">
  1417.                                               <h6 class="ubuntu-bold mb-0 fs-16" style="color: #1a1a1a;">
  1418.                                                 Connexion avec vos identifiants Linkedin
  1419.                                               </h6>
  1420.                                               <span class="badge bg-primary ubuntu-medium fs-16">
  1421.                                                 Recommandé
  1422.                                               </span>
  1423.                                             </div>
  1424.                                             <p class="ubuntu-regular mb-0 fs-16" style="color: #666;">
  1425.                                               Pour une connexion robuste et une reconnexion facile depuis n'importe quel appareil.
  1426.                                             </p>
  1427.                                           </div>
  1428.                                         </div>
  1429.                                       </div>
  1430.                                     </button>
  1431.                                     <button type="button" class="btn btn-link text-decoration-none p-0 mb-3 w-100 text-start linkedin-option-btn linkedin-option-btn-secondary d-none d-md-block" id="btn-connexion-extension" style="border: 1px solid #dee2e6; background-color: #ffffff; border-radius: 8px; transition: all 0.3s ease;">
  1432.                                       <div class="p-4">
  1433.                                         <div class="d-flex align-items-start">
  1434.                                           <div class="me-3 linkedin-option-icon" style="width: 48px; height: 48px; display: flex; align-items: center; justify-content: center; background-color: #f8f9fa; border-radius: 8px; flex-shrink: 0; transition: all 0.3s ease;">
  1435.                                             <i class="bi bi-puzzle" style="color: #666; font-size: 24px;"></i>
  1436.                                           </div>
  1437.                                           <div class="flex-grow-1">
  1438.                                             <h6 class="ubuntu-bold mb-2 fs-16" style="color: #1a1a1a;">
  1439.                                               Connexion avec l'extension bambboo
  1440.                                             </h6>
  1441.                                             <p class="ubuntu-regular mb-0 fs-16" style="color: #666;">
  1442.                                               En cas de problème avec vos identifiants, l'extension bambboo permet d'utiliser la session Linkedin qui se trouve dans ce navigateur.
  1443.                                             </p>
  1444.                                           </div>
  1445.                                         </div>
  1446.                                       </div>
  1447.                                     </button>
  1448.                                   </div>
  1449.                                   <!-- Zone de statut pour la connexion via extension (cachée par défaut) -->
  1450.                                   <div id="linkedin-extension-status" style="display: none;">
  1451.                                     <button type="button" class="btn btn-link text-decoration-none p-0 mb-3 ubuntu-medium fs-16" id="btn-back-extension-install" style="color: #0077B5; padding: 0 !important;">
  1452.                                       <i class="bi bi-arrow-left me-2"></i>
  1453.                                       Retour
  1454.                                     </button>
  1455.                                     <div class="alert alert-primary mb-3 fs-16" id="extension-status-message" style="background-color: #E8F4F8; border-color: #0077B5; color: #004085;">
  1456.                                       <div class="d-flex align-items-center">
  1457.                                         <div class="spinner-border spinner-border-sm me-2" role="status" style="width: 1rem; height: 1rem;">
  1458.                                           <span class="visually-hidden">
  1459.                                             Chargement...
  1460.                                           </span>
  1461.                                         </div>
  1462.                                         <span id="extension-status-text">
  1463.                                           Vérification de l'extension...
  1464.                                         </span>
  1465.                                       </div>
  1466.                                     </div>
  1467.                                     <div class="alert alert-primary mb-3 fs-16" id="extension-connect-linkedin-message" style="display: none; background-color: #E8F4F8; border-color: #0077B5; color: #004085;">
  1468.                                       👉 Maintenant connectez vous à Linkedin dans ce navigateur
  1469.                                     </div>
  1470.                                     <div class="alert alert-warning mb-3 fs-16" id="extension-error-message" style="display: none;">
  1471.                                       <i class="fa-solid fa-exclamation-triangle me-2"></i>
  1472.                                       <span id="extension-error-text"></span>
  1473.                                     </div>
  1474.                                     <div id="extension-install-block">
  1475.                                       {% if not hasExtension %}
  1476.                                         <h2 class="h5 ubuntu-bold mb-3 mt-0" style="color: #1a1a1a;">
  1477.                                           Installez l'extension depuis le Chrome Store
  1478.                                         </h2>
  1479.                                         <div class="mb-3 fs-16" id="extension-download-alert" style="padding: 1rem; background-color: #f8f9fa; border-radius: 8px;">
  1480.                                           <div class="row align-items-center">
  1481.                                             <div class="col-md-6">
  1482.                                               <ol class="list-unstyled mt-3 fs-6 mb-3">
  1483.                                                 <li class="mb-2">
  1484.                                                   <span>
  1485.                                                     1.
  1486.                                                   </span>
  1487.                                                   Vous allez être redirigé vers le Chrome Store
  1488.                                                 </li>
  1489.                                                 <li class="mb-2">
  1490.                                                   <span>
  1491.                                                     2.
  1492.                                                   </span>
  1493.                                                   Installez l'extension bambboo
  1494.                                                 </li>
  1495.                                                 <li class="mb-2">
  1496.                                                   <span>
  1497.                                                     3.
  1498.                                                   </span>
  1499.                                                   Puis revenez sur cette page
  1500.                                                 </li>
  1501.                                               </ol>
  1502.                                             </div>
  1503.                                             <div class="col-md-6 text-center" style="position: relative;">
  1504.                                               <img src="{{ asset('img/chrome-store.gif') }}" alt="Chrome Web Store" class="img-fluid" style="width: 100%; border-radius: 4px;" />
  1505.                                             </div>
  1506.                                           </div>
  1507.                                           <div class="d-flex gap-2 mt-3">
  1508.                                             <button type="button" class="btn btn-secondary flex-fill" id="btn-cancel-extension-install">
  1509.                                               Annuler
  1510.                                             </button>
  1511.                                             <a href="https://chromewebstore.google.com/detail/bambboo/{{ chrome_extension_id }}" target="_blank" rel="noopener noreferrer" id="store-button" data-user-id="{{ app.user.id }}" class="btn btn-custom-green btn-clover flex-fill btn-install-extension-store">
  1512.                                               Installer l'extension depuis le Chrome Store
  1513.                                             </a>
  1514.                                           </div>
  1515.                                         </div>
  1516.                                       {% endif %}
  1517.                                     </div>
  1518.                                     <div id="linkedin-oauth-button-container" style="display: none;" class="mb-3">
  1519.                                       <a href="#" id="linkedin-oauth-button" class="btn btn-primary w-100" style="background-color: #0077B5; border-color: #0077B5;">
  1520.                                         <i class="bi bi-linkedin me-2"></i>
  1521.                                         Me connecter à LinkedIn
  1522.                                       </a>
  1523.                                     </div>
  1524.                                     <div class="d-flex gap-2" id="extension-retry-container">
  1525.                                       <button type="button" class="btn btn-primary flex-fill" id="btn-retry-extension" style="display: none; background-color: #0077B5; border-color: #0077B5;">
  1526.                                         Réessayer
  1527.                                       </button>
  1528.                                     </div>
  1529.                                   </div>
  1530.                                   <!-- Formulaire LinkedIn (Desktop) : caché par défaut, affiché après clic sur "Connexion avec vos identifiants Linkedin" -->
  1531.                                   <div id="linkedin-login-form" style="display: none; padding-left: 2rem; padding-right: 2rem; padding-top: 2rem;">
  1532.                                     <button type="button" class="btn btn-link text-decoration-none p-0 mb-4 ubuntu-medium fs-16" id="btn-back-to-options" style="color: #0077B5; padding: 0 !important; line-height: 1.4;">
  1533.                                       <i class="bi bi-arrow-left me-2"></i>
  1534.                                       Retour
  1535.                                     </button>
  1536.                                     <!-- Étape préalable : ouvrir l'application LinkedIn -->
  1537.                                     <div class="mb-4" data-linkedin-pre-step="1">
  1538.                                       <p class="ubuntu-regular fs-16 mb-4" style="color: #1a1a1a; line-height: 1.6;">
  1539.                                         Votre application Linkedin doit être ouverte pour connecter votre compte.
  1540.                                       </p>
  1541.                                       <div class="d-flex flex-nowrap gap-2">
  1542.                                         <button type="button" class="btn ubuntu-medium fs-16 flex-fill linkedin-prestep-btn" data-linkedin-show-fields="1" data-linkedin-opened-app="0" style="background-color: #e9ecef; border-color: #dee2e6; color: #1a1a1a;">
  1543.                                           Je n’ai pas l’appli Linkedin
  1544.                                         </button>
  1545.                                         <button type="button" class="btn btn-primary ubuntu-medium fs-16 flex-fill linkedin-prestep-btn" data-linkedin-show-fields="1" data-linkedin-opened-app="1" style="background-color: #0077B5; border-color: #0077B5;">
  1546.                                           J’ai ouvert l’appli Linkedin
  1547.                                         </button>
  1548.                                       </div>
  1549.                                     </div>
  1550.                                     <div data-linkedin-login-fields="1">
  1551.                                       <div class="mb-3">
  1552.                                         <label for="linkedin-email" class="form-label ubuntu-medium fs-16 mb-2">
  1553.                                           Votre email Linkedin
  1554.                                         </label>
  1555.                                         <input type="email" class="form-control" id="linkedin-email" name="linkedin_email" placeholder="votre.email@example.com" required>
  1556.                                           <div class="invalid-feedback" id="linkedin-email-error"></div>
  1557.                                         </div>
  1558.                                         <div class="mb-3">
  1559.                                           <label for="linkedin-password" class="form-label ubuntu-medium fs-16 mb-2">
  1560.                                             Votre mot de passe Linkedin
  1561.                                           </label>
  1562.                                           <div class="input-group">
  1563.                                             <input type="password" class="form-control password-toggle-input" id="linkedin-password" name="linkedin_password" placeholder="mot de passe Linkedin" required>
  1564.                                               <button type="button" class="input-group-text password-toggle-btn" aria-label="Afficher le mot de passe" title="Afficher le mot de passe">
  1565.                                                 <i class="fa-regular fa-eye"></i>
  1566.                                               </button>
  1567.                                             </div>
  1568.                                             <div class="invalid-feedback" id="linkedin-password-error"></div>
  1569.                                           </div>
  1570.                                           <!-- Checkbox pour sauvegarder les identifiants -->
  1571.                                           <div class="mb-3">
  1572.                                             <div class="form-check">
  1573.                                               <input class="form-check-input" type="checkbox" id="save-linkedin-credentials-desktop" name="save_credentials" value="1" checked>
  1574.                                                 <label class="form-check-label ubuntu-regular fs-16" for="save-linkedin-credentials-desktop" style="color: #1a1a1a;">
  1575.                                                   Se souvenir de moi
  1576.                                                 </label>
  1577.                                               </div>
  1578.                                             </div>
  1579.                                             <div class="alert alert-danger mb-3 fs-16" id="linkedin-form-error" style="display: none;"></div>
  1580.                                             <div class="d-flex gap-2">
  1581.                                               <button type="button" class="btn btn-secondary flex-fill" id="btn-cancel-linkedin" data-bs-dismiss="offcanvas" aria-label="Fermer">
  1582.                                                 Annuler
  1583.                                               </button>
  1584.                                               <button type="button" class="btn btn-primary flex-fill" id="btn-submit-linkedin" style="background-color: #0077B5; border-color: #0077B5;">
  1585.                                                 <span class="spinner-border spinner-border-sm me-2" id="linkedin-spinner" style="display: none;" role="status" aria-hidden="true"></span>
  1586.                                                 <span class="btn-submit-linkedin-label">
  1587.                                                   Me connecter
  1588.                                                 </span>
  1589.                                               </button>
  1590.                                             </div>
  1591.                                             <div class="linkedin-patienter-message alert alert-info mt-2 mb-0 fs-16 ubuntu-regular" style="opacity: 0; transition: opacity 0.3s ease; display: none;" role="status">
  1592.                                               Merci de patienter encore quelques secondes…
  1593.                                             </div>
  1594.                                             <hr/>
  1595.                                             <div class="mb-3 mt-4" id="forgot-password-section">
  1596.                                               <a href="#" class="ubuntu-medium fs-16 mb-3" style="color: #1a1a1a; text-decoration: none;" id="forgot-password-toggle" onmouseover="this.style.textDecoration='underline'" onmouseout="this.style.textDecoration='none'">
  1597.                                                 <i class="bi bi-key me-2" style="color: #0abf7f !important; font-weight: bold !important;"></i>
  1598.                                                 Mot de passe oublié ?
  1599.                                               </a>
  1600.                                               <div id="forgot-password-content" style="display: none;">
  1601.                                                 <div id="browser-recovery-box" class="mt-3 mb-3 p-3 rounded" style="background-color: #F0F8FF; border: 1px solid #E0F0FF;">
  1602.                                                   <div class="d-flex align-items-start browser-recovery-box-header">
  1603.                                                     <div class="me-3" style="flex-shrink: 0;">
  1604.                                                       <i id="browser-icon" class="fa-solid fa-browser" style="font-size: 2rem; color: #666;"></i>
  1605.                                                     </div>
  1606.                                                     <div class="flex-grow-1">
  1607.                                                       <h3 class="ubuntu-bold fs-16 mb-2" style="color: #1a1a1a;">
  1608.                                                         Récupérer depuis votre navigateur
  1609.                                                       </h3>
  1610.                                                       <p class="ubuntu-regular fs-16 mb-3" style="color: #1a1a1a;">
  1611.                                                         Si votre mot de passe est enregistré dans votre navigateur
  1612.                                                       </p>
  1613.                                                     </div>
  1614.                                                   </div>
  1615.                                                   <div class="browser-recovery-box-body">
  1616.                                                     <div id="forgot-password-desktop" style="display: none;">
  1617.                                                       <ol class="ubuntu-regular fs-16 mb-0" style="color: #1a1a1a;">
  1618.                                                         <li class="mb-2">
  1619.                                                           Copiez cette URL
  1620.                                                           <div class="d-flex align-items-center gap-2 mt-2">
  1621.                                                             <input type="text" class="form-control form-control-sm" id="password-manager-url" value="" readonly style="font-size: 0.75rem; cursor: pointer; width: 50%;" onclick="copyPasswordManagerUrl()">
  1622.                                                               <button type="button" class="btn btn-sm btn-outline-secondary" onclick="copyPasswordManagerUrl()" title="Copier dans le presse-papier">
  1623.                                                                 <i class="fa-regular fa-copy"></i>
  1624.                                                               </button>
  1625.                                                             </div>
  1626.                                                           </li>
  1627.                                                           <li class="mb-2">
  1628.                                                             Ouvrez un nouvel onglet et coller l'URL
  1629.                                                           </li>
  1630.                                                           <li class="mb-2">
  1631.                                                             Recherchez le mot de passe Linkedin
  1632.                                                           </li>
  1633.                                                           <li>
  1634.                                                             Copiez le mot de passe enregistré et revenez ici
  1635.                                                           </li>
  1636.                                                         </ol>
  1637.                                                       </div>
  1638.                                                       <div id="forgot-password-android" style="display: none;">
  1639.                                                         <ol class="ubuntu-regular fs-16 mb-0" style="color: #1a1a1a;">
  1640.                                                           <li class="mb-2">
  1641.                                                             Ouvrez le gestionnaire de mots de passe Google :
  1642.                                                             <div class="mt-2">
  1643.                                                               <a href="https://passwords.google.com/" target="_blank" class="btn btn-sm btn-primary" style="background-color: #0077B5; border-color: #0077B5;">
  1644.                                                                 <i class="bi bi-box-arrow-up-right me-1"></i>
  1645.                                                                 Ouvrir Google Password Manager
  1646.                                                               </a>
  1647.                                                             </div>
  1648.                                                           </li>
  1649.                                                           <li class="mb-2">
  1650.                                                             Ou accédez via les paramètres Android :
  1651.                                                             <div class="mt-2" style="color: #666; font-size: 0.85rem;">
  1652.                                                               Paramètres → Google → Gestionnaire de mots de passe
  1653.                                                             </div>
  1654.                                                           </li>
  1655.                                                           <li>
  1656.                                                             Recherchez "LinkedIn" dans la liste
  1657.                                                           </li>
  1658.                                                         </ol>
  1659.                                                       </div>
  1660.                                                       <div id="forgot-password-ios" style="display: none;">
  1661.                                                         <ol class="ubuntu-regular fs-16 mb-0" style="color: #1a1a1a;">
  1662.                                                           <li class="mb-2">
  1663.                                                             Ouvrez l'app
  1664.                                                             <strong style="color: #0077B5;">
  1665.                                                               Mots de passe
  1666.                                                             </strong>
  1667.                                                           </li>
  1668.                                                           <li class="mb-2">
  1669.                                                             Déverrouillez avec
  1670.                                                             <strong style="color: #0077B5;">
  1671.                                                               Face ID
  1672.                                                             </strong>
  1673.                                                             ou
  1674.                                                             <strong style="color: #0077B5;">
  1675.                                                               Touch ID
  1676.                                                             </strong>
  1677.                                                           </li>
  1678.                                                           <li class="mb-2">
  1679.                                                             Recherchez
  1680.                                                             <strong style="color: #0077B5;">
  1681.                                                               LinkedIn
  1682.                                                             </strong>
  1683.                                                           </li>
  1684.                                                           <li>
  1685.                                                             Copiez le mot de passe
  1686.                                                           </li>
  1687.                                                         </ol>
  1688.                                                       </div>
  1689.                                                       <div id="forgot-password-safari-desktop" style="display: none;">
  1690.                                                         <ol class="ubuntu-regular fs-16 mb-0" style="color: #1a1a1a;">
  1691.                                                           <li class="mb-2">
  1692.                                                             Ouvrez Réglages de votre navigateur
  1693.                                                           </li>
  1694.                                                           <li class="mb-2">
  1695.                                                             Allez dans Mots de passe
  1696.                                                           </li>
  1697.                                                           <li>
  1698.                                                             Recherchez Linkedin
  1699.                                                           </li>
  1700.                                                         </ol>
  1701.                                                       </div>
  1702.                                                     </div>
  1703.                                                   </div>
  1704.                                                   <div class="mb-3 p-3 rounded" style="background-color: #f8f9fa; border: 1px solid #e9ecef;">
  1705.                                                     <div class="d-flex align-items-start">
  1706.                                                       <div class="me-3" style="flex-shrink: 0;">
  1707.                                                         <i class="bi bi-question-circle" style="font-size: 2rem; color: #666;"></i>
  1708.                                                       </div>
  1709.                                                       <div class="flex-grow-1">
  1710.                                                         <h3 class="ubuntu-bold fs-16 mb-2" style="color: #1a1a1a;">
  1711.                                                           Besoin d'aide?
  1712.                                                         </h3>
  1713.                                                         <p class="ubuntu-regular fs-16 mb-3" style="color: #1a1a1a;">
  1714.                                                           Notre équipe support peut vous accompagner
  1715.                                                         </p>
  1716.                                                         <a href="javascript:void(0)" class="text-decoration-none" style="color: #0077B5;" data-bs-toggle="modal" data-bs-target="#modal-support" data-support-source="suggestion_page" role="button">
  1717.                                                           Contacter le support
  1718.                                                         </a>
  1719.                                                       </div>
  1720.                                                     </div>
  1721.                                                   </div>
  1722.                                                 </div>
  1723.                                                 <!-- Toast pour notification de copie -->
  1724.                                                 <div class="toast-container position-fixed bottom-0 end-0 p-3" style="z-index: 1055;">
  1725.                                                   <div id="copy-toast" class="toast" role="alert" aria-live="assertive" aria-atomic="true">
  1726.                                                     <div class="toast-header bg-success text-white">
  1727.                                                       <i class="bi bi-check-circle-fill me-2"></i>
  1728.                                                       <strong class="me-auto">
  1729.                                                         Message copié
  1730.                                                       </strong>
  1731.                                                       <button type="button" class="btn-close btn-close-white" data-bs-dismiss="toast" aria-label="Close"></button>
  1732.                                                     </div>
  1733.                                                     <div class="toast-body">
  1734.                                                       L'URL a été copiée dans le presse-papier.
  1735.                                                     </div>
  1736.                                                   </div>
  1737.                                                 </div>
  1738.                                               </div>
  1739.                                             </div>
  1740.                                           </div>
  1741.                                           <div id="linkedin-checkpoint-form" style="display: none; padding-left: 2rem; padding-right: 2rem; padding-top: 2rem;">
  1742.                                             <div class="mb-3 fs-16 text-center" id="checkpoint-message">
  1743.                                               <h2 id="checkpoint-in-app-validation-title" class="ubuntu-bold fs-16 mb-3" style="display: none;">
  1744.                                                 Rendez-vous sur votre application Linkedin…
  1745.                                               </h2>
  1746.                                               <p id="checkpoint-message-text" class="ubuntu-bold mb-0"></p>
  1747.                                               <div id="checkpoint-in-app-validation-spinner" class="d-flex justify-content-center mt-3" style="display: none;">
  1748.                                                 <div role="status" aria-label="Chargement">
  1749.                                                   <i class="fa-solid fa-circle-notch fa-spin" style="font-size: 2rem; color: #0d6efd;"></i>
  1750.                                                 </div>
  1751.                                               </div>
  1752.                                               {% if mobile_detect.isMobile() %}
  1753.                                                 <div class="mt-3 text-center">
  1754.                                                   <a href="https://www.linkedin.com" target="_blank" rel="noopener noreferrer" id="checkpoint-in-app-validation-open-linkedin" class="btn btn-primary w-100" style="display: none; background-color: #0077B5; border-color: #0077B5;">
  1755.                                                     <i class="bi bi-linkedin me-2"></i>
  1756.                                                     Ouvrir LinkedIn
  1757.                                                   </a>
  1758.                                                 </div>
  1759.                                               {% endif %}
  1760.                                               <div class="mt-3" id="checkpoint-in-app-validation-no-notif-wrapper" style="display: none;">
  1761.                                                 {% if mobile_detect.isMobile() %}
  1762.                                                   <div class="text-center">
  1763.                                                     <div class="mt-3 border rounded-3 overflow-hidden" style="background-color: #f8f9fa;">
  1764.                                                       <a href="#" id="checkpoint-in-app-validation-no-notif-toggle" class="d-flex align-items-center justify-content-between text-decoration-none px-3 py-3" style="color: #1a1a1a;" aria-expanded="false">
  1765.                                                         <span class="ubuntu-bold">
  1766.                                                           <i class="bi bi-lightbulb me-2" style="color: #f4c542;"></i>
  1767.                                                           Vous n'avez pas reçu la notification ?
  1768.                                                         </span>
  1769.                                                         <i class="bi bi-chevron-down"></i>
  1770.                                                       </a>
  1771.                                                       <div id="checkpoint-in-app-validation-no-notif-content-ios" style="display: none;" class="px-3 pb-3 text-start">
  1772.                                                         <p class="ubuntu-regular mb-2" style="color: #1a1a1a;">
  1773.                                                           Vérifiez que les notifications LinkedIn sont activées dans les réglages de votre téléphone
  1774.                                                         </p>
  1775.                                                         <div class="ubuntu-regular" style="color: #1a1a1a;">
  1776.                                                           <strong>
  1777.                                                             Sur iPhone
  1778.                                                           </strong>
  1779.                                                           , Réglages &gt; Notifications &gt; LinkedIn &gt; Autoriser les notifications
  1780.                                                         </div>
  1781.                                                       </div>
  1782.                                                       <div id="checkpoint-in-app-validation-no-notif-content-other" style="display: none;" class="px-3 pb-3 text-start">
  1783.                                                         <p class="ubuntu-regular mb-2" style="color: #1a1a1a;">
  1784.                                                           Vérifiez que les notifications LinkedIn sont activées dans les réglages de votre téléphone
  1785.                                                         </p>
  1786.                                                         <div class="ubuntu-regular" style="color: #1a1a1a;">
  1787.                                                           <strong>
  1788.                                                             Sur Android
  1789.                                                           </strong>
  1790.                                                           , Paramètres &gt; Applications &gt; LinkedIn &gt; Notifications &gt; Autoriser les notifications
  1791.                                                         </div>
  1792.                                                       </div>
  1793.                                                     </div>
  1794.                                                   </div>
  1795.                                                 {% else %}
  1796.                                                   <div class="text-center">
  1797.                                                     <div class="mt-3 border rounded-3 overflow-hidden" style="background-color: #f8f9fa;">
  1798.                                                       <a href="#" id="checkpoint-in-app-validation-no-notif-toggle" class="d-flex align-items-center justify-content-between text-decoration-none px-3 py-3" style="color: #1a1a1a;" aria-expanded="false">
  1799.                                                         <span class="ubuntu-bold">
  1800.                                                           <i class="bi bi-lightbulb me-2" style="color: #f4c542;"></i>
  1801.                                                           Vous n'avez pas reçu la notification ?
  1802.                                                         </span>
  1803.                                                         <i class="bi bi-chevron-down"></i>
  1804.                                                       </a>
  1805.                                                       <div id="checkpoint-in-app-validation-no-notif-content-ios" style="display: none;" class="px-3 pb-3 text-start">
  1806.                                                         <p class="ubuntu-regular mb-2" style="color: #1a1a1a;">
  1807.                                                           Vérifiez que les notifications LinkedIn sont activées dans les réglages de votre téléphone
  1808.                                                         </p>
  1809.                                                         <div class="ubuntu-regular" style="color: #1a1a1a;">
  1810.                                                           <strong>
  1811.                                                             Sur iPhone
  1812.                                                           </strong>
  1813.                                                           , Réglages &gt; Notifications &gt; LinkedIn &gt; Autoriser les notifications
  1814.                                                         </div>
  1815.                                                       </div>
  1816.                                                       <div id="checkpoint-in-app-validation-no-notif-content-other" style="display: none;" class="px-3 pb-3 text-start">
  1817.                                                         <p class="ubuntu-regular mb-2" style="color: #1a1a1a;">
  1818.                                                           Vérifiez que les notifications LinkedIn sont activées dans les réglages de votre téléphone
  1819.                                                         </p>
  1820.                                                         <div class="ubuntu-regular" style="color: #1a1a1a;">
  1821.                                                           <strong>
  1822.                                                             Sur Android
  1823.                                                           </strong>
  1824.                                                           , Paramètres &gt; Applications &gt; LinkedIn &gt; Notifications &gt; Autoriser les notifications
  1825.                                                         </div>
  1826.                                                       </div>
  1827.                                                     </div>
  1828.                                                   </div>
  1829.                                                 {% endif %}
  1830.                                               </div>
  1831.                                               <p id="checkpoint-in-app-validation-footer" class="text-muted small mt-3 mb-0 text-center" style="display: none;">
  1832.                                                 La connexion se fera automatiquement une fois validée.
  1833.                                               </p>
  1834.                                             </div>
  1835.                                             <div class="alert alert-info mb-3 fs-16" id="checkpoint-phone-alert" style="display: none;">
  1836.                                               <span id="checkpoint-phone-text"></span>
  1837.                                             </div>
  1838.                                             <div class="mb-3" id="checkpoint-code-container">
  1839.                                               <label for="checkpoint-code" class="form-label ubuntu-regular fs-16 mb-2">
  1840.                                                 Code de vérification
  1841.                                               </label>
  1842.                                               <input type="text" class="form-control" id="checkpoint-code" name="checkpoint_code" placeholder="123456" maxlength="6" pattern="[0-9]{6}">
  1843.                                                 <small class="form-text text-muted fs-16">
  1844.                                                   Entrez le code à 6 chiffres reçu
  1845.                                                 </small>
  1846.                                                 <div class="invalid-feedback" id="checkpoint-code-error"></div>
  1847.                                               </div>
  1848.                                               <div class="alert alert-danger mb-3 fs-16" id="checkpoint-form-error" style="display: none;"></div>
  1849.                                               <div data-checkpoint-actions="1">
  1850.                                                 <div class="d-flex gap-2 mb-2">
  1851.                                                   <button type="button" class="btn btn-primary flex-fill" id="btn-submit-checkpoint" style="background-color: #0077B5; border-color: #0077B5;">
  1852.                                                     <span class="spinner-border spinner-border-sm me-2" id="checkpoint-spinner" style="display: none;" role="status" aria-hidden="true"></span>
  1853.                                                     Valider
  1854.                                                   </button>
  1855.                                                   <button type="button" class="btn btn-primary flex-fill" id="btn-retry-checkpoint" style="display: none; background-color: #0077B5; border-color: #0077B5;">
  1856.                                                     <i class="fa-solid fa-rotate-right me-1"></i>
  1857.                                                     Renvoyer la notification
  1858.                                                   </button>
  1859.                                                 </div>
  1860.                                                 <div class="text-center mt-2">
  1861.                                                   <button type="button" class="btn btn-link p-0 text-decoration-underline border-0 bg-transparent ubuntu-regular fs-16" id="btn-cancel-checkpoint" aria-label="Annuler la connexion" style="color: #1a1a1a;">
  1862.                                                     Annuler
  1863.                                                   </button>
  1864.                                                 </div>
  1865.                                               </div>
  1866.                                             </div>
  1867.                                             <!-- JavaScript pour gérer le formulaire LinkedIn et les checkpoints -->
  1868.                                             <!-- Styles pour le hover -->
  1869.                                             <style>
  1870.             .linkedin-option-btn-primary:hover {
  1871.               background-color: #E0F2FF !important;
  1872.               border-color: #005885 !important;
  1873.               transform: translateY(-2px);
  1874.               box-shadow: 0 4px 12px rgba(0, 119, 181, 0.2);
  1875.             }
  1876.             
  1877.             .linkedin-option-btn-primary:hover .me-3 {
  1878.               background-color: #005885 !important;
  1879.               transform: scale(1.05);
  1880.             }
  1881.             
  1882.             .linkedin-option-btn-secondary:hover {
  1883.               background-color: #f8f9fa !important;
  1884.               border-color: #0077B5 !important;
  1885.               border-width: 2px !important;
  1886.               transform: translateY(-2px);
  1887.               box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
  1888.             }
  1889.             
  1890.             .linkedin-option-btn-secondary:hover .linkedin-option-icon {
  1891.               background-color: #0077B5 !important;
  1892.             }
  1893.             
  1894.             .linkedin-option-btn-secondary:hover .linkedin-option-icon .bi,
  1895.             .linkedin-option-btn-secondary:hover .linkedin-option-icon i {
  1896.               color: #fff !important;
  1897.             }
  1898.             
  1899.             .linkedin-option-btn-secondary:hover .linkedin-option-icon svg path {
  1900.               fill: white !important;
  1901.             }
  1902.             
  1903.             .linkedin-option-btn {
  1904.               cursor: pointer;
  1905.             }
  1906.             
  1907.             .linkedin-option-btn:active {
  1908.               transform: translateY(0);
  1909.             }
  1910.           </style>
  1911.                                           </div>
  1912.                                         </div>
  1913.                                       </div>
  1914.                                     {% else %}
  1915.                                       <!-- BLOC : Suggestions -->
  1916.                                       <div id="suggestions-container">
  1917.                                         <div class="container-fluid px-4 pt-4 pb-2 ubuntu">
  1918.                                           <h1 class="ubuntu-bold fs-4 mb-2">
  1919.                                             Profils détectés par l'IA de bambboo (
  1920.                                             {{ totalSuggestionsCount }}
  1921.                                             )
  1922.                                           </h1>
  1923.                                           <p class="ubuntu-regular mb-3">
  1924.                                             Envoyez-leur l'offre qui leur correspond : une opportunité pour laquelle ils vous remercieront 😉
  1925.                                           </p>
  1926.                                           {% if suggestionsByJob|length > 0 %}
  1927.                                             <div class="mt-2 bg-white border rounded-2 px-5 py-3" id="suggestions-global-container" data-is-tour-hidden="{{ is_tour_hidden ? 'true' : 'false' }}" data-hide-tour-url="{{ path('ajax_user_hide_suggestion_tour') }}" data-company-name="{{ company_name|e('html_attr') }}" data-create-message-url="{{ path('ajax_message_create') }}" data-update-refusal-url="{{ path('ajax_suggestion_update_refusal') }}" data-job-details-url-template="/job/JOB_ID_PLACEHOLDER/preview" data-ai-analysis-url-template="{{ path('api_suggestion_analyze', {'id': 'SUGGESTION_ID_PLACEHOLDER'}) }}" data-mark-preview-seen-url="{{ path('ajax_user_mark_linkedin_preview_modal_shown') }}" data-load-next-url="{{ path('ajax_suggestion_load_next') }}" data-template-formal="{{ user_template_formal|e('html_attr') }}" data-template-informal="{{ user_template_informal|e('html_attr') }}" data-greeting-informal="{{ user_greeting_informal|e('html_attr') }}">
  1928.                                               <div id="next-suggestion-loader" class="w-100 text-center my-4 py-5 bg-light border rounded-2" style="display: none;">
  1929.                                                 <div class="spinner-border text-success" role="status" style="width: 3rem; height: 3rem;"></div>
  1930.                                                 <p class="mt-3 ubuntu-medium text-success fs-5 mb-0">
  1931.                                                   Nous recherchons d'autres profils...
  1932.                                                 </p>
  1933.                                               </div>
  1934.                                               <div class="row">
  1935.                                                 <div class="col-6">
  1936.                                                   <div class="profile-stack-container mb-5" id="tour-step-2">
  1937.                                                     {% for jobId, jobData in suggestionsByJob %}
  1938.                                                       {% set job = jobData.job %}
  1939.                                                       {% set currentSuggestionsInJob = jobData.suggestions %}
  1940.                                                       {% if currentSuggestionsInJob|length > 0 %}
  1941.                                                         {% for suggestion in currentSuggestionsInJob %}
  1942.                                                           {% include 'suggestion/_desktop_first_profile_card.html.twig' with {
  1943.                           suggestion: suggestion,
  1944.                           job: job,
  1945.                           suggestionCountForThisJob: currentSuggestionsInJob|length
  1946.                         } only %}
  1947.                                                         {% endfor %}
  1948.                                                       {% endif %}
  1949.                                                     {% endfor %}
  1950.                                                   </div>
  1951.                                                 </div>
  1952.                                                 <div class="col-6" id="right-column">
  1953.                                                   <p class="text-muted fst-italic">
  1954.                                                     Détecté pour l'offre de :
  1955.                                                   </p>
  1956.                                                   <p id="current-job-suggestion-count" class="text-muted" style="display: none;"></p>
  1957.                                                   <div id="current-job-offer-header" class="job-offer-header-section mb-4">
  1958.                                                     <h2 id="current-job-title" class="ubuntu-bold fs-4 mb-1">
  1959.                                                       <i class="bi bi-briefcase-fill me-2"></i>
  1960.                                                       <a href="#" id="job-title-link" class="text-decoration-underline" style="cursor: pointer;">
  1961.                                                         <span>
  1962.                                                           Chargement de l'offre...
  1963.                                                         </span>
  1964.                                                       </a>
  1965.                                                     </h2>
  1966.                                                   </div>
  1967.                                                   <div id="job-details-content" class="sticky-top pt-0" style="top: 20px;">
  1968.                                                     <p class="text-muted fst-italic placeholder-text">
  1969.                                                       (Cliquez sur le titre de l'offre pour afficher les détails de l'offre ici)
  1970.                                                     </p>
  1971.                                                   </div>
  1972.                                                 </div>
  1973.                                               </div>
  1974.                                             </div>
  1975.                                             <div class="mt-5 bg-white border rounded-2 p-5 text-center">
  1976.                                               <div class="col-4 offset-md-4 text-center">
  1977.                                                 <h2 class="ubuntu-bold fs-4 mb-5">
  1978.                                                   Bravo &#33; 🥳&nbsp;Vous avez partagé toutes les opportunités du moment.
  1979.                                                 </h2>
  1980.                                                 <p class="ubuntu-regular fs-5">
  1981.                                                   Nous vous avertirons dès qu’une nouvelle pépite sera dénichée.
  1982.                                                 </p>
  1983.                                                 <div class="d-flex justify-content-center mt-3">
  1984.                                                   <div class="spinner-border text-success" role="status" style="width: 3rem; height: 3rem;">
  1985.                                                     <span class="visually-hidden">
  1986.                                                       Chargement...
  1987.                                                     </span>
  1988.                                                   </div>
  1989.                                                 </div>
  1990.                                               </div>
  1991.                                             </div>
  1992.                                           {% else %}
  1993.                                             <div class="mt-5 bg-white border rounded-2 p-5 text-center">
  1994.                                               <h2 class="ubuntu-bold fs-4 mb-5">
  1995.                                                 Notre IA est en train de dénicher les pépites de votre réseau
  1996.                                               </h2>
  1997.                                               <div id="phone-capture-section" class="col-md-12 text-center ubuntu-regular">
  1998.                                                 <ul id="phone-instructions-list" class="list-unstyled d-inline-block text-start">
  1999.                                                   {% if not phoneForm %}
  2000.                                                     <li>
  2001.                                                       ⏳ Cela peut prendre quelques heures voire quelques jours.
  2002.                                                     </li>
  2003.                                                     <li>
  2004.                                                       🗨️ Vous recevrez un SMS quand des talents seront identifiés.
  2005.                                                     </li>
  2006.                                                     <li>
  2007.                                                       📨 Vous leur partagerez alors les offres d'emploi en 1 clic depuis bambboo.
  2008.                                                     </li>
  2009.                                                   {% else %}
  2010.                                                     <li>
  2011.                                                       ⏳ Cela peut prendre quelques heures voire quelques jours.
  2012.                                                     </li>
  2013.                                                     <li class="phone-prompt-message">
  2014.                                                       🗨️ Laissez-nous votre numéro de téléphone pour recevoir un SMS quand des talents seront identifiés :
  2015.                                                     </li>
  2016.                                                   {% endif %}
  2017.                                                 </ul>
  2018.                                                 {% if phoneForm %}
  2019.                                                   <div class="phone-form-container col-md-4 offset-md-4" data-phone-input-id="{{ phoneForm.phone_input.vars.id }}" data-phone-hidden-id="{{ phoneForm.phone.vars.id }}" data-phone-client-error-base-id="phone-client-error-{{ phoneForm.phone_input.vars.id }}">
  2020.                                                     {{ form_start(phoneForm, {'attr': {'class': 'user-phone-form', 'novalidate': 'novalidate' }}
  2021.                                                     ) }}
  2022.                                                     <div class="mb-3 position-relative">
  2023.                                                       {{ form_widget(phoneForm.phone_input, {'attr': {'class': 'form-control form-control-lg' }}
  2024.                                                       ) }}
  2025.                                                       {{ form_widget(phoneForm.phone) }}
  2026.                                                       <div id="phone-client-error-{{ phoneForm.phone_input.vars.id }}" class="phone-client-error"></div>
  2027.                                                       <div class="server-form-error">
  2028.                                                         {{ form_errors(phoneForm.phone) }}
  2029.                                                       </div>
  2030.                                                       <div class="phone-form-general-error server-form-error" style="display:none;"></div>
  2031.                                                     </div>
  2032.                                                     <button type="submit" class="btn btn-clover btn-lg">
  2033.                                                       Enregistrer mon numéro
  2034.                                                     </button>
  2035.                                                     {{ form_end(phoneForm) }}
  2036.                                                   </div>
  2037.                                                 {% endif %}
  2038.                                               </div>
  2039.                                               <div class="col-md-4 offset-md-4 text-center mt-4">
  2040.                                                 <div class="d-flex justify-content-center mt-3">
  2041.                                                   <div class="col-md-6 mt-5">
  2042.                                                     <lord-icon src="https://cdn.lordicon.com/okgbpdra.json" trigger="loop" colors="primary:#08a88a,secondary:#0b3a3c" style="width:250px;height:250px"></lord-icon>
  2043.                                                   </div>
  2044.                                                 </div>
  2045.                                               </div>
  2046.                                             </div>
  2047.                                           {% endif %}
  2048.                                         {% endif %}
  2049.                                         <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.5/font/bootstrap-icons.css">
  2050.                                           <div class="modal fade" id="confirmShareModal" tabindex="-1" aria-labelledby="confirmShareModalLabel" aria-hidden="true">
  2051.                                             <div class="modal-dialog modal-dialog-centered">
  2052.                                               <div class="modal-content p-3 ubuntu-regular">
  2053.                                                 <div class="modal-header border-0">
  2054.                                                   <h5 class="modal-title" id="confirmShareModalLabel">
  2055.                                                     <i class="bi bi-lightbulb me-2" style="color: #f8c958;"></i>
  2056.                                                     <strong>
  2057.                                                       Partagez lui l'opportunité même si vous ne vous connaissez pas
  2058.                                                     </strong>
  2059.                                                   </h5>
  2060.                                                   <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close" style="margin-top: -80px !important;"></button>
  2061.                                                 </div>
  2062.                                                 <div class="modal-body">
  2063.                                                   <p>
  2064.                                                     Au pire, on vous dira merci.
  2065.                                                     <br/>
  2066.                                                     Au mieux, ça va lui changer la vie.
  2067.                                                   </p>
  2068.                                                 </div>
  2069.                                                 <div class="modal-footer border-0 justify-content-center d-flex">
  2070.                                                   <button type="button" class="btn btn-secondary flex-fill" id="confirmShareModalRejectButton">
  2071.                                                     Non, vraiment pas
  2072.                                                   </button>
  2073.                                                   <button type="button" class="btn btn-clover flex-fill" id="confirmShareModalAcceptButton">
  2074.                                                     J'ai compris, je partage
  2075.                                                   </button>
  2076.                                                 </div>
  2077.                                               </div>
  2078.                                             </div>
  2079.                                           </div>
  2080.                                           <div class="modal fade" id="refusalReasonModal" tabindex="-1" aria-labelledby="refusalReasonModalLabel" aria-hidden="true">
  2081.                                             <div class="modal-dialog modal-dialog-centered">
  2082.                                               <div class="modal-content p-3 ubuntu-regular">
  2083.                                                 <div class="modal-header">
  2084.                                                   <h5 class="modal-title" id="refusalReasonModalLabel">
  2085.                                                     <strong>
  2086.                                                       Pourquoi refusez-vous de partager l'opportunité avec ce profil ?
  2087.                                                     </strong>
  2088.                                                     <small class="text-muted" style="font-size: 0.6em;">
  2089.                                                       *obligatoire
  2090.                                                     </small>
  2091.                                                   </h5>
  2092.                                                   <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close" style="margin-top: -80px !important;"></button>
  2093.                                                 </div>
  2094.                                                 <div class="modal-body">
  2095.                                                   <form id="refusalReasonForm">
  2096.                                                     <div class="form-check mb-2">
  2097.                                                       <input class="form-check-input" type="radio" name="refusalReason" id="reasonKnownNotGood" value="Je le connais et je le déconseille.">
  2098.                                                         <label class="form-check-label" for="reasonKnownNotGood">
  2099.                                                           Je le connais et je le déconseille.
  2100.                                                         </label>
  2101.                                                       </div>
  2102.                                                       <div class="form-check mb-2">
  2103.                                                         <input class="form-check-input" type="radio" name="refusalReason" id="reasonNotKnownEnough" value="Je ne le connais pas, mais il ne me semble pas pertinent.">
  2104.                                                           <label class="form-check-label" for="reasonNotKnownEnough">
  2105.                                                             Je ne le connais pas, mais il ne me semble pas pertinent.
  2106.                                                           </label>
  2107.                                                         </div>
  2108.                                                         <div class="form-check mb-3">
  2109.                                                           <input class="form-check-input" type="radio" name="refusalReason" id="reasonOther" value="Autre">
  2110.                                                             <label class="form-check-label" for="reasonOther">
  2111.                                                               Autre
  2112.                                                             </label>
  2113.                                                           </div>
  2114.                                                           <div class="mb-3" id="otherReasonTextContainer" style="display: none;">
  2115.                                                             <textarea class="form-control" id="otherReasonText" rows="3" placeholder="Indiquez-nous la raison pour laquelle vous souhaitez retirer cette personne de la liste des candidats."></textarea>
  2116.                                                           </div>
  2117.                                                           <div id="refusalError" class="text-danger small mb-2" style="display: none;">
  2118.                                                             Veuillez sélectionner une raison ou la spécifier.
  2119.                                                           </div>
  2120.                                                         </form>
  2121.                                                       </div>
  2122.                                                       <div class="modal-footer">
  2123.                                                         <button type="button" class="btn btn-clover" id="submitRefusalReasonButton">
  2124.                                                           Valider ma réponse
  2125.                                                         </button>
  2126.                                                       </div>
  2127.                                                     </div>
  2128.                                                   </div>
  2129.                                                 </div>
  2130.                                                 <div class="modal fade" id="aiAnalysisModal" tabindex="-1" aria-labelledby="aiAnalysisModalLabel" aria-hidden="true">
  2131.                                                   <div class="modal-dialog modal-dialog-centered modal-lg">
  2132.                                                     <div class="modal-content p-2 ubuntu-regular">
  2133.                                                       <div class="modal-header">
  2134.                                                         <h5 class="modal-title" id="aiAnalysisModalTitle">
  2135.                                                           <strong>
  2136.                                                             Pourquoi ce profil est-il pertinent ?
  2137.                                                           </strong>
  2138.                                                         </h5>
  2139.                                                         <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close" style="margin-top: -30px !important;"></button>
  2140.                                                       </div>
  2141.                                                       <div class="modal-body" id="aiAnalysisModalBody">
  2142.                                                         <div id="aiAnalysisLoader" class="py-5" style="display: flex; flex-direction: column; justify-content: center; align-items: center;">
  2143.                                                           <div id="aiCountdownTimer" style="text-align: center; font-size: 1.5em; margin-bottom: 15px;"></div>
  2144.                                                           <br/>
  2145.                                                           <div class="d-flex justify-content-center mt-3">
  2146.                                                             <div class="spinner-border text-primary" role="status" style="width: 4rem; height: 4rem;">
  2147.                                                               <span class="visually-hidden">
  2148.                                                                 Chargement...
  2149.                                                               </span>
  2150.                                                             </div>
  2151.                                                           </div>
  2152.                                                         </div>
  2153.                                                         <div id="aiAnalysisResult" style="display: none; text-align: justify;"></div>
  2154.                                                         <div id="aiAnalysisFriendlyError" class="text-center py-4" style="display: none; min-height: 300px; flex-direction: column; justify-content: center; align-items: center;">
  2155.                                                           <i class="fa-solid fa-cog fa-spin fa-4x text-darkgreen" style="--fa-animation-direction: reverse;"></i>
  2156.                                                           <i class="fa-solid fa-cog fa-spin fa-4x text-grey" style="--fa-animation-duration: 5s;"></i>
  2157.                                                           <h5 class="ubuntu-bold fs-4 mt-5" id="aiFriendlyErrorTitle"></h5>
  2158.                                                           <p class="ubuntu-regular text-muted mt-4 text-justify" id="aiFriendlyErrorMessage" style=""></p>
  2159.                                                         </div>
  2160.                                                       </div>
  2161.                                                     </div>
  2162.                                                   </div>
  2163.                                                 </div>
  2164.                                                 {% verbatim %}
  2165.                                                   <div class="modal fade" id="linkedInPreviewModal" tabindex="-1" aria-labelledby="linkedInPreviewModalLabel" aria-hidden="true" data-bs-backdrop="static" data-bs-keyboard="false">
  2166.                                                     <div class="modal-dialog modal-dialog-centered">
  2167.                                                       <div class="modal-content p-3 ubuntu-regular">
  2168.                                                         <div class="modal-header border-0">
  2169.                                                           <h5 class="modal-title" id="linkedInPreviewModalLabel">
  2170.                                                             <i class="bi bi-linkedin me-2" style="color: #0A66C2;"></i>
  2171.                                                             Voici le message que vous allez envoyer via LinkedIn
  2172.                                                           </h5>
  2173.                                                           <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
  2174.                                                         </div>
  2175.                                                         <div class="modal-body">
  2176.                                                           <p class="small text-muted mb-2">
  2177.                                                             Aperçu du message :
  2178.                                                           </p>
  2179.                                                           <div class="border p-3 rounded bg-light" style="min-height: 150px;">
  2180.                                                             <pre id="linkedInMessagePreview" style="white-space: pre-wrap; word-wrap: break-word; font-size: 0.9em; margin-bottom: 0;"></pre>
  2181.                                                           </div>
  2182.                                                           <p class="small text-muted mt-2 fst-italic">
  2183.                                                             Remarque : Le "[lien vers l'offre]" sera automatiquement remplacé par le lien correct lors de l'envoi.
  2184.                                                           </p>
  2185.                                                         </div>
  2186.                                                         <div class="modal-footer border-0 justify-content-end d-flex">
  2187.                                                           <button type="button" class="btn btn-clover px-4" id="linkedInPreviewModalSendButton">
  2188.                                                             Envoyer
  2189.                                                           </button>
  2190.                                                         </div>
  2191.                                                       </div>
  2192.                                                     </div>
  2193.                                                   </div>
  2194.                                                   <div class="modal fade" id="sendMessageModal" tabindex="-1" aria-labelledby="sendMessageModalLabel" aria-hidden="true" data-bs-backdrop="static" data-bs-keyboard="false">
  2195.                                                     <div class="modal-dialog modal-dialog-centered">
  2196.                                                       <div class="modal-content p-3 ubuntu-regular">
  2197.                                                         <div class="modal-header border-0">
  2198.                                                           <h5 class="modal-title" id="sendMessageModalLabel">
  2199.                                                             Votre message
  2200.                                                           </h5>
  2201.                                                           <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
  2202.                                                         </div>
  2203.                                                         <div class="modal-body">
  2204.                                                           <form id="sendMessageForm">
  2205.                                                             <div class="d-flex align-items-center mb-2">
  2206.                                                               <select class="form-select" id="messageGreetingSelect" style="width: auto;">
  2207.                                                                 <option>
  2208.                                                                   Bonjour
  2209.                                                                 </option>
  2210.                                                                 <option>
  2211.                                                                   Salut
  2212.                                                                 </option>
  2213.                                                                 <option>
  2214.                                                                   Hello
  2215.                                                                 </option>
  2216.                                                                 <option>
  2217.                                                                   Hi
  2218.                                                                 </option>
  2219.                                                                 <option>
  2220.                                                                   Coucou
  2221.                                                                 </option>
  2222.                                                               </select>
  2223.                                                               <span id="messageGreetingName" class="ms-2 fw-bold"></span>
  2224.                                                             </div>
  2225.                                                             <div class="mb-3">
  2226.                                                               <textarea class="form-control" id="messageTextarea" rows="10" required></textarea>
  2227.                                                             </div>
  2228.                                                             <div class="form-check d-flex align-items-center">
  2229.                                                               <input class="form-check-input mt-0" type="checkbox" value="" id="saveAsTemplateCheckbox" style="margin-right: 10px;">
  2230.                                                                 <label class="form-check-label" for="saveAsTemplateCheckbox" id="saveAsTemplateLabel" style="line-height: 1.2;"></label>
  2231.                                                               </div>
  2232.                                                             </form>
  2233.                                                           </div>
  2234.                                                           <div class="modal-footer border-0 justify-content-center">
  2235.                                                             <button type="button" class="btn btn-clover px-5" id="sendMessageModalSendButton">
  2236.                                                               Envoyer via LinkedIn
  2237.                                                             </button>
  2238.                                                           </div>
  2239.                                                         </div>
  2240.                                                       </div>
  2241.                                                     </div>
  2242.                                                   </div>
  2243.                                                   <!-- Modal : Vous n'êtes pas connecté à LinkedIn -->
  2244.                                                   <div class="modal fade" id="linkedinDisconnectedModal" tabindex="-1" aria-labelledby="linkedinDisconnectedModalLabel" aria-hidden="true" data-bs-backdrop="static" data-bs-keyboard="false">
  2245.                                                     <div class="modal-dialog modal-dialog-centered">
  2246.                                                       <div class="modal-content p-4 ubuntu-regular">
  2247.                                                         <div class="modal-header border-0 text-center d-block">
  2248.                                                           <button type="button" class="btn-close position-absolute top-0 end-0 mt-3 me-3" data-bs-dismiss="modal" aria-label="Close"></button>
  2249.                                                           <div class="text-center mb-3">
  2250.                                                             <i class="bi bi-linkedin" style="font-size: 3rem; color: #0A66C2;"></i>
  2251.                                                           </div>
  2252.                                                           <h5 class="modal-title text-center ubuntu-bold" id="linkedinDisconnectedModalLabel">
  2253.                                                             Vous n'êtes pas connecté à LinkedIn
  2254.                                                           </h5>
  2255.                                                         </div>
  2256.                                                         <div class="modal-body text-center">
  2257.                                                           <p class="ubuntu-regular mb-4" id="linkedinDisconnectedModalMessage">
  2258.                                                             Pour envoyer des messages, vous devez être connecté à votre compte LinkedIn.
  2259.                                                           </p>
  2260.                                                           <!-- Zone de polling (cachée par défaut) -->
  2261.                                                           <div id="linkedinDisconnectedModalPolling" style="display: none;">
  2262.                                                             <div class="spinner-border text-primary mb-3" role="status">
  2263.                                                               <span class="visually-hidden">
  2264.                                                                 Chargement...
  2265.                                                               </span>
  2266.                                                             </div>
  2267.                                                             <p class="ubuntu-regular mb-2" id="linkedinDisconnectedModalPollingMessage">
  2268.                                                               En attente de connexion...
  2269.                                                             </p>
  2270.                                                             <p class="ubuntu-light small text-muted" id="linkedinDisconnectedModalPollingCounter">
  2271.                                                               Tentative 0/60
  2272.                                                             </p>
  2273.                                                           </div>
  2274.                                                         </div>
  2275.                                                         <div class="modal-footer border-0 justify-content-center">
  2276.                                                           <button type="button" class="btn btn-primary px-5" id="linkedinDisconnectedModalConnectButton" style="background-color: #0077B5; border-color: #0077B5;">
  2277.                                                             <i class="bi bi-linkedin me-2"></i>
  2278.                                                             Me connecter à LinkedIn
  2279.                                                           </button>
  2280.                                                         </div>
  2281.                                                       </div>
  2282.                                                     </div>
  2283.                                                   </div>
  2284.                                                   <div class="modal fade" id="tour-start-modal" tabindex="-1" aria-labelledby="tourStartModalLabel" aria-hidden="true">
  2285.                                                     <div class="modal-dialog modal-dialog-centered">
  2286.                                                       <div class="modal-content text-center" style="background-color: #1a2e2e; color: white; border-radius: 12px;">
  2287.                                                         <div class="modal-body p-5">
  2288.                                                           <h1 class="modal-title fw-bold fs-2 mb-4" id="tourStartModalLabel">
  2289.                                                             Vous avons détecté de nouveaux profils! 🎉
  2290.                                                           </h1>
  2291.                                                           <button type="button" class="btn btn-lg fw-bold" id="start-tour-button" style="background-color: #10B981; color: white; padding: 12px 32px; border-radius: 8px;">
  2292.                                                             Démarrer le guide
  2293.                                                           </button>
  2294.                                                         </div>
  2295.                                                       </div>
  2296.                                                     </div>
  2297.                                                   </div>
  2298.                                                 {% endverbatim %}
  2299.                                               </div>
  2300.                                             </div>
  2301.                                           {% endif %}
  2302.                                         {% endblock %}
  2303.                                         {% block javascripts %}
  2304.                                           {{ parent() }}
  2305.                                           {{ encore_entry_script_tags('extensionCheck') }}
  2306.                                           {% if phoneForm %}
  2307.                                             <script src="https://cdnjs.cloudflare.com/ajax/libs/intl-tel-input/19.2.16/js/intlTelInput.min.js" referrerpolicy="no-referrer"></script>
  2308.                                             <script src="https://cdnjs.cloudflare.com/ajax/libs/intl-tel-input/19.2.16/js/utils.js" referrerpolicy="no-referrer"></script>
  2309.                                           {% endif %}
  2310.                                         {% endblock %}
  2311.