var/cache/dev/twig/52/52818f4c349e328730f2d6592996b890.php line 48

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\Source;
  13. use Twig\Template;
  14. use Twig\TemplateWrapper;
  15. /* application/whileresume/application/jobs/show_fr.html.twig */
  16. class __TwigTemplate_eb98975dad48f6b67fc46b8ca7d2f7ed extends Template
  17. {
  18.     private Source $source;
  19.     /**
  20.      * @var array<string, Template>
  21.      */
  22.     private array $macros = [];
  23.     public function __construct(Environment $env)
  24.     {
  25.         parent::__construct($env);
  26.         $this->source $this->getSourceContext();
  27.         $this->blocks = [
  28.             'title' => [$this'block_title'],
  29.             'description' => [$this'block_description'],
  30.             'robots' => [$this'block_robots'],
  31.             'css' => [$this'block_css'],
  32.             'body' => [$this'block_body'],
  33.             'footerjs' => [$this'block_footerjs'],
  34.         ];
  35.     }
  36.     protected function doGetParent(array $context): bool|string|Template|TemplateWrapper
  37.     {
  38.         // line 1
  39.         return "vitrine/lexend/layout.html.twig";
  40.     }
  41.     protected function doDisplay(array $context, array $blocks = []): iterable
  42.     {
  43.         $macros $this->macros;
  44.         $__internal_5a27a8ba21ca79b61932376b2fa922d2 $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  45.         $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "template""application/whileresume/application/jobs/show_fr.html.twig"));
  46.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  47.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "template""application/whileresume/application/jobs/show_fr.html.twig"));
  48.         $this->parent $this->load("vitrine/lexend/layout.html.twig"1);
  49.         yield from $this->parent->unwrap()->yield($contextarray_merge($this->blocks$blocks));
  50.         
  51.         $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  52.         
  53.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  54.     }
  55.     // line 3
  56.     /**
  57.      * @return iterable<null|scalar|\Stringable>
  58.      */
  59.     public function block_title(array $context, array $blocks = []): iterable
  60.     {
  61.         $macros $this->macros;
  62.         $__internal_5a27a8ba21ca79b61932376b2fa922d2 $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  63.         $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block""title"));
  64.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  65.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block""title"));
  66.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source, (isset($context["job"]) || array_key_exists("job"$context) ? $context["job"] : (function () { throw new RuntimeError('Variable "job" does not exist.'3$this->source); })()), "shortTitle", [], "any"falsefalsefalse3), "html"nulltrue);
  67.         
  68.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  69.         
  70.         $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  71.         yield from [];
  72.     }
  73.     // line 4
  74.     /**
  75.      * @return iterable<null|scalar|\Stringable>
  76.      */
  77.     public function block_description(array $context, array $blocks = []): iterable
  78.     {
  79.         $macros $this->macros;
  80.         $__internal_5a27a8ba21ca79b61932376b2fa922d2 $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  81.         $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block""description"));
  82.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  83.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block""description"));
  84.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source, (isset($context["job"]) || array_key_exists("job"$context) ? $context["job"] : (function () { throw new RuntimeError('Variable "job" does not exist.'4$this->source); })()), "shortDescription", [], "any"falsefalsefalse4), "html"nulltrue);
  85.         
  86.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  87.         
  88.         $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  89.         yield from [];
  90.     }
  91.     // line 5
  92.     /**
  93.      * @return iterable<null|scalar|\Stringable>
  94.      */
  95.     public function block_robots(array $context, array $blocks = []): iterable
  96.     {
  97.         $macros $this->macros;
  98.         $__internal_5a27a8ba21ca79b61932376b2fa922d2 $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  99.         $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block""robots"));
  100.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  101.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block""robots"));
  102.         yield "index,follow";
  103.         
  104.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  105.         
  106.         $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  107.         yield from [];
  108.     }
  109.     // line 11
  110.     /**
  111.      * @return iterable<null|scalar|\Stringable>
  112.      */
  113.     public function block_css(array $context, array $blocks = []): iterable
  114.     {
  115.         $macros $this->macros;
  116.         $__internal_5a27a8ba21ca79b61932376b2fa922d2 $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  117.         $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block""css"));
  118.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  119.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block""css"));
  120.         // line 12
  121.         yield "    <style>
  122.         .wr-search-section{position:relative;z-index:2;width:100%;max-width:720px;margin:0 auto}
  123.         .wr-search-bar{display:flex;align-items:center;background:#fff;border-radius:16px;padding:6px;box-shadow:0 4px 24px rgba(108,58,237,.08),0 1px 3px rgba(0,0,0,.04);border:2px solid transparent;transition:border-color .3s,box-shadow .3s;cursor:pointer}
  124.         .wr-search-bar:hover,.wr-search-bar.active{border-color:rgba(108,58,237,.2);box-shadow:0 8px 32px rgba(108,58,237,.12),0 2px 6px rgba(0,0,0,.04)}
  125.         .wr-search-icon{padding:12px 14px;color:#9CA3AF;display:flex;align-items:center;flex-shrink:0}
  126.         .wr-search-input-wrapper{flex:1;position:relative;height:48px;display:flex;align-items:center;overflow:hidden}
  127.         .wr-search-real-input{width:100%;border:none;outline:none;font-size:16px;color:#1E1B2E;background:transparent;font-family:inherit}
  128.         .wr-search-real-input::placeholder{color:#9CA3AF}
  129.         .wr-search-btn{background:var(--color-primary,#6C3AED);color:#fff;border:none;padding:12px 24px;border-radius:12px;font-size:15px;font-weight:600;cursor:pointer;display:flex;align-items:center;gap:6px;transition:background .2s,transform .15s;flex-shrink:0;font-family:inherit}
  130.         .wr-search-btn:hover{filter:brightness(1.1);transform:scale(1.02)}
  131.         @media(max-width:640px){.wr-search-btn span{display:none}.wr-search-btn{padding:12px 14px}}
  132.         .wr-search-results{position:relative;background:#fff;border-radius:16px;box-shadow:0 12px 48px rgba(0,0,0,.1),0 2px 8px rgba(0,0,0,.04);padding:0;max-height:0;overflow:hidden;transition:max-height .5s ease,padding .5s ease,margin .5s ease,opacity .4s ease;z-index:10;opacity:0;margin-top:0}
  133.         .wr-search-results.visible{max-height:2000px;padding:8px;margin-top:12px;opacity:1}
  134.         .wr-result-item{display:flex;align-items:center;gap:14px;padding:12px 14px;border-radius:12px;cursor:pointer;transition:background .2s,opacity .3s ease,transform .3s ease;opacity:0;transform:translateY(8px);text-decoration:none;color:inherit}
  135.         .wr-result-item.show{opacity:1;transform:translateY(0)}
  136.         .wr-result-item:hover{background:#F5F3FF}
  137.         .wr-result-item+.wr-result-item{border-top:1px solid rgba(0,0,0,.04)}
  138.         .wr-result-logo{width:44px;height:44px;border-radius:10px;display:flex;align-items:center;justify-content:center;font-size:18px;flex-shrink:0;font-weight:700}
  139.         .wr-result-logo img{width:100%;height:100%;object-fit:cover;border-radius:10px}
  140.         .wr-result-info{flex:1;text-align:left;min-width:0}
  141.         .wr-result-title{font-size:14px;font-weight:600;color:#1E1B2E;margin-bottom:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  142.         .wr-result-meta{display:flex;align-items:center;gap:8px;font-size:12px;color:#9CA3AF;flex-wrap:wrap}
  143.         .wr-result-company{color:#4B5563;font-weight:500}
  144.         .wr-result-badge{display:inline-flex;padding:2px 8px;border-radius:6px;font-size:11px;font-weight:600}
  145.         .wr-badge-new{background:#DCFCE7;color:#16A34A}
  146.         .wr-result-salary{font-size:13px;font-weight:600;color:var(--color-primary,#6C3AED);white-space:nowrap}
  147.         .wr-result-actions{display:flex;align-items:center;gap:8px;flex-shrink:0}
  148.         .wr-loading{text-align:center;padding:30px 20px}
  149.         .wr-spinner{display:inline-block;width:28px;height:28px;border:3px solid rgba(108,58,237,.15);border-top-color:var(--color-primary,#6C3AED);border-radius:50%;animation:wrSpin .7s linear infinite}
  150.         @keyframes wrSpin{to{transform:rotate(360deg)}}
  151.         .wr-empty-state{text-align:center;padding:40px 20px}
  152.         .wr-empty-icon{font-size:40px;margin-bottom:12px}
  153.         .wr-empty-title{font-size:16px;font-weight:600;color:#1E1B2E;margin:0 0 6px}
  154.         .wr-empty-text{font-size:14px;color:#9CA3AF;margin:0}
  155.         .wr-load-more{display:flex;justify-content:center;padding:12px 8px 4px}
  156.         .wr-load-more-btn{background:none;border:2px solid var(--color-primary,#6C3AED);color:var(--color-primary,#6C3AED);padding:8px 24px;border-radius:10px;font-size:14px;font-weight:600;cursor:pointer;transition:all .2s;font-family:inherit}
  157.         .wr-load-more-btn:hover{background:var(--color-primary,#6C3AED);color:#fff}
  158.         .wr-load-more-btn:disabled{opacity:.5;cursor:not-allowed}
  159.         .wr-results-count{text-align:center;padding:10px;font-size:13px;color:#9CA3AF;border-top:1px solid rgba(0,0,0,.04);margin-top:4px}
  160.         .wr-results-count strong{color:var(--color-primary,#6C3AED)}
  161.         .wr-search-close-wrap{text-align:right;padding:4px 8px 0}
  162.         .wr-search-close-btn{background:none;border:1px solid rgba(0,0,0,.1);color:#9CA3AF;padding:4px 12px;border-radius:8px;font-size:12px;cursor:pointer;transition:all .2s;font-family:inherit}
  163.         .wr-search-close-btn:hover{background:#F5F3FF;color:var(--color-primary,#6C3AED);border-color:rgba(108,58,237,.2)}
  164.         ";
  165.         // line 57
  166.         yield "        .job-tags{display:flex;flex-wrap:wrap;gap:8px;justify-content:center}
  167.         .job-tag{display:inline-flex;align-items:center;gap:5px;padding:6px 14px;border-radius:100px;font-size:13px;font-weight:500;background:#fff;border:1px solid rgba(0,0,0,.08);color:#4B5563}
  168.         .job-tag i,.job-tag svg{font-size:13px;color:var(--color-primary,#6C3AED);width:14px;height:14px}
  169.         .job-tag-salary{background:linear-gradient(135deg,#EDE9FE,#F5F3FF);border-color:rgba(108,58,237,.15);color:var(--color-primary,#6C3AED);font-weight:600}
  170.         .job-tag-external{background:#FFFBEB;border-color:rgba(245,158,11,.2);color:#92400E;font-size:12px}
  171.         .job-body-card{background:#fff;border-radius:20px;box-shadow:0 4px 32px rgba(0,0,0,.06),0 1px 4px rgba(0,0,0,.03);border:1px solid rgba(0,0,0,.05);padding:32px;max-width:780px;margin:0 auto}
  172.         @media(max-width:640px){.job-body-card{padding:20px;border-radius:16px}}
  173.         .job-section-title{font-size:15px;font-weight:700;color:var(--color-primary,#6C3AED);text-transform:uppercase;letter-spacing:.06em;margin:0 0 10px;display:flex;align-items:center;gap:8px}
  174.         .job-section-title::before{content:'';display:inline-block;width:4px;height:18px;border-radius:2px;background:var(--color-primary,#6C3AED)}
  175.         .job-section-text{font-size:16px;line-height:1.75;color:#374151;margin:0}
  176.         .job-section-divider{border:none;border-top:1px solid rgba(0,0,0,.06);margin:24px 0}
  177.         .job-cta-bar{display:flex;align-items:center;justify-content:center;gap:12px;flex-wrap:wrap;padding:24px 0 0}
  178.         .job-cta-main{display:inline-flex;align-items:center;gap:8px;padding:14px 32px;border-radius:14px;font-size:16px;font-weight:700;border:none;cursor:pointer;transition:all .2s;text-decoration:none;font-family:inherit}
  179.         .job-cta-main.active{background:var(--color-primary,#6C3AED);color:#fff;box-shadow:0 4px 16px rgba(108,58,237,.25)}
  180.         .job-cta-main.active:hover{filter:brightness(1.1);transform:translateY(-1px);box-shadow:0 6px 24px rgba(108,58,237,.3)}
  181.         .job-cta-main.disabled{background:#E5E7EB;color:#9CA3AF;cursor:default;box-shadow:none;pointer-events:none}
  182.         .job-cta-company{display:inline-flex;align-items:center;gap:6px;padding:14px 24px;border-radius:14px;font-size:15px;font-weight:600;border:2px solid rgba(0,0,0,.08);background:#fff;color:#374151;cursor:pointer;transition:all .2s;text-decoration:none;font-family:inherit}
  183.         .job-cta-company:hover{border-color:rgba(108,58,237,.2);color:var(--color-primary,#6C3AED)}
  184.         .job-locked-overlay{position:relative;margin-top:24px}
  185.         .job-locked-blur{filter:blur(6px);opacity:.4;pointer-events:none;user-select:none}
  186.         .job-locked-cta{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;background:rgba(255,255,255,.7);backdrop-filter:blur(3px);border-radius:16px;padding:20px}
  187.         .job-locked-title{font-size:18px;font-weight:700;color:#1E1B2E;text-align:center}
  188.         .job-locked-text{font-size:14px;color:#6B7280;text-align:center;max-width:360px}
  189.         .job-locked-btn{display:inline-flex;align-items:center;gap:6px;padding:12px 28px;background:var(--color-primary,#6C3AED);color:#fff;border:none;border-radius:12px;font-size:15px;font-weight:600;cursor:pointer;transition:all .2s;text-decoration:none;font-family:inherit}
  190.         .job-locked-btn:hover{filter:brightness(1.1);transform:translateY(-1px)}
  191.         .job-locked-login{font-size:13px;color:#6B7280}
  192.         .job-locked-login a{color:var(--color-primary,#6C3AED);font-weight:600;text-decoration:none}
  193.         .job-locked-login a:hover{text-decoration:underline}
  194.     </style>
  195. ";
  196.         
  197.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  198.         
  199.         $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  200.         yield from [];
  201.     }
  202.     // line 88
  203.     /**
  204.      * @return iterable<null|scalar|\Stringable>
  205.      */
  206.     public function block_body(array $context, array $blocks = []): iterable
  207.     {
  208.         $macros $this->macros;
  209.         $__internal_5a27a8ba21ca79b61932376b2fa922d2 $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  210.         $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block""body"));
  211.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  212.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block""body"));
  213.         // line 89
  214.         yield "
  215.     <div id=\"hero_header\" class=\"hero-header section panel overflow-hidden\">
  216.         <div class=\"position-absolute top-0 start-0 end-0 h-screen dark:bg-gray-300 dark:bg-opacity-15 rounded-bottom-2 lg:rounded-bottom-5\"></div>
  217.         <div class=\"section-outer panel py-8 lg:py-9 xl:py-10\">
  218.             <div class=\"container\">
  219.                 <div class=\"section-inner panel\">
  220.                     <div class=\"d-none xl:d-block\">
  221.                         <div class=\"position-absolute rounded-circle border border-dashed border-primary-300 dark:border-white dark:border-opacity-15 cstack w-56px h-56px d-none lg:d-block\" style=\"top: 5%; left: 5%\" data-anime=\"translateY: [0, 10]; easing: linear; loop: true; direction: alternate; delay: 0;\"><img class=\"p-narrow rounded-circle\" src=\"/uploads/no_avatar.png\" alt=\"Candidat anonyme\"></div>
  222.                         <div class=\"position-absolute rounded-circle border border-dashed border-primary-300 dark:border-white dark:border-opacity-15 cstack w-56px h-56px d-none lg:d-block\" style=\"top: 20%; left: 10%\" data-anime=\"translateY: [0, 15]; easing: linear; loop: true; direction: alternate; delay: 25;\"><img class=\"p-narrow rounded-circle\" src=\"/uploads/no_avatar.png\" alt=\"Candidat anonyme\"></div>
  223.                         <div class=\"position-absolute rounded-circle border border-dashed border-primary-300 dark:border-white dark:border-opacity-15 cstack w-56px h-56px d-none lg:d-block\" style=\"top: 35%; left: 0%\" data-anime=\"translateY: [0, 5]; easing: linear; loop: true; direction: alternate; delay: 25;\"><img class=\"p-narrow rounded-circle\" src=\"/uploads/no_avatar.png\" alt=\"Candidat anonyme\"></div>
  224.                         <div class=\"position-absolute rounded-circle border border-dashed border-primary-300 dark:border-white dark:border-opacity-15 cstack w-56px h-56px d-none lg:d-block\" style=\"top: 5%; right: 5%\" data-anime=\"translateY: [0, 10]; easing: linear; loop: true; direction: alternate; delay: 0;\"><img class=\"p-narrow rounded-circle\" src=\"/uploads/no_avatar.png\" alt=\"Candidat anonyme\"></div>
  225.                         <div class=\"position-absolute rounded-circle border border-dashed border-primary-300 dark:border-white dark:border-opacity-15 cstack w-56px h-56px d-none lg:d-block\" style=\"top: 20%; right: 10%\" data-anime=\"translateY: [0, 15]; easing: linear; loop: true; direction: alternate; delay: 25;\"><img class=\"p-narrow rounded-circle\" src=\"/uploads/no_avatar.png\" alt=\"Candidat anonyme\"></div>
  226.                         <div class=\"position-absolute rounded-circle border border-dashed border-primary-300 dark:border-white dark:border-opacity-15 cstack w-56px h-56px d-none lg:d-block\" style=\"top: 35%; right: 0%\" data-anime=\"translateY: [0, 5]; easing: linear; loop: true; direction: alternate; delay: 25;\"><img class=\"p-narrow rounded-circle\" src=\"/uploads/no_avatar.png\" alt=\"Candidat anonyme\"></div>
  227.                     </div>
  228.                     <div class=\"row child-cols-12 justify-center items-center g-8\">
  229.                         <div class=\"lg:col-12\">
  230.                             <div class=\"panel vstack gap-4 lg:gap-6\">
  231.                                 <div class=\"panel vstack justify-center items-center gap-2 px-2 pt-4 text-center\">
  232.                                     <span class=\"fs-6 fw-bold text-uppercase text-primary\">";
  233.         // line 107
  234.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source, (isset($context["job"]) || array_key_exists("job"$context) ? $context["job"] : (function () { throw new RuntimeError('Variable "job" does not exist.'107$this->source); })()), "companyName", [], "any"falsefalsefalse107), "html"nulltrue);
  235.         yield " recherche</span>
  236.                                     <h1 class=\"h3 md:h2 lg:display-4 m-0\">";
  237.         // line 108
  238.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source, (isset($context["job"]) || array_key_exists("job"$context) ? $context["job"] : (function () { throw new RuntimeError('Variable "job" does not exist.'108$this->source); })()), "jobtitle", [], "any"falsefalsefalse108), "html"nulltrue);
  239.         yield "</h1>
  240.                                 </div>
  241.                                 <div class=\"wr-search-section\" id=\"wrSearchSection\">
  242.                                     <div class=\"wr-search-bar\" id=\"wrSearchBar\">
  243.                                         <div class=\"wr-search-icon\">
  244.                                             <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"11\" cy=\"11\" r=\"8\"/><path d=\"M21 21l-4.35-4.35\"/></svg>
  245.                                         </div>
  246.                                         <div class=\"wr-search-input-wrapper\">
  247.                                             <input type=\"text\" id=\"wrSearchInput\" class=\"wr-search-real-input\" placeholder=\"Rechercher un poste, une entreprise, une ville...\" autocomplete=\"off\">
  248.                                         </div>
  249.                                         <button class=\"wr-search-btn\" id=\"wrSearchBtn\">
  250.                                             <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"11\" cy=\"11\" r=\"8\"/><path d=\"M21 21l-4.35-4.35\"/></svg>
  251.                                             <span>Rechercher</span>
  252.                                         </button>
  253.                                     </div>
  254.                                 </div>
  255.                                 <div class=\"wr-search-results\" id=\"wrSearchResults\">
  256.                                     <div class=\"wr-search-close-wrap\">
  257.                                         <button class=\"wr-search-close-btn\" id=\"wrSearchClose\">✕ Fermer</button>
  258.                                     </div>
  259.                                     <div id=\"wrJobsList\"></div>
  260.                                     <div id=\"wrLoading\" class=\"wr-loading\" style=\"display:none;\">
  261.                                         <div class=\"wr-spinner\"></div>
  262.                                     </div>
  263.                                     <div id=\"wrEmptyState\" class=\"wr-empty-state\" style=\"display:none;\">
  264.                                         <div class=\"wr-empty-icon\">🔍</div>
  265.                                         <p class=\"wr-empty-title\">Aucune offre ne correspond à votre recherche</p>
  266.                                         <p class=\"wr-empty-text\">Essayez avec d'autres mots-clés</p>
  267.                                     </div>
  268.                                     <div id=\"wrLoadMore\" class=\"wr-load-more\" style=\"display:none;\">
  269.                                         <button class=\"wr-load-more-btn\" id=\"wrLoadMoreBtn\">Voir plus d'offres</button>
  270.                                     </div>
  271.                                     <div class=\"wr-results-count\" id=\"wrResultsCount\" style=\"display:none;\">
  272.                                         <strong id=\"wrTotalCount\">0</strong> offres trouvées
  273.                                     </div>
  274.                                 </div>
  275.                             </div>
  276.                         </div>
  277.                     </div>
  278.                 </div>
  279.             </div>
  280.         </div>
  281.     </div>
  282.     ";
  283.         // line 158
  284.         yield "    <div id=\"job_details\" class=\"job-details section panel pb-6 xl:pb-9\">
  285.         <div class=\"section-outer panel\">
  286.             <div class=\"container max-w-lg\">
  287.                 <div class=\"section-inner panel\">
  288.                     ";
  289.         // line 164
  290.         yield "                    <div class=\"job-tags mb-4\" style=\"margin-top:-10px;\">
  291.                         ";
  292.         // line 165
  293.         if ((($tmp =  !Twig\Extension\CoreExtension::testEmpty(CoreExtension::getAttribute($this->env$this->source, (isset($context["job"]) || array_key_exists("job"$context) ? $context["job"] : (function () { throw new RuntimeError('Variable "job" does not exist.'165$this->source); })()), "companyName", [], "any"falsefalsefalse165))) && $tmp instanceof Markup ? (string) $tmp $tmp)) {
  294.             // line 166
  295.             yield "                            <span class=\"job-tag\">
  296.                                 <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><rect x=\"2\" y=\"7\" width=\"20\" height=\"14\" rx=\"2\"/><path d=\"M16 7V5a4 4 0 00-8 0v2\"/></svg>
  297.                                 ";
  298.             // line 168
  299.             yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source, (isset($context["job"]) || array_key_exists("job"$context) ? $context["job"] : (function () { throw new RuntimeError('Variable "job" does not exist.'168$this->source); })()), "companyName", [], "any"falsefalsefalse168), "html"nulltrue);
  300.             yield "
  301.                             </span>
  302.                         ";
  303.         }
  304.         // line 171
  305.         yield "                        ";
  306.         if ((($tmp =  !Twig\Extension\CoreExtension::testEmpty(CoreExtension::getAttribute($this->env$this->source, (isset($context["job"]) || array_key_exists("job"$context) ? $context["job"] : (function () { throw new RuntimeError('Variable "job" does not exist.'171$this->source); })()), "employmentType", [], "any"falsefalsefalse171))) && $tmp instanceof Markup ? (string) $tmp $tmp)) {
  307.             // line 172
  308.             yield "                            <span class=\"job-tag\">
  309.                                 <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M12 6v6l4 2\"/></svg>
  310.                                 ";
  311.             // line 174
  312.             yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source, (isset($context["job"]) || array_key_exists("job"$context) ? $context["job"] : (function () { throw new RuntimeError('Variable "job" does not exist.'174$this->source); })()), "employmentType", [], "any"falsefalsefalse174), "html"nulltrue);
  313.             yield "
  314.                             </span>
  315.                         ";
  316.         }
  317.         // line 177
  318.         yield "                        ";
  319.         if ((($tmp =  !Twig\Extension\CoreExtension::testEmpty(CoreExtension::getAttribute($this->env$this->source, (isset($context["job"]) || array_key_exists("job"$context) ? $context["job"] : (function () { throw new RuntimeError('Variable "job" does not exist.'177$this->source); })()), "city", [], "any"falsefalsefalse177))) && $tmp instanceof Markup ? (string) $tmp $tmp)) {
  320.             // line 178
  321.             yield "                            <span class=\"job-tag\">
  322.                                 <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0118 0z\"/><circle cx=\"12\" cy=\"10\" r=\"3\"/></svg>
  323.                                 ";
  324.             // line 180
  325.             yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source, (isset($context["job"]) || array_key_exists("job"$context) ? $context["job"] : (function () { throw new RuntimeError('Variable "job" does not exist.'180$this->source); })()), "city", [], "any"falsefalsefalse180), "html"nulltrue);
  326.             if ((($tmp =  !(null === CoreExtension::getAttribute($this->env$this->source, (isset($context["job"]) || array_key_exists("job"$context) ? $context["job"] : (function () { throw new RuntimeError('Variable "job" does not exist.'180$this->source); })()), "country", [], "any"falsefalsefalse180))) && $tmp instanceof Markup ? (string) $tmp $tmp)) {
  327.                 yield ", ";
  328.                 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source, (isset($context["job"]) || array_key_exists("job"$context) ? $context["job"] : (function () { throw new RuntimeError('Variable "job" does not exist.'180$this->source); })()), "country", [], "any"falsefalsefalse180), "html"nulltrue);
  329.             }
  330.             // line 181
  331.             yield "                            </span>
  332.                         ";
  333.         }
  334.         // line 183
  335.         yield "                        ";
  336.         if ((($tmp =  !Twig\Extension\CoreExtension::testEmpty(CoreExtension::getAttribute($this->env$this->source, (isset($context["job"]) || array_key_exists("job"$context) ? $context["job"] : (function () { throw new RuntimeError('Variable "job" does not exist.'183$this->source); })()), "remoteWork", [], "any"falsefalsefalse183))) && $tmp instanceof Markup ? (string) $tmp $tmp)) {
  337.             // line 184
  338.             yield "                            <span class=\"job-tag\">
  339.                                 <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\"/><path d=\"M8 21h8M12 17v4\"/></svg>
  340.                                 ";
  341.             // line 186
  342.             yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source, (isset($context["job"]) || array_key_exists("job"$context) ? $context["job"] : (function () { throw new RuntimeError('Variable "job" does not exist.'186$this->source); })()), "remoteWork", [], "any"falsefalsefalse186), "html"nulltrue);
  343.             yield "
  344.                             </span>
  345.                         ";
  346.         }
  347.         // line 189
  348.         yield "                        ";
  349.         if ((($tmp =  !Twig\Extension\CoreExtension::testEmpty(CoreExtension::getAttribute($this->env$this->source, (isset($context["job"]) || array_key_exists("job"$context) ? $context["job"] : (function () { throw new RuntimeError('Variable "job" does not exist.'189$this->source); })()), "experienceLevel", [], "any"falsefalsefalse189))) && $tmp instanceof Markup ? (string) $tmp $tmp)) {
  350.             // line 190
  351.             yield "                            <span class=\"job-tag\">
  352.                                 <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M22 11.08V12a10 10 0 11-5.93-9.14\"/><path d=\"M22 4L12 14.01l-3-3\"/></svg>
  353.                                 +";
  354.             // line 192
  355.             yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source, (isset($context["job"]) || array_key_exists("job"$context) ? $context["job"] : (function () { throw new RuntimeError('Variable "job" does not exist.'192$this->source); })()), "experienceLevel", [], "any"falsefalsefalse192), "html"nulltrue);
  356.             yield " ans d'expérience
  357.                             </span>
  358.                         ";
  359.         }
  360.         // line 195
  361.         yield "                        ";
  362.         if ((($tmp =  !(null === CoreExtension::getAttribute($this->env$this->source, (isset($context["job"]) || array_key_exists("job"$context) ? $context["job"] : (function () { throw new RuntimeError('Variable "job" does not exist.'195$this->source); })()), "salaryPeriod", [], "any"falsefalsefalse195))) && $tmp instanceof Markup ? (string) $tmp $tmp)) {
  363.             // line 196
  364.             yield "                            <span class=\"job-tag job-tag-salary\">
  365.                                 <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><line x1=\"12\" y1=\"1\" x2=\"12\" y2=\"23\"/><path d=\"M17 5H9.5a3.5 3.5 0 000 7h5a3.5 3.5 0 010 7H6\"/></svg>
  366.                                 ";
  367.             // line 198
  368.             yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source, (isset($context["job"]) || array_key_exists("job"$context) ? $context["job"] : (function () { throw new RuntimeError('Variable "job" does not exist.'198$this->source); })()), "salaryMin", [], "any"falsefalsefalse198), "html"nulltrue);
  369.             yield " – ";
  370.             yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source, (isset($context["job"]) || array_key_exists("job"$context) ? $context["job"] : (function () { throw new RuntimeError('Variable "job" does not exist.'198$this->source); })()), "salaryMax", [], "any"falsefalsefalse198), "html"nulltrue);
  371.             yield " ";
  372.             yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source, (isset($context["job"]) || array_key_exists("job"$context) ? $context["job"] : (function () { throw new RuntimeError('Variable "job" does not exist.'198$this->source); })()), "devise", [], "any"falsefalsefalse198), "html"nulltrue);
  373.             yield "/";
  374.             yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source, (isset($context["job"]) || array_key_exists("job"$context) ? $context["job"] : (function () { throw new RuntimeError('Variable "job" does not exist.'198$this->source); })()), "salaryPeriod", [], "any"falsefalsefalse198), "html"nulltrue);
  375.             yield "
  376.                             </span>
  377.                         ";
  378.         }
  379.         // line 201
  380.         yield "                        ";
  381.         if ((CoreExtension::getAttribute($this->env$this->source, (isset($context["job"]) || array_key_exists("job"$context) ? $context["job"] : (function () { throw new RuntimeError('Variable "job" does not exist.'201$this->source); })()), "verification", [], "any"falsefalsefalse201) == 0)) {
  382.             // line 202
  383.             yield "                            <span class=\"job-tag job-tag-external\">
  384.                                 ⚡ Offre indexée — source externe
  385.                             </span>
  386.                         ";
  387.         }
  388.         // line 206
  389.         yield "                    </div>
  390.                     ";
  391.         // line 209
  392.         yield "                    <div class=\"job-body-card\">
  393.                         ";
  394.         // line 212
  395.         yield "                        ";
  396.         if ((($tmp =  !(null === CoreExtension::getAttribute($this->env$this->source, (isset($context["job"]) || array_key_exists("job"$context) ? $context["job"] : (function () { throw new RuntimeError('Variable "job" does not exist.'212$this->source); })()), "jobSummary", [], "any"falsefalsefalse212))) && $tmp instanceof Markup ? (string) $tmp $tmp)) {
  397.             // line 213
  398.             yield "                            <div class=\"job-section-title\">Présentation du poste</div>
  399.                             <p class=\"job-section-text\">";
  400.             // line 214
  401.             yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source, (isset($context["job"]) || array_key_exists("job"$context) ? $context["job"] : (function () { throw new RuntimeError('Variable "job" does not exist.'214$this->source); })()), "jobSummary", [], "any"falsefalsefalse214), "html"nulltrue);
  402.             yield "</p>
  403.                         ";
  404.         }
  405.         // line 216
  406.         yield "
  407.                         ";
  408.         // line 217
  409.         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.'217$this->source); })()), "user", [], "any"falsefalsefalse217))) {
  410.             // line 218
  411.             yield "                            <hr class=\"job-section-divider\">
  412.                             <div class=\"job-section-title\">Missions</div>
  413.                             <p class=\"job-section-text\">Retrouvez ici le détail complet des missions proposées pour ce poste : responsabilités quotidiennes, projets à mener, objectifs à atteindre et périmètre d'intervention au sein de l'équipe. Toutes les informations pour vous projeter concrètement dans le poste et savoir exactement ce qui vous attend dès votre prise de fonction.</p>
  414.                             <hr class=\"job-section-divider\">
  415.                             <div class=\"job-section-title\">Profil recherché</div>
  416.                             <p class=\"job-section-text\">Accédez aux compétences techniques et humaines attendues par le recruteur, au niveau d'expérience requis, aux formations valorisées et aux qualités personnelles recherchées. Vérifiez en un coup d'œil si votre profil correspond à cette opportunité avant de candidater.</p>
  417.                             <hr class=\"job-section-divider\">
  418.                             <div class=\"job-section-title\">Avantages</div>
  419.                             <p class=\"job-section-text\">Découvrez ce que l'entreprise propose à ses collaborateurs : politique de télétravail, couverture santé, primes, formation continue, ambiance de travail et perspectives d'évolution. Toutes les informations pour comparer cette offre avec vos attentes et faire le bon choix.</p>
  420.                         ";
  421.         }
  422.         // line 231
  423.         yield "
  424.                         ";
  425.         // line 232
  426.         if ((($tmp =  !(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.'232$this->source); })()), "user", [], "any"falsefalsefalse232))) && $tmp instanceof Markup ? (string) $tmp $tmp)) {
  427.             // line 233
  428.             yield "                            ";
  429.             // line 234
  430.             yield "
  431.                             ";
  432.             // line 235
  433.             if ((($tmp =  !(null === CoreExtension::getAttribute($this->env$this->source, (isset($context["job"]) || array_key_exists("job"$context) ? $context["job"] : (function () { throw new RuntimeError('Variable "job" does not exist.'235$this->source); })()), "keyResponsabilities", [], "any"falsefalsefalse235))) && $tmp instanceof Markup ? (string) $tmp $tmp)) {
  434.                 // line 236
  435.                 yield "                                <hr class=\"job-section-divider\">
  436.                                 <div class=\"job-section-title\">Missions</div>
  437.                                 <p class=\"job-section-text\">";
  438.                 // line 238
  439.                 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source, (isset($context["job"]) || array_key_exists("job"$context) ? $context["job"] : (function () { throw new RuntimeError('Variable "job" does not exist.'238$this->source); })()), "keyResponsabilities", [], "any"falsefalsefalse238), "html"nulltrue);
  440.                 yield "</p>
  441.                             ";
  442.             }
  443.             // line 240
  444.             yield "
  445.                             ";
  446.             // line 241
  447.             if ((($tmp =  !(null === CoreExtension::getAttribute($this->env$this->source, (isset($context["job"]) || array_key_exists("job"$context) ? $context["job"] : (function () { throw new RuntimeError('Variable "job" does not exist.'241$this->source); })()), "requirements", [], "any"falsefalsefalse241))) && $tmp instanceof Markup ? (string) $tmp $tmp)) {
  448.                 // line 242
  449.                 yield "                                <hr class=\"job-section-divider\">
  450.                                 <div class=\"job-section-title\">Profil recherché</div>
  451.                                 <p class=\"job-section-text\">";
  452.                 // line 244
  453.                 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source, (isset($context["job"]) || array_key_exists("job"$context) ? $context["job"] : (function () { throw new RuntimeError('Variable "job" does not exist.'244$this->source); })()), "requirements", [], "any"falsefalsefalse244), "html"nulltrue);
  454.                 yield "</p>
  455.                             ";
  456.             }
  457.             // line 246
  458.             yield "
  459.                             ";
  460.             // line 247
  461.             if ((($tmp =  !(null === CoreExtension::getAttribute($this->env$this->source, (isset($context["job"]) || array_key_exists("job"$context) ? $context["job"] : (function () { throw new RuntimeError('Variable "job" does not exist.'247$this->source); })()), "benefits", [], "any"falsefalsefalse247))) && $tmp instanceof Markup ? (string) $tmp $tmp)) {
  462.                 // line 248
  463.                 yield "                                <hr class=\"job-section-divider\">
  464.                                 <div class=\"job-section-title\">Avantages</div>
  465.                                 <p class=\"job-section-text\">";
  466.                 // line 250
  467.                 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source, (isset($context["job"]) || array_key_exists("job"$context) ? $context["job"] : (function () { throw new RuntimeError('Variable "job" does not exist.'250$this->source); })()), "benefits", [], "any"falsefalsefalse250), "html"nulltrue);
  468.                 yield "</p>
  469.                             ";
  470.             }
  471.             // line 252
  472.             yield "
  473.                             ";
  474.             // line 254
  475.             yield "                            <div class=\"job-cta-bar\">
  476.                                 ";
  477.             // line 256
  478.             if ((($tmp =  !(null === CoreExtension::getAttribute($this->env$this->sourceCoreExtension::getAttribute($this->env$this->source, (isset($context["app"]) || array_key_exists("app"$context) ? $context["app"] : (function () { throw new RuntimeError('Variable "app" does not exist.'256$this->source); })()), "user", [], "any"falsefalsefalse256), "candidate", [], "any"falsefalsefalse256))) && $tmp instanceof Markup ? (string) $tmp $tmp)) {
  479.                 // line 257
  480.                 yield "                                    <a href=\"";
  481.                 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("locale_cvs_application_job_like", ["_locale" => CoreExtension::getAttribute($this->env$this->sourceCoreExtension::getAttribute($this->env$this->source, (isset($context["app"]) || array_key_exists("app"$context) ? $context["app"] : (function () { throw new RuntimeError('Variable "app" does not exist.'257$this->source); })()), "request", [], "any"falsefalsefalse257), "locale", [], "any"falsefalsefalse257), "slug" => CoreExtension::getAttribute($this->env$this->source, (isset($context["job"]) || array_key_exists("job"$context) ? $context["job"] : (function () { throw new RuntimeError('Variable "job" does not exist.'257$this->source); })()), "slug", [], "any"falsefalsefalse257)]), "html"nulltrue);
  482.                 yield "\" class=\"job-cta-main active\">
  483.                                         <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"currentColor\" stroke=\"none\"><path d=\"M20.84 4.61a5.5 5.5 0 00-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 00-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 000-7.78z\"/></svg>
  484.                                         Je suis intéressé(e)
  485.                                     </a>
  486.                                 ";
  487.             }
  488.             // line 262
  489.             yield "
  490.                                 ";
  491.             // line 263
  492.             if (((CoreExtension::getAttribute($this->env$this->source, (isset($context["job"]) || array_key_exists("job"$context) ? $context["job"] : (function () { throw new RuntimeError('Variable "job" does not exist.'263$this->source); })()), "websearch", [], "any"falsefalsefalse263) == 1) &&  !Twig\Extension\CoreExtension::testEmpty(CoreExtension::getAttribute($this->env$this->source, (isset($context["job"]) || array_key_exists("job"$context) ? $context["job"] : (function () { throw new RuntimeError('Variable "job" does not exist.'263$this->source); })()), "website", [], "any"falsefalsefalse263)))) {
  493.                 // line 264
  494.                 yield "                                    <a href=\"";
  495.                 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source, (isset($context["job"]) || array_key_exists("job"$context) ? $context["job"] : (function () { throw new RuntimeError('Variable "job" does not exist.'264$this->source); })()), "website", [], "any"falsefalsefalse264), "html"nulltrue);
  496.                 yield "\" target=\"_blank\" class=\"job-cta-main active\">
  497.                                         <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M18 13v6a2 2 0 01-2 2H5a2 2 0 01-2-2V8a2 2 0 012-2h6\"/><polyline points=\"15 3 21 3 21 9\"/><line x1=\"10\" y1=\"14\" x2=\"21\" y2=\"3\"/></svg>
  498.                                         Candidater
  499.                                     </a>
  500.                                 ";
  501.             }
  502.             // line 269
  503.             yield "
  504.                                 ";
  505.             // line 270
  506.             if ((($tmp =  !(null === CoreExtension::getAttribute($this->env$this->source, (isset($context["job"]) || array_key_exists("job"$context) ? $context["job"] : (function () { throw new RuntimeError('Variable "job" does not exist.'270$this->source); })()), "enterprise", [], "any"falsefalsefalse270))) && $tmp instanceof Markup ? (string) $tmp $tmp)) {
  507.                 // line 271
  508.                 yield "                                    <a href=\"";
  509.                 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("locale_cvs_application_company_show", ["_locale" => CoreExtension::getAttribute($this->env$this->sourceCoreExtension::getAttribute($this->env$this->source, (isset($context["app"]) || array_key_exists("app"$context) ? $context["app"] : (function () { throw new RuntimeError('Variable "app" does not exist.'271$this->source); })()), "request", [], "any"falsefalsefalse271), "locale", [], "any"falsefalsefalse271), "slug" => CoreExtension::getAttribute($this->env$this->sourceCoreExtension::getAttribute($this->env$this->source, (isset($context["job"]) || array_key_exists("job"$context) ? $context["job"] : (function () { throw new RuntimeError('Variable "job" does not exist.'271$this->source); })()), "enterprise", [], "any"falsefalsefalse271), "slug", [], "any"falsefalsefalse271)]), "html"nulltrue);
  510.                 yield "\" class=\"job-cta-company\">
  511.                                         <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><rect x=\"2\" y=\"7\" width=\"20\" height=\"14\" rx=\"2\"/><path d=\"M16 7V5a4 4 0 00-8 0v2\"/></svg>
  512.                                         Voir les autres offres
  513.                                     </a>
  514.                                 ";
  515.             }
  516.             // line 276
  517.             yield "                            </div>
  518.                         ";
  519.         } else {
  520.             // line 279
  521.             yield "                            ";
  522.             // line 280
  523.             yield "
  524.                             ";
  525.             // line 282
  526.             yield "                            <div class=\"job-locked-overlay\">
  527.                                 <div class=\"job-locked-blur\">
  528.                                     <hr class=\"job-section-divider\">
  529.                                     <div class=\"job-section-title\">Missions</div>
  530.                                     <p class=\"job-section-text\">Découvrez les missions principales de ce poste, les responsabilités quotidiennes et les projets sur lesquels vous interviendrez au sein de l'équipe...</p>
  531.                                     <hr class=\"job-section-divider\">
  532.                                     <div class=\"job-section-title\">Profil recherché</div>
  533.                                     <p class=\"job-section-text\">Compétences techniques et soft skills recherchées, niveau d'expérience attendu, formations et certifications appréciées pour ce poste...</p>
  534.                                     <hr class=\"job-section-divider\">
  535.                                     <div class=\"job-section-title\">Avantages</div>
  536.                                     <p class=\"job-section-text\">Télétravail, mutuelle, tickets restaurant, formation continue, ambiance de travail et perspectives d'évolution au sein de l'entreprise...</p>
  537.                                 </div>
  538.                                 <div class=\"job-locked-cta\">
  539.                                     <div style=\"font-size:32px;\">🔓</div>
  540.                                     <div class=\"job-locked-title\">Débloquez l'offre complète</div>
  541.                                     <div class=\"job-locked-text\">Créez votre profil en 2 minutes pour accéder aux missions, avantages et candidater directement</div>
  542.                                     <a href=\"";
  543.             // line 298
  544.             yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("locale_app_register", ["_locale" => CoreExtension::getAttribute($this->env$this->sourceCoreExtension::getAttribute($this->env$this->source, (isset($context["app"]) || array_key_exists("app"$context) ? $context["app"] : (function () { throw new RuntimeError('Variable "app" does not exist.'298$this->source); })()), "request", [], "any"falsefalsefalse298), "locale", [], "any"falsefalsefalse298)]), "html"nulltrue);
  545.             yield "\" class=\"job-locked-btn\">
  546.                                         Créer mon profil gratuitement
  547.                                         <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M7 17l9.2-9.2M17 17V7H7\"/></svg>
  548.                                     </a>
  549.                                     <div class=\"job-locked-login\">Déjà inscrit ? <a href=\"";
  550.             // line 302
  551.             yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("locale_app_login", ["_locale" => CoreExtension::getAttribute($this->env$this->sourceCoreExtension::getAttribute($this->env$this->source, (isset($context["app"]) || array_key_exists("app"$context) ? $context["app"] : (function () { throw new RuntimeError('Variable "app" does not exist.'302$this->source); })()), "request", [], "any"falsefalsefalse302), "locale", [], "any"falsefalsefalse302)]), "html"nulltrue);
  552.             yield "\">Se connecter</a></div>
  553.                                 </div>
  554.                             </div>
  555.                         ";
  556.         }
  557.         // line 307
  558.         yield "
  559.                     </div>
  560.                 </div>
  561.             </div>
  562.         </div>
  563.     </div>
  564.     ";
  565.         // line 318
  566.         if ((($tmp =  !(null === (isset($context["othersJobs"]) || array_key_exists("othersJobs"$context) ? $context["othersJobs"] : (function () { throw new RuntimeError('Variable "othersJobs" does not exist.'318$this->source); })()))) && $tmp instanceof Markup ? (string) $tmp $tmp)) {
  567.             // line 319
  568.             yield "        <div id=\"openings\" class=\"career-openings section panel overflow-hidden pb-6 xl:pb-9\">
  569.             <div class=\"section-outer panel py-6 xl:py-9 bg-secondary dark:bg-gray-800\">
  570.                 <div class=\"container max-w-lg\">
  571.                     <div class=\"section-inner panel\">
  572.                         <div class=\"panel vstack justify-center gap-4 sm:gap-6 xl:gap-8\">
  573.                             <h2 class=\"h4 sm:h2 m-0 text-center\" data-anime=\"onview: -100; translateY: [48, 0]; opacity: [0, 1]; easing: spring(1, 80, 10, 0); duration: 450; delay: 100;\">
  574.                                 Offres d'emploi de ";
  575.             // line 326
  576.             yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(Twig\Extension\CoreExtension::capitalize($this->env->getCharset(), Twig\Extension\CoreExtension::lower($this->env->getCharset(), CoreExtension::getAttribute($this->env$this->sourceCoreExtension::getAttribute($this->env$this->source, (isset($context["job"]) || array_key_exists("job"$context) ? $context["job"] : (function () { throw new RuntimeError('Variable "job" does not exist.'326$this->source); })()), "enterprise", [], "any"falsefalsefalse326), "companyName", [], "any"falsefalsefalse326))), "html"nulltrue);
  577.             yield "
  578.                             </h2>
  579.                             <div class=\"panel\">
  580.                                 <div class=\"panel\">
  581.                                     <div class=\"row child-cols-12 sm:child-cols-6 col-match g-2 sm:g-3 uc-grid\">
  582.                                         ";
  583.             // line 333
  584.             $context['_parent'] = $context;
  585.             $context['_seq'] = CoreExtension::ensureTraversable((isset($context["othersJobs"]) || array_key_exists("othersJobs"$context) ? $context["othersJobs"] : (function () { throw new RuntimeError('Variable "othersJobs" does not exist.'333$this->source); })()));
  586.             foreach ($context['_seq'] as $context["_key"] => $context["oj"]) {
  587.                 // line 334
  588.                 yield "                                            <div class=\"panel\">
  589.                                                 <div class=\"panel vstack justify-end items-end gap-1 p-3 rounded lg:rounded-2 bg-white dark:bg-gray-800\">
  590.                                                     <div class=\"vstack gap-narrow\">
  591.                                                         <h5 class=\"h6 lg:h5 m-0\">";
  592.                 // line 337
  593.                 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source$context["oj"], "jobTitle", [], "any"falsefalsefalse337), "html"nulltrue);
  594.                 yield "</h5>
  595.                                                         <span class=\"fs-6 text-dark dark:text-white text-opacity-70\">";
  596.                 // line 338
  597.                 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source$context["oj"], "city", [], "any"falsefalsefalse338), "html"nulltrue);
  598.                 yield "</span>
  599.                                                     </div>
  600.                                                     <a href=\"";
  601.                 // line 340
  602.                 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("locale_cvs_application_job_show", ["_locale" => CoreExtension::getAttribute($this->env$this->sourceCoreExtension::getAttribute($this->env$this->source, (isset($context["app"]) || array_key_exists("app"$context) ? $context["app"] : (function () { throw new RuntimeError('Variable "app" does not exist.'340$this->source); })()), "request", [], "any"falsefalsefalse340), "locale", [], "any"falsefalsefalse340), "slug" => CoreExtension::getAttribute($this->env$this->source$context["oj"], "slug", [], "any"falsefalsefalse340)]), "html"nulltrue);
  603.                 yield "\" class=\"uc-link fs-7 fw-bold d-inline-flex items-center gap-narrow border-bottom pb-narrow\">
  604.                                                         <span>Postuler</span>
  605.                                                         <i class=\"icon icon-narrow unicon-arrow-up-right fw-bold rtl:-rotate-90\"></i>
  606.                                                     </a>
  607.                                                 </div>
  608.                                             </div>
  609.                                         ";
  610.             }
  611.             $_parent $context['_parent'];
  612.             unset($context['_seq'], $context['_key'], $context['oj'], $context['_parent']);
  613.             $context array_intersect_key($context$_parent) + $_parent;
  614.             // line 348
  615.             yield "                                    </div>
  616.                                 </div>
  617.                             </div>
  618.                         </div>
  619.                     </div>
  620.                 </div>
  621.             </div>
  622.         </div>
  623.     ";
  624.         }
  625.         // line 358
  626.         yield "
  627.     ";
  628.         // line 360
  629.         if ((array_key_exists("similarJobs"$context) &&  !Twig\Extension\CoreExtension::testEmpty((isset($context["similarJobs"]) || array_key_exists("similarJobs"$context) ? $context["similarJobs"] : (function () { throw new RuntimeError('Variable "similarJobs" does not exist.'360$this->source); })())))) {
  630.             // line 361
  631.             yield "        <div id=\"similar_jobs\" class=\"similar-jobs section panel overflow-hidden pb-6 xl:pb-9\">
  632.             <div class=\"section-outer panel py-6 xl:py-9\">
  633.                 <div class=\"container max-w-lg\">
  634.                     <div class=\"section-inner panel\">
  635.                         <div class=\"panel vstack justify-center gap-4 sm:gap-6 xl:gap-8\">
  636.                             <div class=\"vstack items-center text-center gap-1\">
  637.                                 <h2 class=\"h4 sm:h2 m-0\">Offres similaires</h2>
  638.                             </div>
  639.                             <div class=\"panel\">
  640.                                 <div class=\"row child-cols-12 sm:child-cols-6 lg:child-cols-4 col-match g-2 sm:g-3\">
  641.                                     ";
  642.             // line 373
  643.             $context['_parent'] = $context;
  644.             $context['_seq'] = CoreExtension::ensureTraversable((isset($context["similarJobs"]) || array_key_exists("similarJobs"$context) ? $context["similarJobs"] : (function () { throw new RuntimeError('Variable "similarJobs" does not exist.'373$this->source); })()));
  645.             foreach ($context['_seq'] as $context["_key"] => $context["sj"]) {
  646.                 // line 374
  647.                 yield "                                        <div class=\"panel\">
  648.                                             <a href=\"";
  649.                 // line 375
  650.                 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("locale_cvs_application_job_show", ["_locale" => CoreExtension::getAttribute($this->env$this->sourceCoreExtension::getAttribute($this->env$this->source, (isset($context["app"]) || array_key_exists("app"$context) ? $context["app"] : (function () { throw new RuntimeError('Variable "app" does not exist.'375$this->source); })()), "request", [], "any"falsefalsefalse375), "locale", [], "any"falsefalsefalse375), "slug" => CoreExtension::getAttribute($this->env$this->source$context["sj"], "slug", [], "any"falsefalsefalse375)]), "html"nulltrue);
  651.                 yield "\" class=\"panel vstack gap-2 p-3 rounded-2 bg-white dark:bg-gray-800 h-100\" style=\"box-shadow: 0 2px 12px rgba(0,0,0,0.06), 0 1px 3px rgba(0,0,0,0.04); border: 1px solid rgba(0,0,0,0.06); text-decoration: none; color: inherit; transition: box-shadow 0.2s ease, transform 0.2s ease;\" onmouseover=\"this.style.boxShadow='0 8px 32px rgba(0,0,0,0.10), 0 2px 8px rgba(0,0,0,0.06)'; this.style.transform='translateY(-2px)';\" onmouseout=\"this.style.boxShadow='0 2px 12px rgba(0,0,0,0.06), 0 1px 3px rgba(0,0,0,0.04)'; this.style.transform='translateY(0)';\">
  652.                                                 ";
  653.                 // line 378
  654.                 yield "                                                ";
  655.                 if ((($tmp =  !Twig\Extension\CoreExtension::testEmpty(CoreExtension::getAttribute($this->env$this->source$context["sj"], "companyName", [], "any"falsefalsefalse378))) && $tmp instanceof Markup ? (string) $tmp $tmp)) {
  656.                     // line 379
  657.                     yield "                                                    <div class=\"hstack gap-1 items-center\">
  658.                                                         <div class=\"cstack w-32px h-32px rounded-1 bg-secondary\" style=\"min-width: 32px;\">
  659.                                                             <i class=\"icon-narrow unicon-portfolio text-primary\" style=\"font-size: 14px;\"></i>
  660.                                                         </div>
  661.                                                         <span class=\"fs-7 fw-bold text-dark text-opacity-50\" style=\"overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\">";
  662.                     // line 383
  663.                     yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source$context["sj"], "companyName", [], "any"falsefalsefalse383), "html"nulltrue);
  664.                     yield "</span>
  665.                                                     </div>
  666.                                                 ";
  667.                 }
  668.                 // line 386
  669.                 yield "
  670.                                                 ";
  671.                 // line 388
  672.                 yield "                                                <h5 class=\"h6 lg:h5 m-0\" style=\"line-height: 1.4;\">";
  673.                 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source$context["sj"], "jobTitle", [], "any"falsefalsefalse388), "html"nulltrue);
  674.                 yield "</h5>
  675.                                                 ";
  676.                 // line 391
  677.                 yield "                                                <div class=\"vstack gap-narrow mt-auto\">
  678.                                                     ";
  679.                 // line 392
  680.                 if ((($tmp =  !Twig\Extension\CoreExtension::testEmpty(CoreExtension::getAttribute($this->env$this->source$context["sj"], "city", [], "any"falsefalsefalse392))) && $tmp instanceof Markup ? (string) $tmp $tmp)) {
  681.                     // line 393
  682.                     yield "                                                        <div class=\"hstack gap-narrow items-center fs-7 text-dark text-opacity-60\">
  683.                                                             <i class=\"icon-narrow unicon-location\" style=\"font-size: 12px;\"></i>
  684.                                                             <span>";
  685.                     // line 395
  686.                     yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source$context["sj"], "city", [], "any"falsefalsefalse395), "html"nulltrue);
  687.                     if ((($tmp =  !(null === CoreExtension::getAttribute($this->env$this->source$context["sj"], "country", [], "any"falsefalsefalse395))) && $tmp instanceof Markup ? (string) $tmp $tmp)) {
  688.                         yield ", ";
  689.                         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source$context["sj"], "country", [], "any"falsefalsefalse395), "html"nulltrue);
  690.                     }
  691.                     yield "</span>
  692.                                                         </div>
  693.                                                     ";
  694.                 }
  695.                 // line 398
  696.                 yield "                                                    ";
  697.                 if ((($tmp =  !Twig\Extension\CoreExtension::testEmpty(CoreExtension::getAttribute($this->env$this->source$context["sj"], "employmentType", [], "any"falsefalsefalse398))) && $tmp instanceof Markup ? (string) $tmp $tmp)) {
  698.                     // line 399
  699.                     yield "                                                        <div class=\"hstack gap-narrow items-center fs-7 text-dark text-opacity-60\">
  700.                                                             <i class=\"icon-narrow unicon-portfolio\" style=\"font-size: 12px;\"></i>
  701.                                                             <span>";
  702.                     // line 401
  703.                     yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source$context["sj"], "employmentType", [], "any"falsefalsefalse401), "html"nulltrue);
  704.                     yield "</span>
  705.                                                         </div>
  706.                                                     ";
  707.                 }
  708.                 // line 404
  709.                 yield "                                                    ";
  710.                 if ((($tmp =  !Twig\Extension\CoreExtension::testEmpty(CoreExtension::getAttribute($this->env$this->source$context["sj"], "remoteWork", [], "any"falsefalsefalse404))) && $tmp instanceof Markup ? (string) $tmp $tmp)) {
  711.                     // line 405
  712.                     yield "                                                        <div class=\"hstack gap-narrow items-center fs-7 text-dark text-opacity-60\">
  713.                                                             <i class=\"icon-narrow unicon-laptop\" style=\"font-size: 12px;\"></i>
  714.                                                             <span>";
  715.                     // line 407
  716.                     yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source$context["sj"], "remoteWork", [], "any"falsefalsefalse407), "html"nulltrue);
  717.                     yield "</span>
  718.                                                         </div>
  719.                                                     ";
  720.                 }
  721.                 // line 410
  722.                 yield "                                                </div>
  723.                                                 ";
  724.                 // line 413
  725.                 yield "                                                ";
  726.                 if ((($tmp =  !Twig\Extension\CoreExtension::testEmpty(CoreExtension::getAttribute($this->env$this->source$context["sj"], "category", [], "any"falsefalsefalse413))) && $tmp instanceof Markup ? (string) $tmp $tmp)) {
  727.                     // line 414
  728.                     yield "                                                    <div class=\"hstack gap-narrow flex-wrap mt-1\">
  729.                                                         <span class=\"px-1 py-narrow fs-8 fw-bold rounded bg-secondary text-primary\" style=\"white-space: nowrap;\">";
  730.                     // line 415
  731.                     yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source$context["sj"], "category", [], "any"falsefalsefalse415), "html"nulltrue);
  732.                     yield "</span>
  733.                                                     </div>
  734.                                                 ";
  735.                 }
  736.                 // line 418
  737.                 yield "
  738.                                                 ";
  739.                 // line 420
  740.                 yield "                                                <div class=\"hstack items-center gap-narrow mt-1 fs-7 fw-bold text-primary\">
  741.                                                     <span>Voir l'offre</span>
  742.                                                     <i class=\"icon icon-narrow unicon-arrow-up-right fw-bold\" style=\"font-size: 12px;\"></i>
  743.                                                 </div>
  744.                                             </a>
  745.                                         </div>
  746.                                     ";
  747.             }
  748.             $_parent $context['_parent'];
  749.             unset($context['_seq'], $context['_key'], $context['sj'], $context['_parent']);
  750.             $context array_intersect_key($context$_parent) + $_parent;
  751.             // line 428
  752.             yield "                                </div>
  753.                             </div>
  754.                         </div>
  755.                     </div>
  756.                 </div>
  757.             </div>
  758.         </div>
  759.     ";
  760.         }
  761.         // line 437
  762.         yield "
  763. ";
  764.         
  765.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  766.         
  767.         $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  768.         yield from [];
  769.     }
  770.     // line 442
  771.     /**
  772.      * @return iterable<null|scalar|\Stringable>
  773.      */
  774.     public function block_footerjs(array $context, array $blocks = []): iterable
  775.     {
  776.         $macros $this->macros;
  777.         $__internal_5a27a8ba21ca79b61932376b2fa922d2 $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  778.         $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block""footerjs"));
  779.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  780.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block""footerjs"));
  781.         // line 443
  782.         yield "    <script>
  783.         (function(){
  784.             var JOB_BASE_URL = '/";
  785.         // line 446
  786.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->sourceCoreExtension::getAttribute($this->env$this->source, (isset($context["app"]) || array_key_exists("app"$context) ? $context["app"] : (function () { throw new RuntimeError('Variable "app" does not exist.'446$this->source); })()), "request", [], "any"falsefalsefalse446), "locale", [], "any"falsefalsefalse446), "html"nulltrue);
  787.         yield "/job/';
  788.     var SEARCH_API = '";
  789.         // line 447
  790.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("locale_api_jobs_search", ["_locale" => CoreExtension::getAttribute($this->env$this->sourceCoreExtension::getAttribute($this->env$this->source, (isset($context["app"]) || array_key_exists("app"$context) ? $context["app"] : (function () { throw new RuntimeError('Variable "app" does not exist.'447$this->source); })()), "request", [], "any"falsefalsefalse447), "locale", [], "any"falsefalsefalse447)]), "html"nulltrue);
  791.         yield "';
  792.     var palette = [
  793.         {bg:'#EDE9FE',color:'#7C3AED'},{bg:'#DBEAFE',color:'#2563EB'},
  794.         {bg:'#D1FAE5',color:'#059669'},{bg:'#FEF3C7',color:'#D97706'},
  795.         {bg:'#FCE7F3',color:'#DB2777'},{bg:'#FEE2E2',color:'#DC2626'},
  796.         {bg:'#E0E7FF',color:'#4338CA'},{bg:'#CCFBF1',color:'#0D9488'}
  797.     ];
  798.     function getColor(name){
  799.         var h=0;for(var i=0;i<name.length;i++) h=name.charCodeAt(i)+((h<<5)-h);
  800.         return palette[Math.abs(h)%palette.length];
  801.     }
  802.     var searchInput = document.getElementById('wrSearchInput');
  803.     var searchBtn = document.getElementById('wrSearchBtn');
  804.     var searchResults = document.getElementById('wrSearchResults');
  805.     var searchClose = document.getElementById('wrSearchClose');
  806.     var jobsList = document.getElementById('wrJobsList');
  807.     var loading = document.getElementById('wrLoading');
  808.     var emptyState = document.getElementById('wrEmptyState');
  809.     var loadMoreWrap = document.getElementById('wrLoadMore');
  810.     var loadMoreBtn = document.getElementById('wrLoadMoreBtn');
  811.     var resultsCount = document.getElementById('wrResultsCount');
  812.     var totalCountEl = document.getElementById('wrTotalCount');
  813.     var currentQuery = '';
  814.     var currentOffset = 0;
  815.     var LIMIT = 10;
  816.     var isLoading = false;
  817.     var debounceTimer;
  818.     function renderJob(job){
  819.         var col = getColor(job.companyName);
  820.         var logoHtml;
  821.         if(job.image){
  822.             logoHtml = '<div class=\"wr-result-logo\"><img src=\"'+job.image+'\" alt=\"'+job.companyName+'\"></div>';
  823.         } else {
  824.             logoHtml = '<div class=\"wr-result-logo\" style=\"background:'+col.bg+';color:'+col.color+';\">'+(job.logo || job.companyName.charAt(0).toUpperCase())+'</div>';
  825.         }
  826.         var badgeHtml = '';
  827.         if(job.isNew) badgeHtml = '<span class=\"wr-result-badge wr-badge-new\">Nouveau</span>';
  828.         var salaryHtml = job.salary ? '<span class=\"wr-result-salary\">'+job.salary+'</span>' : '';
  829.         var remoteHtml = '';
  830.         if(job.remoteWork && job.remoteWork !== '' && job.remoteWork !== 'no'){
  831.             var remoteLabel = job.remoteWork === 'full' ? 'Full remote' : (job.remoteWork === 'hybrid' ? 'Hybride' : job.remoteWork);
  832.             remoteHtml = '<span>·</span><span>'+remoteLabel+'</span>';
  833.         }
  834.         var div = document.createElement('a');
  835.         div.className = 'wr-result-item';
  836.         div.href = JOB_BASE_URL + job.slug;
  837.         div.innerHTML = logoHtml +
  838.             '<div class=\"wr-result-info\">' +
  839.             '<div class=\"wr-result-title\">' + job.jobTitle + '</div>' +
  840.             '<div class=\"wr-result-meta\">' +
  841.             '<span class=\"wr-result-company\">' + job.companyName + '</span>' +
  842.             (job.city ? '<span>·</span><span>' + job.city + '</span>' : '') +
  843.             '<span>·</span><span>' + (job.employmentType || '') + '</span>' +
  844.             remoteHtml +
  845.             badgeHtml +
  846.             '</div>' +
  847.             '</div>' +
  848.             '<div class=\"wr-result-actions\">' + salaryHtml + '</div>';
  849.         return div;
  850.     }
  851.     function fetchJobs(query, offset, append){
  852.         if(isLoading) return;
  853.         if(query.length < 2) return;
  854.         isLoading = true;
  855.         if(!append){
  856.             jobsList.innerHTML = '';
  857.             loadMoreWrap.style.display = 'none';
  858.             resultsCount.style.display = 'none';
  859.         }
  860.         searchResults.classList.add('visible');
  861.         loading.style.display = 'block';
  862.         emptyState.style.display = 'none';
  863.         var url = SEARCH_API + '?q=' + encodeURIComponent(query) + '&offset=' + offset + '&limit=' + LIMIT;
  864.         fetch(url, {credentials:'same-origin'})
  865.             .then(function(r){ return r.json(); })
  866.             .then(function(data){
  867.                 loading.style.display = 'none';
  868.                 isLoading = false;
  869.                 if(data.total === 0){
  870.                     emptyState.style.display = 'block';
  871.                     return;
  872.                 }
  873.                 data.jobs.forEach(function(job, i){
  874.                     var el = renderJob(job);
  875.                     jobsList.appendChild(el);
  876.                     setTimeout(function(){ el.classList.add('show'); }, 50 + i * 60);
  877.                 });
  878.                 totalCountEl.textContent = data.total;
  879.                 resultsCount.style.display = 'block';
  880.                 if(data.hasMore){
  881.                     loadMoreWrap.style.display = 'flex';
  882.                 } else {
  883.                     loadMoreWrap.style.display = 'none';
  884.                 }
  885.                 currentOffset = offset + data.jobs.length;
  886.             })
  887.             .catch(function(err){
  888.                 console.error('Erreur recherche:', err);
  889.                 loading.style.display = 'none';
  890.                 isLoading = false;
  891.             });
  892.     }
  893.     searchClose.addEventListener('click', function(){
  894.         searchResults.classList.remove('visible');
  895.         jobsList.innerHTML = '';
  896.         searchInput.value = '';
  897.         loadMoreWrap.style.display = 'none';
  898.         resultsCount.style.display = 'none';
  899.         emptyState.style.display = 'none';
  900.     });
  901.     searchInput.addEventListener('input', function(){
  902.         clearTimeout(debounceTimer);
  903.         var q = searchInput.value.trim();
  904.         if(q.length < 2){
  905.             searchResults.classList.remove('visible');
  906.             jobsList.innerHTML = '';
  907.             return;
  908.         }
  909.         debounceTimer = setTimeout(function(){
  910.             currentQuery = q;
  911.             currentOffset = 0;
  912.             fetchJobs(currentQuery, 0, false);
  913.         }, 350);
  914.     });
  915.     searchBtn.addEventListener('click', function(e){
  916.         e.preventDefault();
  917.         clearTimeout(debounceTimer);
  918.         currentQuery = searchInput.value.trim();
  919.         currentOffset = 0;
  920.         fetchJobs(currentQuery, 0, false);
  921.     });
  922.     searchInput.addEventListener('keydown', function(e){
  923.         if(e.key === 'Enter'){
  924.             e.preventDefault();
  925.             clearTimeout(debounceTimer);
  926.             currentQuery = searchInput.value.trim();
  927.             currentOffset = 0;
  928.             fetchJobs(currentQuery, 0, false);
  929.         }
  930.     });
  931.     loadMoreBtn.addEventListener('click', function(){
  932.         fetchJobs(currentQuery, currentOffset, true);
  933.     });
  934. })();
  935.     </script>
  936. ";
  937.         
  938.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  939.         
  940.         $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  941.         yield from [];
  942.     }
  943.     /**
  944.      * @codeCoverageIgnore
  945.      */
  946.     public function getTemplateName(): string
  947.     {
  948.         return "application/whileresume/application/jobs/show_fr.html.twig";
  949.     }
  950.     /**
  951.      * @codeCoverageIgnore
  952.      */
  953.     public function isTraitable(): bool
  954.     {
  955.         return false;
  956.     }
  957.     /**
  958.      * @codeCoverageIgnore
  959.      */
  960.     public function getDebugInfo(): array
  961.     {
  962.         return array (  864 => 447,  860 => 446,  855 => 443,  842 => 442,  828 => 437,  817 => 428,  804 => 420,  801 => 418,  795 => 415,  792 => 414,  789 => 413,  785 => 410,  779 => 407,  775 => 405,  772 => 404,  766 => 401,  762 => 399,  759 => 398,  749 => 395,  745 => 393,  743 => 392,  740 => 391,  734 => 388,  731 => 386,  725 => 383,  719 => 379,  716 => 378,  711 => 375,  708 => 374,  704 => 373,  690 => 361,  688 => 360,  684 => 358,  672 => 348,  658 => 340,  653 => 338,  649 => 337,  644 => 334,  640 => 333,  630 => 326,  621 => 319,  619 => 318,  606 => 307,  598 => 302,  591 => 298,  573 => 282,  570 => 280,  568 => 279,  563 => 276,  554 => 271,  552 => 270,  549 => 269,  540 => 264,  538 => 263,  535 => 262,  526 => 257,  524 => 256,  520 => 254,  517 => 252,  512 => 250,  508 => 248,  506 => 247,  503 => 246,  498 => 244,  494 => 242,  492 => 241,  489 => 240,  484 => 238,  480 => 236,  478 => 235,  475 => 234,  473 => 233,  471 => 232,  468 => 231,  453 => 218,  451 => 217,  448 => 216,  443 => 214,  440 => 213,  437 => 212,  433 => 209,  429 => 206,  423 => 202,  420 => 201,  408 => 198,  404 => 196,  401 => 195,  395 => 192,  391 => 190,  388 => 189,  382 => 186,  378 => 184,  375 => 183,  371 => 181,  365 => 180,  361 => 178,  358 => 177,  352 => 174,  348 => 172,  345 => 171,  339 => 168,  335 => 166,  333 => 165,  330 => 164,  323 => 158,  273 => 108,  269 => 107,  249 => 89,  236 => 88,  196 => 57,  150 => 12,  137 => 11,  114 => 5,  91 => 4,  68 => 3,  45 => 1,);
  963.     }
  964.     public function getSourceContext(): Source
  965.     {
  966.         return new Source("{% extends 'vitrine/lexend/layout.html.twig' %}
  967. {% block title %}{{ job.shortTitle }}{% endblock title %}
  968. {% block description %}{{ job.shortDescription }}{% endblock description %}
  969. {% block robots %}index,follow{% endblock robots %}
  970. {#% block meta_social %}{{ parent() }}{% include \"/vitrine/components/socialmedia.html.twig\" with { 'page':page,'social_type':'website' } %}{% endblock meta_social %}
  971. {% block meta %}{{ parent() }}{% include \"/vitrine/components/author.html.twig\" with {'page':page } %}{% endblock meta %#}
  972. {#% block canonical %}{% include \"/vitrine/lexend/components/languages/canonical_classic.html.twig\" %}{% endblock canonical %#}
  973. {% block css %}
  974.     <style>
  975.         .wr-search-section{position:relative;z-index:2;width:100%;max-width:720px;margin:0 auto}
  976.         .wr-search-bar{display:flex;align-items:center;background:#fff;border-radius:16px;padding:6px;box-shadow:0 4px 24px rgba(108,58,237,.08),0 1px 3px rgba(0,0,0,.04);border:2px solid transparent;transition:border-color .3s,box-shadow .3s;cursor:pointer}
  977.         .wr-search-bar:hover,.wr-search-bar.active{border-color:rgba(108,58,237,.2);box-shadow:0 8px 32px rgba(108,58,237,.12),0 2px 6px rgba(0,0,0,.04)}
  978.         .wr-search-icon{padding:12px 14px;color:#9CA3AF;display:flex;align-items:center;flex-shrink:0}
  979.         .wr-search-input-wrapper{flex:1;position:relative;height:48px;display:flex;align-items:center;overflow:hidden}
  980.         .wr-search-real-input{width:100%;border:none;outline:none;font-size:16px;color:#1E1B2E;background:transparent;font-family:inherit}
  981.         .wr-search-real-input::placeholder{color:#9CA3AF}
  982.         .wr-search-btn{background:var(--color-primary,#6C3AED);color:#fff;border:none;padding:12px 24px;border-radius:12px;font-size:15px;font-weight:600;cursor:pointer;display:flex;align-items:center;gap:6px;transition:background .2s,transform .15s;flex-shrink:0;font-family:inherit}
  983.         .wr-search-btn:hover{filter:brightness(1.1);transform:scale(1.02)}
  984.         @media(max-width:640px){.wr-search-btn span{display:none}.wr-search-btn{padding:12px 14px}}
  985.         .wr-search-results{position:relative;background:#fff;border-radius:16px;box-shadow:0 12px 48px rgba(0,0,0,.1),0 2px 8px rgba(0,0,0,.04);padding:0;max-height:0;overflow:hidden;transition:max-height .5s ease,padding .5s ease,margin .5s ease,opacity .4s ease;z-index:10;opacity:0;margin-top:0}
  986.         .wr-search-results.visible{max-height:2000px;padding:8px;margin-top:12px;opacity:1}
  987.         .wr-result-item{display:flex;align-items:center;gap:14px;padding:12px 14px;border-radius:12px;cursor:pointer;transition:background .2s,opacity .3s ease,transform .3s ease;opacity:0;transform:translateY(8px);text-decoration:none;color:inherit}
  988.         .wr-result-item.show{opacity:1;transform:translateY(0)}
  989.         .wr-result-item:hover{background:#F5F3FF}
  990.         .wr-result-item+.wr-result-item{border-top:1px solid rgba(0,0,0,.04)}
  991.         .wr-result-logo{width:44px;height:44px;border-radius:10px;display:flex;align-items:center;justify-content:center;font-size:18px;flex-shrink:0;font-weight:700}
  992.         .wr-result-logo img{width:100%;height:100%;object-fit:cover;border-radius:10px}
  993.         .wr-result-info{flex:1;text-align:left;min-width:0}
  994.         .wr-result-title{font-size:14px;font-weight:600;color:#1E1B2E;margin-bottom:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  995.         .wr-result-meta{display:flex;align-items:center;gap:8px;font-size:12px;color:#9CA3AF;flex-wrap:wrap}
  996.         .wr-result-company{color:#4B5563;font-weight:500}
  997.         .wr-result-badge{display:inline-flex;padding:2px 8px;border-radius:6px;font-size:11px;font-weight:600}
  998.         .wr-badge-new{background:#DCFCE7;color:#16A34A}
  999.         .wr-result-salary{font-size:13px;font-weight:600;color:var(--color-primary,#6C3AED);white-space:nowrap}
  1000.         .wr-result-actions{display:flex;align-items:center;gap:8px;flex-shrink:0}
  1001.         .wr-loading{text-align:center;padding:30px 20px}
  1002.         .wr-spinner{display:inline-block;width:28px;height:28px;border:3px solid rgba(108,58,237,.15);border-top-color:var(--color-primary,#6C3AED);border-radius:50%;animation:wrSpin .7s linear infinite}
  1003.         @keyframes wrSpin{to{transform:rotate(360deg)}}
  1004.         .wr-empty-state{text-align:center;padding:40px 20px}
  1005.         .wr-empty-icon{font-size:40px;margin-bottom:12px}
  1006.         .wr-empty-title{font-size:16px;font-weight:600;color:#1E1B2E;margin:0 0 6px}
  1007.         .wr-empty-text{font-size:14px;color:#9CA3AF;margin:0}
  1008.         .wr-load-more{display:flex;justify-content:center;padding:12px 8px 4px}
  1009.         .wr-load-more-btn{background:none;border:2px solid var(--color-primary,#6C3AED);color:var(--color-primary,#6C3AED);padding:8px 24px;border-radius:10px;font-size:14px;font-weight:600;cursor:pointer;transition:all .2s;font-family:inherit}
  1010.         .wr-load-more-btn:hover{background:var(--color-primary,#6C3AED);color:#fff}
  1011.         .wr-load-more-btn:disabled{opacity:.5;cursor:not-allowed}
  1012.         .wr-results-count{text-align:center;padding:10px;font-size:13px;color:#9CA3AF;border-top:1px solid rgba(0,0,0,.04);margin-top:4px}
  1013.         .wr-results-count strong{color:var(--color-primary,#6C3AED)}
  1014.         .wr-search-close-wrap{text-align:right;padding:4px 8px 0}
  1015.         .wr-search-close-btn{background:none;border:1px solid rgba(0,0,0,.1);color:#9CA3AF;padding:4px 12px;border-radius:8px;font-size:12px;cursor:pointer;transition:all .2s;font-family:inherit}
  1016.         .wr-search-close-btn:hover{background:#F5F3FF;color:var(--color-primary,#6C3AED);border-color:rgba(108,58,237,.2)}
  1017.         {# === Job body redesign === #}
  1018.         .job-tags{display:flex;flex-wrap:wrap;gap:8px;justify-content:center}
  1019.         .job-tag{display:inline-flex;align-items:center;gap:5px;padding:6px 14px;border-radius:100px;font-size:13px;font-weight:500;background:#fff;border:1px solid rgba(0,0,0,.08);color:#4B5563}
  1020.         .job-tag i,.job-tag svg{font-size:13px;color:var(--color-primary,#6C3AED);width:14px;height:14px}
  1021.         .job-tag-salary{background:linear-gradient(135deg,#EDE9FE,#F5F3FF);border-color:rgba(108,58,237,.15);color:var(--color-primary,#6C3AED);font-weight:600}
  1022.         .job-tag-external{background:#FFFBEB;border-color:rgba(245,158,11,.2);color:#92400E;font-size:12px}
  1023.         .job-body-card{background:#fff;border-radius:20px;box-shadow:0 4px 32px rgba(0,0,0,.06),0 1px 4px rgba(0,0,0,.03);border:1px solid rgba(0,0,0,.05);padding:32px;max-width:780px;margin:0 auto}
  1024.         @media(max-width:640px){.job-body-card{padding:20px;border-radius:16px}}
  1025.         .job-section-title{font-size:15px;font-weight:700;color:var(--color-primary,#6C3AED);text-transform:uppercase;letter-spacing:.06em;margin:0 0 10px;display:flex;align-items:center;gap:8px}
  1026.         .job-section-title::before{content:'';display:inline-block;width:4px;height:18px;border-radius:2px;background:var(--color-primary,#6C3AED)}
  1027.         .job-section-text{font-size:16px;line-height:1.75;color:#374151;margin:0}
  1028.         .job-section-divider{border:none;border-top:1px solid rgba(0,0,0,.06);margin:24px 0}
  1029.         .job-cta-bar{display:flex;align-items:center;justify-content:center;gap:12px;flex-wrap:wrap;padding:24px 0 0}
  1030.         .job-cta-main{display:inline-flex;align-items:center;gap:8px;padding:14px 32px;border-radius:14px;font-size:16px;font-weight:700;border:none;cursor:pointer;transition:all .2s;text-decoration:none;font-family:inherit}
  1031.         .job-cta-main.active{background:var(--color-primary,#6C3AED);color:#fff;box-shadow:0 4px 16px rgba(108,58,237,.25)}
  1032.         .job-cta-main.active:hover{filter:brightness(1.1);transform:translateY(-1px);box-shadow:0 6px 24px rgba(108,58,237,.3)}
  1033.         .job-cta-main.disabled{background:#E5E7EB;color:#9CA3AF;cursor:default;box-shadow:none;pointer-events:none}
  1034.         .job-cta-company{display:inline-flex;align-items:center;gap:6px;padding:14px 24px;border-radius:14px;font-size:15px;font-weight:600;border:2px solid rgba(0,0,0,.08);background:#fff;color:#374151;cursor:pointer;transition:all .2s;text-decoration:none;font-family:inherit}
  1035.         .job-cta-company:hover{border-color:rgba(108,58,237,.2);color:var(--color-primary,#6C3AED)}
  1036.         .job-locked-overlay{position:relative;margin-top:24px}
  1037.         .job-locked-blur{filter:blur(6px);opacity:.4;pointer-events:none;user-select:none}
  1038.         .job-locked-cta{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;background:rgba(255,255,255,.7);backdrop-filter:blur(3px);border-radius:16px;padding:20px}
  1039.         .job-locked-title{font-size:18px;font-weight:700;color:#1E1B2E;text-align:center}
  1040.         .job-locked-text{font-size:14px;color:#6B7280;text-align:center;max-width:360px}
  1041.         .job-locked-btn{display:inline-flex;align-items:center;gap:6px;padding:12px 28px;background:var(--color-primary,#6C3AED);color:#fff;border:none;border-radius:12px;font-size:15px;font-weight:600;cursor:pointer;transition:all .2s;text-decoration:none;font-family:inherit}
  1042.         .job-locked-btn:hover{filter:brightness(1.1);transform:translateY(-1px)}
  1043.         .job-locked-login{font-size:13px;color:#6B7280}
  1044.         .job-locked-login a{color:var(--color-primary,#6C3AED);font-weight:600;text-decoration:none}
  1045.         .job-locked-login a:hover{text-decoration:underline}
  1046.     </style>
  1047. {% endblock css %}
  1048. {% block body %}
  1049.     <div id=\"hero_header\" class=\"hero-header section panel overflow-hidden\">
  1050.         <div class=\"position-absolute top-0 start-0 end-0 h-screen dark:bg-gray-300 dark:bg-opacity-15 rounded-bottom-2 lg:rounded-bottom-5\"></div>
  1051.         <div class=\"section-outer panel py-8 lg:py-9 xl:py-10\">
  1052.             <div class=\"container\">
  1053.                 <div class=\"section-inner panel\">
  1054.                     <div class=\"d-none xl:d-block\">
  1055.                         <div class=\"position-absolute rounded-circle border border-dashed border-primary-300 dark:border-white dark:border-opacity-15 cstack w-56px h-56px d-none lg:d-block\" style=\"top: 5%; left: 5%\" data-anime=\"translateY: [0, 10]; easing: linear; loop: true; direction: alternate; delay: 0;\"><img class=\"p-narrow rounded-circle\" src=\"/uploads/no_avatar.png\" alt=\"Candidat anonyme\"></div>
  1056.                         <div class=\"position-absolute rounded-circle border border-dashed border-primary-300 dark:border-white dark:border-opacity-15 cstack w-56px h-56px d-none lg:d-block\" style=\"top: 20%; left: 10%\" data-anime=\"translateY: [0, 15]; easing: linear; loop: true; direction: alternate; delay: 25;\"><img class=\"p-narrow rounded-circle\" src=\"/uploads/no_avatar.png\" alt=\"Candidat anonyme\"></div>
  1057.                         <div class=\"position-absolute rounded-circle border border-dashed border-primary-300 dark:border-white dark:border-opacity-15 cstack w-56px h-56px d-none lg:d-block\" style=\"top: 35%; left: 0%\" data-anime=\"translateY: [0, 5]; easing: linear; loop: true; direction: alternate; delay: 25;\"><img class=\"p-narrow rounded-circle\" src=\"/uploads/no_avatar.png\" alt=\"Candidat anonyme\"></div>
  1058.                         <div class=\"position-absolute rounded-circle border border-dashed border-primary-300 dark:border-white dark:border-opacity-15 cstack w-56px h-56px d-none lg:d-block\" style=\"top: 5%; right: 5%\" data-anime=\"translateY: [0, 10]; easing: linear; loop: true; direction: alternate; delay: 0;\"><img class=\"p-narrow rounded-circle\" src=\"/uploads/no_avatar.png\" alt=\"Candidat anonyme\"></div>
  1059.                         <div class=\"position-absolute rounded-circle border border-dashed border-primary-300 dark:border-white dark:border-opacity-15 cstack w-56px h-56px d-none lg:d-block\" style=\"top: 20%; right: 10%\" data-anime=\"translateY: [0, 15]; easing: linear; loop: true; direction: alternate; delay: 25;\"><img class=\"p-narrow rounded-circle\" src=\"/uploads/no_avatar.png\" alt=\"Candidat anonyme\"></div>
  1060.                         <div class=\"position-absolute rounded-circle border border-dashed border-primary-300 dark:border-white dark:border-opacity-15 cstack w-56px h-56px d-none lg:d-block\" style=\"top: 35%; right: 0%\" data-anime=\"translateY: [0, 5]; easing: linear; loop: true; direction: alternate; delay: 25;\"><img class=\"p-narrow rounded-circle\" src=\"/uploads/no_avatar.png\" alt=\"Candidat anonyme\"></div>
  1061.                     </div>
  1062.                     <div class=\"row child-cols-12 justify-center items-center g-8\">
  1063.                         <div class=\"lg:col-12\">
  1064.                             <div class=\"panel vstack gap-4 lg:gap-6\">
  1065.                                 <div class=\"panel vstack justify-center items-center gap-2 px-2 pt-4 text-center\">
  1066.                                     <span class=\"fs-6 fw-bold text-uppercase text-primary\">{{ job.companyName }} recherche</span>
  1067.                                     <h1 class=\"h3 md:h2 lg:display-4 m-0\">{{ job.jobtitle }}</h1>
  1068.                                 </div>
  1069.                                 <div class=\"wr-search-section\" id=\"wrSearchSection\">
  1070.                                     <div class=\"wr-search-bar\" id=\"wrSearchBar\">
  1071.                                         <div class=\"wr-search-icon\">
  1072.                                             <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"11\" cy=\"11\" r=\"8\"/><path d=\"M21 21l-4.35-4.35\"/></svg>
  1073.                                         </div>
  1074.                                         <div class=\"wr-search-input-wrapper\">
  1075.                                             <input type=\"text\" id=\"wrSearchInput\" class=\"wr-search-real-input\" placeholder=\"Rechercher un poste, une entreprise, une ville...\" autocomplete=\"off\">
  1076.                                         </div>
  1077.                                         <button class=\"wr-search-btn\" id=\"wrSearchBtn\">
  1078.                                             <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"11\" cy=\"11\" r=\"8\"/><path d=\"M21 21l-4.35-4.35\"/></svg>
  1079.                                             <span>Rechercher</span>
  1080.                                         </button>
  1081.                                     </div>
  1082.                                 </div>
  1083.                                 <div class=\"wr-search-results\" id=\"wrSearchResults\">
  1084.                                     <div class=\"wr-search-close-wrap\">
  1085.                                         <button class=\"wr-search-close-btn\" id=\"wrSearchClose\">✕ Fermer</button>
  1086.                                     </div>
  1087.                                     <div id=\"wrJobsList\"></div>
  1088.                                     <div id=\"wrLoading\" class=\"wr-loading\" style=\"display:none;\">
  1089.                                         <div class=\"wr-spinner\"></div>
  1090.                                     </div>
  1091.                                     <div id=\"wrEmptyState\" class=\"wr-empty-state\" style=\"display:none;\">
  1092.                                         <div class=\"wr-empty-icon\">🔍</div>
  1093.                                         <p class=\"wr-empty-title\">Aucune offre ne correspond à votre recherche</p>
  1094.                                         <p class=\"wr-empty-text\">Essayez avec d'autres mots-clés</p>
  1095.                                     </div>
  1096.                                     <div id=\"wrLoadMore\" class=\"wr-load-more\" style=\"display:none;\">
  1097.                                         <button class=\"wr-load-more-btn\" id=\"wrLoadMoreBtn\">Voir plus d'offres</button>
  1098.                                     </div>
  1099.                                     <div class=\"wr-results-count\" id=\"wrResultsCount\" style=\"display:none;\">
  1100.                                         <strong id=\"wrTotalCount\">0</strong> offres trouvées
  1101.                                     </div>
  1102.                                 </div>
  1103.                             </div>
  1104.                         </div>
  1105.                     </div>
  1106.                 </div>
  1107.             </div>
  1108.         </div>
  1109.     </div>
  1110.     {# ═══════════════════════════════════════════════════════════════
  1111.        CORPS DE L'ANNONCE — full width, pas de sidebar
  1112.     ═══════════════════════════════════════════════════════════════ #}
  1113.     <div id=\"job_details\" class=\"job-details section panel pb-6 xl:pb-9\">
  1114.         <div class=\"section-outer panel\">
  1115.             <div class=\"container max-w-lg\">
  1116.                 <div class=\"section-inner panel\">
  1117.                     {# ── Métadonnées en tags ── #}
  1118.                     <div class=\"job-tags mb-4\" style=\"margin-top:-10px;\">
  1119.                         {% if job.companyName is not empty %}
  1120.                             <span class=\"job-tag\">
  1121.                                 <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><rect x=\"2\" y=\"7\" width=\"20\" height=\"14\" rx=\"2\"/><path d=\"M16 7V5a4 4 0 00-8 0v2\"/></svg>
  1122.                                 {{ job.companyName }}
  1123.                             </span>
  1124.                         {% endif %}
  1125.                         {% if job.employmentType is not empty %}
  1126.                             <span class=\"job-tag\">
  1127.                                 <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M12 6v6l4 2\"/></svg>
  1128.                                 {{ job.employmentType }}
  1129.                             </span>
  1130.                         {% endif %}
  1131.                         {% if job.city is not empty %}
  1132.                             <span class=\"job-tag\">
  1133.                                 <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0118 0z\"/><circle cx=\"12\" cy=\"10\" r=\"3\"/></svg>
  1134.                                 {{ job.city }}{% if job.country is not null %}, {{ job.country }}{% endif %}
  1135.                             </span>
  1136.                         {% endif %}
  1137.                         {% if job.remoteWork is not empty %}
  1138.                             <span class=\"job-tag\">
  1139.                                 <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\"/><path d=\"M8 21h8M12 17v4\"/></svg>
  1140.                                 {{ job.remoteWork }}
  1141.                             </span>
  1142.                         {% endif %}
  1143.                         {% if job.experienceLevel is not empty %}
  1144.                             <span class=\"job-tag\">
  1145.                                 <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M22 11.08V12a10 10 0 11-5.93-9.14\"/><path d=\"M22 4L12 14.01l-3-3\"/></svg>
  1146.                                 +{{ job.experienceLevel }} ans d'expérience
  1147.                             </span>
  1148.                         {% endif %}
  1149.                         {% if job.salaryPeriod is not null %}
  1150.                             <span class=\"job-tag job-tag-salary\">
  1151.                                 <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><line x1=\"12\" y1=\"1\" x2=\"12\" y2=\"23\"/><path d=\"M17 5H9.5a3.5 3.5 0 000 7h5a3.5 3.5 0 010 7H6\"/></svg>
  1152.                                 {{ job.salaryMin }} – {{ job.salaryMax }} {{ job.devise }}/{{ job.salaryPeriod }}
  1153.                             </span>
  1154.                         {% endif %}
  1155.                         {% if job.verification == 0 %}
  1156.                             <span class=\"job-tag job-tag-external\">
  1157.                                 ⚡ Offre indexée — source externe
  1158.                             </span>
  1159.                         {% endif %}
  1160.                     </div>
  1161.                     {# ── Card principale ── #}
  1162.                     <div class=\"job-body-card\">
  1163.                         {# — Résumé (toujours visible) — #}
  1164.                         {% if job.jobSummary is not null %}
  1165.                             <div class=\"job-section-title\">Présentation du poste</div>
  1166.                             <p class=\"job-section-text\">{{ job.jobSummary }}</p>
  1167.                         {% endif %}
  1168.                         {% if app.user is null %}
  1169.                             <hr class=\"job-section-divider\">
  1170.                             <div class=\"job-section-title\">Missions</div>
  1171.                             <p class=\"job-section-text\">Retrouvez ici le détail complet des missions proposées pour ce poste : responsabilités quotidiennes, projets à mener, objectifs à atteindre et périmètre d'intervention au sein de l'équipe. Toutes les informations pour vous projeter concrètement dans le poste et savoir exactement ce qui vous attend dès votre prise de fonction.</p>
  1172.                             <hr class=\"job-section-divider\">
  1173.                             <div class=\"job-section-title\">Profil recherché</div>
  1174.                             <p class=\"job-section-text\">Accédez aux compétences techniques et humaines attendues par le recruteur, au niveau d'expérience requis, aux formations valorisées et aux qualités personnelles recherchées. Vérifiez en un coup d'œil si votre profil correspond à cette opportunité avant de candidater.</p>
  1175.                             <hr class=\"job-section-divider\">
  1176.                             <div class=\"job-section-title\">Avantages</div>
  1177.                             <p class=\"job-section-text\">Découvrez ce que l'entreprise propose à ses collaborateurs : politique de télétravail, couverture santé, primes, formation continue, ambiance de travail et perspectives d'évolution. Toutes les informations pour comparer cette offre avec vos attentes et faire le bon choix.</p>
  1178.                         {% endif %}
  1179.                         {% if app.user is not null %}
  1180.                             {# ══════ CONTENU COMPLET (connecté) ══════ #}
  1181.                             {% if job.keyResponsabilities is not null %}
  1182.                                 <hr class=\"job-section-divider\">
  1183.                                 <div class=\"job-section-title\">Missions</div>
  1184.                                 <p class=\"job-section-text\">{{ job.keyResponsabilities }}</p>
  1185.                             {% endif %}
  1186.                             {% if job.requirements is not null %}
  1187.                                 <hr class=\"job-section-divider\">
  1188.                                 <div class=\"job-section-title\">Profil recherché</div>
  1189.                                 <p class=\"job-section-text\">{{ job.requirements }}</p>
  1190.                             {% endif %}
  1191.                             {% if job.benefits is not null %}
  1192.                                 <hr class=\"job-section-divider\">
  1193.                                 <div class=\"job-section-title\">Avantages</div>
  1194.                                 <p class=\"job-section-text\">{{ job.benefits }}</p>
  1195.                             {% endif %}
  1196.                             {# — Boutons CTA — #}
  1197.                             <div class=\"job-cta-bar\">
  1198.                                 {% if app.user.candidate is not null %}
  1199.                                     <a href=\"{{ path('locale_cvs_application_job_like', {'_locale': app.request.locale, 'slug': job.slug}) }}\" class=\"job-cta-main active\">
  1200.                                         <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"currentColor\" stroke=\"none\"><path d=\"M20.84 4.61a5.5 5.5 0 00-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 00-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 000-7.78z\"/></svg>
  1201.                                         Je suis intéressé(e)
  1202.                                     </a>
  1203.                                 {% endif %}
  1204.                                 {% if job.websearch == 1 and job.website is not empty %}
  1205.                                     <a href=\"{{ job.website }}\" target=\"_blank\" class=\"job-cta-main active\">
  1206.                                         <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M18 13v6a2 2 0 01-2 2H5a2 2 0 01-2-2V8a2 2 0 012-2h6\"/><polyline points=\"15 3 21 3 21 9\"/><line x1=\"10\" y1=\"14\" x2=\"21\" y2=\"3\"/></svg>
  1207.                                         Candidater
  1208.                                     </a>
  1209.                                 {% endif %}
  1210.                                 {% if job.enterprise is not null %}
  1211.                                     <a href=\"{{ path('locale_cvs_application_company_show', {'_locale': app.request.locale, 'slug': job.enterprise.slug}) }}\" class=\"job-cta-company\">
  1212.                                         <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><rect x=\"2\" y=\"7\" width=\"20\" height=\"14\" rx=\"2\"/><path d=\"M16 7V5a4 4 0 00-8 0v2\"/></svg>
  1213.                                         Voir les autres offres
  1214.                                     </a>
  1215.                                 {% endif %}
  1216.                             </div>
  1217.                         {% else %}
  1218.                             {# ══════ CONTENU VERROUILLÉ (non connecté) ══════ #}
  1219.                             {# Zone floutée qui donne envie #}
  1220.                             <div class=\"job-locked-overlay\">
  1221.                                 <div class=\"job-locked-blur\">
  1222.                                     <hr class=\"job-section-divider\">
  1223.                                     <div class=\"job-section-title\">Missions</div>
  1224.                                     <p class=\"job-section-text\">Découvrez les missions principales de ce poste, les responsabilités quotidiennes et les projets sur lesquels vous interviendrez au sein de l'équipe...</p>
  1225.                                     <hr class=\"job-section-divider\">
  1226.                                     <div class=\"job-section-title\">Profil recherché</div>
  1227.                                     <p class=\"job-section-text\">Compétences techniques et soft skills recherchées, niveau d'expérience attendu, formations et certifications appréciées pour ce poste...</p>
  1228.                                     <hr class=\"job-section-divider\">
  1229.                                     <div class=\"job-section-title\">Avantages</div>
  1230.                                     <p class=\"job-section-text\">Télétravail, mutuelle, tickets restaurant, formation continue, ambiance de travail et perspectives d'évolution au sein de l'entreprise...</p>
  1231.                                 </div>
  1232.                                 <div class=\"job-locked-cta\">
  1233.                                     <div style=\"font-size:32px;\">🔓</div>
  1234.                                     <div class=\"job-locked-title\">Débloquez l'offre complète</div>
  1235.                                     <div class=\"job-locked-text\">Créez votre profil en 2 minutes pour accéder aux missions, avantages et candidater directement</div>
  1236.                                     <a href=\"{{ path('locale_app_register', {'_locale': app.request.locale}) }}\" class=\"job-locked-btn\">
  1237.                                         Créer mon profil gratuitement
  1238.                                         <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M7 17l9.2-9.2M17 17V7H7\"/></svg>
  1239.                                     </a>
  1240.                                     <div class=\"job-locked-login\">Déjà inscrit ? <a href=\"{{ path('locale_app_login', {'_locale': app.request.locale}) }}\">Se connecter</a></div>
  1241.                                 </div>
  1242.                             </div>
  1243.                         {% endif %}
  1244.                     </div>
  1245.                 </div>
  1246.             </div>
  1247.         </div>
  1248.     </div>
  1249.     {% if othersJobs is not null %}
  1250.         <div id=\"openings\" class=\"career-openings section panel overflow-hidden pb-6 xl:pb-9\">
  1251.             <div class=\"section-outer panel py-6 xl:py-9 bg-secondary dark:bg-gray-800\">
  1252.                 <div class=\"container max-w-lg\">
  1253.                     <div class=\"section-inner panel\">
  1254.                         <div class=\"panel vstack justify-center gap-4 sm:gap-6 xl:gap-8\">
  1255.                             <h2 class=\"h4 sm:h2 m-0 text-center\" data-anime=\"onview: -100; translateY: [48, 0]; opacity: [0, 1]; easing: spring(1, 80, 10, 0); duration: 450; delay: 100;\">
  1256.                                 Offres d'emploi de {{ job.enterprise.companyName|lower|capitalize }}
  1257.                             </h2>
  1258.                             <div class=\"panel\">
  1259.                                 <div class=\"panel\">
  1260.                                     <div class=\"row child-cols-12 sm:child-cols-6 col-match g-2 sm:g-3 uc-grid\">
  1261.                                         {% for oj in othersJobs %}
  1262.                                             <div class=\"panel\">
  1263.                                                 <div class=\"panel vstack justify-end items-end gap-1 p-3 rounded lg:rounded-2 bg-white dark:bg-gray-800\">
  1264.                                                     <div class=\"vstack gap-narrow\">
  1265.                                                         <h5 class=\"h6 lg:h5 m-0\">{{ oj.jobTitle }}</h5>
  1266.                                                         <span class=\"fs-6 text-dark dark:text-white text-opacity-70\">{{ oj.city }}</span>
  1267.                                                     </div>
  1268.                                                     <a href=\"{{ path('locale_cvs_application_job_show', {'_locale': app.request.locale, 'slug': oj.slug}) }}\" class=\"uc-link fs-7 fw-bold d-inline-flex items-center gap-narrow border-bottom pb-narrow\">
  1269.                                                         <span>Postuler</span>
  1270.                                                         <i class=\"icon icon-narrow unicon-arrow-up-right fw-bold rtl:-rotate-90\"></i>
  1271.                                                     </a>
  1272.                                                 </div>
  1273.                                             </div>
  1274.                                         {% endfor %}
  1275.                                     </div>
  1276.                                 </div>
  1277.                             </div>
  1278.                         </div>
  1279.                     </div>
  1280.                 </div>
  1281.             </div>
  1282.         </div>
  1283.     {% endif %}
  1284.     {% if similarJobs is defined and similarJobs is not empty %}
  1285.         <div id=\"similar_jobs\" class=\"similar-jobs section panel overflow-hidden pb-6 xl:pb-9\">
  1286.             <div class=\"section-outer panel py-6 xl:py-9\">
  1287.                 <div class=\"container max-w-lg\">
  1288.                     <div class=\"section-inner panel\">
  1289.                         <div class=\"panel vstack justify-center gap-4 sm:gap-6 xl:gap-8\">
  1290.                             <div class=\"vstack items-center text-center gap-1\">
  1291.                                 <h2 class=\"h4 sm:h2 m-0\">Offres similaires</h2>
  1292.                             </div>
  1293.                             <div class=\"panel\">
  1294.                                 <div class=\"row child-cols-12 sm:child-cols-6 lg:child-cols-4 col-match g-2 sm:g-3\">
  1295.                                     {% for sj in similarJobs %}
  1296.                                         <div class=\"panel\">
  1297.                                             <a href=\"{{ path('locale_cvs_application_job_show', {'_locale': app.request.locale, 'slug': sj.slug}) }}\" class=\"panel vstack gap-2 p-3 rounded-2 bg-white dark:bg-gray-800 h-100\" style=\"box-shadow: 0 2px 12px rgba(0,0,0,0.06), 0 1px 3px rgba(0,0,0,0.04); border: 1px solid rgba(0,0,0,0.06); text-decoration: none; color: inherit; transition: box-shadow 0.2s ease, transform 0.2s ease;\" onmouseover=\"this.style.boxShadow='0 8px 32px rgba(0,0,0,0.10), 0 2px 8px rgba(0,0,0,0.06)'; this.style.transform='translateY(-2px)';\" onmouseout=\"this.style.boxShadow='0 2px 12px rgba(0,0,0,0.06), 0 1px 3px rgba(0,0,0,0.04)'; this.style.transform='translateY(0)';\">
  1298.                                                 {# En-tête : entreprise #}
  1299.                                                 {% if sj.companyName is not empty %}
  1300.                                                     <div class=\"hstack gap-1 items-center\">
  1301.                                                         <div class=\"cstack w-32px h-32px rounded-1 bg-secondary\" style=\"min-width: 32px;\">
  1302.                                                             <i class=\"icon-narrow unicon-portfolio text-primary\" style=\"font-size: 14px;\"></i>
  1303.                                                         </div>
  1304.                                                         <span class=\"fs-7 fw-bold text-dark text-opacity-50\" style=\"overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\">{{ sj.companyName }}</span>
  1305.                                                     </div>
  1306.                                                 {% endif %}
  1307.                                                 {# Titre du poste #}
  1308.                                                 <h5 class=\"h6 lg:h5 m-0\" style=\"line-height: 1.4;\">{{ sj.jobTitle }}</h5>
  1309.                                                 {# Infos clés #}
  1310.                                                 <div class=\"vstack gap-narrow mt-auto\">
  1311.                                                     {% if sj.city is not empty %}
  1312.                                                         <div class=\"hstack gap-narrow items-center fs-7 text-dark text-opacity-60\">
  1313.                                                             <i class=\"icon-narrow unicon-location\" style=\"font-size: 12px;\"></i>
  1314.                                                             <span>{{ sj.city }}{% if sj.country is not null %}, {{ sj.country }}{% endif %}</span>
  1315.                                                         </div>
  1316.                                                     {% endif %}
  1317.                                                     {% if sj.employmentType is not empty %}
  1318.                                                         <div class=\"hstack gap-narrow items-center fs-7 text-dark text-opacity-60\">
  1319.                                                             <i class=\"icon-narrow unicon-portfolio\" style=\"font-size: 12px;\"></i>
  1320.                                                             <span>{{ sj.employmentType }}</span>
  1321.                                                         </div>
  1322.                                                     {% endif %}
  1323.                                                     {% if sj.remoteWork is not empty %}
  1324.                                                         <div class=\"hstack gap-narrow items-center fs-7 text-dark text-opacity-60\">
  1325.                                                             <i class=\"icon-narrow unicon-laptop\" style=\"font-size: 12px;\"></i>
  1326.                                                             <span>{{ sj.remoteWork }}</span>
  1327.                                                         </div>
  1328.                                                     {% endif %}
  1329.                                                 </div>
  1330.                                                 {# Tags catégorie #}
  1331.                                                 {% if sj.category is not empty %}
  1332.                                                     <div class=\"hstack gap-narrow flex-wrap mt-1\">
  1333.                                                         <span class=\"px-1 py-narrow fs-8 fw-bold rounded bg-secondary text-primary\" style=\"white-space: nowrap;\">{{ sj.category }}</span>
  1334.                                                     </div>
  1335.                                                 {% endif %}
  1336.                                                 {# Lien CTA #}
  1337.                                                 <div class=\"hstack items-center gap-narrow mt-1 fs-7 fw-bold text-primary\">
  1338.                                                     <span>Voir l'offre</span>
  1339.                                                     <i class=\"icon icon-narrow unicon-arrow-up-right fw-bold\" style=\"font-size: 12px;\"></i>
  1340.                                                 </div>
  1341.                                             </a>
  1342.                                         </div>
  1343.                                     {% endfor %}
  1344.                                 </div>
  1345.                             </div>
  1346.                         </div>
  1347.                     </div>
  1348.                 </div>
  1349.             </div>
  1350.         </div>
  1351.     {% endif %}
  1352. {% endblock body %}
  1353. {% block footerjs %}
  1354.     <script>
  1355.         (function(){
  1356.             var JOB_BASE_URL = '/{{ app.request.locale }}/job/';
  1357.     var SEARCH_API = '{{ path(\"locale_api_jobs_search\", {\"_locale\": app.request.locale}) }}';
  1358.     var palette = [
  1359.         {bg:'#EDE9FE',color:'#7C3AED'},{bg:'#DBEAFE',color:'#2563EB'},
  1360.         {bg:'#D1FAE5',color:'#059669'},{bg:'#FEF3C7',color:'#D97706'},
  1361.         {bg:'#FCE7F3',color:'#DB2777'},{bg:'#FEE2E2',color:'#DC2626'},
  1362.         {bg:'#E0E7FF',color:'#4338CA'},{bg:'#CCFBF1',color:'#0D9488'}
  1363.     ];
  1364.     function getColor(name){
  1365.         var h=0;for(var i=0;i<name.length;i++) h=name.charCodeAt(i)+((h<<5)-h);
  1366.         return palette[Math.abs(h)%palette.length];
  1367.     }
  1368.     var searchInput = document.getElementById('wrSearchInput');
  1369.     var searchBtn = document.getElementById('wrSearchBtn');
  1370.     var searchResults = document.getElementById('wrSearchResults');
  1371.     var searchClose = document.getElementById('wrSearchClose');
  1372.     var jobsList = document.getElementById('wrJobsList');
  1373.     var loading = document.getElementById('wrLoading');
  1374.     var emptyState = document.getElementById('wrEmptyState');
  1375.     var loadMoreWrap = document.getElementById('wrLoadMore');
  1376.     var loadMoreBtn = document.getElementById('wrLoadMoreBtn');
  1377.     var resultsCount = document.getElementById('wrResultsCount');
  1378.     var totalCountEl = document.getElementById('wrTotalCount');
  1379.     var currentQuery = '';
  1380.     var currentOffset = 0;
  1381.     var LIMIT = 10;
  1382.     var isLoading = false;
  1383.     var debounceTimer;
  1384.     function renderJob(job){
  1385.         var col = getColor(job.companyName);
  1386.         var logoHtml;
  1387.         if(job.image){
  1388.             logoHtml = '<div class=\"wr-result-logo\"><img src=\"'+job.image+'\" alt=\"'+job.companyName+'\"></div>';
  1389.         } else {
  1390.             logoHtml = '<div class=\"wr-result-logo\" style=\"background:'+col.bg+';color:'+col.color+';\">'+(job.logo || job.companyName.charAt(0).toUpperCase())+'</div>';
  1391.         }
  1392.         var badgeHtml = '';
  1393.         if(job.isNew) badgeHtml = '<span class=\"wr-result-badge wr-badge-new\">Nouveau</span>';
  1394.         var salaryHtml = job.salary ? '<span class=\"wr-result-salary\">'+job.salary+'</span>' : '';
  1395.         var remoteHtml = '';
  1396.         if(job.remoteWork && job.remoteWork !== '' && job.remoteWork !== 'no'){
  1397.             var remoteLabel = job.remoteWork === 'full' ? 'Full remote' : (job.remoteWork === 'hybrid' ? 'Hybride' : job.remoteWork);
  1398.             remoteHtml = '<span>·</span><span>'+remoteLabel+'</span>';
  1399.         }
  1400.         var div = document.createElement('a');
  1401.         div.className = 'wr-result-item';
  1402.         div.href = JOB_BASE_URL + job.slug;
  1403.         div.innerHTML = logoHtml +
  1404.             '<div class=\"wr-result-info\">' +
  1405.             '<div class=\"wr-result-title\">' + job.jobTitle + '</div>' +
  1406.             '<div class=\"wr-result-meta\">' +
  1407.             '<span class=\"wr-result-company\">' + job.companyName + '</span>' +
  1408.             (job.city ? '<span>·</span><span>' + job.city + '</span>' : '') +
  1409.             '<span>·</span><span>' + (job.employmentType || '') + '</span>' +
  1410.             remoteHtml +
  1411.             badgeHtml +
  1412.             '</div>' +
  1413.             '</div>' +
  1414.             '<div class=\"wr-result-actions\">' + salaryHtml + '</div>';
  1415.         return div;
  1416.     }
  1417.     function fetchJobs(query, offset, append){
  1418.         if(isLoading) return;
  1419.         if(query.length < 2) return;
  1420.         isLoading = true;
  1421.         if(!append){
  1422.             jobsList.innerHTML = '';
  1423.             loadMoreWrap.style.display = 'none';
  1424.             resultsCount.style.display = 'none';
  1425.         }
  1426.         searchResults.classList.add('visible');
  1427.         loading.style.display = 'block';
  1428.         emptyState.style.display = 'none';
  1429.         var url = SEARCH_API + '?q=' + encodeURIComponent(query) + '&offset=' + offset + '&limit=' + LIMIT;
  1430.         fetch(url, {credentials:'same-origin'})
  1431.             .then(function(r){ return r.json(); })
  1432.             .then(function(data){
  1433.                 loading.style.display = 'none';
  1434.                 isLoading = false;
  1435.                 if(data.total === 0){
  1436.                     emptyState.style.display = 'block';
  1437.                     return;
  1438.                 }
  1439.                 data.jobs.forEach(function(job, i){
  1440.                     var el = renderJob(job);
  1441.                     jobsList.appendChild(el);
  1442.                     setTimeout(function(){ el.classList.add('show'); }, 50 + i * 60);
  1443.                 });
  1444.                 totalCountEl.textContent = data.total;
  1445.                 resultsCount.style.display = 'block';
  1446.                 if(data.hasMore){
  1447.                     loadMoreWrap.style.display = 'flex';
  1448.                 } else {
  1449.                     loadMoreWrap.style.display = 'none';
  1450.                 }
  1451.                 currentOffset = offset + data.jobs.length;
  1452.             })
  1453.             .catch(function(err){
  1454.                 console.error('Erreur recherche:', err);
  1455.                 loading.style.display = 'none';
  1456.                 isLoading = false;
  1457.             });
  1458.     }
  1459.     searchClose.addEventListener('click', function(){
  1460.         searchResults.classList.remove('visible');
  1461.         jobsList.innerHTML = '';
  1462.         searchInput.value = '';
  1463.         loadMoreWrap.style.display = 'none';
  1464.         resultsCount.style.display = 'none';
  1465.         emptyState.style.display = 'none';
  1466.     });
  1467.     searchInput.addEventListener('input', function(){
  1468.         clearTimeout(debounceTimer);
  1469.         var q = searchInput.value.trim();
  1470.         if(q.length < 2){
  1471.             searchResults.classList.remove('visible');
  1472.             jobsList.innerHTML = '';
  1473.             return;
  1474.         }
  1475.         debounceTimer = setTimeout(function(){
  1476.             currentQuery = q;
  1477.             currentOffset = 0;
  1478.             fetchJobs(currentQuery, 0, false);
  1479.         }, 350);
  1480.     });
  1481.     searchBtn.addEventListener('click', function(e){
  1482.         e.preventDefault();
  1483.         clearTimeout(debounceTimer);
  1484.         currentQuery = searchInput.value.trim();
  1485.         currentOffset = 0;
  1486.         fetchJobs(currentQuery, 0, false);
  1487.     });
  1488.     searchInput.addEventListener('keydown', function(e){
  1489.         if(e.key === 'Enter'){
  1490.             e.preventDefault();
  1491.             clearTimeout(debounceTimer);
  1492.             currentQuery = searchInput.value.trim();
  1493.             currentOffset = 0;
  1494.             fetchJobs(currentQuery, 0, false);
  1495.         }
  1496.     });
  1497.     loadMoreBtn.addEventListener('click', function(){
  1498.         fetchJobs(currentQuery, currentOffset, true);
  1499.     });
  1500. })();
  1501.     </script>
  1502. {% endblock footerjs %}
  1503. ""application/whileresume/application/jobs/show_fr.html.twig""/var/www/vhosts/mirtillostudio.fr/b1.mirtillostudio.fr/version-1/templates/application/whileresume/application/jobs/show_fr.html.twig");
  1504.     }
  1505. }