var/cache/dev/twig/8c/8c8c749e0a519967a8952cda54ec8420.php line 50

Open in your IDE?
  1. <?php
  2. use Twig\Environment;
  3. use Twig\Error\LoaderError;
  4. use Twig\Error\RuntimeError;
  5. use Twig\Extension\CoreExtension;
  6. use Twig\Extension\SandboxExtension;
  7. use Twig\Markup;
  8. use Twig\Sandbox\SecurityError;
  9. use Twig\Sandbox\SecurityNotAllowedTagError;
  10. use Twig\Sandbox\SecurityNotAllowedFilterError;
  11. use Twig\Sandbox\SecurityNotAllowedFunctionError;
  12. use Twig\Sandbox\SecurityNotAllowedTestError;
  13. use Twig\Source;
  14. use Twig\Template;
  15. use Twig\TemplateWrapper;
  16. /* application/whileresume/website/candidates/homepage.html.twig */
  17. class __TwigTemplate_414916e6795e23529c8811970090b92e extends Template
  18. {
  19. private Source $source;
  20. /**
  21. * @var array<string, Template>
  22. */
  23. private array $macros = [];
  24. public function __construct(Environment $env)
  25. {
  26. parent::__construct($env);
  27. $this->source = $this->getSourceContext();
  28. $this->blocks = [
  29. 'title' => [$this, 'block_title'],
  30. 'description' => [$this, 'block_description'],
  31. 'robots' => [$this, 'block_robots'],
  32. 'canonical' => [$this, 'block_canonical'],
  33. 'css' => [$this, 'block_css'],
  34. 'body' => [$this, 'block_body'],
  35. 'footer_js' => [$this, 'block_footer_js'],
  36. ];
  37. }
  38. protected function doGetParent(array $context): bool|string|Template|TemplateWrapper
  39. {
  40. // line 1
  41. return "application/whileresume/website/layout-social.html.twig";
  42. }
  43. protected function doDisplay(array $context, array $blocks = []): iterable
  44. {
  45. $macros = $this->macros;
  46. $__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  47. $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "template", "application/whileresume/website/candidates/homepage.html.twig"));
  48. $__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  49. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "template", "application/whileresume/website/candidates/homepage.html.twig"));
  50. // line 3
  51. $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");
  52. // line 5
  53. $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"];
  54. // line 29
  55. $context["t"] = [];
  56. // line 30
  57. $context['_parent'] = $context;
  58. $context['_seq'] = CoreExtension::ensureTraversable((isset($context["_keys"]) || array_key_exists("_keys", $context) ? $context["_keys"] : (function () { throw new RuntimeError('Variable "_keys" does not exist.', 30, $this->source); })()));
  59. foreach ($context['_seq'] as $context["_key"] => $context["k"]) {
  60. // line 31
  61. yield " ";
  62. $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.', 31, $this->source); })()), [ (string)$context["k"] => $this->extensions['Symfony\Bridge\Twig\Extension\TranslationExtension']->trans(("homepage." . $context["k"]), [], "whr-public")]);
  63. }
  64. $_parent = $context['_parent'];
  65. unset($context['_seq'], $context['_key'], $context['k'], $context['_parent']);
  66. $context = array_intersect_key($context, $_parent);
  67. $context += $_parent;
  68. // line 1
  69. $this->parent = $this->load("application/whileresume/website/layout-social.html.twig", 1);
  70. yield from $this->parent->unwrap()->yield($context, array_merge($this->blocks, $blocks));
  71. $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  72. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  73. }
  74. // line 35
  75. /**
  76. * @return iterable<null|scalar|\Stringable>
  77. */
  78. public function block_title(array $context, array $blocks = []): iterable
  79. {
  80. $macros = $this->macros;
  81. $__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  82. $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "title"));
  83. $__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  84. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "title"));
  85. yield (string) $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); })()), "shortTitle", [], "any", false, false, false, 35), "html", null, true);
  86. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  87. $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  88. yield from [];
  89. }
  90. // line 36
  91. /**
  92. * @return iterable<null|scalar|\Stringable>
  93. */
  94. public function block_description(array $context, array $blocks = []): iterable
  95. {
  96. $macros = $this->macros;
  97. $__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  98. $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "description"));
  99. $__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  100. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "description"));
  101. yield (string) $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.', 36, $this->source); })()), "shortDescription", [], "any", false, false, false, 36), "html", null, true);
  102. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  103. $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  104. yield from [];
  105. }
  106. // line 37
  107. /**
  108. * @return iterable<null|scalar|\Stringable>
  109. */
  110. public function block_robots(array $context, array $blocks = []): iterable
  111. {
  112. $macros = $this->macros;
  113. $__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  114. $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "robots"));
  115. $__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  116. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "robots"));
  117. yield (string) $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.', 37, $this->source); })()), "robots", [], "any", false, false, false, 37), "html", null, true);
  118. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  119. $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  120. yield from [];
  121. }
  122. // line 38
  123. /**
  124. * @return iterable<null|scalar|\Stringable>
  125. */
  126. public function block_canonical(array $context, array $blocks = []): iterable
  127. {
  128. $macros = $this->macros;
  129. $__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  130. $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "canonical"));
  131. $__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  132. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "canonical"));
  133. yield from $this->load("/vitrine/lexend/components/languages/canonical_classic.html.twig", 38)->unwrap()->yield($context);
  134. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  135. $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  136. yield from [];
  137. }
  138. // line 40
  139. /**
  140. * @return iterable<null|scalar|\Stringable>
  141. */
  142. public function block_css(array $context, array $blocks = []): iterable
  143. {
  144. $macros = $this->macros;
  145. $__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  146. $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "css"));
  147. $__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  148. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "css"));
  149. // line 41
  150. yield " ";
  151. yield from $this->yieldParentBlock("css", $context, $blocks);
  152. yield "
  153. <style>
  154. :root{
  155. --wr-bg:#FBFCFE;
  156. --wr-bg-2:#F4F6FB;
  157. --wr-card:#FFFFFF;
  158. --wr-violet:#8A63C1;
  159. --wr-violet-2:#A98AD3;
  160. --wr-violet-soft:#F2EDFA;
  161. --wr-violet-softer:#F8F4FD;
  162. --wr-violet-dark:#6B47A6;
  163. --wr-ink:#1E1B2E;
  164. --wr-ink-2:#374151;
  165. --wr-muted:#6B7280;
  166. --wr-muted-2:#9CA3AF;
  167. --wr-line:#EEF1F7;
  168. --wr-line-2:#E5E9F0;
  169. --wr-shadow:0 1px 2px rgba(30,27,46,.04),0 4px 16px rgba(30,27,46,.04);
  170. --wr-shadow-hover:0 4px 8px rgba(138,99,192,.08),0 12px 32px rgba(138,99,192,.1);
  171. /* Accents colorés pour les logos d\x27offres (lettres) */
  172. --wr-acc-yellow:#FEF3C7; --wr-acc-yellow-fg:#B45309;
  173. --wr-acc-green:#D1FAE5; --wr-acc-green-fg:#047857;
  174. --wr-acc-pink:#FCE7F3; --wr-acc-pink-fg:#BE185D;
  175. --wr-acc-blue:#DBEAFE; --wr-acc-blue-fg:#1E40AF;
  176. --wr-acc-orange:#FED7AA; --wr-acc-orange-fg:#C2410C;
  177. --wr-acc-violet:#EDE9FE; --wr-acc-violet-fg:#6D28D9;
  178. --wr-acc-cyan:#CFFAFE; --wr-acc-cyan-fg:#0E7490;
  179. }
  180. /* ═══════════════════════════════════════════════════════════════════
  181. PLEINE LARGEUR — On retire la réservation d\x27espace de la sidebar droite
  182. ═══════════════════════════════════════════════════════════════════ */
  183. body .main-content.right-chat-active{padding-right:0!important}
  184. body .main-content{padding-right:0!important}
  185. body .right-chat{display:none!important}
  186. body .middle-sidebar-bottom .middle-sidebar-left{padding-right:0!important;max-width:none!important;width:100%!important}
  187. body .middle-sidebar-bottom{max-width:none!important}
  188. .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}
  189. @media(max-width:991px){.wr{margin:0 -15px}}
  190. .wr *{box-sizing:border-box}
  191. .wr a{color:inherit;text-decoration:none}
  192. /* ═══════════════════════════════════════════════════════════════════
  193. SECTIONS GENERIC — Fond UNIFIÉ partout (pas d\x27alternance)
  194. ═══════════════════════════════════════════════════════════════════ */
  195. .wr-section{padding:80px 32px;background:var(--wr-bg);position:relative}
  196. .wr-section--tight{padding:48px 32px}
  197. @media(max-width:768px){.wr-section{padding:56px 20px}.wr-section--tight{padding:36px 20px}}
  198. /* Filet décoratif au lieu d\x27un changement de couleur */
  199. .wr-section + .wr-section::before{
  200. content:\"\";
  201. position:absolute;top:0;left:50%;transform:translateX(-50%);
  202. width:80px;height:1px;
  203. background:linear-gradient(90deg,transparent,var(--wr-line-2),transparent);
  204. }
  205. .wr-container{max-width:1200px;margin:0 auto;position:relative}
  206. /* ═══ Eyebrow ═══ */
  207. .wr-eyebrow{
  208. display:inline-flex;align-items:center;gap:8px;
  209. padding:6px 14px;border-radius:100px;
  210. background:var(--wr-violet-soft);
  211. color:var(--wr-violet-dark);
  212. font-size:11.5px;font-weight:600;
  213. text-transform:uppercase;letter-spacing:.12em;
  214. margin-bottom:22px;
  215. }
  216. .wr-eyebrow-dot{width:6px;height:6px;border-radius:50%;background:var(--wr-violet);animation:wrPulse 2.4s ease-in-out infinite}
  217. @keyframes wrPulse{0%,100%{opacity:.5;transform:scale(1)}50%{opacity:1;transform:scale(1.3)}}
  218. /* ═══ Titres ═══ */
  219. .wr-title{
  220. font-family:inherit;
  221. font-weight:700;
  222. font-size:28px;line-height:1.15;letter-spacing:-0.025em;
  223. color:var(--wr-ink);
  224. margin:0 auto 16px;
  225. max-width:1200px;
  226. }
  227. @media(min-width:768px){.wr-title{font-size:34px}}
  228. @media(min-width:1024px){.wr-title{font-size:40px}}
  229. .wr-title--sm{font-size:24px}
  230. @media(min-width:768px){.wr-title--sm{font-size:30px}}
  231. .wr-title em{font-style:normal;font-weight:700;color:var(--wr-violet)}
  232. .wr-lede{
  233. font-size:17px;line-height:1.55;font-weight:400;
  234. color:var(--wr-ink-2);
  235. margin:0 auto;max-width:680px;
  236. }
  237. .wr-section-head{text-align:center;margin-bottom:56px}
  238. /* ═══════════════════════════════════════════════════════════════════
  239. HERO — Style soft, recherche dashboard, boutons pleins
  240. ═══════════════════════════════════════════════════════════════════ */
  241. @keyframes wrFadeUp{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}
  242. @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)}}
  243. /* ═══ Reveal au scroll (Intersection Observer ajoute .is-revealed) ═══ */
  244. .reveal{opacity:0;transform:translateY(24px);transition:opacity .8s cubic-bezier(.2,.7,.2,1),transform .8s cubic-bezier(.2,.7,.2,1)}
  245. .reveal.is-revealed{opacity:1;transform:translateY(0)}
  246. .reveal--left{transform:translateX(-32px) translateY(0)}
  247. .reveal--left.is-revealed{transform:translateX(0)}
  248. .reveal--right{transform:translateX(32px) translateY(0)}
  249. .reveal--right.is-revealed{transform:translateX(0)}
  250. .reveal--scale{transform:scale(.96);opacity:0}
  251. .reveal--scale.is-revealed{transform:scale(1);opacity:1}
  252. .reveal[data-reveal-delay=\"1\"]{transition-delay:.08s}
  253. .reveal[data-reveal-delay=\"2\"]{transition-delay:.16s}
  254. .reveal[data-reveal-delay=\"3\"]{transition-delay:.24s}
  255. .reveal[data-reveal-delay=\"4\"]{transition-delay:.32s}
  256. @media(prefers-reduced-motion:reduce){.reveal{opacity:1!important;transform:none!important;transition:none!important}}
  257. .hero{
  258. position:relative;
  259. background:var(--wr-bg);
  260. padding:24px 32px 0;
  261. overflow:hidden;
  262. }
  263. @media(max-width:768px){.hero{padding:18px 18px 0}}
  264. /* Décor : 2 blobs très flous violet pâle */
  265. .hero::before{
  266. content:\"\";position:absolute;
  267. top:-260px;right:-180px;width:560px;height:560px;
  268. background:radial-gradient(circle,rgba(138,99,192,.14) 0%,transparent 65%);
  269. pointer-events:none;filter:blur(50px);
  270. }
  271. .hero::after{
  272. content:\"\";position:absolute;
  273. top:120px;left:-180px;width:480px;height:480px;
  274. background:radial-gradient(circle,rgba(138,99,192,.09) 0%,transparent 65%);
  275. pointer-events:none;filter:blur(50px);
  276. }
  277. .hero-inner{position:relative;z-index:2;max-width:1200px;margin:0 auto;text-align:center}
  278. /* ═══ Eyebrow ═══ */
  279. .hero-badge{
  280. display:inline-flex;align-items:center;gap:8px;
  281. padding:7px 16px;border-radius:100px;
  282. background:var(--wr-violet-soft);
  283. color:var(--wr-violet-dark);
  284. font-size:12px;font-weight:600;
  285. text-transform:uppercase;letter-spacing:.1em;
  286. margin-bottom:10px;
  287. opacity:0;transform:translateY(8px);
  288. animation:wrFadeUp .8s ease forwards;
  289. }
  290. .hero-badge-dot{width:6px;height:6px;border-radius:50%;background:var(--wr-violet);animation:wrPulse2 2s ease infinite}
  291. /* ═══ Titre — 57px desktop, plein largeur conteneur ═══ */
  292. .hero-title{
  293. font-weight:700;
  294. font-size:24px;line-height:1.05;letter-spacing:-0.04em;
  295. color:var(--wr-ink);
  296. margin:0 auto 12px;
  297. width:100%;max-width:1200px;
  298. opacity:0;transform:translateY(12px);
  299. animation:wrFadeUp .9s cubic-bezier(.2,.7,.2,1) .15s forwards;
  300. }
  301. @media(min-width:768px){.hero-title{font-size:40px;letter-spacing:-0.045em}}
  302. @media(min-width:1100px){.hero-title{font-size:57px;letter-spacing:-0.045em}}
  303. .hero-title-accent{
  304. color:var(--wr-violet);
  305. }
  306. .hero-lede{
  307. font-size:15px;line-height:1.5;color:var(--wr-ink-2);font-weight:400;
  308. margin:0 auto 16px;max-width:680px;
  309. opacity:0;animation:wrFadeUp .9s ease .4s forwards;
  310. }
  311. @media(min-width:768px){.hero-lede{font-size:17px}}
  312. .hero-lede-accent{color:var(--wr-violet);font-weight:600}
  313. /* ═══ Recherche — pleine largeur (alignée sur la liste 1200px) ═══ */
  314. .hero-search-wrap{
  315. max-width:1200px;margin:0 auto 12px;
  316. opacity:0;animation:wrFadeUp .9s ease .55s forwards;
  317. position:relative;z-index:5;
  318. }
  319. .hero-search{
  320. background:var(--wr-card);
  321. border-radius:14px;
  322. box-shadow:0 0 20px 0 rgba(0,0,0,0.05),0 16px 40px rgba(138,99,192,.06);
  323. padding:10px;
  324. position:relative;
  325. }
  326. .hero-search-inner{
  327. display:flex;align-items:center;gap:10px;
  328. padding:10px 14px;border-radius:10px;
  329. background:#F9FAFB;border:1px solid #E5E7EB;
  330. transition:border-color .2s,background .2s;
  331. }
  332. .hero-search-inner:focus-within{
  333. border-color:rgba(138,99,192,.4);
  334. background:#fff;
  335. }
  336. .hero-search-icon{color:var(--wr-muted-2);display:flex;flex-shrink:0}
  337. .hero-search-icon svg{width:16px;height:16px}
  338. .hero-search-input{
  339. flex:1;border:0;outline:0;background:transparent;
  340. font-size:14.5px;font-family:inherit;color:var(--wr-ink);
  341. padding:6px 0;min-width:0;
  342. }
  343. .hero-search-input::placeholder{color:var(--wr-muted-2)}
  344. .hero-search-clear{
  345. background:none;border:0;color:var(--wr-muted-2);cursor:pointer;
  346. padding:4px;display:none;font-family:inherit;
  347. border-radius:6px;transition:background .15s,color .15s;
  348. }
  349. .hero-search-clear:hover{background:var(--wr-violet-soft);color:var(--wr-violet)}
  350. .hero-search-clear.is-visible{display:flex;align-items:center}
  351. .hero-search-clear svg{width:14px;height:14px}
  352. .hero-search-kbd{
  353. display:none;align-items:center;
  354. padding:3px 8px;background:#fff;border:1px solid #E5E7EB;border-radius:6px;
  355. font-size:10.5px;font-weight:600;color:var(--wr-muted);
  356. font-family:inherit;letter-spacing:.02em;white-space:nowrap;flex-shrink:0;
  357. }
  358. .hero-search-inner:focus-within .hero-search-kbd{display:inline-flex}
  359. /* ═══ États de la liste de jobs (header, empty, loading) ═══ */
  360. .hero-jobs-header{
  361. display:flex;align-items:center;justify-content:space-between;gap:10px;
  362. padding:14px 22px 10px;
  363. border-bottom:1px solid var(--wr-line);
  364. margin-bottom:4px;
  365. }
  366. @media(max-width:540px){.hero-jobs-header{padding:12px 16px 8px}}
  367. .hero-jobs-count{
  368. font-size:11.5px;color:var(--wr-muted);
  369. text-transform:uppercase;letter-spacing:.08em;font-weight:600;
  370. }
  371. .hero-jobs-count strong{color:var(--wr-violet);font-weight:800;font-size:13px;margin-right:4px}
  372. .hero-jobs-link{
  373. font-size:11px;font-weight:700;
  374. color:var(--wr-violet);
  375. text-transform:uppercase;letter-spacing:.08em;
  376. text-decoration:none;
  377. display:inline-flex;align-items:center;gap:5px;
  378. transition:color .15s,transform .15s;
  379. }
  380. .hero-jobs-link:hover{color:var(--wr-violet-dark);text-decoration:none;transform:translateX(2px)}
  381. .hero-jobs-link svg{width:11px;height:11px}
  382. .hero-jobs-empty{text-align:center;padding:48px 20px;color:var(--wr-muted)}
  383. .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}
  384. .hero-jobs-empty-icon svg{width:22px;height:22px}
  385. .hero-jobs-empty-title{font-weight:600;font-size:14px;color:var(--wr-ink);margin:0 0 4px}
  386. .hero-jobs-empty-hint{font-size:13px;margin:0;color:var(--wr-muted)}
  387. .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}
  388. .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}
  389. @keyframes wrSpin{to{transform:rotate(360deg)}}
  390. /* ═══ Pills \"Populaire\" sous la recherche ═══ */
  391. .hero-popular{
  392. display:flex;align-items:center;justify-content:center;gap:6px;flex-wrap:wrap;
  393. margin-bottom:18px;
  394. opacity:0;animation:wrFadeUp .9s ease .7s forwards;
  395. }
  396. .hero-popular-label{
  397. font-size:11px;font-weight:600;color:var(--wr-muted);
  398. text-transform:uppercase;letter-spacing:.06em;
  399. margin-right:4px;
  400. }
  401. .hero-popular-pill{
  402. display:inline-flex;align-items:center;gap:5px;
  403. padding:6px 12px;border-radius:100px;
  404. background:var(--wr-violet-soft);
  405. color:var(--wr-violet);
  406. font-size:12.5px;font-weight:500;font-family:inherit;
  407. text-decoration:none;cursor:pointer;
  408. border:1px solid transparent;
  409. transition:background .15s,border-color .15s,transform .15s,color .15s;
  410. }
  411. .hero-popular-pill:hover{
  412. background:#EDE9FE;
  413. border-color:rgba(138,99,192,.2);
  414. transform:translateY(-1px);
  415. color:var(--wr-violet);
  416. text-decoration:none;
  417. }
  418. .hero-popular-pill.is-active{
  419. background:var(--wr-violet);color:#fff;border-color:var(--wr-violet);
  420. }
  421. .hero-popular-pill.is-active:hover{background:var(--wr-violet-dark);color:#fff}
  422. .hero-popular-pill-icon{font-size:13px;line-height:1}
  423. /* ═══ CTA hero (boutons inscription + connexion pour anonymes) ═══ */
  424. .hero-cta{
  425. display:flex;align-items:center;justify-content:center;gap:12px;flex-wrap:wrap;
  426. margin:24px 0 8px;
  427. opacity:0;animation:wrFadeUp .9s ease 1.1s forwards;
  428. }
  429. .hero-cta-btn,
  430. .hero-cta-btn:link,
  431. .hero-cta-btn:visited,
  432. .hero-cta-btn:hover,
  433. .hero-cta-btn:focus,
  434. .hero-cta-btn:active{
  435. color:#fff !important;
  436. text-decoration:none !important;
  437. }
  438. .hero-cta-btn{
  439. display:inline-flex;align-items:center;gap:8px;
  440. padding:11px 20px;border-radius:11px;
  441. font-size:13.5px;font-weight:700;font-family:inherit;
  442. line-height:1;
  443. background:var(--wr-violet);border:1px solid var(--wr-violet);
  444. box-shadow:0 4px 14px rgba(138,99,193,.32);
  445. transition:background .15s,border-color .15s,transform .15s,box-shadow .15s;
  446. }
  447. .hero-cta-btn:hover{
  448. background:var(--wr-violet-dark);border-color:var(--wr-violet-dark);
  449. transform:translateY(-2px);
  450. box-shadow:0 6px 20px rgba(138,99,193,.4);
  451. }
  452. .hero-cta-btn svg{width:15px;height:15px;flex-shrink:0;stroke:#fff !important;color:#fff !important}
  453. .hero-cta-btn span{color:#fff !important}
  454. @media(max-width:540px){.hero-cta{flex-direction:column;align-items:stretch}.hero-cta-btn{justify-content:center}}
  455. /* ═══ Boutons stores — VIOLET PLEIN BLANC ═══ */
  456. .hero-stores{
  457. display:flex;align-items:center;justify-content:center;gap:12px;flex-wrap:wrap;
  458. margin-bottom:48px;
  459. opacity:0;animation:wrFadeUp .9s ease .85s forwards;
  460. }
  461. .hero-store-btn{
  462. display:inline-flex;align-items:center;gap:10px;
  463. padding:13px 24px;border-radius:12px;
  464. background:var(--wr-violet);
  465. border:0;
  466. color:#fff;
  467. font-size:14px;font-weight:600;
  468. text-decoration:none;
  469. transition:background .15s,transform .15s,box-shadow .15s;
  470. box-shadow:0 4px 12px rgba(138,99,192,.3);
  471. }
  472. .hero-store-btn:hover{
  473. background:var(--wr-violet-dark);
  474. color:#fff;
  475. transform:translateY(-2px);
  476. box-shadow:0 8px 22px rgba(138,99,192,.4);
  477. text-decoration:none;
  478. }
  479. .hero-store-btn-icon{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px}
  480. .hero-store-btn-icon svg{width:18px;height:18px}
  481. @media(max-width:540px){.hero-stores{flex-direction:column;align-items:stretch;gap:10px}.hero-store-btn{justify-content:center}}
  482. /* ═══════════════════════════════════════════════════════════════════
  483. LISTE PAR DÉFAUT SOUS LE HERO (offres récentes)
  484. ═══════════════════════════════════════════════════════════════════ */
  485. .hero-default-jobs{
  486. position:relative;z-index:2;
  487. max-width:1200px;margin:0 auto;
  488. background:var(--wr-card);
  489. border:1px solid var(--wr-line);
  490. border-radius:18px;
  491. padding:8px 0;
  492. box-shadow:var(--wr-shadow);
  493. opacity:0;animation:wrFadeUp .9s ease 1s forwards;
  494. text-align:left;
  495. }
  496. .hero-default-job{
  497. display:flex;align-items:center;gap:16px;
  498. padding:14px 22px;
  499. text-decoration:none;color:inherit;
  500. border-bottom:1px solid var(--wr-line);
  501. transition:background .15s;
  502. }
  503. .hero-default-job:last-child{border-bottom:0}
  504. .hero-default-job:hover{background:var(--wr-violet-softer);text-decoration:none;color:inherit}
  505. .hero-default-job-logo{
  506. width:42px;height:42px;border-radius:11px;flex-shrink:0;
  507. display:flex;align-items:center;justify-content:center;
  508. font-weight:700;font-size:16px;overflow:hidden;
  509. }
  510. .hero-default-job-logo img{width:100%;height:100%;object-fit:cover}
  511. /* 7 variantes de couleurs cyclées par index */
  512. .hero-default-job:nth-child(7n+1) .hero-default-job-logo{background:var(--wr-acc-yellow);color:var(--wr-acc-yellow-fg)}
  513. .hero-default-job:nth-child(7n+2) .hero-default-job-logo{background:var(--wr-acc-green);color:var(--wr-acc-green-fg)}
  514. .hero-default-job:nth-child(7n+3) .hero-default-job-logo{background:var(--wr-acc-pink);color:var(--wr-acc-pink-fg)}
  515. .hero-default-job:nth-child(7n+4) .hero-default-job-logo{background:var(--wr-acc-blue);color:var(--wr-acc-blue-fg)}
  516. .hero-default-job:nth-child(7n+5) .hero-default-job-logo{background:var(--wr-acc-orange);color:var(--wr-acc-orange-fg)}
  517. .hero-default-job:nth-child(7n+6) .hero-default-job-logo{background:var(--wr-acc-violet);color:var(--wr-acc-violet-fg)}
  518. .hero-default-job:nth-child(7n+7) .hero-default-job-logo{background:var(--wr-acc-cyan);color:var(--wr-acc-cyan-fg)}
  519. .hero-default-job-info{flex:1;min-width:0}
  520. .hero-default-job-title{
  521. font-weight:600;font-size:14.5px;color:var(--wr-ink);
  522. margin:0 0 2px;line-height:1.3;
  523. white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
  524. }
  525. .hero-default-job-meta{
  526. font-size:12.5px;color:var(--wr-muted);margin:0;
  527. white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
  528. display:flex;align-items:center;gap:8px;
  529. }
  530. .hero-default-job-meta-sep{display:inline-block;width:3px;height:3px;border-radius:50%;background:var(--wr-muted-2);flex-shrink:0}
  531. .hero-default-job-arrow{flex-shrink:0;color:var(--wr-muted-2);transition:color .15s,transform .15s}
  532. .hero-default-job-arrow svg{width:15px;height:15px}
  533. .hero-default-job:hover .hero-default-job-arrow{color:var(--wr-violet);transform:translateX(3px)}
  534. @media(max-width:768px){
  535. .hero-default-jobs{margin:0 -18px;border-radius:14px}
  536. .hero-default-job{padding:12px 16px;gap:12px}
  537. .hero-default-job-logo{width:36px;height:36px;font-size:13px}
  538. .hero-default-job-title{font-size:13.5px}
  539. .hero-default-job-meta{font-size:11.5px;gap:6px;flex-wrap:wrap;white-space:normal}
  540. }
  541. /* ═══════════════════════════════════════════════════════════════════
  542. SECTION : 3 PARCOURS
  543. ═══════════════════════════════════════════════════════════════════ */
  544. .paths-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}
  545. @media(max-width:991px){.paths-grid{grid-template-columns:1fr;gap:14px}}
  546. .path-card{
  547. position:relative;
  548. background:var(--wr-card);
  549. border:1px solid var(--wr-line);
  550. border-radius:20px;padding:28px;
  551. display:flex;flex-direction:column;
  552. transition:transform .25s ease,box-shadow .25s ease,border-color .25s ease;
  553. box-shadow:var(--wr-shadow);
  554. }
  555. .path-card:hover{transform:translateY(-4px);box-shadow:var(--wr-shadow-hover);border-color:var(--wr-violet-2)}
  556. .path-card-illu{
  557. width:64px;height:64px;border-radius:16px;
  558. background:var(--wr-violet-soft);color:var(--wr-violet);
  559. display:flex;align-items:center;justify-content:center;
  560. margin-bottom:22px;
  561. }
  562. .path-card-illu svg{width:30px;height:30px}
  563. .path-card-label{
  564. display:inline-block;
  565. font-size:11px;font-weight:600;
  566. color:var(--wr-violet-dark);text-transform:uppercase;letter-spacing:.1em;
  567. margin-bottom:10px;align-self:flex-start;
  568. }
  569. .path-card-title{
  570. font-weight:500;font-size:22px;line-height:1.25;letter-spacing:-0.015em;
  571. color:var(--wr-ink);margin:0 0 10px;
  572. }
  573. .path-card-desc{
  574. font-size:14px;line-height:1.6;color:var(--wr-muted);
  575. margin:0 0 22px;flex:1;
  576. }
  577. .path-card-cta{
  578. display:inline-flex;align-items:center;justify-content:center;gap:6px;
  579. background:var(--wr-violet);color:#fff;
  580. padding:12px 18px;border-radius:11px;
  581. font-size:13px;font-weight:600;
  582. align-self:stretch;
  583. transition:background .15s,transform .15s,box-shadow .15s;
  584. box-shadow:0 2px 8px rgba(138,99,192,.2);
  585. }
  586. .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)}
  587. .path-card-cta svg{width:13px;height:13px;transition:transform .15s}
  588. .path-card-cta:hover svg{transform:translateX(3px)}
  589. /* ═══════════════════════════════════════════════════════════════════
  590. COMMENT ÇA MARCHE — Card crème englobante avec 3 sous-cards
  591. ═══════════════════════════════════════════════════════════════════ */
  592. .how-card{
  593. background:#F4ECE1;
  594. border-radius:24px;
  595. padding:32px 24px;
  596. display:grid;grid-template-columns:repeat(3,1fr);gap:24px;
  597. position:relative;
  598. }
  599. @media(max-width:991px){.how-card{grid-template-columns:1fr;gap:8px;padding:24px 16px}}
  600. @media(min-width:992px){
  601. /* Séparateurs verticaux entre les 3 cellules */
  602. .how-card .how-step + .how-step{border-left:1px solid rgba(28,25,22,.08)}
  603. }
  604. .how-step{
  605. display:flex;flex-direction:column;align-items:center;text-align:center;
  606. padding:16px 20px;
  607. gap:16px;
  608. }
  609. .how-step-illu{
  610. width:100%;max-width:280px;aspect-ratio:1/1;
  611. border-radius:16px;
  612. background:rgba(255,255,255,.5);
  613. display:flex;align-items:center;justify-content:center;
  614. margin-bottom:4px;
  615. overflow:hidden;
  616. }
  617. .how-step-illu img{width:100%;height:100%;object-fit:contain;display:block}
  618. .how-step-illu svg{width:55%;height:55%;opacity:.85}
  619. .how-step-title{
  620. font-weight:700;font-size:18px;line-height:1.3;letter-spacing:-0.01em;
  621. color:var(--wr-ink);margin:0;
  622. }
  623. @media(min-width:992px){.how-step-title{font-size:20px}}
  624. .how-step-desc{
  625. font-size:14px;line-height:1.55;color:var(--wr-ink-2);
  626. margin:0;max-width:320px;
  627. }
  628. /* ═══════════════════════════════════════════════════════════════════
  629. FEATURES 01-04 — Splits alternés image/texte avec témoignages
  630. ═══════════════════════════════════════════════════════════════════ */
  631. .feat-block{
  632. display:grid;grid-template-columns:1fr 1fr;gap:48px;align-items:center;
  633. margin-bottom:64px;
  634. }
  635. .feat-block:last-child{margin-bottom:0}
  636. @media(max-width:991px){
  637. .feat-block{grid-template-columns:1fr;gap:24px;margin-bottom:48px}
  638. }
  639. /* Alterner : 01 illu droite, 02 illu gauche, 03 illu droite, 04 illu gauche */
  640. .feat-block:nth-child(odd) .feat-illu{order:2}
  641. .feat-block:nth-child(odd) .feat-content{order:1}
  642. .feat-block:nth-child(even) .feat-illu{order:1}
  643. .feat-block:nth-child(even) .feat-content{order:2}
  644. @media(max-width:991px){
  645. .feat-block .feat-illu{order:1}
  646. .feat-block .feat-content{order:2}
  647. }
  648. .feat-illu{
  649. background:#F5EDE3;
  650. border-radius:20px;
  651. aspect-ratio:1/1;
  652. display:flex;align-items:center;justify-content:center;
  653. color:var(--wr-violet);
  654. overflow:hidden;
  655. position:relative;
  656. }
  657. .feat-illu img{width:100%;height:100%;object-fit:contain;display:block}
  658. .feat-illu svg{width:50%;height:50%;opacity:.85}
  659. .feat-content{display:flex;flex-direction:column;gap:18px}
  660. .feat-label{
  661. font-size:30px;font-weight:800;
  662. color:var(--wr-ink);
  663. letter-spacing:-0.02em;
  664. margin:0;line-height:1;
  665. }
  666. .feat-title{
  667. font-weight:700;font-size:24px;line-height:1.2;letter-spacing:-0.02em;
  668. color:var(--wr-ink);margin:0;
  669. }
  670. @media(min-width:768px){.feat-title{font-size:28px}}
  671. @media(min-width:1100px){.feat-title{font-size:30px}}
  672. .feat-desc{
  673. display:flex;flex-direction:column;gap:14px;
  674. }
  675. .feat-desc p{
  676. font-size:15px;line-height:1.6;color:var(--wr-ink-2);
  677. margin:0;opacity:.85;
  678. }
  679. @media(min-width:1100px){.feat-desc p{font-size:16px}}
  680. .feat-desc strong{color:var(--wr-ink);font-weight:700;opacity:1}
  681. .feat-quote{
  682. background:var(--wr-card);
  683. border:1px solid var(--wr-line);
  684. border-radius:14px;
  685. padding:18px 20px;
  686. display:flex;flex-direction:column;gap:10px;
  687. margin-top:8px;
  688. }
  689. .feat-quote-text{
  690. font-size:14px;line-height:1.55;color:var(--wr-ink-2);
  691. margin:0;font-style:italic;
  692. }
  693. .feat-quote-author{
  694. display:flex;flex-direction:column;
  695. }
  696. .feat-quote-name{font-size:13px;font-weight:700;color:var(--wr-ink);margin:0}
  697. .feat-quote-role{font-size:12px;color:var(--wr-muted);margin:0}
  698. /* ═══════════════════════════════════════════════════════════════════
  699. MATCH
  700. ═══════════════════════════════════════════════════════════════════ */
  701. .match-grid{display:grid;grid-template-columns:1.1fr .9fr;gap:60px;align-items:center}
  702. @media(max-width:991px){.match-grid{grid-template-columns:1fr;gap:40px}}
  703. .match-text .wr-title{margin-left:0;text-align:left}
  704. .match-text .wr-lede{margin-left:0;text-align:left}
  705. .match-text .wr-eyebrow{margin-bottom:20px}
  706. .match-features{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-top:32px}
  707. @media(max-width:540px){.match-features{grid-template-columns:1fr}}
  708. .match-feature{
  709. background:var(--wr-card);border:1px solid var(--wr-line);
  710. border-radius:14px;padding:18px;
  711. transition:transform .15s,border-color .15s,box-shadow .15s;
  712. }
  713. .match-feature:hover{transform:translateY(-2px);border-color:var(--wr-violet-soft);box-shadow:var(--wr-shadow)}
  714. .match-feature-icon{
  715. width:34px;height:34px;border-radius:10px;
  716. background:var(--wr-violet-soft);color:var(--wr-violet);
  717. display:inline-flex;align-items:center;justify-content:center;margin-bottom:12px;
  718. }
  719. .match-feature-icon svg{width:16px;height:16px}
  720. .match-feature-title{font-weight:600;font-size:14px;line-height:1.3;color:var(--wr-ink);margin:0 0 5px}
  721. .match-feature-desc{font-size:12.5px;line-height:1.5;color:var(--wr-muted);margin:0}
  722. .match-visual{position:relative;display:flex;justify-content:center;align-items:center;padding:40px 0}
  723. .match-stack{position:relative;width:100%;max-width:340px;height:340px}
  724. .match-stack-card{
  725. position:absolute;
  726. background:var(--wr-card);border:1px solid var(--wr-line);
  727. border-radius:16px;padding:14px;
  728. display:flex;align-items:center;gap:12px;
  729. box-shadow:var(--wr-shadow);width:100%;
  730. transition:transform .3s ease,box-shadow .3s ease;
  731. cursor:pointer;
  732. }
  733. .match-stack-card:hover{
  734. transform:translateY(-4px) rotate(0deg)!important;
  735. box-shadow:0 20px 50px rgba(138,99,192,.22)!important;
  736. z-index:10!important;
  737. }
  738. .match-stack-card:nth-child(1){top:0;transform:rotate(-6deg) translateX(-10px);z-index:1;animation:wrFloat1 6s ease-in-out infinite}
  739. .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}
  740. .match-stack-card:nth-child(3){top:156px;transform:rotate(-3deg) translateX(8px);z-index:2;animation:wrFloat3 6s ease-in-out -4s infinite}
  741. .match-stack-card:nth-child(4){top:234px;left:20px;transform:rotate(4deg);z-index:1;animation:wrFloat4 6s ease-in-out -1s infinite}
  742. @keyframes wrFloat1{0%,100%{transform:rotate(-6deg) translate(-10px,0)}50%{transform:rotate(-6deg) translate(-10px,-8px)}}
  743. @keyframes wrFloat2{0%,100%{transform:rotate(2deg) translate(0,0)}50%{transform:rotate(2deg) translate(0,-6px)}}
  744. @keyframes wrFloat3{0%,100%{transform:rotate(-3deg) translate(8px,0)}50%{transform:rotate(-3deg) translate(8px,-7px)}}
  745. @keyframes wrFloat4{0%,100%{transform:rotate(4deg) translate(0,0)}50%{transform:rotate(4deg) translate(0,-5px)}}
  746. .match-stack-logo{
  747. width:38px;height:38px;border-radius:10px;
  748. background:var(--wr-violet-soft);color:var(--wr-violet);
  749. display:flex;align-items:center;justify-content:center;
  750. font-weight:700;font-size:14px;flex-shrink:0;
  751. }
  752. .match-stack-info{flex:1;min-width:0}
  753. .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}
  754. .match-stack-meta{font-size:11px;color:var(--wr-muted);margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  755. .match-stack-heart{
  756. width:28px;height:28px;border-radius:50%;
  757. background:#FEE2E2;color:#EF4444;
  758. display:flex;align-items:center;justify-content:center;flex-shrink:0;
  759. animation:wrHeartbeat 1.6s ease-in-out infinite;
  760. }
  761. .match-stack-card:nth-child(1) .match-stack-heart{animation-delay:0s}
  762. .match-stack-card:nth-child(2) .match-stack-heart{animation-delay:.4s}
  763. .match-stack-card:nth-child(3) .match-stack-heart{animation-delay:.8s}
  764. .match-stack-card:nth-child(4) .match-stack-heart{animation-delay:1.2s}
  765. .match-stack-heart svg{width:13px;height:13px;fill:currentColor}
  766. @keyframes wrHeartbeat{
  767. 0%,100%{transform:scale(1);box-shadow:0 0 0 0 rgba(239,68,68,.4)}
  768. 10%{transform:scale(1.18);box-shadow:0 0 0 0 rgba(239,68,68,.4)}
  769. 20%{transform:scale(1)}
  770. 30%{transform:scale(1.12)}
  771. 40%{transform:scale(1);box-shadow:0 0 0 10px rgba(239,68,68,0)}
  772. 100%{box-shadow:0 0 0 0 rgba(239,68,68,0)}
  773. }
  774. /* ═══════════════════════════════════════════════════════════════════
  775. SIGNUP FORM (entre feat 02 et 03)
  776. ═══════════════════════════════════════════════════════════════════ */
  777. .signup-card{
  778. position:relative;
  779. max-width:980px;margin:64px auto;
  780. background:linear-gradient(135deg, #FFFFFF 0%, #FAF7FF 100%);
  781. border:1px solid var(--wr-line);
  782. border-radius:32px;
  783. padding:48px 40px;
  784. box-shadow:0 4px 12px rgba(30,27,46,.04), 0 24px 64px rgba(138,99,192,.1);
  785. overflow:hidden;
  786. }
  787. @media(max-width:768px){.signup-card{padding:32px 22px;border-radius:24px;margin:48px auto}}
  788. /* Décor : 2 blobs violet pâle dans les coins */
  789. .signup-card::before{
  790. content:\"\";position:absolute;
  791. top:-120px;right:-120px;width:340px;height:340px;
  792. background:radial-gradient(circle,rgba(138,99,192,.12) 0%,transparent 65%);
  793. pointer-events:none;filter:blur(40px);
  794. }
  795. .signup-card::after{
  796. content:\"\";position:absolute;
  797. bottom:-100px;left:-80px;width:280px;height:280px;
  798. background:radial-gradient(circle,rgba(138,99,192,.08) 0%,transparent 65%);
  799. pointer-events:none;filter:blur(40px);
  800. }
  801. .signup-inner{position:relative;z-index:2;display:grid;grid-template-columns:1fr 1.2fr;gap:48px;align-items:center}
  802. @media(max-width:880px){.signup-inner{grid-template-columns:1fr;gap:28px}}
  803. .signup-text{display:flex;flex-direction:column;gap:14px}
  804. .signup-eyebrow{
  805. display:inline-flex;align-items:center;gap:8px;
  806. padding:7px 14px;border-radius:100px;
  807. background:var(--wr-violet-soft);color:var(--wr-violet-dark);
  808. font-size:11.5px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;
  809. align-self:flex-start;
  810. }
  811. .signup-title{
  812. font-weight:700;font-size:28px;line-height:1.15;letter-spacing:-0.02em;
  813. color:var(--wr-ink);margin:0;
  814. }
  815. @media(min-width:768px){.signup-title{font-size:34px}}
  816. .signup-lede{font-size:15px;line-height:1.55;color:var(--wr-ink-2);margin:0;opacity:.85}
  817. .signup-perks{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px}
  818. .signup-perk{
  819. display:inline-flex;align-items:center;gap:6px;
  820. padding:6px 12px;border-radius:100px;
  821. background:var(--wr-card);border:1px solid var(--wr-line-2);
  822. font-size:12px;font-weight:600;color:var(--wr-ink-2);
  823. }
  824. .signup-perk svg{width:13px;height:13px;color:#10B981;stroke-width:3;flex-shrink:0}
  825. .signup-form{
  826. background:var(--wr-card);
  827. border:1px solid var(--wr-line);
  828. border-radius:20px;
  829. padding:24px;
  830. display:flex;flex-direction:column;gap:12px;
  831. box-shadow:0 1px 2px rgba(30,27,46,.03);
  832. }
  833. .signup-form-error{
  834. background:#FEF2F2;border:1px solid #FECACA;
  835. color:#991B1B;
  836. border-radius:12px;
  837. padding:10px 14px;
  838. font-size:13px;line-height:1.45;
  839. margin:0;
  840. }
  841. .signup-row{display:grid;grid-template-columns:1fr 1fr;gap:10px}
  842. @media(max-width:540px){.signup-row{grid-template-columns:1fr}}
  843. .signup-field{display:flex;flex-direction:column;gap:0}
  844. .signup-card .signup-form input[type=\"email\"],
  845. .signup-card .signup-form input[type=\"password\"],
  846. .signup-card .signup-form input[type=\"text\"]{
  847. width:100%;
  848. padding:13px 14px;
  849. border:1px solid var(--wr-line-2);border-radius:11px;
  850. background:#FAFBFD;
  851. font-size:14px;font-family:inherit;color:var(--wr-ink);
  852. outline:none;
  853. transition:border-color .15s,background .15s,box-shadow .15s;
  854. box-sizing:border-box;
  855. }
  856. .signup-card .signup-form input[type=\"email\"]:focus,
  857. .signup-card .signup-form input[type=\"password\"]:focus,
  858. .signup-card .signup-form input[type=\"text\"]:focus{
  859. border-color:var(--wr-violet);background:#fff;
  860. box-shadow:0 0 0 3px rgba(138,99,192,.12);
  861. }
  862. .signup-card .signup-form input::placeholder{color:var(--wr-muted-2)}
  863. .signup-terms{
  864. display:flex;align-items:flex-start;gap:10px;
  865. font-size:12.5px;line-height:1.45;color:var(--wr-muted);
  866. margin:4px 0 0;
  867. }
  868. .signup-card .signup-form input[type=\"checkbox\"]{
  869. width:16px;height:16px;flex-shrink:0;margin-top:2px;accent-color:var(--wr-violet);cursor:pointer;
  870. }
  871. .signup-terms a{color:var(--wr-violet);font-weight:600;text-decoration:underline}
  872. .signup-terms a:hover{color:var(--wr-violet-dark)}
  873. .signup-recaptcha{margin:4px 0 0}
  874. .signup-recaptcha > div{max-width:100%}
  875. .signup-submit{
  876. width:100%;
  877. padding:14px 22px;border-radius:12px;
  878. background:var(--wr-violet);color:#fff;border:0;
  879. font-size:14.5px;font-weight:700;font-family:inherit;
  880. cursor:pointer;
  881. display:inline-flex;align-items:center;justify-content:center;gap:8px;
  882. box-shadow:0 4px 14px rgba(138,99,192,.32);
  883. transition:background .15s,transform .15s,box-shadow .15s;
  884. margin-top:6px;
  885. }
  886. .signup-submit:hover{background:var(--wr-violet-dark);transform:translateY(-1px);box-shadow:0 6px 20px rgba(138,99,192,.4)}
  887. .signup-submit svg{width:14px;height:14px;transition:transform .15s}
  888. .signup-submit:hover svg{transform:translateX(3px)}
  889. .signup-login{
  890. text-align:center;font-size:13px;color:var(--wr-muted);margin:6px 0 0;
  891. }
  892. .signup-login a{color:var(--wr-violet);font-weight:600;text-decoration:none}
  893. .signup-login a:hover{color:var(--wr-violet-dark);text-decoration:underline}
  894. /* ═══════════════════════════════════════════════════════════════════
  895. APPS
  896. ═══════════════════════════════════════════════════════════════════ */
  897. .apps-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}
  898. @media(max-width:768px){.apps-grid{grid-template-columns:1fr}}
  899. .app-card{
  900. background:var(--wr-card);border:1px solid var(--wr-line);
  901. border-radius:18px;padding:24px;
  902. display:flex;flex-direction:column;align-items:flex-start;
  903. transition:transform .2s,border-color .2s,box-shadow .2s;
  904. }
  905. .app-card:hover{transform:translateY(-3px);border-color:var(--wr-violet-2);box-shadow:var(--wr-shadow-hover);color:inherit;text-decoration:none}
  906. .app-card-icon{
  907. width:48px;height:48px;border-radius:14px;
  908. background:var(--wr-violet-soft);color:var(--wr-violet);
  909. display:inline-flex;align-items:center;justify-content:center;
  910. margin-bottom:18px;
  911. }
  912. .app-card-icon svg{width:22px;height:22px}
  913. .app-card-name{font-weight:500;font-size:18px;letter-spacing:-0.01em;color:var(--wr-ink);margin:0 0 6px}
  914. .app-card-desc{font-size:13px;line-height:1.5;color:var(--wr-muted);margin:0 0 16px;flex:1}
  915. .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}
  916. .app-card-cta svg{width:11px;height:11px;transition:transform .15s}
  917. .app-card:hover .app-card-cta svg{transform:translateX(3px)}
  918. /* ═══════════════════════════════════════════════════════════════════
  919. KEYWORDS
  920. ═══════════════════════════════════════════════════════════════════ */
  921. .keywords-list{display:flex;flex-wrap:wrap;gap:8px;justify-content:center;max-width:1200px;margin:0 auto}
  922. .keyword-pill{
  923. display:inline-flex;align-items:center;gap:8px;
  924. padding:9px 16px;border-radius:100px;
  925. background:var(--wr-card);border:1px solid var(--wr-line-2);
  926. color:var(--wr-ink-2);
  927. font-size:13.5px;font-weight:500;
  928. transition:transform .15s,border-color .15s,background .15s,color .15s,box-shadow .15s;
  929. }
  930. .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)}
  931. .keyword-pill-icon{font-size:14px;line-height:1}
  932. /* ═══════════════════════════════════════════════════════════════════
  933. OFFRES POPULAIRES
  934. ═══════════════════════════════════════════════════════════════════ */
  935. .listings-block{margin-bottom:32px}
  936. .listings-block:last-child{margin-bottom:0}
  937. .listings-block-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:14px;flex-wrap:wrap}
  938. .listings-block-title{
  939. display:inline-flex;align-items:center;gap:10px;
  940. font-weight:500;font-size:18px;letter-spacing:-0.005em;
  941. color:var(--wr-ink);margin:0;
  942. }
  943. .listings-block-icon{font-size:20px;line-height:1}
  944. .listings-block-link{
  945. display:inline-flex;align-items:center;gap:4px;
  946. padding:6px 12px;border-radius:100px;
  947. font-size:12px;font-weight:600;
  948. color:var(--wr-violet);
  949. text-transform:uppercase;letter-spacing:.06em;
  950. border:1px solid var(--wr-violet-soft);
  951. background:var(--wr-card);
  952. transition:background .15s,border-color .15s,transform .15s;
  953. }
  954. .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)}
  955. .listings-block-link svg{width:11px;height:11px}
  956. .listings-jobs{display:grid;grid-template-columns:1fr 1fr;gap:10px}
  957. @media(max-width:768px){.listings-jobs{grid-template-columns:1fr}}
  958. .listing-job{
  959. display:flex;align-items:center;gap:14px;
  960. background:var(--wr-card);border:1px solid var(--wr-line);
  961. border-radius:14px;padding:12px;
  962. transition:transform .15s,border-color .15s,box-shadow .15s;
  963. }
  964. .listing-job:hover{transform:translateY(-2px);border-color:var(--wr-violet-soft);box-shadow:var(--wr-shadow);color:inherit;text-decoration:none}
  965. .listing-job-logo{
  966. width:42px;height:42px;border-radius:11px;flex-shrink:0;
  967. background:var(--wr-violet-soft);color:var(--wr-violet);
  968. display:flex;align-items:center;justify-content:center;
  969. font-weight:700;font-size:14px;overflow:hidden;
  970. }
  971. .listing-job-logo img{width:100%;height:100%;object-fit:cover}
  972. .listing-job-info{flex:1;min-width:0}
  973. .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}
  974. .listing-job-meta{font-size:11.5px;color:var(--wr-muted);margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  975. .listing-job-arrow{flex-shrink:0;color:var(--wr-muted-2);transition:color .15s,transform .15s}
  976. .listing-job-arrow svg{width:14px;height:14px}
  977. .listing-job:hover .listing-job-arrow{color:var(--wr-violet);transform:translateX(2px)}
  978. /* ═══════════════════════════════════════════════════════════════════
  979. ARTICLES — Liste sans miniatures (style identique aux jobs-card)
  980. ═══════════════════════════════════════════════════════════════════ */
  981. .articles-list{display:flex;flex-direction:column;gap:10px;max-width:1200px;margin:0 auto}
  982. .wr-article{
  983. background:var(--wr-card);border-radius:14px;padding:14px;
  984. box-shadow:0 0 16px 0 rgba(0,0,0,0.04);
  985. display:flex;align-items:center;gap:14px;
  986. text-decoration:none;color:inherit;
  987. transition:transform .15s,box-shadow .2s;
  988. }
  989. .wr-article:hover{
  990. transform:translateY(-1px);
  991. box-shadow:0 4px 20px rgba(138,99,192,.1);
  992. color:inherit;text-decoration:none;
  993. }
  994. .wr-article-logo{
  995. width:50px;height:50px;border-radius:12px;flex-shrink:0;
  996. background:linear-gradient(135deg,#EDE9FE,#DDD6FE);
  997. display:flex;align-items:center;justify-content:center;
  998. color:var(--wr-violet);overflow:hidden;
  999. }
  1000. .wr-article-logo svg{width:24px;height:24px;opacity:.9}
  1001. .wr-article-info{flex:1;min-width:0}
  1002. .wr-article-title{
  1003. font-size:14px;font-weight:700;color:var(--wr-ink);
  1004. line-height:1.3;margin:0 0 4px;
  1005. white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
  1006. }
  1007. .wr-article-meta{
  1008. font-size:12px;color:var(--wr-muted);
  1009. white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
  1010. display:flex;align-items:center;gap:8px;margin:0;
  1011. }
  1012. .wr-article-meta-sep{display:inline-block;width:3px;height:3px;border-radius:50%;background:#D1D5DB;flex-shrink:0}
  1013. .wr-article-badge{
  1014. font-size:11px;font-weight:600;
  1015. color:var(--wr-violet);background:var(--wr-violet-soft);
  1016. padding:3px 9px;border-radius:100px;
  1017. white-space:nowrap;flex-shrink:0;
  1018. text-transform:uppercase;letter-spacing:.04em;
  1019. }
  1020. .wr-article-arrow{flex-shrink:0;color:var(--wr-muted-2);transition:color .15s,transform .15s}
  1021. .wr-article:hover .wr-article-arrow{color:var(--wr-violet);transform:translateX(2px)}
  1022. .wr-article-arrow svg{width:18px;height:18px}
  1023. @media(max-width:540px){
  1024. .wr-article{padding:12px;gap:10px}
  1025. .wr-article-logo{width:42px;height:42px}
  1026. .wr-article-logo svg{width:20px;height:20px}
  1027. .wr-article-title{font-size:13px}
  1028. .wr-article-meta{font-size:11px;gap:6px;flex-wrap:wrap;white-space:normal}
  1029. .wr-article-badge{display:none}
  1030. }
  1031. .articles-cta{text-align:center;margin-top:36px}
  1032. .articles-cta a{
  1033. display:inline-flex;align-items:center;gap:8px;
  1034. padding:12px 22px;border-radius:11px;
  1035. background:var(--wr-violet);color:#fff;
  1036. font-size:13px;font-weight:600;
  1037. text-decoration:none;
  1038. box-shadow:0 4px 12px rgba(138,99,192,.3);
  1039. transition:background .15s,transform .15s,box-shadow .15s;
  1040. }
  1041. .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}
  1042. .articles-cta svg{width:12px;height:12px;transition:transform .15s}
  1043. .articles-cta a:hover svg{transform:translateX(3px)}
  1044. /* ═══════════════════════════════════════════════════════════════════
  1045. CTA FINAL — Card violet plein avec eyebrow + 2 sous-cards
  1046. ═══════════════════════════════════════════════════════════════════ */
  1047. .final-card{
  1048. position:relative;
  1049. background:linear-gradient(135deg,#8A63C0 0%,#9D7BCC 100%);
  1050. border-radius:28px;
  1051. padding:48px 40px;
  1052. color:#fff;overflow:hidden;
  1053. box-shadow:0 20px 60px -12px rgba(138,99,192,.4);
  1054. }
  1055. @media(max-width:768px){.final-card{padding:32px 22px;border-radius:22px}}
  1056. .final-eyebrow{
  1057. display:inline-flex;align-items:center;gap:8px;
  1058. padding:8px 18px;border-radius:100px;
  1059. background:rgba(255,255,255,.2);
  1060. color:#fff;
  1061. font-size:12px;font-weight:700;
  1062. text-transform:uppercase;letter-spacing:.12em;
  1063. margin-bottom:20px;
  1064. backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);
  1065. }
  1066. .final-eyebrow svg{width:13px;height:13px;fill:currentColor}
  1067. .final-title{
  1068. font-weight:800;font-size:28px;line-height:1.15;letter-spacing:-0.02em;
  1069. color:#fff;margin:0 0 36px;
  1070. max-width:780px;
  1071. }
  1072. @media(min-width:768px){.final-title{font-size:38px}}
  1073. /* Grille 2 sous-cards */
  1074. .final-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px}
  1075. @media(max-width:768px){.final-grid{grid-template-columns:1fr;gap:14px}}
  1076. .final-sub{
  1077. background:#fff;
  1078. border-radius:18px;
  1079. padding:28px;
  1080. display:flex;flex-direction:column;
  1081. }
  1082. @media(max-width:768px){.final-sub{padding:22px}}
  1083. .final-sub-head{display:flex;align-items:center;gap:14px;margin-bottom:18px}
  1084. .final-sub-icon{
  1085. width:44px;height:44px;border-radius:11px;
  1086. background:var(--wr-violet-soft);color:var(--wr-violet);
  1087. display:flex;align-items:center;justify-content:center;flex-shrink:0;
  1088. }
  1089. .final-sub-icon svg{width:22px;height:22px}
  1090. .final-sub-label{
  1091. font-size:12.5px;font-weight:700;
  1092. color:var(--wr-violet);
  1093. text-transform:uppercase;letter-spacing:.1em;
  1094. }
  1095. .final-sub-title{
  1096. font-weight:800;font-size:18px;line-height:1.3;letter-spacing:-0.01em;
  1097. color:var(--wr-ink);margin:0 0 10px;
  1098. }
  1099. .final-sub-desc{
  1100. font-size:14px;line-height:1.55;color:var(--wr-muted);
  1101. margin:0 0 24px;flex:1;
  1102. }
  1103. .final-sub-btn{
  1104. display:flex;align-items:center;justify-content:center;gap:8px;
  1105. background:var(--wr-violet);color:#fff;
  1106. padding:14px 18px;border-radius:11px;
  1107. font-size:14px;font-weight:700;
  1108. text-decoration:none;
  1109. transition:background .15s,transform .15s,box-shadow .15s;
  1110. box-shadow:0 4px 12px rgba(138,99,192,.3);
  1111. }
  1112. .final-sub-btn:hover{
  1113. background:var(--wr-violet-dark);color:#fff;
  1114. transform:translateY(-2px);
  1115. box-shadow:0 6px 18px rgba(138,99,192,.4);
  1116. text-decoration:none;
  1117. }
  1118. .final-sub-btn svg{width:14px;height:14px;transition:transform .15s}
  1119. .final-sub-btn:hover svg{transform:translateX(3px)}
  1120. </style>
  1121. ";
  1122. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  1123. $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  1124. yield from [];
  1125. }
  1126. // line 1073
  1127. /**
  1128. * @return iterable<null|scalar|\Stringable>
  1129. */
  1130. public function block_body(array $context, array $blocks = []): iterable
  1131. {
  1132. $macros = $this->macros;
  1133. $__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  1134. $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "body"));
  1135. $__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  1136. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "body"));
  1137. // line 1074
  1138. yield " <div class=\"wr\">
  1139. ";
  1140. // line 1077
  1141. yield " <section class=\"hero\">
  1142. <div class=\"hero-inner\">
  1143. <span class=\"hero-badge\">
  1144. <span class=\"hero-badge-dot\"></span>
  1145. ";
  1146. // line 1081
  1147. yield (string) $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.', 1081, $this->source); })()), "hero_eyebrow", [], "any", false, false, false, 1081), "html", null, true);
  1148. yield "
  1149. </span>
  1150. <h1 class=\"hero-title\">
  1151. <span class=\"hero-title-accent\">";
  1152. // line 1085
  1153. yield (string) $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.', 1085, $this->source); })()), "hero_title_accent", [], "any", false, false, false, 1085), "html", null, true);
  1154. yield "</span> ";
  1155. yield (string) $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.', 1085, $this->source); })()), "hero_title_post", [], "any", false, false, false, 1085), "html", null, true);
  1156. yield "<br>
  1157. <span class=\"hero-title-accent\">";
  1158. // line 1086
  1159. yield (string) $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.', 1086, $this->source); })()), "hero_title_accent2", [], "any", false, false, false, 1086), "html", null, true);
  1160. yield "</span> ";
  1161. yield (string) $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.', 1086, $this->source); })()), "hero_title_2", [], "any", false, false, false, 1086), "html", null, true);
  1162. yield "
  1163. </h1>
  1164. <p class=\"hero-lede\">
  1165. ";
  1166. // line 1090
  1167. yield (string) $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_pre", [], "any", false, false, false, 1090), "html", null, true);
  1168. yield "
  1169. <span class=\"hero-lede-accent\">";
  1170. // line 1091
  1171. yield (string) $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_brand", [], "any", false, false, false, 1091), "html", null, true);
  1172. yield "</span>
  1173. ";
  1174. // line 1092
  1175. yield (string) $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_mid", [], "any", false, false, false, 1092), "html", null, true);
  1176. yield "
  1177. <span class=\"hero-lede-accent\">";
  1178. // line 1093
  1179. yield (string) $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.', 1093, $this->source); })()), "hero_lede_word", [], "any", false, false, false, 1093), "html", null, true);
  1180. yield "</span>
  1181. ";
  1182. // line 1094
  1183. yield (string) $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.', 1094, $this->source); })()), "hero_lede_post", [], "any", false, false, false, 1094), "html", null, true);
  1184. yield "
  1185. </p>
  1186. ";
  1187. // line 1098
  1188. yield " ";
  1189. 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.', 1098, $this->source); })())) > 0))) {
  1190. // line 1099
  1191. yield " <div class=\"hero-popular\">
  1192. <span class=\"hero-popular-label\">";
  1193. // line 1100
  1194. yield (string) $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.', 1100, $this->source); })()), "hero_popular_label", [], "any", false, false, false, 1100), "html", null, true);
  1195. yield "</span>
  1196. ";
  1197. // line 1101
  1198. $context['_parent'] = $context;
  1199. $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.', 1101, $this->source); })()), 0, 5));
  1200. foreach ($context['_seq'] as $context["_key"] => $context["kw"]) {
  1201. // line 1102
  1202. yield " <button type=\"button\"
  1203. class=\"hero-popular-pill\"
  1204. data-keyword=\"";
  1205. // line 1104
  1206. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["kw"], "keyword", [], "any", false, false, false, 1104), "html", null, true);
  1207. yield "\"
  1208. data-label=\"";
  1209. // line 1105
  1210. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["kw"], "label", [], "any", false, false, false, 1105), "html", null, true);
  1211. yield "\">
  1212. ";
  1213. // line 1106
  1214. if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, $context["kw"], "icon", [], "any", false, false, false, 1106)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
  1215. yield "<span class=\"hero-popular-pill-icon\">";
  1216. yield (string) CoreExtension::getAttribute($this->env, $this->source, $context["kw"], "icon", [], "any", false, false, false, 1106);
  1217. yield "</span>";
  1218. }
  1219. // line 1107
  1220. yield " <span>";
  1221. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["kw"], "label", [], "any", false, false, false, 1107), "html", null, true);
  1222. yield "</span>
  1223. </button>
  1224. ";
  1225. }
  1226. $_parent = $context['_parent'];
  1227. unset($context['_seq'], $context['_key'], $context['kw'], $context['_parent']);
  1228. $context = array_intersect_key($context, $_parent);
  1229. $context += $_parent;
  1230. // line 1110
  1231. yield " </div>
  1232. ";
  1233. }
  1234. // line 1112
  1235. yield "
  1236. ";
  1237. // line 1114
  1238. yield " <div class=\"hero-search-wrap\">
  1239. <div class=\"hero-search\" id=\"wrHeroSearch\"
  1240. data-search-url=\"";
  1241. // line 1116
  1242. if ((($tmp = (isset($context["isFR"]) || array_key_exists("isFR", $context) ? $context["isFR"] : (function () { throw new RuntimeError('Variable "isFR" does not exist.', 1116, $this->source); })())) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
  1243. yield (string) $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("locale_api_jobs_search", ["_locale" => "fr"]);
  1244. } else {
  1245. yield (string) $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("api_jobs_search");
  1246. }
  1247. yield "\"
  1248. data-jobs-list-url=\"";
  1249. // line 1117
  1250. if ((($tmp = (isset($context["isFR"]) || array_key_exists("isFR", $context) ? $context["isFR"] : (function () { throw new RuntimeError('Variable "isFR" does not exist.', 1117, $this->source); })())) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
  1251. yield (string) $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("locale_whileresume_jobs_list", ["_locale" => "fr"]);
  1252. } else {
  1253. yield (string) $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("whileresume_jobs_list");
  1254. }
  1255. yield "\">
  1256. <div class=\"hero-search-inner\">
  1257. <span class=\"hero-search-icon\">
  1258. <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">
  1259. <circle cx=\"11\" cy=\"11\" r=\"8\"/><path d=\"M21 21l-4.35-4.35\"/>
  1260. </svg>
  1261. </span>
  1262. <input type=\"text\" name=\"q\" id=\"wrHeroSearchInput\" class=\"hero-search-input\"
  1263. placeholder=\"";
  1264. // line 1125
  1265. yield (string) $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.', 1125, $this->source); })()), "hero_search_placeholder", [], "any", false, false, false, 1125), "html", null, true);
  1266. yield "\"
  1267. autocomplete=\"off\" />
  1268. <span class=\"hero-search-kbd\">↵ ";
  1269. // line 1127
  1270. yield (string) (((($tmp = (isset($context["isFR"]) || array_key_exists("isFR", $context) ? $context["isFR"] : (function () { throw new RuntimeError('Variable "isFR" does not exist.', 1127, $this->source); })())) && $tmp instanceof Markup ? (string) $tmp : $tmp)) ? ("Entrée") : ("Enter"));
  1271. yield "</span>
  1272. <button type=\"button\" class=\"hero-search-clear\" id=\"wrHeroSearchClear\" aria-label=\"";
  1273. // line 1128
  1274. yield (string) $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.', 1128, $this->source); })()), "search_clear", [], "any", false, false, false, 1128), "html", null, true);
  1275. yield "\">
  1276. <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">
  1277. <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"/><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"/>
  1278. </svg>
  1279. </button>
  1280. </div>
  1281. </div>
  1282. </div>
  1283. ";
  1284. // line 1138
  1285. yield " ";
  1286. // line 1139
  1287. yield " ";
  1288. $context["_heroCount"] = 0;
  1289. // line 1140
  1290. yield "
  1291. <div class=\"hero-default-jobs\" id=\"wrHeroJobsList\">
  1292. <div class=\"hero-jobs-header\" id=\"wrHeroJobsHeader\">
  1293. <span class=\"hero-jobs-count\" id=\"wrHeroJobsCount\">
  1294. <strong>";
  1295. // line 1144
  1296. yield (string) (((array_key_exists("totalJobs", $context) && !(null === $context["totalJobs"]))) ? ($this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($context["totalJobs"], "html", null, true)) : (0));
  1297. yield "</strong>";
  1298. yield (string) $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.', 1144, $this->source); })()), "search_results_count", [], "any", false, false, false, 1144), "html", null, true);
  1299. yield "
  1300. </span>
  1301. <a href=\"";
  1302. // line 1146
  1303. if ((($tmp = (isset($context["isFR"]) || array_key_exists("isFR", $context) ? $context["isFR"] : (function () { throw new RuntimeError('Variable "isFR" does not exist.', 1146, $this->source); })())) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
  1304. yield (string) $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("locale_whileresume_jobs_list", ["_locale" => "fr"]);
  1305. } else {
  1306. yield (string) $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("whileresume_jobs_list");
  1307. }
  1308. yield "\" class=\"hero-jobs-link\" id=\"wrHeroJobsLink\">
  1309. ";
  1310. // line 1147
  1311. yield (string) $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_view_all", [], "any", false, false, false, 1147), "html", null, true);
  1312. yield "
  1313. <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">
  1314. <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"/><polyline points=\"12 5 19 12 12 19\"/>
  1315. </svg>
  1316. </a>
  1317. </div>
  1318. <div id=\"wrHeroJobsBody\">
  1319. ";
  1320. // line 1155
  1321. if ((array_key_exists("randomJobs", $context) && (Twig\Extension\CoreExtension::length($this->env->getCharset(), (isset($context["randomJobs"]) || array_key_exists("randomJobs", $context) ? $context["randomJobs"] : (function () { throw new RuntimeError('Variable "randomJobs" does not exist.', 1155, $this->source); })())) > 0))) {
  1322. // line 1156
  1323. yield " ";
  1324. $context['_parent'] = $context;
  1325. $context['_seq'] = CoreExtension::ensureTraversable((isset($context["randomJobs"]) || array_key_exists("randomJobs", $context) ? $context["randomJobs"] : (function () { throw new RuntimeError('Variable "randomJobs" does not exist.', 1156, $this->source); })()));
  1326. foreach ($context['_seq'] as $context["_key"] => $context["j"]) {
  1327. // line 1157
  1328. yield " ";
  1329. if (((isset($context["_heroCount"]) || array_key_exists("_heroCount", $context) ? $context["_heroCount"] : (function () { throw new RuntimeError('Variable "_heroCount" does not exist.', 1157, $this->source); })()) < 6)) {
  1330. // line 1158
  1331. yield " <a href=\"";
  1332. if ((CoreExtension::getAttribute($this->env, $this->source, $context["j"], "locale", [], "any", false, false, false, 1158) == "fr")) {
  1333. yield (string) $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.', 1158, $this->source); })()), "request", [], "any", false, false, false, 1158), "locale", [], "any", false, false, false, 1158), "slug" => CoreExtension::getAttribute($this->env, $this->source, $context["j"], "slug", [], "any", false, false, false, 1158)]), "html", null, true);
  1334. } else {
  1335. yield (string) $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, 1158)]), "html", null, true);
  1336. }
  1337. yield "\" class=\"hero-default-job\">
  1338. <div class=\"hero-default-job-logo\">
  1339. ";
  1340. // line 1160
  1341. if (((($tmp = CoreExtension::getAttribute($this->env, $this->source, $context["j"], "image", [], "any", false, false, false, 1160)) && $tmp instanceof Markup ? (string) $tmp : $tmp) && (($tmp = CoreExtension::getAttribute($this->env, $this->source, CoreExtension::getAttribute($this->env, $this->source, $context["j"], "image", [], "any", false, false, false, 1160), "name", [], "any", false, false, false, 1160)) && $tmp instanceof Markup ? (string) $tmp : $tmp))) {
  1342. // line 1161
  1343. yield " <img src=\"";
  1344. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Vich\UploaderBundle\Twig\Extension\UploaderExtension']->asset($context["j"], "imageFile"), "html", null, true);
  1345. yield "\" alt=\"\">
  1346. ";
  1347. } else {
  1348. // line 1163
  1349. yield " ";
  1350. yield (string) $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, 1163)) ? (Twig\Extension\CoreExtension::default(CoreExtension::getAttribute($this->env, $this->source, $context["j"], "companyName", [], "any", false, false, false, 1163), "?")) : ("?")), 0, 1)), "html", null, true);
  1351. yield "
  1352. ";
  1353. }
  1354. // line 1165
  1355. yield " </div>
  1356. <div class=\"hero-default-job-info\">
  1357. <h3 class=\"hero-default-job-title\">";
  1358. // line 1167
  1359. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["j"], "jobTitle", [], "any", false, false, false, 1167), "html", null, true);
  1360. yield "</h3>
  1361. <p class=\"hero-default-job-meta\">
  1362. ";
  1363. // line 1169
  1364. if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, $context["j"], "companyName", [], "any", false, false, false, 1169)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
  1365. yield "<span>";
  1366. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["j"], "companyName", [], "any", false, false, false, 1169), "html", null, true);
  1367. yield "</span>";
  1368. }
  1369. // line 1170
  1370. yield " ";
  1371. if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, $context["j"], "city", [], "any", false, false, false, 1170)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
  1372. // line 1171
  1373. yield " <span class=\"hero-default-job-meta-sep\"></span>
  1374. <span>";
  1375. // line 1172
  1376. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["j"], "city", [], "any", false, false, false, 1172), "html", null, true);
  1377. if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, $context["j"], "country", [], "any", false, false, false, 1172)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
  1378. yield ", ";
  1379. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["j"], "country", [], "any", false, false, false, 1172), "html", null, true);
  1380. }
  1381. yield "</span>
  1382. ";
  1383. }
  1384. // line 1174
  1385. yield " ";
  1386. if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, $context["j"], "employmentType", [], "any", false, false, false, 1174)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
  1387. // line 1175
  1388. yield " <span class=\"hero-default-job-meta-sep\"></span>
  1389. <span>";
  1390. // line 1176
  1391. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["j"], "employmentType", [], "any", false, false, false, 1176), "html", null, true);
  1392. yield "</span>
  1393. ";
  1394. }
  1395. // line 1178
  1396. yield " </p>
  1397. </div>
  1398. <span class=\"hero-default-job-arrow\">
  1399. <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>
  1400. </span>
  1401. </a>
  1402. ";
  1403. // line 1184
  1404. $context["_heroCount"] = ((isset($context["_heroCount"]) || array_key_exists("_heroCount", $context) ? $context["_heroCount"] : (function () { throw new RuntimeError('Variable "_heroCount" does not exist.', 1184, $this->source); })()) + 1);
  1405. // line 1185
  1406. yield " ";
  1407. }
  1408. // line 1186
  1409. yield " ";
  1410. }
  1411. $_parent = $context['_parent'];
  1412. unset($context['_seq'], $context['_key'], $context['j'], $context['_parent']);
  1413. $context = array_intersect_key($context, $_parent);
  1414. $context += $_parent;
  1415. // line 1187
  1416. yield " ";
  1417. }
  1418. // line 1188
  1419. yield " </div>
  1420. </div>
  1421. ";
  1422. // line 1192
  1423. yield " ";
  1424. 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.', 1192, $this->source); })()), "user", [], "any", false, false, false, 1192))) {
  1425. // line 1193
  1426. yield " <div class=\"hero-cta\">
  1427. <a href=\"#register\" class=\"hero-cta-btn\">
  1428. <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">
  1429. <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\"/>
  1430. </svg>
  1431. ";
  1432. // line 1198
  1433. yield (string) $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.', 1198, $this->source); })()), "hero_cta_signup", [], "any", false, false, false, 1198), "html", null, true);
  1434. yield "
  1435. </a>
  1436. <a href=\"";
  1437. // line 1200
  1438. if ((($tmp = (isset($context["isFR"]) || array_key_exists("isFR", $context) ? $context["isFR"] : (function () { throw new RuntimeError('Variable "isFR" does not exist.', 1200, $this->source); })())) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
  1439. yield (string) $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("locale_app_login", ["_locale" => "fr"]);
  1440. } else {
  1441. yield (string) $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("app_login");
  1442. }
  1443. yield "\" class=\"hero-cta-btn\">
  1444. <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">
  1445. <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\"/>
  1446. </svg>
  1447. ";
  1448. // line 1204
  1449. yield (string) $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.', 1204, $this->source); })()), "hero_cta_login", [], "any", false, false, false, 1204), "html", null, true);
  1450. yield "
  1451. </a>
  1452. </div>
  1453. ";
  1454. }
  1455. // line 1208
  1456. yield " </div>
  1457. </section>
  1458. ";
  1459. // line 1212
  1460. yield " <section class=\"wr-section\">
  1461. <div class=\"wr-container\">
  1462. <div class=\"wr-section-head\">
  1463. <h2 class=\"wr-title\">";
  1464. // line 1215
  1465. yield (string) $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.', 1215, $this->source); })()), "how_title", [], "any", false, false, false, 1215), "html", null, true);
  1466. yield "</h2>
  1467. </div>
  1468. <div class=\"how-card\">
  1469. <div class=\"how-step reveal\" data-reveal-delay=\"1\">
  1470. <div class=\"how-step-illu\">
  1471. <img src=\"/uploads/rh/mascotte_register.png\" alt=\"";
  1472. // line 1221
  1473. yield (string) $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.', 1221, $this->source); })()), "how1_title", [], "any", false, false, false, 1221), "html", null, true);
  1474. yield "\" loading=\"lazy\">
  1475. </div>
  1476. <h3 class=\"how-step-title\">";
  1477. // line 1223
  1478. yield (string) $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.', 1223, $this->source); })()), "how1_title", [], "any", false, false, false, 1223), "html", null, true);
  1479. yield "</h3>
  1480. <p class=\"how-step-desc\">";
  1481. // line 1224
  1482. yield (string) $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.', 1224, $this->source); })()), "how1_desc", [], "any", false, false, false, 1224), "html", null, true);
  1483. yield "</p>
  1484. </div>
  1485. <div class=\"how-step reveal\" data-reveal-delay=\"2\">
  1486. <div class=\"how-step-illu\">
  1487. <img src=\"/uploads/rh/mascotte_upload2.png\" alt=\"";
  1488. // line 1229
  1489. yield (string) $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.', 1229, $this->source); })()), "how2_title", [], "any", false, false, false, 1229), "html", null, true);
  1490. yield "\" loading=\"lazy\">
  1491. </div>
  1492. <h3 class=\"how-step-title\">";
  1493. // line 1231
  1494. yield (string) $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); })()), "how2_title", [], "any", false, false, false, 1231), "html", null, true);
  1495. yield "</h3>
  1496. <p class=\"how-step-desc\">";
  1497. // line 1232
  1498. yield (string) $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.', 1232, $this->source); })()), "how2_desc", [], "any", false, false, false, 1232), "html", null, true);
  1499. yield "</p>
  1500. </div>
  1501. <div class=\"how-step reveal\" data-reveal-delay=\"3\">
  1502. <div class=\"how-step-illu\">
  1503. <img src=\"/uploads/rh/mascotte_reunion.png\" alt=\"";
  1504. // line 1237
  1505. yield (string) $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.', 1237, $this->source); })()), "how3_title", [], "any", false, false, false, 1237), "html", null, true);
  1506. yield "\" loading=\"lazy\">
  1507. </div>
  1508. <h3 class=\"how-step-title\">";
  1509. // line 1239
  1510. yield (string) $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); })()), "how3_title", [], "any", false, false, false, 1239), "html", null, true);
  1511. yield "</h3>
  1512. <p class=\"how-step-desc\">";
  1513. // line 1240
  1514. yield (string) $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.', 1240, $this->source); })()), "how3_desc", [], "any", false, false, false, 1240), "html", null, true);
  1515. yield "</p>
  1516. </div>
  1517. </div>
  1518. </div>
  1519. </section>
  1520. ";
  1521. // line 1247
  1522. yield " <section class=\"wr-section\">
  1523. <div class=\"wr-container\">
  1524. ";
  1525. // line 1251
  1526. yield " <div class=\"feat-block reveal\">
  1527. <div class=\"feat-illu\">
  1528. <img src=\"/uploads/rh/mascotte_filtrage3.png\" alt=\"";
  1529. // line 1253
  1530. yield (string) $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.', 1253, $this->source); })()), "feat1_title", [], "any", false, false, false, 1253), "html", null, true);
  1531. yield "\" loading=\"lazy\">
  1532. </div>
  1533. <div class=\"feat-content\">
  1534. <span class=\"feat-label\">";
  1535. // line 1256
  1536. yield (string) $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.', 1256, $this->source); })()), "feat1_label", [], "any", false, false, false, 1256), "html", null, true);
  1537. yield "</span>
  1538. <h3 class=\"feat-title\">";
  1539. // line 1257
  1540. yield (string) $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.', 1257, $this->source); })()), "feat1_title", [], "any", false, false, false, 1257), "html", null, true);
  1541. yield "</h3>
  1542. <div class=\"feat-desc\">
  1543. <p>";
  1544. // line 1259
  1545. yield (string) 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.', 1259, $this->source); })()), "feat1_p1", [], "any", false, false, false, 1259);
  1546. yield "</p>
  1547. <p>";
  1548. // line 1260
  1549. yield (string) 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_p2", [], "any", false, false, false, 1260);
  1550. yield "</p>
  1551. </div>
  1552. <div class=\"feat-quote\">
  1553. <p class=\"feat-quote-text\">";
  1554. // line 1263
  1555. yield (string) $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_quote", [], "any", false, false, false, 1263), "html", null, true);
  1556. yield "</p>
  1557. <div class=\"feat-quote-author\">
  1558. <p class=\"feat-quote-name\">";
  1559. // line 1265
  1560. yield (string) $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.', 1265, $this->source); })()), "feat1_author", [], "any", false, false, false, 1265), "html", null, true);
  1561. yield "</p>
  1562. <p class=\"feat-quote-role\">";
  1563. // line 1266
  1564. yield (string) $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.', 1266, $this->source); })()), "feat1_role", [], "any", false, false, false, 1266), "html", null, true);
  1565. yield "</p>
  1566. </div>
  1567. </div>
  1568. </div>
  1569. </div>
  1570. ";
  1571. // line 1273
  1572. yield " <div class=\"feat-block reveal\">
  1573. <div class=\"feat-illu\">
  1574. <img src=\"/uploads/rh/mascotte_upload.png\" alt=\"";
  1575. // line 1275
  1576. yield (string) $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.', 1275, $this->source); })()), "feat2_title", [], "any", false, false, false, 1275), "html", null, true);
  1577. yield "\" loading=\"lazy\">
  1578. </div>
  1579. <div class=\"feat-content\">
  1580. <span class=\"feat-label\">";
  1581. // line 1278
  1582. yield (string) $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.', 1278, $this->source); })()), "feat2_label", [], "any", false, false, false, 1278), "html", null, true);
  1583. yield "</span>
  1584. <h3 class=\"feat-title\">";
  1585. // line 1279
  1586. yield (string) $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.', 1279, $this->source); })()), "feat2_title", [], "any", false, false, false, 1279), "html", null, true);
  1587. yield "</h3>
  1588. <div class=\"feat-desc\">
  1589. <p>";
  1590. // line 1281
  1591. yield (string) 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.', 1281, $this->source); })()), "feat2_p1", [], "any", false, false, false, 1281);
  1592. yield "</p>
  1593. <p>";
  1594. // line 1282
  1595. yield (string) 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_p2", [], "any", false, false, false, 1282);
  1596. yield "</p>
  1597. </div>
  1598. <div class=\"feat-quote\">
  1599. <p class=\"feat-quote-text\">";
  1600. // line 1285
  1601. yield (string) $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_quote", [], "any", false, false, false, 1285), "html", null, true);
  1602. yield "</p>
  1603. <div class=\"feat-quote-author\">
  1604. <p class=\"feat-quote-name\">";
  1605. // line 1287
  1606. yield (string) $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.', 1287, $this->source); })()), "feat2_author", [], "any", false, false, false, 1287), "html", null, true);
  1607. yield "</p>
  1608. <p class=\"feat-quote-role\">";
  1609. // line 1288
  1610. yield (string) $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.', 1288, $this->source); })()), "feat2_role", [], "any", false, false, false, 1288), "html", null, true);
  1611. yield "</p>
  1612. </div>
  1613. </div>
  1614. </div>
  1615. </div>
  1616. ";
  1617. // line 1294
  1618. 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.', 1294, $this->source); })()), "user", [], "any", false, false, false, 1294))) {
  1619. // line 1295
  1620. yield " ";
  1621. // line 1296
  1622. yield " <div class=\"signup-card reveal reveal--scale\" id=\"register\">
  1623. <div class=\"signup-inner\">
  1624. <div class=\"signup-text\">
  1625. <span class=\"signup-eyebrow\">
  1626. <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>
  1627. ";
  1628. // line 1301
  1629. yield (string) $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.', 1301, $this->source); })()), "signup_eyebrow", [], "any", false, false, false, 1301), "html", null, true);
  1630. yield "
  1631. </span>
  1632. <h3 class=\"signup-title\">";
  1633. // line 1303
  1634. yield (string) $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.', 1303, $this->source); })()), "signup_title", [], "any", false, false, false, 1303), "html", null, true);
  1635. yield "</h3>
  1636. <p class=\"signup-lede\">";
  1637. // line 1304
  1638. yield (string) $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.', 1304, $this->source); })()), "signup_lede", [], "any", false, false, false, 1304), "html", null, true);
  1639. yield "</p>
  1640. <div class=\"signup-perks\">
  1641. <span class=\"signup-perk\">
  1642. <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>
  1643. ";
  1644. // line 1308
  1645. yield (string) $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_perk1", [], "any", false, false, false, 1308), "html", null, true);
  1646. yield "
  1647. </span>
  1648. <span class=\"signup-perk\">
  1649. <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>
  1650. ";
  1651. // line 1312
  1652. yield (string) $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.', 1312, $this->source); })()), "signup_perk2", [], "any", false, false, false, 1312), "html", null, true);
  1653. yield "
  1654. </span>
  1655. <span class=\"signup-perk\">
  1656. <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>
  1657. ";
  1658. // line 1316
  1659. yield (string) $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.', 1316, $this->source); })()), "signup_perk3", [], "any", false, false, false, 1316), "html", null, true);
  1660. yield "
  1661. </span>
  1662. </div>
  1663. </div>
  1664. ";
  1665. // line 1321
  1666. if (array_key_exists("form", $context)) {
  1667. // line 1322
  1668. yield " ";
  1669. // line 1323
  1670. yield " ";
  1671. yield (string) $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.', 1323, $this->source); })()), 'form_start', ["attr" => ["class" => "signup-form", "novalidate" => "novalidate"]]);
  1672. yield "
  1673. ";
  1674. // line 1324
  1675. yield (string) $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.', 1324, $this->source); })()), 'errors');
  1676. yield "
  1677. ";
  1678. // line 1325
  1679. $context['_parent'] = $context;
  1680. $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.', 1325, $this->source); })()), "flashes", ["danger"], "method", false, false, false, 1325));
  1681. foreach ($context['_seq'] as $context["_key"] => $context["message"]) {
  1682. // line 1326
  1683. yield " <p class=\"signup-form-error\">";
  1684. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($context["message"], "html", null, true);
  1685. yield "</p>
  1686. ";
  1687. }
  1688. $_parent = $context['_parent'];
  1689. unset($context['_seq'], $context['_key'], $context['message'], $context['_parent']);
  1690. $context = array_intersect_key($context, $_parent);
  1691. $context += $_parent;
  1692. // line 1328
  1693. yield "
  1694. <div class=\"signup-field\">
  1695. ";
  1696. // line 1330
  1697. yield (string) $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.', 1330, $this->source); })()), "email", [], "any", false, false, false, 1330), '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.', 1330, $this->source); })()), "signup_email_ph", [], "any", false, false, false, 1330)]]);
  1698. yield "
  1699. </div>
  1700. <div class=\"signup-row\">
  1701. <div class=\"signup-field\">
  1702. ";
  1703. // line 1335
  1704. yield (string) $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.', 1335, $this->source); })()), "password", [], "any", false, false, false, 1335), "first", [], "any", false, false, false, 1335), '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.', 1335, $this->source); })()), "signup_pass_ph", [], "any", false, false, false, 1335)]]);
  1705. yield "
  1706. </div>
  1707. <div class=\"signup-field\">
  1708. ";
  1709. // line 1338
  1710. yield (string) $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.', 1338, $this->source); })()), "password", [], "any", false, false, false, 1338), "second", [], "any", false, false, false, 1338), '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.', 1338, $this->source); })()), "signup_pass2_ph", [], "any", false, false, false, 1338)]]);
  1711. yield "
  1712. </div>
  1713. </div>
  1714. <label class=\"signup-terms\">
  1715. ";
  1716. // line 1343
  1717. yield (string) $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.', 1343, $this->source); })()), "acceptTerm", [], "any", false, false, false, 1343), 'widget');
  1718. yield "
  1719. <span>
  1720. ";
  1721. // line 1345
  1722. yield (string) $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.', 1345, $this->source); })()), "signup_terms_pre", [], "any", false, false, false, 1345), "html", null, true);
  1723. yield "
  1724. <a href=\"";
  1725. // line 1346
  1726. if ((($tmp = (isset($context["isFR"]) || array_key_exists("isFR", $context) ? $context["isFR"] : (function () { throw new RuntimeError('Variable "isFR" does not exist.', 1346, $this->source); })())) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
  1727. yield "/fr/protections-donnees-candidats";
  1728. } else {
  1729. yield "/data-protection-candidates";
  1730. }
  1731. yield "\" target=\"_blank\" rel=\"noopener\">";
  1732. yield (string) $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.', 1346, $this->source); })()), "signup_terms_link", [], "any", false, false, false, 1346), "html", null, true);
  1733. yield "</a>.
  1734. </span>
  1735. </label>
  1736. ";
  1737. // line 1350
  1738. if (CoreExtension::getAttribute($this->env, $this->source, ($context["form"] ?? null), "recaptcha", [], "any", true, true, false, 1350)) {
  1739. // line 1351
  1740. yield " <div class=\"signup-recaptcha\">";
  1741. yield (string) $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.', 1351, $this->source); })()), "recaptcha", [], "any", false, false, false, 1351), 'widget');
  1742. yield "</div>
  1743. ";
  1744. }
  1745. // line 1353
  1746. yield "
  1747. <button type=\"submit\" class=\"signup-submit\">
  1748. ";
  1749. // line 1355
  1750. yield (string) $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.', 1355, $this->source); })()), "signup_btn", [], "any", false, false, false, 1355), "html", null, true);
  1751. yield "
  1752. <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>
  1753. </button>
  1754. ";
  1755. // line 1359
  1756. yield (string) $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.', 1359, $this->source); })()), 'rest');
  1757. yield "
  1758. ";
  1759. // line 1360
  1760. yield (string) $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.', 1360, $this->source); })()), 'form_end');
  1761. yield "
  1762. ";
  1763. }
  1764. // line 1362
  1765. yield " </div>
  1766. </div>
  1767. ";
  1768. }
  1769. // line 1365
  1770. yield "
  1771. ";
  1772. // line 1367
  1773. yield " <div class=\"feat-block reveal\">
  1774. <div class=\"feat-illu\">
  1775. <img src=\"/uploads/rh/mascotte_register.png\" alt=\"";
  1776. // line 1369
  1777. yield (string) $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.', 1369, $this->source); })()), "feat3_title", [], "any", false, false, false, 1369), "html", null, true);
  1778. yield "\" loading=\"lazy\">
  1779. </div>
  1780. <div class=\"feat-content\">
  1781. <span class=\"feat-label\">";
  1782. // line 1372
  1783. yield (string) $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); })()), "feat3_label", [], "any", false, false, false, 1372), "html", null, true);
  1784. yield "</span>
  1785. <h3 class=\"feat-title\">";
  1786. // line 1373
  1787. yield (string) $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.', 1373, $this->source); })()), "feat3_title", [], "any", false, false, false, 1373), "html", null, true);
  1788. yield "</h3>
  1789. <div class=\"feat-desc\">
  1790. <p>";
  1791. // line 1375
  1792. yield (string) 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.', 1375, $this->source); })()), "feat3_p1", [], "any", false, false, false, 1375);
  1793. yield "</p>
  1794. <p>";
  1795. // line 1376
  1796. yield (string) 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.', 1376, $this->source); })()), "feat3_p2", [], "any", false, false, false, 1376);
  1797. yield "</p>
  1798. </div>
  1799. <div class=\"feat-quote\">
  1800. <p class=\"feat-quote-text\">";
  1801. // line 1379
  1802. yield (string) $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.', 1379, $this->source); })()), "feat3_quote", [], "any", false, false, false, 1379), "html", null, true);
  1803. yield "</p>
  1804. <div class=\"feat-quote-author\">
  1805. <p class=\"feat-quote-name\">";
  1806. // line 1381
  1807. yield (string) $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.', 1381, $this->source); })()), "feat3_author", [], "any", false, false, false, 1381), "html", null, true);
  1808. yield "</p>
  1809. <p class=\"feat-quote-role\">";
  1810. // line 1382
  1811. yield (string) $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.', 1382, $this->source); })()), "feat3_role", [], "any", false, false, false, 1382), "html", null, true);
  1812. yield "</p>
  1813. </div>
  1814. </div>
  1815. </div>
  1816. </div>
  1817. ";
  1818. // line 1389
  1819. yield " <div class=\"feat-block reveal\">
  1820. <div class=\"feat-illu\">
  1821. <img src=\"/uploads/rh/mascotte_reunion.png\" alt=\"";
  1822. // line 1391
  1823. yield (string) $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.', 1391, $this->source); })()), "feat4_title", [], "any", false, false, false, 1391), "html", null, true);
  1824. yield "\" loading=\"lazy\">
  1825. </div>
  1826. <div class=\"feat-content\">
  1827. <span class=\"feat-label\">";
  1828. // line 1394
  1829. yield (string) $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.', 1394, $this->source); })()), "feat4_label", [], "any", false, false, false, 1394), "html", null, true);
  1830. yield "</span>
  1831. <h3 class=\"feat-title\">";
  1832. // line 1395
  1833. yield (string) $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.', 1395, $this->source); })()), "feat4_title", [], "any", false, false, false, 1395), "html", null, true);
  1834. yield "</h3>
  1835. <div class=\"feat-desc\">
  1836. <p>";
  1837. // line 1397
  1838. yield (string) 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.', 1397, $this->source); })()), "feat4_p1", [], "any", false, false, false, 1397);
  1839. yield "</p>
  1840. <p>";
  1841. // line 1398
  1842. yield (string) 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); })()), "feat4_p2", [], "any", false, false, false, 1398);
  1843. yield "</p>
  1844. </div>
  1845. <div class=\"feat-quote\">
  1846. <p class=\"feat-quote-text\">";
  1847. // line 1401
  1848. yield (string) $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.', 1401, $this->source); })()), "feat4_quote", [], "any", false, false, false, 1401), "html", null, true);
  1849. yield "</p>
  1850. <div class=\"feat-quote-author\">
  1851. <p class=\"feat-quote-name\">";
  1852. // line 1403
  1853. yield (string) $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.', 1403, $this->source); })()), "feat4_author", [], "any", false, false, false, 1403), "html", null, true);
  1854. yield "</p>
  1855. <p class=\"feat-quote-role\">";
  1856. // line 1404
  1857. yield (string) $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.', 1404, $this->source); })()), "feat4_role", [], "any", false, false, false, 1404), "html", null, true);
  1858. yield "</p>
  1859. </div>
  1860. </div>
  1861. </div>
  1862. </div>
  1863. </div>
  1864. </section>
  1865. ";
  1866. // line 1415
  1867. yield " <section class=\"wr-section\">
  1868. <div class=\"wr-container\">
  1869. <div class=\"apps-grid\">
  1870. <a href=\"";
  1871. // line 1418
  1872. yield (string) (((($tmp = (isset($context["isFR"]) || array_key_exists("isFR", $context) ? $context["isFR"] : (function () { throw new RuntimeError('Variable "isFR" does not exist.', 1418, $this->source); })())) && $tmp instanceof Markup ? (string) $tmp : $tmp)) ? ($this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(((array_key_exists("ios_fr", $context)) ? (Twig\Extension\CoreExtension::default((isset($context["ios_fr"]) || array_key_exists("ios_fr", $context) ? $context["ios_fr"] : (function () { throw new RuntimeError('Variable "ios_fr" does not exist.', 1418, $this->source); })()), "#")) : ("#")), "html", null, true)) : ($this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(((array_key_exists("ios_us", $context)) ? (Twig\Extension\CoreExtension::default((isset($context["ios_us"]) || array_key_exists("ios_us", $context) ? $context["ios_us"] : (function () { throw new RuntimeError('Variable "ios_us" does not exist.', 1418, $this->source); })()), "#")) : ("#")), "html", null, true)));
  1873. yield "\" class=\"app-card\">
  1874. <span class=\"app-card-icon\">
  1875. <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>
  1876. </span>
  1877. <h3 class=\"app-card-name\">";
  1878. // line 1422
  1879. yield (string) $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); })()), "apps_ios", [], "any", false, false, false, 1422), "html", null, true);
  1880. yield "</h3>
  1881. <p class=\"app-card-desc\">";
  1882. // line 1423
  1883. yield (string) $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); })()), "apps_ios_desc", [], "any", false, false, false, 1423), "html", null, true);
  1884. yield "</p>
  1885. <span class=\"app-card-cta\">App Store
  1886. <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>
  1887. </span>
  1888. </a>
  1889. <a href=\"";
  1890. // line 1428
  1891. yield (string) (((($tmp = (isset($context["isFR"]) || array_key_exists("isFR", $context) ? $context["isFR"] : (function () { throw new RuntimeError('Variable "isFR" does not exist.', 1428, $this->source); })())) && $tmp instanceof Markup ? (string) $tmp : $tmp)) ? ($this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(((array_key_exists("android_fr", $context)) ? (Twig\Extension\CoreExtension::default((isset($context["android_fr"]) || array_key_exists("android_fr", $context) ? $context["android_fr"] : (function () { throw new RuntimeError('Variable "android_fr" does not exist.', 1428, $this->source); })()), "#")) : ("#")), "html", null, true)) : ($this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(((array_key_exists("android_us", $context)) ? (Twig\Extension\CoreExtension::default((isset($context["android_us"]) || array_key_exists("android_us", $context) ? $context["android_us"] : (function () { throw new RuntimeError('Variable "android_us" does not exist.', 1428, $this->source); })()), "#")) : ("#")), "html", null, true)));
  1892. yield "\" class=\"app-card\">
  1893. <span class=\"app-card-icon\">
  1894. <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>
  1895. </span>
  1896. <h3 class=\"app-card-name\">";
  1897. // line 1432
  1898. yield (string) $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); })()), "apps_android", [], "any", false, false, false, 1432), "html", null, true);
  1899. yield "</h3>
  1900. <p class=\"app-card-desc\">";
  1901. // line 1433
  1902. yield (string) $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.', 1433, $this->source); })()), "apps_android_desc", [], "any", false, false, false, 1433), "html", null, true);
  1903. yield "</p>
  1904. <span class=\"app-card-cta\">Google Play
  1905. <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>
  1906. </span>
  1907. </a>
  1908. <a href=\"";
  1909. // line 1438
  1910. 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.', 1438, $this->source); })()), "request", [], "any", false, false, false, 1438), "locale", [], "any", false, false, false, 1438) == "en")) {
  1911. yield (string) $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("whileresume_homepage");
  1912. } else {
  1913. yield (string) $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.', 1438, $this->source); })()), "request", [], "any", false, false, false, 1438), "locale", [], "any", false, false, false, 1438)]), "html", null, true);
  1914. }
  1915. yield "#register\" class=\"app-card\">
  1916. <span class=\"app-card-icon\">
  1917. <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>
  1918. </span>
  1919. <h3 class=\"app-card-name\">";
  1920. // line 1442
  1921. yield (string) $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); })()), "apps_web", [], "any", false, false, false, 1442), "html", null, true);
  1922. yield "</h3>
  1923. <p class=\"app-card-desc\">";
  1924. // line 1443
  1925. yield (string) $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.', 1443, $this->source); })()), "apps_web_desc", [], "any", false, false, false, 1443), "html", null, true);
  1926. yield "</p>
  1927. <span class=\"app-card-cta\">whileresume.com
  1928. <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>
  1929. </span>
  1930. </a>
  1931. </div>
  1932. </div>
  1933. </section>
  1934. ";
  1935. // line 1454
  1936. yield " ";
  1937. 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.', 1454, $this->source); })())) > 0))) {
  1938. // line 1455
  1939. yield " <section class=\"wr-section\">
  1940. <div class=\"wr-container\">
  1941. <div class=\"wr-section-head\">
  1942. <h2 class=\"wr-title wr-title--sm\">";
  1943. // line 1458
  1944. yield (string) $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.', 1458, $this->source); })()), "articles_title", [], "any", false, false, false, 1458), "html", null, true);
  1945. yield "</h2>
  1946. </div>
  1947. <div class=\"articles-list\">
  1948. ";
  1949. // line 1462
  1950. $context['_parent'] = $context;
  1951. $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.', 1462, $this->source); })()), 0, 6));
  1952. foreach ($context['_seq'] as $context["_key"] => $context["a"]) {
  1953. // line 1463
  1954. yield " ";
  1955. $context["prefix"] = "";
  1956. // line 1464
  1957. yield " ";
  1958. $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, 1464)]);
  1959. // line 1465
  1960. yield " ";
  1961. 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.', 1465, $this->source); })()), "request", [], "any", false, false, false, 1465), "locale", [], "any", false, false, false, 1465) != (isset($context["default_locale"]) || array_key_exists("default_locale", $context) ? $context["default_locale"] : (function () { throw new RuntimeError('Variable "default_locale" does not exist.', 1465, $this->source); })()))) {
  1962. // line 1466
  1963. yield " ";
  1964. $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.', 1466, $this->source); })()), "request", [], "any", false, false, false, 1466), "locale", [], "any", false, false, false, 1466), "slug" => CoreExtension::getAttribute($this->env, $this->source, $context["a"], "slug", [], "any", false, false, false, 1466)]);
  1965. // line 1467
  1966. yield " ";
  1967. $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.', 1467, $this->source); })()), "request", [], "any", false, false, false, 1467), "locale", [], "any", false, false, false, 1467));
  1968. // line 1468
  1969. yield " ";
  1970. }
  1971. // line 1469
  1972. yield " ";
  1973. if ( !Twig\Extension\CoreExtension::testEmpty(CoreExtension::getAttribute($this->env, $this->source, $context["a"], "pageslug3", [], "any", false, false, false, 1469))) {
  1974. // line 1470
  1975. yield " ";
  1976. $context["urlA"] = (((((((isset($context["prefix"]) || array_key_exists("prefix", $context) ? $context["prefix"] : (function () { throw new RuntimeError('Variable "prefix" does not exist.', 1470, $this->source); })()) . "/") . CoreExtension::getAttribute($this->env, $this->source, $context["a"], "pageslug", [], "any", false, false, false, 1470)) . "/") . CoreExtension::getAttribute($this->env, $this->source, $context["a"], "pageslug2", [], "any", false, false, false, 1470)) . "/") . CoreExtension::getAttribute($this->env, $this->source, $context["a"], "pageslug3", [], "any", false, false, false, 1470));
  1977. // line 1471
  1978. yield " ";
  1979. } elseif ( !Twig\Extension\CoreExtension::testEmpty(CoreExtension::getAttribute($this->env, $this->source, $context["a"], "pageslug2", [], "any", false, false, false, 1471))) {
  1980. // line 1472
  1981. yield " ";
  1982. $context["urlA"] = (((((isset($context["prefix"]) || array_key_exists("prefix", $context) ? $context["prefix"] : (function () { throw new RuntimeError('Variable "prefix" does not exist.', 1472, $this->source); })()) . "/") . CoreExtension::getAttribute($this->env, $this->source, $context["a"], "pageslug", [], "any", false, false, false, 1472)) . "/") . CoreExtension::getAttribute($this->env, $this->source, $context["a"], "pageslug2", [], "any", false, false, false, 1472));
  1983. // line 1473
  1984. yield " ";
  1985. } elseif ( !Twig\Extension\CoreExtension::testEmpty(CoreExtension::getAttribute($this->env, $this->source, $context["a"], "pageslug", [], "any", false, false, false, 1473))) {
  1986. // line 1474
  1987. yield " ";
  1988. $context["urlA"] = (((isset($context["prefix"]) || array_key_exists("prefix", $context) ? $context["prefix"] : (function () { throw new RuntimeError('Variable "prefix" does not exist.', 1474, $this->source); })()) . "/") . CoreExtension::getAttribute($this->env, $this->source, $context["a"], "pageslug", [], "any", false, false, false, 1474));
  1989. // line 1475
  1990. yield " ";
  1991. }
  1992. // line 1476
  1993. yield "
  1994. <a href=\"";
  1995. // line 1477
  1996. yield (string) $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.', 1477, $this->source); })()), "html", null, true);
  1997. yield "\" class=\"wr-article\">
  1998. <div class=\"wr-article-logo\">
  1999. <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">
  2000. <path d=\"M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z\"/>
  2001. <path d=\"M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z\"/>
  2002. </svg>
  2003. </div>
  2004. <div class=\"wr-article-info\">
  2005. <h3 class=\"wr-article-title\">";
  2006. // line 1485
  2007. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["a"], "title", [], "any", false, false, false, 1485), "html", null, true);
  2008. yield "</h3>
  2009. <div class=\"wr-article-meta\">
  2010. ";
  2011. // line 1487
  2012. if ( !Twig\Extension\CoreExtension::testEmpty(CoreExtension::getAttribute($this->env, $this->source, $context["a"], "subtitle", [], "any", false, false, false, 1487))) {
  2013. // line 1488
  2014. yield " <span>";
  2015. yield (string) (((Twig\Extension\CoreExtension::length($this->env->getCharset(), CoreExtension::getAttribute($this->env, $this->source, $context["a"], "subtitle", [], "any", false, false, false, 1488)) > 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, 1488), 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, 1488), "html", null, true)));
  2016. yield "</span>
  2017. ";
  2018. }
  2019. // line 1490
  2020. yield " </div>
  2021. </div>
  2022. <span class=\"wr-article-badge\">";
  2023. // line 1492
  2024. yield (string) $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.', 1492, $this->source); })()), "read_article", [], "any", false, false, false, 1492), "html", null, true);
  2025. yield "</span>
  2026. <span class=\"wr-article-arrow\">
  2027. <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">
  2028. <polyline points=\"9 18 15 12 9 6\"/>
  2029. </svg>
  2030. </span>
  2031. </a>
  2032. ";
  2033. }
  2034. $_parent = $context['_parent'];
  2035. unset($context['_seq'], $context['_key'], $context['a'], $context['_parent']);
  2036. $context = array_intersect_key($context, $_parent);
  2037. $context += $_parent;
  2038. // line 1500
  2039. yield " </div>
  2040. <div class=\"articles-cta\">
  2041. <a href=\"";
  2042. // line 1503
  2043. if ((($tmp = (isset($context["isFR"]) || array_key_exists("isFR", $context) ? $context["isFR"] : (function () { throw new RuntimeError('Variable "isFR" does not exist.', 1503, $this->source); })())) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
  2044. yield (string) $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("locale_cvs_website_articles", ["_locale" => "fr"]);
  2045. } else {
  2046. yield (string) $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("cvs_website_articles");
  2047. }
  2048. yield "\">
  2049. ";
  2050. // line 1504
  2051. yield (string) $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.', 1504, $this->source); })()), "articles_view_all", [], "any", false, false, false, 1504), "html", null, true);
  2052. yield "
  2053. <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>
  2054. </a>
  2055. </div>
  2056. </div>
  2057. </section>
  2058. ";
  2059. }
  2060. // line 1511
  2061. yield "
  2062. ";
  2063. // line 1513
  2064. yield " ";
  2065. 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.', 1513, $this->source); })()), "user", [], "any", false, false, false, 1513))) {
  2066. // line 1514
  2067. yield " <section class=\"wr-section\">
  2068. <div class=\"wr-container\">
  2069. <div class=\"final-card\">
  2070. <h2 class=\"final-title\">";
  2071. // line 1518
  2072. yield (string) $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.', 1518, $this->source); })()), "final_title", [], "any", false, false, false, 1518), "html", null, true);
  2073. yield "</h2>
  2074. <div class=\"final-grid\">
  2075. ";
  2076. // line 1522
  2077. yield " <div class=\"final-sub\">
  2078. <div class=\"final-sub-head\">
  2079. <span class=\"final-sub-icon\">
  2080. <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\">
  2081. <rect x=\"2\" y=\"7\" width=\"20\" height=\"14\" rx=\"2\" ry=\"2\"/>
  2082. <path d=\"M16 21V5a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16\"/>
  2083. </svg>
  2084. </span>
  2085. <span class=\"final-sub-label\">";
  2086. // line 1530
  2087. yield (string) $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.', 1530, $this->source); })()), "final_recruiter_label", [], "any", false, false, false, 1530), "html", null, true);
  2088. yield "</span>
  2089. </div>
  2090. <h3 class=\"final-sub-title\">";
  2091. // line 1532
  2092. yield (string) $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.', 1532, $this->source); })()), "final_recruiter_title", [], "any", false, false, false, 1532), "html", null, true);
  2093. yield "</h3>
  2094. <p class=\"final-sub-desc\">";
  2095. // line 1533
  2096. yield (string) $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.', 1533, $this->source); })()), "final_recruiter_desc", [], "any", false, false, false, 1533), "html", null, true);
  2097. yield "</p>
  2098. <a href=\"";
  2099. // line 1534
  2100. yield (string) $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.', 1534, $this->source); })()), "request", [], "any", false, false, false, 1534), "locale", [], "any", false, false, false, 1534)));
  2101. yield "\" class=\"final-sub-btn\">
  2102. ";
  2103. // line 1535
  2104. yield (string) $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.', 1535, $this->source); })()), "final_recruiter", [], "any", false, false, false, 1535), "html", null, true);
  2105. yield "
  2106. <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>
  2107. </a>
  2108. </div>
  2109. ";
  2110. // line 1541
  2111. yield " <div class=\"final-sub\">
  2112. <div class=\"final-sub-head\">
  2113. <span class=\"final-sub-icon\">
  2114. <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\">
  2115. <path d=\"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2\"/>
  2116. <circle cx=\"12\" cy=\"7\" r=\"4\"/>
  2117. </svg>
  2118. </span>
  2119. <span class=\"final-sub-label\">";
  2120. // line 1549
  2121. yield (string) $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.', 1549, $this->source); })()), "final_candidate_label", [], "any", false, false, false, 1549), "html", null, true);
  2122. yield "</span>
  2123. </div>
  2124. <h3 class=\"final-sub-title\">";
  2125. // line 1551
  2126. yield (string) $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); })()), "final_candidate_title", [], "any", false, false, false, 1551), "html", null, true);
  2127. yield "</h3>
  2128. <p class=\"final-sub-desc\">";
  2129. // line 1552
  2130. yield (string) $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.', 1552, $this->source); })()), "final_candidate_desc", [], "any", false, false, false, 1552), "html", null, true);
  2131. yield "</p>
  2132. <a href=\"";
  2133. // line 1553
  2134. 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.', 1553, $this->source); })()), "request", [], "any", false, false, false, 1553), "locale", [], "any", false, false, false, 1553) == "en")) {
  2135. yield (string) $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("whileresume_homepage");
  2136. } else {
  2137. yield (string) $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.', 1553, $this->source); })()), "request", [], "any", false, false, false, 1553), "locale", [], "any", false, false, false, 1553)]), "html", null, true);
  2138. }
  2139. yield "#register\" class=\"final-sub-btn\">
  2140. ";
  2141. // line 1554
  2142. yield (string) $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.', 1554, $this->source); })()), "final_candidate", [], "any", false, false, false, 1554), "html", null, true);
  2143. yield "
  2144. <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>
  2145. </a>
  2146. </div>
  2147. </div>
  2148. </div>
  2149. </div>
  2150. </section>
  2151. ";
  2152. }
  2153. // line 1563
  2154. yield " </div>
  2155. ";
  2156. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  2157. $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  2158. yield from [];
  2159. }
  2160. // line 1566
  2161. /**
  2162. * @return iterable<null|scalar|\Stringable>
  2163. */
  2164. public function block_footer_js(array $context, array $blocks = []): iterable
  2165. {
  2166. $macros = $this->macros;
  2167. $__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  2168. $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "footer_js"));
  2169. $__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  2170. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "footer_js"));
  2171. // line 1567
  2172. yield " ";
  2173. yield from $this->yieldParentBlock("footer_js", $context, $blocks);
  2174. yield "
  2175. <script>
  2176. (function(){
  2177. var search = document.getElementById(\x27wrHeroSearch\x27);
  2178. var input = document.getElementById(\x27wrHeroSearchInput\x27);
  2179. var clearBtn = document.getElementById(\x27wrHeroSearchClear\x27);
  2180. var jobsBody = document.getElementById(\x27wrHeroJobsBody\x27);
  2181. var countEl = document.getElementById(\x27wrHeroJobsCount\x27);
  2182. var linkEl = document.getElementById(\x27wrHeroJobsLink\x27);
  2183. if (!search || !input || !jobsBody) return;
  2184. var searchUrl = search.dataset.searchUrl;
  2185. var jobsListUrl = search.dataset.jobsListUrl;
  2186. // On garde l\x27état initial pour pouvoir le restaurer
  2187. var defaultBodyHtml = jobsBody.innerHTML;
  2188. var defaultCountHtml = countEl ? countEl.innerHTML : \x27\x27;
  2189. var defaultLinkHref = linkEl ? linkEl.getAttribute(\x27href\x27) : jobsListUrl;
  2190. var debounceTimer = null;
  2191. var currentRequest = null;
  2192. var lastQuery = \x27\x27;
  2193. var T = {
  2194. loading: \x27";
  2195. // line 1591
  2196. yield (string) $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.', 1591, $this->source); })()), "search_loading", [], "any", false, false, false, 1591), "js"), "html", null, true);
  2197. yield "\x27,
  2198. empty: \x27";
  2199. // line 1592
  2200. yield (string) $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.', 1592, $this->source); })()), "search_no_results", [], "any", false, false, false, 1592), "js"), "html", null, true);
  2201. yield "\x27,
  2202. emptyHint: \x27";
  2203. // line 1593
  2204. yield (string) $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.', 1593, $this->source); })()), "search_no_results_hint", [], "any", false, false, false, 1593), "js"), "html", null, true);
  2205. yield "\x27,
  2206. count: \x27";
  2207. // line 1594
  2208. yield (string) $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.', 1594, $this->source); })()), "search_results_count", [], "any", false, false, false, 1594), "js"), "html", null, true);
  2209. yield "\x27,
  2210. viewAll: \x27";
  2211. // line 1595
  2212. yield (string) $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.', 1595, $this->source); })()), "search_view_all", [], "any", false, false, false, 1595), "js"), "html", null, true);
  2213. yield "\x27,
  2214. view: \x27";
  2215. // line 1596
  2216. yield (string) $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.', 1596, $this->source); })()), "search_view_offer", [], "any", false, false, false, 1596), "js"), "html", null, true);
  2217. yield "\x27
  2218. };
  2219. function escHtml(s){
  2220. if (s == null) return \x27\x27;
  2221. return String(s).replace(/[&<>\"\x27]/g, function(c){
  2222. return {\x27&\x27:\x27&amp;\x27,\x27<\x27:\x27&lt;\x27,\x27>\x27:\x27&gt;\x27,\x27\"\x27:\x27&quot;\x27,\"\x27\":\x27&#39;\x27}[c];
  2223. });
  2224. }
  2225. function setHeaderCount(total){
  2226. if (!countEl) return;
  2227. countEl.innerHTML = \x27<strong>\x27 + total + \x27</strong>\x27 + escHtml(T.count);
  2228. }
  2229. function setHeaderLink(href){
  2230. if (!linkEl) return;
  2231. linkEl.setAttribute(\x27href\x27, href);
  2232. }
  2233. function setLoading(){
  2234. jobsBody.innerHTML =
  2235. \x27<div class=\"hero-jobs-loading\">\x27 +
  2236. \x27<span class=\"hero-jobs-spinner\"></span>\x27 +
  2237. \x27<span>\x27 + escHtml(T.loading) + \x27</span>\x27 +
  2238. \x27</div>\x27;
  2239. }
  2240. function setEmpty(){
  2241. jobsBody.innerHTML =
  2242. \x27<div class=\"hero-jobs-empty\">\x27 +
  2243. \x27<div class=\"hero-jobs-empty-icon\">\x27 +
  2244. \x27<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\x27 +
  2245. \x27<circle cx=\"11\" cy=\"11\" r=\"8\"/><line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"/>\x27 +
  2246. \x27</svg>\x27 +
  2247. \x27</div>\x27 +
  2248. \x27<p class=\"hero-jobs-empty-title\">\x27 + escHtml(T.empty) + \x27</p>\x27 +
  2249. \x27<p class=\"hero-jobs-empty-hint\">\x27 + escHtml(T.emptyHint) + \x27</p>\x27 +
  2250. \x27</div>\x27;
  2251. }
  2252. function restoreDefault(){
  2253. jobsBody.innerHTML = defaultBodyHtml;
  2254. if (countEl) countEl.innerHTML = defaultCountHtml;
  2255. if (linkEl) linkEl.setAttribute(\x27href\x27, defaultLinkHref);
  2256. }
  2257. function renderResults(payload, query){
  2258. var jobs = (payload && payload.jobs) || [];
  2259. var total = (payload && typeof payload.total === \x27number\x27) ? payload.total : jobs.length;
  2260. setHeaderCount(total);
  2261. setHeaderLink(jobsListUrl + \x27?q=\x27 + encodeURIComponent(query));
  2262. if (!jobs.length){
  2263. setEmpty();
  2264. return;
  2265. }
  2266. var html = \x27\x27;
  2267. jobs.slice(0, 6).forEach(function(j){
  2268. var title = j.jobTitle || j.title || \x27\x27;
  2269. var company = j.companyName || j.company || \x27\x27;
  2270. var city = j.city || \x27\x27;
  2271. var country = j.country || \x27\x27;
  2272. var et = j.employmentType || \x27\x27;
  2273. var img = j.image || j.imageUrl || \x27\x27;
  2274. var url = j.url || (jobsListUrl + \x27?q=\x27 + encodeURIComponent(query));
  2275. var initial = (company || title || \x27?\x27).charAt(0).toUpperCase();
  2276. var location = city + (country ? \x27, \x27 + country : \x27\x27);
  2277. var metaParts = [];
  2278. if (company) metaParts.push(\x27<span>\x27 + escHtml(company) + \x27</span>\x27);
  2279. if (location) metaParts.push(\x27<span class=\"hero-default-job-meta-sep\"></span><span>\x27 + escHtml(location) + \x27</span>\x27);
  2280. if (et) metaParts.push(\x27<span class=\"hero-default-job-meta-sep\"></span><span>\x27 + escHtml(et) + \x27</span>\x27);
  2281. html +=
  2282. \x27<a href=\"\x27 + escHtml(url) + \x27\" class=\"hero-default-job\">\x27 +
  2283. \x27<div class=\"hero-default-job-logo\">\x27 +
  2284. (img
  2285. ? \x27<img src=\"\x27 + escHtml(img) + \x27\" alt=\"\">\x27
  2286. : escHtml(initial)) +
  2287. \x27</div>\x27 +
  2288. \x27<div class=\"hero-default-job-info\">\x27 +
  2289. \x27<h3 class=\"hero-default-job-title\">\x27 + escHtml(title) + \x27</h3>\x27 +
  2290. \x27<p class=\"hero-default-job-meta\">\x27 + metaParts.join(\x27\x27) + \x27</p>\x27 +
  2291. \x27</div>\x27 +
  2292. \x27<span class=\"hero-default-job-arrow\">\x27 +
  2293. \x27<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>\x27 +
  2294. \x27</span>\x27 +
  2295. \x27</a>\x27;
  2296. });
  2297. jobsBody.innerHTML = html;
  2298. }
  2299. function doSearch(query){
  2300. if (currentRequest && currentRequest.abort) {
  2301. try { currentRequest.abort(); } catch(e){}
  2302. }
  2303. setLoading();
  2304. var url = searchUrl + (searchUrl.indexOf(\x27?\x27) > -1 ? \x27&\x27 : \x27?\x27) + \x27q=\x27 + encodeURIComponent(query);
  2305. var ctrl = (typeof AbortController !== \x27undefined\x27) ? new AbortController() : null;
  2306. currentRequest = ctrl;
  2307. fetch(url, { headers: { \x27Accept\x27: \x27application/json\x27 }, signal: ctrl ? ctrl.signal : undefined })
  2308. .then(function(r){ return r.ok ? r.json() : Promise.reject(r.status); })
  2309. .then(function(data){ renderResults(data, query); })
  2310. .catch(function(err){
  2311. if (err && err.name === \x27AbortError\x27) return;
  2312. setEmpty();
  2313. });
  2314. }
  2315. // Input live (debounce 280ms)
  2316. input.addEventListener(\x27input\x27, function(){
  2317. var q = input.value.trim();
  2318. clearBtn.classList.toggle(\x27is-visible\x27, q.length > 0);
  2319. if (debounceTimer) clearTimeout(debounceTimer);
  2320. if (q.length < 2){
  2321. restoreDefault();
  2322. lastQuery = \x27\x27;
  2323. return;
  2324. }
  2325. if (q === lastQuery) return;
  2326. debounceTimer = setTimeout(function(){
  2327. lastQuery = q;
  2328. doSearch(q);
  2329. }, 280);
  2330. });
  2331. // Enter → page de résultats complète
  2332. input.addEventListener(\x27keydown\x27, function(e){
  2333. if (e.key === \x27Enter\x27){
  2334. e.preventDefault();
  2335. var q = input.value.trim();
  2336. if (!q) return;
  2337. window.location.href = jobsListUrl + \x27?q=\x27 + encodeURIComponent(q);
  2338. }
  2339. if (e.key === \x27Escape\x27){
  2340. input.value = \x27\x27;
  2341. clearBtn.classList.remove(\x27is-visible\x27);
  2342. restoreDefault();
  2343. lastQuery = \x27\x27;
  2344. input.blur();
  2345. }
  2346. });
  2347. // Clear
  2348. clearBtn.addEventListener(\x27click\x27, function(){
  2349. input.value = \x27\x27;
  2350. clearBtn.classList.remove(\x27is-visible\x27);
  2351. restoreDefault();
  2352. lastQuery = \x27\x27;
  2353. input.focus();
  2354. });
  2355. // Pills \"Populaire\" — au clic, on remplit l\x27input et on lance la recherche
  2356. document.querySelectorAll(\x27.hero-popular-pill\x27).forEach(function(pill){
  2357. pill.addEventListener(\x27click\x27, function(){
  2358. var keyword = pill.dataset.keyword || pill.dataset.label || \x27\x27;
  2359. if (!keyword) return;
  2360. // Visuel actif
  2361. document.querySelectorAll(\x27.hero-popular-pill\x27).forEach(function(p){ p.classList.remove(\x27is-active\x27); });
  2362. pill.classList.add(\x27is-active\x27);
  2363. input.value = keyword;
  2364. clearBtn.classList.add(\x27is-visible\x27);
  2365. lastQuery = keyword;
  2366. doSearch(keyword);
  2367. input.focus();
  2368. });
  2369. });
  2370. })();
  2371. /* ═══ Reveal au scroll (Intersection Observer) ═══ */
  2372. (function(){
  2373. var els = document.querySelectorAll(\x27.reveal\x27);
  2374. if (!els.length) return;
  2375. if (!(\x27IntersectionObserver\x27 in window)){
  2376. // Fallback : tout révéler
  2377. els.forEach(function(el){ el.classList.add(\x27is-revealed\x27); });
  2378. return;
  2379. }
  2380. var io = new IntersectionObserver(function(entries){
  2381. entries.forEach(function(entry){
  2382. if (entry.isIntersecting){
  2383. entry.target.classList.add(\x27is-revealed\x27);
  2384. io.unobserve(entry.target);
  2385. }
  2386. });
  2387. }, { threshold: 0.12, rootMargin: \x270px 0px -60px 0px\x27 });
  2388. els.forEach(function(el){ io.observe(el); });
  2389. })();
  2390. </script>
  2391. ";
  2392. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  2393. $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  2394. yield from [];
  2395. }
  2396. /**
  2397. * @codeCoverageIgnore
  2398. */
  2399. public function getTemplateName(): string
  2400. {
  2401. return "application/whileresume/website/candidates/homepage.html.twig";
  2402. }
  2403. /**
  2404. * @codeCoverageIgnore
  2405. */
  2406. public function isTraitable(): bool
  2407. {
  2408. return false;
  2409. }
  2410. /**
  2411. * @codeCoverageIgnore
  2412. */
  2413. public function getDebugInfo(): array
  2414. {
  2415. return array ( 2370 => 1596, 2366 => 1595, 2362 => 1594, 2358 => 1593, 2354 => 1592, 2350 => 1591, 2322 => 1567, 2309 => 1566, 2297 => 1563, 2285 => 1554, 2277 => 1553, 2273 => 1552, 2269 => 1551, 2264 => 1549, 2254 => 1541, 2246 => 1535, 2242 => 1534, 2238 => 1533, 2234 => 1532, 2229 => 1530, 2219 => 1522, 2213 => 1518, 2207 => 1514, 2204 => 1513, 2201 => 1511, 2191 => 1504, 2183 => 1503, 2178 => 1500, 2163 => 1492, 2159 => 1490, 2153 => 1488, 2151 => 1487, 2146 => 1485, 2135 => 1477, 2132 => 1476, 2129 => 1475, 2126 => 1474, 2123 => 1473, 2120 => 1472, 2117 => 1471, 2114 => 1470, 2111 => 1469, 2108 => 1468, 2105 => 1467, 2102 => 1466, 2099 => 1465, 2096 => 1464, 2093 => 1463, 2089 => 1462, 2082 => 1458, 2077 => 1455, 2074 => 1454, 2061 => 1443, 2057 => 1442, 2046 => 1438, 2038 => 1433, 2034 => 1432, 2027 => 1428, 2019 => 1423, 2015 => 1422, 2008 => 1418, 2003 => 1415, 1990 => 1404, 1986 => 1403, 1981 => 1401, 1975 => 1398, 1971 => 1397, 1966 => 1395, 1962 => 1394, 1956 => 1391, 1952 => 1389, 1943 => 1382, 1939 => 1381, 1934 => 1379, 1928 => 1376, 1924 => 1375, 1919 => 1373, 1915 => 1372, 1909 => 1369, 1905 => 1367, 1902 => 1365, 1897 => 1362, 1892 => 1360, 1888 => 1359, 1881 => 1355, 1877 => 1353, 1871 => 1351, 1869 => 1350, 1856 => 1346, 1852 => 1345, 1847 => 1343, 1839 => 1338, 1833 => 1335, 1825 => 1330, 1821 => 1328, 1811 => 1326, 1807 => 1325, 1803 => 1324, 1798 => 1323, 1796 => 1322, 1794 => 1321, 1786 => 1316, 1779 => 1312, 1772 => 1308, 1765 => 1304, 1761 => 1303, 1756 => 1301, 1749 => 1296, 1747 => 1295, 1745 => 1294, 1736 => 1288, 1732 => 1287, 1727 => 1285, 1721 => 1282, 1717 => 1281, 1712 => 1279, 1708 => 1278, 1702 => 1275, 1698 => 1273, 1689 => 1266, 1685 => 1265, 1680 => 1263, 1674 => 1260, 1670 => 1259, 1665 => 1257, 1661 => 1256, 1655 => 1253, 1651 => 1251, 1646 => 1247, 1637 => 1240, 1633 => 1239, 1628 => 1237, 1620 => 1232, 1616 => 1231, 1611 => 1229, 1603 => 1224, 1599 => 1223, 1594 => 1221, 1585 => 1215, 1580 => 1212, 1575 => 1208, 1568 => 1204, 1557 => 1200, 1552 => 1198, 1545 => 1193, 1542 => 1192, 1537 => 1188, 1534 => 1187, 1527 => 1186, 1524 => 1185, 1522 => 1184, 1514 => 1178, 1509 => 1176, 1506 => 1175, 1503 => 1174, 1494 => 1172, 1491 => 1171, 1488 => 1170, 1482 => 1169, 1477 => 1167, 1473 => 1165, 1467 => 1163, 1461 => 1161, 1459 => 1160, 1449 => 1158, 1446 => 1157, 1441 => 1156, 1439 => 1155, 1428 => 1147, 1420 => 1146, 1413 => 1144, 1407 => 1140, 1404 => 1139, 1402 => 1138, 1390 => 1128, 1386 => 1127, 1381 => 1125, 1366 => 1117, 1358 => 1116, 1354 => 1114, 1351 => 1112, 1347 => 1110, 1336 => 1107, 1330 => 1106, 1326 => 1105, 1322 => 1104, 1318 => 1102, 1314 => 1101, 1310 => 1100, 1307 => 1099, 1304 => 1098, 1298 => 1094, 1294 => 1093, 1290 => 1092, 1286 => 1091, 1282 => 1090, 1273 => 1086, 1267 => 1085, 1260 => 1081, 1254 => 1077, 1250 => 1074, 1237 => 1073, 194 => 41, 181 => 40, 158 => 38, 135 => 37, 112 => 36, 89 => 35, 78 => 1, 70 => 31, 66 => 30, 64 => 29, 62 => 5, 60 => 3, 47 => 1,);
  2416. }
  2417. public function getSourceContext(): Source
  2418. {
  2419. return new Source("{% extends \x27application/whileresume/website/layout-social.html.twig\x27 %}
  2420. {% set isFR = app.request.locale == \x27fr\x27 %}
  2421. {% set _keys = [
  2422. \x27hero_eyebrow\x27,\x27hero_title_pre\x27,\x27hero_title_accent\x27,\x27hero_title_post\x27,\x27hero_title_accent2\x27,\x27hero_title_2\x27,
  2423. \x27hero_lede_pre\x27,\x27hero_lede_brand\x27,\x27hero_lede_mid\x27,\x27hero_lede_word\x27,\x27hero_lede_post\x27,
  2424. \x27hero_cta_signup\x27,\x27hero_cta_login\x27,
  2425. \x27hero_search_placeholder\x27,\x27hero_popular_label\x27,\x27hero_btn_ios\x27,\x27hero_btn_android\x27,
  2426. \x27hero_default_title\x27,\x27hero_search_button\x27,\x27hero_byline_jobs\x27,\x27hero_byline_apps\x27,\x27hero_byline_free\x27,\x27hero_kbd_enter\x27,
  2427. \x27search_loading\x27,\x27search_no_results\x27,\x27search_no_results_hint\x27,\x27search_results_count\x27,\x27search_view_all\x27,\x27search_view_offer\x27,\x27search_clear\x27,
  2428. \x27how_eyebrow\x27,\x27how_title\x27,\x27how_lede\x27,
  2429. \x27how1_title\x27,\x27how1_desc\x27,\x27how2_title\x27,\x27how2_desc\x27,\x27how3_title\x27,\x27how3_desc\x27,
  2430. \x27feat1_label\x27,\x27feat1_title\x27,\x27feat1_p1\x27,\x27feat1_p2\x27,\x27feat1_quote\x27,\x27feat1_author\x27,\x27feat1_role\x27,
  2431. \x27feat2_label\x27,\x27feat2_title\x27,\x27feat2_p1\x27,\x27feat2_p2\x27,\x27feat2_quote\x27,\x27feat2_author\x27,\x27feat2_role\x27,
  2432. \x27feat3_label\x27,\x27feat3_title\x27,\x27feat3_p1\x27,\x27feat3_p2\x27,\x27feat3_quote\x27,\x27feat3_author\x27,\x27feat3_role\x27,
  2433. \x27feat4_label\x27,\x27feat4_title\x27,\x27feat4_p1\x27,\x27feat4_p2\x27,\x27feat4_quote\x27,\x27feat4_author\x27,\x27feat4_role\x27,
  2434. \x27signup_eyebrow\x27,\x27signup_title\x27,\x27signup_lede\x27,\x27signup_email_ph\x27,\x27signup_pass_ph\x27,\x27signup_pass2_ph\x27,
  2435. \x27signup_terms_pre\x27,\x27signup_terms_link\x27,\x27signup_btn\x27,\x27signup_login_pre\x27,\x27signup_login_link\x27,
  2436. \x27signup_perk1\x27,\x27signup_perk2\x27,\x27signup_perk3\x27,
  2437. \x27apps_eyebrow\x27,\x27apps_title\x27,\x27apps_lede\x27,\x27apps_ios\x27,\x27apps_android\x27,\x27apps_web\x27,\x27apps_ios_desc\x27,\x27apps_android_desc\x27,\x27apps_web_desc\x27,
  2438. \x27articles_title\x27,\x27articles_view_all\x27,\x27read_article\x27,
  2439. \x27final_eyebrow\x27,\x27final_title\x27,
  2440. \x27final_recruiter_label\x27,\x27final_recruiter_title\x27,\x27final_recruiter_desc\x27,
  2441. \x27final_candidate_label\x27,\x27final_candidate_title\x27,\x27final_candidate_desc\x27,
  2442. \x27final_candidate\x27,\x27final_recruiter\x27
  2443. ] %}
  2444. {% set t = {} %}
  2445. {% for k in _keys %}
  2446. {% set t = t|merge({(k): (\x27homepage.\x27 ~ k)|trans({}, \x27whr-public\x27)}) %}
  2447. {% endfor %}
  2448. {% block title %}{{ page.shortTitle }}{% endblock %}
  2449. {% block description %}{{ page.shortDescription }}{% endblock %}
  2450. {% block robots %}{{ page.robots }}{% endblock %}
  2451. {% block canonical %}{% include \"/vitrine/lexend/components/languages/canonical_classic.html.twig\" %}{% endblock %}
  2452. {% block css %}
  2453. {{ parent() }}
  2454. <style>
  2455. :root{
  2456. --wr-bg:#FBFCFE;
  2457. --wr-bg-2:#F4F6FB;
  2458. --wr-card:#FFFFFF;
  2459. --wr-violet:#8A63C1;
  2460. --wr-violet-2:#A98AD3;
  2461. --wr-violet-soft:#F2EDFA;
  2462. --wr-violet-softer:#F8F4FD;
  2463. --wr-violet-dark:#6B47A6;
  2464. --wr-ink:#1E1B2E;
  2465. --wr-ink-2:#374151;
  2466. --wr-muted:#6B7280;
  2467. --wr-muted-2:#9CA3AF;
  2468. --wr-line:#EEF1F7;
  2469. --wr-line-2:#E5E9F0;
  2470. --wr-shadow:0 1px 2px rgba(30,27,46,.04),0 4px 16px rgba(30,27,46,.04);
  2471. --wr-shadow-hover:0 4px 8px rgba(138,99,192,.08),0 12px 32px rgba(138,99,192,.1);
  2472. /* Accents colorés pour les logos d\x27offres (lettres) */
  2473. --wr-acc-yellow:#FEF3C7; --wr-acc-yellow-fg:#B45309;
  2474. --wr-acc-green:#D1FAE5; --wr-acc-green-fg:#047857;
  2475. --wr-acc-pink:#FCE7F3; --wr-acc-pink-fg:#BE185D;
  2476. --wr-acc-blue:#DBEAFE; --wr-acc-blue-fg:#1E40AF;
  2477. --wr-acc-orange:#FED7AA; --wr-acc-orange-fg:#C2410C;
  2478. --wr-acc-violet:#EDE9FE; --wr-acc-violet-fg:#6D28D9;
  2479. --wr-acc-cyan:#CFFAFE; --wr-acc-cyan-fg:#0E7490;
  2480. }
  2481. /* ═══════════════════════════════════════════════════════════════════
  2482. PLEINE LARGEUR — On retire la réservation d\x27espace de la sidebar droite
  2483. ═══════════════════════════════════════════════════════════════════ */
  2484. body .main-content.right-chat-active{padding-right:0!important}
  2485. body .main-content{padding-right:0!important}
  2486. body .right-chat{display:none!important}
  2487. body .middle-sidebar-bottom .middle-sidebar-left{padding-right:0!important;max-width:none!important;width:100%!important}
  2488. body .middle-sidebar-bottom{max-width:none!important}
  2489. .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}
  2490. @media(max-width:991px){.wr{margin:0 -15px}}
  2491. .wr *{box-sizing:border-box}
  2492. .wr a{color:inherit;text-decoration:none}
  2493. /* ═══════════════════════════════════════════════════════════════════
  2494. SECTIONS GENERIC — Fond UNIFIÉ partout (pas d\x27alternance)
  2495. ═══════════════════════════════════════════════════════════════════ */
  2496. .wr-section{padding:80px 32px;background:var(--wr-bg);position:relative}
  2497. .wr-section--tight{padding:48px 32px}
  2498. @media(max-width:768px){.wr-section{padding:56px 20px}.wr-section--tight{padding:36px 20px}}
  2499. /* Filet décoratif au lieu d\x27un changement de couleur */
  2500. .wr-section + .wr-section::before{
  2501. content:\"\";
  2502. position:absolute;top:0;left:50%;transform:translateX(-50%);
  2503. width:80px;height:1px;
  2504. background:linear-gradient(90deg,transparent,var(--wr-line-2),transparent);
  2505. }
  2506. .wr-container{max-width:1200px;margin:0 auto;position:relative}
  2507. /* ═══ Eyebrow ═══ */
  2508. .wr-eyebrow{
  2509. display:inline-flex;align-items:center;gap:8px;
  2510. padding:6px 14px;border-radius:100px;
  2511. background:var(--wr-violet-soft);
  2512. color:var(--wr-violet-dark);
  2513. font-size:11.5px;font-weight:600;
  2514. text-transform:uppercase;letter-spacing:.12em;
  2515. margin-bottom:22px;
  2516. }
  2517. .wr-eyebrow-dot{width:6px;height:6px;border-radius:50%;background:var(--wr-violet);animation:wrPulse 2.4s ease-in-out infinite}
  2518. @keyframes wrPulse{0%,100%{opacity:.5;transform:scale(1)}50%{opacity:1;transform:scale(1.3)}}
  2519. /* ═══ Titres ═══ */
  2520. .wr-title{
  2521. font-family:inherit;
  2522. font-weight:700;
  2523. font-size:28px;line-height:1.15;letter-spacing:-0.025em;
  2524. color:var(--wr-ink);
  2525. margin:0 auto 16px;
  2526. max-width:1200px;
  2527. }
  2528. @media(min-width:768px){.wr-title{font-size:34px}}
  2529. @media(min-width:1024px){.wr-title{font-size:40px}}
  2530. .wr-title--sm{font-size:24px}
  2531. @media(min-width:768px){.wr-title--sm{font-size:30px}}
  2532. .wr-title em{font-style:normal;font-weight:700;color:var(--wr-violet)}
  2533. .wr-lede{
  2534. font-size:17px;line-height:1.55;font-weight:400;
  2535. color:var(--wr-ink-2);
  2536. margin:0 auto;max-width:680px;
  2537. }
  2538. .wr-section-head{text-align:center;margin-bottom:56px}
  2539. /* ═══════════════════════════════════════════════════════════════════
  2540. HERO — Style soft, recherche dashboard, boutons pleins
  2541. ═══════════════════════════════════════════════════════════════════ */
  2542. @keyframes wrFadeUp{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}
  2543. @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)}}
  2544. /* ═══ Reveal au scroll (Intersection Observer ajoute .is-revealed) ═══ */
  2545. .reveal{opacity:0;transform:translateY(24px);transition:opacity .8s cubic-bezier(.2,.7,.2,1),transform .8s cubic-bezier(.2,.7,.2,1)}
  2546. .reveal.is-revealed{opacity:1;transform:translateY(0)}
  2547. .reveal--left{transform:translateX(-32px) translateY(0)}
  2548. .reveal--left.is-revealed{transform:translateX(0)}
  2549. .reveal--right{transform:translateX(32px) translateY(0)}
  2550. .reveal--right.is-revealed{transform:translateX(0)}
  2551. .reveal--scale{transform:scale(.96);opacity:0}
  2552. .reveal--scale.is-revealed{transform:scale(1);opacity:1}
  2553. .reveal[data-reveal-delay=\"1\"]{transition-delay:.08s}
  2554. .reveal[data-reveal-delay=\"2\"]{transition-delay:.16s}
  2555. .reveal[data-reveal-delay=\"3\"]{transition-delay:.24s}
  2556. .reveal[data-reveal-delay=\"4\"]{transition-delay:.32s}
  2557. @media(prefers-reduced-motion:reduce){.reveal{opacity:1!important;transform:none!important;transition:none!important}}
  2558. .hero{
  2559. position:relative;
  2560. background:var(--wr-bg);
  2561. padding:24px 32px 0;
  2562. overflow:hidden;
  2563. }
  2564. @media(max-width:768px){.hero{padding:18px 18px 0}}
  2565. /* Décor : 2 blobs très flous violet pâle */
  2566. .hero::before{
  2567. content:\"\";position:absolute;
  2568. top:-260px;right:-180px;width:560px;height:560px;
  2569. background:radial-gradient(circle,rgba(138,99,192,.14) 0%,transparent 65%);
  2570. pointer-events:none;filter:blur(50px);
  2571. }
  2572. .hero::after{
  2573. content:\"\";position:absolute;
  2574. top:120px;left:-180px;width:480px;height:480px;
  2575. background:radial-gradient(circle,rgba(138,99,192,.09) 0%,transparent 65%);
  2576. pointer-events:none;filter:blur(50px);
  2577. }
  2578. .hero-inner{position:relative;z-index:2;max-width:1200px;margin:0 auto;text-align:center}
  2579. /* ═══ Eyebrow ═══ */
  2580. .hero-badge{
  2581. display:inline-flex;align-items:center;gap:8px;
  2582. padding:7px 16px;border-radius:100px;
  2583. background:var(--wr-violet-soft);
  2584. color:var(--wr-violet-dark);
  2585. font-size:12px;font-weight:600;
  2586. text-transform:uppercase;letter-spacing:.1em;
  2587. margin-bottom:10px;
  2588. opacity:0;transform:translateY(8px);
  2589. animation:wrFadeUp .8s ease forwards;
  2590. }
  2591. .hero-badge-dot{width:6px;height:6px;border-radius:50%;background:var(--wr-violet);animation:wrPulse2 2s ease infinite}
  2592. /* ═══ Titre — 57px desktop, plein largeur conteneur ═══ */
  2593. .hero-title{
  2594. font-weight:700;
  2595. font-size:24px;line-height:1.05;letter-spacing:-0.04em;
  2596. color:var(--wr-ink);
  2597. margin:0 auto 12px;
  2598. width:100%;max-width:1200px;
  2599. opacity:0;transform:translateY(12px);
  2600. animation:wrFadeUp .9s cubic-bezier(.2,.7,.2,1) .15s forwards;
  2601. }
  2602. @media(min-width:768px){.hero-title{font-size:40px;letter-spacing:-0.045em}}
  2603. @media(min-width:1100px){.hero-title{font-size:57px;letter-spacing:-0.045em}}
  2604. .hero-title-accent{
  2605. color:var(--wr-violet);
  2606. }
  2607. .hero-lede{
  2608. font-size:15px;line-height:1.5;color:var(--wr-ink-2);font-weight:400;
  2609. margin:0 auto 16px;max-width:680px;
  2610. opacity:0;animation:wrFadeUp .9s ease .4s forwards;
  2611. }
  2612. @media(min-width:768px){.hero-lede{font-size:17px}}
  2613. .hero-lede-accent{color:var(--wr-violet);font-weight:600}
  2614. /* ═══ Recherche — pleine largeur (alignée sur la liste 1200px) ═══ */
  2615. .hero-search-wrap{
  2616. max-width:1200px;margin:0 auto 12px;
  2617. opacity:0;animation:wrFadeUp .9s ease .55s forwards;
  2618. position:relative;z-index:5;
  2619. }
  2620. .hero-search{
  2621. background:var(--wr-card);
  2622. border-radius:14px;
  2623. box-shadow:0 0 20px 0 rgba(0,0,0,0.05),0 16px 40px rgba(138,99,192,.06);
  2624. padding:10px;
  2625. position:relative;
  2626. }
  2627. .hero-search-inner{
  2628. display:flex;align-items:center;gap:10px;
  2629. padding:10px 14px;border-radius:10px;
  2630. background:#F9FAFB;border:1px solid #E5E7EB;
  2631. transition:border-color .2s,background .2s;
  2632. }
  2633. .hero-search-inner:focus-within{
  2634. border-color:rgba(138,99,192,.4);
  2635. background:#fff;
  2636. }
  2637. .hero-search-icon{color:var(--wr-muted-2);display:flex;flex-shrink:0}
  2638. .hero-search-icon svg{width:16px;height:16px}
  2639. .hero-search-input{
  2640. flex:1;border:0;outline:0;background:transparent;
  2641. font-size:14.5px;font-family:inherit;color:var(--wr-ink);
  2642. padding:6px 0;min-width:0;
  2643. }
  2644. .hero-search-input::placeholder{color:var(--wr-muted-2)}
  2645. .hero-search-clear{
  2646. background:none;border:0;color:var(--wr-muted-2);cursor:pointer;
  2647. padding:4px;display:none;font-family:inherit;
  2648. border-radius:6px;transition:background .15s,color .15s;
  2649. }
  2650. .hero-search-clear:hover{background:var(--wr-violet-soft);color:var(--wr-violet)}
  2651. .hero-search-clear.is-visible{display:flex;align-items:center}
  2652. .hero-search-clear svg{width:14px;height:14px}
  2653. .hero-search-kbd{
  2654. display:none;align-items:center;
  2655. padding:3px 8px;background:#fff;border:1px solid #E5E7EB;border-radius:6px;
  2656. font-size:10.5px;font-weight:600;color:var(--wr-muted);
  2657. font-family:inherit;letter-spacing:.02em;white-space:nowrap;flex-shrink:0;
  2658. }
  2659. .hero-search-inner:focus-within .hero-search-kbd{display:inline-flex}
  2660. /* ═══ États de la liste de jobs (header, empty, loading) ═══ */
  2661. .hero-jobs-header{
  2662. display:flex;align-items:center;justify-content:space-between;gap:10px;
  2663. padding:14px 22px 10px;
  2664. border-bottom:1px solid var(--wr-line);
  2665. margin-bottom:4px;
  2666. }
  2667. @media(max-width:540px){.hero-jobs-header{padding:12px 16px 8px}}
  2668. .hero-jobs-count{
  2669. font-size:11.5px;color:var(--wr-muted);
  2670. text-transform:uppercase;letter-spacing:.08em;font-weight:600;
  2671. }
  2672. .hero-jobs-count strong{color:var(--wr-violet);font-weight:800;font-size:13px;margin-right:4px}
  2673. .hero-jobs-link{
  2674. font-size:11px;font-weight:700;
  2675. color:var(--wr-violet);
  2676. text-transform:uppercase;letter-spacing:.08em;
  2677. text-decoration:none;
  2678. display:inline-flex;align-items:center;gap:5px;
  2679. transition:color .15s,transform .15s;
  2680. }
  2681. .hero-jobs-link:hover{color:var(--wr-violet-dark);text-decoration:none;transform:translateX(2px)}
  2682. .hero-jobs-link svg{width:11px;height:11px}
  2683. .hero-jobs-empty{text-align:center;padding:48px 20px;color:var(--wr-muted)}
  2684. .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}
  2685. .hero-jobs-empty-icon svg{width:22px;height:22px}
  2686. .hero-jobs-empty-title{font-weight:600;font-size:14px;color:var(--wr-ink);margin:0 0 4px}
  2687. .hero-jobs-empty-hint{font-size:13px;margin:0;color:var(--wr-muted)}
  2688. .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}
  2689. .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}
  2690. @keyframes wrSpin{to{transform:rotate(360deg)}}
  2691. /* ═══ Pills \"Populaire\" sous la recherche ═══ */
  2692. .hero-popular{
  2693. display:flex;align-items:center;justify-content:center;gap:6px;flex-wrap:wrap;
  2694. margin-bottom:18px;
  2695. opacity:0;animation:wrFadeUp .9s ease .7s forwards;
  2696. }
  2697. .hero-popular-label{
  2698. font-size:11px;font-weight:600;color:var(--wr-muted);
  2699. text-transform:uppercase;letter-spacing:.06em;
  2700. margin-right:4px;
  2701. }
  2702. .hero-popular-pill{
  2703. display:inline-flex;align-items:center;gap:5px;
  2704. padding:6px 12px;border-radius:100px;
  2705. background:var(--wr-violet-soft);
  2706. color:var(--wr-violet);
  2707. font-size:12.5px;font-weight:500;font-family:inherit;
  2708. text-decoration:none;cursor:pointer;
  2709. border:1px solid transparent;
  2710. transition:background .15s,border-color .15s,transform .15s,color .15s;
  2711. }
  2712. .hero-popular-pill:hover{
  2713. background:#EDE9FE;
  2714. border-color:rgba(138,99,192,.2);
  2715. transform:translateY(-1px);
  2716. color:var(--wr-violet);
  2717. text-decoration:none;
  2718. }
  2719. .hero-popular-pill.is-active{
  2720. background:var(--wr-violet);color:#fff;border-color:var(--wr-violet);
  2721. }
  2722. .hero-popular-pill.is-active:hover{background:var(--wr-violet-dark);color:#fff}
  2723. .hero-popular-pill-icon{font-size:13px;line-height:1}
  2724. /* ═══ CTA hero (boutons inscription + connexion pour anonymes) ═══ */
  2725. .hero-cta{
  2726. display:flex;align-items:center;justify-content:center;gap:12px;flex-wrap:wrap;
  2727. margin:24px 0 8px;
  2728. opacity:0;animation:wrFadeUp .9s ease 1.1s forwards;
  2729. }
  2730. .hero-cta-btn,
  2731. .hero-cta-btn:link,
  2732. .hero-cta-btn:visited,
  2733. .hero-cta-btn:hover,
  2734. .hero-cta-btn:focus,
  2735. .hero-cta-btn:active{
  2736. color:#fff !important;
  2737. text-decoration:none !important;
  2738. }
  2739. .hero-cta-btn{
  2740. display:inline-flex;align-items:center;gap:8px;
  2741. padding:11px 20px;border-radius:11px;
  2742. font-size:13.5px;font-weight:700;font-family:inherit;
  2743. line-height:1;
  2744. background:var(--wr-violet);border:1px solid var(--wr-violet);
  2745. box-shadow:0 4px 14px rgba(138,99,193,.32);
  2746. transition:background .15s,border-color .15s,transform .15s,box-shadow .15s;
  2747. }
  2748. .hero-cta-btn:hover{
  2749. background:var(--wr-violet-dark);border-color:var(--wr-violet-dark);
  2750. transform:translateY(-2px);
  2751. box-shadow:0 6px 20px rgba(138,99,193,.4);
  2752. }
  2753. .hero-cta-btn svg{width:15px;height:15px;flex-shrink:0;stroke:#fff !important;color:#fff !important}
  2754. .hero-cta-btn span{color:#fff !important}
  2755. @media(max-width:540px){.hero-cta{flex-direction:column;align-items:stretch}.hero-cta-btn{justify-content:center}}
  2756. /* ═══ Boutons stores — VIOLET PLEIN BLANC ═══ */
  2757. .hero-stores{
  2758. display:flex;align-items:center;justify-content:center;gap:12px;flex-wrap:wrap;
  2759. margin-bottom:48px;
  2760. opacity:0;animation:wrFadeUp .9s ease .85s forwards;
  2761. }
  2762. .hero-store-btn{
  2763. display:inline-flex;align-items:center;gap:10px;
  2764. padding:13px 24px;border-radius:12px;
  2765. background:var(--wr-violet);
  2766. border:0;
  2767. color:#fff;
  2768. font-size:14px;font-weight:600;
  2769. text-decoration:none;
  2770. transition:background .15s,transform .15s,box-shadow .15s;
  2771. box-shadow:0 4px 12px rgba(138,99,192,.3);
  2772. }
  2773. .hero-store-btn:hover{
  2774. background:var(--wr-violet-dark);
  2775. color:#fff;
  2776. transform:translateY(-2px);
  2777. box-shadow:0 8px 22px rgba(138,99,192,.4);
  2778. text-decoration:none;
  2779. }
  2780. .hero-store-btn-icon{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px}
  2781. .hero-store-btn-icon svg{width:18px;height:18px}
  2782. @media(max-width:540px){.hero-stores{flex-direction:column;align-items:stretch;gap:10px}.hero-store-btn{justify-content:center}}
  2783. /* ═══════════════════════════════════════════════════════════════════
  2784. LISTE PAR DÉFAUT SOUS LE HERO (offres récentes)
  2785. ═══════════════════════════════════════════════════════════════════ */
  2786. .hero-default-jobs{
  2787. position:relative;z-index:2;
  2788. max-width:1200px;margin:0 auto;
  2789. background:var(--wr-card);
  2790. border:1px solid var(--wr-line);
  2791. border-radius:18px;
  2792. padding:8px 0;
  2793. box-shadow:var(--wr-shadow);
  2794. opacity:0;animation:wrFadeUp .9s ease 1s forwards;
  2795. text-align:left;
  2796. }
  2797. .hero-default-job{
  2798. display:flex;align-items:center;gap:16px;
  2799. padding:14px 22px;
  2800. text-decoration:none;color:inherit;
  2801. border-bottom:1px solid var(--wr-line);
  2802. transition:background .15s;
  2803. }
  2804. .hero-default-job:last-child{border-bottom:0}
  2805. .hero-default-job:hover{background:var(--wr-violet-softer);text-decoration:none;color:inherit}
  2806. .hero-default-job-logo{
  2807. width:42px;height:42px;border-radius:11px;flex-shrink:0;
  2808. display:flex;align-items:center;justify-content:center;
  2809. font-weight:700;font-size:16px;overflow:hidden;
  2810. }
  2811. .hero-default-job-logo img{width:100%;height:100%;object-fit:cover}
  2812. /* 7 variantes de couleurs cyclées par index */
  2813. .hero-default-job:nth-child(7n+1) .hero-default-job-logo{background:var(--wr-acc-yellow);color:var(--wr-acc-yellow-fg)}
  2814. .hero-default-job:nth-child(7n+2) .hero-default-job-logo{background:var(--wr-acc-green);color:var(--wr-acc-green-fg)}
  2815. .hero-default-job:nth-child(7n+3) .hero-default-job-logo{background:var(--wr-acc-pink);color:var(--wr-acc-pink-fg)}
  2816. .hero-default-job:nth-child(7n+4) .hero-default-job-logo{background:var(--wr-acc-blue);color:var(--wr-acc-blue-fg)}
  2817. .hero-default-job:nth-child(7n+5) .hero-default-job-logo{background:var(--wr-acc-orange);color:var(--wr-acc-orange-fg)}
  2818. .hero-default-job:nth-child(7n+6) .hero-default-job-logo{background:var(--wr-acc-violet);color:var(--wr-acc-violet-fg)}
  2819. .hero-default-job:nth-child(7n+7) .hero-default-job-logo{background:var(--wr-acc-cyan);color:var(--wr-acc-cyan-fg)}
  2820. .hero-default-job-info{flex:1;min-width:0}
  2821. .hero-default-job-title{
  2822. font-weight:600;font-size:14.5px;color:var(--wr-ink);
  2823. margin:0 0 2px;line-height:1.3;
  2824. white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
  2825. }
  2826. .hero-default-job-meta{
  2827. font-size:12.5px;color:var(--wr-muted);margin:0;
  2828. white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
  2829. display:flex;align-items:center;gap:8px;
  2830. }
  2831. .hero-default-job-meta-sep{display:inline-block;width:3px;height:3px;border-radius:50%;background:var(--wr-muted-2);flex-shrink:0}
  2832. .hero-default-job-arrow{flex-shrink:0;color:var(--wr-muted-2);transition:color .15s,transform .15s}
  2833. .hero-default-job-arrow svg{width:15px;height:15px}
  2834. .hero-default-job:hover .hero-default-job-arrow{color:var(--wr-violet);transform:translateX(3px)}
  2835. @media(max-width:768px){
  2836. .hero-default-jobs{margin:0 -18px;border-radius:14px}
  2837. .hero-default-job{padding:12px 16px;gap:12px}
  2838. .hero-default-job-logo{width:36px;height:36px;font-size:13px}
  2839. .hero-default-job-title{font-size:13.5px}
  2840. .hero-default-job-meta{font-size:11.5px;gap:6px;flex-wrap:wrap;white-space:normal}
  2841. }
  2842. /* ═══════════════════════════════════════════════════════════════════
  2843. SECTION : 3 PARCOURS
  2844. ═══════════════════════════════════════════════════════════════════ */
  2845. .paths-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}
  2846. @media(max-width:991px){.paths-grid{grid-template-columns:1fr;gap:14px}}
  2847. .path-card{
  2848. position:relative;
  2849. background:var(--wr-card);
  2850. border:1px solid var(--wr-line);
  2851. border-radius:20px;padding:28px;
  2852. display:flex;flex-direction:column;
  2853. transition:transform .25s ease,box-shadow .25s ease,border-color .25s ease;
  2854. box-shadow:var(--wr-shadow);
  2855. }
  2856. .path-card:hover{transform:translateY(-4px);box-shadow:var(--wr-shadow-hover);border-color:var(--wr-violet-2)}
  2857. .path-card-illu{
  2858. width:64px;height:64px;border-radius:16px;
  2859. background:var(--wr-violet-soft);color:var(--wr-violet);
  2860. display:flex;align-items:center;justify-content:center;
  2861. margin-bottom:22px;
  2862. }
  2863. .path-card-illu svg{width:30px;height:30px}
  2864. .path-card-label{
  2865. display:inline-block;
  2866. font-size:11px;font-weight:600;
  2867. color:var(--wr-violet-dark);text-transform:uppercase;letter-spacing:.1em;
  2868. margin-bottom:10px;align-self:flex-start;
  2869. }
  2870. .path-card-title{
  2871. font-weight:500;font-size:22px;line-height:1.25;letter-spacing:-0.015em;
  2872. color:var(--wr-ink);margin:0 0 10px;
  2873. }
  2874. .path-card-desc{
  2875. font-size:14px;line-height:1.6;color:var(--wr-muted);
  2876. margin:0 0 22px;flex:1;
  2877. }
  2878. .path-card-cta{
  2879. display:inline-flex;align-items:center;justify-content:center;gap:6px;
  2880. background:var(--wr-violet);color:#fff;
  2881. padding:12px 18px;border-radius:11px;
  2882. font-size:13px;font-weight:600;
  2883. align-self:stretch;
  2884. transition:background .15s,transform .15s,box-shadow .15s;
  2885. box-shadow:0 2px 8px rgba(138,99,192,.2);
  2886. }
  2887. .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)}
  2888. .path-card-cta svg{width:13px;height:13px;transition:transform .15s}
  2889. .path-card-cta:hover svg{transform:translateX(3px)}
  2890. /* ═══════════════════════════════════════════════════════════════════
  2891. COMMENT ÇA MARCHE — Card crème englobante avec 3 sous-cards
  2892. ═══════════════════════════════════════════════════════════════════ */
  2893. .how-card{
  2894. background:#F4ECE1;
  2895. border-radius:24px;
  2896. padding:32px 24px;
  2897. display:grid;grid-template-columns:repeat(3,1fr);gap:24px;
  2898. position:relative;
  2899. }
  2900. @media(max-width:991px){.how-card{grid-template-columns:1fr;gap:8px;padding:24px 16px}}
  2901. @media(min-width:992px){
  2902. /* Séparateurs verticaux entre les 3 cellules */
  2903. .how-card .how-step + .how-step{border-left:1px solid rgba(28,25,22,.08)}
  2904. }
  2905. .how-step{
  2906. display:flex;flex-direction:column;align-items:center;text-align:center;
  2907. padding:16px 20px;
  2908. gap:16px;
  2909. }
  2910. .how-step-illu{
  2911. width:100%;max-width:280px;aspect-ratio:1/1;
  2912. border-radius:16px;
  2913. background:rgba(255,255,255,.5);
  2914. display:flex;align-items:center;justify-content:center;
  2915. margin-bottom:4px;
  2916. overflow:hidden;
  2917. }
  2918. .how-step-illu img{width:100%;height:100%;object-fit:contain;display:block}
  2919. .how-step-illu svg{width:55%;height:55%;opacity:.85}
  2920. .how-step-title{
  2921. font-weight:700;font-size:18px;line-height:1.3;letter-spacing:-0.01em;
  2922. color:var(--wr-ink);margin:0;
  2923. }
  2924. @media(min-width:992px){.how-step-title{font-size:20px}}
  2925. .how-step-desc{
  2926. font-size:14px;line-height:1.55;color:var(--wr-ink-2);
  2927. margin:0;max-width:320px;
  2928. }
  2929. /* ═══════════════════════════════════════════════════════════════════
  2930. FEATURES 01-04 — Splits alternés image/texte avec témoignages
  2931. ═══════════════════════════════════════════════════════════════════ */
  2932. .feat-block{
  2933. display:grid;grid-template-columns:1fr 1fr;gap:48px;align-items:center;
  2934. margin-bottom:64px;
  2935. }
  2936. .feat-block:last-child{margin-bottom:0}
  2937. @media(max-width:991px){
  2938. .feat-block{grid-template-columns:1fr;gap:24px;margin-bottom:48px}
  2939. }
  2940. /* Alterner : 01 illu droite, 02 illu gauche, 03 illu droite, 04 illu gauche */
  2941. .feat-block:nth-child(odd) .feat-illu{order:2}
  2942. .feat-block:nth-child(odd) .feat-content{order:1}
  2943. .feat-block:nth-child(even) .feat-illu{order:1}
  2944. .feat-block:nth-child(even) .feat-content{order:2}
  2945. @media(max-width:991px){
  2946. .feat-block .feat-illu{order:1}
  2947. .feat-block .feat-content{order:2}
  2948. }
  2949. .feat-illu{
  2950. background:#F5EDE3;
  2951. border-radius:20px;
  2952. aspect-ratio:1/1;
  2953. display:flex;align-items:center;justify-content:center;
  2954. color:var(--wr-violet);
  2955. overflow:hidden;
  2956. position:relative;
  2957. }
  2958. .feat-illu img{width:100%;height:100%;object-fit:contain;display:block}
  2959. .feat-illu svg{width:50%;height:50%;opacity:.85}
  2960. .feat-content{display:flex;flex-direction:column;gap:18px}
  2961. .feat-label{
  2962. font-size:30px;font-weight:800;
  2963. color:var(--wr-ink);
  2964. letter-spacing:-0.02em;
  2965. margin:0;line-height:1;
  2966. }
  2967. .feat-title{
  2968. font-weight:700;font-size:24px;line-height:1.2;letter-spacing:-0.02em;
  2969. color:var(--wr-ink);margin:0;
  2970. }
  2971. @media(min-width:768px){.feat-title{font-size:28px}}
  2972. @media(min-width:1100px){.feat-title{font-size:30px}}
  2973. .feat-desc{
  2974. display:flex;flex-direction:column;gap:14px;
  2975. }
  2976. .feat-desc p{
  2977. font-size:15px;line-height:1.6;color:var(--wr-ink-2);
  2978. margin:0;opacity:.85;
  2979. }
  2980. @media(min-width:1100px){.feat-desc p{font-size:16px}}
  2981. .feat-desc strong{color:var(--wr-ink);font-weight:700;opacity:1}
  2982. .feat-quote{
  2983. background:var(--wr-card);
  2984. border:1px solid var(--wr-line);
  2985. border-radius:14px;
  2986. padding:18px 20px;
  2987. display:flex;flex-direction:column;gap:10px;
  2988. margin-top:8px;
  2989. }
  2990. .feat-quote-text{
  2991. font-size:14px;line-height:1.55;color:var(--wr-ink-2);
  2992. margin:0;font-style:italic;
  2993. }
  2994. .feat-quote-author{
  2995. display:flex;flex-direction:column;
  2996. }
  2997. .feat-quote-name{font-size:13px;font-weight:700;color:var(--wr-ink);margin:0}
  2998. .feat-quote-role{font-size:12px;color:var(--wr-muted);margin:0}
  2999. /* ═══════════════════════════════════════════════════════════════════
  3000. MATCH
  3001. ═══════════════════════════════════════════════════════════════════ */
  3002. .match-grid{display:grid;grid-template-columns:1.1fr .9fr;gap:60px;align-items:center}
  3003. @media(max-width:991px){.match-grid{grid-template-columns:1fr;gap:40px}}
  3004. .match-text .wr-title{margin-left:0;text-align:left}
  3005. .match-text .wr-lede{margin-left:0;text-align:left}
  3006. .match-text .wr-eyebrow{margin-bottom:20px}
  3007. .match-features{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-top:32px}
  3008. @media(max-width:540px){.match-features{grid-template-columns:1fr}}
  3009. .match-feature{
  3010. background:var(--wr-card);border:1px solid var(--wr-line);
  3011. border-radius:14px;padding:18px;
  3012. transition:transform .15s,border-color .15s,box-shadow .15s;
  3013. }
  3014. .match-feature:hover{transform:translateY(-2px);border-color:var(--wr-violet-soft);box-shadow:var(--wr-shadow)}
  3015. .match-feature-icon{
  3016. width:34px;height:34px;border-radius:10px;
  3017. background:var(--wr-violet-soft);color:var(--wr-violet);
  3018. display:inline-flex;align-items:center;justify-content:center;margin-bottom:12px;
  3019. }
  3020. .match-feature-icon svg{width:16px;height:16px}
  3021. .match-feature-title{font-weight:600;font-size:14px;line-height:1.3;color:var(--wr-ink);margin:0 0 5px}
  3022. .match-feature-desc{font-size:12.5px;line-height:1.5;color:var(--wr-muted);margin:0}
  3023. .match-visual{position:relative;display:flex;justify-content:center;align-items:center;padding:40px 0}
  3024. .match-stack{position:relative;width:100%;max-width:340px;height:340px}
  3025. .match-stack-card{
  3026. position:absolute;
  3027. background:var(--wr-card);border:1px solid var(--wr-line);
  3028. border-radius:16px;padding:14px;
  3029. display:flex;align-items:center;gap:12px;
  3030. box-shadow:var(--wr-shadow);width:100%;
  3031. transition:transform .3s ease,box-shadow .3s ease;
  3032. cursor:pointer;
  3033. }
  3034. .match-stack-card:hover{
  3035. transform:translateY(-4px) rotate(0deg)!important;
  3036. box-shadow:0 20px 50px rgba(138,99,192,.22)!important;
  3037. z-index:10!important;
  3038. }
  3039. .match-stack-card:nth-child(1){top:0;transform:rotate(-6deg) translateX(-10px);z-index:1;animation:wrFloat1 6s ease-in-out infinite}
  3040. .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}
  3041. .match-stack-card:nth-child(3){top:156px;transform:rotate(-3deg) translateX(8px);z-index:2;animation:wrFloat3 6s ease-in-out -4s infinite}
  3042. .match-stack-card:nth-child(4){top:234px;left:20px;transform:rotate(4deg);z-index:1;animation:wrFloat4 6s ease-in-out -1s infinite}
  3043. @keyframes wrFloat1{0%,100%{transform:rotate(-6deg) translate(-10px,0)}50%{transform:rotate(-6deg) translate(-10px,-8px)}}
  3044. @keyframes wrFloat2{0%,100%{transform:rotate(2deg) translate(0,0)}50%{transform:rotate(2deg) translate(0,-6px)}}
  3045. @keyframes wrFloat3{0%,100%{transform:rotate(-3deg) translate(8px,0)}50%{transform:rotate(-3deg) translate(8px,-7px)}}
  3046. @keyframes wrFloat4{0%,100%{transform:rotate(4deg) translate(0,0)}50%{transform:rotate(4deg) translate(0,-5px)}}
  3047. .match-stack-logo{
  3048. width:38px;height:38px;border-radius:10px;
  3049. background:var(--wr-violet-soft);color:var(--wr-violet);
  3050. display:flex;align-items:center;justify-content:center;
  3051. font-weight:700;font-size:14px;flex-shrink:0;
  3052. }
  3053. .match-stack-info{flex:1;min-width:0}
  3054. .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}
  3055. .match-stack-meta{font-size:11px;color:var(--wr-muted);margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  3056. .match-stack-heart{
  3057. width:28px;height:28px;border-radius:50%;
  3058. background:#FEE2E2;color:#EF4444;
  3059. display:flex;align-items:center;justify-content:center;flex-shrink:0;
  3060. animation:wrHeartbeat 1.6s ease-in-out infinite;
  3061. }
  3062. .match-stack-card:nth-child(1) .match-stack-heart{animation-delay:0s}
  3063. .match-stack-card:nth-child(2) .match-stack-heart{animation-delay:.4s}
  3064. .match-stack-card:nth-child(3) .match-stack-heart{animation-delay:.8s}
  3065. .match-stack-card:nth-child(4) .match-stack-heart{animation-delay:1.2s}
  3066. .match-stack-heart svg{width:13px;height:13px;fill:currentColor}
  3067. @keyframes wrHeartbeat{
  3068. 0%,100%{transform:scale(1);box-shadow:0 0 0 0 rgba(239,68,68,.4)}
  3069. 10%{transform:scale(1.18);box-shadow:0 0 0 0 rgba(239,68,68,.4)}
  3070. 20%{transform:scale(1)}
  3071. 30%{transform:scale(1.12)}
  3072. 40%{transform:scale(1);box-shadow:0 0 0 10px rgba(239,68,68,0)}
  3073. 100%{box-shadow:0 0 0 0 rgba(239,68,68,0)}
  3074. }
  3075. /* ═══════════════════════════════════════════════════════════════════
  3076. SIGNUP FORM (entre feat 02 et 03)
  3077. ═══════════════════════════════════════════════════════════════════ */
  3078. .signup-card{
  3079. position:relative;
  3080. max-width:980px;margin:64px auto;
  3081. background:linear-gradient(135deg, #FFFFFF 0%, #FAF7FF 100%);
  3082. border:1px solid var(--wr-line);
  3083. border-radius:32px;
  3084. padding:48px 40px;
  3085. box-shadow:0 4px 12px rgba(30,27,46,.04), 0 24px 64px rgba(138,99,192,.1);
  3086. overflow:hidden;
  3087. }
  3088. @media(max-width:768px){.signup-card{padding:32px 22px;border-radius:24px;margin:48px auto}}
  3089. /* Décor : 2 blobs violet pâle dans les coins */
  3090. .signup-card::before{
  3091. content:\"\";position:absolute;
  3092. top:-120px;right:-120px;width:340px;height:340px;
  3093. background:radial-gradient(circle,rgba(138,99,192,.12) 0%,transparent 65%);
  3094. pointer-events:none;filter:blur(40px);
  3095. }
  3096. .signup-card::after{
  3097. content:\"\";position:absolute;
  3098. bottom:-100px;left:-80px;width:280px;height:280px;
  3099. background:radial-gradient(circle,rgba(138,99,192,.08) 0%,transparent 65%);
  3100. pointer-events:none;filter:blur(40px);
  3101. }
  3102. .signup-inner{position:relative;z-index:2;display:grid;grid-template-columns:1fr 1.2fr;gap:48px;align-items:center}
  3103. @media(max-width:880px){.signup-inner{grid-template-columns:1fr;gap:28px}}
  3104. .signup-text{display:flex;flex-direction:column;gap:14px}
  3105. .signup-eyebrow{
  3106. display:inline-flex;align-items:center;gap:8px;
  3107. padding:7px 14px;border-radius:100px;
  3108. background:var(--wr-violet-soft);color:var(--wr-violet-dark);
  3109. font-size:11.5px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;
  3110. align-self:flex-start;
  3111. }
  3112. .signup-title{
  3113. font-weight:700;font-size:28px;line-height:1.15;letter-spacing:-0.02em;
  3114. color:var(--wr-ink);margin:0;
  3115. }
  3116. @media(min-width:768px){.signup-title{font-size:34px}}
  3117. .signup-lede{font-size:15px;line-height:1.55;color:var(--wr-ink-2);margin:0;opacity:.85}
  3118. .signup-perks{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px}
  3119. .signup-perk{
  3120. display:inline-flex;align-items:center;gap:6px;
  3121. padding:6px 12px;border-radius:100px;
  3122. background:var(--wr-card);border:1px solid var(--wr-line-2);
  3123. font-size:12px;font-weight:600;color:var(--wr-ink-2);
  3124. }
  3125. .signup-perk svg{width:13px;height:13px;color:#10B981;stroke-width:3;flex-shrink:0}
  3126. .signup-form{
  3127. background:var(--wr-card);
  3128. border:1px solid var(--wr-line);
  3129. border-radius:20px;
  3130. padding:24px;
  3131. display:flex;flex-direction:column;gap:12px;
  3132. box-shadow:0 1px 2px rgba(30,27,46,.03);
  3133. }
  3134. .signup-form-error{
  3135. background:#FEF2F2;border:1px solid #FECACA;
  3136. color:#991B1B;
  3137. border-radius:12px;
  3138. padding:10px 14px;
  3139. font-size:13px;line-height:1.45;
  3140. margin:0;
  3141. }
  3142. .signup-row{display:grid;grid-template-columns:1fr 1fr;gap:10px}
  3143. @media(max-width:540px){.signup-row{grid-template-columns:1fr}}
  3144. .signup-field{display:flex;flex-direction:column;gap:0}
  3145. .signup-card .signup-form input[type=\"email\"],
  3146. .signup-card .signup-form input[type=\"password\"],
  3147. .signup-card .signup-form input[type=\"text\"]{
  3148. width:100%;
  3149. padding:13px 14px;
  3150. border:1px solid var(--wr-line-2);border-radius:11px;
  3151. background:#FAFBFD;
  3152. font-size:14px;font-family:inherit;color:var(--wr-ink);
  3153. outline:none;
  3154. transition:border-color .15s,background .15s,box-shadow .15s;
  3155. box-sizing:border-box;
  3156. }
  3157. .signup-card .signup-form input[type=\"email\"]:focus,
  3158. .signup-card .signup-form input[type=\"password\"]:focus,
  3159. .signup-card .signup-form input[type=\"text\"]:focus{
  3160. border-color:var(--wr-violet);background:#fff;
  3161. box-shadow:0 0 0 3px rgba(138,99,192,.12);
  3162. }
  3163. .signup-card .signup-form input::placeholder{color:var(--wr-muted-2)}
  3164. .signup-terms{
  3165. display:flex;align-items:flex-start;gap:10px;
  3166. font-size:12.5px;line-height:1.45;color:var(--wr-muted);
  3167. margin:4px 0 0;
  3168. }
  3169. .signup-card .signup-form input[type=\"checkbox\"]{
  3170. width:16px;height:16px;flex-shrink:0;margin-top:2px;accent-color:var(--wr-violet);cursor:pointer;
  3171. }
  3172. .signup-terms a{color:var(--wr-violet);font-weight:600;text-decoration:underline}
  3173. .signup-terms a:hover{color:var(--wr-violet-dark)}
  3174. .signup-recaptcha{margin:4px 0 0}
  3175. .signup-recaptcha > div{max-width:100%}
  3176. .signup-submit{
  3177. width:100%;
  3178. padding:14px 22px;border-radius:12px;
  3179. background:var(--wr-violet);color:#fff;border:0;
  3180. font-size:14.5px;font-weight:700;font-family:inherit;
  3181. cursor:pointer;
  3182. display:inline-flex;align-items:center;justify-content:center;gap:8px;
  3183. box-shadow:0 4px 14px rgba(138,99,192,.32);
  3184. transition:background .15s,transform .15s,box-shadow .15s;
  3185. margin-top:6px;
  3186. }
  3187. .signup-submit:hover{background:var(--wr-violet-dark);transform:translateY(-1px);box-shadow:0 6px 20px rgba(138,99,192,.4)}
  3188. .signup-submit svg{width:14px;height:14px;transition:transform .15s}
  3189. .signup-submit:hover svg{transform:translateX(3px)}
  3190. .signup-login{
  3191. text-align:center;font-size:13px;color:var(--wr-muted);margin:6px 0 0;
  3192. }
  3193. .signup-login a{color:var(--wr-violet);font-weight:600;text-decoration:none}
  3194. .signup-login a:hover{color:var(--wr-violet-dark);text-decoration:underline}
  3195. /* ═══════════════════════════════════════════════════════════════════
  3196. APPS
  3197. ═══════════════════════════════════════════════════════════════════ */
  3198. .apps-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}
  3199. @media(max-width:768px){.apps-grid{grid-template-columns:1fr}}
  3200. .app-card{
  3201. background:var(--wr-card);border:1px solid var(--wr-line);
  3202. border-radius:18px;padding:24px;
  3203. display:flex;flex-direction:column;align-items:flex-start;
  3204. transition:transform .2s,border-color .2s,box-shadow .2s;
  3205. }
  3206. .app-card:hover{transform:translateY(-3px);border-color:var(--wr-violet-2);box-shadow:var(--wr-shadow-hover);color:inherit;text-decoration:none}
  3207. .app-card-icon{
  3208. width:48px;height:48px;border-radius:14px;
  3209. background:var(--wr-violet-soft);color:var(--wr-violet);
  3210. display:inline-flex;align-items:center;justify-content:center;
  3211. margin-bottom:18px;
  3212. }
  3213. .app-card-icon svg{width:22px;height:22px}
  3214. .app-card-name{font-weight:500;font-size:18px;letter-spacing:-0.01em;color:var(--wr-ink);margin:0 0 6px}
  3215. .app-card-desc{font-size:13px;line-height:1.5;color:var(--wr-muted);margin:0 0 16px;flex:1}
  3216. .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}
  3217. .app-card-cta svg{width:11px;height:11px;transition:transform .15s}
  3218. .app-card:hover .app-card-cta svg{transform:translateX(3px)}
  3219. /* ═══════════════════════════════════════════════════════════════════
  3220. KEYWORDS
  3221. ═══════════════════════════════════════════════════════════════════ */
  3222. .keywords-list{display:flex;flex-wrap:wrap;gap:8px;justify-content:center;max-width:1200px;margin:0 auto}
  3223. .keyword-pill{
  3224. display:inline-flex;align-items:center;gap:8px;
  3225. padding:9px 16px;border-radius:100px;
  3226. background:var(--wr-card);border:1px solid var(--wr-line-2);
  3227. color:var(--wr-ink-2);
  3228. font-size:13.5px;font-weight:500;
  3229. transition:transform .15s,border-color .15s,background .15s,color .15s,box-shadow .15s;
  3230. }
  3231. .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)}
  3232. .keyword-pill-icon{font-size:14px;line-height:1}
  3233. /* ═══════════════════════════════════════════════════════════════════
  3234. OFFRES POPULAIRES
  3235. ═══════════════════════════════════════════════════════════════════ */
  3236. .listings-block{margin-bottom:32px}
  3237. .listings-block:last-child{margin-bottom:0}
  3238. .listings-block-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:14px;flex-wrap:wrap}
  3239. .listings-block-title{
  3240. display:inline-flex;align-items:center;gap:10px;
  3241. font-weight:500;font-size:18px;letter-spacing:-0.005em;
  3242. color:var(--wr-ink);margin:0;
  3243. }
  3244. .listings-block-icon{font-size:20px;line-height:1}
  3245. .listings-block-link{
  3246. display:inline-flex;align-items:center;gap:4px;
  3247. padding:6px 12px;border-radius:100px;
  3248. font-size:12px;font-weight:600;
  3249. color:var(--wr-violet);
  3250. text-transform:uppercase;letter-spacing:.06em;
  3251. border:1px solid var(--wr-violet-soft);
  3252. background:var(--wr-card);
  3253. transition:background .15s,border-color .15s,transform .15s;
  3254. }
  3255. .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)}
  3256. .listings-block-link svg{width:11px;height:11px}
  3257. .listings-jobs{display:grid;grid-template-columns:1fr 1fr;gap:10px}
  3258. @media(max-width:768px){.listings-jobs{grid-template-columns:1fr}}
  3259. .listing-job{
  3260. display:flex;align-items:center;gap:14px;
  3261. background:var(--wr-card);border:1px solid var(--wr-line);
  3262. border-radius:14px;padding:12px;
  3263. transition:transform .15s,border-color .15s,box-shadow .15s;
  3264. }
  3265. .listing-job:hover{transform:translateY(-2px);border-color:var(--wr-violet-soft);box-shadow:var(--wr-shadow);color:inherit;text-decoration:none}
  3266. .listing-job-logo{
  3267. width:42px;height:42px;border-radius:11px;flex-shrink:0;
  3268. background:var(--wr-violet-soft);color:var(--wr-violet);
  3269. display:flex;align-items:center;justify-content:center;
  3270. font-weight:700;font-size:14px;overflow:hidden;
  3271. }
  3272. .listing-job-logo img{width:100%;height:100%;object-fit:cover}
  3273. .listing-job-info{flex:1;min-width:0}
  3274. .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}
  3275. .listing-job-meta{font-size:11.5px;color:var(--wr-muted);margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  3276. .listing-job-arrow{flex-shrink:0;color:var(--wr-muted-2);transition:color .15s,transform .15s}
  3277. .listing-job-arrow svg{width:14px;height:14px}
  3278. .listing-job:hover .listing-job-arrow{color:var(--wr-violet);transform:translateX(2px)}
  3279. /* ═══════════════════════════════════════════════════════════════════
  3280. ARTICLES — Liste sans miniatures (style identique aux jobs-card)
  3281. ═══════════════════════════════════════════════════════════════════ */
  3282. .articles-list{display:flex;flex-direction:column;gap:10px;max-width:1200px;margin:0 auto}
  3283. .wr-article{
  3284. background:var(--wr-card);border-radius:14px;padding:14px;
  3285. box-shadow:0 0 16px 0 rgba(0,0,0,0.04);
  3286. display:flex;align-items:center;gap:14px;
  3287. text-decoration:none;color:inherit;
  3288. transition:transform .15s,box-shadow .2s;
  3289. }
  3290. .wr-article:hover{
  3291. transform:translateY(-1px);
  3292. box-shadow:0 4px 20px rgba(138,99,192,.1);
  3293. color:inherit;text-decoration:none;
  3294. }
  3295. .wr-article-logo{
  3296. width:50px;height:50px;border-radius:12px;flex-shrink:0;
  3297. background:linear-gradient(135deg,#EDE9FE,#DDD6FE);
  3298. display:flex;align-items:center;justify-content:center;
  3299. color:var(--wr-violet);overflow:hidden;
  3300. }
  3301. .wr-article-logo svg{width:24px;height:24px;opacity:.9}
  3302. .wr-article-info{flex:1;min-width:0}
  3303. .wr-article-title{
  3304. font-size:14px;font-weight:700;color:var(--wr-ink);
  3305. line-height:1.3;margin:0 0 4px;
  3306. white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
  3307. }
  3308. .wr-article-meta{
  3309. font-size:12px;color:var(--wr-muted);
  3310. white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
  3311. display:flex;align-items:center;gap:8px;margin:0;
  3312. }
  3313. .wr-article-meta-sep{display:inline-block;width:3px;height:3px;border-radius:50%;background:#D1D5DB;flex-shrink:0}
  3314. .wr-article-badge{
  3315. font-size:11px;font-weight:600;
  3316. color:var(--wr-violet);background:var(--wr-violet-soft);
  3317. padding:3px 9px;border-radius:100px;
  3318. white-space:nowrap;flex-shrink:0;
  3319. text-transform:uppercase;letter-spacing:.04em;
  3320. }
  3321. .wr-article-arrow{flex-shrink:0;color:var(--wr-muted-2);transition:color .15s,transform .15s}
  3322. .wr-article:hover .wr-article-arrow{color:var(--wr-violet);transform:translateX(2px)}
  3323. .wr-article-arrow svg{width:18px;height:18px}
  3324. @media(max-width:540px){
  3325. .wr-article{padding:12px;gap:10px}
  3326. .wr-article-logo{width:42px;height:42px}
  3327. .wr-article-logo svg{width:20px;height:20px}
  3328. .wr-article-title{font-size:13px}
  3329. .wr-article-meta{font-size:11px;gap:6px;flex-wrap:wrap;white-space:normal}
  3330. .wr-article-badge{display:none}
  3331. }
  3332. .articles-cta{text-align:center;margin-top:36px}
  3333. .articles-cta a{
  3334. display:inline-flex;align-items:center;gap:8px;
  3335. padding:12px 22px;border-radius:11px;
  3336. background:var(--wr-violet);color:#fff;
  3337. font-size:13px;font-weight:600;
  3338. text-decoration:none;
  3339. box-shadow:0 4px 12px rgba(138,99,192,.3);
  3340. transition:background .15s,transform .15s,box-shadow .15s;
  3341. }
  3342. .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}
  3343. .articles-cta svg{width:12px;height:12px;transition:transform .15s}
  3344. .articles-cta a:hover svg{transform:translateX(3px)}
  3345. /* ═══════════════════════════════════════════════════════════════════
  3346. CTA FINAL — Card violet plein avec eyebrow + 2 sous-cards
  3347. ═══════════════════════════════════════════════════════════════════ */
  3348. .final-card{
  3349. position:relative;
  3350. background:linear-gradient(135deg,#8A63C0 0%,#9D7BCC 100%);
  3351. border-radius:28px;
  3352. padding:48px 40px;
  3353. color:#fff;overflow:hidden;
  3354. box-shadow:0 20px 60px -12px rgba(138,99,192,.4);
  3355. }
  3356. @media(max-width:768px){.final-card{padding:32px 22px;border-radius:22px}}
  3357. .final-eyebrow{
  3358. display:inline-flex;align-items:center;gap:8px;
  3359. padding:8px 18px;border-radius:100px;
  3360. background:rgba(255,255,255,.2);
  3361. color:#fff;
  3362. font-size:12px;font-weight:700;
  3363. text-transform:uppercase;letter-spacing:.12em;
  3364. margin-bottom:20px;
  3365. backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);
  3366. }
  3367. .final-eyebrow svg{width:13px;height:13px;fill:currentColor}
  3368. .final-title{
  3369. font-weight:800;font-size:28px;line-height:1.15;letter-spacing:-0.02em;
  3370. color:#fff;margin:0 0 36px;
  3371. max-width:780px;
  3372. }
  3373. @media(min-width:768px){.final-title{font-size:38px}}
  3374. /* Grille 2 sous-cards */
  3375. .final-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px}
  3376. @media(max-width:768px){.final-grid{grid-template-columns:1fr;gap:14px}}
  3377. .final-sub{
  3378. background:#fff;
  3379. border-radius:18px;
  3380. padding:28px;
  3381. display:flex;flex-direction:column;
  3382. }
  3383. @media(max-width:768px){.final-sub{padding:22px}}
  3384. .final-sub-head{display:flex;align-items:center;gap:14px;margin-bottom:18px}
  3385. .final-sub-icon{
  3386. width:44px;height:44px;border-radius:11px;
  3387. background:var(--wr-violet-soft);color:var(--wr-violet);
  3388. display:flex;align-items:center;justify-content:center;flex-shrink:0;
  3389. }
  3390. .final-sub-icon svg{width:22px;height:22px}
  3391. .final-sub-label{
  3392. font-size:12.5px;font-weight:700;
  3393. color:var(--wr-violet);
  3394. text-transform:uppercase;letter-spacing:.1em;
  3395. }
  3396. .final-sub-title{
  3397. font-weight:800;font-size:18px;line-height:1.3;letter-spacing:-0.01em;
  3398. color:var(--wr-ink);margin:0 0 10px;
  3399. }
  3400. .final-sub-desc{
  3401. font-size:14px;line-height:1.55;color:var(--wr-muted);
  3402. margin:0 0 24px;flex:1;
  3403. }
  3404. .final-sub-btn{
  3405. display:flex;align-items:center;justify-content:center;gap:8px;
  3406. background:var(--wr-violet);color:#fff;
  3407. padding:14px 18px;border-radius:11px;
  3408. font-size:14px;font-weight:700;
  3409. text-decoration:none;
  3410. transition:background .15s,transform .15s,box-shadow .15s;
  3411. box-shadow:0 4px 12px rgba(138,99,192,.3);
  3412. }
  3413. .final-sub-btn:hover{
  3414. background:var(--wr-violet-dark);color:#fff;
  3415. transform:translateY(-2px);
  3416. box-shadow:0 6px 18px rgba(138,99,192,.4);
  3417. text-decoration:none;
  3418. }
  3419. .final-sub-btn svg{width:14px;height:14px;transition:transform .15s}
  3420. .final-sub-btn:hover svg{transform:translateX(3px)}
  3421. </style>
  3422. {% endblock css %}
  3423. {% block body %}
  3424. <div class=\"wr\">
  3425. {# ═══════════════ HERO ═══════════════ #}
  3426. <section class=\"hero\">
  3427. <div class=\"hero-inner\">
  3428. <span class=\"hero-badge\">
  3429. <span class=\"hero-badge-dot\"></span>
  3430. {{ t.hero_eyebrow }}
  3431. </span>
  3432. <h1 class=\"hero-title\">
  3433. <span class=\"hero-title-accent\">{{ t.hero_title_accent }}</span> {{ t.hero_title_post }}<br>
  3434. <span class=\"hero-title-accent\">{{ t.hero_title_accent2 }}</span> {{ t.hero_title_2 }}
  3435. </h1>
  3436. <p class=\"hero-lede\">
  3437. {{ t.hero_lede_pre }}
  3438. <span class=\"hero-lede-accent\">{{ t.hero_lede_brand }}</span>
  3439. {{ t.hero_lede_mid }}
  3440. <span class=\"hero-lede-accent\">{{ t.hero_lede_word }}</span>
  3441. {{ t.hero_lede_post }}
  3442. </p>
  3443. {# Pills \"Populaire\" — AU-DESSUS de la recherche, cliquer remplit l\x27input #}
  3444. {% if popularKeywords is defined and popularKeywords|length > 0 %}
  3445. <div class=\"hero-popular\">
  3446. <span class=\"hero-popular-label\">{{ t.hero_popular_label }}</span>
  3447. {% for kw in popularKeywords|slice(0, 5) %}
  3448. <button type=\"button\"
  3449. class=\"hero-popular-pill\"
  3450. data-keyword=\"{{ kw.keyword }}\"
  3451. data-label=\"{{ kw.label }}\">
  3452. {% if kw.icon %}<span class=\"hero-popular-pill-icon\">{{ kw.icon|raw }}</span>{% endif %}
  3453. <span>{{ kw.label }}</span>
  3454. </button>
  3455. {% endfor %}
  3456. </div>
  3457. {% endif %}
  3458. {# Recherche inline AJAX — style dashboard jobs #}
  3459. <div class=\"hero-search-wrap\">
  3460. <div class=\"hero-search\" id=\"wrHeroSearch\"
  3461. data-search-url=\"{% if isFR %}{{ path(\x27locale_api_jobs_search\x27,{\x27_locale\x27:\x27fr\x27}) }}{% else %}{{ path(\x27api_jobs_search\x27) }}{% endif %}\"
  3462. data-jobs-list-url=\"{% if isFR %}{{ path(\x27locale_whileresume_jobs_list\x27,{\x27_locale\x27:\x27fr\x27}) }}{% else %}{{ path(\x27whileresume_jobs_list\x27) }}{% endif %}\">
  3463. <div class=\"hero-search-inner\">
  3464. <span class=\"hero-search-icon\">
  3465. <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">
  3466. <circle cx=\"11\" cy=\"11\" r=\"8\"/><path d=\"M21 21l-4.35-4.35\"/>
  3467. </svg>
  3468. </span>
  3469. <input type=\"text\" name=\"q\" id=\"wrHeroSearchInput\" class=\"hero-search-input\"
  3470. placeholder=\"{{ t.hero_search_placeholder }}\"
  3471. autocomplete=\"off\" />
  3472. <span class=\"hero-search-kbd\">↵ {{ isFR ? \x27Entrée\x27 : \x27Enter\x27 }}</span>
  3473. <button type=\"button\" class=\"hero-search-clear\" id=\"wrHeroSearchClear\" aria-label=\"{{ t.search_clear }}\">
  3474. <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">
  3475. <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"/><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"/>
  3476. </svg>
  3477. </button>
  3478. </div>
  3479. </div>
  3480. </div>
  3481. {# Liste de jobs — par défaut jobs aléatoires, remplacée par les résultats AJAX #}
  3482. {# Le compteur affiche le nombre total d\x27offres en ligne (toutes langues confondues) #}
  3483. {% set _heroCount = 0 %}
  3484. <div class=\"hero-default-jobs\" id=\"wrHeroJobsList\">
  3485. <div class=\"hero-jobs-header\" id=\"wrHeroJobsHeader\">
  3486. <span class=\"hero-jobs-count\" id=\"wrHeroJobsCount\">
  3487. <strong>{{ totalJobs ?? 0 }}</strong>{{ t.search_results_count }}
  3488. </span>
  3489. <a href=\"{% if isFR %}{{ path(\x27locale_whileresume_jobs_list\x27,{\x27_locale\x27:\x27fr\x27}) }}{% else %}{{ path(\x27whileresume_jobs_list\x27) }}{% endif %}\" class=\"hero-jobs-link\" id=\"wrHeroJobsLink\">
  3490. {{ t.search_view_all }}
  3491. <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">
  3492. <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"/><polyline points=\"12 5 19 12 12 19\"/>
  3493. </svg>
  3494. </a>
  3495. </div>
  3496. <div id=\"wrHeroJobsBody\">
  3497. {% if randomJobs is defined and randomJobs|length > 0 %}
  3498. {% for j in randomJobs %}
  3499. {% if _heroCount < 6 %}
  3500. <a href=\"{% if j.locale == \x27fr\x27 %}{{ path(\x27locale_cvs_application_job_show\x27,{\x27_locale\x27:app.request.locale,\x27slug\x27:j.slug}) }}{% else %}{{ path(\x27cvs_application_job_show\x27,{\x27slug\x27:j.slug}) }}{% endif %}\" class=\"hero-default-job\">
  3501. <div class=\"hero-default-job-logo\">
  3502. {% if j.image and j.image.name %}
  3503. <img src=\"{{ vich_uploader_asset(j, \x27imageFile\x27) }}\" alt=\"\">
  3504. {% else %}
  3505. {{ j.companyName|default(\x27?\x27)|slice(0,1)|upper }}
  3506. {% endif %}
  3507. </div>
  3508. <div class=\"hero-default-job-info\">
  3509. <h3 class=\"hero-default-job-title\">{{ j.jobTitle }}</h3>
  3510. <p class=\"hero-default-job-meta\">
  3511. {% if j.companyName %}<span>{{ j.companyName }}</span>{% endif %}
  3512. {% if j.city %}
  3513. <span class=\"hero-default-job-meta-sep\"></span>
  3514. <span>{{ j.city }}{% if j.country %}, {{ j.country }}{% endif %}</span>
  3515. {% endif %}
  3516. {% if j.employmentType %}
  3517. <span class=\"hero-default-job-meta-sep\"></span>
  3518. <span>{{ j.employmentType }}</span>
  3519. {% endif %}
  3520. </p>
  3521. </div>
  3522. <span class=\"hero-default-job-arrow\">
  3523. <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>
  3524. </span>
  3525. </a>
  3526. {% set _heroCount = _heroCount + 1 %}
  3527. {% endif %}
  3528. {% endfor %}
  3529. {% endif %}
  3530. </div>
  3531. </div>
  3532. {# CTA pour utilisateurs non connectés : Inscription + Connexion #}
  3533. {% if app.user is null %}
  3534. <div class=\"hero-cta\">
  3535. <a href=\"#register\" class=\"hero-cta-btn\">
  3536. <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">
  3537. <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\"/>
  3538. </svg>
  3539. {{ t.hero_cta_signup }}
  3540. </a>
  3541. <a href=\"{% if isFR %}{{ path(\x27locale_app_login\x27,{\x27_locale\x27:\x27fr\x27}) }}{% else %}{{ path(\x27app_login\x27) }}{% endif %}\" class=\"hero-cta-btn\">
  3542. <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">
  3543. <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\"/>
  3544. </svg>
  3545. {{ t.hero_cta_login }}
  3546. </a>
  3547. </div>
  3548. {% endif %}
  3549. </div>
  3550. </section>
  3551. {# ═══════════════ COMMENT ÇA MARCHE ═══════════════ #}
  3552. <section class=\"wr-section\">
  3553. <div class=\"wr-container\">
  3554. <div class=\"wr-section-head\">
  3555. <h2 class=\"wr-title\">{{ t.how_title }}</h2>
  3556. </div>
  3557. <div class=\"how-card\">
  3558. <div class=\"how-step reveal\" data-reveal-delay=\"1\">
  3559. <div class=\"how-step-illu\">
  3560. <img src=\"/uploads/rh/mascotte_register.png\" alt=\"{{ t.how1_title }}\" loading=\"lazy\">
  3561. </div>
  3562. <h3 class=\"how-step-title\">{{ t.how1_title }}</h3>
  3563. <p class=\"how-step-desc\">{{ t.how1_desc }}</p>
  3564. </div>
  3565. <div class=\"how-step reveal\" data-reveal-delay=\"2\">
  3566. <div class=\"how-step-illu\">
  3567. <img src=\"/uploads/rh/mascotte_upload2.png\" alt=\"{{ t.how2_title }}\" loading=\"lazy\">
  3568. </div>
  3569. <h3 class=\"how-step-title\">{{ t.how2_title }}</h3>
  3570. <p class=\"how-step-desc\">{{ t.how2_desc }}</p>
  3571. </div>
  3572. <div class=\"how-step reveal\" data-reveal-delay=\"3\">
  3573. <div class=\"how-step-illu\">
  3574. <img src=\"/uploads/rh/mascotte_reunion.png\" alt=\"{{ t.how3_title }}\" loading=\"lazy\">
  3575. </div>
  3576. <h3 class=\"how-step-title\">{{ t.how3_title }}</h3>
  3577. <p class=\"how-step-desc\">{{ t.how3_desc }}</p>
  3578. </div>
  3579. </div>
  3580. </div>
  3581. </section>
  3582. {# ═══════════════ FEATURES 01-04 ═══════════════ #}
  3583. <section class=\"wr-section\">
  3584. <div class=\"wr-container\">
  3585. {# Feature 01 — Filtrage par critères #}
  3586. <div class=\"feat-block reveal\">
  3587. <div class=\"feat-illu\">
  3588. <img src=\"/uploads/rh/mascotte_filtrage3.png\" alt=\"{{ t.feat1_title }}\" loading=\"lazy\">
  3589. </div>
  3590. <div class=\"feat-content\">
  3591. <span class=\"feat-label\">{{ t.feat1_label }}</span>
  3592. <h3 class=\"feat-title\">{{ t.feat1_title }}</h3>
  3593. <div class=\"feat-desc\">
  3594. <p>{{ t.feat1_p1|raw }}</p>
  3595. <p>{{ t.feat1_p2|raw }}</p>
  3596. </div>
  3597. <div class=\"feat-quote\">
  3598. <p class=\"feat-quote-text\">{{ t.feat1_quote }}</p>
  3599. <div class=\"feat-quote-author\">
  3600. <p class=\"feat-quote-name\">{{ t.feat1_author }}</p>
  3601. <p class=\"feat-quote-role\">{{ t.feat1_role }}</p>
  3602. </div>
  3603. </div>
  3604. </div>
  3605. </div>
  3606. {# Feature 02 — Optimisation intelligente #}
  3607. <div class=\"feat-block reveal\">
  3608. <div class=\"feat-illu\">
  3609. <img src=\"/uploads/rh/mascotte_upload.png\" alt=\"{{ t.feat2_title }}\" loading=\"lazy\">
  3610. </div>
  3611. <div class=\"feat-content\">
  3612. <span class=\"feat-label\">{{ t.feat2_label }}</span>
  3613. <h3 class=\"feat-title\">{{ t.feat2_title }}</h3>
  3614. <div class=\"feat-desc\">
  3615. <p>{{ t.feat2_p1|raw }}</p>
  3616. <p>{{ t.feat2_p2|raw }}</p>
  3617. </div>
  3618. <div class=\"feat-quote\">
  3619. <p class=\"feat-quote-text\">{{ t.feat2_quote }}</p>
  3620. <div class=\"feat-quote-author\">
  3621. <p class=\"feat-quote-name\">{{ t.feat2_author }}</p>
  3622. <p class=\"feat-quote-role\">{{ t.feat2_role }}</p>
  3623. </div>
  3624. </div>
  3625. </div>
  3626. </div>
  3627. {% if app.user is null %}
  3628. {# ═════ INSCRIPTION (entre feat 02 et 03) ═════ #}
  3629. <div class=\"signup-card reveal reveal--scale\" id=\"register\">
  3630. <div class=\"signup-inner\">
  3631. <div class=\"signup-text\">
  3632. <span class=\"signup-eyebrow\">
  3633. <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>
  3634. {{ t.signup_eyebrow }}
  3635. </span>
  3636. <h3 class=\"signup-title\">{{ t.signup_title }}</h3>
  3637. <p class=\"signup-lede\">{{ t.signup_lede }}</p>
  3638. <div class=\"signup-perks\">
  3639. <span class=\"signup-perk\">
  3640. <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>
  3641. {{ t.signup_perk1 }}
  3642. </span>
  3643. <span class=\"signup-perk\">
  3644. <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>
  3645. {{ t.signup_perk2 }}
  3646. </span>
  3647. <span class=\"signup-perk\">
  3648. <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>
  3649. {{ t.signup_perk3 }}
  3650. </span>
  3651. </div>
  3652. </div>
  3653. {% if form is defined %}
  3654. {# Cas 1 : le controller passe le formulaire Symfony — rendu via form_widget #}
  3655. {{ form_start(form, {\x27attr\x27: {\x27class\x27: \x27signup-form\x27, \x27novalidate\x27: \x27novalidate\x27}}) }}
  3656. {{ form_errors(form) }}
  3657. {% for message in app.flashes(\x27danger\x27) %}
  3658. <p class=\"signup-form-error\">{{ message }}</p>
  3659. {% endfor %}
  3660. <div class=\"signup-field\">
  3661. {{ form_widget(form.email, {\x27attr\x27: {\x27placeholder\x27: t.signup_email_ph}}) }}
  3662. </div>
  3663. <div class=\"signup-row\">
  3664. <div class=\"signup-field\">
  3665. {{ form_widget(form.password.first, {\x27attr\x27: {\x27placeholder\x27: t.signup_pass_ph}}) }}
  3666. </div>
  3667. <div class=\"signup-field\">
  3668. {{ form_widget(form.password.second, {\x27attr\x27: {\x27placeholder\x27: t.signup_pass2_ph}}) }}
  3669. </div>
  3670. </div>
  3671. <label class=\"signup-terms\">
  3672. {{ form_widget(form.acceptTerm) }}
  3673. <span>
  3674. {{ t.signup_terms_pre }}
  3675. <a href=\"{% if isFR %}/fr/protections-donnees-candidats{% else %}/data-protection-candidates{% endif %}\" target=\"_blank\" rel=\"noopener\">{{ t.signup_terms_link }}</a>.
  3676. </span>
  3677. </label>
  3678. {% if form.recaptcha is defined %}
  3679. <div class=\"signup-recaptcha\">{{ form_widget(form.recaptcha) }}</div>
  3680. {% endif %}
  3681. <button type=\"submit\" class=\"signup-submit\">
  3682. {{ t.signup_btn }}
  3683. <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>
  3684. </button>
  3685. {{ form_rest(form) }}
  3686. {{ form_end(form) }}
  3687. {% endif %}
  3688. </div>
  3689. </div>
  3690. {% endif %}
  3691. {# Feature 03 — Recherche qualifiée #}
  3692. <div class=\"feat-block reveal\">
  3693. <div class=\"feat-illu\">
  3694. <img src=\"/uploads/rh/mascotte_register.png\" alt=\"{{ t.feat3_title }}\" loading=\"lazy\">
  3695. </div>
  3696. <div class=\"feat-content\">
  3697. <span class=\"feat-label\">{{ t.feat3_label }}</span>
  3698. <h3 class=\"feat-title\">{{ t.feat3_title }}</h3>
  3699. <div class=\"feat-desc\">
  3700. <p>{{ t.feat3_p1|raw }}</p>
  3701. <p>{{ t.feat3_p2|raw }}</p>
  3702. </div>
  3703. <div class=\"feat-quote\">
  3704. <p class=\"feat-quote-text\">{{ t.feat3_quote }}</p>
  3705. <div class=\"feat-quote-author\">
  3706. <p class=\"feat-quote-name\">{{ t.feat3_author }}</p>
  3707. <p class=\"feat-quote-role\">{{ t.feat3_role }}</p>
  3708. </div>
  3709. </div>
  3710. </div>
  3711. </div>
  3712. {# Feature 04 — Contact direct qualifié #}
  3713. <div class=\"feat-block reveal\">
  3714. <div class=\"feat-illu\">
  3715. <img src=\"/uploads/rh/mascotte_reunion.png\" alt=\"{{ t.feat4_title }}\" loading=\"lazy\">
  3716. </div>
  3717. <div class=\"feat-content\">
  3718. <span class=\"feat-label\">{{ t.feat4_label }}</span>
  3719. <h3 class=\"feat-title\">{{ t.feat4_title }}</h3>
  3720. <div class=\"feat-desc\">
  3721. <p>{{ t.feat4_p1|raw }}</p>
  3722. <p>{{ t.feat4_p2|raw }}</p>
  3723. </div>
  3724. <div class=\"feat-quote\">
  3725. <p class=\"feat-quote-text\">{{ t.feat4_quote }}</p>
  3726. <div class=\"feat-quote-author\">
  3727. <p class=\"feat-quote-name\">{{ t.feat4_author }}</p>
  3728. <p class=\"feat-quote-role\">{{ t.feat4_role }}</p>
  3729. </div>
  3730. </div>
  3731. </div>
  3732. </div>
  3733. </div>
  3734. </section>
  3735. {# ═══════════════ APPS ═══════════════ #}
  3736. <section class=\"wr-section\">
  3737. <div class=\"wr-container\">
  3738. <div class=\"apps-grid\">
  3739. <a href=\"{{ isFR ? (ios_fr|default(\x27#\x27)) : (ios_us|default(\x27#\x27)) }}\" class=\"app-card\">
  3740. <span class=\"app-card-icon\">
  3741. <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>
  3742. </span>
  3743. <h3 class=\"app-card-name\">{{ t.apps_ios }}</h3>
  3744. <p class=\"app-card-desc\">{{ t.apps_ios_desc }}</p>
  3745. <span class=\"app-card-cta\">App Store
  3746. <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>
  3747. </span>
  3748. </a>
  3749. <a href=\"{{ isFR ? (android_fr|default(\x27#\x27)) : (android_us|default(\x27#\x27)) }}\" class=\"app-card\">
  3750. <span class=\"app-card-icon\">
  3751. <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>
  3752. </span>
  3753. <h3 class=\"app-card-name\">{{ t.apps_android }}</h3>
  3754. <p class=\"app-card-desc\">{{ t.apps_android_desc }}</p>
  3755. <span class=\"app-card-cta\">Google Play
  3756. <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>
  3757. </span>
  3758. </a>
  3759. <a href=\"{% if app.request.locale == \x27en\x27 %}{{ path(\x27whileresume_homepage\x27) }}{% else %}{{ path(\x27locale_whileresume_homepage\x27,{\x27_locale\x27:app.request.locale}) }}{% endif %}#register\" class=\"app-card\">
  3760. <span class=\"app-card-icon\">
  3761. <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>
  3762. </span>
  3763. <h3 class=\"app-card-name\">{{ t.apps_web }}</h3>
  3764. <p class=\"app-card-desc\">{{ t.apps_web_desc }}</p>
  3765. <span class=\"app-card-cta\">whileresume.com
  3766. <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>
  3767. </span>
  3768. </a>
  3769. </div>
  3770. </div>
  3771. </section>
  3772. {# ═══════════════ ARTICLES ═══════════════ #}
  3773. {% if articles is defined and articles|length > 0 %}
  3774. <section class=\"wr-section\">
  3775. <div class=\"wr-container\">
  3776. <div class=\"wr-section-head\">
  3777. <h2 class=\"wr-title wr-title--sm\">{{ t.articles_title }}</h2>
  3778. </div>
  3779. <div class=\"articles-list\">
  3780. {% for a in articles|slice(0,6) %}
  3781. {% set prefix = \"\" %}
  3782. {% set urlA = path(\x27cvs_website_article\x27,{\x27slug\x27: a.slug}) %}
  3783. {% if app.request.locale != default_locale %}
  3784. {% set urlA = path(\x27locale_cvs_website_article\x27,{\x27_locale\x27:app.request.locale,\x27slug\x27: a.slug}) %}
  3785. {% set prefix = \"/\" ~ app.request.locale %}
  3786. {% endif %}
  3787. {% if a.pageslug3 is not empty %}
  3788. {% set urlA = prefix ~ \x27/\x27 ~ a.pageslug ~ \x27/\x27 ~ a.pageslug2 ~ \x27/\x27 ~ a.pageslug3 %}
  3789. {% elseif a.pageslug2 is not empty %}
  3790. {% set urlA = prefix ~ \x27/\x27 ~ a.pageslug ~ \x27/\x27 ~ a.pageslug2 %}
  3791. {% elseif a.pageslug is not empty %}
  3792. {% set urlA = prefix ~ \x27/\x27 ~ a.pageslug %}
  3793. {% endif %}
  3794. <a href=\"{{ urlA }}\" class=\"wr-article\">
  3795. <div class=\"wr-article-logo\">
  3796. <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">
  3797. <path d=\"M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z\"/>
  3798. <path d=\"M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z\"/>
  3799. </svg>
  3800. </div>
  3801. <div class=\"wr-article-info\">
  3802. <h3 class=\"wr-article-title\">{{ a.title }}</h3>
  3803. <div class=\"wr-article-meta\">
  3804. {% if a.subtitle is not empty %}
  3805. <span>{{ a.subtitle|length > 60 ? a.subtitle|slice(0,60) ~ \x27…\x27 : a.subtitle }}</span>
  3806. {% endif %}
  3807. </div>
  3808. </div>
  3809. <span class=\"wr-article-badge\">{{ t.read_article }}</span>
  3810. <span class=\"wr-article-arrow\">
  3811. <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">
  3812. <polyline points=\"9 18 15 12 9 6\"/>
  3813. </svg>
  3814. </span>
  3815. </a>
  3816. {% endfor %}
  3817. </div>
  3818. <div class=\"articles-cta\">
  3819. <a href=\"{% if isFR %}{{ path(\x27locale_cvs_website_articles\x27,{\x27_locale\x27:\x27fr\x27}) }}{% else %}{{ path(\x27cvs_website_articles\x27) }}{% endif %}\">
  3820. {{ t.articles_view_all }}
  3821. <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>
  3822. </a>
  3823. </div>
  3824. </div>
  3825. </section>
  3826. {% endif %}
  3827. {# ═══════════════ CTA FINAL ═══════════════ #}
  3828. {% if app.user is null %}
  3829. <section class=\"wr-section\">
  3830. <div class=\"wr-container\">
  3831. <div class=\"final-card\">
  3832. <h2 class=\"final-title\">{{ t.final_title }}</h2>
  3833. <div class=\"final-grid\">
  3834. {# Recruteur #}
  3835. <div class=\"final-sub\">
  3836. <div class=\"final-sub-head\">
  3837. <span class=\"final-sub-icon\">
  3838. <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\">
  3839. <rect x=\"2\" y=\"7\" width=\"20\" height=\"14\" rx=\"2\" ry=\"2\"/>
  3840. <path d=\"M16 21V5a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16\"/>
  3841. </svg>
  3842. </span>
  3843. <span class=\"final-sub-label\">{{ t.final_recruiter_label }}</span>
  3844. </div>
  3845. <h3 class=\"final-sub-title\">{{ t.final_recruiter_title }}</h3>
  3846. <p class=\"final-sub-desc\">{{ t.final_recruiter_desc }}</p>
  3847. <a href=\"{{ path(\x27whileresume_business_\x27 ~ app.request.locale) }}\" class=\"final-sub-btn\">
  3848. {{ t.final_recruiter }}
  3849. <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>
  3850. </a>
  3851. </div>
  3852. {# Candidat #}
  3853. <div class=\"final-sub\">
  3854. <div class=\"final-sub-head\">
  3855. <span class=\"final-sub-icon\">
  3856. <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\">
  3857. <path d=\"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2\"/>
  3858. <circle cx=\"12\" cy=\"7\" r=\"4\"/>
  3859. </svg>
  3860. </span>
  3861. <span class=\"final-sub-label\">{{ t.final_candidate_label }}</span>
  3862. </div>
  3863. <h3 class=\"final-sub-title\">{{ t.final_candidate_title }}</h3>
  3864. <p class=\"final-sub-desc\">{{ t.final_candidate_desc }}</p>
  3865. <a href=\"{% if app.request.locale == \x27en\x27 %}{{ path(\x27whileresume_homepage\x27) }}{% else %}{{ path(\x27locale_whileresume_homepage\x27,{\x27_locale\x27:app.request.locale}) }}{% endif %}#register\" class=\"final-sub-btn\">
  3866. {{ t.final_candidate }}
  3867. <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>
  3868. </a>
  3869. </div>
  3870. </div>
  3871. </div>
  3872. </div>
  3873. </section>
  3874. {% endif %}
  3875. </div>
  3876. {% endblock body %}
  3877. {% block footer_js %}
  3878. {{ parent() }}
  3879. <script>
  3880. (function(){
  3881. var search = document.getElementById(\x27wrHeroSearch\x27);
  3882. var input = document.getElementById(\x27wrHeroSearchInput\x27);
  3883. var clearBtn = document.getElementById(\x27wrHeroSearchClear\x27);
  3884. var jobsBody = document.getElementById(\x27wrHeroJobsBody\x27);
  3885. var countEl = document.getElementById(\x27wrHeroJobsCount\x27);
  3886. var linkEl = document.getElementById(\x27wrHeroJobsLink\x27);
  3887. if (!search || !input || !jobsBody) return;
  3888. var searchUrl = search.dataset.searchUrl;
  3889. var jobsListUrl = search.dataset.jobsListUrl;
  3890. // On garde l\x27état initial pour pouvoir le restaurer
  3891. var defaultBodyHtml = jobsBody.innerHTML;
  3892. var defaultCountHtml = countEl ? countEl.innerHTML : \x27\x27;
  3893. var defaultLinkHref = linkEl ? linkEl.getAttribute(\x27href\x27) : jobsListUrl;
  3894. var debounceTimer = null;
  3895. var currentRequest = null;
  3896. var lastQuery = \x27\x27;
  3897. var T = {
  3898. loading: \x27{{ t.search_loading|escape(\x27js\x27) }}\x27,
  3899. empty: \x27{{ t.search_no_results|escape(\x27js\x27) }}\x27,
  3900. emptyHint: \x27{{ t.search_no_results_hint|escape(\x27js\x27) }}\x27,
  3901. count: \x27{{ t.search_results_count|escape(\x27js\x27) }}\x27,
  3902. viewAll: \x27{{ t.search_view_all|escape(\x27js\x27) }}\x27,
  3903. view: \x27{{ t.search_view_offer|escape(\x27js\x27) }}\x27
  3904. };
  3905. function escHtml(s){
  3906. if (s == null) return \x27\x27;
  3907. return String(s).replace(/[&<>\"\x27]/g, function(c){
  3908. return {\x27&\x27:\x27&amp;\x27,\x27<\x27:\x27&lt;\x27,\x27>\x27:\x27&gt;\x27,\x27\"\x27:\x27&quot;\x27,\"\x27\":\x27&#39;\x27}[c];
  3909. });
  3910. }
  3911. function setHeaderCount(total){
  3912. if (!countEl) return;
  3913. countEl.innerHTML = \x27<strong>\x27 + total + \x27</strong>\x27 + escHtml(T.count);
  3914. }
  3915. function setHeaderLink(href){
  3916. if (!linkEl) return;
  3917. linkEl.setAttribute(\x27href\x27, href);
  3918. }
  3919. function setLoading(){
  3920. jobsBody.innerHTML =
  3921. \x27<div class=\"hero-jobs-loading\">\x27 +
  3922. \x27<span class=\"hero-jobs-spinner\"></span>\x27 +
  3923. \x27<span>\x27 + escHtml(T.loading) + \x27</span>\x27 +
  3924. \x27</div>\x27;
  3925. }
  3926. function setEmpty(){
  3927. jobsBody.innerHTML =
  3928. \x27<div class=\"hero-jobs-empty\">\x27 +
  3929. \x27<div class=\"hero-jobs-empty-icon\">\x27 +
  3930. \x27<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\x27 +
  3931. \x27<circle cx=\"11\" cy=\"11\" r=\"8\"/><line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"/>\x27 +
  3932. \x27</svg>\x27 +
  3933. \x27</div>\x27 +
  3934. \x27<p class=\"hero-jobs-empty-title\">\x27 + escHtml(T.empty) + \x27</p>\x27 +
  3935. \x27<p class=\"hero-jobs-empty-hint\">\x27 + escHtml(T.emptyHint) + \x27</p>\x27 +
  3936. \x27</div>\x27;
  3937. }
  3938. function restoreDefault(){
  3939. jobsBody.innerHTML = defaultBodyHtml;
  3940. if (countEl) countEl.innerHTML = defaultCountHtml;
  3941. if (linkEl) linkEl.setAttribute(\x27href\x27, defaultLinkHref);
  3942. }
  3943. function renderResults(payload, query){
  3944. var jobs = (payload && payload.jobs) || [];
  3945. var total = (payload && typeof payload.total === \x27number\x27) ? payload.total : jobs.length;
  3946. setHeaderCount(total);
  3947. setHeaderLink(jobsListUrl + \x27?q=\x27 + encodeURIComponent(query));
  3948. if (!jobs.length){
  3949. setEmpty();
  3950. return;
  3951. }
  3952. var html = \x27\x27;
  3953. jobs.slice(0, 6).forEach(function(j){
  3954. var title = j.jobTitle || j.title || \x27\x27;
  3955. var company = j.companyName || j.company || \x27\x27;
  3956. var city = j.city || \x27\x27;
  3957. var country = j.country || \x27\x27;
  3958. var et = j.employmentType || \x27\x27;
  3959. var img = j.image || j.imageUrl || \x27\x27;
  3960. var url = j.url || (jobsListUrl + \x27?q=\x27 + encodeURIComponent(query));
  3961. var initial = (company || title || \x27?\x27).charAt(0).toUpperCase();
  3962. var location = city + (country ? \x27, \x27 + country : \x27\x27);
  3963. var metaParts = [];
  3964. if (company) metaParts.push(\x27<span>\x27 + escHtml(company) + \x27</span>\x27);
  3965. if (location) metaParts.push(\x27<span class=\"hero-default-job-meta-sep\"></span><span>\x27 + escHtml(location) + \x27</span>\x27);
  3966. if (et) metaParts.push(\x27<span class=\"hero-default-job-meta-sep\"></span><span>\x27 + escHtml(et) + \x27</span>\x27);
  3967. html +=
  3968. \x27<a href=\"\x27 + escHtml(url) + \x27\" class=\"hero-default-job\">\x27 +
  3969. \x27<div class=\"hero-default-job-logo\">\x27 +
  3970. (img
  3971. ? \x27<img src=\"\x27 + escHtml(img) + \x27\" alt=\"\">\x27
  3972. : escHtml(initial)) +
  3973. \x27</div>\x27 +
  3974. \x27<div class=\"hero-default-job-info\">\x27 +
  3975. \x27<h3 class=\"hero-default-job-title\">\x27 + escHtml(title) + \x27</h3>\x27 +
  3976. \x27<p class=\"hero-default-job-meta\">\x27 + metaParts.join(\x27\x27) + \x27</p>\x27 +
  3977. \x27</div>\x27 +
  3978. \x27<span class=\"hero-default-job-arrow\">\x27 +
  3979. \x27<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>\x27 +
  3980. \x27</span>\x27 +
  3981. \x27</a>\x27;
  3982. });
  3983. jobsBody.innerHTML = html;
  3984. }
  3985. function doSearch(query){
  3986. if (currentRequest && currentRequest.abort) {
  3987. try { currentRequest.abort(); } catch(e){}
  3988. }
  3989. setLoading();
  3990. var url = searchUrl + (searchUrl.indexOf(\x27?\x27) > -1 ? \x27&\x27 : \x27?\x27) + \x27q=\x27 + encodeURIComponent(query);
  3991. var ctrl = (typeof AbortController !== \x27undefined\x27) ? new AbortController() : null;
  3992. currentRequest = ctrl;
  3993. fetch(url, { headers: { \x27Accept\x27: \x27application/json\x27 }, signal: ctrl ? ctrl.signal : undefined })
  3994. .then(function(r){ return r.ok ? r.json() : Promise.reject(r.status); })
  3995. .then(function(data){ renderResults(data, query); })
  3996. .catch(function(err){
  3997. if (err && err.name === \x27AbortError\x27) return;
  3998. setEmpty();
  3999. });
  4000. }
  4001. // Input live (debounce 280ms)
  4002. input.addEventListener(\x27input\x27, function(){
  4003. var q = input.value.trim();
  4004. clearBtn.classList.toggle(\x27is-visible\x27, q.length > 0);
  4005. if (debounceTimer) clearTimeout(debounceTimer);
  4006. if (q.length < 2){
  4007. restoreDefault();
  4008. lastQuery = \x27\x27;
  4009. return;
  4010. }
  4011. if (q === lastQuery) return;
  4012. debounceTimer = setTimeout(function(){
  4013. lastQuery = q;
  4014. doSearch(q);
  4015. }, 280);
  4016. });
  4017. // Enter → page de résultats complète
  4018. input.addEventListener(\x27keydown\x27, function(e){
  4019. if (e.key === \x27Enter\x27){
  4020. e.preventDefault();
  4021. var q = input.value.trim();
  4022. if (!q) return;
  4023. window.location.href = jobsListUrl + \x27?q=\x27 + encodeURIComponent(q);
  4024. }
  4025. if (e.key === \x27Escape\x27){
  4026. input.value = \x27\x27;
  4027. clearBtn.classList.remove(\x27is-visible\x27);
  4028. restoreDefault();
  4029. lastQuery = \x27\x27;
  4030. input.blur();
  4031. }
  4032. });
  4033. // Clear
  4034. clearBtn.addEventListener(\x27click\x27, function(){
  4035. input.value = \x27\x27;
  4036. clearBtn.classList.remove(\x27is-visible\x27);
  4037. restoreDefault();
  4038. lastQuery = \x27\x27;
  4039. input.focus();
  4040. });
  4041. // Pills \"Populaire\" — au clic, on remplit l\x27input et on lance la recherche
  4042. document.querySelectorAll(\x27.hero-popular-pill\x27).forEach(function(pill){
  4043. pill.addEventListener(\x27click\x27, function(){
  4044. var keyword = pill.dataset.keyword || pill.dataset.label || \x27\x27;
  4045. if (!keyword) return;
  4046. // Visuel actif
  4047. document.querySelectorAll(\x27.hero-popular-pill\x27).forEach(function(p){ p.classList.remove(\x27is-active\x27); });
  4048. pill.classList.add(\x27is-active\x27);
  4049. input.value = keyword;
  4050. clearBtn.classList.add(\x27is-visible\x27);
  4051. lastQuery = keyword;
  4052. doSearch(keyword);
  4053. input.focus();
  4054. });
  4055. });
  4056. })();
  4057. /* ═══ Reveal au scroll (Intersection Observer) ═══ */
  4058. (function(){
  4059. var els = document.querySelectorAll(\x27.reveal\x27);
  4060. if (!els.length) return;
  4061. if (!(\x27IntersectionObserver\x27 in window)){
  4062. // Fallback : tout révéler
  4063. els.forEach(function(el){ el.classList.add(\x27is-revealed\x27); });
  4064. return;
  4065. }
  4066. var io = new IntersectionObserver(function(entries){
  4067. entries.forEach(function(entry){
  4068. if (entry.isIntersecting){
  4069. entry.target.classList.add(\x27is-revealed\x27);
  4070. io.unobserve(entry.target);
  4071. }
  4072. });
  4073. }, { threshold: 0.12, rootMargin: \x270px 0px -60px 0px\x27 });
  4074. els.forEach(function(el){ io.observe(el); });
  4075. })();
  4076. </script>
  4077. {% endblock footer_js %}
  4078. ", "application/whileresume/website/candidates/homepage.html.twig", "/var/www/vhosts/whileresume.com/b.whileresume.app/templates/application/whileresume/website/candidates/homepage.html.twig");
  4079. }
  4080. }