var/cache/dev/twig/c2/c22d78393cf4e1692c1d196b8dae501f.php line 60

Open in your IDE?
  1. <?php
  2. use Twig\Environment;
  3. use Twig\Error\LoaderError;
  4. use Twig\Error\RuntimeError;
  5. use Twig\Extension\CoreExtension;
  6. use Twig\Extension\SandboxExtension;
  7. use Twig\Markup;
  8. use Twig\Sandbox\SecurityError;
  9. use Twig\Sandbox\SecurityNotAllowedTagError;
  10. use Twig\Sandbox\SecurityNotAllowedFilterError;
  11. use Twig\Sandbox\SecurityNotAllowedFunctionError;
  12. use Twig\Sandbox\SecurityNotAllowedTestError;
  13. use Twig\Source;
  14. use Twig\Template;
  15. use Twig\TemplateWrapper;
  16. /* application/whileresume/website/components/footer.html.twig */
  17. class __TwigTemplate_92dfa7f2b5bd20f167b6e7fd82b619e4 extends Template
  18. {
  19. private Source $source;
  20. /**
  21. * @var array<string, Template>
  22. */
  23. private array $macros = [];
  24. public function __construct(Environment $env)
  25. {
  26. parent::__construct($env);
  27. $this->source = $this->getSourceContext();
  28. $this->parent = false;
  29. $this->blocks = [
  30. ];
  31. }
  32. protected function doDisplay(array $context, array $blocks = []): iterable
  33. {
  34. $macros = $this->macros;
  35. $__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  36. $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "template", "application/whileresume/website/components/footer.html.twig"));
  37. $__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  38. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "template", "application/whileresume/website/components/footer.html.twig"));
  39. // line 1
  40. $context["_locale"] = CoreExtension::getAttribute($this->env, $this->source, CoreExtension::getAttribute($this->env, $this->source, (isset($context["app"]) || array_key_exists("app", $context) ? $context["app"] : (function () { throw new RuntimeError('Variable "app" does not exist.', 1, $this->source); })()), "request", [], "any", false, false, false, 1), "locale", [], "any", false, false, false, 1);
  41. // line 2
  42. $context["_isFr"] = ((isset($context["_locale"]) || array_key_exists("_locale", $context) ? $context["_locale"] : (function () { throw new RuntimeError('Variable "_locale" does not exist.', 2, $this->source); })()) == "fr");
  43. // line 3
  44. yield "
  45. ";
  46. // line 5
  47. $context["footerArticles"] = $this->extensions['App\Twig\CoreExtension']->getFooterArticles((isset($context["_locale"]) || array_key_exists("_locale", $context) ? $context["_locale"] : (function () { throw new RuntimeError('Variable "_locale" does not exist.', 5, $this->source); })()), 5);
  48. // line 6
  49. $context["footerLandingJobs"] = $this->extensions['App\Twig\CoreExtension']->getFooterFeaturedLandingJobs((isset($context["_locale"]) || array_key_exists("_locale", $context) ? $context["_locale"] : (function () { throw new RuntimeError('Variable "_locale" does not exist.', 6, $this->source); })()), 5);
  50. // line 7
  51. $context["footerJobsCities"] = $this->extensions['App\Twig\CoreExtension']->getFooterJobsCities((isset($context["_locale"]) || array_key_exists("_locale", $context) ? $context["_locale"] : (function () { throw new RuntimeError('Variable "_locale" does not exist.', 7, $this->source); })()), 6);
  52. // line 8
  53. $context["footerEnterprisesCities"] = $this->extensions['App\Twig\CoreExtension']->getFooterEnterprisesCities((isset($context["_locale"]) || array_key_exists("_locale", $context) ? $context["_locale"] : (function () { throw new RuntimeError('Variable "_locale" does not exist.', 8, $this->source); })()), 6);
  54. // line 9
  55. yield "
  56. ";
  57. // line 11
  58. $context["_storeData"] = $this->extensions['App\Twig\CvsExtension']->getAppStoreCountries();
  59. // line 12
  60. $context["_storePrimary"] = ((CoreExtension::getAttribute($this->env, $this->source, ($context["_storeData"] ?? null), "primary", [], "any", true, true, false, 12)) ? (Twig\Extension\CoreExtension::default(CoreExtension::getAttribute($this->env, $this->source, (isset($context["_storeData"]) || array_key_exists("_storeData", $context) ? $context["_storeData"] : (function () { throw new RuntimeError('Variable "_storeData" does not exist.', 12, $this->source); })()), "primary", [], "any", false, false, false, 12), [])) : ([]));
  61. // line 13
  62. $context["_storeOthers"] = ((CoreExtension::getAttribute($this->env, $this->source, ($context["_storeData"] ?? null), "others", [], "any", true, true, false, 13)) ? (Twig\Extension\CoreExtension::default(CoreExtension::getAttribute($this->env, $this->source, (isset($context["_storeData"]) || array_key_exists("_storeData", $context) ? $context["_storeData"] : (function () { throw new RuntimeError('Variable "_storeData" does not exist.', 13, $this->source); })()), "others", [], "any", false, false, false, 13), [])) : ([]));
  63. // line 14
  64. yield "
  65. <style>
  66. /* ---------- Footer WhileResume ---------- */
  67. .whr-footer {
  68. margin-top: 32px;
  69. padding: 36px 24px 24px;
  70. background: #F9FAFD;
  71. border-radius: 16px;
  72. color: #2c2c46;
  73. width: auto;
  74. max-width: none;
  75. margin-left: 16px;
  76. margin-right: 16px;
  77. }
  78. .theme-dark .whr-footer {
  79. background: #2a2a3c;
  80. color: #e9e9ef;
  81. }
  82. .middle-sidebar-left .whr-footer {
  83. width: 100%;
  84. margin-left: 0;
  85. margin-right: 0;
  86. }
  87. /* Stores en haut de la col 1 */
  88. .whr-footer .whr-stores {
  89. display: flex;
  90. flex-direction: column;
  91. gap: 8px;
  92. margin-bottom: 18px;
  93. position: relative; /* pour le dropdown */
  94. }
  95. .whr-footer .whr-store-link {
  96. display: inline-flex;
  97. align-items: center;
  98. gap: 10px;
  99. padding: 8px 14px;
  100. background: #111;
  101. color: #fff !important;
  102. border-radius: 10px;
  103. font-size: 12px;
  104. font-weight: 600;
  105. text-decoration: none !important;
  106. line-height: 1.2;
  107. transition: transform .15s ease, background .2s ease;
  108. max-width: 200px;
  109. cursor: pointer;
  110. border: none;
  111. font-family: inherit;
  112. text-align: left;
  113. }
  114. .whr-footer .whr-store-link:hover {
  115. background: #2c2c46;
  116. transform: translateY(-1px);
  117. }
  118. .whr-footer .whr-store-link small {
  119. display: block;
  120. font-weight: 400;
  121. font-size: 10px;
  122. opacity: .7;
  123. }
  124. .whr-footer .whr-store-link strong { font-size: 13px; display: block; }
  125. /* Wrapper du bouton + dropdown (version EN) */
  126. .whr-store-wrap {
  127. position: relative;
  128. display: inline-block;
  129. }
  130. .whr-store-wrap .whr-store-link {
  131. width: 100%;
  132. max-width: 200px;
  133. }
  134. /* === Dropdown élargi (2 colonnes + search + featured pinné) === */
  135. .whr-store-dropdown {
  136. position: absolute;
  137. bottom: calc(100% + 6px);
  138. left: 0;
  139. width: 380px;
  140. max-width: calc(100vw - 32px);
  141. background: #fff;
  142. border-radius: 12px;
  143. box-shadow: 0 -8px 24px rgba(0,0,0,.15), 0 -2px 6px rgba(0,0,0,.08);
  144. z-index: 1000;
  145. display: none;
  146. overflow: hidden;
  147. }
  148. .theme-dark .whr-store-dropdown {
  149. background: #34344a;
  150. box-shadow: 0 -8px 24px rgba(0,0,0,.4), 0 -2px 6px rgba(0,0,0,.2);
  151. }
  152. .whr-store-wrap.is-open .whr-store-dropdown {
  153. display: flex;
  154. flex-direction: column;
  155. animation: whrFadeInUp .15s ease;
  156. }
  157. @keyframes whrFadeInUp {
  158. from { opacity: 0; transform: translateY(4px); }
  159. to { opacity: 1; transform: translateY(0); }
  160. }
  161. /* Chevron */
  162. .whr-store-link .whr-store-chevron {
  163. margin-left: auto;
  164. font-size: 10px;
  165. opacity: .7;
  166. transition: transform .2s ease;
  167. }
  168. .whr-store-wrap.is-open .whr-store-link .whr-store-chevron {
  169. transform: rotate(180deg);
  170. }
  171. /* Zone search en haut */
  172. .whr-store-search-wrap {
  173. padding: 10px 10px 6px;
  174. border-bottom: 1px solid rgba(0,0,0,.06);
  175. flex-shrink: 0;
  176. }
  177. .theme-dark .whr-store-search-wrap { border-bottom-color: rgba(255,255,255,.08); }
  178. .whr-store-search {
  179. width: 100%;
  180. height: 34px;
  181. padding: 0 12px 0 32px;
  182. border: 1px solid rgba(0,0,0,.1);
  183. border-radius: 8px;
  184. background: #f5f5f8 url(\"data:image/svg+xml;utf8,<svg xmlns=\x27http://www.w3.org/2000/svg\x27 width=\x2714\x27 height=\x2714\x27 viewBox=\x270 0 24 24\x27 fill=\x27none\x27 stroke=\x27%23888\x27 stroke-width=\x272\x27 stroke-linecap=\x27round\x27 stroke-linejoin=\x27round\x27><circle cx=\x2711\x27 cy=\x2711\x27 r=\x278\x27/><line x1=\x2721\x27 y1=\x2721\x27 x2=\x2716.65\x27 y2=\x2716.65\x27/></svg>\") no-repeat 10px center;
  185. font-size: 13px;
  186. color: #2c2c46;
  187. outline: none;
  188. transition: border-color .15s ease, background-color .15s ease;
  189. font-family: inherit;
  190. }
  191. .whr-store-search:focus {
  192. border-color: var(--theme-color, #6C3AED);
  193. background-color: #fff;
  194. }
  195. .theme-dark .whr-store-search {
  196. background-color: #2a2a3c;
  197. border-color: rgba(255,255,255,.1);
  198. color: #e9e9ef;
  199. }
  200. .theme-dark .whr-store-search:focus { background-color: #3c3c52; }
  201. .whr-store-search::placeholder { color: #999; }
  202. /* Featured pinné (toujours visible, hors scroll) */
  203. .whr-store-featured {
  204. padding: 8px 8px 4px;
  205. flex-shrink: 0;
  206. border-bottom: 1px solid rgba(0,0,0,.06);
  207. }
  208. .theme-dark .whr-store-featured { border-bottom-color: rgba(255,255,255,.08); }
  209. /* Zone scrollable des \"other regions\" */
  210. .whr-store-others {
  211. padding: 8px;
  212. max-height: 280px;
  213. overflow-y: auto;
  214. flex: 1;
  215. }
  216. .whr-store-others::-webkit-scrollbar { width: 6px; }
  217. .whr-store-others::-webkit-scrollbar-thumb { background: rgba(0,0,0,.15); border-radius: 3px; }
  218. .theme-dark .whr-store-others::-webkit-scrollbar-thumb { background: rgba(255,255,255,.15); }
  219. /* Header de section */
  220. .whr-store-dropdown-header {
  221. font-size: 10px;
  222. font-weight: 700;
  223. text-transform: uppercase;
  224. letter-spacing: .5px;
  225. opacity: .55;
  226. padding: 4px 8px 6px;
  227. color: #2c2c46;
  228. }
  229. .theme-dark .whr-store-dropdown-header { color: #e9e9ef; }
  230. /* Grille 2 colonnes pour les pays */
  231. .whr-store-grid {
  232. display: grid;
  233. grid-template-columns: 1fr 1fr;
  234. gap: 2px;
  235. }
  236. /* Item pays */
  237. .whr-store-country {
  238. display: flex;
  239. align-items: center;
  240. gap: 8px;
  241. padding: 7px 9px;
  242. border-radius: 6px;
  243. text-decoration: none !important;
  244. color: #2c2c46 !important;
  245. font-size: 12.5px;
  246. transition: background .15s ease;
  247. min-width: 0;
  248. }
  249. .theme-dark .whr-store-country { color: #e9e9ef !important; }
  250. .whr-store-country:hover {
  251. background: rgba(108, 58, 237, .08);
  252. color: var(--theme-color, #6C3AED) !important;
  253. }
  254. .theme-dark .whr-store-country:hover { background: rgba(108, 58, 237, .2); }
  255. .whr-store-country .whr-flag {
  256. font-size: 16px;
  257. line-height: 1;
  258. width: 18px;
  259. text-align: center;
  260. flex-shrink: 0;
  261. }
  262. .whr-store-country .whr-country-name {
  263. flex: 1;
  264. font-weight: 500;
  265. white-space: nowrap;
  266. overflow: hidden;
  267. text-overflow: ellipsis;
  268. min-width: 0;
  269. }
  270. /* Featured = pleine largeur, plus mis en avant */
  271. .whr-store-featured .whr-store-country {
  272. background: linear-gradient(135deg, rgba(108, 58, 237, .08), rgba(108, 58, 237, .03));
  273. font-weight: 600;
  274. padding: 9px 10px;
  275. }
  276. .theme-dark .whr-store-featured .whr-store-country {
  277. background: linear-gradient(135deg, rgba(108, 58, 237, .25), rgba(108, 58, 237, .1));
  278. }
  279. /* Message \"aucun résultat\" */
  280. .whr-store-empty {
  281. text-align: center;
  282. padding: 20px 12px;
  283. font-size: 12px;
  284. color: #999;
  285. font-style: italic;
  286. }
  287. .theme-dark .whr-store-empty { color: #aaa; }
  288. /* Item caché par la recherche */
  289. .whr-store-country.is-hidden { display: none; }
  290. /* Responsive : sur mobile, 1 colonne et largeur ajustée */
  291. @media (max-width: 575.98px) {
  292. .whr-store-dropdown {
  293. width: calc(100vw - 32px);
  294. max-width: 360px;
  295. }
  296. .whr-store-grid {
  297. grid-template-columns: 1fr;
  298. }
  299. }
  300. /* Colonnes */
  301. .whr-footer .whr-foot-col h4 {
  302. font-size: 13px;
  303. font-weight: 700;
  304. margin: 0 0 14px 0;
  305. color: inherit;
  306. text-transform: uppercase;
  307. letter-spacing: .3px;
  308. }
  309. .whr-footer .whr-foot-col ul {
  310. list-style: none;
  311. padding: 0;
  312. margin: 0;
  313. font-size: 13px;
  314. }
  315. .whr-footer .whr-foot-col ul li { margin-bottom: 10px; }
  316. .whr-footer .whr-foot-col a {
  317. color: inherit;
  318. opacity: .75;
  319. text-decoration: none;
  320. transition: opacity .2s ease, color .2s ease;
  321. }
  322. .whr-footer .whr-foot-col a:hover { opacity: 1; color: var(--theme-color, #6C3AED); }
  323. .whr-footer .whr-foot-empty {
  324. font-size: 12px;
  325. opacity: .5;
  326. font-style: italic;
  327. }
  328. .whr-footer .whr-foot-action-links a {
  329. display: inline-flex;
  330. align-items: center;
  331. gap: 8px;
  332. }
  333. .whr-footer .whr-foot-action-links a i {
  334. font-size: 14px;
  335. opacity: .7;
  336. width: 16px;
  337. text-align: center;
  338. }
  339. .whr-footer .whr-foot-col .whr-city-link {
  340. display: inline-flex;
  341. align-items: center;
  342. gap: 6px;
  343. }
  344. .whr-footer .whr-foot-col .whr-city-link .whr-city-icon {
  345. font-size: 14px;
  346. line-height: 1;
  347. display: inline-block;
  348. width: 18px;
  349. text-align: center;
  350. opacity: .85;
  351. }
  352. .whr-footer .whr-foot-grid {
  353. display: grid;
  354. gap: 28px;
  355. grid-template-columns: 1fr;
  356. }
  357. @media (min-width: 576px) {
  358. .whr-footer .whr-foot-grid { grid-template-columns: 1fr 1fr; }
  359. }
  360. @media (min-width: 992px) {
  361. .whr-footer .whr-foot-grid {
  362. grid-template-columns: repeat(5, 1fr);
  363. gap: 32px;
  364. }
  365. }
  366. .whr-footer .whr-foot-bottom {
  367. margin-top: 32px;
  368. padding-top: 20px;
  369. border-top: 1px solid rgba(0,0,0,.08);
  370. display: flex;
  371. flex-direction: column;
  372. gap: 14px;
  373. align-items: center;
  374. text-align: center;
  375. }
  376. .theme-dark .whr-footer .whr-foot-bottom { border-top-color: rgba(255,255,255,.1); }
  377. @media (min-width: 768px) {
  378. .whr-footer .whr-foot-bottom {
  379. flex-direction: row;
  380. justify-content: space-between;
  381. text-align: left;
  382. }
  383. }
  384. .whr-footer .whr-foot-copy {
  385. display: inline-flex;
  386. align-items: center;
  387. gap: 8px;
  388. font-size: 12px;
  389. opacity: .7;
  390. margin: 0;
  391. }
  392. .whr-footer .whr-foot-copy img.whr-favicon {
  393. width: 18px;
  394. height: 18px;
  395. border-radius: 4px;
  396. flex-shrink: 0;
  397. }
  398. .whr-footer .whr-foot-legal {
  399. display: flex;
  400. flex-wrap: wrap;
  401. gap: 6px 16px;
  402. justify-content: center;
  403. font-size: 12px;
  404. }
  405. .whr-footer .whr-foot-legal a {
  406. color: inherit;
  407. opacity: .75;
  408. text-decoration: none;
  409. }
  410. .whr-footer .whr-foot-legal a:hover { opacity: 1; }
  411. .whr-footer .whr-foot-legal .whr-admin-link { color: #e74c3c !important; opacity: 1; }
  412. .whr-footer .whr-foot-social {
  413. display: flex;
  414. flex-wrap: wrap;
  415. gap: 6px;
  416. list-style: none;
  417. padding: 0;
  418. margin: 0;
  419. }
  420. .whr-footer .whr-foot-social a {
  421. width: 32px; height: 32px;
  422. border-radius: 8px;
  423. background: #fff;
  424. display: inline-flex;
  425. align-items: center;
  426. justify-content: center;
  427. color: #2c2c46;
  428. text-decoration: none !important;
  429. transition: background .2s ease, color .2s ease, transform .15s ease;
  430. box-shadow: 0 1px 2px rgba(0,0,0,.04);
  431. }
  432. .whr-footer .whr-foot-social a:hover {
  433. background: var(--theme-color, #6C3AED);
  434. color: #fff;
  435. transform: translateY(-1px);
  436. }
  437. .theme-dark .whr-footer .whr-foot-social a {
  438. background: #34344a;
  439. color: #fff;
  440. box-shadow: none;
  441. }
  442. .whr-footer .whr-foot-social i { font-size: 14px; }
  443. @media (max-width: 575.98px) {
  444. .whr-footer {
  445. padding: 24px 18px 20px;
  446. margin-left: 8px;
  447. margin-right: 8px;
  448. }
  449. .whr-store-dropdown {
  450. min-width: 220px;
  451. max-width: 90vw;
  452. }
  453. }
  454. </style>
  455. <footer class=\"whr-footer\" role=\"contentinfo\">
  456. ";
  457. // line 436
  458. yield " <div class=\"whr-foot-grid\">
  459. ";
  460. // line 439
  461. yield " <div class=\"whr-foot-col whr-foot-col-action\">
  462. ";
  463. // line 440
  464. if ((($tmp = (isset($context["connectUser"]) || array_key_exists("connectUser", $context) ? $context["connectUser"] : (function () { throw new RuntimeError('Variable "connectUser" does not exist.', 440, $this->source); })())) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
  465. // line 441
  466. yield " <h4>";
  467. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(Twig\Extension\CoreExtension::default($this->extensions['Symfony\Bridge\Twig\Extension\TranslationExtension']->trans("layout.footer.my_account", [], "whr-public"), "Mon compte"), "html", null, true);
  468. yield "</h4>
  469. ";
  470. } else {
  471. // line 443
  472. yield " <h4>";
  473. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(Twig\Extension\CoreExtension::default($this->extensions['Symfony\Bridge\Twig\Extension\TranslationExtension']->trans("layout.footer.start_here", [], "whr-public"), "Commencer ici"), "html", null, true);
  474. yield "</h4>
  475. ";
  476. }
  477. // line 445
  478. yield "
  479. <div class=\"whr-stores\">
  480. ";
  481. // line 448
  482. yield "
  483. ";
  484. // line 450
  485. yield " ";
  486. $context["_hasIos"] = false;
  487. // line 451
  488. yield " ";
  489. $context['_parent'] = $context;
  490. $context['_seq'] = CoreExtension::ensureTraversable((isset($context["_storePrimary"]) || array_key_exists("_storePrimary", $context) ? $context["_storePrimary"] : (function () { throw new RuntimeError('Variable "_storePrimary" does not exist.', 451, $this->source); })()));
  491. foreach ($context['_seq'] as $context["_key"] => $context["c"]) {
  492. if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, $context["c"], "ios", [], "any", false, false, false, 451)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
  493. $context["_hasIos"] = true;
  494. }
  495. }
  496. $_parent = $context['_parent'];
  497. unset($context['_seq'], $context['_key'], $context['c'], $context['_parent']);
  498. $context = array_intersect_key($context, $_parent);
  499. $context += $_parent;
  500. // line 452
  501. yield " ";
  502. $context['_parent'] = $context;
  503. $context['_seq'] = CoreExtension::ensureTraversable((isset($context["_storeOthers"]) || array_key_exists("_storeOthers", $context) ? $context["_storeOthers"] : (function () { throw new RuntimeError('Variable "_storeOthers" does not exist.', 452, $this->source); })()));
  504. foreach ($context['_seq'] as $context["_key"] => $context["c"]) {
  505. if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, $context["c"], "ios", [], "any", false, false, false, 452)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
  506. $context["_hasIos"] = true;
  507. }
  508. }
  509. $_parent = $context['_parent'];
  510. unset($context['_seq'], $context['_key'], $context['c'], $context['_parent']);
  511. $context = array_intersect_key($context, $_parent);
  512. $context += $_parent;
  513. // line 453
  514. yield "
  515. ";
  516. // line 454
  517. if ((($tmp = (isset($context["_hasIos"]) || array_key_exists("_hasIos", $context) ? $context["_hasIos"] : (function () { throw new RuntimeError('Variable "_hasIos" does not exist.', 454, $this->source); })())) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
  518. // line 455
  519. yield " <div class=\"whr-store-wrap\" data-whr-store=\"ios\">
  520. <button type=\"button\" class=\"whr-store-link\" aria-haspopup=\"true\" aria-expanded=\"false\" aria-label=\"App Store - Choose your country\">
  521. <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"#fff\" aria-hidden=\"true\">
  522. <path d=\"M18.71 19.5C17.88 20.74 17 21.95 15.66 21.97C14.32 22 13.89 21.18 12.37 21.18C10.84 21.18 10.37 21.95 9.09997 22C7.78997 22.05 6.79997 20.68 5.95997 19.47C4.24997 17 2.93997 12.45 4.69997 9.39C5.56997 7.87 7.12997 6.91 8.81997 6.88C10.1 6.86 11.32 7.75 12.11 7.75C12.89 7.75 14.37 6.68 15.92 6.84C16.57 6.87 18.39 7.1 19.56 8.82C19.47 8.88 17.39 10.1 17.41 12.63C17.44 15.65 20.06 16.66 20.09 16.67C20.06 16.74 19.67 18.11 18.71 19.5ZM13 3.5C13.73 2.67 14.94 2.04 15.94 2C16.07 3.17 15.6 4.35 14.9 5.19C14.21 6.04 13.07 6.7 11.95 6.61C11.8 5.46 12.36 4.26 13 3.5Z\"/>
  523. </svg>
  524. <span>
  525. <small>";
  526. // line 461
  527. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(Twig\Extension\CoreExtension::default($this->extensions['Symfony\Bridge\Twig\Extension\TranslationExtension']->trans("layout.download_on", [], "whr-public"), "Download on"), "html", null, true);
  528. yield "</small>
  529. <strong>App Store</strong>
  530. </span>
  531. <span class=\"whr-store-chevron\" aria-hidden=\"true\">▲</span>
  532. </button>
  533. <div class=\"whr-store-dropdown\" role=\"menu\">
  534. ";
  535. // line 469
  536. yield " ";
  537. $context["_iosOthersCount"] = 0;
  538. // line 470
  539. yield " ";
  540. $context['_parent'] = $context;
  541. $context['_seq'] = CoreExtension::ensureTraversable((isset($context["_storeOthers"]) || array_key_exists("_storeOthers", $context) ? $context["_storeOthers"] : (function () { throw new RuntimeError('Variable "_storeOthers" does not exist.', 470, $this->source); })()));
  542. foreach ($context['_seq'] as $context["_key"] => $context["c"]) {
  543. if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, $context["c"], "ios", [], "any", false, false, false, 470)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
  544. $context["_iosOthersCount"] = ((isset($context["_iosOthersCount"]) || array_key_exists("_iosOthersCount", $context) ? $context["_iosOthersCount"] : (function () { throw new RuntimeError('Variable "_iosOthersCount" does not exist.', 470, $this->source); })()) + 1);
  545. }
  546. }
  547. $_parent = $context['_parent'];
  548. unset($context['_seq'], $context['_key'], $context['c'], $context['_parent']);
  549. $context = array_intersect_key($context, $_parent);
  550. $context += $_parent;
  551. // line 471
  552. yield " ";
  553. if (((isset($context["_iosOthersCount"]) || array_key_exists("_iosOthersCount", $context) ? $context["_iosOthersCount"] : (function () { throw new RuntimeError('Variable "_iosOthersCount" does not exist.', 471, $this->source); })()) > 20)) {
  554. // line 472
  555. yield " <div class=\"whr-store-search-wrap\">
  556. <input type=\"text\"
  557. class=\"whr-store-search\"
  558. placeholder=\"";
  559. // line 475
  560. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(Twig\Extension\CoreExtension::default($this->extensions['Symfony\Bridge\Twig\Extension\TranslationExtension']->trans("layout.search_country", [], "whr-public"), "Search country..."), "html", null, true);
  561. yield "\"
  562. aria-label=\"Search country\"
  563. autocomplete=\"off\">
  564. </div>
  565. ";
  566. }
  567. // line 480
  568. yield "
  569. ";
  570. // line 482
  571. yield " ";
  572. $context["_iosPrimaryCount"] = 0;
  573. // line 483
  574. yield " ";
  575. $context['_parent'] = $context;
  576. $context['_seq'] = CoreExtension::ensureTraversable((isset($context["_storePrimary"]) || array_key_exists("_storePrimary", $context) ? $context["_storePrimary"] : (function () { throw new RuntimeError('Variable "_storePrimary" does not exist.', 483, $this->source); })()));
  577. foreach ($context['_seq'] as $context["_key"] => $context["c"]) {
  578. if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, $context["c"], "ios", [], "any", false, false, false, 483)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
  579. $context["_iosPrimaryCount"] = ((isset($context["_iosPrimaryCount"]) || array_key_exists("_iosPrimaryCount", $context) ? $context["_iosPrimaryCount"] : (function () { throw new RuntimeError('Variable "_iosPrimaryCount" does not exist.', 483, $this->source); })()) + 1);
  580. }
  581. }
  582. $_parent = $context['_parent'];
  583. unset($context['_seq'], $context['_key'], $context['c'], $context['_parent']);
  584. $context = array_intersect_key($context, $_parent);
  585. $context += $_parent;
  586. // line 484
  587. yield " ";
  588. if (((isset($context["_iosPrimaryCount"]) || array_key_exists("_iosPrimaryCount", $context) ? $context["_iosPrimaryCount"] : (function () { throw new RuntimeError('Variable "_iosPrimaryCount" does not exist.', 484, $this->source); })()) > 0)) {
  589. // line 485
  590. yield " <div class=\"whr-store-featured\">
  591. <div class=\"whr-store-dropdown-header\">
  592. ";
  593. // line 487
  594. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(Twig\Extension\CoreExtension::default($this->extensions['Symfony\Bridge\Twig\Extension\TranslationExtension']->trans("layout.featured", [], "whr-public"), "Featured"), "html", null, true);
  595. yield "
  596. </div>
  597. ";
  598. // line 489
  599. $context['_parent'] = $context;
  600. $context['_seq'] = CoreExtension::ensureTraversable((isset($context["_storePrimary"]) || array_key_exists("_storePrimary", $context) ? $context["_storePrimary"] : (function () { throw new RuntimeError('Variable "_storePrimary" does not exist.', 489, $this->source); })()));
  601. foreach ($context['_seq'] as $context["code"] => $context["country"]) {
  602. // line 490
  603. yield " ";
  604. if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, $context["country"], "ios", [], "any", false, false, false, 490)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
  605. // line 491
  606. yield " <a href=\"";
  607. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["country"], "ios", [], "any", false, false, false, 491), "html", null, true);
  608. yield "\"
  609. class=\"whr-store-country\"
  610. data-search=\"";
  611. // line 493
  612. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(Twig\Extension\CoreExtension::lower($this->env->getCharset(), CoreExtension::getAttribute($this->env, $this->source, $context["country"], "label", [], "any", false, false, false, 493)), "html", null, true);
  613. yield " ";
  614. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(Twig\Extension\CoreExtension::lower($this->env->getCharset(), $context["code"]), "html", null, true);
  615. yield "\"
  616. target=\"_blank\" rel=\"noopener\" role=\"menuitem\">
  617. ";
  618. // line 495
  619. if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, $context["country"], "flag", [], "any", false, false, false, 495)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
  620. yield "<span class=\"whr-flag\">";
  621. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["country"], "flag", [], "any", false, false, false, 495), "html", null, true);
  622. yield "</span>";
  623. }
  624. // line 496
  625. yield " <span class=\"whr-country-name\">";
  626. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["country"], "label", [], "any", false, false, false, 496), "html", null, true);
  627. yield "</span>
  628. </a>
  629. ";
  630. }
  631. // line 499
  632. yield " ";
  633. }
  634. $_parent = $context['_parent'];
  635. unset($context['_seq'], $context['code'], $context['country'], $context['_parent']);
  636. $context = array_intersect_key($context, $_parent);
  637. $context += $_parent;
  638. // line 500
  639. yield " </div>
  640. ";
  641. }
  642. // line 502
  643. yield "
  644. ";
  645. // line 504
  646. yield " ";
  647. if ( !Twig\Extension\CoreExtension::testEmpty((isset($context["_storeOthers"]) || array_key_exists("_storeOthers", $context) ? $context["_storeOthers"] : (function () { throw new RuntimeError('Variable "_storeOthers" does not exist.', 504, $this->source); })()))) {
  648. // line 505
  649. yield " <div class=\"whr-store-others\">
  650. <div class=\"whr-store-dropdown-header\">
  651. ";
  652. // line 507
  653. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(Twig\Extension\CoreExtension::default($this->extensions['Symfony\Bridge\Twig\Extension\TranslationExtension']->trans("layout.other_regions", [], "whr-public"), "Other regions"), "html", null, true);
  654. yield "
  655. </div>
  656. <div class=\"whr-store-grid\">
  657. ";
  658. // line 510
  659. $context['_parent'] = $context;
  660. $context['_seq'] = CoreExtension::ensureTraversable((isset($context["_storeOthers"]) || array_key_exists("_storeOthers", $context) ? $context["_storeOthers"] : (function () { throw new RuntimeError('Variable "_storeOthers" does not exist.', 510, $this->source); })()));
  661. foreach ($context['_seq'] as $context["code"] => $context["country"]) {
  662. // line 511
  663. yield " ";
  664. if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, $context["country"], "ios", [], "any", false, false, false, 511)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
  665. // line 512
  666. yield " <a href=\"";
  667. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["country"], "ios", [], "any", false, false, false, 512), "html", null, true);
  668. yield "\"
  669. class=\"whr-store-country\"
  670. data-search=\"";
  671. // line 514
  672. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(Twig\Extension\CoreExtension::lower($this->env->getCharset(), CoreExtension::getAttribute($this->env, $this->source, $context["country"], "label", [], "any", false, false, false, 514)), "html", null, true);
  673. yield " ";
  674. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(Twig\Extension\CoreExtension::lower($this->env->getCharset(), $context["code"]), "html", null, true);
  675. yield "\"
  676. target=\"_blank\" rel=\"noopener\" role=\"menuitem\">
  677. ";
  678. // line 516
  679. if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, $context["country"], "flag", [], "any", false, false, false, 516)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
  680. yield "<span class=\"whr-flag\">";
  681. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["country"], "flag", [], "any", false, false, false, 516), "html", null, true);
  682. yield "</span>";
  683. }
  684. // line 517
  685. yield " <span class=\"whr-country-name\">";
  686. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["country"], "label", [], "any", false, false, false, 517), "html", null, true);
  687. yield "</span>
  688. </a>
  689. ";
  690. }
  691. // line 520
  692. yield " ";
  693. }
  694. $_parent = $context['_parent'];
  695. unset($context['_seq'], $context['code'], $context['country'], $context['_parent']);
  696. $context = array_intersect_key($context, $_parent);
  697. $context += $_parent;
  698. // line 521
  699. yield " </div>
  700. <div class=\"whr-store-empty\" style=\"display: none;\">
  701. ";
  702. // line 523
  703. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(Twig\Extension\CoreExtension::default($this->extensions['Symfony\Bridge\Twig\Extension\TranslationExtension']->trans("layout.no_country_found", [], "whr-public"), "No country found"), "html", null, true);
  704. yield "
  705. </div>
  706. </div>
  707. ";
  708. }
  709. // line 527
  710. yield " </div>
  711. </div>
  712. ";
  713. }
  714. // line 530
  715. yield "
  716. ";
  717. // line 532
  718. yield " ";
  719. $context["_hasAndroid"] = false;
  720. // line 533
  721. yield " ";
  722. $context['_parent'] = $context;
  723. $context['_seq'] = CoreExtension::ensureTraversable((isset($context["_storePrimary"]) || array_key_exists("_storePrimary", $context) ? $context["_storePrimary"] : (function () { throw new RuntimeError('Variable "_storePrimary" does not exist.', 533, $this->source); })()));
  724. foreach ($context['_seq'] as $context["_key"] => $context["c"]) {
  725. if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, $context["c"], "android", [], "any", false, false, false, 533)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
  726. $context["_hasAndroid"] = true;
  727. }
  728. }
  729. $_parent = $context['_parent'];
  730. unset($context['_seq'], $context['_key'], $context['c'], $context['_parent']);
  731. $context = array_intersect_key($context, $_parent);
  732. $context += $_parent;
  733. // line 534
  734. yield " ";
  735. $context['_parent'] = $context;
  736. $context['_seq'] = CoreExtension::ensureTraversable((isset($context["_storeOthers"]) || array_key_exists("_storeOthers", $context) ? $context["_storeOthers"] : (function () { throw new RuntimeError('Variable "_storeOthers" does not exist.', 534, $this->source); })()));
  737. foreach ($context['_seq'] as $context["_key"] => $context["c"]) {
  738. if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, $context["c"], "android", [], "any", false, false, false, 534)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
  739. $context["_hasAndroid"] = true;
  740. }
  741. }
  742. $_parent = $context['_parent'];
  743. unset($context['_seq'], $context['_key'], $context['c'], $context['_parent']);
  744. $context = array_intersect_key($context, $_parent);
  745. $context += $_parent;
  746. // line 535
  747. yield "
  748. ";
  749. // line 536
  750. if ((($tmp = (isset($context["_hasAndroid"]) || array_key_exists("_hasAndroid", $context) ? $context["_hasAndroid"] : (function () { throw new RuntimeError('Variable "_hasAndroid" does not exist.', 536, $this->source); })())) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
  751. // line 537
  752. yield " <div class=\"whr-store-wrap\" data-whr-store=\"android\">
  753. <button type=\"button\" class=\"whr-store-link\" aria-haspopup=\"true\" aria-expanded=\"false\" aria-label=\"Google Play - Choose your country\">
  754. <svg width=\"18\" height=\"18\" viewBox=\"0 0 512 512\" aria-hidden=\"true\">
  755. <path style=\"fill:#3A9BC8;\" d=\"M225.656,256.052L14.016,485.451l-6.442,7.052c-4.005-5.919-6.704-12.972-7.313-20.806C0.087,470.305,0,468.91,0,467.518V44.499c0-9.488,2.873-18.02,7.574-24.987L225.656,256.052z\"/>
  756. <path style=\"fill:#9BCD83;\" d=\"M320.811,152.8l-95.155,103.253L7.574,19.512C19.936,1.405,45.183-6.342,66.6,6.02L320.811,152.8z\"/>
  757. <path style=\"fill:#EEB84C;\" d=\"M455.056,257.27c-0.348,14.453-7.748,28.904-22.113,37.174l-112.132,64.771l-95.155-103.163L320.811,152.8l70.518,40.745l41.614,24.026C448.178,226.366,455.579,241.861,455.056,257.27z\"/>
  758. <path style=\"fill:#B43F70;\" d=\"M7.591,492.492c12.368,18.116,37.599,25.838,58.976,13.496L320.775,359.22l-95.156-103.209L7.591,492.492z\"/>
  759. </svg>
  760. <span>
  761. <small>";
  762. // line 546
  763. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(Twig\Extension\CoreExtension::default($this->extensions['Symfony\Bridge\Twig\Extension\TranslationExtension']->trans("layout.available_on", [], "whr-public"), "Available on"), "html", null, true);
  764. yield "</small>
  765. <strong>Google Play</strong>
  766. </span>
  767. <span class=\"whr-store-chevron\" aria-hidden=\"true\">▲</span>
  768. </button>
  769. <div class=\"whr-store-dropdown\" role=\"menu\">
  770. ";
  771. // line 554
  772. yield " ";
  773. $context["_androidOthersCount"] = 0;
  774. // line 555
  775. yield " ";
  776. $context['_parent'] = $context;
  777. $context['_seq'] = CoreExtension::ensureTraversable((isset($context["_storeOthers"]) || array_key_exists("_storeOthers", $context) ? $context["_storeOthers"] : (function () { throw new RuntimeError('Variable "_storeOthers" does not exist.', 555, $this->source); })()));
  778. foreach ($context['_seq'] as $context["_key"] => $context["c"]) {
  779. if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, $context["c"], "android", [], "any", false, false, false, 555)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
  780. $context["_androidOthersCount"] = ((isset($context["_androidOthersCount"]) || array_key_exists("_androidOthersCount", $context) ? $context["_androidOthersCount"] : (function () { throw new RuntimeError('Variable "_androidOthersCount" does not exist.', 555, $this->source); })()) + 1);
  781. }
  782. }
  783. $_parent = $context['_parent'];
  784. unset($context['_seq'], $context['_key'], $context['c'], $context['_parent']);
  785. $context = array_intersect_key($context, $_parent);
  786. $context += $_parent;
  787. // line 556
  788. yield " ";
  789. if (((isset($context["_androidOthersCount"]) || array_key_exists("_androidOthersCount", $context) ? $context["_androidOthersCount"] : (function () { throw new RuntimeError('Variable "_androidOthersCount" does not exist.', 556, $this->source); })()) > 20)) {
  790. // line 557
  791. yield " <div class=\"whr-store-search-wrap\">
  792. <input type=\"text\"
  793. class=\"whr-store-search\"
  794. placeholder=\"";
  795. // line 560
  796. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(Twig\Extension\CoreExtension::default($this->extensions['Symfony\Bridge\Twig\Extension\TranslationExtension']->trans("layout.search_country", [], "whr-public"), "Search country..."), "html", null, true);
  797. yield "\"
  798. aria-label=\"Search country\"
  799. autocomplete=\"off\">
  800. </div>
  801. ";
  802. }
  803. // line 565
  804. yield "
  805. ";
  806. // line 567
  807. yield " ";
  808. $context["_androidPrimaryCount"] = 0;
  809. // line 568
  810. yield " ";
  811. $context['_parent'] = $context;
  812. $context['_seq'] = CoreExtension::ensureTraversable((isset($context["_storePrimary"]) || array_key_exists("_storePrimary", $context) ? $context["_storePrimary"] : (function () { throw new RuntimeError('Variable "_storePrimary" does not exist.', 568, $this->source); })()));
  813. foreach ($context['_seq'] as $context["_key"] => $context["c"]) {
  814. if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, $context["c"], "android", [], "any", false, false, false, 568)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
  815. $context["_androidPrimaryCount"] = ((isset($context["_androidPrimaryCount"]) || array_key_exists("_androidPrimaryCount", $context) ? $context["_androidPrimaryCount"] : (function () { throw new RuntimeError('Variable "_androidPrimaryCount" does not exist.', 568, $this->source); })()) + 1);
  816. }
  817. }
  818. $_parent = $context['_parent'];
  819. unset($context['_seq'], $context['_key'], $context['c'], $context['_parent']);
  820. $context = array_intersect_key($context, $_parent);
  821. $context += $_parent;
  822. // line 569
  823. yield " ";
  824. if (((isset($context["_androidPrimaryCount"]) || array_key_exists("_androidPrimaryCount", $context) ? $context["_androidPrimaryCount"] : (function () { throw new RuntimeError('Variable "_androidPrimaryCount" does not exist.', 569, $this->source); })()) > 0)) {
  825. // line 570
  826. yield " <div class=\"whr-store-featured\">
  827. <div class=\"whr-store-dropdown-header\">
  828. ";
  829. // line 572
  830. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(Twig\Extension\CoreExtension::default($this->extensions['Symfony\Bridge\Twig\Extension\TranslationExtension']->trans("layout.featured", [], "whr-public"), "Featured"), "html", null, true);
  831. yield "
  832. </div>
  833. ";
  834. // line 574
  835. $context['_parent'] = $context;
  836. $context['_seq'] = CoreExtension::ensureTraversable((isset($context["_storePrimary"]) || array_key_exists("_storePrimary", $context) ? $context["_storePrimary"] : (function () { throw new RuntimeError('Variable "_storePrimary" does not exist.', 574, $this->source); })()));
  837. foreach ($context['_seq'] as $context["code"] => $context["country"]) {
  838. // line 575
  839. yield " ";
  840. if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, $context["country"], "android", [], "any", false, false, false, 575)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
  841. // line 576
  842. yield " <a href=\"";
  843. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["country"], "android", [], "any", false, false, false, 576), "html", null, true);
  844. yield "\"
  845. class=\"whr-store-country\"
  846. data-search=\"";
  847. // line 578
  848. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(Twig\Extension\CoreExtension::lower($this->env->getCharset(), CoreExtension::getAttribute($this->env, $this->source, $context["country"], "label", [], "any", false, false, false, 578)), "html", null, true);
  849. yield " ";
  850. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(Twig\Extension\CoreExtension::lower($this->env->getCharset(), $context["code"]), "html", null, true);
  851. yield "\"
  852. target=\"_blank\" rel=\"noopener\" role=\"menuitem\">
  853. ";
  854. // line 580
  855. if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, $context["country"], "flag", [], "any", false, false, false, 580)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
  856. yield "<span class=\"whr-flag\">";
  857. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["country"], "flag", [], "any", false, false, false, 580), "html", null, true);
  858. yield "</span>";
  859. }
  860. // line 581
  861. yield " <span class=\"whr-country-name\">";
  862. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["country"], "label", [], "any", false, false, false, 581), "html", null, true);
  863. yield "</span>
  864. </a>
  865. ";
  866. }
  867. // line 584
  868. yield " ";
  869. }
  870. $_parent = $context['_parent'];
  871. unset($context['_seq'], $context['code'], $context['country'], $context['_parent']);
  872. $context = array_intersect_key($context, $_parent);
  873. $context += $_parent;
  874. // line 585
  875. yield " </div>
  876. ";
  877. }
  878. // line 587
  879. yield "
  880. ";
  881. // line 589
  882. yield " ";
  883. if ( !Twig\Extension\CoreExtension::testEmpty((isset($context["_storeOthers"]) || array_key_exists("_storeOthers", $context) ? $context["_storeOthers"] : (function () { throw new RuntimeError('Variable "_storeOthers" does not exist.', 589, $this->source); })()))) {
  884. // line 590
  885. yield " <div class=\"whr-store-others\">
  886. <div class=\"whr-store-dropdown-header\">
  887. ";
  888. // line 592
  889. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(Twig\Extension\CoreExtension::default($this->extensions['Symfony\Bridge\Twig\Extension\TranslationExtension']->trans("layout.other_regions", [], "whr-public"), "Other regions"), "html", null, true);
  890. yield "
  891. </div>
  892. <div class=\"whr-store-grid\">
  893. ";
  894. // line 595
  895. $context['_parent'] = $context;
  896. $context['_seq'] = CoreExtension::ensureTraversable((isset($context["_storeOthers"]) || array_key_exists("_storeOthers", $context) ? $context["_storeOthers"] : (function () { throw new RuntimeError('Variable "_storeOthers" does not exist.', 595, $this->source); })()));
  897. foreach ($context['_seq'] as $context["code"] => $context["country"]) {
  898. // line 596
  899. yield " ";
  900. if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, $context["country"], "android", [], "any", false, false, false, 596)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
  901. // line 597
  902. yield " <a href=\"";
  903. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["country"], "android", [], "any", false, false, false, 597), "html", null, true);
  904. yield "\"
  905. class=\"whr-store-country\"
  906. data-search=\"";
  907. // line 599
  908. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(Twig\Extension\CoreExtension::lower($this->env->getCharset(), CoreExtension::getAttribute($this->env, $this->source, $context["country"], "label", [], "any", false, false, false, 599)), "html", null, true);
  909. yield " ";
  910. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(Twig\Extension\CoreExtension::lower($this->env->getCharset(), $context["code"]), "html", null, true);
  911. yield "\"
  912. target=\"_blank\" rel=\"noopener\" role=\"menuitem\">
  913. ";
  914. // line 601
  915. if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, $context["country"], "flag", [], "any", false, false, false, 601)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
  916. yield "<span class=\"whr-flag\">";
  917. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["country"], "flag", [], "any", false, false, false, 601), "html", null, true);
  918. yield "</span>";
  919. }
  920. // line 602
  921. yield " <span class=\"whr-country-name\">";
  922. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["country"], "label", [], "any", false, false, false, 602), "html", null, true);
  923. yield "</span>
  924. </a>
  925. ";
  926. }
  927. // line 605
  928. yield " ";
  929. }
  930. $_parent = $context['_parent'];
  931. unset($context['_seq'], $context['code'], $context['country'], $context['_parent']);
  932. $context = array_intersect_key($context, $_parent);
  933. $context += $_parent;
  934. // line 606
  935. yield " </div>
  936. <div class=\"whr-store-empty\" style=\"display: none;\">
  937. ";
  938. // line 608
  939. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(Twig\Extension\CoreExtension::default($this->extensions['Symfony\Bridge\Twig\Extension\TranslationExtension']->trans("layout.no_country_found", [], "whr-public"), "No country found"), "html", null, true);
  940. yield "
  941. </div>
  942. </div>
  943. ";
  944. }
  945. // line 612
  946. yield " </div>
  947. </div>
  948. ";
  949. }
  950. // line 615
  951. yield " </div>
  952. <ul class=\"whr-foot-action-links\">
  953. <li>
  954. <a href=\"";
  955. // line 619
  956. yield (string) $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("whileresume_homepage");
  957. yield "\">
  958. <i class=\"feather-flag\"></i>
  959. English
  960. </a>
  961. </li>
  962. <li>
  963. <a href=\"";
  964. // line 625
  965. yield (string) $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("locale_whileresume_homepage", ["_locale" => "fr"]);
  966. yield "\">
  967. <i class=\"feather-flag\"></i>
  968. Français
  969. </a>
  970. </li>
  971. </ul>
  972. </div>
  973. ";
  974. // line 634
  975. yield " <div class=\"whr-foot-col\">
  976. <h4>";
  977. // line 635
  978. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(Twig\Extension\CoreExtension::default($this->extensions['Symfony\Bridge\Twig\Extension\TranslationExtension']->trans("layout.footer.latest_articles", [], "whr-public"), "Articles récents"), "html", null, true);
  979. yield "</h4>
  980. ";
  981. // line 636
  982. if ( !Twig\Extension\CoreExtension::testEmpty((isset($context["footerArticles"]) || array_key_exists("footerArticles", $context) ? $context["footerArticles"] : (function () { throw new RuntimeError('Variable "footerArticles" does not exist.', 636, $this->source); })()))) {
  983. // line 637
  984. yield " <ul>
  985. ";
  986. // line 638
  987. $context['_parent'] = $context;
  988. $context['_seq'] = CoreExtension::ensureTraversable((isset($context["footerArticles"]) || array_key_exists("footerArticles", $context) ? $context["footerArticles"] : (function () { throw new RuntimeError('Variable "footerArticles" does not exist.', 638, $this->source); })()));
  989. foreach ($context['_seq'] as $context["_key"] => $context["article"]) {
  990. // line 639
  991. yield " <li>
  992. <a href=\"";
  993. // line 640
  994. if ((($tmp = (isset($context["_isFr"]) || array_key_exists("_isFr", $context) ? $context["_isFr"] : (function () { throw new RuntimeError('Variable "_isFr" does not exist.', 640, $this->source); })())) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
  995. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("locale_cvs_website_article", ["_locale" => (isset($context["_locale"]) || array_key_exists("_locale", $context) ? $context["_locale"] : (function () { throw new RuntimeError('Variable "_locale" does not exist.', 640, $this->source); })()), "slug" => CoreExtension::getAttribute($this->env, $this->source, $context["article"], "slug", [], "any", false, false, false, 640)]), "html", null, true);
  996. } else {
  997. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("cvs_website_article", ["slug" => CoreExtension::getAttribute($this->env, $this->source, $context["article"], "slug", [], "any", false, false, false, 640)]), "html", null, true);
  998. }
  999. yield "\"
  1000. title=\"";
  1001. // line 641
  1002. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["article"], "title", [], "any", false, false, false, 641), "html", null, true);
  1003. yield "\">
  1004. ";
  1005. // line 642
  1006. yield (string) (((($tmp = CoreExtension::getAttribute($this->env, $this->source, $context["article"], "shortTitle", [], "any", false, false, false, 642)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) ? ($this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["article"], "shortTitle", [], "any", false, false, false, 642), "html", null, true)) : ($this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['App\Twig\CoreExtension']->cleanSubstr(CoreExtension::getAttribute($this->env, $this->source, $context["article"], "title", [], "any", false, false, false, 642), 45), "html", null, true)));
  1007. yield "
  1008. </a>
  1009. </li>
  1010. ";
  1011. }
  1012. $_parent = $context['_parent'];
  1013. unset($context['_seq'], $context['_key'], $context['article'], $context['_parent']);
  1014. $context = array_intersect_key($context, $_parent);
  1015. $context += $_parent;
  1016. // line 646
  1017. yield " </ul>
  1018. ";
  1019. } else {
  1020. // line 648
  1021. yield " <p class=\"whr-foot-empty\">";
  1022. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(Twig\Extension\CoreExtension::default($this->extensions['Symfony\Bridge\Twig\Extension\TranslationExtension']->trans("layout.footer.coming_soon", [], "whr-public"), "Bientôt disponible"), "html", null, true);
  1023. yield "</p>
  1024. ";
  1025. }
  1026. // line 650
  1027. yield " </div>
  1028. ";
  1029. // line 653
  1030. yield " <div class=\"whr-foot-col\">
  1031. <h4>";
  1032. // line 654
  1033. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(Twig\Extension\CoreExtension::default($this->extensions['Symfony\Bridge\Twig\Extension\TranslationExtension']->trans("layout.footer.jobs_by_city", [], "whr-public"), "Emplois par ville"), "html", null, true);
  1034. yield "</h4>
  1035. ";
  1036. // line 655
  1037. if ( !Twig\Extension\CoreExtension::testEmpty((isset($context["footerJobsCities"]) || array_key_exists("footerJobsCities", $context) ? $context["footerJobsCities"] : (function () { throw new RuntimeError('Variable "footerJobsCities" does not exist.', 655, $this->source); })()))) {
  1038. // line 656
  1039. yield " <ul>
  1040. ";
  1041. // line 657
  1042. $context['_parent'] = $context;
  1043. $context['_seq'] = CoreExtension::ensureTraversable((isset($context["footerJobsCities"]) || array_key_exists("footerJobsCities", $context) ? $context["footerJobsCities"] : (function () { throw new RuntimeError('Variable "footerJobsCities" does not exist.', 657, $this->source); })()));
  1044. foreach ($context['_seq'] as $context["_key"] => $context["city"]) {
  1045. // line 658
  1046. yield " <li>
  1047. <a class=\"whr-city-link\"
  1048. href=\"";
  1049. // line 660
  1050. if ((($tmp = (isset($context["_isFr"]) || array_key_exists("_isFr", $context) ? $context["_isFr"] : (function () { throw new RuntimeError('Variable "_isFr" does not exist.', 660, $this->source); })())) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
  1051. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("locale_cvs_application_jobs_filter", ["_locale" => (isset($context["_locale"]) || array_key_exists("_locale", $context) ? $context["_locale"] : (function () { throw new RuntimeError('Variable "_locale" does not exist.', 660, $this->source); })()), "slug" => CoreExtension::getAttribute($this->env, $this->source, $context["city"], "slug", [], "any", false, false, false, 660)]), "html", null, true);
  1052. } else {
  1053. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("cvs_application_jobs_filter", ["slug" => CoreExtension::getAttribute($this->env, $this->source, $context["city"], "slug", [], "any", false, false, false, 660)]), "html", null, true);
  1054. }
  1055. yield "\"
  1056. title=\"";
  1057. // line 661
  1058. yield (string) (((($tmp = CoreExtension::getAttribute($this->env, $this->source, $context["city"], "shortTitle", [], "any", false, false, false, 661)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) ? ($this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["city"], "shortTitle", [], "any", false, false, false, 661), "html", null, true)) : ($this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["city"], "label", [], "any", false, false, false, 661), "html", null, true)));
  1059. yield "\">
  1060. ";
  1061. // line 662
  1062. if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, $context["city"], "icon", [], "any", false, false, false, 662)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
  1063. // line 663
  1064. yield " <span class=\"whr-city-icon\">";
  1065. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["city"], "icon", [], "any", false, false, false, 663), "html", null, true);
  1066. yield "</span>
  1067. ";
  1068. } else {
  1069. // line 665
  1070. yield " <i class=\"feather-map-pin whr-city-icon\"></i>
  1071. ";
  1072. }
  1073. // line 667
  1074. yield " <span>";
  1075. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["city"], "label", [], "any", false, false, false, 667), "html", null, true);
  1076. yield "</span>
  1077. </a>
  1078. </li>
  1079. ";
  1080. }
  1081. $_parent = $context['_parent'];
  1082. unset($context['_seq'], $context['_key'], $context['city'], $context['_parent']);
  1083. $context = array_intersect_key($context, $_parent);
  1084. $context += $_parent;
  1085. // line 671
  1086. yield " </ul>
  1087. ";
  1088. } else {
  1089. // line 673
  1090. yield " <p class=\"whr-foot-empty\">";
  1091. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(Twig\Extension\CoreExtension::default($this->extensions['Symfony\Bridge\Twig\Extension\TranslationExtension']->trans("layout.footer.coming_soon", [], "whr-public"), "Bientôt disponible"), "html", null, true);
  1092. yield "</p>
  1093. ";
  1094. }
  1095. // line 675
  1096. yield " </div>
  1097. ";
  1098. // line 678
  1099. yield " <div class=\"whr-foot-col\">
  1100. <h4>";
  1101. // line 679
  1102. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(Twig\Extension\CoreExtension::default($this->extensions['Symfony\Bridge\Twig\Extension\TranslationExtension']->trans("layout.footer.companies_by_city", [], "whr-public"), "Entreprises par ville"), "html", null, true);
  1103. yield "</h4>
  1104. ";
  1105. // line 680
  1106. if ( !Twig\Extension\CoreExtension::testEmpty((isset($context["footerEnterprisesCities"]) || array_key_exists("footerEnterprisesCities", $context) ? $context["footerEnterprisesCities"] : (function () { throw new RuntimeError('Variable "footerEnterprisesCities" does not exist.', 680, $this->source); })()))) {
  1107. // line 681
  1108. yield " <ul>
  1109. ";
  1110. // line 682
  1111. $context['_parent'] = $context;
  1112. $context['_seq'] = CoreExtension::ensureTraversable((isset($context["footerEnterprisesCities"]) || array_key_exists("footerEnterprisesCities", $context) ? $context["footerEnterprisesCities"] : (function () { throw new RuntimeError('Variable "footerEnterprisesCities" does not exist.', 682, $this->source); })()));
  1113. foreach ($context['_seq'] as $context["_key"] => $context["city"]) {
  1114. // line 683
  1115. yield " <li>
  1116. <a class=\"whr-city-link\"
  1117. href=\"";
  1118. // line 685
  1119. if ((($tmp = (isset($context["_isFr"]) || array_key_exists("_isFr", $context) ? $context["_isFr"] : (function () { throw new RuntimeError('Variable "_isFr" does not exist.', 685, $this->source); })())) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
  1120. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("locale_cvs_application_companies_filter", ["_locale" => (isset($context["_locale"]) || array_key_exists("_locale", $context) ? $context["_locale"] : (function () { throw new RuntimeError('Variable "_locale" does not exist.', 685, $this->source); })()), "slug" => CoreExtension::getAttribute($this->env, $this->source, $context["city"], "slug", [], "any", false, false, false, 685)]), "html", null, true);
  1121. } else {
  1122. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("cvs_application_companies_filter", ["slug" => CoreExtension::getAttribute($this->env, $this->source, $context["city"], "slug", [], "any", false, false, false, 685)]), "html", null, true);
  1123. }
  1124. yield "\"
  1125. title=\"";
  1126. // line 686
  1127. yield (string) (((($tmp = CoreExtension::getAttribute($this->env, $this->source, $context["city"], "shortTitle", [], "any", false, false, false, 686)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) ? ($this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["city"], "shortTitle", [], "any", false, false, false, 686), "html", null, true)) : ($this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["city"], "label", [], "any", false, false, false, 686), "html", null, true)));
  1128. yield "\">
  1129. ";
  1130. // line 687
  1131. if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, $context["city"], "icon", [], "any", false, false, false, 687)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
  1132. // line 688
  1133. yield " <span class=\"whr-city-icon\">";
  1134. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["city"], "icon", [], "any", false, false, false, 688), "html", null, true);
  1135. yield "</span>
  1136. ";
  1137. } else {
  1138. // line 690
  1139. yield " <i class=\"feather-map-pin whr-city-icon\"></i>
  1140. ";
  1141. }
  1142. // line 692
  1143. yield " <span>";
  1144. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["city"], "label", [], "any", false, false, false, 692), "html", null, true);
  1145. yield "</span>
  1146. </a>
  1147. </li>
  1148. ";
  1149. }
  1150. $_parent = $context['_parent'];
  1151. unset($context['_seq'], $context['_key'], $context['city'], $context['_parent']);
  1152. $context = array_intersect_key($context, $_parent);
  1153. $context += $_parent;
  1154. // line 696
  1155. yield " </ul>
  1156. ";
  1157. } else {
  1158. // line 698
  1159. yield " <p class=\"whr-foot-empty\">";
  1160. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(Twig\Extension\CoreExtension::default($this->extensions['Symfony\Bridge\Twig\Extension\TranslationExtension']->trans("layout.footer.coming_soon", [], "whr-public"), "Bientôt disponible"), "html", null, true);
  1161. yield "</p>
  1162. ";
  1163. }
  1164. // line 700
  1165. yield " </div>
  1166. ";
  1167. // line 703
  1168. yield " <div class=\"whr-foot-col\">
  1169. <h4>";
  1170. // line 704
  1171. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(Twig\Extension\CoreExtension::default($this->extensions['Symfony\Bridge\Twig\Extension\TranslationExtension']->trans("layout.footer.featured_pages", [], "whr-public"), "À découvrir"), "html", null, true);
  1172. yield "</h4>
  1173. ";
  1174. // line 705
  1175. if ( !Twig\Extension\CoreExtension::testEmpty((isset($context["footerLandingJobs"]) || array_key_exists("footerLandingJobs", $context) ? $context["footerLandingJobs"] : (function () { throw new RuntimeError('Variable "footerLandingJobs" does not exist.', 705, $this->source); })()))) {
  1176. // line 706
  1177. yield " <ul>
  1178. ";
  1179. // line 707
  1180. $context['_parent'] = $context;
  1181. $context['_seq'] = CoreExtension::ensureTraversable((isset($context["footerLandingJobs"]) || array_key_exists("footerLandingJobs", $context) ? $context["footerLandingJobs"] : (function () { throw new RuntimeError('Variable "footerLandingJobs" does not exist.', 707, $this->source); })()));
  1182. foreach ($context['_seq'] as $context["_key"] => $context["landing"]) {
  1183. // line 708
  1184. yield " <li>
  1185. <a href=\"";
  1186. // line 709
  1187. if ((($tmp = (isset($context["_isFr"]) || array_key_exists("_isFr", $context) ? $context["_isFr"] : (function () { throw new RuntimeError('Variable "_isFr" does not exist.', 709, $this->source); })())) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
  1188. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("locale_whileresume_homepage_landing", ["_locale" => (isset($context["_locale"]) || array_key_exists("_locale", $context) ? $context["_locale"] : (function () { throw new RuntimeError('Variable "_locale" does not exist.', 709, $this->source); })()), "slug" => CoreExtension::getAttribute($this->env, $this->source, $context["landing"], "slug", [], "any", false, false, false, 709)]), "html", null, true);
  1189. } else {
  1190. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("whileresume_homepage_landing", ["slug" => CoreExtension::getAttribute($this->env, $this->source, $context["landing"], "slug", [], "any", false, false, false, 709)]), "html", null, true);
  1191. }
  1192. yield "\">
  1193. ";
  1194. // line 710
  1195. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["landing"], "title", [], "any", false, false, false, 710), "html", null, true);
  1196. yield "
  1197. </a>
  1198. </li>
  1199. ";
  1200. }
  1201. $_parent = $context['_parent'];
  1202. unset($context['_seq'], $context['_key'], $context['landing'], $context['_parent']);
  1203. $context = array_intersect_key($context, $_parent);
  1204. $context += $_parent;
  1205. // line 714
  1206. yield " </ul>
  1207. ";
  1208. }
  1209. // line 716
  1210. yield " </div>
  1211. </div>
  1212. ";
  1213. // line 720
  1214. yield " <div class=\"whr-foot-bottom\">
  1215. <p class=\"whr-foot-copy\">
  1216. ";
  1217. // line 722
  1218. if ((($tmp = (isset($context["favicon"]) || array_key_exists("favicon", $context) ? $context["favicon"] : (function () { throw new RuntimeError('Variable "favicon" does not exist.', 722, $this->source); })())) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
  1219. // line 723
  1220. yield " <img src=\"";
  1221. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape((isset($context["favicon"]) || array_key_exists("favicon", $context) ? $context["favicon"] : (function () { throw new RuntimeError('Variable "favicon" does not exist.', 723, $this->source); })()), "html", null, true);
  1222. yield "\" alt=\"\" class=\"whr-favicon\" />
  1223. ";
  1224. }
  1225. // line 725
  1226. yield " <span>&copy; ";
  1227. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Twig\Extension\CoreExtension']->formatDate("now", "Y"), "html", null, true);
  1228. yield " ";
  1229. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape((isset($context["websitename"]) || array_key_exists("websitename", $context) ? $context["websitename"] : (function () { throw new RuntimeError('Variable "websitename" does not exist.', 725, $this->source); })()), "html", null, true);
  1230. yield ". ";
  1231. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(Twig\Extension\CoreExtension::default($this->extensions['Symfony\Bridge\Twig\Extension\TranslationExtension']->trans("layout.rights_reserved", [], "whr-public"), "Tous droits réservés."), "html", null, true);
  1232. yield "</span>
  1233. </p>
  1234. <div class=\"whr-foot-legal\">
  1235. ";
  1236. // line 729
  1237. $context["menuFooter"] = $this->extensions['App\Twig\MenuExtension']->getMenuWebsiteLocaleArray((isset($context["_locale"]) || array_key_exists("_locale", $context) ? $context["_locale"] : (function () { throw new RuntimeError('Variable "_locale" does not exist.', 729, $this->source); })()), "footer", (isset($context["connectUser"]) || array_key_exists("connectUser", $context) ? $context["connectUser"] : (function () { throw new RuntimeError('Variable "connectUser" does not exist.', 729, $this->source); })()));
  1238. // line 730
  1239. yield " ";
  1240. if ( !Twig\Extension\CoreExtension::testEmpty((isset($context["menuFooter"]) || array_key_exists("menuFooter", $context) ? $context["menuFooter"] : (function () { throw new RuntimeError('Variable "menuFooter" does not exist.', 730, $this->source); })()))) {
  1241. // line 731
  1242. yield " ";
  1243. $context['_parent'] = $context;
  1244. $context['_seq'] = CoreExtension::ensureTraversable((isset($context["menuFooter"]) || array_key_exists("menuFooter", $context) ? $context["menuFooter"] : (function () { throw new RuntimeError('Variable "menuFooter" does not exist.', 731, $this->source); })()));
  1245. foreach ($context['_seq'] as $context["_key"] => $context["m"]) {
  1246. // line 732
  1247. yield " <a href=\"";
  1248. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["m"], "link", [], "any", false, false, false, 732), "html", null, true);
  1249. yield "\"
  1250. aria-label=\"";
  1251. // line 733
  1252. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["m"], "title", [], "any", false, false, false, 733), "html", null, true);
  1253. yield "\"
  1254. title=\"";
  1255. // line 734
  1256. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["m"], "title", [], "any", false, false, false, 734), "html", null, true);
  1257. yield "\"
  1258. ";
  1259. // line 735
  1260. if ((CoreExtension::getAttribute($this->env, $this->source, $context["m"], "targetBlank", [], "any", false, false, false, 735) == 1)) {
  1261. yield "target=\"_blank\" rel=\"noreferrer\"";
  1262. }
  1263. yield ">
  1264. ";
  1265. // line 736
  1266. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["m"], "title", [], "any", false, false, false, 736), "html", null, true);
  1267. yield "
  1268. </a>
  1269. ";
  1270. }
  1271. $_parent = $context['_parent'];
  1272. unset($context['_seq'], $context['_key'], $context['m'], $context['_parent']);
  1273. $context = array_intersect_key($context, $_parent);
  1274. $context += $_parent;
  1275. // line 739
  1276. yield " ";
  1277. }
  1278. // line 740
  1279. yield " ";
  1280. 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.', 740, $this->source); })()), "user", [], "any", false, false, false, 740)) && (($tmp = $this->extensions['Symfony\Bridge\Twig\Extension\SecurityExtension']->isGranted("ROLE_SUPER_ADMIN")) && $tmp instanceof Markup ? (string) $tmp : $tmp))) {
  1281. // line 741
  1282. yield " <a href=\"";
  1283. yield (string) $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("backoffice_dashboard");
  1284. yield "\" class=\"whr-admin-link\" title=\"Administration\">
  1285. <i class=\"feather-settings\"></i> Administration
  1286. </a>
  1287. ";
  1288. }
  1289. // line 745
  1290. yield " </div>
  1291. <ul class=\"whr-foot-social\">
  1292. ";
  1293. // line 748
  1294. if ((($tmp = (isset($context["facebook"]) || array_key_exists("facebook", $context) ? $context["facebook"] : (function () { throw new RuntimeError('Variable "facebook" does not exist.', 748, $this->source); })())) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
  1295. // line 749
  1296. yield " <li><a href=\"";
  1297. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape((isset($context["facebook"]) || array_key_exists("facebook", $context) ? $context["facebook"] : (function () { throw new RuntimeError('Variable "facebook" does not exist.', 749, $this->source); })()), "html", null, true);
  1298. yield "\" target=\"_blank\" rel=\"noopener\" aria-label=\"Facebook\"><i class=\"feather-facebook\"></i></a></li>
  1299. ";
  1300. }
  1301. // line 751
  1302. yield " ";
  1303. if ((($tmp = (isset($context["twitter"]) || array_key_exists("twitter", $context) ? $context["twitter"] : (function () { throw new RuntimeError('Variable "twitter" does not exist.', 751, $this->source); })())) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
  1304. // line 752
  1305. yield " <li><a href=\"";
  1306. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape((isset($context["twitter"]) || array_key_exists("twitter", $context) ? $context["twitter"] : (function () { throw new RuntimeError('Variable "twitter" does not exist.', 752, $this->source); })()), "html", null, true);
  1307. yield "\" target=\"_blank\" rel=\"noopener\" aria-label=\"X / Twitter\"><i class=\"feather-twitter\"></i></a></li>
  1308. ";
  1309. }
  1310. // line 754
  1311. yield " ";
  1312. if ((($tmp = (isset($context["instagram"]) || array_key_exists("instagram", $context) ? $context["instagram"] : (function () { throw new RuntimeError('Variable "instagram" does not exist.', 754, $this->source); })())) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
  1313. // line 755
  1314. yield " <li><a href=\"";
  1315. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape((isset($context["instagram"]) || array_key_exists("instagram", $context) ? $context["instagram"] : (function () { throw new RuntimeError('Variable "instagram" does not exist.', 755, $this->source); })()), "html", null, true);
  1316. yield "\" target=\"_blank\" rel=\"noopener\" aria-label=\"Instagram\"><i class=\"feather-instagram\"></i></a></li>
  1317. ";
  1318. }
  1319. // line 757
  1320. yield " ";
  1321. if ((($tmp = (isset($context["linkedin"]) || array_key_exists("linkedin", $context) ? $context["linkedin"] : (function () { throw new RuntimeError('Variable "linkedin" does not exist.', 757, $this->source); })())) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
  1322. // line 758
  1323. yield " <li><a href=\"";
  1324. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape((isset($context["linkedin"]) || array_key_exists("linkedin", $context) ? $context["linkedin"] : (function () { throw new RuntimeError('Variable "linkedin" does not exist.', 758, $this->source); })()), "html", null, true);
  1325. yield "\" target=\"_blank\" rel=\"noopener\" aria-label=\"LinkedIn\"><i class=\"feather-linkedin\"></i></a></li>
  1326. ";
  1327. }
  1328. // line 760
  1329. yield " ";
  1330. if ((($tmp = (isset($context["youtube"]) || array_key_exists("youtube", $context) ? $context["youtube"] : (function () { throw new RuntimeError('Variable "youtube" does not exist.', 760, $this->source); })())) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
  1331. // line 761
  1332. yield " <li><a href=\"";
  1333. yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape((isset($context["youtube"]) || array_key_exists("youtube", $context) ? $context["youtube"] : (function () { throw new RuntimeError('Variable "youtube" does not exist.', 761, $this->source); })()), "html", null, true);
  1334. yield "\" target=\"_blank\" rel=\"noopener\" aria-label=\"YouTube\"><i class=\"feather-youtube\"></i></a></li>
  1335. ";
  1336. }
  1337. // line 763
  1338. yield " </ul>
  1339. </div>
  1340. </footer>
  1341. ";
  1342. // line 769
  1343. yield "<script>
  1344. (function() {
  1345. \x27use strict\x27;
  1346. function closeAllDropdowns() {
  1347. document.querySelectorAll(\x27.whr-store-wrap.is-open\x27).forEach(function(w) {
  1348. w.classList.remove(\x27is-open\x27);
  1349. var b = w.querySelector(\x27.whr-store-link\x27);
  1350. if (b) b.setAttribute(\x27aria-expanded\x27, \x27false\x27);
  1351. // Reset search à la fermeture
  1352. var input = w.querySelector(\x27.whr-store-search\x27);
  1353. if (input) {
  1354. input.value = \x27\x27;
  1355. applyFilter(w, \x27\x27);
  1356. }
  1357. });
  1358. }
  1359. function applyFilter(wrap, query) {
  1360. query = (query || \x27\x27).trim().toLowerCase();
  1361. var items = wrap.querySelectorAll(\x27.whr-store-country\x27);
  1362. var othersWrap = wrap.querySelector(\x27.whr-store-others\x27);
  1363. var emptyMsg = wrap.querySelector(\x27.whr-store-empty\x27);
  1364. var grid = wrap.querySelector(\x27.whr-store-grid\x27);
  1365. var visibleInOthers = 0;
  1366. items.forEach(function(item) {
  1367. var searchData = item.dataset.search || \x27\x27;
  1368. var matches = query === \x27\x27 || searchData.indexOf(query) !== -1;
  1369. if (matches) {
  1370. item.classList.remove(\x27is-hidden\x27);
  1371. // Compter uniquement les items dans la grille \"others\" (pas le featured)
  1372. if (grid && grid.contains(item)) {
  1373. visibleInOthers++;
  1374. }
  1375. } else {
  1376. item.classList.add(\x27is-hidden\x27);
  1377. }
  1378. });
  1379. // Afficher le message \"aucun résultat\" si rien ne matche dans others
  1380. if (emptyMsg && grid) {
  1381. if (query !== \x27\x27 && visibleInOthers === 0) {
  1382. grid.style.display = \x27none\x27;
  1383. emptyMsg.style.display = \x27block\x27;
  1384. } else {
  1385. grid.style.display = \x27\x27;
  1386. emptyMsg.style.display = \x27none\x27;
  1387. }
  1388. }
  1389. }
  1390. function initWhrStoreDropdowns() {
  1391. var wraps = document.querySelectorAll(\x27.whr-store-wrap\x27);
  1392. if (!wraps.length) return;
  1393. wraps.forEach(function(wrap) {
  1394. var btn = wrap.querySelector(\x27.whr-store-link\x27);
  1395. if (!btn || btn.dataset.whrInit === \x271\x27) return;
  1396. btn.dataset.whrInit = \x271\x27;
  1397. // === Toggle au clic sur le bouton ===
  1398. btn.addEventListener(\x27click\x27, function(e) {
  1399. e.preventDefault();
  1400. e.stopPropagation();
  1401. var isOpen = wrap.classList.contains(\x27is-open\x27);
  1402. closeAllDropdowns();
  1403. if (!isOpen) {
  1404. wrap.classList.add(\x27is-open\x27);
  1405. btn.setAttribute(\x27aria-expanded\x27, \x27true\x27);
  1406. // Auto-focus sur la search à l\x27ouverture (desktop seulement,
  1407. // pour éviter le clavier qui pop sur mobile)
  1408. var input = wrap.querySelector(\x27.whr-store-search\x27);
  1409. if (input && window.innerWidth >= 768) {
  1410. setTimeout(function() { input.focus(); }, 50);
  1411. }
  1412. }
  1413. });
  1414. // === Filtrage live sur la search ===
  1415. var input = wrap.querySelector(\x27.whr-store-search\x27);
  1416. if (input) {
  1417. input.addEventListener(\x27input\x27, function() {
  1418. applyFilter(wrap, this.value);
  1419. });
  1420. // Empêcher la fermeture du dropdown quand on clique dans le champ
  1421. input.addEventListener(\x27click\x27, function(e) {
  1422. e.stopPropagation();
  1423. });
  1424. // Échap dans le champ → vider la recherche d\x27abord, puis fermer
  1425. input.addEventListener(\x27keydown\x27, function(e) {
  1426. if (e.key === \x27Escape\x27) {
  1427. if (this.value !== \x27\x27) {
  1428. this.value = \x27\x27;
  1429. applyFilter(wrap, \x27\x27);
  1430. e.stopPropagation();
  1431. }
  1432. }
  1433. });
  1434. }
  1435. });
  1436. // === Listeners globaux (un seul fois) ===
  1437. if (!document.body.dataset.whrStoreOutsideInit) {
  1438. document.body.dataset.whrStoreOutsideInit = \x271\x27;
  1439. // Click outside → close
  1440. document.addEventListener(\x27click\x27, function(e) {
  1441. if (!e.target.closest(\x27.whr-store-wrap\x27)) {
  1442. closeAllDropdowns();
  1443. }
  1444. });
  1445. // ESC → close
  1446. document.addEventListener(\x27keydown\x27, function(e) {
  1447. if (e.key === \x27Escape\x27) {
  1448. closeAllDropdowns();
  1449. }
  1450. });
  1451. }
  1452. }
  1453. if (document.readyState === \x27loading\x27) {
  1454. document.addEventListener(\x27DOMContentLoaded\x27, initWhrStoreDropdowns);
  1455. } else {
  1456. initWhrStoreDropdowns();
  1457. }
  1458. })();
  1459. </script>
  1460. ";
  1461. $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  1462. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  1463. yield from [];
  1464. }
  1465. /**
  1466. * @codeCoverageIgnore
  1467. */
  1468. public function getTemplateName(): string
  1469. {
  1470. return "application/whileresume/website/components/footer.html.twig";
  1471. }
  1472. /**
  1473. * @codeCoverageIgnore
  1474. */
  1475. public function isTraitable(): bool
  1476. {
  1477. return false;
  1478. }
  1479. /**
  1480. * @codeCoverageIgnore
  1481. */
  1482. public function getDebugInfo(): array
  1483. {
  1484. return array ( 1394 => 769, 1387 => 763, 1381 => 761, 1378 => 760, 1372 => 758, 1369 => 757, 1363 => 755, 1360 => 754, 1354 => 752, 1351 => 751, 1345 => 749, 1343 => 748, 1338 => 745, 1330 => 741, 1327 => 740, 1324 => 739, 1314 => 736, 1308 => 735, 1304 => 734, 1300 => 733, 1295 => 732, 1290 => 731, 1287 => 730, 1285 => 729, 1273 => 725, 1267 => 723, 1265 => 722, 1261 => 720, 1256 => 716, 1252 => 714, 1241 => 710, 1233 => 709, 1230 => 708, 1226 => 707, 1223 => 706, 1221 => 705, 1217 => 704, 1214 => 703, 1210 => 700, 1204 => 698, 1200 => 696, 1188 => 692, 1184 => 690, 1178 => 688, 1176 => 687, 1172 => 686, 1164 => 685, 1160 => 683, 1156 => 682, 1153 => 681, 1151 => 680, 1147 => 679, 1144 => 678, 1140 => 675, 1134 => 673, 1130 => 671, 1118 => 667, 1114 => 665, 1108 => 663, 1106 => 662, 1102 => 661, 1094 => 660, 1090 => 658, 1086 => 657, 1083 => 656, 1081 => 655, 1077 => 654, 1074 => 653, 1070 => 650, 1064 => 648, 1060 => 646, 1049 => 642, 1045 => 641, 1037 => 640, 1034 => 639, 1030 => 638, 1027 => 637, 1025 => 636, 1021 => 635, 1018 => 634, 1007 => 625, 998 => 619, 992 => 615, 987 => 612, 980 => 608, 976 => 606, 969 => 605, 962 => 602, 956 => 601, 949 => 599, 943 => 597, 940 => 596, 936 => 595, 930 => 592, 926 => 590, 923 => 589, 920 => 587, 916 => 585, 909 => 584, 902 => 581, 896 => 580, 889 => 578, 883 => 576, 880 => 575, 876 => 574, 871 => 572, 867 => 570, 864 => 569, 851 => 568, 848 => 567, 845 => 565, 837 => 560, 832 => 557, 829 => 556, 816 => 555, 813 => 554, 803 => 546, 792 => 537, 790 => 536, 787 => 535, 774 => 534, 761 => 533, 758 => 532, 755 => 530, 750 => 527, 743 => 523, 739 => 521, 732 => 520, 725 => 517, 719 => 516, 712 => 514, 706 => 512, 703 => 511, 699 => 510, 693 => 507, 689 => 505, 686 => 504, 683 => 502, 679 => 500, 672 => 499, 665 => 496, 659 => 495, 652 => 493, 646 => 491, 643 => 490, 639 => 489, 634 => 487, 630 => 485, 627 => 484, 614 => 483, 611 => 482, 608 => 480, 600 => 475, 595 => 472, 592 => 471, 579 => 470, 576 => 469, 566 => 461, 558 => 455, 556 => 454, 553 => 453, 540 => 452, 527 => 451, 524 => 450, 521 => 448, 517 => 445, 511 => 443, 505 => 441, 503 => 440, 500 => 439, 496 => 436, 73 => 14, 71 => 13, 69 => 12, 67 => 11, 64 => 9, 62 => 8, 60 => 7, 58 => 6, 56 => 5, 53 => 3, 51 => 2, 49 => 1,);
  1485. }
  1486. public function getSourceContext(): Source
  1487. {
  1488. return new Source("{% set _locale = app.request.locale %}
  1489. {% set _isFr = _locale == \x27fr\x27 %}
  1490. {# Données dynamiques #}
  1491. {% set footerArticles = getFooterArticles(_locale, 5) %}
  1492. {% set footerLandingJobs = getFooterFeaturedLandingJobs(_locale, 5) %}
  1493. {% set footerJobsCities = getFooterJobsCities(_locale, 6) %}
  1494. {% set footerEnterprisesCities = getFooterEnterprisesCities(_locale, 6) %}
  1495. {# Liens stores : nouvelle source de vérité (table cvs_app_store_links) #}
  1496. {% set _storeData = getAppStoreCountries() %}
  1497. {% set _storePrimary = _storeData.primary|default({}) %}
  1498. {% set _storeOthers = _storeData.others|default({}) %}
  1499. <style>
  1500. /* ---------- Footer WhileResume ---------- */
  1501. .whr-footer {
  1502. margin-top: 32px;
  1503. padding: 36px 24px 24px;
  1504. background: #F9FAFD;
  1505. border-radius: 16px;
  1506. color: #2c2c46;
  1507. width: auto;
  1508. max-width: none;
  1509. margin-left: 16px;
  1510. margin-right: 16px;
  1511. }
  1512. .theme-dark .whr-footer {
  1513. background: #2a2a3c;
  1514. color: #e9e9ef;
  1515. }
  1516. .middle-sidebar-left .whr-footer {
  1517. width: 100%;
  1518. margin-left: 0;
  1519. margin-right: 0;
  1520. }
  1521. /* Stores en haut de la col 1 */
  1522. .whr-footer .whr-stores {
  1523. display: flex;
  1524. flex-direction: column;
  1525. gap: 8px;
  1526. margin-bottom: 18px;
  1527. position: relative; /* pour le dropdown */
  1528. }
  1529. .whr-footer .whr-store-link {
  1530. display: inline-flex;
  1531. align-items: center;
  1532. gap: 10px;
  1533. padding: 8px 14px;
  1534. background: #111;
  1535. color: #fff !important;
  1536. border-radius: 10px;
  1537. font-size: 12px;
  1538. font-weight: 600;
  1539. text-decoration: none !important;
  1540. line-height: 1.2;
  1541. transition: transform .15s ease, background .2s ease;
  1542. max-width: 200px;
  1543. cursor: pointer;
  1544. border: none;
  1545. font-family: inherit;
  1546. text-align: left;
  1547. }
  1548. .whr-footer .whr-store-link:hover {
  1549. background: #2c2c46;
  1550. transform: translateY(-1px);
  1551. }
  1552. .whr-footer .whr-store-link small {
  1553. display: block;
  1554. font-weight: 400;
  1555. font-size: 10px;
  1556. opacity: .7;
  1557. }
  1558. .whr-footer .whr-store-link strong { font-size: 13px; display: block; }
  1559. /* Wrapper du bouton + dropdown (version EN) */
  1560. .whr-store-wrap {
  1561. position: relative;
  1562. display: inline-block;
  1563. }
  1564. .whr-store-wrap .whr-store-link {
  1565. width: 100%;
  1566. max-width: 200px;
  1567. }
  1568. /* === Dropdown élargi (2 colonnes + search + featured pinné) === */
  1569. .whr-store-dropdown {
  1570. position: absolute;
  1571. bottom: calc(100% + 6px);
  1572. left: 0;
  1573. width: 380px;
  1574. max-width: calc(100vw - 32px);
  1575. background: #fff;
  1576. border-radius: 12px;
  1577. box-shadow: 0 -8px 24px rgba(0,0,0,.15), 0 -2px 6px rgba(0,0,0,.08);
  1578. z-index: 1000;
  1579. display: none;
  1580. overflow: hidden;
  1581. }
  1582. .theme-dark .whr-store-dropdown {
  1583. background: #34344a;
  1584. box-shadow: 0 -8px 24px rgba(0,0,0,.4), 0 -2px 6px rgba(0,0,0,.2);
  1585. }
  1586. .whr-store-wrap.is-open .whr-store-dropdown {
  1587. display: flex;
  1588. flex-direction: column;
  1589. animation: whrFadeInUp .15s ease;
  1590. }
  1591. @keyframes whrFadeInUp {
  1592. from { opacity: 0; transform: translateY(4px); }
  1593. to { opacity: 1; transform: translateY(0); }
  1594. }
  1595. /* Chevron */
  1596. .whr-store-link .whr-store-chevron {
  1597. margin-left: auto;
  1598. font-size: 10px;
  1599. opacity: .7;
  1600. transition: transform .2s ease;
  1601. }
  1602. .whr-store-wrap.is-open .whr-store-link .whr-store-chevron {
  1603. transform: rotate(180deg);
  1604. }
  1605. /* Zone search en haut */
  1606. .whr-store-search-wrap {
  1607. padding: 10px 10px 6px;
  1608. border-bottom: 1px solid rgba(0,0,0,.06);
  1609. flex-shrink: 0;
  1610. }
  1611. .theme-dark .whr-store-search-wrap { border-bottom-color: rgba(255,255,255,.08); }
  1612. .whr-store-search {
  1613. width: 100%;
  1614. height: 34px;
  1615. padding: 0 12px 0 32px;
  1616. border: 1px solid rgba(0,0,0,.1);
  1617. border-radius: 8px;
  1618. background: #f5f5f8 url(\"data:image/svg+xml;utf8,<svg xmlns=\x27http://www.w3.org/2000/svg\x27 width=\x2714\x27 height=\x2714\x27 viewBox=\x270 0 24 24\x27 fill=\x27none\x27 stroke=\x27%23888\x27 stroke-width=\x272\x27 stroke-linecap=\x27round\x27 stroke-linejoin=\x27round\x27><circle cx=\x2711\x27 cy=\x2711\x27 r=\x278\x27/><line x1=\x2721\x27 y1=\x2721\x27 x2=\x2716.65\x27 y2=\x2716.65\x27/></svg>\") no-repeat 10px center;
  1619. font-size: 13px;
  1620. color: #2c2c46;
  1621. outline: none;
  1622. transition: border-color .15s ease, background-color .15s ease;
  1623. font-family: inherit;
  1624. }
  1625. .whr-store-search:focus {
  1626. border-color: var(--theme-color, #6C3AED);
  1627. background-color: #fff;
  1628. }
  1629. .theme-dark .whr-store-search {
  1630. background-color: #2a2a3c;
  1631. border-color: rgba(255,255,255,.1);
  1632. color: #e9e9ef;
  1633. }
  1634. .theme-dark .whr-store-search:focus { background-color: #3c3c52; }
  1635. .whr-store-search::placeholder { color: #999; }
  1636. /* Featured pinné (toujours visible, hors scroll) */
  1637. .whr-store-featured {
  1638. padding: 8px 8px 4px;
  1639. flex-shrink: 0;
  1640. border-bottom: 1px solid rgba(0,0,0,.06);
  1641. }
  1642. .theme-dark .whr-store-featured { border-bottom-color: rgba(255,255,255,.08); }
  1643. /* Zone scrollable des \"other regions\" */
  1644. .whr-store-others {
  1645. padding: 8px;
  1646. max-height: 280px;
  1647. overflow-y: auto;
  1648. flex: 1;
  1649. }
  1650. .whr-store-others::-webkit-scrollbar { width: 6px; }
  1651. .whr-store-others::-webkit-scrollbar-thumb { background: rgba(0,0,0,.15); border-radius: 3px; }
  1652. .theme-dark .whr-store-others::-webkit-scrollbar-thumb { background: rgba(255,255,255,.15); }
  1653. /* Header de section */
  1654. .whr-store-dropdown-header {
  1655. font-size: 10px;
  1656. font-weight: 700;
  1657. text-transform: uppercase;
  1658. letter-spacing: .5px;
  1659. opacity: .55;
  1660. padding: 4px 8px 6px;
  1661. color: #2c2c46;
  1662. }
  1663. .theme-dark .whr-store-dropdown-header { color: #e9e9ef; }
  1664. /* Grille 2 colonnes pour les pays */
  1665. .whr-store-grid {
  1666. display: grid;
  1667. grid-template-columns: 1fr 1fr;
  1668. gap: 2px;
  1669. }
  1670. /* Item pays */
  1671. .whr-store-country {
  1672. display: flex;
  1673. align-items: center;
  1674. gap: 8px;
  1675. padding: 7px 9px;
  1676. border-radius: 6px;
  1677. text-decoration: none !important;
  1678. color: #2c2c46 !important;
  1679. font-size: 12.5px;
  1680. transition: background .15s ease;
  1681. min-width: 0;
  1682. }
  1683. .theme-dark .whr-store-country { color: #e9e9ef !important; }
  1684. .whr-store-country:hover {
  1685. background: rgba(108, 58, 237, .08);
  1686. color: var(--theme-color, #6C3AED) !important;
  1687. }
  1688. .theme-dark .whr-store-country:hover { background: rgba(108, 58, 237, .2); }
  1689. .whr-store-country .whr-flag {
  1690. font-size: 16px;
  1691. line-height: 1;
  1692. width: 18px;
  1693. text-align: center;
  1694. flex-shrink: 0;
  1695. }
  1696. .whr-store-country .whr-country-name {
  1697. flex: 1;
  1698. font-weight: 500;
  1699. white-space: nowrap;
  1700. overflow: hidden;
  1701. text-overflow: ellipsis;
  1702. min-width: 0;
  1703. }
  1704. /* Featured = pleine largeur, plus mis en avant */
  1705. .whr-store-featured .whr-store-country {
  1706. background: linear-gradient(135deg, rgba(108, 58, 237, .08), rgba(108, 58, 237, .03));
  1707. font-weight: 600;
  1708. padding: 9px 10px;
  1709. }
  1710. .theme-dark .whr-store-featured .whr-store-country {
  1711. background: linear-gradient(135deg, rgba(108, 58, 237, .25), rgba(108, 58, 237, .1));
  1712. }
  1713. /* Message \"aucun résultat\" */
  1714. .whr-store-empty {
  1715. text-align: center;
  1716. padding: 20px 12px;
  1717. font-size: 12px;
  1718. color: #999;
  1719. font-style: italic;
  1720. }
  1721. .theme-dark .whr-store-empty { color: #aaa; }
  1722. /* Item caché par la recherche */
  1723. .whr-store-country.is-hidden { display: none; }
  1724. /* Responsive : sur mobile, 1 colonne et largeur ajustée */
  1725. @media (max-width: 575.98px) {
  1726. .whr-store-dropdown {
  1727. width: calc(100vw - 32px);
  1728. max-width: 360px;
  1729. }
  1730. .whr-store-grid {
  1731. grid-template-columns: 1fr;
  1732. }
  1733. }
  1734. /* Colonnes */
  1735. .whr-footer .whr-foot-col h4 {
  1736. font-size: 13px;
  1737. font-weight: 700;
  1738. margin: 0 0 14px 0;
  1739. color: inherit;
  1740. text-transform: uppercase;
  1741. letter-spacing: .3px;
  1742. }
  1743. .whr-footer .whr-foot-col ul {
  1744. list-style: none;
  1745. padding: 0;
  1746. margin: 0;
  1747. font-size: 13px;
  1748. }
  1749. .whr-footer .whr-foot-col ul li { margin-bottom: 10px; }
  1750. .whr-footer .whr-foot-col a {
  1751. color: inherit;
  1752. opacity: .75;
  1753. text-decoration: none;
  1754. transition: opacity .2s ease, color .2s ease;
  1755. }
  1756. .whr-footer .whr-foot-col a:hover { opacity: 1; color: var(--theme-color, #6C3AED); }
  1757. .whr-footer .whr-foot-empty {
  1758. font-size: 12px;
  1759. opacity: .5;
  1760. font-style: italic;
  1761. }
  1762. .whr-footer .whr-foot-action-links a {
  1763. display: inline-flex;
  1764. align-items: center;
  1765. gap: 8px;
  1766. }
  1767. .whr-footer .whr-foot-action-links a i {
  1768. font-size: 14px;
  1769. opacity: .7;
  1770. width: 16px;
  1771. text-align: center;
  1772. }
  1773. .whr-footer .whr-foot-col .whr-city-link {
  1774. display: inline-flex;
  1775. align-items: center;
  1776. gap: 6px;
  1777. }
  1778. .whr-footer .whr-foot-col .whr-city-link .whr-city-icon {
  1779. font-size: 14px;
  1780. line-height: 1;
  1781. display: inline-block;
  1782. width: 18px;
  1783. text-align: center;
  1784. opacity: .85;
  1785. }
  1786. .whr-footer .whr-foot-grid {
  1787. display: grid;
  1788. gap: 28px;
  1789. grid-template-columns: 1fr;
  1790. }
  1791. @media (min-width: 576px) {
  1792. .whr-footer .whr-foot-grid { grid-template-columns: 1fr 1fr; }
  1793. }
  1794. @media (min-width: 992px) {
  1795. .whr-footer .whr-foot-grid {
  1796. grid-template-columns: repeat(5, 1fr);
  1797. gap: 32px;
  1798. }
  1799. }
  1800. .whr-footer .whr-foot-bottom {
  1801. margin-top: 32px;
  1802. padding-top: 20px;
  1803. border-top: 1px solid rgba(0,0,0,.08);
  1804. display: flex;
  1805. flex-direction: column;
  1806. gap: 14px;
  1807. align-items: center;
  1808. text-align: center;
  1809. }
  1810. .theme-dark .whr-footer .whr-foot-bottom { border-top-color: rgba(255,255,255,.1); }
  1811. @media (min-width: 768px) {
  1812. .whr-footer .whr-foot-bottom {
  1813. flex-direction: row;
  1814. justify-content: space-between;
  1815. text-align: left;
  1816. }
  1817. }
  1818. .whr-footer .whr-foot-copy {
  1819. display: inline-flex;
  1820. align-items: center;
  1821. gap: 8px;
  1822. font-size: 12px;
  1823. opacity: .7;
  1824. margin: 0;
  1825. }
  1826. .whr-footer .whr-foot-copy img.whr-favicon {
  1827. width: 18px;
  1828. height: 18px;
  1829. border-radius: 4px;
  1830. flex-shrink: 0;
  1831. }
  1832. .whr-footer .whr-foot-legal {
  1833. display: flex;
  1834. flex-wrap: wrap;
  1835. gap: 6px 16px;
  1836. justify-content: center;
  1837. font-size: 12px;
  1838. }
  1839. .whr-footer .whr-foot-legal a {
  1840. color: inherit;
  1841. opacity: .75;
  1842. text-decoration: none;
  1843. }
  1844. .whr-footer .whr-foot-legal a:hover { opacity: 1; }
  1845. .whr-footer .whr-foot-legal .whr-admin-link { color: #e74c3c !important; opacity: 1; }
  1846. .whr-footer .whr-foot-social {
  1847. display: flex;
  1848. flex-wrap: wrap;
  1849. gap: 6px;
  1850. list-style: none;
  1851. padding: 0;
  1852. margin: 0;
  1853. }
  1854. .whr-footer .whr-foot-social a {
  1855. width: 32px; height: 32px;
  1856. border-radius: 8px;
  1857. background: #fff;
  1858. display: inline-flex;
  1859. align-items: center;
  1860. justify-content: center;
  1861. color: #2c2c46;
  1862. text-decoration: none !important;
  1863. transition: background .2s ease, color .2s ease, transform .15s ease;
  1864. box-shadow: 0 1px 2px rgba(0,0,0,.04);
  1865. }
  1866. .whr-footer .whr-foot-social a:hover {
  1867. background: var(--theme-color, #6C3AED);
  1868. color: #fff;
  1869. transform: translateY(-1px);
  1870. }
  1871. .theme-dark .whr-footer .whr-foot-social a {
  1872. background: #34344a;
  1873. color: #fff;
  1874. box-shadow: none;
  1875. }
  1876. .whr-footer .whr-foot-social i { font-size: 14px; }
  1877. @media (max-width: 575.98px) {
  1878. .whr-footer {
  1879. padding: 24px 18px 20px;
  1880. margin-left: 8px;
  1881. margin-right: 8px;
  1882. }
  1883. .whr-store-dropdown {
  1884. min-width: 220px;
  1885. max-width: 90vw;
  1886. }
  1887. }
  1888. </style>
  1889. <footer class=\"whr-footer\" role=\"contentinfo\">
  1890. {# === Grille principale 5 colonnes === #}
  1891. <div class=\"whr-foot-grid\">
  1892. {# ===== Col 1 : Mon compte / Commencer ici ===== #}
  1893. <div class=\"whr-foot-col whr-foot-col-action\">
  1894. {% if connectUser %}
  1895. <h4>{{ \x27layout.footer.my_account\x27|trans({}, \x27whr-public\x27)|default(\x27Mon compte\x27) }}</h4>
  1896. {% else %}
  1897. <h4>{{ \x27layout.footer.start_here\x27|trans({}, \x27whr-public\x27)|default(\x27Commencer ici\x27) }}</h4>
  1898. {% endif %}
  1899. <div class=\"whr-stores\">
  1900. {# === Dropdown unifié (FR & EN) — la version FR aura FR en featured, la EN aura US === #}
  1901. {# -- Bouton App Store + dropdown -- #}
  1902. {% set _hasIos = false %}
  1903. {% for c in _storePrimary %}{% if c.ios %}{% set _hasIos = true %}{% endif %}{% endfor %}
  1904. {% for c in _storeOthers %}{% if c.ios %}{% set _hasIos = true %}{% endif %}{% endfor %}
  1905. {% if _hasIos %}
  1906. <div class=\"whr-store-wrap\" data-whr-store=\"ios\">
  1907. <button type=\"button\" class=\"whr-store-link\" aria-haspopup=\"true\" aria-expanded=\"false\" aria-label=\"App Store - Choose your country\">
  1908. <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"#fff\" aria-hidden=\"true\">
  1909. <path d=\"M18.71 19.5C17.88 20.74 17 21.95 15.66 21.97C14.32 22 13.89 21.18 12.37 21.18C10.84 21.18 10.37 21.95 9.09997 22C7.78997 22.05 6.79997 20.68 5.95997 19.47C4.24997 17 2.93997 12.45 4.69997 9.39C5.56997 7.87 7.12997 6.91 8.81997 6.88C10.1 6.86 11.32 7.75 12.11 7.75C12.89 7.75 14.37 6.68 15.92 6.84C16.57 6.87 18.39 7.1 19.56 8.82C19.47 8.88 17.39 10.1 17.41 12.63C17.44 15.65 20.06 16.66 20.09 16.67C20.06 16.74 19.67 18.11 18.71 19.5ZM13 3.5C13.73 2.67 14.94 2.04 15.94 2C16.07 3.17 15.6 4.35 14.9 5.19C14.21 6.04 13.07 6.7 11.95 6.61C11.8 5.46 12.36 4.26 13 3.5Z\"/>
  1910. </svg>
  1911. <span>
  1912. <small>{{ \x27layout.download_on\x27|trans({}, \x27whr-public\x27)|default(\x27Download on\x27) }}</small>
  1913. <strong>App Store</strong>
  1914. </span>
  1915. <span class=\"whr-store-chevron\" aria-hidden=\"true\">▲</span>
  1916. </button>
  1917. <div class=\"whr-store-dropdown\" role=\"menu\">
  1918. {# Search bar (n\x27apparaît que si > 20 pays \"others\") #}
  1919. {% set _iosOthersCount = 0 %}
  1920. {% for c in _storeOthers %}{% if c.ios %}{% set _iosOthersCount = _iosOthersCount + 1 %}{% endif %}{% endfor %}
  1921. {% if _iosOthersCount > 20 %}
  1922. <div class=\"whr-store-search-wrap\">
  1923. <input type=\"text\"
  1924. class=\"whr-store-search\"
  1925. placeholder=\"{{ \x27layout.search_country\x27|trans({}, \x27whr-public\x27)|default(\x27Search country...\x27) }}\"
  1926. aria-label=\"Search country\"
  1927. autocomplete=\"off\">
  1928. </div>
  1929. {% endif %}
  1930. {# Featured (pinné, pas dans le scroll) #}
  1931. {% set _iosPrimaryCount = 0 %}
  1932. {% for c in _storePrimary %}{% if c.ios %}{% set _iosPrimaryCount = _iosPrimaryCount + 1 %}{% endif %}{% endfor %}
  1933. {% if _iosPrimaryCount > 0 %}
  1934. <div class=\"whr-store-featured\">
  1935. <div class=\"whr-store-dropdown-header\">
  1936. {{ \x27layout.featured\x27|trans({}, \x27whr-public\x27)|default(\x27Featured\x27) }}
  1937. </div>
  1938. {% for code, country in _storePrimary %}
  1939. {% if country.ios %}
  1940. <a href=\"{{ country.ios }}\"
  1941. class=\"whr-store-country\"
  1942. data-search=\"{{ country.label|lower }} {{ code|lower }}\"
  1943. target=\"_blank\" rel=\"noopener\" role=\"menuitem\">
  1944. {% if country.flag %}<span class=\"whr-flag\">{{ country.flag }}</span>{% endif %}
  1945. <span class=\"whr-country-name\">{{ country.label }}</span>
  1946. </a>
  1947. {% endif %}
  1948. {% endfor %}
  1949. </div>
  1950. {% endif %}
  1951. {# Other regions (grille 2 colonnes, scrollable) #}
  1952. {% if _storeOthers is not empty %}
  1953. <div class=\"whr-store-others\">
  1954. <div class=\"whr-store-dropdown-header\">
  1955. {{ \x27layout.other_regions\x27|trans({}, \x27whr-public\x27)|default(\x27Other regions\x27) }}
  1956. </div>
  1957. <div class=\"whr-store-grid\">
  1958. {% for code, country in _storeOthers %}
  1959. {% if country.ios %}
  1960. <a href=\"{{ country.ios }}\"
  1961. class=\"whr-store-country\"
  1962. data-search=\"{{ country.label|lower }} {{ code|lower }}\"
  1963. target=\"_blank\" rel=\"noopener\" role=\"menuitem\">
  1964. {% if country.flag %}<span class=\"whr-flag\">{{ country.flag }}</span>{% endif %}
  1965. <span class=\"whr-country-name\">{{ country.label }}</span>
  1966. </a>
  1967. {% endif %}
  1968. {% endfor %}
  1969. </div>
  1970. <div class=\"whr-store-empty\" style=\"display: none;\">
  1971. {{ \x27layout.no_country_found\x27|trans({}, \x27whr-public\x27)|default(\x27No country found\x27) }}
  1972. </div>
  1973. </div>
  1974. {% endif %}
  1975. </div>
  1976. </div>
  1977. {% endif %}
  1978. {# -- Bouton Google Play + dropdown -- #}
  1979. {% set _hasAndroid = false %}
  1980. {% for c in _storePrimary %}{% if c.android %}{% set _hasAndroid = true %}{% endif %}{% endfor %}
  1981. {% for c in _storeOthers %}{% if c.android %}{% set _hasAndroid = true %}{% endif %}{% endfor %}
  1982. {% if _hasAndroid %}
  1983. <div class=\"whr-store-wrap\" data-whr-store=\"android\">
  1984. <button type=\"button\" class=\"whr-store-link\" aria-haspopup=\"true\" aria-expanded=\"false\" aria-label=\"Google Play - Choose your country\">
  1985. <svg width=\"18\" height=\"18\" viewBox=\"0 0 512 512\" aria-hidden=\"true\">
  1986. <path style=\"fill:#3A9BC8;\" d=\"M225.656,256.052L14.016,485.451l-6.442,7.052c-4.005-5.919-6.704-12.972-7.313-20.806C0.087,470.305,0,468.91,0,467.518V44.499c0-9.488,2.873-18.02,7.574-24.987L225.656,256.052z\"/>
  1987. <path style=\"fill:#9BCD83;\" d=\"M320.811,152.8l-95.155,103.253L7.574,19.512C19.936,1.405,45.183-6.342,66.6,6.02L320.811,152.8z\"/>
  1988. <path style=\"fill:#EEB84C;\" d=\"M455.056,257.27c-0.348,14.453-7.748,28.904-22.113,37.174l-112.132,64.771l-95.155-103.163L320.811,152.8l70.518,40.745l41.614,24.026C448.178,226.366,455.579,241.861,455.056,257.27z\"/>
  1989. <path style=\"fill:#B43F70;\" d=\"M7.591,492.492c12.368,18.116,37.599,25.838,58.976,13.496L320.775,359.22l-95.156-103.209L7.591,492.492z\"/>
  1990. </svg>
  1991. <span>
  1992. <small>{{ \x27layout.available_on\x27|trans({}, \x27whr-public\x27)|default(\x27Available on\x27) }}</small>
  1993. <strong>Google Play</strong>
  1994. </span>
  1995. <span class=\"whr-store-chevron\" aria-hidden=\"true\">▲</span>
  1996. </button>
  1997. <div class=\"whr-store-dropdown\" role=\"menu\">
  1998. {# Search bar (n\x27apparaît que si > 20 pays \"others\") #}
  1999. {% set _androidOthersCount = 0 %}
  2000. {% for c in _storeOthers %}{% if c.android %}{% set _androidOthersCount = _androidOthersCount + 1 %}{% endif %}{% endfor %}
  2001. {% if _androidOthersCount > 20 %}
  2002. <div class=\"whr-store-search-wrap\">
  2003. <input type=\"text\"
  2004. class=\"whr-store-search\"
  2005. placeholder=\"{{ \x27layout.search_country\x27|trans({}, \x27whr-public\x27)|default(\x27Search country...\x27) }}\"
  2006. aria-label=\"Search country\"
  2007. autocomplete=\"off\">
  2008. </div>
  2009. {% endif %}
  2010. {# Featured (pinné) #}
  2011. {% set _androidPrimaryCount = 0 %}
  2012. {% for c in _storePrimary %}{% if c.android %}{% set _androidPrimaryCount = _androidPrimaryCount + 1 %}{% endif %}{% endfor %}
  2013. {% if _androidPrimaryCount > 0 %}
  2014. <div class=\"whr-store-featured\">
  2015. <div class=\"whr-store-dropdown-header\">
  2016. {{ \x27layout.featured\x27|trans({}, \x27whr-public\x27)|default(\x27Featured\x27) }}
  2017. </div>
  2018. {% for code, country in _storePrimary %}
  2019. {% if country.android %}
  2020. <a href=\"{{ country.android }}\"
  2021. class=\"whr-store-country\"
  2022. data-search=\"{{ country.label|lower }} {{ code|lower }}\"
  2023. target=\"_blank\" rel=\"noopener\" role=\"menuitem\">
  2024. {% if country.flag %}<span class=\"whr-flag\">{{ country.flag }}</span>{% endif %}
  2025. <span class=\"whr-country-name\">{{ country.label }}</span>
  2026. </a>
  2027. {% endif %}
  2028. {% endfor %}
  2029. </div>
  2030. {% endif %}
  2031. {# Other regions (grille 2 colonnes) #}
  2032. {% if _storeOthers is not empty %}
  2033. <div class=\"whr-store-others\">
  2034. <div class=\"whr-store-dropdown-header\">
  2035. {{ \x27layout.other_regions\x27|trans({}, \x27whr-public\x27)|default(\x27Other regions\x27) }}
  2036. </div>
  2037. <div class=\"whr-store-grid\">
  2038. {% for code, country in _storeOthers %}
  2039. {% if country.android %}
  2040. <a href=\"{{ country.android }}\"
  2041. class=\"whr-store-country\"
  2042. data-search=\"{{ country.label|lower }} {{ code|lower }}\"
  2043. target=\"_blank\" rel=\"noopener\" role=\"menuitem\">
  2044. {% if country.flag %}<span class=\"whr-flag\">{{ country.flag }}</span>{% endif %}
  2045. <span class=\"whr-country-name\">{{ country.label }}</span>
  2046. </a>
  2047. {% endif %}
  2048. {% endfor %}
  2049. </div>
  2050. <div class=\"whr-store-empty\" style=\"display: none;\">
  2051. {{ \x27layout.no_country_found\x27|trans({}, \x27whr-public\x27)|default(\x27No country found\x27) }}
  2052. </div>
  2053. </div>
  2054. {% endif %}
  2055. </div>
  2056. </div>
  2057. {% endif %}
  2058. </div>
  2059. <ul class=\"whr-foot-action-links\">
  2060. <li>
  2061. <a href=\"{{ path(\x27whileresume_homepage\x27) }}\">
  2062. <i class=\"feather-flag\"></i>
  2063. English
  2064. </a>
  2065. </li>
  2066. <li>
  2067. <a href=\"{{ path(\x27locale_whileresume_homepage\x27,{\x27_locale\x27:\x27fr\x27}) }}\">
  2068. <i class=\"feather-flag\"></i>
  2069. Français
  2070. </a>
  2071. </li>
  2072. </ul>
  2073. </div>
  2074. {# ===== Col 2 : Articles récents (featured) ===== #}
  2075. <div class=\"whr-foot-col\">
  2076. <h4>{{ \x27layout.footer.latest_articles\x27|trans({}, \x27whr-public\x27)|default(\x27Articles récents\x27) }}</h4>
  2077. {% if footerArticles is not empty %}
  2078. <ul>
  2079. {% for article in footerArticles %}
  2080. <li>
  2081. <a href=\"{% if _isFr %}{{ path(\x27locale_cvs_website_article\x27, {\x27_locale\x27: _locale, \x27slug\x27: article.slug}) }}{% else %}{{ path(\x27cvs_website_article\x27, {\x27slug\x27: article.slug}) }}{% endif %}\"
  2082. title=\"{{ article.title }}\">
  2083. {{ article.shortTitle ?: cleanSubstr(article.title, 45) }}
  2084. </a>
  2085. </li>
  2086. {% endfor %}
  2087. </ul>
  2088. {% else %}
  2089. <p class=\"whr-foot-empty\">{{ \x27layout.footer.coming_soon\x27|trans({}, \x27whr-public\x27)|default(\x27Bientôt disponible\x27) }}</p>
  2090. {% endif %}
  2091. </div>
  2092. {# ===== Col 3 : Emplois par ville ===== #}
  2093. <div class=\"whr-foot-col\">
  2094. <h4>{{ \x27layout.footer.jobs_by_city\x27|trans({}, \x27whr-public\x27)|default(\x27Emplois par ville\x27) }}</h4>
  2095. {% if footerJobsCities is not empty %}
  2096. <ul>
  2097. {% for city in footerJobsCities %}
  2098. <li>
  2099. <a class=\"whr-city-link\"
  2100. href=\"{% if _isFr %}{{ path(\x27locale_cvs_application_jobs_filter\x27, {\x27_locale\x27: _locale, \x27slug\x27: city.slug}) }}{% else %}{{ path(\x27cvs_application_jobs_filter\x27, {\x27slug\x27: city.slug}) }}{% endif %}\"
  2101. title=\"{{ city.shortTitle ?: city.label }}\">
  2102. {% if city.icon %}
  2103. <span class=\"whr-city-icon\">{{ city.icon }}</span>
  2104. {% else %}
  2105. <i class=\"feather-map-pin whr-city-icon\"></i>
  2106. {% endif %}
  2107. <span>{{ city.label }}</span>
  2108. </a>
  2109. </li>
  2110. {% endfor %}
  2111. </ul>
  2112. {% else %}
  2113. <p class=\"whr-foot-empty\">{{ \x27layout.footer.coming_soon\x27|trans({}, \x27whr-public\x27)|default(\x27Bientôt disponible\x27) }}</p>
  2114. {% endif %}
  2115. </div>
  2116. {# ===== Col 4 : Entreprises par ville ===== #}
  2117. <div class=\"whr-foot-col\">
  2118. <h4>{{ \x27layout.footer.companies_by_city\x27|trans({}, \x27whr-public\x27)|default(\x27Entreprises par ville\x27) }}</h4>
  2119. {% if footerEnterprisesCities is not empty %}
  2120. <ul>
  2121. {% for city in footerEnterprisesCities %}
  2122. <li>
  2123. <a class=\"whr-city-link\"
  2124. href=\"{% if _isFr %}{{ path(\x27locale_cvs_application_companies_filter\x27, {\x27_locale\x27: _locale, \x27slug\x27: city.slug}) }}{% else %}{{ path(\x27cvs_application_companies_filter\x27, {\x27slug\x27: city.slug}) }}{% endif %}\"
  2125. title=\"{{ city.shortTitle ?: city.label }}\">
  2126. {% if city.icon %}
  2127. <span class=\"whr-city-icon\">{{ city.icon }}</span>
  2128. {% else %}
  2129. <i class=\"feather-map-pin whr-city-icon\"></i>
  2130. {% endif %}
  2131. <span>{{ city.label }}</span>
  2132. </a>
  2133. </li>
  2134. {% endfor %}
  2135. </ul>
  2136. {% else %}
  2137. <p class=\"whr-foot-empty\">{{ \x27layout.footer.coming_soon\x27|trans({}, \x27whr-public\x27)|default(\x27Bientôt disponible\x27) }}</p>
  2138. {% endif %}
  2139. </div>
  2140. {# ===== Col 5 : Pages SEO (LandingJobs featured) ===== #}
  2141. <div class=\"whr-foot-col\">
  2142. <h4>{{ \x27layout.footer.featured_pages\x27|trans({}, \x27whr-public\x27)|default(\x27À découvrir\x27) }}</h4>
  2143. {% if footerLandingJobs is not empty %}
  2144. <ul>
  2145. {% for landing in footerLandingJobs %}
  2146. <li>
  2147. <a href=\"{% if _isFr %}{{ path(\x27locale_whileresume_homepage_landing\x27, {\x27_locale\x27: _locale, \x27slug\x27: landing.slug}) }}{% else %}{{ path(\x27whileresume_homepage_landing\x27, {\x27slug\x27: landing.slug}) }}{% endif %}\">
  2148. {{ landing.title }}
  2149. </a>
  2150. </li>
  2151. {% endfor %}
  2152. </ul>
  2153. {% endif %}
  2154. </div>
  2155. </div>
  2156. {# === Bas du footer === #}
  2157. <div class=\"whr-foot-bottom\">
  2158. <p class=\"whr-foot-copy\">
  2159. {% if favicon %}
  2160. <img src=\"{{ favicon }}\" alt=\"\" class=\"whr-favicon\" />
  2161. {% endif %}
  2162. <span>&copy; {{ \"now\"|date(\x27Y\x27) }} {{ websitename }}. {{ \x27layout.rights_reserved\x27|trans({}, \x27whr-public\x27)|default(\x27Tous droits réservés.\x27) }}</span>
  2163. </p>
  2164. <div class=\"whr-foot-legal\">
  2165. {% set menuFooter = getMenuWebsiteLocaleArray(_locale, \"footer\", connectUser) %}
  2166. {% if menuFooter is not empty %}
  2167. {% for m in menuFooter %}
  2168. <a href=\"{{ m.link }}\"
  2169. aria-label=\"{{ m.title }}\"
  2170. title=\"{{ m.title }}\"
  2171. {% if m.targetBlank == 1 %}target=\"_blank\" rel=\"noreferrer\"{% endif %}>
  2172. {{ m.title }}
  2173. </a>
  2174. {% endfor %}
  2175. {% endif %}
  2176. {% if app.user is not null and is_granted(\"ROLE_SUPER_ADMIN\") %}
  2177. <a href=\"{{ path(\x27backoffice_dashboard\x27) }}\" class=\"whr-admin-link\" title=\"Administration\">
  2178. <i class=\"feather-settings\"></i> Administration
  2179. </a>
  2180. {% endif %}
  2181. </div>
  2182. <ul class=\"whr-foot-social\">
  2183. {% if facebook %}
  2184. <li><a href=\"{{ facebook }}\" target=\"_blank\" rel=\"noopener\" aria-label=\"Facebook\"><i class=\"feather-facebook\"></i></a></li>
  2185. {% endif %}
  2186. {% if twitter %}
  2187. <li><a href=\"{{ twitter }}\" target=\"_blank\" rel=\"noopener\" aria-label=\"X / Twitter\"><i class=\"feather-twitter\"></i></a></li>
  2188. {% endif %}
  2189. {% if instagram %}
  2190. <li><a href=\"{{ instagram }}\" target=\"_blank\" rel=\"noopener\" aria-label=\"Instagram\"><i class=\"feather-instagram\"></i></a></li>
  2191. {% endif %}
  2192. {% if linkedin %}
  2193. <li><a href=\"{{ linkedin }}\" target=\"_blank\" rel=\"noopener\" aria-label=\"LinkedIn\"><i class=\"feather-linkedin\"></i></a></li>
  2194. {% endif %}
  2195. {% if youtube %}
  2196. <li><a href=\"{{ youtube }}\" target=\"_blank\" rel=\"noopener\" aria-label=\"YouTube\"><i class=\"feather-youtube\"></i></a></li>
  2197. {% endif %}
  2198. </ul>
  2199. </div>
  2200. </footer>
  2201. {# ====== JS dropdown stores (vanilla, autonome, pas de dépendance) ====== #}
  2202. <script>
  2203. (function() {
  2204. \x27use strict\x27;
  2205. function closeAllDropdowns() {
  2206. document.querySelectorAll(\x27.whr-store-wrap.is-open\x27).forEach(function(w) {
  2207. w.classList.remove(\x27is-open\x27);
  2208. var b = w.querySelector(\x27.whr-store-link\x27);
  2209. if (b) b.setAttribute(\x27aria-expanded\x27, \x27false\x27);
  2210. // Reset search à la fermeture
  2211. var input = w.querySelector(\x27.whr-store-search\x27);
  2212. if (input) {
  2213. input.value = \x27\x27;
  2214. applyFilter(w, \x27\x27);
  2215. }
  2216. });
  2217. }
  2218. function applyFilter(wrap, query) {
  2219. query = (query || \x27\x27).trim().toLowerCase();
  2220. var items = wrap.querySelectorAll(\x27.whr-store-country\x27);
  2221. var othersWrap = wrap.querySelector(\x27.whr-store-others\x27);
  2222. var emptyMsg = wrap.querySelector(\x27.whr-store-empty\x27);
  2223. var grid = wrap.querySelector(\x27.whr-store-grid\x27);
  2224. var visibleInOthers = 0;
  2225. items.forEach(function(item) {
  2226. var searchData = item.dataset.search || \x27\x27;
  2227. var matches = query === \x27\x27 || searchData.indexOf(query) !== -1;
  2228. if (matches) {
  2229. item.classList.remove(\x27is-hidden\x27);
  2230. // Compter uniquement les items dans la grille \"others\" (pas le featured)
  2231. if (grid && grid.contains(item)) {
  2232. visibleInOthers++;
  2233. }
  2234. } else {
  2235. item.classList.add(\x27is-hidden\x27);
  2236. }
  2237. });
  2238. // Afficher le message \"aucun résultat\" si rien ne matche dans others
  2239. if (emptyMsg && grid) {
  2240. if (query !== \x27\x27 && visibleInOthers === 0) {
  2241. grid.style.display = \x27none\x27;
  2242. emptyMsg.style.display = \x27block\x27;
  2243. } else {
  2244. grid.style.display = \x27\x27;
  2245. emptyMsg.style.display = \x27none\x27;
  2246. }
  2247. }
  2248. }
  2249. function initWhrStoreDropdowns() {
  2250. var wraps = document.querySelectorAll(\x27.whr-store-wrap\x27);
  2251. if (!wraps.length) return;
  2252. wraps.forEach(function(wrap) {
  2253. var btn = wrap.querySelector(\x27.whr-store-link\x27);
  2254. if (!btn || btn.dataset.whrInit === \x271\x27) return;
  2255. btn.dataset.whrInit = \x271\x27;
  2256. // === Toggle au clic sur le bouton ===
  2257. btn.addEventListener(\x27click\x27, function(e) {
  2258. e.preventDefault();
  2259. e.stopPropagation();
  2260. var isOpen = wrap.classList.contains(\x27is-open\x27);
  2261. closeAllDropdowns();
  2262. if (!isOpen) {
  2263. wrap.classList.add(\x27is-open\x27);
  2264. btn.setAttribute(\x27aria-expanded\x27, \x27true\x27);
  2265. // Auto-focus sur la search à l\x27ouverture (desktop seulement,
  2266. // pour éviter le clavier qui pop sur mobile)
  2267. var input = wrap.querySelector(\x27.whr-store-search\x27);
  2268. if (input && window.innerWidth >= 768) {
  2269. setTimeout(function() { input.focus(); }, 50);
  2270. }
  2271. }
  2272. });
  2273. // === Filtrage live sur la search ===
  2274. var input = wrap.querySelector(\x27.whr-store-search\x27);
  2275. if (input) {
  2276. input.addEventListener(\x27input\x27, function() {
  2277. applyFilter(wrap, this.value);
  2278. });
  2279. // Empêcher la fermeture du dropdown quand on clique dans le champ
  2280. input.addEventListener(\x27click\x27, function(e) {
  2281. e.stopPropagation();
  2282. });
  2283. // Échap dans le champ → vider la recherche d\x27abord, puis fermer
  2284. input.addEventListener(\x27keydown\x27, function(e) {
  2285. if (e.key === \x27Escape\x27) {
  2286. if (this.value !== \x27\x27) {
  2287. this.value = \x27\x27;
  2288. applyFilter(wrap, \x27\x27);
  2289. e.stopPropagation();
  2290. }
  2291. }
  2292. });
  2293. }
  2294. });
  2295. // === Listeners globaux (un seul fois) ===
  2296. if (!document.body.dataset.whrStoreOutsideInit) {
  2297. document.body.dataset.whrStoreOutsideInit = \x271\x27;
  2298. // Click outside → close
  2299. document.addEventListener(\x27click\x27, function(e) {
  2300. if (!e.target.closest(\x27.whr-store-wrap\x27)) {
  2301. closeAllDropdowns();
  2302. }
  2303. });
  2304. // ESC → close
  2305. document.addEventListener(\x27keydown\x27, function(e) {
  2306. if (e.key === \x27Escape\x27) {
  2307. closeAllDropdowns();
  2308. }
  2309. });
  2310. }
  2311. }
  2312. if (document.readyState === \x27loading\x27) {
  2313. document.addEventListener(\x27DOMContentLoaded\x27, initWhrStoreDropdowns);
  2314. } else {
  2315. initWhrStoreDropdowns();
  2316. }
  2317. })();
  2318. </script>
  2319. ", "application/whileresume/website/components/footer.html.twig", "/var/www/vhosts/whileresume.com/b.whileresume.app/templates/application/whileresume/website/components/footer.html.twig");
  2320. }
  2321. }