{% extends 'application/whileresume/website/layout-social.html.twig' %}{% set isFR = app.request.locale == 'fr' %}{% set _keys = ['hero_eyebrow','hero_title_pre','hero_title_accent','hero_title_post','hero_title_accent2','hero_title_2','hero_lede_pre','hero_lede_brand','hero_lede_mid','hero_lede_word','hero_lede_post','hero_cta_signup','hero_cta_login','hero_search_placeholder','hero_popular_label','hero_btn_ios','hero_btn_android','hero_default_title','hero_search_button','hero_byline_jobs','hero_byline_apps','hero_byline_free','hero_kbd_enter','search_loading','search_no_results','search_no_results_hint','search_results_count','search_view_all','search_view_offer','search_clear','how_eyebrow','how_title','how_lede','how1_title','how1_desc','how2_title','how2_desc','how3_title','how3_desc','feat1_label','feat1_title','feat1_p1','feat1_p2','feat1_quote','feat1_author','feat1_role','feat2_label','feat2_title','feat2_p1','feat2_p2','feat2_quote','feat2_author','feat2_role','feat3_label','feat3_title','feat3_p1','feat3_p2','feat3_quote','feat3_author','feat3_role','feat4_label','feat4_title','feat4_p1','feat4_p2','feat4_quote','feat4_author','feat4_role','signup_eyebrow','signup_title','signup_lede','signup_email_ph','signup_pass_ph','signup_pass2_ph','signup_terms_pre','signup_terms_link','signup_btn','signup_login_pre','signup_login_link','signup_perk1','signup_perk2','signup_perk3','apps_eyebrow','apps_title','apps_lede','apps_ios','apps_android','apps_web','apps_ios_desc','apps_android_desc','apps_web_desc','articles_title','articles_view_all','read_article','final_eyebrow','final_title','final_recruiter_label','final_recruiter_title','final_recruiter_desc','final_candidate_label','final_candidate_title','final_candidate_desc','final_candidate','final_recruiter'] %}{% set t = {} %}{% for k in _keys %}{% set t = t|merge({(k): ('homepage.' ~ k)|trans({}, 'whr-public')}) %}{% endfor %}{% block title %}{{ page.shortTitle }}{% endblock %}{% block description %}{{ page.shortDescription }}{% endblock %}{% block robots %}{{ page.robots }}{% endblock %}{% block canonical %}{% include "/vitrine/lexend/components/languages/canonical_classic.html.twig" %}{% endblock %}{% block css %}{{ parent() }}<style>:root{--wr-bg:#FBFCFE;--wr-bg-2:#F4F6FB;--wr-card:#FFFFFF;--wr-violet:#8A63C1;--wr-violet-2:#A98AD3;--wr-violet-soft:#F2EDFA;--wr-violet-softer:#F8F4FD;--wr-violet-dark:#6B47A6;--wr-ink:#1E1B2E;--wr-ink-2:#374151;--wr-muted:#6B7280;--wr-muted-2:#9CA3AF;--wr-line:#EEF1F7;--wr-line-2:#E5E9F0;--wr-shadow:0 1px 2px rgba(30,27,46,.04),0 4px 16px rgba(30,27,46,.04);--wr-shadow-hover:0 4px 8px rgba(138,99,192,.08),0 12px 32px rgba(138,99,192,.1);/* Accents colorés pour les logos d'offres (lettres) */--wr-acc-yellow:#FEF3C7; --wr-acc-yellow-fg:#B45309;--wr-acc-green:#D1FAE5; --wr-acc-green-fg:#047857;--wr-acc-pink:#FCE7F3; --wr-acc-pink-fg:#BE185D;--wr-acc-blue:#DBEAFE; --wr-acc-blue-fg:#1E40AF;--wr-acc-orange:#FED7AA; --wr-acc-orange-fg:#C2410C;--wr-acc-violet:#EDE9FE; --wr-acc-violet-fg:#6D28D9;--wr-acc-cyan:#CFFAFE; --wr-acc-cyan-fg:#0E7490;}/* ═══════════════════════════════════════════════════════════════════PLEINE LARGEUR — On retire la réservation d'espace de la sidebar droite═══════════════════════════════════════════════════════════════════ */body .main-content.right-chat-active{padding-right:0!important}body .main-content{padding-right:0!important}body .right-chat{display:none!important}body .middle-sidebar-bottom .middle-sidebar-left{padding-right:0!important;max-width:none!important;width:100%!important}body .middle-sidebar-bottom{max-width:none!important}.wr{margin:-15px -15px 0;background:var(--wr-bg);color:var(--wr-ink);font-family:inherit;font-size:15px;line-height:1.6;-webkit-font-smoothing:antialiased}@media(max-width:991px){.wr{margin:0 -15px}}.wr *{box-sizing:border-box}.wr a{color:inherit;text-decoration:none}/* ═══════════════════════════════════════════════════════════════════SECTIONS GENERIC — Fond UNIFIÉ partout (pas d'alternance)═══════════════════════════════════════════════════════════════════ */.wr-section{padding:80px 32px;background:var(--wr-bg);position:relative}.wr-section--tight{padding:48px 32px}@media(max-width:768px){.wr-section{padding:56px 20px}.wr-section--tight{padding:36px 20px}}/* Filet décoratif au lieu d'un changement de couleur */.wr-section + .wr-section::before{content:"";position:absolute;top:0;left:50%;transform:translateX(-50%);width:80px;height:1px;background:linear-gradient(90deg,transparent,var(--wr-line-2),transparent);}.wr-container{max-width:1200px;margin:0 auto;position:relative}/* ═══ Eyebrow ═══ */.wr-eyebrow{display:inline-flex;align-items:center;gap:8px;padding:6px 14px;border-radius:100px;background:var(--wr-violet-soft);color:var(--wr-violet-dark);font-size:11.5px;font-weight:600;text-transform:uppercase;letter-spacing:.12em;margin-bottom:22px;}.wr-eyebrow-dot{width:6px;height:6px;border-radius:50%;background:var(--wr-violet);animation:wrPulse 2.4s ease-in-out infinite}@keyframes wrPulse{0%,100%{opacity:.5;transform:scale(1)}50%{opacity:1;transform:scale(1.3)}}/* ═══ Titres ═══ */.wr-title{font-family:inherit;font-weight:700;font-size:28px;line-height:1.15;letter-spacing:-0.025em;color:var(--wr-ink);margin:0 auto 16px;max-width:1200px;}@media(min-width:768px){.wr-title{font-size:34px}}@media(min-width:1024px){.wr-title{font-size:40px}}.wr-title--sm{font-size:24px}@media(min-width:768px){.wr-title--sm{font-size:30px}}.wr-title em{font-style:normal;font-weight:700;color:var(--wr-violet)}.wr-lede{font-size:17px;line-height:1.55;font-weight:400;color:var(--wr-ink-2);margin:0 auto;max-width:680px;}.wr-section-head{text-align:center;margin-bottom:56px}/* ═══════════════════════════════════════════════════════════════════HERO — Style soft, recherche dashboard, boutons pleins═══════════════════════════════════════════════════════════════════ */@keyframes wrFadeUp{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}@keyframes wrPulse2{0%{box-shadow:0 0 0 0 rgba(16,185,129,.4)}70%{box-shadow:0 0 0 8px rgba(16,185,129,0)}100%{box-shadow:0 0 0 0 rgba(16,185,129,0)}}/* ═══ Reveal au scroll (Intersection Observer ajoute .is-revealed) ═══ */.reveal{opacity:0;transform:translateY(24px);transition:opacity .8s cubic-bezier(.2,.7,.2,1),transform .8s cubic-bezier(.2,.7,.2,1)}.reveal.is-revealed{opacity:1;transform:translateY(0)}.reveal--left{transform:translateX(-32px) translateY(0)}.reveal--left.is-revealed{transform:translateX(0)}.reveal--right{transform:translateX(32px) translateY(0)}.reveal--right.is-revealed{transform:translateX(0)}.reveal--scale{transform:scale(.96);opacity:0}.reveal--scale.is-revealed{transform:scale(1);opacity:1}.reveal[data-reveal-delay="1"]{transition-delay:.08s}.reveal[data-reveal-delay="2"]{transition-delay:.16s}.reveal[data-reveal-delay="3"]{transition-delay:.24s}.reveal[data-reveal-delay="4"]{transition-delay:.32s}@media(prefers-reduced-motion:reduce){.reveal{opacity:1!important;transform:none!important;transition:none!important}}.hero{position:relative;background:var(--wr-bg);padding:24px 32px 0;overflow:hidden;}@media(max-width:768px){.hero{padding:18px 18px 0}}/* Décor : 2 blobs très flous violet pâle */.hero::before{content:"";position:absolute;top:-260px;right:-180px;width:560px;height:560px;background:radial-gradient(circle,rgba(138,99,192,.14) 0%,transparent 65%);pointer-events:none;filter:blur(50px);}.hero::after{content:"";position:absolute;top:120px;left:-180px;width:480px;height:480px;background:radial-gradient(circle,rgba(138,99,192,.09) 0%,transparent 65%);pointer-events:none;filter:blur(50px);}.hero-inner{position:relative;z-index:2;max-width:1200px;margin:0 auto;text-align:center}/* ═══ Eyebrow ═══ */.hero-badge{display:inline-flex;align-items:center;gap:8px;padding:7px 16px;border-radius:100px;background:var(--wr-violet-soft);color:var(--wr-violet-dark);font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.1em;margin-bottom:10px;opacity:0;transform:translateY(8px);animation:wrFadeUp .8s ease forwards;}.hero-badge-dot{width:6px;height:6px;border-radius:50%;background:var(--wr-violet);animation:wrPulse2 2s ease infinite}/* ═══ Titre — 57px desktop, plein largeur conteneur ═══ */.hero-title{font-weight:700;font-size:24px;line-height:1.05;letter-spacing:-0.04em;color:var(--wr-ink);margin:0 auto 12px;width:100%;max-width:1200px;opacity:0;transform:translateY(12px);animation:wrFadeUp .9s cubic-bezier(.2,.7,.2,1) .15s forwards;}@media(min-width:768px){.hero-title{font-size:40px;letter-spacing:-0.045em}}@media(min-width:1100px){.hero-title{font-size:57px;letter-spacing:-0.045em}}.hero-title-accent{color:var(--wr-violet);}.hero-lede{font-size:15px;line-height:1.5;color:var(--wr-ink-2);font-weight:400;margin:0 auto 16px;max-width:680px;opacity:0;animation:wrFadeUp .9s ease .4s forwards;}@media(min-width:768px){.hero-lede{font-size:17px}}.hero-lede-accent{color:var(--wr-violet);font-weight:600}/* ═══ Recherche — pleine largeur (alignée sur la liste 1200px) ═══ */.hero-search-wrap{max-width:1200px;margin:0 auto 12px;opacity:0;animation:wrFadeUp .9s ease .55s forwards;position:relative;z-index:5;}.hero-search{background:var(--wr-card);border-radius:14px;box-shadow:0 0 20px 0 rgba(0,0,0,0.05),0 16px 40px rgba(138,99,192,.06);padding:10px;position:relative;}.hero-search-inner{display:flex;align-items:center;gap:10px;padding:10px 14px;border-radius:10px;background:#F9FAFB;border:1px solid #E5E7EB;transition:border-color .2s,background .2s;}.hero-search-inner:focus-within{border-color:rgba(138,99,192,.4);background:#fff;}.hero-search-icon{color:var(--wr-muted-2);display:flex;flex-shrink:0}.hero-search-icon svg{width:16px;height:16px}.hero-search-input{flex:1;border:0;outline:0;background:transparent;font-size:14.5px;font-family:inherit;color:var(--wr-ink);padding:6px 0;min-width:0;}.hero-search-input::placeholder{color:var(--wr-muted-2)}.hero-search-clear{background:none;border:0;color:var(--wr-muted-2);cursor:pointer;padding:4px;display:none;font-family:inherit;border-radius:6px;transition:background .15s,color .15s;}.hero-search-clear:hover{background:var(--wr-violet-soft);color:var(--wr-violet)}.hero-search-clear.is-visible{display:flex;align-items:center}.hero-search-clear svg{width:14px;height:14px}.hero-search-kbd{display:none;align-items:center;padding:3px 8px;background:#fff;border:1px solid #E5E7EB;border-radius:6px;font-size:10.5px;font-weight:600;color:var(--wr-muted);font-family:inherit;letter-spacing:.02em;white-space:nowrap;flex-shrink:0;}.hero-search-inner:focus-within .hero-search-kbd{display:inline-flex}/* ═══ États de la liste de jobs (header, empty, loading) ═══ */.hero-jobs-header{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:14px 22px 10px;border-bottom:1px solid var(--wr-line);margin-bottom:4px;}@media(max-width:540px){.hero-jobs-header{padding:12px 16px 8px}}.hero-jobs-count{font-size:11.5px;color:var(--wr-muted);text-transform:uppercase;letter-spacing:.08em;font-weight:600;}.hero-jobs-count strong{color:var(--wr-violet);font-weight:800;font-size:13px;margin-right:4px}.hero-jobs-link{font-size:11px;font-weight:700;color:var(--wr-violet);text-transform:uppercase;letter-spacing:.08em;text-decoration:none;display:inline-flex;align-items:center;gap:5px;transition:color .15s,transform .15s;}.hero-jobs-link:hover{color:var(--wr-violet-dark);text-decoration:none;transform:translateX(2px)}.hero-jobs-link svg{width:11px;height:11px}.hero-jobs-empty{text-align:center;padding:48px 20px;color:var(--wr-muted)}.hero-jobs-empty-icon{width:48px;height:48px;border-radius:14px;background:var(--wr-violet-soft);color:var(--wr-violet);display:inline-flex;align-items:center;justify-content:center;margin-bottom:14px}.hero-jobs-empty-icon svg{width:22px;height:22px}.hero-jobs-empty-title{font-weight:600;font-size:14px;color:var(--wr-ink);margin:0 0 4px}.hero-jobs-empty-hint{font-size:13px;margin:0;color:var(--wr-muted)}.hero-jobs-loading{text-align:center;padding:36px 20px;color:var(--wr-muted);font-size:13px;display:flex;align-items:center;justify-content:center;gap:10px}.hero-jobs-spinner{width:16px;height:16px;border-radius:50%;border:2px solid var(--wr-violet-soft);border-top-color:var(--wr-violet);animation:wrSpin .7s linear infinite}@keyframes wrSpin{to{transform:rotate(360deg)}}/* ═══ Pills "Populaire" sous la recherche ═══ */.hero-popular{display:flex;align-items:center;justify-content:center;gap:6px;flex-wrap:wrap;margin-bottom:18px;opacity:0;animation:wrFadeUp .9s ease .7s forwards;}.hero-popular-label{font-size:11px;font-weight:600;color:var(--wr-muted);text-transform:uppercase;letter-spacing:.06em;margin-right:4px;}.hero-popular-pill{display:inline-flex;align-items:center;gap:5px;padding:6px 12px;border-radius:100px;background:var(--wr-violet-soft);color:var(--wr-violet);font-size:12.5px;font-weight:500;font-family:inherit;text-decoration:none;cursor:pointer;border:1px solid transparent;transition:background .15s,border-color .15s,transform .15s,color .15s;}.hero-popular-pill:hover{background:#EDE9FE;border-color:rgba(138,99,192,.2);transform:translateY(-1px);color:var(--wr-violet);text-decoration:none;}.hero-popular-pill.is-active{background:var(--wr-violet);color:#fff;border-color:var(--wr-violet);}.hero-popular-pill.is-active:hover{background:var(--wr-violet-dark);color:#fff}.hero-popular-pill-icon{font-size:13px;line-height:1}/* ═══ CTA hero (boutons inscription + connexion pour anonymes) ═══ */.hero-cta{display:flex;align-items:center;justify-content:center;gap:12px;flex-wrap:wrap;margin:24px 0 8px;opacity:0;animation:wrFadeUp .9s ease 1.1s forwards;}.hero-cta-btn,.hero-cta-btn:link,.hero-cta-btn:visited,.hero-cta-btn:hover,.hero-cta-btn:focus,.hero-cta-btn:active{color:#fff !important;text-decoration:none !important;}.hero-cta-btn{display:inline-flex;align-items:center;gap:8px;padding:11px 20px;border-radius:11px;font-size:13.5px;font-weight:700;font-family:inherit;line-height:1;background:var(--wr-violet);border:1px solid var(--wr-violet);box-shadow:0 4px 14px rgba(138,99,193,.32);transition:background .15s,border-color .15s,transform .15s,box-shadow .15s;}.hero-cta-btn:hover{background:var(--wr-violet-dark);border-color:var(--wr-violet-dark);transform:translateY(-2px);box-shadow:0 6px 20px rgba(138,99,193,.4);}.hero-cta-btn svg{width:15px;height:15px;flex-shrink:0;stroke:#fff !important;color:#fff !important}.hero-cta-btn span{color:#fff !important}@media(max-width:540px){.hero-cta{flex-direction:column;align-items:stretch}.hero-cta-btn{justify-content:center}}/* ═══ Boutons stores — VIOLET PLEIN BLANC ═══ */.hero-stores{display:flex;align-items:center;justify-content:center;gap:12px;flex-wrap:wrap;margin-bottom:48px;opacity:0;animation:wrFadeUp .9s ease .85s forwards;}.hero-store-btn{display:inline-flex;align-items:center;gap:10px;padding:13px 24px;border-radius:12px;background:var(--wr-violet);border:0;color:#fff;font-size:14px;font-weight:600;text-decoration:none;transition:background .15s,transform .15s,box-shadow .15s;box-shadow:0 4px 12px rgba(138,99,192,.3);}.hero-store-btn:hover{background:var(--wr-violet-dark);color:#fff;transform:translateY(-2px);box-shadow:0 8px 22px rgba(138,99,192,.4);text-decoration:none;}.hero-store-btn-icon{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px}.hero-store-btn-icon svg{width:18px;height:18px}@media(max-width:540px){.hero-stores{flex-direction:column;align-items:stretch;gap:10px}.hero-store-btn{justify-content:center}}/* ═══════════════════════════════════════════════════════════════════LISTE PAR DÉFAUT SOUS LE HERO (offres récentes)═══════════════════════════════════════════════════════════════════ */.hero-default-jobs{position:relative;z-index:2;max-width:1200px;margin:0 auto;background:var(--wr-card);border:1px solid var(--wr-line);border-radius:18px;padding:8px 0;box-shadow:var(--wr-shadow);opacity:0;animation:wrFadeUp .9s ease 1s forwards;text-align:left;}.hero-default-job{display:flex;align-items:center;gap:16px;padding:14px 22px;text-decoration:none;color:inherit;border-bottom:1px solid var(--wr-line);transition:background .15s;}.hero-default-job:last-child{border-bottom:0}.hero-default-job:hover{background:var(--wr-violet-softer);text-decoration:none;color:inherit}.hero-default-job-logo{width:42px;height:42px;border-radius:11px;flex-shrink:0;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:16px;overflow:hidden;}.hero-default-job-logo img{width:100%;height:100%;object-fit:cover}/* 7 variantes de couleurs cyclées par index */.hero-default-job:nth-child(7n+1) .hero-default-job-logo{background:var(--wr-acc-yellow);color:var(--wr-acc-yellow-fg)}.hero-default-job:nth-child(7n+2) .hero-default-job-logo{background:var(--wr-acc-green);color:var(--wr-acc-green-fg)}.hero-default-job:nth-child(7n+3) .hero-default-job-logo{background:var(--wr-acc-pink);color:var(--wr-acc-pink-fg)}.hero-default-job:nth-child(7n+4) .hero-default-job-logo{background:var(--wr-acc-blue);color:var(--wr-acc-blue-fg)}.hero-default-job:nth-child(7n+5) .hero-default-job-logo{background:var(--wr-acc-orange);color:var(--wr-acc-orange-fg)}.hero-default-job:nth-child(7n+6) .hero-default-job-logo{background:var(--wr-acc-violet);color:var(--wr-acc-violet-fg)}.hero-default-job:nth-child(7n+7) .hero-default-job-logo{background:var(--wr-acc-cyan);color:var(--wr-acc-cyan-fg)}.hero-default-job-info{flex:1;min-width:0}.hero-default-job-title{font-weight:600;font-size:14.5px;color:var(--wr-ink);margin:0 0 2px;line-height:1.3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.hero-default-job-meta{font-size:12.5px;color:var(--wr-muted);margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:flex;align-items:center;gap:8px;}.hero-default-job-meta-sep{display:inline-block;width:3px;height:3px;border-radius:50%;background:var(--wr-muted-2);flex-shrink:0}.hero-default-job-arrow{flex-shrink:0;color:var(--wr-muted-2);transition:color .15s,transform .15s}.hero-default-job-arrow svg{width:15px;height:15px}.hero-default-job:hover .hero-default-job-arrow{color:var(--wr-violet);transform:translateX(3px)}@media(max-width:768px){.hero-default-jobs{margin:0 -18px;border-radius:14px}.hero-default-job{padding:12px 16px;gap:12px}.hero-default-job-logo{width:36px;height:36px;font-size:13px}.hero-default-job-title{font-size:13.5px}.hero-default-job-meta{font-size:11.5px;gap:6px;flex-wrap:wrap;white-space:normal}}/* ═══════════════════════════════════════════════════════════════════SECTION : 3 PARCOURS═══════════════════════════════════════════════════════════════════ */.paths-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}@media(max-width:991px){.paths-grid{grid-template-columns:1fr;gap:14px}}.path-card{position:relative;background:var(--wr-card);border:1px solid var(--wr-line);border-radius:20px;padding:28px;display:flex;flex-direction:column;transition:transform .25s ease,box-shadow .25s ease,border-color .25s ease;box-shadow:var(--wr-shadow);}.path-card:hover{transform:translateY(-4px);box-shadow:var(--wr-shadow-hover);border-color:var(--wr-violet-2)}.path-card-illu{width:64px;height:64px;border-radius:16px;background:var(--wr-violet-soft);color:var(--wr-violet);display:flex;align-items:center;justify-content:center;margin-bottom:22px;}.path-card-illu svg{width:30px;height:30px}.path-card-label{display:inline-block;font-size:11px;font-weight:600;color:var(--wr-violet-dark);text-transform:uppercase;letter-spacing:.1em;margin-bottom:10px;align-self:flex-start;}.path-card-title{font-weight:500;font-size:22px;line-height:1.25;letter-spacing:-0.015em;color:var(--wr-ink);margin:0 0 10px;}.path-card-desc{font-size:14px;line-height:1.6;color:var(--wr-muted);margin:0 0 22px;flex:1;}.path-card-cta{display:inline-flex;align-items:center;justify-content:center;gap:6px;background:var(--wr-violet);color:#fff;padding:12px 18px;border-radius:11px;font-size:13px;font-weight:600;align-self:stretch;transition:background .15s,transform .15s,box-shadow .15s;box-shadow:0 2px 8px rgba(138,99,192,.2);}.path-card-cta:hover{background:var(--wr-violet-dark);color:#fff;text-decoration:none;transform:translateY(-1px);box-shadow:0 4px 12px rgba(138,99,192,.3)}.path-card-cta svg{width:13px;height:13px;transition:transform .15s}.path-card-cta:hover svg{transform:translateX(3px)}/* ═══════════════════════════════════════════════════════════════════COMMENT ÇA MARCHE — Card crème englobante avec 3 sous-cards═══════════════════════════════════════════════════════════════════ */.how-card{background:#F4ECE1;border-radius:24px;padding:32px 24px;display:grid;grid-template-columns:repeat(3,1fr);gap:24px;position:relative;}@media(max-width:991px){.how-card{grid-template-columns:1fr;gap:8px;padding:24px 16px}}@media(min-width:992px){/* Séparateurs verticaux entre les 3 cellules */.how-card .how-step + .how-step{border-left:1px solid rgba(28,25,22,.08)}}.how-step{display:flex;flex-direction:column;align-items:center;text-align:center;padding:16px 20px;gap:16px;}.how-step-illu{width:100%;max-width:280px;aspect-ratio:1/1;border-radius:16px;background:rgba(255,255,255,.5);display:flex;align-items:center;justify-content:center;margin-bottom:4px;overflow:hidden;}.how-step-illu img{width:100%;height:100%;object-fit:contain;display:block}.how-step-illu svg{width:55%;height:55%;opacity:.85}.how-step-title{font-weight:700;font-size:18px;line-height:1.3;letter-spacing:-0.01em;color:var(--wr-ink);margin:0;}@media(min-width:992px){.how-step-title{font-size:20px}}.how-step-desc{font-size:14px;line-height:1.55;color:var(--wr-ink-2);margin:0;max-width:320px;}/* ═══════════════════════════════════════════════════════════════════FEATURES 01-04 — Splits alternés image/texte avec témoignages═══════════════════════════════════════════════════════════════════ */.feat-block{display:grid;grid-template-columns:1fr 1fr;gap:48px;align-items:center;margin-bottom:64px;}.feat-block:last-child{margin-bottom:0}@media(max-width:991px){.feat-block{grid-template-columns:1fr;gap:24px;margin-bottom:48px}}/* Alterner : 01 illu droite, 02 illu gauche, 03 illu droite, 04 illu gauche */.feat-block:nth-child(odd) .feat-illu{order:2}.feat-block:nth-child(odd) .feat-content{order:1}.feat-block:nth-child(even) .feat-illu{order:1}.feat-block:nth-child(even) .feat-content{order:2}@media(max-width:991px){.feat-block .feat-illu{order:1}.feat-block .feat-content{order:2}}.feat-illu{background:#F5EDE3;border-radius:20px;aspect-ratio:1/1;display:flex;align-items:center;justify-content:center;color:var(--wr-violet);overflow:hidden;position:relative;}.feat-illu img{width:100%;height:100%;object-fit:contain;display:block}.feat-illu svg{width:50%;height:50%;opacity:.85}.feat-content{display:flex;flex-direction:column;gap:18px}.feat-label{font-size:30px;font-weight:800;color:var(--wr-ink);letter-spacing:-0.02em;margin:0;line-height:1;}.feat-title{font-weight:700;font-size:24px;line-height:1.2;letter-spacing:-0.02em;color:var(--wr-ink);margin:0;}@media(min-width:768px){.feat-title{font-size:28px}}@media(min-width:1100px){.feat-title{font-size:30px}}.feat-desc{display:flex;flex-direction:column;gap:14px;}.feat-desc p{font-size:15px;line-height:1.6;color:var(--wr-ink-2);margin:0;opacity:.85;}@media(min-width:1100px){.feat-desc p{font-size:16px}}.feat-desc strong{color:var(--wr-ink);font-weight:700;opacity:1}.feat-quote{background:var(--wr-card);border:1px solid var(--wr-line);border-radius:14px;padding:18px 20px;display:flex;flex-direction:column;gap:10px;margin-top:8px;}.feat-quote-text{font-size:14px;line-height:1.55;color:var(--wr-ink-2);margin:0;font-style:italic;}.feat-quote-author{display:flex;flex-direction:column;}.feat-quote-name{font-size:13px;font-weight:700;color:var(--wr-ink);margin:0}.feat-quote-role{font-size:12px;color:var(--wr-muted);margin:0}/* ═══════════════════════════════════════════════════════════════════MATCH═══════════════════════════════════════════════════════════════════ */.match-grid{display:grid;grid-template-columns:1.1fr .9fr;gap:60px;align-items:center}@media(max-width:991px){.match-grid{grid-template-columns:1fr;gap:40px}}.match-text .wr-title{margin-left:0;text-align:left}.match-text .wr-lede{margin-left:0;text-align:left}.match-text .wr-eyebrow{margin-bottom:20px}.match-features{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-top:32px}@media(max-width:540px){.match-features{grid-template-columns:1fr}}.match-feature{background:var(--wr-card);border:1px solid var(--wr-line);border-radius:14px;padding:18px;transition:transform .15s,border-color .15s,box-shadow .15s;}.match-feature:hover{transform:translateY(-2px);border-color:var(--wr-violet-soft);box-shadow:var(--wr-shadow)}.match-feature-icon{width:34px;height:34px;border-radius:10px;background:var(--wr-violet-soft);color:var(--wr-violet);display:inline-flex;align-items:center;justify-content:center;margin-bottom:12px;}.match-feature-icon svg{width:16px;height:16px}.match-feature-title{font-weight:600;font-size:14px;line-height:1.3;color:var(--wr-ink);margin:0 0 5px}.match-feature-desc{font-size:12.5px;line-height:1.5;color:var(--wr-muted);margin:0}.match-visual{position:relative;display:flex;justify-content:center;align-items:center;padding:40px 0}.match-stack{position:relative;width:100%;max-width:340px;height:340px}.match-stack-card{position:absolute;background:var(--wr-card);border:1px solid var(--wr-line);border-radius:16px;padding:14px;display:flex;align-items:center;gap:12px;box-shadow:var(--wr-shadow);width:100%;transition:transform .3s ease,box-shadow .3s ease;cursor:pointer;}.match-stack-card:hover{transform:translateY(-4px) rotate(0deg)!important;box-shadow:0 20px 50px rgba(138,99,192,.22)!important;z-index:10!important;}.match-stack-card:nth-child(1){top:0;transform:rotate(-6deg) translateX(-10px);z-index:1;animation:wrFloat1 6s ease-in-out infinite}.match-stack-card:nth-child(2){top:78px;left:14px;transform:rotate(2deg);z-index:3;box-shadow:0 16px 40px rgba(138,99,192,.18);animation:wrFloat2 6s ease-in-out -2s infinite}.match-stack-card:nth-child(3){top:156px;transform:rotate(-3deg) translateX(8px);z-index:2;animation:wrFloat3 6s ease-in-out -4s infinite}.match-stack-card:nth-child(4){top:234px;left:20px;transform:rotate(4deg);z-index:1;animation:wrFloat4 6s ease-in-out -1s infinite}@keyframes wrFloat1{0%,100%{transform:rotate(-6deg) translate(-10px,0)}50%{transform:rotate(-6deg) translate(-10px,-8px)}}@keyframes wrFloat2{0%,100%{transform:rotate(2deg) translate(0,0)}50%{transform:rotate(2deg) translate(0,-6px)}}@keyframes wrFloat3{0%,100%{transform:rotate(-3deg) translate(8px,0)}50%{transform:rotate(-3deg) translate(8px,-7px)}}@keyframes wrFloat4{0%,100%{transform:rotate(4deg) translate(0,0)}50%{transform:rotate(4deg) translate(0,-5px)}}.match-stack-logo{width:38px;height:38px;border-radius:10px;background:var(--wr-violet-soft);color:var(--wr-violet);display:flex;align-items:center;justify-content:center;font-weight:700;font-size:14px;flex-shrink:0;}.match-stack-info{flex:1;min-width:0}.match-stack-title{font-weight:600;font-size:13px;color:var(--wr-ink);margin:0 0 2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.3}.match-stack-meta{font-size:11px;color:var(--wr-muted);margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.match-stack-heart{width:28px;height:28px;border-radius:50%;background:#FEE2E2;color:#EF4444;display:flex;align-items:center;justify-content:center;flex-shrink:0;animation:wrHeartbeat 1.6s ease-in-out infinite;}.match-stack-card:nth-child(1) .match-stack-heart{animation-delay:0s}.match-stack-card:nth-child(2) .match-stack-heart{animation-delay:.4s}.match-stack-card:nth-child(3) .match-stack-heart{animation-delay:.8s}.match-stack-card:nth-child(4) .match-stack-heart{animation-delay:1.2s}.match-stack-heart svg{width:13px;height:13px;fill:currentColor}@keyframes wrHeartbeat{0%,100%{transform:scale(1);box-shadow:0 0 0 0 rgba(239,68,68,.4)}10%{transform:scale(1.18);box-shadow:0 0 0 0 rgba(239,68,68,.4)}20%{transform:scale(1)}30%{transform:scale(1.12)}40%{transform:scale(1);box-shadow:0 0 0 10px rgba(239,68,68,0)}100%{box-shadow:0 0 0 0 rgba(239,68,68,0)}}/* ═══════════════════════════════════════════════════════════════════SIGNUP FORM (entre feat 02 et 03)═══════════════════════════════════════════════════════════════════ */.signup-card{position:relative;max-width:980px;margin:64px auto;background:linear-gradient(135deg, #FFFFFF 0%, #FAF7FF 100%);border:1px solid var(--wr-line);border-radius:32px;padding:48px 40px;box-shadow:0 4px 12px rgba(30,27,46,.04), 0 24px 64px rgba(138,99,192,.1);overflow:hidden;}@media(max-width:768px){.signup-card{padding:32px 22px;border-radius:24px;margin:48px auto}}/* Décor : 2 blobs violet pâle dans les coins */.signup-card::before{content:"";position:absolute;top:-120px;right:-120px;width:340px;height:340px;background:radial-gradient(circle,rgba(138,99,192,.12) 0%,transparent 65%);pointer-events:none;filter:blur(40px);}.signup-card::after{content:"";position:absolute;bottom:-100px;left:-80px;width:280px;height:280px;background:radial-gradient(circle,rgba(138,99,192,.08) 0%,transparent 65%);pointer-events:none;filter:blur(40px);}.signup-inner{position:relative;z-index:2;display:grid;grid-template-columns:1fr 1.2fr;gap:48px;align-items:center}@media(max-width:880px){.signup-inner{grid-template-columns:1fr;gap:28px}}.signup-text{display:flex;flex-direction:column;gap:14px}.signup-eyebrow{display:inline-flex;align-items:center;gap:8px;padding:7px 14px;border-radius:100px;background:var(--wr-violet-soft);color:var(--wr-violet-dark);font-size:11.5px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;align-self:flex-start;}.signup-title{font-weight:700;font-size:28px;line-height:1.15;letter-spacing:-0.02em;color:var(--wr-ink);margin:0;}@media(min-width:768px){.signup-title{font-size:34px}}.signup-lede{font-size:15px;line-height:1.55;color:var(--wr-ink-2);margin:0;opacity:.85}.signup-perks{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px}.signup-perk{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border-radius:100px;background:var(--wr-card);border:1px solid var(--wr-line-2);font-size:12px;font-weight:600;color:var(--wr-ink-2);}.signup-perk svg{width:13px;height:13px;color:#10B981;stroke-width:3;flex-shrink:0}.signup-form{background:var(--wr-card);border:1px solid var(--wr-line);border-radius:20px;padding:24px;display:flex;flex-direction:column;gap:12px;box-shadow:0 1px 2px rgba(30,27,46,.03);}.signup-form-error{background:#FEF2F2;border:1px solid #FECACA;color:#991B1B;border-radius:12px;padding:10px 14px;font-size:13px;line-height:1.45;margin:0;}.signup-row{display:grid;grid-template-columns:1fr 1fr;gap:10px}@media(max-width:540px){.signup-row{grid-template-columns:1fr}}.signup-field{display:flex;flex-direction:column;gap:0}.signup-card .signup-form input[type="email"],.signup-card .signup-form input[type="password"],.signup-card .signup-form input[type="text"]{width:100%;padding:13px 14px;border:1px solid var(--wr-line-2);border-radius:11px;background:#FAFBFD;font-size:14px;font-family:inherit;color:var(--wr-ink);outline:none;transition:border-color .15s,background .15s,box-shadow .15s;box-sizing:border-box;}.signup-card .signup-form input[type="email"]:focus,.signup-card .signup-form input[type="password"]:focus,.signup-card .signup-form input[type="text"]:focus{border-color:var(--wr-violet);background:#fff;box-shadow:0 0 0 3px rgba(138,99,192,.12);}.signup-card .signup-form input::placeholder{color:var(--wr-muted-2)}.signup-terms{display:flex;align-items:flex-start;gap:10px;font-size:12.5px;line-height:1.45;color:var(--wr-muted);margin:4px 0 0;}.signup-card .signup-form input[type="checkbox"]{width:16px;height:16px;flex-shrink:0;margin-top:2px;accent-color:var(--wr-violet);cursor:pointer;}.signup-terms a{color:var(--wr-violet);font-weight:600;text-decoration:underline}.signup-terms a:hover{color:var(--wr-violet-dark)}.signup-recaptcha{margin:4px 0 0}.signup-recaptcha > div{max-width:100%}.signup-submit{width:100%;padding:14px 22px;border-radius:12px;background:var(--wr-violet);color:#fff;border:0;font-size:14.5px;font-weight:700;font-family:inherit;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:8px;box-shadow:0 4px 14px rgba(138,99,192,.32);transition:background .15s,transform .15s,box-shadow .15s;margin-top:6px;}.signup-submit:hover{background:var(--wr-violet-dark);transform:translateY(-1px);box-shadow:0 6px 20px rgba(138,99,192,.4)}.signup-submit svg{width:14px;height:14px;transition:transform .15s}.signup-submit:hover svg{transform:translateX(3px)}.signup-login{text-align:center;font-size:13px;color:var(--wr-muted);margin:6px 0 0;}.signup-login a{color:var(--wr-violet);font-weight:600;text-decoration:none}.signup-login a:hover{color:var(--wr-violet-dark);text-decoration:underline}/* ═══════════════════════════════════════════════════════════════════APPS═══════════════════════════════════════════════════════════════════ */.apps-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}@media(max-width:768px){.apps-grid{grid-template-columns:1fr}}.app-card{background:var(--wr-card);border:1px solid var(--wr-line);border-radius:18px;padding:24px;display:flex;flex-direction:column;align-items:flex-start;transition:transform .2s,border-color .2s,box-shadow .2s;}.app-card:hover{transform:translateY(-3px);border-color:var(--wr-violet-2);box-shadow:var(--wr-shadow-hover);color:inherit;text-decoration:none}.app-card-icon{width:48px;height:48px;border-radius:14px;background:var(--wr-violet-soft);color:var(--wr-violet);display:inline-flex;align-items:center;justify-content:center;margin-bottom:18px;}.app-card-icon svg{width:22px;height:22px}.app-card-name{font-weight:500;font-size:18px;letter-spacing:-0.01em;color:var(--wr-ink);margin:0 0 6px}.app-card-desc{font-size:13px;line-height:1.5;color:var(--wr-muted);margin:0 0 16px;flex:1}.app-card-cta{font-size:12px;font-weight:600;color:var(--wr-violet);text-transform:uppercase;letter-spacing:.1em;display:inline-flex;align-items:center;gap:6px}.app-card-cta svg{width:11px;height:11px;transition:transform .15s}.app-card:hover .app-card-cta svg{transform:translateX(3px)}/* ═══════════════════════════════════════════════════════════════════KEYWORDS═══════════════════════════════════════════════════════════════════ */.keywords-list{display:flex;flex-wrap:wrap;gap:8px;justify-content:center;max-width:1200px;margin:0 auto}.keyword-pill{display:inline-flex;align-items:center;gap:8px;padding:9px 16px;border-radius:100px;background:var(--wr-card);border:1px solid var(--wr-line-2);color:var(--wr-ink-2);font-size:13.5px;font-weight:500;transition:transform .15s,border-color .15s,background .15s,color .15s,box-shadow .15s;}.keyword-pill:hover{transform:translateY(-2px);border-color:var(--wr-violet);background:var(--wr-violet-soft);color:var(--wr-violet-dark);text-decoration:none;box-shadow:0 4px 10px rgba(138,99,192,.12)}.keyword-pill-icon{font-size:14px;line-height:1}/* ═══════════════════════════════════════════════════════════════════OFFRES POPULAIRES═══════════════════════════════════════════════════════════════════ */.listings-block{margin-bottom:32px}.listings-block:last-child{margin-bottom:0}.listings-block-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:14px;flex-wrap:wrap}.listings-block-title{display:inline-flex;align-items:center;gap:10px;font-weight:500;font-size:18px;letter-spacing:-0.005em;color:var(--wr-ink);margin:0;}.listings-block-icon{font-size:20px;line-height:1}.listings-block-link{display:inline-flex;align-items:center;gap:4px;padding:6px 12px;border-radius:100px;font-size:12px;font-weight:600;color:var(--wr-violet);text-transform:uppercase;letter-spacing:.06em;border:1px solid var(--wr-violet-soft);background:var(--wr-card);transition:background .15s,border-color .15s,transform .15s;}.listings-block-link:hover{background:var(--wr-violet-soft);border-color:var(--wr-violet);text-decoration:none;color:var(--wr-violet-dark);transform:translateX(2px)}.listings-block-link svg{width:11px;height:11px}.listings-jobs{display:grid;grid-template-columns:1fr 1fr;gap:10px}@media(max-width:768px){.listings-jobs{grid-template-columns:1fr}}.listing-job{display:flex;align-items:center;gap:14px;background:var(--wr-card);border:1px solid var(--wr-line);border-radius:14px;padding:12px;transition:transform .15s,border-color .15s,box-shadow .15s;}.listing-job:hover{transform:translateY(-2px);border-color:var(--wr-violet-soft);box-shadow:var(--wr-shadow);color:inherit;text-decoration:none}.listing-job-logo{width:42px;height:42px;border-radius:11px;flex-shrink:0;background:var(--wr-violet-soft);color:var(--wr-violet);display:flex;align-items:center;justify-content:center;font-weight:700;font-size:14px;overflow:hidden;}.listing-job-logo img{width:100%;height:100%;object-fit:cover}.listing-job-info{flex:1;min-width:0}.listing-job-title{font-weight:600;font-size:13.5px;color:var(--wr-ink);margin:0 0 2px;line-height:1.3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.listing-job-meta{font-size:11.5px;color:var(--wr-muted);margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.listing-job-arrow{flex-shrink:0;color:var(--wr-muted-2);transition:color .15s,transform .15s}.listing-job-arrow svg{width:14px;height:14px}.listing-job:hover .listing-job-arrow{color:var(--wr-violet);transform:translateX(2px)}/* ═══════════════════════════════════════════════════════════════════ARTICLES — Liste sans miniatures (style identique aux jobs-card)═══════════════════════════════════════════════════════════════════ */.articles-list{display:flex;flex-direction:column;gap:10px;max-width:1200px;margin:0 auto}.wr-article{background:var(--wr-card);border-radius:14px;padding:14px;box-shadow:0 0 16px 0 rgba(0,0,0,0.04);display:flex;align-items:center;gap:14px;text-decoration:none;color:inherit;transition:transform .15s,box-shadow .2s;}.wr-article:hover{transform:translateY(-1px);box-shadow:0 4px 20px rgba(138,99,192,.1);color:inherit;text-decoration:none;}.wr-article-logo{width:50px;height:50px;border-radius:12px;flex-shrink:0;background:linear-gradient(135deg,#EDE9FE,#DDD6FE);display:flex;align-items:center;justify-content:center;color:var(--wr-violet);overflow:hidden;}.wr-article-logo svg{width:24px;height:24px;opacity:.9}.wr-article-info{flex:1;min-width:0}.wr-article-title{font-size:14px;font-weight:700;color:var(--wr-ink);line-height:1.3;margin:0 0 4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.wr-article-meta{font-size:12px;color:var(--wr-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:flex;align-items:center;gap:8px;margin:0;}.wr-article-meta-sep{display:inline-block;width:3px;height:3px;border-radius:50%;background:#D1D5DB;flex-shrink:0}.wr-article-badge{font-size:11px;font-weight:600;color:var(--wr-violet);background:var(--wr-violet-soft);padding:3px 9px;border-radius:100px;white-space:nowrap;flex-shrink:0;text-transform:uppercase;letter-spacing:.04em;}.wr-article-arrow{flex-shrink:0;color:var(--wr-muted-2);transition:color .15s,transform .15s}.wr-article:hover .wr-article-arrow{color:var(--wr-violet);transform:translateX(2px)}.wr-article-arrow svg{width:18px;height:18px}@media(max-width:540px){.wr-article{padding:12px;gap:10px}.wr-article-logo{width:42px;height:42px}.wr-article-logo svg{width:20px;height:20px}.wr-article-title{font-size:13px}.wr-article-meta{font-size:11px;gap:6px;flex-wrap:wrap;white-space:normal}.wr-article-badge{display:none}}.articles-cta{text-align:center;margin-top:36px}.articles-cta a{display:inline-flex;align-items:center;gap:8px;padding:12px 22px;border-radius:11px;background:var(--wr-violet);color:#fff;font-size:13px;font-weight:600;text-decoration:none;box-shadow:0 4px 12px rgba(138,99,192,.3);transition:background .15s,transform .15s,box-shadow .15s;}.articles-cta a:hover{background:var(--wr-violet-dark);transform:translateY(-2px);box-shadow:0 6px 18px rgba(138,99,192,.4);text-decoration:none;color:#fff}.articles-cta svg{width:12px;height:12px;transition:transform .15s}.articles-cta a:hover svg{transform:translateX(3px)}/* ═══════════════════════════════════════════════════════════════════CTA FINAL — Card violet plein avec eyebrow + 2 sous-cards═══════════════════════════════════════════════════════════════════ */.final-card{position:relative;background:linear-gradient(135deg,#8A63C0 0%,#9D7BCC 100%);border-radius:28px;padding:48px 40px;color:#fff;overflow:hidden;box-shadow:0 20px 60px -12px rgba(138,99,192,.4);}@media(max-width:768px){.final-card{padding:32px 22px;border-radius:22px}}.final-eyebrow{display:inline-flex;align-items:center;gap:8px;padding:8px 18px;border-radius:100px;background:rgba(255,255,255,.2);color:#fff;font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.12em;margin-bottom:20px;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);}.final-eyebrow svg{width:13px;height:13px;fill:currentColor}.final-title{font-weight:800;font-size:28px;line-height:1.15;letter-spacing:-0.02em;color:#fff;margin:0 0 36px;max-width:780px;}@media(min-width:768px){.final-title{font-size:38px}}/* Grille 2 sous-cards */.final-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px}@media(max-width:768px){.final-grid{grid-template-columns:1fr;gap:14px}}.final-sub{background:#fff;border-radius:18px;padding:28px;display:flex;flex-direction:column;}@media(max-width:768px){.final-sub{padding:22px}}.final-sub-head{display:flex;align-items:center;gap:14px;margin-bottom:18px}.final-sub-icon{width:44px;height:44px;border-radius:11px;background:var(--wr-violet-soft);color:var(--wr-violet);display:flex;align-items:center;justify-content:center;flex-shrink:0;}.final-sub-icon svg{width:22px;height:22px}.final-sub-label{font-size:12.5px;font-weight:700;color:var(--wr-violet);text-transform:uppercase;letter-spacing:.1em;}.final-sub-title{font-weight:800;font-size:18px;line-height:1.3;letter-spacing:-0.01em;color:var(--wr-ink);margin:0 0 10px;}.final-sub-desc{font-size:14px;line-height:1.55;color:var(--wr-muted);margin:0 0 24px;flex:1;}.final-sub-btn{display:flex;align-items:center;justify-content:center;gap:8px;background:var(--wr-violet);color:#fff;padding:14px 18px;border-radius:11px;font-size:14px;font-weight:700;text-decoration:none;transition:background .15s,transform .15s,box-shadow .15s;box-shadow:0 4px 12px rgba(138,99,192,.3);}.final-sub-btn:hover{background:var(--wr-violet-dark);color:#fff;transform:translateY(-2px);box-shadow:0 6px 18px rgba(138,99,192,.4);text-decoration:none;}.final-sub-btn svg{width:14px;height:14px;transition:transform .15s}.final-sub-btn:hover svg{transform:translateX(3px)}</style>{% endblock css %}{% block body %}<div class="wr">{# ═══════════════ HERO ═══════════════ #}<section class="hero"><div class="hero-inner"><span class="hero-badge"><span class="hero-badge-dot"></span>{{ t.hero_eyebrow }}</span><h1 class="hero-title"><span class="hero-title-accent">{{ t.hero_title_accent }}</span> {{ t.hero_title_post }}<br><span class="hero-title-accent">{{ t.hero_title_accent2 }}</span> {{ t.hero_title_2 }}</h1><p class="hero-lede">{{ t.hero_lede_pre }}<span class="hero-lede-accent">{{ t.hero_lede_brand }}</span>{{ t.hero_lede_mid }}<span class="hero-lede-accent">{{ t.hero_lede_word }}</span>{{ t.hero_lede_post }}</p>{# Pills "Populaire" — AU-DESSUS de la recherche, cliquer remplit l'input #}{% if popularKeywords is defined and popularKeywords|length > 0 %}<div class="hero-popular"><span class="hero-popular-label">{{ t.hero_popular_label }}</span>{% for kw in popularKeywords|slice(0, 5) %}<button type="button"class="hero-popular-pill"data-keyword="{{ kw.keyword }}"data-label="{{ kw.label }}">{% if kw.icon %}<span class="hero-popular-pill-icon">{{ kw.icon|raw }}</span>{% endif %}<span>{{ kw.label }}</span></button>{% endfor %}</div>{% endif %}{# Recherche inline AJAX — style dashboard jobs #}<div class="hero-search-wrap"><div class="hero-search" id="wrHeroSearch"data-search-url="{% if isFR %}{{ path('locale_api_jobs_search',{'_locale':'fr'}) }}{% else %}{{ path('api_jobs_search') }}{% endif %}"data-jobs-list-url="{% if isFR %}{{ path('locale_whileresume_jobs_list',{'_locale':'fr'}) }}{% else %}{{ path('whileresume_jobs_list') }}{% endif %}"><div class="hero-search-inner"><span class="hero-search-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"/><path d="M21 21l-4.35-4.35"/></svg></span><input type="text" name="q" id="wrHeroSearchInput" class="hero-search-input"placeholder="{{ t.hero_search_placeholder }}"autocomplete="off" /><span class="hero-search-kbd">↵ {{ isFR ? 'Entrée' : 'Enter' }}</span><button type="button" class="hero-search-clear" id="wrHeroSearchClear" aria-label="{{ t.search_clear }}"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg></button></div></div></div>{# Liste de jobs — par défaut jobs aléatoires, remplacée par les résultats AJAX #}{# Le compteur affiche le nombre total d'offres en ligne (toutes langues confondues) #}{% set _heroCount = 0 %}<div class="hero-default-jobs" id="wrHeroJobsList"><div class="hero-jobs-header" id="wrHeroJobsHeader"><span class="hero-jobs-count" id="wrHeroJobsCount"><strong>{{ totalJobs ?? 0 }}</strong>{{ t.search_results_count }}</span><a href="{% if isFR %}{{ path('locale_whileresume_jobs_list',{'_locale':'fr'}) }}{% else %}{{ path('whileresume_jobs_list') }}{% endif %}" class="hero-jobs-link" id="wrHeroJobsLink">{{ t.search_view_all }}<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg></a></div><div id="wrHeroJobsBody">{% if randomJobs is defined and randomJobs|length > 0 %}{% for j in randomJobs %}{% if _heroCount < 6 %}<a href="{% if j.locale == 'fr' %}{{ path('locale_cvs_application_job_show',{'_locale':app.request.locale,'slug':j.slug}) }}{% else %}{{ path('cvs_application_job_show',{'slug':j.slug}) }}{% endif %}" class="hero-default-job"><div class="hero-default-job-logo">{% if j.image and j.image.name %}<img src="{{ vich_uploader_asset(j, 'imageFile') }}" alt="">{% else %}{{ j.companyName|default('?')|slice(0,1)|upper }}{% endif %}</div><div class="hero-default-job-info"><h3 class="hero-default-job-title">{{ j.jobTitle }}</h3><p class="hero-default-job-meta">{% if j.companyName %}<span>{{ j.companyName }}</span>{% endif %}{% if j.city %}<span class="hero-default-job-meta-sep"></span><span>{{ j.city }}{% if j.country %}, {{ j.country }}{% endif %}</span>{% endif %}{% if j.employmentType %}<span class="hero-default-job-meta-sep"></span><span>{{ j.employmentType }}</span>{% endif %}</p></div><span class="hero-default-job-arrow"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"/></svg></span></a>{% set _heroCount = _heroCount + 1 %}{% endif %}{% endfor %}{% endif %}</div></div>{# CTA pour utilisateurs non connectés : Inscription + Connexion #}{% if app.user is null %}<div class="hero-cta"><a href="#register" class="hero-cta-btn"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/><circle cx="8.5" cy="7" r="4"/><line x1="20" y1="8" x2="20" y2="14"/><line x1="23" y1="11" x2="17" y2="11"/></svg>{{ t.hero_cta_signup }}</a><a href="{% if isFR %}{{ path('locale_app_login',{'_locale':'fr'}) }}{% else %}{{ path('app_login') }}{% endif %}" class="hero-cta-btn"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4"/><polyline points="10 17 15 12 10 7"/><line x1="15" y1="12" x2="3" y2="12"/></svg>{{ t.hero_cta_login }}</a></div>{% endif %}</div></section>{# ═══════════════ COMMENT ÇA MARCHE ═══════════════ #}<section class="wr-section"><div class="wr-container"><div class="wr-section-head"><h2 class="wr-title">{{ t.how_title }}</h2></div><div class="how-card"><div class="how-step reveal" data-reveal-delay="1"><div class="how-step-illu"><img src="/uploads/rh/mascotte_register.png" alt="{{ t.how1_title }}" loading="lazy"></div><h3 class="how-step-title">{{ t.how1_title }}</h3><p class="how-step-desc">{{ t.how1_desc }}</p></div><div class="how-step reveal" data-reveal-delay="2"><div class="how-step-illu"><img src="/uploads/rh/mascotte_upload2.png" alt="{{ t.how2_title }}" loading="lazy"></div><h3 class="how-step-title">{{ t.how2_title }}</h3><p class="how-step-desc">{{ t.how2_desc }}</p></div><div class="how-step reveal" data-reveal-delay="3"><div class="how-step-illu"><img src="/uploads/rh/mascotte_reunion.png" alt="{{ t.how3_title }}" loading="lazy"></div><h3 class="how-step-title">{{ t.how3_title }}</h3><p class="how-step-desc">{{ t.how3_desc }}</p></div></div></div></section>{# ═══════════════ FEATURES 01-04 ═══════════════ #}<section class="wr-section"><div class="wr-container">{# Feature 01 — Filtrage par critères #}<div class="feat-block reveal"><div class="feat-illu"><img src="/uploads/rh/mascotte_filtrage3.png" alt="{{ t.feat1_title }}" loading="lazy"></div><div class="feat-content"><span class="feat-label">{{ t.feat1_label }}</span><h3 class="feat-title">{{ t.feat1_title }}</h3><div class="feat-desc"><p>{{ t.feat1_p1|raw }}</p><p>{{ t.feat1_p2|raw }}</p></div><div class="feat-quote"><p class="feat-quote-text">{{ t.feat1_quote }}</p><div class="feat-quote-author"><p class="feat-quote-name">{{ t.feat1_author }}</p><p class="feat-quote-role">{{ t.feat1_role }}</p></div></div></div></div>{# Feature 02 — Optimisation intelligente #}<div class="feat-block reveal"><div class="feat-illu"><img src="/uploads/rh/mascotte_upload.png" alt="{{ t.feat2_title }}" loading="lazy"></div><div class="feat-content"><span class="feat-label">{{ t.feat2_label }}</span><h3 class="feat-title">{{ t.feat2_title }}</h3><div class="feat-desc"><p>{{ t.feat2_p1|raw }}</p><p>{{ t.feat2_p2|raw }}</p></div><div class="feat-quote"><p class="feat-quote-text">{{ t.feat2_quote }}</p><div class="feat-quote-author"><p class="feat-quote-name">{{ t.feat2_author }}</p><p class="feat-quote-role">{{ t.feat2_role }}</p></div></div></div></div>{% if app.user is null %}{# ═════ INSCRIPTION (entre feat 02 et 03) ═════ #}<div class="signup-card reveal reveal--scale" id="register"><div class="signup-inner"><div class="signup-text"><span class="signup-eyebrow"><svg viewBox="0 0 24 24" width="13" height="13" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/><circle cx="8.5" cy="7" r="4"/><line x1="20" y1="8" x2="20" y2="14"/><line x1="23" y1="11" x2="17" y2="11"/></svg>{{ t.signup_eyebrow }}</span><h3 class="signup-title">{{ t.signup_title }}</h3><p class="signup-lede">{{ t.signup_lede }}</p><div class="signup-perks"><span class="signup-perk"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></svg>{{ t.signup_perk1 }}</span><span class="signup-perk"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></svg>{{ t.signup_perk2 }}</span><span class="signup-perk"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></svg>{{ t.signup_perk3 }}</span></div></div>{% if form is defined %}{# Cas 1 : le controller passe le formulaire Symfony — rendu via form_widget #}{{ form_start(form, {'attr': {'class': 'signup-form', 'novalidate': 'novalidate'}}) }}{{ form_errors(form) }}{% for message in app.flashes('danger') %}<p class="signup-form-error">{{ message }}</p>{% endfor %}<div class="signup-field">{{ form_widget(form.email, {'attr': {'placeholder': t.signup_email_ph}}) }}</div><div class="signup-row"><div class="signup-field">{{ form_widget(form.password.first, {'attr': {'placeholder': t.signup_pass_ph}}) }}</div><div class="signup-field">{{ form_widget(form.password.second, {'attr': {'placeholder': t.signup_pass2_ph}}) }}</div></div><label class="signup-terms">{{ form_widget(form.acceptTerm) }}<span>{{ t.signup_terms_pre }}<a href="{% if isFR %}/fr/protections-donnees-candidats{% else %}/data-protection-candidates{% endif %}" target="_blank" rel="noopener">{{ t.signup_terms_link }}</a>.</span></label>{% if form.recaptcha is defined %}<div class="signup-recaptcha">{{ form_widget(form.recaptcha) }}</div>{% endif %}<button type="submit" class="signup-submit">{{ t.signup_btn }}<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg></button>{{ form_rest(form) }}{{ form_end(form) }}{% endif %}</div></div>{% endif %}{# Feature 03 — Recherche qualifiée #}<div class="feat-block reveal"><div class="feat-illu"><img src="/uploads/rh/mascotte_register.png" alt="{{ t.feat3_title }}" loading="lazy"></div><div class="feat-content"><span class="feat-label">{{ t.feat3_label }}</span><h3 class="feat-title">{{ t.feat3_title }}</h3><div class="feat-desc"><p>{{ t.feat3_p1|raw }}</p><p>{{ t.feat3_p2|raw }}</p></div><div class="feat-quote"><p class="feat-quote-text">{{ t.feat3_quote }}</p><div class="feat-quote-author"><p class="feat-quote-name">{{ t.feat3_author }}</p><p class="feat-quote-role">{{ t.feat3_role }}</p></div></div></div></div>{# Feature 04 — Contact direct qualifié #}<div class="feat-block reveal"><div class="feat-illu"><img src="/uploads/rh/mascotte_reunion.png" alt="{{ t.feat4_title }}" loading="lazy"></div><div class="feat-content"><span class="feat-label">{{ t.feat4_label }}</span><h3 class="feat-title">{{ t.feat4_title }}</h3><div class="feat-desc"><p>{{ t.feat4_p1|raw }}</p><p>{{ t.feat4_p2|raw }}</p></div><div class="feat-quote"><p class="feat-quote-text">{{ t.feat4_quote }}</p><div class="feat-quote-author"><p class="feat-quote-name">{{ t.feat4_author }}</p><p class="feat-quote-role">{{ t.feat4_role }}</p></div></div></div></div></div></section>{# ═══════════════ APPS ═══════════════ #}<section class="wr-section"><div class="wr-container"><div class="apps-grid"><a href="{{ isFR ? (ios_fr|default('#')) : (ios_us|default('#')) }}" class="app-card"><span class="app-card-icon"><svg viewBox="0 0 24 24" fill="currentColor"><path d="M17.05 20.28c-.98.95-2.05.8-3.08.35-1.09-.46-2.09-.48-3.24 0-1.44.62-2.2.44-3.06-.35C2.79 15.25 3.51 7.59 9.05 7.31c1.35.07 2.29.74 3.08.8 1.18-.24 2.31-.93 3.57-.84 1.51.12 2.65.72 3.4 1.8-3.12 1.87-2.38 5.98.48 7.13-.57 1.5-1.31 2.99-2.54 4.09l.01-.01zM12.03 7.25c-.15-2.23 1.66-4.07 3.74-4.25.29 2.58-2.34 4.5-3.74 4.25z"/></svg></span><h3 class="app-card-name">{{ t.apps_ios }}</h3><p class="app-card-desc">{{ t.apps_ios_desc }}</p><span class="app-card-cta">App Store<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg></span></a><a href="{{ isFR ? (android_fr|default('#')) : (android_us|default('#')) }}" class="app-card"><span class="app-card-icon"><svg viewBox="0 0 24 24" fill="currentColor"><path d="M17.523 15.34c-.583 0-1.06-.477-1.06-1.06 0-.582.477-1.06 1.06-1.06.583 0 1.06.478 1.06 1.06 0 .583-.477 1.06-1.06 1.06m-11.046 0c-.583 0-1.06-.477-1.06-1.06 0-.582.477-1.06 1.06-1.06.583 0 1.06.478 1.06 1.06 0 .583-.477 1.06-1.06 1.06m11.427-6.176l2.114-3.66a.439.439 0 0 0-.16-.6.439.439 0 0 0-.6.16l-2.142 3.71a13.07 13.07 0 0 0-5.116-1.034c-1.823 0-3.55.376-5.116 1.034l-2.14-3.71a.439.439 0 1 0-.76.44l2.113 3.66C2.486 10.78.659 13.658.5 17h23c-.16-3.342-1.987-6.22-5.595-7.836"/></svg></span><h3 class="app-card-name">{{ t.apps_android }}</h3><p class="app-card-desc">{{ t.apps_android_desc }}</p><span class="app-card-cta">Google Play<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg></span></a><a href="{% if app.request.locale == 'en' %}{{ path('whileresume_homepage') }}{% else %}{{ path('locale_whileresume_homepage',{'_locale':app.request.locale}) }}{% endif %}#register" class="app-card"><span class="app-card-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><line x1="2" y1="12" x2="22" y2="12"/><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"/></svg></span><h3 class="app-card-name">{{ t.apps_web }}</h3><p class="app-card-desc">{{ t.apps_web_desc }}</p><span class="app-card-cta">whileresume.com<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg></span></a></div></div></section>{# ═══════════════ ARTICLES ═══════════════ #}{% if articles is defined and articles|length > 0 %}<section class="wr-section"><div class="wr-container"><div class="wr-section-head"><h2 class="wr-title wr-title--sm">{{ t.articles_title }}</h2></div><div class="articles-list">{% for a in articles|slice(0,6) %}{% set prefix = "" %}{% set urlA = path('cvs_website_article',{'slug': a.slug}) %}{% if app.request.locale != default_locale %}{% set urlA = path('locale_cvs_website_article',{'_locale':app.request.locale,'slug': a.slug}) %}{% set prefix = "/" ~ app.request.locale %}{% endif %}{% if a.pageslug3 is not empty %}{% set urlA = prefix ~ '/' ~ a.pageslug ~ '/' ~ a.pageslug2 ~ '/' ~ a.pageslug3 %}{% elseif a.pageslug2 is not empty %}{% set urlA = prefix ~ '/' ~ a.pageslug ~ '/' ~ a.pageslug2 %}{% elseif a.pageslug is not empty %}{% set urlA = prefix ~ '/' ~ a.pageslug %}{% endif %}<a href="{{ urlA }}" class="wr-article"><div class="wr-article-logo"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z"/><path d="M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z"/></svg></div><div class="wr-article-info"><h3 class="wr-article-title">{{ a.title }}</h3><div class="wr-article-meta">{% if a.subtitle is not empty %}<span>{{ a.subtitle|length > 60 ? a.subtitle|slice(0,60) ~ '…' : a.subtitle }}</span>{% endif %}</div></div><span class="wr-article-badge">{{ t.read_article }}</span><span class="wr-article-arrow"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"/></svg></span></a>{% endfor %}</div><div class="articles-cta"><a href="{% if isFR %}{{ path('locale_cvs_website_articles',{'_locale':'fr'}) }}{% else %}{{ path('cvs_website_articles') }}{% endif %}">{{ t.articles_view_all }}<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg></a></div></div></section>{% endif %}{# ═══════════════ CTA FINAL ═══════════════ #}{% if app.user is null %}<section class="wr-section"><div class="wr-container"><div class="final-card"><h2 class="final-title">{{ t.final_title }}</h2><div class="final-grid">{# Recruteur #}<div class="final-sub"><div class="final-sub-head"><span class="final-sub-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="7" width="20" height="14" rx="2" ry="2"/><path d="M16 21V5a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16"/></svg></span><span class="final-sub-label">{{ t.final_recruiter_label }}</span></div><h3 class="final-sub-title">{{ t.final_recruiter_title }}</h3><p class="final-sub-desc">{{ t.final_recruiter_desc }}</p><a href="{{ path('whileresume_business_' ~ app.request.locale) }}" class="final-sub-btn">{{ t.final_recruiter }}<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg></a></div>{# Candidat #}<div class="final-sub"><div class="final-sub-head"><span class="final-sub-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/></svg></span><span class="final-sub-label">{{ t.final_candidate_label }}</span></div><h3 class="final-sub-title">{{ t.final_candidate_title }}</h3><p class="final-sub-desc">{{ t.final_candidate_desc }}</p><a href="{% if app.request.locale == 'en' %}{{ path('whileresume_homepage') }}{% else %}{{ path('locale_whileresume_homepage',{'_locale':app.request.locale}) }}{% endif %}#register" class="final-sub-btn">{{ t.final_candidate }}<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg></a></div></div></div></div></section>{% endif %}</div>{% endblock body %}{% block footer_js %}{{ parent() }}<script>(function(){var search = document.getElementById('wrHeroSearch');var input = document.getElementById('wrHeroSearchInput');var clearBtn = document.getElementById('wrHeroSearchClear');var jobsBody = document.getElementById('wrHeroJobsBody');var countEl = document.getElementById('wrHeroJobsCount');var linkEl = document.getElementById('wrHeroJobsLink');if (!search || !input || !jobsBody) return;var searchUrl = search.dataset.searchUrl;var jobsListUrl = search.dataset.jobsListUrl;// On garde l'état initial pour pouvoir le restaurervar defaultBodyHtml = jobsBody.innerHTML;var defaultCountHtml = countEl ? countEl.innerHTML : '';var defaultLinkHref = linkEl ? linkEl.getAttribute('href') : jobsListUrl;var debounceTimer = null;var currentRequest = null;var lastQuery = '';var T = {loading: '{{ t.search_loading|escape('js') }}',empty: '{{ t.search_no_results|escape('js') }}',emptyHint: '{{ t.search_no_results_hint|escape('js') }}',count: '{{ t.search_results_count|escape('js') }}',viewAll: '{{ t.search_view_all|escape('js') }}',view: '{{ t.search_view_offer|escape('js') }}'};function escHtml(s){if (s == null) return '';return String(s).replace(/[&<>"']/g, function(c){return {'&':'&','<':'<','>':'>','"':'"',"'":'''}[c];});}function setHeaderCount(total){if (!countEl) return;countEl.innerHTML = '<strong>' + total + '</strong>' + escHtml(T.count);}function setHeaderLink(href){if (!linkEl) return;linkEl.setAttribute('href', href);}function setLoading(){jobsBody.innerHTML ='<div class="hero-jobs-loading">' +'<span class="hero-jobs-spinner"></span>' +'<span>' + escHtml(T.loading) + '</span>' +'</div>';}function setEmpty(){jobsBody.innerHTML ='<div class="hero-jobs-empty">' +'<div class="hero-jobs-empty-icon">' +'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">' +'<circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/>' +'</svg>' +'</div>' +'<p class="hero-jobs-empty-title">' + escHtml(T.empty) + '</p>' +'<p class="hero-jobs-empty-hint">' + escHtml(T.emptyHint) + '</p>' +'</div>';}function restoreDefault(){jobsBody.innerHTML = defaultBodyHtml;if (countEl) countEl.innerHTML = defaultCountHtml;if (linkEl) linkEl.setAttribute('href', defaultLinkHref);}function renderResults(payload, query){var jobs = (payload && payload.jobs) || [];var total = (payload && typeof payload.total === 'number') ? payload.total : jobs.length;setHeaderCount(total);setHeaderLink(jobsListUrl + '?q=' + encodeURIComponent(query));if (!jobs.length){setEmpty();return;}var html = '';jobs.slice(0, 6).forEach(function(j){var title = j.jobTitle || j.title || '';var company = j.companyName || j.company || '';var city = j.city || '';var country = j.country || '';var et = j.employmentType || '';var img = j.image || j.imageUrl || '';var url = j.url || (jobsListUrl + '?q=' + encodeURIComponent(query));var initial = (company || title || '?').charAt(0).toUpperCase();var location = city + (country ? ', ' + country : '');var metaParts = [];if (company) metaParts.push('<span>' + escHtml(company) + '</span>');if (location) metaParts.push('<span class="hero-default-job-meta-sep"></span><span>' + escHtml(location) + '</span>');if (et) metaParts.push('<span class="hero-default-job-meta-sep"></span><span>' + escHtml(et) + '</span>');html +='<a href="' + escHtml(url) + '" class="hero-default-job">' +'<div class="hero-default-job-logo">' +(img? '<img src="' + escHtml(img) + '" alt="">': escHtml(initial)) +'</div>' +'<div class="hero-default-job-info">' +'<h3 class="hero-default-job-title">' + escHtml(title) + '</h3>' +'<p class="hero-default-job-meta">' + metaParts.join('') + '</p>' +'</div>' +'<span class="hero-default-job-arrow">' +'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"/></svg>' +'</span>' +'</a>';});jobsBody.innerHTML = html;}function doSearch(query){if (currentRequest && currentRequest.abort) {try { currentRequest.abort(); } catch(e){}}setLoading();var url = searchUrl + (searchUrl.indexOf('?') > -1 ? '&' : '?') + 'q=' + encodeURIComponent(query);var ctrl = (typeof AbortController !== 'undefined') ? new AbortController() : null;currentRequest = ctrl;fetch(url, { headers: { 'Accept': 'application/json' }, signal: ctrl ? ctrl.signal : undefined }).then(function(r){ return r.ok ? r.json() : Promise.reject(r.status); }).then(function(data){ renderResults(data, query); }).catch(function(err){if (err && err.name === 'AbortError') return;setEmpty();});}// Input live (debounce 280ms)input.addEventListener('input', function(){var q = input.value.trim();clearBtn.classList.toggle('is-visible', q.length > 0);if (debounceTimer) clearTimeout(debounceTimer);if (q.length < 2){restoreDefault();lastQuery = '';return;}if (q === lastQuery) return;debounceTimer = setTimeout(function(){lastQuery = q;doSearch(q);}, 280);});// Enter → page de résultats complèteinput.addEventListener('keydown', function(e){if (e.key === 'Enter'){e.preventDefault();var q = input.value.trim();if (!q) return;window.location.href = jobsListUrl + '?q=' + encodeURIComponent(q);}if (e.key === 'Escape'){input.value = '';clearBtn.classList.remove('is-visible');restoreDefault();lastQuery = '';input.blur();}});// ClearclearBtn.addEventListener('click', function(){input.value = '';clearBtn.classList.remove('is-visible');restoreDefault();lastQuery = '';input.focus();});// Pills "Populaire" — au clic, on remplit l'input et on lance la recherchedocument.querySelectorAll('.hero-popular-pill').forEach(function(pill){pill.addEventListener('click', function(){var keyword = pill.dataset.keyword || pill.dataset.label || '';if (!keyword) return;// Visuel actifdocument.querySelectorAll('.hero-popular-pill').forEach(function(p){ p.classList.remove('is-active'); });pill.classList.add('is-active');input.value = keyword;clearBtn.classList.add('is-visible');lastQuery = keyword;doSearch(keyword);input.focus();});});})();/* ═══ Reveal au scroll (Intersection Observer) ═══ */(function(){var els = document.querySelectorAll('.reveal');if (!els.length) return;if (!('IntersectionObserver' in window)){// Fallback : tout révélerels.forEach(function(el){ el.classList.add('is-revealed'); });return;}var io = new IntersectionObserver(function(entries){entries.forEach(function(entry){if (entry.isIntersecting){entry.target.classList.add('is-revealed');io.unobserve(entry.target);}});}, { threshold: 0.12, rootMargin: '0px 0px -60px 0px' });els.forEach(function(el){ io.observe(el); });})();</script>{% endblock footer_js %}