<?phpuse Twig\Environment;use Twig\Error\LoaderError;use Twig\Error\RuntimeError;use Twig\Extension\CoreExtension;use Twig\Extension\SandboxExtension;use Twig\Markup;use Twig\Sandbox\SecurityError;use Twig\Sandbox\SecurityNotAllowedTagError;use Twig\Sandbox\SecurityNotAllowedFilterError;use Twig\Sandbox\SecurityNotAllowedFunctionError;use Twig\Source;use Twig\Template;use Twig\TemplateWrapper;/* application/whileresume/website/candidates/homepage.html.twig */class __TwigTemplate_3021bd991837ee306d1f78dd01b7ec9e extends Template{ private Source $source; /** * @var array<string, Template> */ private array $macros = []; public function __construct(Environment $env) { parent::__construct($env); $this->source = $this->getSourceContext(); $this->blocks = [ 'title' => [$this, 'block_title'], 'description' => [$this, 'block_description'], 'robots' => [$this, 'block_robots'], 'canonical' => [$this, 'block_canonical'], 'css' => [$this, 'block_css'], 'body' => [$this, 'block_body'], 'footer_js' => [$this, 'block_footer_js'], ]; } protected function doGetParent(array $context): bool|string|Template|TemplateWrapper { // line 1 return "application/whileresume/website/layout-social.html.twig"; } protected function doDisplay(array $context, array $blocks = []): iterable { $macros = $this->macros; $__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"]; $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "template", "application/whileresume/website/candidates/homepage.html.twig")); $__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"]; $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "template", "application/whileresume/website/candidates/homepage.html.twig")); // line 3 $context["isFR"] = (CoreExtension::getAttribute($this->env, $this->source, CoreExtension::getAttribute($this->env, $this->source, (isset($context["app"]) || array_key_exists("app", $context) ? $context["app"] : (function () { throw new RuntimeError('Variable "app" does not exist.', 3, $this->source); })()), "request", [], "any", false, false, false, 3), "locale", [], "any", false, false, false, 3) == "fr"); // line 4 $context["_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"]; // line 27 $context["t"] = []; // line 28 $context['_parent'] = $context; $context['_seq'] = CoreExtension::ensureTraversable((isset($context["_keys"]) || array_key_exists("_keys", $context) ? $context["_keys"] : (function () { throw new RuntimeError('Variable "_keys" does not exist.', 28, $this->source); })())); foreach ($context['_seq'] as $context["_key"] => $context["k"]) { // line 29 $context["t"] = Twig\Extension\CoreExtension::merge((isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 29, $this->source); })()), [ (string)$context["k"] => $this->extensions['Symfony\Bridge\Twig\Extension\TranslationExtension']->trans(("homepage." . $context["k"]), [], "whr-public")]); } $_parent = $context['_parent']; unset($context['_seq'], $context['_key'], $context['k'], $context['_parent']); $context = array_intersect_key($context, $_parent) + $_parent; // line 1 $this->parent = $this->load("application/whileresume/website/layout-social.html.twig", 1); yield from $this->parent->unwrap()->yield($context, array_merge($this->blocks, $blocks)); $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof); $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof); } // line 33 /** * @return iterable<null|scalar|\Stringable> */ public function block_title(array $context, array $blocks = []): iterable { $macros = $this->macros; $__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"]; $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "title")); $__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"]; $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "title")); yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["page"]) || array_key_exists("page", $context) ? $context["page"] : (function () { throw new RuntimeError('Variable "page" does not exist.', 33, $this->source); })()), "shortTitle", [], "any", false, false, false, 33), "html", null, true); $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof); $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof); yield from []; } // line 34 /** * @return iterable<null|scalar|\Stringable> */ public function block_description(array $context, array $blocks = []): iterable { $macros = $this->macros; $__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"]; $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "description")); $__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"]; $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "description")); yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["page"]) || array_key_exists("page", $context) ? $context["page"] : (function () { throw new RuntimeError('Variable "page" does not exist.', 34, $this->source); })()), "shortDescription", [], "any", false, false, false, 34), "html", null, true); $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof); $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof); yield from []; } // line 35 /** * @return iterable<null|scalar|\Stringable> */ public function block_robots(array $context, array $blocks = []): iterable { $macros = $this->macros; $__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"]; $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "robots")); $__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"]; $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "robots")); yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["page"]) || array_key_exists("page", $context) ? $context["page"] : (function () { throw new RuntimeError('Variable "page" does not exist.', 35, $this->source); })()), "robots", [], "any", false, false, false, 35), "html", null, true); $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof); $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof); yield from []; } // line 36 /** * @return iterable<null|scalar|\Stringable> */ public function block_canonical(array $context, array $blocks = []): iterable { $macros = $this->macros; $__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"]; $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "canonical")); $__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"]; $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "canonical")); yield from $this->load("/vitrine/lexend/components/languages/canonical_classic.html.twig", 36)->unwrap()->yield($context); $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof); $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof); yield from []; } // line 38 /** * @return iterable<null|scalar|\Stringable> */ public function block_css(array $context, array $blocks = []): iterable { $macros = $this->macros; $__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"]; $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "css")); $__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"]; $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "css")); // line 39 yield " "; yield from $this->yieldParentBlock("css", $context, $blocks); yield " <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>"; $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof); $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof); yield from []; } // line 1071 /** * @return iterable<null|scalar|\Stringable> */ public function block_body(array $context, array $blocks = []): iterable { $macros = $this->macros; $__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"]; $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "body")); $__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"]; $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "body")); // line 1072 yield " <div class=\"wr\"> "; // line 1075 yield " <section class=\"hero\"> <div class=\"hero-inner\"> <span class=\"hero-badge\"> <span class=\"hero-badge-dot\"></span> "; // line 1079 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1079, $this->source); })()), "hero_eyebrow", [], "any", false, false, false, 1079), "html", null, true); yield " </span> <h1 class=\"hero-title\"> <span class=\"hero-title-accent\">"; // line 1083 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1083, $this->source); })()), "hero_title_accent", [], "any", false, false, false, 1083), "html", null, true); yield "</span> "; yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1083, $this->source); })()), "hero_title_post", [], "any", false, false, false, 1083), "html", null, true); yield "<br> <span class=\"hero-title-accent\">"; // line 1084 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1084, $this->source); })()), "hero_title_accent2", [], "any", false, false, false, 1084), "html", null, true); yield "</span> "; yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1084, $this->source); })()), "hero_title_2", [], "any", false, false, false, 1084), "html", null, true); yield " </h1> <p class=\"hero-lede\"> "; // line 1088 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1088, $this->source); })()), "hero_lede_pre", [], "any", false, false, false, 1088), "html", null, true); yield " <span class=\"hero-lede-accent\">"; // line 1089 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1089, $this->source); })()), "hero_lede_brand", [], "any", false, false, false, 1089), "html", null, true); yield "</span> "; // line 1090 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1090, $this->source); })()), "hero_lede_mid", [], "any", false, false, false, 1090), "html", null, true); yield " <span class=\"hero-lede-accent\">"; // line 1091 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1091, $this->source); })()), "hero_lede_word", [], "any", false, false, false, 1091), "html", null, true); yield "</span> "; // line 1092 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1092, $this->source); })()), "hero_lede_post", [], "any", false, false, false, 1092), "html", null, true); yield " </p> "; // line 1096 yield " "; if ((array_key_exists("popularKeywords", $context) && (Twig\Extension\CoreExtension::length($this->env->getCharset(), (isset($context["popularKeywords"]) || array_key_exists("popularKeywords", $context) ? $context["popularKeywords"] : (function () { throw new RuntimeError('Variable "popularKeywords" does not exist.', 1096, $this->source); })())) > 0))) { // line 1097 yield " <div class=\"hero-popular\"> <span class=\"hero-popular-label\">"; // line 1098 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1098, $this->source); })()), "hero_popular_label", [], "any", false, false, false, 1098), "html", null, true); yield "</span> "; // line 1099 $context['_parent'] = $context; $context['_seq'] = CoreExtension::ensureTraversable(Twig\Extension\CoreExtension::slice($this->env->getCharset(), (isset($context["popularKeywords"]) || array_key_exists("popularKeywords", $context) ? $context["popularKeywords"] : (function () { throw new RuntimeError('Variable "popularKeywords" does not exist.', 1099, $this->source); })()), 0, 5)); foreach ($context['_seq'] as $context["_key"] => $context["kw"]) { // line 1100 yield " <button type=\"button\" class=\"hero-popular-pill\" data-keyword=\""; // line 1102 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["kw"], "keyword", [], "any", false, false, false, 1102), "html", null, true); yield "\" data-label=\""; // line 1103 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["kw"], "label", [], "any", false, false, false, 1103), "html", null, true); yield "\"> "; // line 1104 if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, $context["kw"], "icon", [], "any", false, false, false, 1104)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) { yield "<span class=\"hero-popular-pill-icon\">"; yield CoreExtension::getAttribute($this->env, $this->source, $context["kw"], "icon", [], "any", false, false, false, 1104); yield "</span>"; } // line 1105 yield " <span>"; yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["kw"], "label", [], "any", false, false, false, 1105), "html", null, true); yield "</span> </button> "; } $_parent = $context['_parent']; unset($context['_seq'], $context['_key'], $context['kw'], $context['_parent']); $context = array_intersect_key($context, $_parent) + $_parent; // line 1108 yield " </div> "; } // line 1110 yield " "; // line 1112 yield " <div class=\"hero-search-wrap\"> <div class=\"hero-search\" id=\"wrHeroSearch\" data-search-url=\""; // line 1114 if ((($tmp = (isset($context["isFR"]) || array_key_exists("isFR", $context) ? $context["isFR"] : (function () { throw new RuntimeError('Variable "isFR" does not exist.', 1114, $this->source); })())) && $tmp instanceof Markup ? (string) $tmp : $tmp)) { yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("locale_api_jobs_search", ["_locale" => "fr"]); } else { yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("api_jobs_search"); } yield "\" data-jobs-list-url=\""; // line 1115 if ((($tmp = (isset($context["isFR"]) || array_key_exists("isFR", $context) ? $context["isFR"] : (function () { throw new RuntimeError('Variable "isFR" does not exist.', 1115, $this->source); })())) && $tmp instanceof Markup ? (string) $tmp : $tmp)) { yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("locale_whileresume_jobs_list", ["_locale" => "fr"]); } else { yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("whileresume_jobs_list"); } yield "\"> <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=\""; // line 1123 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1123, $this->source); })()), "hero_search_placeholder", [], "any", false, false, false, 1123), "html", null, true); yield "\" autocomplete=\"off\" /> <span class=\"hero-search-kbd\">↵ "; // line 1125 yield (((($tmp = (isset($context["isFR"]) || array_key_exists("isFR", $context) ? $context["isFR"] : (function () { throw new RuntimeError('Variable "isFR" does not exist.', 1125, $this->source); })())) && $tmp instanceof Markup ? (string) $tmp : $tmp)) ? ("Entrée") : ("Enter")); yield "</span> <button type=\"button\" class=\"hero-search-clear\" id=\"wrHeroSearchClear\" aria-label=\""; // line 1126 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1126, $this->source); })()), "search_clear", [], "any", false, false, false, 1126), "html", null, true); yield "\"> <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> "; // line 1136 yield " "; $context["_heroCount"] = 0; // line 1137 yield " "; $context["_heroTotal"] = 0; // line 1138 yield " "; if (array_key_exists("popularJobs", $context)) { // line 1139 yield " "; $context['_parent'] = $context; $context['_seq'] = CoreExtension::ensureTraversable((isset($context["popularJobs"]) || array_key_exists("popularJobs", $context) ? $context["popularJobs"] : (function () { throw new RuntimeError('Variable "popularJobs" does not exist.', 1139, $this->source); })())); foreach ($context['_seq'] as $context["_key"] => $context["block"]) { // line 1140 yield " "; if (CoreExtension::getAttribute($this->env, $this->source, $context["block"], "jobs", [], "any", true, true, false, 1140)) { $context["_heroTotal"] = ((isset($context["_heroTotal"]) || array_key_exists("_heroTotal", $context) ? $context["_heroTotal"] : (function () { throw new RuntimeError('Variable "_heroTotal" does not exist.', 1140, $this->source); })()) + Twig\Extension\CoreExtension::length($this->env->getCharset(), CoreExtension::getAttribute($this->env, $this->source, $context["block"], "jobs", [], "any", false, false, false, 1140))); } // line 1141 yield " "; } $_parent = $context['_parent']; unset($context['_seq'], $context['_key'], $context['block'], $context['_parent']); $context = array_intersect_key($context, $_parent) + $_parent; // line 1142 yield " "; } // line 1143 yield " <div class=\"hero-default-jobs\" id=\"wrHeroJobsList\"> <div class=\"hero-jobs-header\" id=\"wrHeroJobsHeader\"> <span class=\"hero-jobs-count\" id=\"wrHeroJobsCount\"> <strong>"; // line 1147 yield (((isset($context["_heroTotal"]) || array_key_exists("_heroTotal", $context) ? $context["_heroTotal"] : (function () { throw new RuntimeError('Variable "_heroTotal" does not exist.', 1147, $this->source); })())) ? ($this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($context["_heroTotal"], "html", null, true)) : ((((array_key_exists("totalJobs", $context) && !(null === $context["totalJobs"]))) ? ($this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($context["totalJobs"], "html", null, true)) : ("")))); yield "</strong>"; yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1147, $this->source); })()), "search_results_count", [], "any", false, false, false, 1147), "html", null, true); yield " </span> <a href=\""; // line 1149 if ((($tmp = (isset($context["isFR"]) || array_key_exists("isFR", $context) ? $context["isFR"] : (function () { throw new RuntimeError('Variable "isFR" does not exist.', 1149, $this->source); })())) && $tmp instanceof Markup ? (string) $tmp : $tmp)) { yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("locale_whileresume_jobs_list", ["_locale" => "fr"]); } else { yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("whileresume_jobs_list"); } yield "\" class=\"hero-jobs-link\" id=\"wrHeroJobsLink\"> "; // line 1150 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1150, $this->source); })()), "search_view_all", [], "any", false, false, false, 1150), "html", null, true); yield " <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\"> "; // line 1158 if ((array_key_exists("popularJobs", $context) && (Twig\Extension\CoreExtension::length($this->env->getCharset(), (isset($context["popularJobs"]) || array_key_exists("popularJobs", $context) ? $context["popularJobs"] : (function () { throw new RuntimeError('Variable "popularJobs" does not exist.', 1158, $this->source); })())) > 0))) { // line 1159 yield " "; $context['_parent'] = $context; $context['_seq'] = CoreExtension::ensureTraversable((isset($context["popularJobs"]) || array_key_exists("popularJobs", $context) ? $context["popularJobs"] : (function () { throw new RuntimeError('Variable "popularJobs" does not exist.', 1159, $this->source); })())); foreach ($context['_seq'] as $context["_key"] => $context["block"]) { // line 1160 yield " "; if ((CoreExtension::getAttribute($this->env, $this->source, $context["block"], "jobs", [], "any", true, true, false, 1160) && (Twig\Extension\CoreExtension::length($this->env->getCharset(), CoreExtension::getAttribute($this->env, $this->source, $context["block"], "jobs", [], "any", false, false, false, 1160)) > 0))) { // line 1161 yield " "; $context['_parent'] = $context; $context['_seq'] = CoreExtension::ensureTraversable(CoreExtension::getAttribute($this->env, $this->source, $context["block"], "jobs", [], "any", false, false, false, 1161)); foreach ($context['_seq'] as $context["_key"] => $context["j"]) { // line 1162 yield " "; if (((isset($context["_heroCount"]) || array_key_exists("_heroCount", $context) ? $context["_heroCount"] : (function () { throw new RuntimeError('Variable "_heroCount" does not exist.', 1162, $this->source); })()) < 6)) { // line 1163 yield " <a href=\""; if ((CoreExtension::getAttribute($this->env, $this->source, $context["j"], "locale", [], "any", false, false, false, 1163) == "fr")) { yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("locale_cvs_application_job_show", ["_locale" => CoreExtension::getAttribute($this->env, $this->source, CoreExtension::getAttribute($this->env, $this->source, (isset($context["app"]) || array_key_exists("app", $context) ? $context["app"] : (function () { throw new RuntimeError('Variable "app" does not exist.', 1163, $this->source); })()), "request", [], "any", false, false, false, 1163), "locale", [], "any", false, false, false, 1163), "slug" => CoreExtension::getAttribute($this->env, $this->source, $context["j"], "slug", [], "any", false, false, false, 1163)]), "html", null, true); } else { yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("cvs_application_job_show", ["slug" => CoreExtension::getAttribute($this->env, $this->source, $context["j"], "slug", [], "any", false, false, false, 1163)]), "html", null, true); } yield "\" class=\"hero-default-job\"> <div class=\"hero-default-job-logo\"> "; // line 1165 if ((CoreExtension::getAttribute($this->env, $this->source, $context["j"], "image", [], "any", false, false, false, 1165) && CoreExtension::getAttribute($this->env, $this->source, CoreExtension::getAttribute($this->env, $this->source, $context["j"], "image", [], "any", false, false, false, 1165), "name", [], "any", false, false, false, 1165))) { // line 1166 yield " <img src=\""; yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Vich\UploaderBundle\Twig\Extension\UploaderExtension']->asset($context["j"], "imageFile"), "html", null, true); yield "\" alt=\"\"> "; } else { // line 1168 yield " "; yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(Twig\Extension\CoreExtension::upper($this->env->getCharset(), Twig\Extension\CoreExtension::slice($this->env->getCharset(), ((CoreExtension::getAttribute($this->env, $this->source, $context["j"], "companyName", [], "any", true, true, false, 1168)) ? (Twig\Extension\CoreExtension::default(CoreExtension::getAttribute($this->env, $this->source, $context["j"], "companyName", [], "any", false, false, false, 1168), "?")) : ("?")), 0, 1)), "html", null, true); yield " "; } // line 1170 yield " </div> <div class=\"hero-default-job-info\"> <h3 class=\"hero-default-job-title\">"; // line 1172 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["j"], "jobTitle", [], "any", false, false, false, 1172), "html", null, true); yield "</h3> <p class=\"hero-default-job-meta\"> "; // line 1174 if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, $context["j"], "companyName", [], "any", false, false, false, 1174)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) { yield "<span>"; yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["j"], "companyName", [], "any", false, false, false, 1174), "html", null, true); yield "</span>"; } // line 1175 yield " "; if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, $context["j"], "city", [], "any", false, false, false, 1175)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) { // line 1176 yield " <span class=\"hero-default-job-meta-sep\"></span> <span>"; // line 1177 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["j"], "city", [], "any", false, false, false, 1177), "html", null, true); if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, $context["j"], "country", [], "any", false, false, false, 1177)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) { yield ", "; yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["j"], "country", [], "any", false, false, false, 1177), "html", null, true); } yield "</span> "; } // line 1179 yield " "; if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, $context["j"], "employmentType", [], "any", false, false, false, 1179)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) { // line 1180 yield " <span class=\"hero-default-job-meta-sep\"></span> <span>"; // line 1181 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["j"], "employmentType", [], "any", false, false, false, 1181), "html", null, true); yield "</span> "; } // line 1183 yield " </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> "; // line 1189 $context["_heroCount"] = ((isset($context["_heroCount"]) || array_key_exists("_heroCount", $context) ? $context["_heroCount"] : (function () { throw new RuntimeError('Variable "_heroCount" does not exist.', 1189, $this->source); })()) + 1); // line 1190 yield " "; } // line 1191 yield " "; } $_parent = $context['_parent']; unset($context['_seq'], $context['_key'], $context['j'], $context['_parent']); $context = array_intersect_key($context, $_parent) + $_parent; // line 1192 yield " "; } // line 1193 yield " "; } $_parent = $context['_parent']; unset($context['_seq'], $context['_key'], $context['block'], $context['_parent']); $context = array_intersect_key($context, $_parent) + $_parent; // line 1194 yield " "; } // line 1195 yield " </div> </div> "; // line 1199 yield " "; if ((null === CoreExtension::getAttribute($this->env, $this->source, (isset($context["app"]) || array_key_exists("app", $context) ? $context["app"] : (function () { throw new RuntimeError('Variable "app" does not exist.', 1199, $this->source); })()), "user", [], "any", false, false, false, 1199))) { // line 1200 yield " <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> "; // line 1205 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1205, $this->source); })()), "hero_cta_signup", [], "any", false, false, false, 1205), "html", null, true); yield " </a> <a href=\""; // line 1207 if ((($tmp = (isset($context["isFR"]) || array_key_exists("isFR", $context) ? $context["isFR"] : (function () { throw new RuntimeError('Variable "isFR" does not exist.', 1207, $this->source); })())) && $tmp instanceof Markup ? (string) $tmp : $tmp)) { yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("locale_app_login", ["_locale" => "fr"]); } else { yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("app_login"); } yield "\" 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> "; // line 1211 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1211, $this->source); })()), "hero_cta_login", [], "any", false, false, false, 1211), "html", null, true); yield " </a> </div> "; } // line 1215 yield " </div> </section> "; // line 1219 yield " <section class=\"wr-section\"> <div class=\"wr-container\"> <div class=\"wr-section-head\"> <h2 class=\"wr-title\">"; // line 1222 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1222, $this->source); })()), "how_title", [], "any", false, false, false, 1222), "html", null, true); yield "</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=\""; // line 1228 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1228, $this->source); })()), "how1_title", [], "any", false, false, false, 1228), "html", null, true); yield "\" loading=\"lazy\"> </div> <h3 class=\"how-step-title\">"; // line 1230 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1230, $this->source); })()), "how1_title", [], "any", false, false, false, 1230), "html", null, true); yield "</h3> <p class=\"how-step-desc\">"; // line 1231 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1231, $this->source); })()), "how1_desc", [], "any", false, false, false, 1231), "html", null, true); yield "</p> </div> <div class=\"how-step reveal\" data-reveal-delay=\"2\"> <div class=\"how-step-illu\"> <img src=\"/uploads/rh/mascotte_upload2.png\" alt=\""; // line 1236 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1236, $this->source); })()), "how2_title", [], "any", false, false, false, 1236), "html", null, true); yield "\" loading=\"lazy\"> </div> <h3 class=\"how-step-title\">"; // line 1238 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1238, $this->source); })()), "how2_title", [], "any", false, false, false, 1238), "html", null, true); yield "</h3> <p class=\"how-step-desc\">"; // line 1239 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1239, $this->source); })()), "how2_desc", [], "any", false, false, false, 1239), "html", null, true); yield "</p> </div> <div class=\"how-step reveal\" data-reveal-delay=\"3\"> <div class=\"how-step-illu\"> <img src=\"/uploads/rh/mascotte_reunion.png\" alt=\""; // line 1244 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1244, $this->source); })()), "how3_title", [], "any", false, false, false, 1244), "html", null, true); yield "\" loading=\"lazy\"> </div> <h3 class=\"how-step-title\">"; // line 1246 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1246, $this->source); })()), "how3_title", [], "any", false, false, false, 1246), "html", null, true); yield "</h3> <p class=\"how-step-desc\">"; // line 1247 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1247, $this->source); })()), "how3_desc", [], "any", false, false, false, 1247), "html", null, true); yield "</p> </div> </div> </div> </section> "; // line 1254 yield " <section class=\"wr-section\"> <div class=\"wr-container\"> "; // line 1258 yield " <div class=\"feat-block reveal\"> <div class=\"feat-illu\"> <img src=\"/uploads/rh/mascotte_filtrage3.png\" alt=\""; // line 1260 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1260, $this->source); })()), "feat1_title", [], "any", false, false, false, 1260), "html", null, true); yield "\" loading=\"lazy\"> </div> <div class=\"feat-content\"> <span class=\"feat-label\">"; // line 1263 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1263, $this->source); })()), "feat1_label", [], "any", false, false, false, 1263), "html", null, true); yield "</span> <h3 class=\"feat-title\">"; // line 1264 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1264, $this->source); })()), "feat1_title", [], "any", false, false, false, 1264), "html", null, true); yield "</h3> <div class=\"feat-desc\"> <p>"; // line 1266 yield CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1266, $this->source); })()), "feat1_p1", [], "any", false, false, false, 1266); yield "</p> <p>"; // line 1267 yield CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1267, $this->source); })()), "feat1_p2", [], "any", false, false, false, 1267); yield "</p> </div> <div class=\"feat-quote\"> <p class=\"feat-quote-text\">"; // line 1270 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1270, $this->source); })()), "feat1_quote", [], "any", false, false, false, 1270), "html", null, true); yield "</p> <div class=\"feat-quote-author\"> <p class=\"feat-quote-name\">"; // line 1272 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1272, $this->source); })()), "feat1_author", [], "any", false, false, false, 1272), "html", null, true); yield "</p> <p class=\"feat-quote-role\">"; // line 1273 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1273, $this->source); })()), "feat1_role", [], "any", false, false, false, 1273), "html", null, true); yield "</p> </div> </div> </div> </div> "; // line 1280 yield " <div class=\"feat-block reveal\"> <div class=\"feat-illu\"> <img src=\"/uploads/rh/mascotte_upload.png\" alt=\""; // line 1282 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1282, $this->source); })()), "feat2_title", [], "any", false, false, false, 1282), "html", null, true); yield "\" loading=\"lazy\"> </div> <div class=\"feat-content\"> <span class=\"feat-label\">"; // line 1285 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1285, $this->source); })()), "feat2_label", [], "any", false, false, false, 1285), "html", null, true); yield "</span> <h3 class=\"feat-title\">"; // line 1286 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1286, $this->source); })()), "feat2_title", [], "any", false, false, false, 1286), "html", null, true); yield "</h3> <div class=\"feat-desc\"> <p>"; // line 1288 yield CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1288, $this->source); })()), "feat2_p1", [], "any", false, false, false, 1288); yield "</p> <p>"; // line 1289 yield CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1289, $this->source); })()), "feat2_p2", [], "any", false, false, false, 1289); yield "</p> </div> <div class=\"feat-quote\"> <p class=\"feat-quote-text\">"; // line 1292 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1292, $this->source); })()), "feat2_quote", [], "any", false, false, false, 1292), "html", null, true); yield "</p> <div class=\"feat-quote-author\"> <p class=\"feat-quote-name\">"; // line 1294 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1294, $this->source); })()), "feat2_author", [], "any", false, false, false, 1294), "html", null, true); yield "</p> <p class=\"feat-quote-role\">"; // line 1295 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1295, $this->source); })()), "feat2_role", [], "any", false, false, false, 1295), "html", null, true); yield "</p> </div> </div> </div> </div> "; // line 1301 if ((null === CoreExtension::getAttribute($this->env, $this->source, (isset($context["app"]) || array_key_exists("app", $context) ? $context["app"] : (function () { throw new RuntimeError('Variable "app" does not exist.', 1301, $this->source); })()), "user", [], "any", false, false, false, 1301))) { // line 1302 yield " "; // line 1303 yield " <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> "; // line 1308 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1308, $this->source); })()), "signup_eyebrow", [], "any", false, false, false, 1308), "html", null, true); yield " </span> <h3 class=\"signup-title\">"; // line 1310 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1310, $this->source); })()), "signup_title", [], "any", false, false, false, 1310), "html", null, true); yield "</h3> <p class=\"signup-lede\">"; // line 1311 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1311, $this->source); })()), "signup_lede", [], "any", false, false, false, 1311), "html", null, true); yield "</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> "; // line 1315 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1315, $this->source); })()), "signup_perk1", [], "any", false, false, false, 1315), "html", null, true); yield " </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> "; // line 1319 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1319, $this->source); })()), "signup_perk2", [], "any", false, false, false, 1319), "html", null, true); yield " </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> "; // line 1323 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1323, $this->source); })()), "signup_perk3", [], "any", false, false, false, 1323), "html", null, true); yield " </span> </div> </div> "; // line 1328 if (array_key_exists("form", $context)) { // line 1329 yield " "; // line 1330 yield " "; yield $this->env->getRuntime('Symfony\Component\Form\FormRenderer')->renderBlock((isset($context["form"]) || array_key_exists("form", $context) ? $context["form"] : (function () { throw new RuntimeError('Variable "form" does not exist.', 1330, $this->source); })()), 'form_start', ["attr" => ["class" => "signup-form", "novalidate" => "novalidate"]]); yield " "; // line 1331 yield $this->env->getRuntime('Symfony\Component\Form\FormRenderer')->searchAndRenderBlock((isset($context["form"]) || array_key_exists("form", $context) ? $context["form"] : (function () { throw new RuntimeError('Variable "form" does not exist.', 1331, $this->source); })()), 'errors'); yield " "; // line 1332 $context['_parent'] = $context; $context['_seq'] = CoreExtension::ensureTraversable(CoreExtension::getAttribute($this->env, $this->source, (isset($context["app"]) || array_key_exists("app", $context) ? $context["app"] : (function () { throw new RuntimeError('Variable "app" does not exist.', 1332, $this->source); })()), "flashes", ["danger"], "method", false, false, false, 1332)); foreach ($context['_seq'] as $context["_key"] => $context["message"]) { // line 1333 yield " <p class=\"signup-form-error\">"; yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($context["message"], "html", null, true); yield "</p> "; } $_parent = $context['_parent']; unset($context['_seq'], $context['_key'], $context['message'], $context['_parent']); $context = array_intersect_key($context, $_parent) + $_parent; // line 1335 yield " <div class=\"signup-field\"> "; // line 1337 yield $this->env->getRuntime('Symfony\Component\Form\FormRenderer')->searchAndRenderBlock(CoreExtension::getAttribute($this->env, $this->source, (isset($context["form"]) || array_key_exists("form", $context) ? $context["form"] : (function () { throw new RuntimeError('Variable "form" does not exist.', 1337, $this->source); })()), "email", [], "any", false, false, false, 1337), 'widget', ["attr" => ["placeholder" => CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1337, $this->source); })()), "signup_email_ph", [], "any", false, false, false, 1337)]]); yield " </div> <div class=\"signup-row\"> <div class=\"signup-field\"> "; // line 1342 yield $this->env->getRuntime('Symfony\Component\Form\FormRenderer')->searchAndRenderBlock(CoreExtension::getAttribute($this->env, $this->source, CoreExtension::getAttribute($this->env, $this->source, (isset($context["form"]) || array_key_exists("form", $context) ? $context["form"] : (function () { throw new RuntimeError('Variable "form" does not exist.', 1342, $this->source); })()), "password", [], "any", false, false, false, 1342), "first", [], "any", false, false, false, 1342), 'widget', ["attr" => ["placeholder" => CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1342, $this->source); })()), "signup_pass_ph", [], "any", false, false, false, 1342)]]); yield " </div> <div class=\"signup-field\"> "; // line 1345 yield $this->env->getRuntime('Symfony\Component\Form\FormRenderer')->searchAndRenderBlock(CoreExtension::getAttribute($this->env, $this->source, CoreExtension::getAttribute($this->env, $this->source, (isset($context["form"]) || array_key_exists("form", $context) ? $context["form"] : (function () { throw new RuntimeError('Variable "form" does not exist.', 1345, $this->source); })()), "password", [], "any", false, false, false, 1345), "second", [], "any", false, false, false, 1345), 'widget', ["attr" => ["placeholder" => CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1345, $this->source); })()), "signup_pass2_ph", [], "any", false, false, false, 1345)]]); yield " </div> </div> <label class=\"signup-terms\"> "; // line 1350 yield $this->env->getRuntime('Symfony\Component\Form\FormRenderer')->searchAndRenderBlock(CoreExtension::getAttribute($this->env, $this->source, (isset($context["form"]) || array_key_exists("form", $context) ? $context["form"] : (function () { throw new RuntimeError('Variable "form" does not exist.', 1350, $this->source); })()), "acceptTerm", [], "any", false, false, false, 1350), 'widget'); yield " <span> "; // line 1352 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1352, $this->source); })()), "signup_terms_pre", [], "any", false, false, false, 1352), "html", null, true); yield " <a href=\""; // line 1353 if ((($tmp = (isset($context["isFR"]) || array_key_exists("isFR", $context) ? $context["isFR"] : (function () { throw new RuntimeError('Variable "isFR" does not exist.', 1353, $this->source); })())) && $tmp instanceof Markup ? (string) $tmp : $tmp)) { yield "/fr/protections-donnees-candidats"; } else { yield "/data-protection-candidates"; } yield "\" target=\"_blank\" rel=\"noopener\">"; yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1353, $this->source); })()), "signup_terms_link", [], "any", false, false, false, 1353), "html", null, true); yield "</a>. </span> </label> "; // line 1357 if (CoreExtension::getAttribute($this->env, $this->source, ($context["form"] ?? null), "recaptcha", [], "any", true, true, false, 1357)) { // line 1358 yield " <div class=\"signup-recaptcha\">"; yield $this->env->getRuntime('Symfony\Component\Form\FormRenderer')->searchAndRenderBlock(CoreExtension::getAttribute($this->env, $this->source, (isset($context["form"]) || array_key_exists("form", $context) ? $context["form"] : (function () { throw new RuntimeError('Variable "form" does not exist.', 1358, $this->source); })()), "recaptcha", [], "any", false, false, false, 1358), 'widget'); yield "</div> "; } // line 1360 yield " <button type=\"submit\" class=\"signup-submit\"> "; // line 1362 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1362, $this->source); })()), "signup_btn", [], "any", false, false, false, 1362), "html", null, true); yield " <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> "; // line 1366 yield $this->env->getRuntime('Symfony\Component\Form\FormRenderer')->searchAndRenderBlock((isset($context["form"]) || array_key_exists("form", $context) ? $context["form"] : (function () { throw new RuntimeError('Variable "form" does not exist.', 1366, $this->source); })()), 'rest'); yield " "; // line 1367 yield $this->env->getRuntime('Symfony\Component\Form\FormRenderer')->renderBlock((isset($context["form"]) || array_key_exists("form", $context) ? $context["form"] : (function () { throw new RuntimeError('Variable "form" does not exist.', 1367, $this->source); })()), 'form_end'); yield " "; } else { // line 1369 yield " "; // line 1370 yield " <form class=\"signup-form\" method=\"get\" action=\""; yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath(("whileresume_resume_" . CoreExtension::getAttribute($this->env, $this->source, CoreExtension::getAttribute($this->env, $this->source, (isset($context["app"]) || array_key_exists("app", $context) ? $context["app"] : (function () { throw new RuntimeError('Variable "app" does not exist.', 1370, $this->source); })()), "request", [], "any", false, false, false, 1370), "locale", [], "any", false, false, false, 1370))); yield "#register\"> <div class=\"signup-field\"> <input type=\"email\" name=\"email\" placeholder=\""; // line 1372 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1372, $this->source); })()), "signup_email_ph", [], "any", false, false, false, 1372), "html", null, true); yield "\" required> </div> <div class=\"signup-row\"> <div class=\"signup-field\"> <input type=\"password\" name=\"password\" placeholder=\""; // line 1377 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1377, $this->source); })()), "signup_pass_ph", [], "any", false, false, false, 1377), "html", null, true); yield "\" required minlength=\"8\"> </div> <div class=\"signup-field\"> <input type=\"password\" name=\"password_confirm\" placeholder=\""; // line 1380 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1380, $this->source); })()), "signup_pass2_ph", [], "any", false, false, false, 1380), "html", null, true); yield "\" required minlength=\"8\"> </div> </div> <label class=\"signup-terms\"> <input type=\"checkbox\" name=\"acceptTerm\" required> <span> "; // line 1387 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1387, $this->source); })()), "signup_terms_pre", [], "any", false, false, false, 1387), "html", null, true); yield " <a href=\""; // line 1388 if ((($tmp = (isset($context["isFR"]) || array_key_exists("isFR", $context) ? $context["isFR"] : (function () { throw new RuntimeError('Variable "isFR" does not exist.', 1388, $this->source); })())) && $tmp instanceof Markup ? (string) $tmp : $tmp)) { yield "/fr/protections-donnees-candidats"; } else { yield "/data-protection-candidates"; } yield "\" target=\"_blank\" rel=\"noopener\">"; yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1388, $this->source); })()), "signup_terms_link", [], "any", false, false, false, 1388), "html", null, true); yield "</a>. </span> </label> <button type=\"submit\" class=\"signup-submit\"> "; // line 1393 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1393, $this->source); })()), "signup_btn", [], "any", false, false, false, 1393), "html", null, true); yield " <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> <p class=\"signup-login\"> "; // line 1398 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1398, $this->source); })()), "signup_login_pre", [], "any", false, false, false, 1398), "html", null, true); yield " <a href=\""; // line 1399 yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("app_login"); yield "\">"; yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1399, $this->source); })()), "signup_login_link", [], "any", false, false, false, 1399), "html", null, true); yield "</a> </p> </form> "; } // line 1403 yield " </div> </div> "; } // line 1406 yield " "; // line 1408 yield " <div class=\"feat-block reveal\"> <div class=\"feat-illu\"> <img src=\"/uploads/rh/mascotte_register.png\" alt=\""; // line 1410 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1410, $this->source); })()), "feat3_title", [], "any", false, false, false, 1410), "html", null, true); yield "\" loading=\"lazy\"> </div> <div class=\"feat-content\"> <span class=\"feat-label\">"; // line 1413 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1413, $this->source); })()), "feat3_label", [], "any", false, false, false, 1413), "html", null, true); yield "</span> <h3 class=\"feat-title\">"; // line 1414 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1414, $this->source); })()), "feat3_title", [], "any", false, false, false, 1414), "html", null, true); yield "</h3> <div class=\"feat-desc\"> <p>"; // line 1416 yield CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1416, $this->source); })()), "feat3_p1", [], "any", false, false, false, 1416); yield "</p> <p>"; // line 1417 yield CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1417, $this->source); })()), "feat3_p2", [], "any", false, false, false, 1417); yield "</p> </div> <div class=\"feat-quote\"> <p class=\"feat-quote-text\">"; // line 1420 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1420, $this->source); })()), "feat3_quote", [], "any", false, false, false, 1420), "html", null, true); yield "</p> <div class=\"feat-quote-author\"> <p class=\"feat-quote-name\">"; // line 1422 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1422, $this->source); })()), "feat3_author", [], "any", false, false, false, 1422), "html", null, true); yield "</p> <p class=\"feat-quote-role\">"; // line 1423 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1423, $this->source); })()), "feat3_role", [], "any", false, false, false, 1423), "html", null, true); yield "</p> </div> </div> </div> </div> "; // line 1430 yield " <div class=\"feat-block reveal\"> <div class=\"feat-illu\"> <img src=\"/uploads/rh/mascotte_reunion.png\" alt=\""; // line 1432 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1432, $this->source); })()), "feat4_title", [], "any", false, false, false, 1432), "html", null, true); yield "\" loading=\"lazy\"> </div> <div class=\"feat-content\"> <span class=\"feat-label\">"; // line 1435 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1435, $this->source); })()), "feat4_label", [], "any", false, false, false, 1435), "html", null, true); yield "</span> <h3 class=\"feat-title\">"; // line 1436 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1436, $this->source); })()), "feat4_title", [], "any", false, false, false, 1436), "html", null, true); yield "</h3> <div class=\"feat-desc\"> <p>"; // line 1438 yield CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1438, $this->source); })()), "feat4_p1", [], "any", false, false, false, 1438); yield "</p> <p>"; // line 1439 yield CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1439, $this->source); })()), "feat4_p2", [], "any", false, false, false, 1439); yield "</p> </div> <div class=\"feat-quote\"> <p class=\"feat-quote-text\">"; // line 1442 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1442, $this->source); })()), "feat4_quote", [], "any", false, false, false, 1442), "html", null, true); yield "</p> <div class=\"feat-quote-author\"> <p class=\"feat-quote-name\">"; // line 1444 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1444, $this->source); })()), "feat4_author", [], "any", false, false, false, 1444), "html", null, true); yield "</p> <p class=\"feat-quote-role\">"; // line 1445 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1445, $this->source); })()), "feat4_role", [], "any", false, false, false, 1445), "html", null, true); yield "</p> </div> </div> </div> </div> </div> </section> "; // line 1456 yield " <section class=\"wr-section\"> <div class=\"wr-container\"> <div class=\"apps-grid\"> <a href=\"#\" 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\">"; // line 1463 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1463, $this->source); })()), "apps_ios", [], "any", false, false, false, 1463), "html", null, true); yield "</h3> <p class=\"app-card-desc\">"; // line 1464 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1464, $this->source); })()), "apps_ios_desc", [], "any", false, false, false, 1464), "html", null, true); yield "</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=\"#\" 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\">"; // line 1473 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1473, $this->source); })()), "apps_android", [], "any", false, false, false, 1473), "html", null, true); yield "</h3> <p class=\"app-card-desc\">"; // line 1474 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1474, $this->source); })()), "apps_android_desc", [], "any", false, false, false, 1474), "html", null, true); yield "</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=\""; // line 1479 yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath(("whileresume_resume_" . CoreExtension::getAttribute($this->env, $this->source, CoreExtension::getAttribute($this->env, $this->source, (isset($context["app"]) || array_key_exists("app", $context) ? $context["app"] : (function () { throw new RuntimeError('Variable "app" does not exist.', 1479, $this->source); })()), "request", [], "any", false, false, false, 1479), "locale", [], "any", false, false, false, 1479))); yield "\" 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\">"; // line 1483 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1483, $this->source); })()), "apps_web", [], "any", false, false, false, 1483), "html", null, true); yield "</h3> <p class=\"app-card-desc\">"; // line 1484 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1484, $this->source); })()), "apps_web_desc", [], "any", false, false, false, 1484), "html", null, true); yield "</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> "; // line 1495 yield " "; if ((array_key_exists("articles", $context) && (Twig\Extension\CoreExtension::length($this->env->getCharset(), (isset($context["articles"]) || array_key_exists("articles", $context) ? $context["articles"] : (function () { throw new RuntimeError('Variable "articles" does not exist.', 1495, $this->source); })())) > 0))) { // line 1496 yield " <section class=\"wr-section\"> <div class=\"wr-container\"> <div class=\"wr-section-head\"> <h2 class=\"wr-title wr-title--sm\">"; // line 1499 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1499, $this->source); })()), "articles_title", [], "any", false, false, false, 1499), "html", null, true); yield "</h2> </div> <div class=\"articles-list\"> "; // line 1503 $context['_parent'] = $context; $context['_seq'] = CoreExtension::ensureTraversable(Twig\Extension\CoreExtension::slice($this->env->getCharset(), (isset($context["articles"]) || array_key_exists("articles", $context) ? $context["articles"] : (function () { throw new RuntimeError('Variable "articles" does not exist.', 1503, $this->source); })()), 0, 6)); foreach ($context['_seq'] as $context["_key"] => $context["a"]) { // line 1504 yield " "; $context["prefix"] = ""; // line 1505 yield " "; $context["urlA"] = $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("cvs_website_article", ["slug" => CoreExtension::getAttribute($this->env, $this->source, $context["a"], "slug", [], "any", false, false, false, 1505)]); // line 1506 yield " "; if ((CoreExtension::getAttribute($this->env, $this->source, CoreExtension::getAttribute($this->env, $this->source, (isset($context["app"]) || array_key_exists("app", $context) ? $context["app"] : (function () { throw new RuntimeError('Variable "app" does not exist.', 1506, $this->source); })()), "request", [], "any", false, false, false, 1506), "locale", [], "any", false, false, false, 1506) != (isset($context["default_locale"]) || array_key_exists("default_locale", $context) ? $context["default_locale"] : (function () { throw new RuntimeError('Variable "default_locale" does not exist.', 1506, $this->source); })()))) { // line 1507 yield " "; $context["urlA"] = $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("locale_cvs_website_article", ["_locale" => CoreExtension::getAttribute($this->env, $this->source, CoreExtension::getAttribute($this->env, $this->source, (isset($context["app"]) || array_key_exists("app", $context) ? $context["app"] : (function () { throw new RuntimeError('Variable "app" does not exist.', 1507, $this->source); })()), "request", [], "any", false, false, false, 1507), "locale", [], "any", false, false, false, 1507), "slug" => CoreExtension::getAttribute($this->env, $this->source, $context["a"], "slug", [], "any", false, false, false, 1507)]); // line 1508 yield " "; $context["prefix"] = ("/" . CoreExtension::getAttribute($this->env, $this->source, CoreExtension::getAttribute($this->env, $this->source, (isset($context["app"]) || array_key_exists("app", $context) ? $context["app"] : (function () { throw new RuntimeError('Variable "app" does not exist.', 1508, $this->source); })()), "request", [], "any", false, false, false, 1508), "locale", [], "any", false, false, false, 1508)); // line 1509 yield " "; } // line 1510 yield " "; if ((($tmp = !Twig\Extension\CoreExtension::testEmpty(CoreExtension::getAttribute($this->env, $this->source, $context["a"], "pageslug3", [], "any", false, false, false, 1510))) && $tmp instanceof Markup ? (string) $tmp : $tmp)) { // line 1511 yield " "; $context["urlA"] = (((((((isset($context["prefix"]) || array_key_exists("prefix", $context) ? $context["prefix"] : (function () { throw new RuntimeError('Variable "prefix" does not exist.', 1511, $this->source); })()) . "/") . CoreExtension::getAttribute($this->env, $this->source, $context["a"], "pageslug", [], "any", false, false, false, 1511)) . "/") . CoreExtension::getAttribute($this->env, $this->source, $context["a"], "pageslug2", [], "any", false, false, false, 1511)) . "/") . CoreExtension::getAttribute($this->env, $this->source, $context["a"], "pageslug3", [], "any", false, false, false, 1511)); // line 1512 yield " "; } elseif ((($tmp = !Twig\Extension\CoreExtension::testEmpty(CoreExtension::getAttribute($this->env, $this->source, $context["a"], "pageslug2", [], "any", false, false, false, 1512))) && $tmp instanceof Markup ? (string) $tmp : $tmp)) { // line 1513 yield " "; $context["urlA"] = (((((isset($context["prefix"]) || array_key_exists("prefix", $context) ? $context["prefix"] : (function () { throw new RuntimeError('Variable "prefix" does not exist.', 1513, $this->source); })()) . "/") . CoreExtension::getAttribute($this->env, $this->source, $context["a"], "pageslug", [], "any", false, false, false, 1513)) . "/") . CoreExtension::getAttribute($this->env, $this->source, $context["a"], "pageslug2", [], "any", false, false, false, 1513)); // line 1514 yield " "; } elseif ((($tmp = !Twig\Extension\CoreExtension::testEmpty(CoreExtension::getAttribute($this->env, $this->source, $context["a"], "pageslug", [], "any", false, false, false, 1514))) && $tmp instanceof Markup ? (string) $tmp : $tmp)) { // line 1515 yield " "; $context["urlA"] = (((isset($context["prefix"]) || array_key_exists("prefix", $context) ? $context["prefix"] : (function () { throw new RuntimeError('Variable "prefix" does not exist.', 1515, $this->source); })()) . "/") . CoreExtension::getAttribute($this->env, $this->source, $context["a"], "pageslug", [], "any", false, false, false, 1515)); // line 1516 yield " "; } // line 1517 yield " <a href=\""; // line 1518 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape((isset($context["urlA"]) || array_key_exists("urlA", $context) ? $context["urlA"] : (function () { throw new RuntimeError('Variable "urlA" does not exist.', 1518, $this->source); })()), "html", null, true); yield "\" 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\">"; // line 1526 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["a"], "title", [], "any", false, false, false, 1526), "html", null, true); yield "</h3> <div class=\"wr-article-meta\"> <span>"; // line 1528 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Twig\Extension\CoreExtension']->formatDate(CoreExtension::getAttribute($this->env, $this->source, $context["a"], "publishedAt", [], "any", false, false, false, 1528), (((($tmp = (isset($context["isFR"]) || array_key_exists("isFR", $context) ? $context["isFR"] : (function () { throw new RuntimeError('Variable "isFR" does not exist.', 1528, $this->source); })())) && $tmp instanceof Markup ? (string) $tmp : $tmp)) ? ("d M Y") : ("M d, Y"))), "html", null, true); yield "</span> "; // line 1529 if (( !(null === CoreExtension::getAttribute($this->env, $this->source, $context["a"], "author", [], "any", false, false, false, 1529)) && !Twig\Extension\CoreExtension::testEmpty(CoreExtension::getAttribute($this->env, $this->source, $context["a"], "author", [], "any", false, false, false, 1529)))) { // line 1530 yield " <span class=\"wr-article-meta-sep\"></span> <span>"; // line 1531 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["a"], "author", [], "any", false, false, false, 1531), "html", null, true); yield "</span> "; } // line 1533 yield " "; if ((($tmp = !Twig\Extension\CoreExtension::testEmpty(CoreExtension::getAttribute($this->env, $this->source, $context["a"], "subtitle", [], "any", false, false, false, 1533))) && $tmp instanceof Markup ? (string) $tmp : $tmp)) { // line 1534 yield " <span class=\"wr-article-meta-sep\"></span> <span>"; // line 1535 yield (((Twig\Extension\CoreExtension::length($this->env->getCharset(), CoreExtension::getAttribute($this->env, $this->source, $context["a"], "subtitle", [], "any", false, false, false, 1535)) > 60)) ? ($this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape((Twig\Extension\CoreExtension::slice($this->env->getCharset(), CoreExtension::getAttribute($this->env, $this->source, $context["a"], "subtitle", [], "any", false, false, false, 1535), 0, 60) . "…"), "html", null, true)) : ($this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["a"], "subtitle", [], "any", false, false, false, 1535), "html", null, true))); yield "</span> "; } // line 1537 yield " </div> </div> <span class=\"wr-article-badge\">"; // line 1539 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1539, $this->source); })()), "read_article", [], "any", false, false, false, 1539), "html", null, true); yield "</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> "; } $_parent = $context['_parent']; unset($context['_seq'], $context['_key'], $context['a'], $context['_parent']); $context = array_intersect_key($context, $_parent) + $_parent; // line 1547 yield " </div> <div class=\"articles-cta\"> <a href=\""; // line 1550 if ((($tmp = (isset($context["isFR"]) || array_key_exists("isFR", $context) ? $context["isFR"] : (function () { throw new RuntimeError('Variable "isFR" does not exist.', 1550, $this->source); })())) && $tmp instanceof Markup ? (string) $tmp : $tmp)) { yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("locale_cvs_website_articles", ["_locale" => "fr"]); } else { yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("cvs_website_articles"); } yield "\"> "; // line 1551 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1551, $this->source); })()), "articles_view_all", [], "any", false, false, false, 1551), "html", null, true); yield " <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> "; } // line 1558 yield " "; // line 1560 yield " "; if ((null === CoreExtension::getAttribute($this->env, $this->source, (isset($context["app"]) || array_key_exists("app", $context) ? $context["app"] : (function () { throw new RuntimeError('Variable "app" does not exist.', 1560, $this->source); })()), "user", [], "any", false, false, false, 1560))) { // line 1561 yield " <section class=\"wr-section\"> <div class=\"wr-container\"> <div class=\"final-card\"> <h2 class=\"final-title\">"; // line 1565 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1565, $this->source); })()), "final_title", [], "any", false, false, false, 1565), "html", null, true); yield "</h2> <div class=\"final-grid\"> "; // line 1569 yield " <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\">"; // line 1577 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1577, $this->source); })()), "final_recruiter_label", [], "any", false, false, false, 1577), "html", null, true); yield "</span> </div> <h3 class=\"final-sub-title\">"; // line 1579 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1579, $this->source); })()), "final_recruiter_title", [], "any", false, false, false, 1579), "html", null, true); yield "</h3> <p class=\"final-sub-desc\">"; // line 1580 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1580, $this->source); })()), "final_recruiter_desc", [], "any", false, false, false, 1580), "html", null, true); yield "</p> <a href=\""; // line 1581 yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath(("whileresume_business_" . CoreExtension::getAttribute($this->env, $this->source, CoreExtension::getAttribute($this->env, $this->source, (isset($context["app"]) || array_key_exists("app", $context) ? $context["app"] : (function () { throw new RuntimeError('Variable "app" does not exist.', 1581, $this->source); })()), "request", [], "any", false, false, false, 1581), "locale", [], "any", false, false, false, 1581))); yield "\" class=\"final-sub-btn\"> "; // line 1582 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1582, $this->source); })()), "final_recruiter", [], "any", false, false, false, 1582), "html", null, true); yield " <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> "; // line 1588 yield " <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\">"; // line 1596 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1596, $this->source); })()), "final_candidate_label", [], "any", false, false, false, 1596), "html", null, true); yield "</span> </div> <h3 class=\"final-sub-title\">"; // line 1598 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1598, $this->source); })()), "final_candidate_title", [], "any", false, false, false, 1598), "html", null, true); yield "</h3> <p class=\"final-sub-desc\">"; // line 1599 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1599, $this->source); })()), "final_candidate_desc", [], "any", false, false, false, 1599), "html", null, true); yield "</p> <a href=\""; // line 1600 if ((CoreExtension::getAttribute($this->env, $this->source, CoreExtension::getAttribute($this->env, $this->source, (isset($context["app"]) || array_key_exists("app", $context) ? $context["app"] : (function () { throw new RuntimeError('Variable "app" does not exist.', 1600, $this->source); })()), "request", [], "any", false, false, false, 1600), "locale", [], "any", false, false, false, 1600) == "en")) { yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("whileresume_homepage"); } else { yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("locale_whileresume_homepage", ["_locale" => CoreExtension::getAttribute($this->env, $this->source, CoreExtension::getAttribute($this->env, $this->source, (isset($context["app"]) || array_key_exists("app", $context) ? $context["app"] : (function () { throw new RuntimeError('Variable "app" does not exist.', 1600, $this->source); })()), "request", [], "any", false, false, false, 1600), "locale", [], "any", false, false, false, 1600)]), "html", null, true); } yield "#register\" class=\"final-sub-btn\"> "; // line 1601 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1601, $this->source); })()), "final_candidate", [], "any", false, false, false, 1601), "html", null, true); yield " <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> "; } // line 1610 yield " </div>"; $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof); $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof); yield from []; } // line 1613 /** * @return iterable<null|scalar|\Stringable> */ public function block_footer_js(array $context, array $blocks = []): iterable { $macros = $this->macros; $__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"]; $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "footer_js")); $__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"]; $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "footer_js")); // line 1614 yield " "; yield from $this->yieldParentBlock("footer_js", $context, $blocks); yield " <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 restaurer var 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: '"; // line 1638 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1638, $this->source); })()), "search_loading", [], "any", false, false, false, 1638), "js"), "html", null, true); yield "', empty: '"; // line 1639 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1639, $this->source); })()), "search_no_results", [], "any", false, false, false, 1639), "js"), "html", null, true); yield "', emptyHint: '"; // line 1640 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1640, $this->source); })()), "search_no_results_hint", [], "any", false, false, false, 1640), "js"), "html", null, true); yield "', count: '"; // line 1641 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1641, $this->source); })()), "search_results_count", [], "any", false, false, false, 1641), "js"), "html", null, true); yield "', viewAll: '"; // line 1642 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1642, $this->source); })()), "search_view_all", [], "any", false, false, false, 1642), "js"), "html", null, true); yield "', view: '"; // line 1643 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["t"]) || array_key_exists("t", $context) ? $context["t"] : (function () { throw new RuntimeError('Variable "t" does not exist.', 1643, $this->source); })()), "search_view_offer", [], "any", false, false, false, 1643), "js"), "html", null, true); yield "' }; 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ète input.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(); } }); // Clear clearBtn.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 recherche document.querySelectorAll('.hero-popular-pill').forEach(function(pill){ pill.addEventListener('click', function(){ var keyword = pill.dataset.keyword || pill.dataset.label || ''; if (!keyword) return; // Visuel actif document.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éler els.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>"; $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof); $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof); yield from []; } /** * @codeCoverageIgnore */ public function getTemplateName(): string { return "application/whileresume/website/candidates/homepage.html.twig"; } /** * @codeCoverageIgnore */ public function isTraitable(): bool { return false; } /** * @codeCoverageIgnore */ public function getDebugInfo(): array { return array ( 2481 => 1643, 2477 => 1642, 2473 => 1641, 2469 => 1640, 2465 => 1639, 2461 => 1638, 2433 => 1614, 2420 => 1613, 2408 => 1610, 2396 => 1601, 2388 => 1600, 2384 => 1599, 2380 => 1598, 2375 => 1596, 2365 => 1588, 2357 => 1582, 2353 => 1581, 2349 => 1580, 2345 => 1579, 2340 => 1577, 2330 => 1569, 2324 => 1565, 2318 => 1561, 2315 => 1560, 2312 => 1558, 2302 => 1551, 2294 => 1550, 2289 => 1547, 2275 => 1539, 2271 => 1537, 2266 => 1535, 2263 => 1534, 2260 => 1533, 2255 => 1531, 2252 => 1530, 2250 => 1529, 2246 => 1528, 2241 => 1526, 2230 => 1518, 2227 => 1517, 2224 => 1516, 2221 => 1515, 2218 => 1514, 2215 => 1513, 2212 => 1512, 2209 => 1511, 2206 => 1510, 2203 => 1509, 2200 => 1508, 2197 => 1507, 2194 => 1506, 2191 => 1505, 2188 => 1504, 2184 => 1503, 2177 => 1499, 2172 => 1496, 2169 => 1495, 2156 => 1484, 2152 => 1483, 2145 => 1479, 2137 => 1474, 2133 => 1473, 2121 => 1464, 2117 => 1463, 2108 => 1456, 2095 => 1445, 2091 => 1444, 2086 => 1442, 2080 => 1439, 2076 => 1438, 2071 => 1436, 2067 => 1435, 2061 => 1432, 2057 => 1430, 2048 => 1423, 2044 => 1422, 2039 => 1420, 2033 => 1417, 2029 => 1416, 2024 => 1414, 2020 => 1413, 2014 => 1410, 2010 => 1408, 2007 => 1406, 2002 => 1403, 1993 => 1399, 1989 => 1398, 1981 => 1393, 1967 => 1388, 1963 => 1387, 1953 => 1380, 1947 => 1377, 1939 => 1372, 1933 => 1370, 1931 => 1369, 1926 => 1367, 1922 => 1366, 1915 => 1362, 1911 => 1360, 1905 => 1358, 1903 => 1357, 1890 => 1353, 1886 => 1352, 1881 => 1350, 1873 => 1345, 1867 => 1342, 1859 => 1337, 1855 => 1335, 1846 => 1333, 1842 => 1332, 1838 => 1331, 1833 => 1330, 1831 => 1329, 1829 => 1328, 1821 => 1323, 1814 => 1319, 1807 => 1315, 1800 => 1311, 1796 => 1310, 1791 => 1308, 1784 => 1303, 1782 => 1302, 1780 => 1301, 1771 => 1295, 1767 => 1294, 1762 => 1292, 1756 => 1289, 1752 => 1288, 1747 => 1286, 1743 => 1285, 1737 => 1282, 1733 => 1280, 1724 => 1273, 1720 => 1272, 1715 => 1270, 1709 => 1267, 1705 => 1266, 1700 => 1264, 1696 => 1263, 1690 => 1260, 1686 => 1258, 1681 => 1254, 1672 => 1247, 1668 => 1246, 1663 => 1244, 1655 => 1239, 1651 => 1238, 1646 => 1236, 1638 => 1231, 1634 => 1230, 1629 => 1228, 1620 => 1222, 1615 => 1219, 1610 => 1215, 1603 => 1211, 1592 => 1207, 1587 => 1205, 1580 => 1200, 1577 => 1199, 1572 => 1195, 1569 => 1194, 1563 => 1193, 1560 => 1192, 1554 => 1191, 1551 => 1190, 1549 => 1189, 1541 => 1183, 1536 => 1181, 1533 => 1180, 1530 => 1179, 1521 => 1177, 1518 => 1176, 1515 => 1175, 1509 => 1174, 1504 => 1172, 1500 => 1170, 1494 => 1168, 1488 => 1166, 1486 => 1165, 1476 => 1163, 1473 => 1162, 1468 => 1161, 1465 => 1160, 1460 => 1159, 1458 => 1158, 1447 => 1150, 1439 => 1149, 1432 => 1147, 1426 => 1143, 1423 => 1142, 1417 => 1141, 1412 => 1140, 1407 => 1139, 1404 => 1138, 1401 => 1137, 1398 => 1136, 1386 => 1126, 1382 => 1125, 1377 => 1123, 1362 => 1115, 1354 => 1114, 1350 => 1112, 1347 => 1110, 1343 => 1108, 1333 => 1105, 1327 => 1104, 1323 => 1103, 1319 => 1102, 1315 => 1100, 1311 => 1099, 1307 => 1098, 1304 => 1097, 1301 => 1096, 1295 => 1092, 1291 => 1091, 1287 => 1090, 1283 => 1089, 1279 => 1088, 1270 => 1084, 1264 => 1083, 1257 => 1079, 1251 => 1075, 1247 => 1072, 1234 => 1071, 191 => 39, 178 => 38, 155 => 36, 132 => 35, 109 => 34, 86 => 33, 75 => 1, 69 => 29, 65 => 28, 63 => 27, 61 => 4, 59 => 3, 46 => 1,); } public function getSourceContext(): Source { return new Source("{% 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 popularJobs, remplacée par les résultats AJAX #} {% set _heroCount = 0 %} {% set _heroTotal = 0 %} {% if popularJobs is defined %} {% for block in popularJobs %} {% if block.jobs is defined %}{% set _heroTotal = _heroTotal + block.jobs|length %}{% endif %} {% endfor %} {% endif %} <div class=\"hero-default-jobs\" id=\"wrHeroJobsList\"> <div class=\"hero-jobs-header\" id=\"wrHeroJobsHeader\"> <span class=\"hero-jobs-count\" id=\"wrHeroJobsCount\"> <strong>{{ _heroTotal ?: (totalJobs ?? '') }}</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 popularJobs is defined and popularJobs|length > 0 %} {% for block in popularJobs %} {% if block.jobs is defined and block.jobs|length > 0 %} {% for j in block.jobs %} {% 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 %} {% 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) }} {% else %} {# Cas 2 : pas de form Symfony injecté — on redirige vers la page inscription qui a le vrai form #} <form class=\"signup-form\" method=\"get\" action=\"{{ path('whileresume_resume_' ~ app.request.locale) }}#register\"> <div class=\"signup-field\"> <input type=\"email\" name=\"email\" placeholder=\"{{ t.signup_email_ph }}\" required> </div> <div class=\"signup-row\"> <div class=\"signup-field\"> <input type=\"password\" name=\"password\" placeholder=\"{{ t.signup_pass_ph }}\" required minlength=\"8\"> </div> <div class=\"signup-field\"> <input type=\"password\" name=\"password_confirm\" placeholder=\"{{ t.signup_pass2_ph }}\" required minlength=\"8\"> </div> </div> <label class=\"signup-terms\"> <input type=\"checkbox\" name=\"acceptTerm\" required> <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> <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> <p class=\"signup-login\"> {{ t.signup_login_pre }} <a href=\"{{ path('app_login') }}\">{{ t.signup_login_link }}</a> </p> </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=\"#\" 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=\"#\" 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=\"{{ path('whileresume_resume_' ~ app.request.locale) }}\" 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\"> <span>{{ a.publishedAt|date(isFR ? 'd M Y' : 'M d, Y') }}</span> {% if a.author is not null and a.author is not empty %} <span class=\"wr-article-meta-sep\"></span> <span>{{ a.author }}</span> {% endif %} {% if a.subtitle is not empty %} <span class=\"wr-article-meta-sep\"></span> <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 restaurer var 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ète input.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(); } }); // Clear clearBtn.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 recherche document.querySelectorAll('.hero-popular-pill').forEach(function(pill){ pill.addEventListener('click', function(){ var keyword = pill.dataset.keyword || pill.dataset.label || ''; if (!keyword) return; // Visuel actif document.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éler els.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 %}", "application/whileresume/website/candidates/homepage.html.twig", "/var/www/vhosts/mirtillostudio.fr/b1.mirtillostudio.fr/version-1/templates/application/whileresume/website/candidates/homepage.html.twig"); }}