{% extends 'vitrine/lexend/layout.html.twig' %}{% block title %}{{ page.shortTitle }}{% endblock title %}{% block description %}{{ page.shortDescription }}{% endblock description %}{% block robots %}{{ page.robots }}{% endblock robots %}{% block meta_social %}{{ parent() }}{% include "/vitrine/components/socialmedia.html.twig" with { 'page':page,'social_type':'website' } %}{% endblock meta_social %}{% block meta %}{{ parent() }}{% include "/vitrine/components/author.html.twig" with {'page':page } %}{% endblock meta %}{% block canonical %}{% include "/vitrine/lexend/components/languages/canonical_classic.html.twig" %}{% endblock canonical %}{% block body_header %} {% embed "/vitrine/lexend/components/header.html.twig" with {'navcolor':'blue','navtype':'default'} %} {% block header_content %} {% include "/vitrine/lexend/components/languages/classic.html.twig" %} {% endblock %} {% block header_content2 %} {% include "/vitrine/lexend/components/languages/classic_mobile.html.twig" %} {% endblock %} {% endembed %}{% endblock body_header %}{% block css %} <style> .wr-search-section{position:relative;z-index:2;width:100%;max-width:720px;margin:0 auto} .wr-search-bar{display:flex;align-items:center;background:#fff;border-radius:16px;padding:6px;box-shadow:0 4px 24px rgba(108,58,237,.08),0 1px 3px rgba(0,0,0,.04);border:2px solid transparent;transition:border-color .3s,box-shadow .3s;cursor:pointer} .wr-search-bar:hover,.wr-search-bar.active{border-color:rgba(108,58,237,.2);box-shadow:0 8px 32px rgba(108,58,237,.12),0 2px 6px rgba(0,0,0,.04)} .wr-search-icon{padding:12px 14px;color:#9CA3AF;display:flex;align-items:center;flex-shrink:0} .wr-search-input-wrapper{flex:1;position:relative;height:48px;display:flex;align-items:center;overflow:hidden} .wr-search-typed-text{font-size:16px;color:#1E1B2E;white-space:nowrap} .wr-search-cursor{display:inline-block;width:2px;height:20px;background:var(--color-primary,#6C3AED);margin-left:2px;animation:wrBlink 1s step-end infinite;vertical-align:middle} @keyframes wrBlink{0%,100%{opacity:1}50%{opacity:0}} .wr-search-placeholder{color:#9CA3AF;font-size:16px} .wr-search-real-input{width:100%;border:none;outline:none;font-size:16px;color:#1E1B2E;background:transparent;font-family:inherit} .wr-search-real-input::placeholder{color:#9CA3AF} .wr-search-btn{background:var(--color-primary,#6C3AED);color:#fff;border:none;padding:12px 24px;border-radius:12px;font-size:15px;font-weight:600;cursor:pointer;display:flex;align-items:center;gap:6px;transition:background .2s,transform .15s;flex-shrink:0;font-family:inherit} .wr-search-btn:hover{filter:brightness(1.1);transform:scale(1.02)} @media(max-width:640px){.wr-search-btn span{display:none}.wr-search-btn{padding:12px 14px}} .wr-search-tags{display:flex;align-items:center;gap:8px;margin-top:12px;flex-wrap:wrap;justify-content:center} .wr-search-tags>span.wr-label{font-size:13px;color:#9CA3AF} .wr-tag{display:inline-flex;align-items:center;gap:4px;padding:4px 12px;border-radius:100px;font-size:13px;font-weight:500;background:#fff;color:#4B5563;border:1px solid rgba(0,0,0,.06);cursor:pointer;transition:all .2s;text-decoration:none} .wr-tag:hover{background:#F5F3FF;color:var(--color-primary,#6C3AED);border-color:rgba(108,58,237,.2)} .wr-search-results{position:relative;background:#fff;border-radius:16px;box-shadow:0 12px 48px rgba(0,0,0,.1),0 2px 8px rgba(0,0,0,.04);padding:0;max-height:0;overflow:hidden;transition:max-height .5s ease,padding .5s ease,margin .5s ease,opacity .4s ease;z-index:10;opacity:0;margin-top:0} .wr-search-results.visible{max-height:2000px;padding:8px;margin-top:12px;opacity:1} .wr-result-item{display:flex;align-items:center;gap:14px;padding:12px 14px;border-radius:12px;cursor:pointer;transition:background .2s,opacity .3s ease,transform .3s ease;opacity:0;transform:translateY(8px);text-decoration:none;color:inherit} .wr-result-item.show{opacity:1;transform:translateY(0)} .wr-result-item:hover{background:#F5F3FF} .wr-result-item+.wr-result-item{border-top:1px solid rgba(0,0,0,.04)} .wr-result-logo{width:44px;height:44px;border-radius:10px;display:flex;align-items:center;justify-content:center;font-size:18px;flex-shrink:0;font-weight:700} .wr-result-logo img{width:100%;height:100%;object-fit:cover;border-radius:10px} .wr-result-info{flex:1;text-align:left;min-width:0} .wr-result-title{font-size:14px;font-weight:600;color:#1E1B2E;margin-bottom:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis} .wr-result-meta{display:flex;align-items:center;gap:8px;font-size:12px;color:#9CA3AF;flex-wrap:wrap} .wr-result-company{color:#4B5563;font-weight:500} .wr-result-badge{display:inline-flex;padding:2px 8px;border-radius:6px;font-size:11px;font-weight:600} .wr-badge-new{background:#DCFCE7;color:#16A34A} .wr-badge-hot{background:#FEF3C7;color:#D97706} .wr-badge-expire{background:#FEE2E2;color:#DC2626} .wr-result-salary{font-size:13px;font-weight:600;color:var(--color-primary,#6C3AED);white-space:nowrap} .wr-result-actions{display:flex;align-items:center;gap:8px;flex-shrink:0} .wr-like-btn{background:none;border:none;cursor:pointer;padding:6px;border-radius:8px;transition:transform .2s,background .2s;display:flex;align-items:center} .wr-like-btn:hover{transform:scale(1.15);background:rgba(239,68,68,.06)} .wr-like-btn svg{width:20px;height:20px;stroke:#D1D5DB;fill:none;transition:all .2s} .wr-like-btn.liked svg{stroke:#EF4444;fill:#EF4444} .wr-results-cta-overlay{position:relative;margin-top:4px;border-radius:12px;overflow:hidden} .wr-results-blurred{padding:10px 14px;display:flex;flex-direction:column;gap:10px;filter:blur(5px);opacity:.5;pointer-events:none;user-select:none} .wr-blurred-row{display:flex;align-items:center;gap:12px} .wr-blurred-circle{width:44px;height:44px;border-radius:10px;background:#E5E7EB;flex-shrink:0} .wr-blurred-lines{flex:1;display:flex;flex-direction:column;gap:6px} .wr-blurred-line{height:10px;border-radius:5px;background:#E5E7EB} .wr-blurred-line:first-child{width:60%}.wr-blurred-line:last-child{width:40%} .wr-cta-overlay{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;background:rgba(255,255,255,.65);backdrop-filter:blur(2px);border-radius:12px;gap:8px} .wr-cta-overlay-text{font-size:14px;font-weight:600;color:#1E1B2E} .wr-cta-overlay-btn{display:inline-flex;align-items:center;gap:6px;padding:8px 20px;background:var(--color-primary,#6C3AED);color:#fff;border:none;border-radius:10px;font-size:13px;font-weight:600;cursor:pointer;transition:all .2s;text-decoration:none;font-family:inherit} .wr-cta-overlay-btn:hover{filter:brightness(1.1);transform:translateY(-1px)} .wr-results-count{text-align:center;padding:10px;font-size:13px;color:#9CA3AF;border-top:1px solid rgba(0,0,0,.04);margin-top:4px} .wr-results-count strong{color:var(--color-primary,#6C3AED)} .wr-hero-badge{display:inline-flex;align-items:center;gap:8px;background:#fff;border:1px solid rgba(108,58,237,.15);padding:6px 16px;border-radius:100px;font-size:13px;font-weight:500;color:var(--color-primary,#6C3AED)} .wr-hero-badge .wr-dot{width:8px;height:8px;background:#22C55E;border-radius:50%;animation:wrPulseDot 2s ease-in-out infinite} @keyframes wrPulseDot{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.6;transform:scale(1.3)}} .wr-video-cta{display:inline-flex;align-items:center;gap:6px;background:rgba(108,58,237,.06);padding:6px 14px;border-radius:100px;font-weight:500;color:var(--color-primary,#6C3AED);font-size:14px} {# === Styles mode connecté === #} .wr-loading{text-align:center;padding:30px 20px} .wr-spinner{display:inline-block;width:28px;height:28px;border:3px solid rgba(108,58,237,.15);border-top-color:var(--color-primary,#6C3AED);border-radius:50%;animation:wrSpin .7s linear infinite} @keyframes wrSpin{to{transform:rotate(360deg)}} .wr-empty-state,.wr-coming-soon{text-align:center;padding:40px 20px} .wr-empty-icon,.wr-coming-icon{font-size:40px;margin-bottom:12px} .wr-empty-title,.wr-coming-title{font-size:16px;font-weight:600;color:#1E1B2E;margin:0 0 6px} .wr-empty-text,.wr-coming-text{font-size:14px;color:#9CA3AF;margin:0} .wr-load-more{display:flex;justify-content:center;padding:12px 8px 4px} .wr-load-more-btn{background:none;border:2px solid var(--color-primary,#6C3AED);color:var(--color-primary,#6C3AED);padding:8px 24px;border-radius:10px;font-size:14px;font-weight:600;cursor:pointer;transition:all .2s;font-family:inherit} .wr-load-more-btn:hover{background:var(--color-primary,#6C3AED);color:#fff} .wr-load-more-btn:disabled{opacity:.5;cursor:not-allowed} {# === Styles offres populaires === #} .wr-popular-card{display:block;text-decoration:none;color:inherit;background:#fff;border-radius:14px;padding:16px;border:1px solid rgba(0,0,0,.06);transition:transform .2s,box-shadow .2s} .wr-popular-card:hover{transform:translateY(-3px);box-shadow:0 8px 24px rgba(0,0,0,.08)} .wr-popular-avatar{width:44px;height:44px;border-radius:10px;display:flex;align-items:center;justify-content:center;font-size:18px;font-weight:700;flex-shrink:0} .wr-popular-title{font-size:14px;font-weight:600;color:#1E1B2E;white-space:nowrap;overflow:hidden;text-overflow:ellipsis} .wr-popular-meta{font-size:12px;color:#9CA3AF;white-space:nowrap;overflow:hidden;text-overflow:ellipsis} .wr-popular-badge{display:inline-flex;padding:2px 10px;border-radius:6px;font-size:11px;font-weight:600} .wr-popular-date{font-size:11px;color:#6B7280} </style>{% endblock css %}{% block body %} <div id="hero_header" class="hero-header section panel overflow-hidden"> <div class="position-absolute top-0 start-0 end-0 h-screen bg-secondary dark:bg-gray-300 dark:bg-opacity-15 rounded-bottom-2 lg:rounded-bottom-5"></div> <div class="section-outer panel py-8 lg:py-9 xl:py-10"> <div class="container"> <div class="section-inner panel"> <div class="d-none xl:d-block"> <div class="position-absolute rounded-circle border border-dashed border-primary-300 dark:border-white dark:border-opacity-15 cstack w-56px h-56px d-none lg:d-block" style="top: 5%; left: 5%" data-anime="translateY: [0, 10]; easing: linear; loop: true; direction: alternate; delay: 0;"><img class="p-narrow rounded-circle" src="/uploads/no_avatar.png" alt="Candidat anonyme"></div> <div class="position-absolute rounded-circle border border-dashed border-primary-300 dark:border-white dark:border-opacity-15 cstack w-56px h-56px d-none lg:d-block" style="top: 20%; left: 10%" data-anime="translateY: [0, 15]; easing: linear; loop: true; direction: alternate; delay: 25;"><img class="p-narrow rounded-circle" src="/uploads/no_avatar.png" alt="Candidat anonyme"></div> <div class="position-absolute rounded-circle border border-dashed border-primary-300 dark:border-white dark:border-opacity-15 cstack w-56px h-56px d-none lg:d-block" style="top: 35%; left: 0%" data-anime="translateY: [0, 5]; easing: linear; loop: true; direction: alternate; delay: 25;"><img class="p-narrow rounded-circle" src="/uploads/no_avatar.png" alt="Candidat anonyme"></div> <div class="position-absolute rounded-circle border border-dashed border-primary-300 dark:border-white dark:border-opacity-15 cstack w-56px h-56px d-none lg:d-block" style="top: 5%; right: 5%" data-anime="translateY: [0, 10]; easing: linear; loop: true; direction: alternate; delay: 0;"><img class="p-narrow rounded-circle" src="/uploads/no_avatar.png" alt="Candidat anonyme"></div> <div class="position-absolute rounded-circle border border-dashed border-primary-300 dark:border-white dark:border-opacity-15 cstack w-56px h-56px d-none lg:d-block" style="top: 20%; right: 10%" data-anime="translateY: [0, 15]; easing: linear; loop: true; direction: alternate; delay: 25;"><img class="p-narrow rounded-circle" src="/uploads/no_avatar.png" alt="Candidat anonyme"></div> <div class="position-absolute rounded-circle border border-dashed border-primary-300 dark:border-white dark:border-opacity-15 cstack w-56px h-56px d-none lg:d-block" style="top: 35%; right: 0%" data-anime="translateY: [0, 5]; easing: linear; loop: true; direction: alternate; delay: 25;"><img class="p-narrow rounded-circle" src="/uploads/no_avatar.png" alt="Candidat anonyme"></div> </div> <div class="row child-cols-12 justify-center items-center g-8"> <div class="lg:col-12"> <div class="panel vstack gap-4 lg:gap-6"> <div class="panel vstack justify-center items-center gap-2 px-2 pt-4 text-center"> <div class="wr-hero-badge"> 🎉 + 20000 offres d'emploi </div> <h1 class="h3 md:h2 lg:display-4 m-0">Le <span class="text-primary dark:text-tertiary">career board</span> nouvelle génération — votre prochain poste vous cherche déjà </h1> <p class="fs-6 xl:fs-4 xl:px-10 dark:text-white text-opacity-70"> Créez votre profil sur <span class="text-primary dark:text-tertiary">Whileresume</span> et laissez les <span class="text-primary dark:text-tertiary">offres</span> venir à vous </p> </div> {# ====== BARRE DE RECHERCHE ====== #} <div class="wr-search-section" id="wrSearchSection"> <div class="wr-search-bar{#% if app.user %#} active{#% endif %#}" id="wrSearchBar"> <div class="wr-search-icon"> <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"/><path d="M21 21l-4.35-4.35"/></svg> </div> <div class="wr-search-input-wrapper"> {#% if app.user %#} <input type="text" id="wrSearchInput" class="wr-search-real-input" placeholder="Rechercher un poste, une entreprise, une ville..." autocomplete="off"> {#% else %} <span class="wr-search-typed-text" id="wrTypedText"></span><span class="wr-search-cursor" id="wrCursor"></span> <span class="wr-search-placeholder" id="wrPlaceholder">Agent immobilier, Secrétaire, Avocat...</span> {% endif %#} </div> <button class="wr-search-btn" id="wrSearchBtn"> <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"/><path d="M21 21l-4.35-4.35"/></svg> <span>Rechercher</span> </button> </div> <div class="wr-search-tags"> <span class="wr-label">Populaire :</span> {% for pk in popularKeywords %} <span class="wr-tag" data-search="{{ pk.keyword }}">{{ pk.icon }} {{ pk.label }}</span> {% endfor %} </div> </div> {# ====== BOUTONS CTA ====== #} <div class="panel vstack justify-center items-center text-center"> <div class="vstack md:hstack justify-center"> <a href="{{ ios_fr }}" class="btn btn-md btn-outline-primary dark:border-tertiary dark:text-tertiary dark:hover:bg-tertiary dark:hover:text-primary-700 border-2 px-3 w-auto" style="margin-top:10px;"> Télécharger sur iOS <svg fill="#000000" width="25px" height="25px" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M18.71 19.5C17.88 20.74 17 21.95 15.66 21.97C14.32 22 13.89 21.18 12.37 21.18C10.84 21.18 10.37 21.95 9.09997 22C7.78997 22.05 6.79997 20.68 5.95997 19.47C4.24997 17 2.93997 12.45 4.69997 9.39C5.56997 7.87 7.12997 6.91 8.81997 6.88C10.1 6.86 11.32 7.75 12.11 7.75C12.89 7.75 14.37 6.68 15.92 6.84C16.57 6.87 18.39 7.1 19.56 8.82C19.47 8.88 17.39 10.1 17.41 12.63C17.44 15.65 20.06 16.66 20.09 16.67C20.06 16.74 19.67 18.11 18.71 19.5ZM13 3.5C13.73 2.67 14.94 2.04 15.94 2C16.07 3.17 15.6 4.35 14.9 5.19C14.21 6.04 13.07 6.7 11.95 6.61C11.8 5.46 12.36 4.26 13 3.5Z"/></svg> </a> <a href="{{ android_fr }}" class="btn btn-md btn-outline-primary dark:border-tertiary dark:text-tertiary dark:hover:bg-tertiary dark:hover:text-primary-700 border-2 px-3 w-auto" style="margin-top:10px; margin-left:10px;"> Télécharger sur Android <svg height="20px" width="20px" version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" xml:space="preserve"><g><g><path style="fill:#3A9BC8;" d="M225.656,256.052L14.016,485.451l-6.442,7.052c-4.005-5.919-6.704-12.972-7.313-20.806C0.087,470.305,0,468.91,0,467.518V44.499c0-9.488,2.873-18.02,7.574-24.987L225.656,256.052z"/><path style="fill:#9BCD83;" d="M320.811,152.8l-95.155,103.253L7.574,19.512C19.936,1.405,45.183-6.342,66.6,6.02L320.811,152.8z"/><path style="fill:#EEB84C;" d="M455.056,257.27c-0.348,14.453-7.748,28.904-22.113,37.174l-112.132,64.771l-95.155-103.163L320.811,152.8l70.518,40.745l41.614,24.026C448.178,226.366,455.579,241.861,455.056,257.27z"/><path style="fill:#B43F70;" d="M7.591,492.492c12.368,18.116,37.599,25.838,58.976,13.496L320.775,359.22l-95.156-103.209L7.591,492.492z"/></g><path style="opacity:0.2;fill:#FFFFFF;" d="M454.067,246.447c-2.453-11.518-9.483-22.156-21.124-28.876l-41.614-24.026L320.811,152.8L66.6,6.02C45.183-6.342,19.936,1.405,7.574,19.512C2.873,26.479,0,35.011,0,44.499v243.72c36.681,3.114,74.226,4.746,112.451,4.746c47.984,0,94.85-2.644,140.318-7.505l-27.027-29.314l27.038,29.314C323.988,277.849,391.567,264.55,454.067,246.447z"/></g></svg> </a> </div> </div> {# ====== RÉSULTATS ====== #} {#% if app.user %#} <div class="wr-search-results visible" id="wrSearchResults" style="max-height:none;opacity:1;padding:8px;margin-top:12px;"> <div id="wrJobsList"></div> <div id="wrLoading" class="wr-loading"> <div class="wr-spinner"></div> </div> <div id="wrEmptyState" class="wr-empty-state" style="display:none;"> <div class="wr-empty-icon">🔍</div> <p class="wr-empty-title">Aucune offre ne correspond à votre recherche</p> <p class="wr-empty-text">Essayez avec d'autres mots-clés ou consultez les recherches populaires ci-dessus</p> </div> <div id="wrComingSoon" class="wr-coming-soon" style="display:none;"> <div class="wr-coming-icon">🚀</div> <p class="wr-coming-title">De nouvelles offres arrivent bientôt !</p> <p class="wr-coming-text">Nous ajoutons de nouvelles opportunités chaque jour.<br>Revenez vite ou activez les notifications pour être alerté.</p> </div> <div id="wrLoadMore" class="wr-load-more" style="display:none;"> <button class="wr-load-more-btn" id="wrLoadMoreBtn">Voir plus d'offres</button> </div> <div class="wr-results-count" id="wrResultsCount" style="display:none;"> <strong id="wrTotalCount">0</strong> offres trouvées </div> </div> {#% else %} <div class="wr-search-results" id="wrSearchResults"> <div id="wrResultsList"></div> <div class="wr-results-cta-overlay"> <div class="wr-results-blurred"> <div class="wr-blurred-row"><div class="wr-blurred-circle"></div><div class="wr-blurred-lines"><div class="wr-blurred-line"></div><div class="wr-blurred-line"></div></div></div> <div class="wr-blurred-row"><div class="wr-blurred-circle"></div><div class="wr-blurred-lines"><div class="wr-blurred-line"></div><div class="wr-blurred-line"></div></div></div> </div> <div class="wr-cta-overlay"> <span class="wr-cta-overlay-text">🔒 Inscrivez-vous pour voir toutes les offres</span> <a href="{{ path('whileresume_resume_' ~ app.request.locale) }}" class="wr-cta-overlay-btn">Créer mon profil gratuitement <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M7 17l9.2-9.2M17 17V7H7"/></svg></a> </div> </div> {% if totalJobs is defined and totalJobs > 0 %} <div class="wr-results-count"> <strong>+{{ totalJobs|number_format(0, ',', ' ') }} offres</strong> dans notre base de données </div> {% endif %} </div> {% endif %#} <div class="panel vstack justify-center items-center text-center"> <div class="vstack sm:hstack items-center justify-center gap-1 fs-6 text-gray-900 dark:text-white"> <span class="wr-video-cta">🎥 Partagez votre <strong> CV vidéo </strong> pour augmenter vos chances</span> </div> <div class="vstack sm:hstack items-center justify-center gap-1 fs-6 text-gray-900 dark:text-white"> <span class="desc">Le saviez-vous ? <a href="https://www.welcometothejungle.com/fr/articles/marche-cache-emploi-candidater" target="_blank">40%</a> des offres d emploi restent cachées et sont directement confiées aux recruteurs</span> </div> </div> </div> </div> </div> </div> </div> </div> </div> {#% if app.user %#} <script> (function(){ var LIKED_IDS = {{ likedJobIds|json_encode|raw }}; var IS_CANDIDATE = {{ (app.user.typeAccount is defined and app.user.typeAccount == 'candidate') ? 'true' : 'false' }}; var JOB_BASE_URL = '/{{ app.request.locale }}/job/'; var SEARCH_API = '{{ path("locale_api_jobs_search", {"_locale": app.request.locale}) }}'; var LIKE_API = '{{ path("locale_api_jobs_like", {"_locale": app.request.locale}) }}'; // --- Palette couleurs logos --- var palette = [ {bg:'#EDE9FE',color:'#7C3AED'},{bg:'#DBEAFE',color:'#2563EB'}, {bg:'#D1FAE5',color:'#059669'},{bg:'#FEF3C7',color:'#D97706'}, {bg:'#FCE7F3',color:'#DB2777'},{bg:'#FEE2E2',color:'#DC2626'}, {bg:'#E0E7FF',color:'#4338CA'},{bg:'#CCFBF1',color:'#0D9488'} ]; function getColor(name){ var h=0;for(var i=0;i<name.length;i++) h=name.charCodeAt(i)+((h<<5)-h); return palette[Math.abs(h)%palette.length]; } // --- DOM --- var searchInput = document.getElementById('wrSearchInput'); var searchBtn = document.getElementById('wrSearchBtn'); var jobsList = document.getElementById('wrJobsList'); var loading = document.getElementById('wrLoading'); var emptyState = document.getElementById('wrEmptyState'); var comingSoon = document.getElementById('wrComingSoon'); var loadMoreWrap = document.getElementById('wrLoadMore'); var loadMoreBtn = document.getElementById('wrLoadMoreBtn'); var resultsCount = document.getElementById('wrResultsCount'); var totalCountEl = document.getElementById('wrTotalCount'); var currentQuery = ''; var currentOffset = 0; var LIMIT = 10; var isLoading = false; var debounceTimer; // --- Icônes SVG --- var heartSvg = '<svg viewBox="0 0 24 24" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"/></svg>'; // --- Rendu d'une offre --- function renderJob(job){ var col = getColor(job.companyName); var logoHtml; if(job.image){ logoHtml = '<div class="wr-result-logo"><img src="'+job.image+'" alt="'+job.companyName+'"></div>'; } else { logoHtml = '<div class="wr-result-logo" style="background:'+col.bg+';color:'+col.color+';">'+job.logo+'</div>'; } var badgeHtml = ''; if(job.isNew) badgeHtml = '<span class="wr-result-badge wr-badge-new">Nouveau</span>'; var salaryHtml = job.salary ? '<span class="wr-result-salary">'+job.salary+'</span>' : ''; var likeHtml = ''; if(IS_CANDIDATE){ var likedClass = LIKED_IDS.indexOf(job.id) !== -1 ? ' liked' : ''; likeHtml = '<button class="wr-like-btn'+likedClass+'" data-job-id="'+job.id+'" title="Sauvegarder">'+heartSvg+'</button>'; } var remoteHtml = ''; if(job.remoteWork && job.remoteWork !== '' && job.remoteWork !== 'no'){ var remoteLabel = job.remoteWork === 'full' ? 'Full remote' : (job.remoteWork === 'hybrid' ? 'Hybride' : job.remoteWork); remoteHtml = '<span>·</span><span>'+remoteLabel+'</span>'; } var div = document.createElement('a'); div.className = 'wr-result-item'; div.href = JOB_BASE_URL + job.slug; div.innerHTML = logoHtml + '<div class="wr-result-info">' + '<div class="wr-result-title">' + job.jobTitle + '</div>' + '<div class="wr-result-meta">' + '<span class="wr-result-company">' + job.companyName + '</span>' + (job.city ? '<span>·</span><span>' + job.city + '</span>' : '') + '<span>·</span><span>' + job.employmentType + '</span>' + remoteHtml + badgeHtml + '</div>' + '</div>' + '<div class="wr-result-actions">' + salaryHtml + likeHtml + '</div>'; return div; } // --- Fetch offres --- function fetchJobs(query, offset, append){ if(isLoading) return; isLoading = true; if(!append){ jobsList.innerHTML = ''; loadMoreWrap.style.display = 'none'; resultsCount.style.display = 'none'; } loading.style.display = 'block'; emptyState.style.display = 'none'; comingSoon.style.display = 'none'; var url = SEARCH_API + '?q=' + encodeURIComponent(query) + '&offset=' + offset + '&limit=' + LIMIT; fetch(url, {credentials:'same-origin'}) .then(function(r){ return r.json(); }) .then(function(data){ loading.style.display = 'none'; isLoading = false; // Aucune offre du tout (base vide pour cette langue) if(data.total === 0 && query === ''){ comingSoon.style.display = 'block'; return; } // Aucun résultat pour cette recherche if(data.total === 0 && query !== ''){ emptyState.style.display = 'block'; return; } // Afficher les résultats data.jobs.forEach(function(job, i){ var el = renderJob(job); jobsList.appendChild(el); // Animation stagger setTimeout(function(){ el.classList.add('show'); }, 50 + i * 60); }); // Compteur totalCountEl.textContent = data.total; resultsCount.style.display = 'block'; // Bouton "Voir plus" if(data.hasMore){ loadMoreWrap.style.display = 'flex'; } else { loadMoreWrap.style.display = 'none'; } currentOffset = offset + data.jobs.length; }) .catch(function(err){ console.error('Erreur recherche:', err); loading.style.display = 'none'; isLoading = false; }); } // --- Like / Unlike --- function toggleLike(btn){ var jobId = parseInt(btn.getAttribute('data-job-id')); fetch(LIKE_API, { method: 'POST', credentials: 'same-origin', headers: {'Content-Type':'application/json'}, body: JSON.stringify({jobId: jobId}) }) .then(function(r){ return r.json(); }) .then(function(data){ if(data.liked){ btn.classList.add('liked'); if(LIKED_IDS.indexOf(jobId) === -1) LIKED_IDS.push(jobId); } else { btn.classList.remove('liked'); var idx = LIKED_IDS.indexOf(jobId); if(idx !== -1) LIKED_IDS.splice(idx, 1); } }) .catch(function(err){ console.error('Erreur like:', err); }); } // --- Event: delegation click like --- jobsList.addEventListener('click', function(e){ var likeBtn = e.target.closest('.wr-like-btn'); if(likeBtn){ e.preventDefault(); e.stopPropagation(); toggleLike(likeBtn); } }); // --- Event: recherche avec debounce --- searchInput.addEventListener('input', function(){ clearTimeout(debounceTimer); debounceTimer = setTimeout(function(){ currentQuery = searchInput.value.trim(); currentOffset = 0; fetchJobs(currentQuery, 0, false); }, 350); }); // --- Event: bouton recherche --- searchBtn.addEventListener('click', function(e){ e.preventDefault(); clearTimeout(debounceTimer); currentQuery = searchInput.value.trim(); currentOffset = 0; fetchJobs(currentQuery, 0, false); }); // --- Event: touche Entrée --- searchInput.addEventListener('keydown', function(e){ if(e.key === 'Enter'){ e.preventDefault(); clearTimeout(debounceTimer); currentQuery = searchInput.value.trim(); currentOffset = 0; fetchJobs(currentQuery, 0, false); } }); // --- Event: voir plus --- loadMoreBtn.addEventListener('click', function(){ fetchJobs(currentQuery, currentOffset, true); }); // --- Event: tags populaires --- document.querySelectorAll('.wr-tag').forEach(function(tag){ tag.addEventListener('click', function(){ var s = tag.getAttribute('data-search'); searchInput.value = s; currentQuery = s; currentOffset = 0; fetchJobs(s, 0, false); }); }); // --- Chargement initial --- fetchJobs('', 0, false); })(); </script> {#% else %} <script> (function(){ var palette = [ {bg:'#EDE9FE',color:'#7C3AED'},{bg:'#DBEAFE',color:'#2563EB'}, {bg:'#D1FAE5',color:'#059669'},{bg:'#FEF3C7',color:'#D97706'}, {bg:'#FCE7F3',color:'#DB2777'},{bg:'#FEE2E2',color:'#DC2626'}, {bg:'#E0E7FF',color:'#4338CA'},{bg:'#CCFBF1',color:'#0D9488'} ]; function getColor(name){ var h=0;for(var i=0;i<name.length;i++) h=name.charCodeAt(i)+((h<<5)-h); return palette[Math.abs(h)%palette.length]; } var JOB_BASE_URL = '/{{ app.request.locale }}/job/'; var searches = {{ popularJobsForVisitor|json_encode|raw }}; var typedEl=document.getElementById('wrTypedText'),placeholderEl=document.getElementById('wrPlaceholder'),searchBar=document.getElementById('wrSearchBar'),searchResults=document.getElementById('wrSearchResults'),resultsList=document.getElementById('wrResultsList'); var currentSearch=0,charIndex=0,animTimeout; var resultsVisible=false; function buildResults(items){ resultsList.innerHTML=''; if(!items || items.length === 0){ resultsList.innerHTML='<div style="text-align:center;padding:20px;color:#9CA3AF;font-size:14px;">Aucune offre trouvée pour cette recherche</div>'; return; } items.forEach(function(d){ var col = getColor(d.jobTitle); var initial = d.jobTitle ? d.jobTitle.charAt(0).toUpperCase() : '?'; var badgeHtml = ''; if(d.diffDays <= 3){ badgeHtml = '<span class="wr-result-badge wr-badge-new">🆕 New</span>'; } else if(d.daysUntilExpiry <= 5 && d.daysUntilExpiry > 0){ badgeHtml = '<span class="wr-result-badge wr-badge-expire">⏳ Expire dans '+d.daysUntilExpiry+'j</span>'; } else if(d.daysUntilExpiry <= 0){ badgeHtml = '<span class="wr-result-badge wr-badge-expire">⏳ Expirée</span>'; } var dateHtml = '<span class="wr-popular-date" style="font-size:12px;color:#6B7280;">📅 '+d.createdAt+'</span>'; var div=document.createElement('a'); div.className='wr-result-item'; div.href=JOB_BASE_URL + d.slug; div.innerHTML= '<div class="wr-result-logo" style="background:'+col.bg+';color:'+col.color+';">'+initial+'</div>'+ '<div class="wr-result-info">'+ '<div class="wr-result-title">'+d.jobTitle+'</div>'+ '<div class="wr-result-meta">'+ '<span>📍 '+d.city+'</span>'+ '<span>·</span><span>'+d.employmentType+'</span>'+ badgeHtml+ '</div>'+ '</div>'+ '<div class="wr-result-actions">'+dateHtml+'</div>'; resultsList.appendChild(div); }); } function showResults(){ searchResults.classList.add('visible'); searchBar.classList.add('active'); resultsVisible=true; resultsList.querySelectorAll('.wr-result-item').forEach(function(item,i){ setTimeout(function(){item.classList.add('show');},100+i*80); }); } function updateResults(items){ var old=resultsList.querySelectorAll('.wr-result-item'); old.forEach(function(item){item.classList.remove('show');}); setTimeout(function(){ buildResults(items); resultsList.querySelectorAll('.wr-result-item').forEach(function(item,i){ setTimeout(function(){item.classList.add('show');},50+i*80); }); },200); } function typeText(text,cb){ if(charIndex<text.length){typedEl.textContent+=text[charIndex];charIndex++;animTimeout=setTimeout(function(){typeText(text,cb)},70+Math.random()*50)}else{cb&&cb()} } function deleteText(cb){ var t=typedEl.textContent;if(t.length>0){typedEl.textContent=t.slice(0,-1);animTimeout=setTimeout(function(){deleteText(cb)},35)}else{cb&&cb()} } function runAnimation(){ if(searches.length === 0) return; var data=searches[currentSearch];placeholderEl.style.display='none';charIndex=0; typeText(data.text,function(){ animTimeout=setTimeout(function(){ if(resultsVisible){updateResults(data.jobs)}else{buildResults(data.jobs);showResults()} animTimeout=setTimeout(function(){ deleteText(function(){currentSearch=(currentSearch+1)%searches.length;animTimeout=setTimeout(runAnimation,800)}); },4000); },500); }); } if(searches.length > 0){ var firstData=searches[0]; placeholderEl.style.display='none'; typedEl.textContent=firstData.text; buildResults(firstData.jobs); showResults(); currentSearch=1 % searches.length; animTimeout=setTimeout(function(){deleteText(function(){animTimeout=setTimeout(runAnimation,800)})},3000); } document.querySelectorAll('.wr-tag').forEach(function(tag){ tag.addEventListener('click',function(){ clearTimeout(animTimeout);typedEl.textContent='';placeholderEl.style.display='none';charIndex=0; var s=tag.getAttribute('data-search'); var data=searches.find(function(x){return x.searchKeyword===s})||searches.find(function(x){return x.text===s})||searches[0]; if(data){ typeText(data.text,function(){setTimeout(function(){if(resultsVisible){updateResults(data.jobs)}else{buildResults(data.jobs);showResults()}},400)}); } }); }); })(); </script> {#% endif %#} <div id="how_it_works" class="how-it-works section panel overflow-hidden" style="margin-top:30px;"> <div class="section-outer panel"> <div class="container"> <div style="text-align:center; margin-bottom:50px;"> <h2 class="h4 sm:h3 xl:h2 m-0">Comment ça marche ?</h2> </div> <div class="section-inner panel vstack border rounded-3 overflow-hidden" style="background-color:#F4ECE1;"> <div class="row child-cols-12 md:child-cols justify-center col-match g-4 sep uc-grid"> <div class="min-w-1/4"> <div class="panel vstack items-center gap-2 text-center p-5 xl:py-8"> <img class="w-100" src="/uploads/rh/mascotte_register.png" alt="Alice s'inscrit sur Whileresume"> <h3 class="h5 lg:h4 m-0">Je m'inscris gratuitement</h3> <p class="fs-6">Connectez-vous avec des entreprises qui recherchent activement des profils comme le vôtre, dans un large éventail de secteurs.</p> </div> </div> <div class="min-w-1/4"> <div class="panel vstack items-center gap-2 text-center p-5 xl:py-8"> <img class="w-100" src="/uploads/rh/mascotte_upload2.png" alt="Alice télécharge son CV sur Whileresume"> <h3 class="h5 lg:h4 m-0">Je télécharge mon CV</h3> <p class="fs-6">Je télécharge mon CV au format PDF et/ou ma présentation vidéo. Je définis mes compétences, mon niveau et mes attentes.</p> </div> </div> <div class="min-w-100 lg:min-w-1/4"> <div class="panel vstack items-center gap-2 text-center p-5 xl:py-8"> <img class="w-100" src="/uploads/rh/mascotte_reunion.png" alt="Alice rencontre un recruteur IT"> <h3 class="h5 lg:h4 m-0">Les entreprises me contactent</h3> <p class="fs-6">Elles utilisent nos filtres pour trouver mon profil et me contactent directement avec des opportunités correspondantes, ou je peux postuler directement aux postes ouverts.</p> </div> </div> </div> </div> </div> </div> </div> <div id="main_features" class="main-features section panel overflow-hidden"> <div class="section-outer panel py-6 lg:py-8 xl:py-10"> <div class="container"> <div class="row child-cols col-match justify-between g-4 lg:g-8 xl:g-10"> <div class="col-12 sm:col-6 order-0 lg:order-1"> <div class="panel w-100"><img src="/uploads/rh/mascotte_filtrage3.png" title="Filtrage par critères" alt="Filtrage par critères" class="rounded-2" style="background-color:#F5EDE3;"></div> </div> <div class="col-12 sm:col-6 order-1 lg:order-0"> <div class="panel vstack justify-between gap-4 sm:gap-6 h-100"> <div> <div class="panel vstack gap-2"> <span class="fs-6 fw-bold m-0 text-primary">01.</span> <h2 class="h4 lg:h3 xl:h2 m-0">Filtrage par critères</h2> <p class="fs-6 lg:fs-5 opacity-70 dark:opacity-80"><strong>Définissez une fois</strong> vos critères essentiels : poste recherché, secteur d'activité, ville souhaitée et préférences de travail. Notre système de filtres avancés permet aux recruteurs de vous identifier précisément selon vos attentes.</p> <p class="fs-6 lg:fs-5 opacity-70 dark:opacity-80">Fini les opportunités inadéquates : seules les offres qui correspondent vraiment à votre profil vous contactent.</p> </div> </div> <div> <div class="p-3 panel vstack gap-3 rounded border"> <p class="fs-6 dark:text-white">"Enfin, une plateforme de recrutement qui fonctionne pour moi. Je définis une seule fois mes critères essentiels et je ne reçois que des opportunités qui correspondent réellement à mon profil. Cela me fait gagner du temps et rend tout le processus bien plus efficace."</p> <div class="panel hstack gap-1"><div class="panel vstack items-start gap-0"><h6 class="h6 m-0">Clark PHILLIP</h6><span class="fs-7 opacity-70">Data Engineer</span></div></div> </div> </div> </div> </div> </div> <div class="row child-cols col-match justify-between g-4 lg:g-8 xl:g-10" style="margin-top:40px;"> <div class="col-12 sm:col-6 order-0 lg:order-1"> <div class="panel w-100"><img src="/uploads/rh/mascotte_upload.png" title="Alice upload son CV" alt="Alice upload son CV" class="rounded-2" style="background-color:#F5EDE3;"></div> </div> <div class="col-12 sm:col-6 order-1 lg:order-0"> <div class="panel vstack justify-between gap-4 sm:gap-6 h-100"> <div> <div class="panel vstack gap-2"> <span class="fs-6 fw-bold m-0 text-primary">02.</span> <h2 class="h4 lg:h3 xl:h2 m-0">Optimisation intelligente</h2> <p class="fs-6 lg:fs-5 opacity-70 dark:opacity-80"><strong>Téléchargez votre CV existant</strong> et laissez Whileresume l'analyser automatiquement. Le système extrait et structure l'ensemble de vos informations pour créer une <strong>présentation optimisée</strong> conforme à votre profil.</p> <p class="fs-6 lg:fs-5 opacity-70 dark:opacity-80">Whileresume identifie et met en valeur vos <strong>soft skills</strong> (leadership, communication, adaptabilité...), vos <strong>hard skills</strong> (compétences techniques, outils, certifications), vos <strong>expériences professionnelles</strong> avec leurs réalisations quantifiables, et vos <strong>projets marquants</strong>.</p> </div> </div> <div> <div class="p-3 panel vstack gap-3 rounded border"> <p class="fs-6 dark:text-white">"L'outil basé sur l’IA m’aide à créer un profil solide en intégrant toutes les compétences clés de mon CV. Cela permet aux entreprises de me trouver plus facilement que sur n’importe quelle autre plateforme et donc d’avoir plus d’opportunités."</p> <div class="panel hstack gap-1"><div class="panel vstack items-start gap-0"><h6 class="h6 m-0">Alicia GEVERS</h6><span class="fs-7 opacity-70">Digital Marketer</span></div></div> </div> </div> </div> </div> </div> <div class="row child-cols col-match justify-between g-4 lg:g-8 xl:g-10" style="margin-top:40px;"> <div class="col-12 sm:col-6 order-0 lg:order-1"> <div class="panel w-100"><img src="/uploads/rh/mascotte_register.png" class="rounded-2" alt="Une recruteuse recupère une pile de CV qualifié" loading="lazy"></div> </div> <div class="col-12 sm:col-6 order-1 lg:order-0"> <div class="panel vstack justify-between gap-4 sm:gap-6 h-100"> <div><div class="panel vstack gap-2"> <span class="fs-6 fw-bold m-0 text-primary">03.</span> <h2 class="h4 lg:h3 xl:h2 m-0">Recherche qualifié</h2> <p class="fs-6 lg:fs-5 opacity-70 dark:opacity-80">Plus besoin de chercher activement : les <strong>recruteurs</strong> vous trouvent grâce à <strong>vos critères prédéfinis</strong>. Votre profil reste visible 24h/24 auprès des entreprises & recruteurs qui correspondent à vos attentes.</p> <p class="fs-6 lg:fs-5 opacity-70 dark:opacity-80">Vous économisez du temps tout en multipliant <strong>vos opportunités de carrière</strong>. La recherche d'emploi devient enfin passive et efficace.</p> </div></div> <div><div class="p-3 panel vstack gap-3 rounded border"> <p class="fs-6 dark:text-white">"Cette plateforme élimine le superflu. Chaque message que je reçois est une véritable opportunité qui me correspond. C’est vraiment agréable d’avoir enfin un recrutement qui respecte mon temps."</p> <div class="panel hstack gap-1"><div class="panel vstack items-start gap-0"><h6 class="h6 m-0">Bryan OSHEN</h6><span class="fs-7 opacity-70">Product Owner</span></div></div> </div></div> </div> </div> </div> <div class="row child-cols col-match justify-between g-4 lg:g-8 xl:g-10" style="margin-top:40px;"> <div class="col-12 sm:col-6 order-0 lg:order-1"> <div class="panel w-100"><img src="/uploads/rh/mascotte_reunion.png" alt="" class="rounded-2"></div> </div> <div class="col-12 sm:col-6 order-1 lg:order-0"> <div class="panel vstack justify-between gap-4 sm:gap-6 h-100"> <div> <div class="panel vstack gap-2"> <span class="fs-6 fw-bold m-0 text-primary">04.</span> <h2 class="h4 lg:h3 xl:h2 m-0">Contact direct qualifié</h2> <p class="fs-6 lg:fs-5 opacity-70 dark:opacity-80">Les recruteurs vous contactent <strong>directement</strong> uniquement s'ils ont <strong>une opportunité concrète</strong> qui correspond à vos critères. Chaque <strong>contact</strong> reçu est <strong>qualifié et pertinent</strong>.</p> <p class="fs-6 lg:fs-5 opacity-70 dark:opacity-80">Vous évitez les sollicitations inadéquates et vous concentrez sur les vraies opportunités. Le processus de recrutement devient plus transparent et respectueux de votre temps.</p> </div> </div> <div> <div class="p-3 panel vstack gap-3 rounded border"> <p class="fs-6 dark:text-white">"Depuis que j'utilise Whileresume, je ne reçois que des propositions qui correspondent vraiment à mon profil. En deux semaines, j'ai décroché trois entretiens pour des postes qui me passionnent. C'est un vrai gain de temps et d'énergie."</p> <div class="panel hstack gap-1"> <div class="panel vstack items-start gap-0"> <h6 class="h6 m-0">Sophie MARCHAND</h6> <span class="fs-7 opacity-70">Développeuse Full-Stack Senior</span> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> <div id="pre_cta" class="pre-cta section panel overflow-hidden"> <div class="section-outer panel pb-4 sm:pb-6 xl:pb-9"> <div class="container max-w-xl"> <div class="section-inner panel p-4 md:p-6 lg:p-8 rounded-1-5 lg:rounded-2 bg-secondary dark:bg-gray-800 dark:text-white" data-anime="onview: -200; translateY: [24, 0]; opacity: [0, 1]; easing: easeOutCubic; duration: 500;" style="transform: translateY(0px); opacity: 1;"> <div class="vstack items-center gap-2 mx-auto text-center" data-anime="onview: -200; targets: >*; translateY: [48, 0]; opacity: [0, 1]; easing: easeOutCubic; duration: 500; delay: anime.stagger(100, {start: 200});"> <h2 class="h3 m-0">Whileresume met en relation des talents avec des entreprises en forte croissance</h2> <div class="row" style="margin-top:15px;"> <div class="col-md-6"> <div style="background-color:white; text-align:left; border-radius:20px; padding:20px;"> <h3 class="h3 m-0" style="color:purple;">Recruteur</h3> <p class="fs-6 text-dark dark:text-white text-opacity-70" style="margin-top:10px;">On connecte les meilleurs talents du marché aux entreprises en croissance qui recherchent des collaborateurs d'exception.</p> <a href="{{ path('whileresume_business_' ~ app.request.locale) }}" class="btn btn-md btn-primary rounded-default text-white shadow-xs" style="margin-top:10px;">Je recrute <i class="icon-2 unicon-arrow-up-right rtl:-rotate-90"></i></a> </div> </div> <div class="col-md-6"> <div style="background-color:white; text-align:left; border-radius:20px; padding:20px;"> <h3 class="h3 m-0" style="color:purple;">Candidat</h3> <p class="fs-6 text-dark dark:text-white text-opacity-70" style="margin-top:10px;">On vous accompagne dans la recherche de votre poste idéal au sein des entreprises les plus prometteuses du marché.</p> <a href="{{ path('whileresume_resume_' ~ app.request.locale) }}" class="btn btn-md btn-primary rounded-default text-white shadow-xs" style="margin-top:10px;">Je cherche un job <i class="icon-2 unicon-arrow-up-right rtl:-rotate-90"></i></a> </div> </div> </div> </div> </div> </div> </div> </div> <div id="faq" class="faq section panel" style="margin-bottom:100px;"> <div class="section panel"> <div class="container"> <div class="section-inner panel"> <div class="row child-cols-12 col-match gy-2 lg:gy-6"> <div><div class="vstack items-center text-center gap-2"><h2 class="h4 lg:h3 m-0">Comment ça marche ?</h2></div></div> <div> <div class="panel"> <ul class="uc-accordion gap-1 max-w-850px mx-auto" data-uc-accordion="targets: > li; multiple: false;"> <li class="panel p-3 lg:p-4 rounded-1-5 bg-secondary dark:bg-gray-300 dark:bg-opacity-15"><a class="uc-accordion-title h6 md:h5 lg:h4 ls-0 fw-bold ltr:pe-4 rtl:ps-4" href="#">Comment les recruteurs me trouvent-ils ?</a><div class="uc-accordion-content lg:fs-5 opacity-70"><p>Les recruteurs utilisent nos filtres avancés (poste, secteur, ville, préférences) pour identifier les candidats qui correspondent exactement à leurs besoins. Votre profil apparaît uniquement dans les recherches pertinentes selon vos critères prédéfinis.</p></div></li> <li class="panel p-3 lg:p-4 rounded-1-5 bg-secondary dark:bg-gray-300 dark:bg-opacity-15"><a class="uc-accordion-title h6 md:h5 lg:h4 ls-0 fw-bold ltr:pe-4 rtl:ps-4" href="#">Puis-je modifier mes critères après inscription ?</a><div class="uc-accordion-content lg:fs-5 opacity-70"><p>Oui, vous pouvez modifier à tout moment vos préférences de poste, secteur, ville et type de contrat. Ces changements sont immédiatement pris en compte dans les recherches des recruteurs.</p></div></li> <li class="panel p-3 lg:p-4 rounded-1-5 bg-secondary dark:bg-gray-300 dark:bg-opacity-15"><a class="uc-accordion-title h6 md:h5 lg:h4 ls-0 fw-bold ltr:pe-4 rtl:ps-4" href="#">Comment fonctionne l'IA pour créer mon CV ?</a><div class="uc-accordion-content lg:fs-5 opacity-70"><p>L'IA analyse vos informations et créé un CV professionnel adapté à votre secteur. Vous pouvez choisir parmi différents formats (européen, corporate, thématisé) et l'IA optimise automatiquement la présentation de vos compétences pour maximiser votre impact.</p></div></li> <li class="panel p-3 lg:p-4 rounded-1-5 bg-secondary dark:bg-gray-300 dark:bg-opacity-15"><a class="uc-accordion-title h6 md:h5 lg:h4 ls-0 fw-bold ltr:pe-4 rtl:ps-4" href="#">Mes données personnelles sont-elles protégées ?</a><div class="uc-accordion-content lg:fs-5 opacity-70"><p>Toutes vos données sont chiffrées et stockées de manière sécurisée. Vous contrôlez entièrement votre profil et pouvez choisir d'utiliser un CV anonyme si vous le souhaitez. Aucune information n'est partagée sans votre consentement.</p></div></li> <li class="panel p-3 lg:p-4 rounded-1-5 bg-secondary dark:bg-gray-300 dark:bg-opacity-15"><a class="uc-accordion-title h6 md:h5 lg:h4 ls-0 fw-bold ltr:pe-4 rtl:ps-4" href="#">Que se passe-t-il quand un recruteur me contacte ?</a><div class="uc-accordion-content lg:fs-5 opacity-70"><p>Vous recevez une notification avec les détails de l'opportunité. Le recruteur vous contacte directement parce que votre profil correspond à ses critères de recherche. Vous pouvez alors échanger et décider si l'opportunité vous intéresse.</p></div></li> <li class="panel p-3 lg:p-4 rounded-1-5 bg-secondary dark:bg-gray-300 dark:bg-opacity-15"><a class="uc-accordion-title h6 md:h5 lg:h4 ls-0 fw-bold ltr:pe-4 rtl:ps-4" href="#">La plateforme est-elle vraiment gratuite ?</a><div class="uc-accordion-content lg:fs-5 opacity-70"><p>Oui, l'inscription et l'utilisation de la plateforme sont 100% gratuites pour les candidats. Vous pouvez créer votre profil, télécharger votre CV, utiliser l'IA et recevoir des contacts de recruteurs sans aucun frais.</p></div></li> </ul> </div> </div> </div> </div> </div> </div> </div> <div id="articles" class="faq section panel" style="margin-bottom:100px;"> <div class="section-outer panel"> <div class="container"> <div style="margin-bottom:50px; margin-top:50px;"><div class="vstack items-center text-center gap-2"><h2 class="h4 lg:h3 m-0">Nos articles pour vous aider à candidater</h2></div></div> <div class="row child-cols-12 sm:child-cols-4 col-match gy-4 gx-2 xl:gx-4"> {% for article in articles %} {% set urlArticle = '/fr' ~ path('blog_article',{'slug': article.slug}) %} {% if article.pageslug3 is not empty %} {% set urlArticle = '/fr/' ~ article.pageslug ~ '/' ~ article.pageslug2 ~ '/' ~ article.pageslug3 %} {% elseif article.pageslug2 is not empty %} {% set urlArticle = '/fr/' ~ article.pageslug ~ '/' ~ article.pageslug2 %} {% elseif article.pageslug is not empty %} {% set urlArticle = '/fr/' ~ article.pageslug %} {% endif %} <div class="col-12"> <article class="post type-post panel rounded-3 p-2 md:p-4 bg-secondary dark:bg-gray-800"> <div class="panel row child-cols-12 sm:child-cols items-center g-3 md:g-4"> <div class="sm:col-4 md:col-6 lg:col-4"> <div class="panel"> {% if article.image.name is not null %} <figure class="featured-image m-0 rounded ratio ratio-1x1 rounded-2 uc-transition-toggle overflow-hidden"><img class="media-cover image uc-transition-scale-up uc-transition-opaque" src="{{ vich_uploader_asset(article, 'imageFile') }}" alt="{{ article.title }}" title="{{ article.title }}"><a class="position-cover" href="#"></a></figure> {% else %} <figure class="featured-image m-0 rounded ratio ratio-1x1 rounded-2 uc-transition-toggle overflow-hidden"><img class="media-cover image uc-transition-scale-up uc-transition-opaque" src="/uploads/no_article.jpg" alt="{{ article.title }}" title="{{ article.title }}"><a class="position-cover" href="#"></a></figure> {% endif %} </div> </div> <div> <div class="vstack items-start gap-2 md:gap-3"> <ul class="post-meta nav-x ft-tertiary justify-start gap-1 fs-7"><li><div class="post-date hstack gap-narrow"><span>{{ article.publishedAt|date("d, M, Y") }}</span></div></li></ul> <h3 class="h4 sm:h5 md:h4 lg:h3 m-0"><a class="text-none" href="{{ urlArticle }}">{{ article.title }}</a></h3> <p class="fs-6 md:fs-5 d-none md:d-block">{{ article.subtitle }}</p> <a class="btn btn-text text-primary border-bottom d-inline-flex fs-7 md:fs-6 my-1 md:my-2 d-none md:d-block" href="{{ urlArticle }}">Je lis l'article</a> </div> </div> </div> </article> </div> {% endfor %} </div> </div> </div> </div> <div id="pre_cta" class="pre-cta section panel overflow-hidden"> <div class="section-outer panel pb-4 sm:pb-6 xl:pb-9"> <div class="container max-w-xl"> <div class="section-inner panel p-4 md:p-6 lg:p-8 rounded-1-5 lg:rounded-2 bg-secondary dark:bg-gray-800 dark:text-white" data-anime="onview: -200; translateY: [24, 0]; opacity: [0, 1]; easing: easeOutCubic; duration: 500;" style="transform: translateY(0px); opacity: 1;"> <div class="vstack items-center gap-2 mx-auto text-center" data-anime="onview: -200; targets: >*; translateY: [48, 0]; opacity: [0, 1]; easing: easeOutCubic; duration: 500; delay: anime.stagger(100, {start: 200});"> <h2 class="h3 m-0">Whileresume met en relation des talents avec des entreprises en forte croissance</h2> <div class="row" style="margin-top:15px;"> <div class="col-md-6"> <div style="background-color:white; text-align:left; border-radius:20px; padding:20px;"> <h3 class="h3 m-0" style="color:purple;">Recruteur</h3> <p class="fs-6 text-dark dark:text-white text-opacity-70" style="margin-top:10px;">On connecte les meilleurs talents du marché aux entreprises en croissance qui recherchent des collaborateurs d'exception.</p> <a href="{{ path('whileresume_business_' ~ app.request.locale) }}" class="btn btn-md btn-primary rounded-default text-white shadow-xs" style="margin-top:10px;">Je recrute <i class="icon-2 unicon-arrow-up-right rtl:-rotate-90"></i></a> </div> </div> <div class="col-md-6"> <div style="background-color:white; text-align:left; border-radius:20px; padding:20px;"> <h3 class="h3 m-0" style="color:purple;">Candidat</h3> <p class="fs-6 text-dark dark:text-white text-opacity-70" style="margin-top:10px;">On vous accompagne dans la recherche de votre poste idéal au sein des entreprises les plus prometteuses du marché.</p> <a href="{{ path('whileresume_resume_' ~ app.request.locale) }}" class="btn btn-md btn-primary rounded-default text-white shadow-xs" style="margin-top:10px;">Je cherche un job <i class="icon-2 unicon-arrow-up-right rtl:-rotate-90"></i></a> </div> </div> </div> </div> </div> </div> </div> </div>{% endblock body %}