var/cache/dev/twig/9c/9c0865ea86947429ecb405c3804c305a.php line 56

Open in your IDE?
  1. <?php
  2. use Twig\Environment;
  3. use Twig\Error\LoaderError;
  4. use Twig\Error\RuntimeError;
  5. use Twig\Extension\CoreExtension;
  6. use Twig\Extension\SandboxExtension;
  7. use Twig\Markup;
  8. use Twig\Sandbox\SecurityError;
  9. use Twig\Sandbox\SecurityNotAllowedTagError;
  10. use Twig\Sandbox\SecurityNotAllowedFilterError;
  11. use Twig\Sandbox\SecurityNotAllowedFunctionError;
  12. use Twig\Source;
  13. use Twig\Template;
  14. use Twig\TemplateWrapper;
  15. /* home/index.html.twig */
  16. class __TwigTemplate_3fa228d84c2cefb05611b8dc23d1ea4e extends Template
  17. {
  18.     private Source $source;
  19.     /**
  20.      * @var array<string, Template>
  21.      */
  22.     private array $macros = [];
  23.     public function __construct(Environment $env)
  24.     {
  25.         parent::__construct($env);
  26.         $this->source $this->getSourceContext();
  27.         $this->blocks = [
  28.             'title' => [$this'block_title'],
  29.             'stylesheets' => [$this'block_stylesheets'],
  30.             'body' => [$this'block_body'],
  31.             'javascripts' => [$this'block_javascripts'],
  32.         ];
  33.     }
  34.     protected function doGetParent(array $context): bool|string|Template|TemplateWrapper
  35.     {
  36.         // line 1
  37.         return "base_home.html.twig";
  38.     }
  39.     protected function doDisplay(array $context, array $blocks = []): iterable
  40.     {
  41.         $macros $this->macros;
  42.         $__internal_5a27a8ba21ca79b61932376b2fa922d2 $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  43.         $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "template""home/index.html.twig"));
  44.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  45.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "template""home/index.html.twig"));
  46.         $this->parent $this->load("base_home.html.twig"1);
  47.         yield from $this->parent->unwrap()->yield($contextarray_merge($this->blocks$blocks));
  48.         
  49.         $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  50.         
  51.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  52.     }
  53.     // line 3
  54.     /**
  55.      * @return iterable<null|scalar|\Stringable>
  56.      */
  57.     public function block_title(array $context, array $blocks = []): iterable
  58.     {
  59.         $macros $this->macros;
  60.         $__internal_5a27a8ba21ca79b61932376b2fa922d2 $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  61.         $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block""title"));
  62.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  63.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block""title"));
  64.         yield "Accueil | MaketOu - Votre marketplace haïtienne
  65. ";
  66.         
  67.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  68.         
  69.         $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  70.         yield from [];
  71.     }
  72.     // line 6
  73.     /**
  74.      * @return iterable<null|scalar|\Stringable>
  75.      */
  76.     public function block_stylesheets(array $context, array $blocks = []): iterable
  77.     {
  78.         $macros $this->macros;
  79.         $__internal_5a27a8ba21ca79b61932376b2fa922d2 $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  80.         $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block""stylesheets"));
  81.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  82.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block""stylesheets"));
  83.         // line 7
  84.         yield "\t<style>
  85. \t\t/* Styles personnalisés pour la page d'accueil */
  86. \t\t.hero-banner {
  87. \t\t\tbackground: linear-gradient(135deg, #ffa200 0%, #e8910a 100%);
  88. \t\t\tcolor: white;
  89. \t\t\tpadding: 100px 0;
  90. \t\t\tposition: relative;
  91. \t\t\toverflow: hidden;
  92. \t\t}
  93. \t\t.hero-banner::before {
  94. \t\t\tcontent: '';
  95. \t\t\tposition: absolute;
  96. \t\t\ttop: 0;
  97. \t\t\tleft: 0;
  98. \t\t\tright: 0;
  99. \t\t\tbottom: 0;
  100. \t\t\tbackground: url('data:image/svg+xml, <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><defs><pattern id=\"grain\" width=\"100\" height=\"100\" patternUnits=\"userSpaceOnUse\"><circle cx=\"25\" cy=\"25\" r=\"1\" fill=\"rgba(255, 255, 255, 0.1)\"/><circle cx=\"75\" cy=\"75\" r=\"1\" fill=\"rgba(255, 255, 255, 0.1)\"/><circle cx=\"50\" cy=\"10\" r=\"0.5\" fill=\"rgba(255, 255, 255, 0.1)\"/><circle cx=\"10\" cy=\"90\" r=\"0.5\" fill=\"rgba(255, 255, 255, 0.1)\"/></pattern></defs><rect width=\"100\" height=\"100\" fill=\"url(%23grain)\"/></svg>');
  101. \t\t\topacity: 0.3;
  102. \t\t}
  103. \t\t.hero-content {
  104. \t\t\tposition: relative;
  105. \t\t\tz-index: 2;
  106. \t\t}
  107. \t\t.stats-card {
  108. \t\t\tbackground: white;
  109. \t\t\tborder-radius: 15px;
  110. \t\t\tpadding: 30px;
  111. \t\t\ttext-align: center;
  112. \t\t\tbox-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
  113. \t\t\ttransition: transform 0.3s ease;
  114. \t\t}
  115. \t\t.stats-card:hover {
  116. \t\t\ttransform: translateY(-5px);
  117. \t\t}
  118. \t\t.stats-number {
  119. \t\t\tfont-size: 3rem;
  120. \t\t\tfont-weight: bold;
  121. \t\t\tcolor: #ffa200;
  122. \t\t\tdisplay: block;
  123. \t\t}
  124. \t\t.stats-label {
  125. \t\t\tcolor: #666;
  126. \t\t\tfont-size: 1.1rem;
  127. \t\t\tmargin-top: 10px;
  128. \t\t}
  129. \t\t.category-card {
  130. \t\t\tbackground: white;
  131. \t\t\tborder-radius: 15px;
  132. \t\t\toverflow: hidden;
  133. \t\t\tbox-shadow: 0 5px 20px rgba(0, 0, 0, 0.1);
  134. \t\t\ttransition: all 0.3s ease;
  135. \t\t\theight: 100%;
  136. \t\t}
  137. \t\t.category-card:hover {
  138. \t\t\ttransform: translateY(-5px);
  139. \t\t\tbox-shadow: 0 15px 40px rgba(0, 0, 0, 0.15);
  140. \t\t}
  141. \t\t.category-image {
  142. \t\t\theight: 200px;
  143. \t\t\tbackground-size: cover;
  144. \t\t\tbackground-position: center;
  145. \t\t\tposition: relative;
  146. \t\t}
  147. \t\t.category-overlay {
  148. \t\t\tposition: absolute;
  149. \t\t\ttop: 0;
  150. \t\t\tleft: 0;
  151. \t\t\tright: 0;
  152. \t\t\tbottom: 0;
  153. \t\t\tbackground: linear-gradient(45deg, rgba(255,162,0,0.8), rgba(232,145,10,0.8));
  154. \t\t\tdisplay: flex;
  155. \t\t\talign-items: center;
  156. \t\t\tjustify-content: center;
  157. \t\t\topacity: 0;
  158. \t\t\ttransition: opacity 0.3s ease;
  159. \t\t}
  160. \t\t.category-card:hover .category-overlay {
  161. \t\t\topacity: 1;
  162. \t\t}
  163. \t\t.product-card {
  164. \t\t\tbackground: white;
  165. \t\t\tborder-radius: 15px;
  166. \t\t\toverflow: hidden;
  167. \t\t\tbox-shadow: 0 5px 20px rgba(0, 0, 0, 0.1);
  168. \t\t\ttransition: all 0.3s ease;
  169. \t\t\theight: 100%;
  170. \t\t}
  171. \t\t.product-card:hover {
  172. \t\t\ttransform: translateY(-5px);
  173. \t\t\tbox-shadow: 0 15px 40px rgba(0, 0, 0, 0.15);
  174. \t\t}
  175. \t\t.product-image {
  176. \t\t\theight: 250px;
  177. \t\t\tbackground-size: cover;
  178. \t\t\tbackground-position: center;
  179. \t\t\tposition: relative;
  180. \t\t}
  181. \t\t.product-badge {
  182. \t\t\tposition: absolute;
  183. \t\t\ttop: 15px;
  184. \t\t\tright: 15px;
  185. \t\t\tbackground: #ffa200;
  186. \t\t\tcolor: white;
  187. \t\t\tpadding: 5px 10px;
  188. \t\t\tborder-radius: 20px;
  189. \t\t\tfont-size: 0.8rem;
  190. \t\t\tfont-weight: bold;
  191. \t\t}
  192. \t\t.product-info {
  193. \t\t\tpadding: 20px;
  194. \t\t}
  195. \t\t.product-title {
  196. \t\t\tfont-size: 1.2rem;
  197. \t\t\tfont-weight: 600;
  198. \t\t\tmargin-bottom: 10px;
  199. \t\t\tcolor: #333;
  200. \t\t}
  201. \t\t.product-price {
  202. \t\t\tfont-size: 1.5rem;
  203. \t\t\tfont-weight: bold;
  204. \t\t\tcolor: #ffa200;
  205. \t\t\tmargin-bottom: 10px;
  206. \t\t}
  207. \t\t.product-shop {
  208. \t\t\tfont-size: 0.9rem;
  209. \t\t\tcolor: #666;
  210. \t\t\tmargin-bottom: 15px;
  211. \t\t}
  212. \t\t.btn-primary-custom {
  213. \t\t\tbackground: #ffa200;
  214. \t\t\tborder: none;
  215. \t\t\tcolor: white;
  216. \t\t\tpadding: 12px 30px;
  217. \t\t\tborder-radius: 25px;
  218. \t\t\tfont-weight: 500;
  219. \t\t\ttransition: all 0.3s ease;
  220. \t\t}
  221. \t\t.btn-primary-custom:hover {
  222. \t\t\tbackground: #e8910a;
  223. \t\t\ttransform: translateY(-2px);
  224. \t\t\tbox-shadow: 0 5px 15px rgba(255, 162, 0, 0.3);
  225. \t\t}
  226. \t\t.section-title {
  227. \t\t\ttext-align: center;
  228. \t\t\tmargin-bottom: 50px;
  229. \t\t}
  230. \t\t.section-title h2 {
  231. \t\t\tfont-size: 2.5rem;
  232. \t\t\tfont-weight: bold;
  233. \t\t\tcolor: #333;
  234. \t\t\tmargin-bottom: 15px;
  235. \t\t}
  236. \t\t.section-title p {
  237. \t\t\tfont-size: 1.2rem;
  238. \t\t\tcolor: #666;
  239. \t\t\tmax-width: 600px;
  240. \t\t\tmargin: 0 auto;
  241. \t\t}
  242. \t\t.feature-card {
  243. \t\t\ttext-align: center;
  244. \t\t\tpadding: 30px 20px;
  245. \t\t\tbackground: white;
  246. \t\t\tborder-radius: 15px;
  247. \t\t\tbox-shadow: 0 5px 20px rgba(0, 0, 0, 0.1);
  248. \t\t\ttransition: all 0.3s ease;
  249. \t\t\theight: 100%;
  250. \t\t}
  251. \t\t.feature-card:hover {
  252. \t\t\ttransform: translateY(-5px);
  253. \t\t\tbox-shadow: 0 15px 40px rgba(0, 0, 0, 0.15);
  254. \t\t}
  255. \t\t.feature-icon {
  256. \t\t\twidth: 80px;
  257. \t\t\theight: 80px;
  258. \t\t\tbackground: linear-gradient(135deg, #ffa200, #e8910a);
  259. \t\t\tborder-radius: 50%;
  260. \t\t\tdisplay: flex;
  261. \t\t\talign-items: center;
  262. \t\t\tjustify-content: center;
  263. \t\t\tmargin: 0 auto 20px;
  264. \t\t\tfont-size: 2rem;
  265. \t\t\tcolor: white;
  266. \t\t}
  267. \t\t.newsletter-section {
  268. \t\t\tbackground: linear-gradient(135deg, #ffa200 0%, #e8910a 100%);
  269. \t\t\tcolor: white;
  270. \t\t\tpadding: 80px 0;
  271. \t\t}
  272. \t\t.newsletter-form {
  273. \t\t\tmax-width: 500px;
  274. \t\t\tmargin: 0 auto;
  275. \t\t}
  276. \t\t.newsletter-form .form-control {
  277. \t\t\tborder: none;
  278. \t\t\tborder-radius: 25px;
  279. \t\t\tpadding: 15px 25px;
  280. \t\t\tfont-size: 1.1rem;
  281. \t\t}
  282. \t\t.newsletter-form .btn {
  283. \t\t\tborder-radius: 25px;
  284. \t\t\tpadding: 15px 30px;
  285. \t\t\tfont-weight: 500;
  286. \t\t}
  287. \t\t/* Responsive Styles */
  288. \t\t@media(max-width: 991.98px) {
  289. \t\t\t.hero-banner {
  290. \t\t\t\tpadding: 60px 0;
  291. \t\t\t}
  292. \t\t\t.stats-number {
  293. \t\t\t\tfont-size: 2.5rem;
  294. \t\t\t}
  295. \t\t\t.section-title h2 {
  296. \t\t\t\tfont-size: 2rem;
  297. \t\t\t}
  298. \t\t\t
  299. \t\t\t.stats-card {
  300. \t\t\t\tmargin-bottom: 1.5rem;
  301. \t\t\t}
  302. \t\t}
  303. \t\t@media(max-width: 767.98px) {
  304. \t\t\t.hero-banner {
  305. \t\t\t\tpadding: 40px 0;
  306. \t\t\t}
  307. \t\t\t.hero-content h1 {
  308. \t\t\t\tfont-size: 1.75rem;
  309. \t\t\t}
  310. \t\t\t.stats-number {
  311. \t\t\t\tfont-size: 2rem;
  312. \t\t\t}
  313. \t\t\t.stats-label {
  314. \t\t\t\tfont-size: 0.9rem;
  315. \t\t\t}
  316. \t\t\t.section-title h2 {
  317. \t\t\t\tfont-size: 1.75rem;
  318. \t\t\t}
  319. \t\t\t.section-title p {
  320. \t\t\t\tfont-size: 1rem;
  321. \t\t\t}
  322. \t\t\t
  323. \t\t\t.category-card,
  324. \t\t\t.product-card {
  325. \t\t\t\tmargin-bottom: 1.5rem;
  326. \t\t\t}
  327. \t\t\t
  328. \t\t\t.category-image {
  329. \t\t\t\theight: 150px;
  330. \t\t\t}
  331. \t\t\t
  332. \t\t\t.product-image {
  333. \t\t\t\theight: 200px;
  334. \t\t\t}
  335. \t\t\t
  336. \t\t\t.feature-card {
  337. \t\t\t\tmargin-bottom: 1.5rem;
  338. \t\t\t}
  339. \t\t\t
  340. \t\t\t.newsletter-section {
  341. \t\t\t\tpadding: 40px 0;
  342. \t\t\t}
  343. \t\t}
  344. \t\t@media(max-width: 575.98px) {
  345. \t\t\t.hero-banner {
  346. \t\t\t\tpadding: 30px 0;
  347. \t\t\t}
  348. \t\t\t.hero-content h1 {
  349. \t\t\t\tfont-size: 1.5rem;
  350. \t\t\t}
  351. \t\t\t.stats-card {
  352. \t\t\t\tpadding: 1.5rem;
  353. \t\t\t}
  354. \t\t\t.stats-number {
  355. \t\t\t\tfont-size: 1.75rem;
  356. \t\t\t}
  357. \t\t\t.section-title h2 {
  358. \t\t\t\tfont-size: 1.5rem;
  359. \t\t\t}
  360. \t\t\t
  361. \t\t\t.category-image {
  362. \t\t\t\theight: 120px;
  363. \t\t\t}
  364. \t\t\t
  365. \t\t\t.product-image {
  366. \t\t\t\theight: 180px;
  367. \t\t\t}
  368. \t\t\t
  369. \t\t\t.product-info {
  370. \t\t\t\tpadding: 1rem;
  371. \t\t\t}
  372. \t\t\t
  373. \t\t\t.product-title {
  374. \t\t\t\tfont-size: 1rem;
  375. \t\t\t}
  376. \t\t\t
  377. \t\t\t.product-price {
  378. \t\t\t\tfont-size: 1.25rem;
  379. \t\t\t}
  380. \t\t}
  381. \t\t/* Styles modernes pour le carousel de bannière */
  382. \t\t.banner-area-modern {
  383. \t\t\tposition: relative;
  384. \t\t\twidth: 100%;
  385. \t\t\tmin-height: 500px;
  386. \t\t\tbackground: url('";
  387.         // line 355
  388.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("ui/img/banner/banner-bg.jpg"), "html"nulltrue);
  389.         yield "') center center no-repeat;
  390. \t\t\tbackground-size: cover;
  391. \t\t\toverflow: hidden;
  392. \t\t\tpadding: 60px 0;
  393. \t\t}
  394. \t\t.banner-area-modern::before {
  395. \t\t\tcontent: '';
  396. \t\t\tposition: absolute;
  397. \t\t\ttop: 0;
  398. \t\t\tleft: 0;
  399. \t\t\twidth: 100%;
  400. \t\t\theight: 100%;
  401. \t\t\tbackground: rgba(0, 0, 0, 0.1);
  402. \t\t\tz-index: 1;
  403. \t\t}
  404. \t\t.banner-carousel-wrapper {
  405. \t\t\tposition: relative;
  406. \t\t\twidth: 100%;
  407. \t\t\theight: 100%;
  408. \t\t\tz-index: 2;
  409. \t\t}
  410. \t\t.banner-slide-item {
  411. \t\t\tmin-height: 500px;
  412. \t\t\tdisplay: flex;
  413. \t\t\talign-items: center;
  414. \t\t\tpadding: 40px 0;
  415. \t\t}
  416. \t\t.banner-content-modern {
  417. \t\t\tposition: relative;
  418. \t\t\tz-index: 2;
  419. \t\t\tpadding: 30px;
  420. \t\t\tbackground: rgba(255, 255, 255, 0.98);
  421. \t\t\tborder-radius: 20px;
  422. \t\t\tbox-shadow: 0 20px 60px rgba(0, 0, 0, 0.4);
  423. \t\t\tbackdrop-filter: blur(10px);
  424. \t\t\tanimation: fadeInUp 0.8s ease;
  425. \t\t}
  426. \t\t@keyframes fadeInUp {
  427. \t\t\tfrom {
  428. \t\t\t\topacity: 0;
  429. \t\t\t\ttransform: translateY(30px);
  430. \t\t\t}
  431. \t\t\tto {
  432. \t\t\t\topacity: 1;
  433. \t\t\t\ttransform: translateY(0);
  434. \t\t\t}
  435. \t\t}
  436. \t\t.banner-badge {
  437. \t\t\tdisplay: inline-block;
  438. \t\t\tbackground: linear-gradient(135deg, #ffa200 0%, #ff6b00 100%);
  439. \t\t\tcolor: white;
  440. \t\t\tpadding: 8px 20px;
  441. \t\t\tborder-radius: 50px;
  442. \t\t\tfont-size: 0.85rem;
  443. \t\t\tfont-weight: 600;
  444. \t\t\tmargin-bottom: 20px;
  445. \t\t\tbox-shadow: 0 4px 15px rgba(255, 162, 0, 0.4);
  446. \t\t}
  447. \t\t.banner-badge i {
  448. \t\t\tmargin-right: 5px;
  449. \t\t}
  450. \t\t.banner-title-modern {
  451. \t\t\tfont-size: 2.0rem;
  452. \t\t\tfont-weight: 600;
  453. \t\t\tcolor: #2c3e50;
  454. \t\t\tmargin-bottom: 20px;
  455. \t\t\tline-height: 1.2;
  456. \t\t\tbackground: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
  457. \t\t\t-webkit-background-clip: text;
  458. \t\t\t-webkit-text-fill-color: transparent;
  459. \t\t\tbackground-clip: text;
  460. \t\t}
  461. \t\t.banner-description-modern {
  462. \t\t\tfont-size: 1.1rem;
  463. \t\t\tcolor: #555;
  464. \t\t\tline-height: 1.8;
  465. \t\t\tmargin-bottom: 25px;
  466. \t\t}
  467. \t\t.banner-price-modern {
  468. \t\t\tdisplay: flex;
  469. \t\t\talign-items: center;
  470. \t\t\tgap: 15px;
  471. \t\t\tmargin-bottom: 30px;
  472. \t\t\tpadding: 15px 20px;
  473. \t\t\tbackground: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
  474. \t\t\tborder-radius: 12px;
  475. \t\t\tborder-left: 4px solid #ffa200;
  476. \t\t}
  477. \t\t.banner-price-modern .price-label {
  478. \t\t\tfont-size: 0.9rem;
  479. \t\t\tcolor: #666;
  480. \t\t\tfont-weight: 600;
  481. \t\t\ttext-transform: uppercase;
  482. \t\t\tletter-spacing: 1px;
  483. \t\t}
  484. \t\t.banner-price-modern .price-value {
  485. \t\t\tfont-size: 1.2rem;
  486. \t\t\tfont-weight: 600;
  487. \t\t\tcolor: #ffa200;
  488. \t\t}
  489. \t\t.banner-actions-modern {
  490. \t\t\tdisplay: flex;
  491. \t\t\tgap: 15px;
  492. \t\t\tflex-wrap: wrap;
  493. \t\t}
  494. \t\t.btn-banner-primary {
  495. \t\t\tdisplay: inline-flex;
  496. \t\t\talign-items: center;
  497. \t\t\tgap: 10px;
  498. \t\t\tpadding: 15px 35px;
  499. \t\t\tbackground: linear-gradient(135deg, #ffa200 0%, #ff6b00 100%);
  500. \t\t\tcolor: white;
  501. \t\t\ttext-decoration: none;
  502. \t\t\tborder-radius: 50px;
  503. \t\t\tfont-weight: 600;
  504. \t\t\tfont-size: 1rem;
  505. \t\t\ttransition: all 0.3s ease;
  506. \t\t\tbox-shadow: 0 4px 15px rgba(255, 162, 0, 0.4);
  507. \t\t}
  508. \t\t.btn-banner-primary:hover {
  509. \t\t\ttransform: translateY(-3px);
  510. \t\t\tbox-shadow: 0 8px 25px rgba(255, 162, 0, 0.6);
  511. \t\t\tcolor: white;
  512. \t\t}
  513. \t\t.btn-banner-primary .btn-icon {
  514. \t\t\ttransition: transform 0.3s ease;
  515. \t\t}
  516. \t\t.btn-banner-primary:hover .btn-icon {
  517. \t\t\ttransform: translateX(5px);
  518. \t\t}
  519. \t\t.btn-banner-secondary {
  520. \t\t\tdisplay: inline-flex;
  521. \t\t\talign-items: center;
  522. \t\t\tgap: 8px;
  523. \t\t\tpadding: 15px 25px;
  524. \t\t\tbackground: white;
  525. \t\t\tcolor: #667eea;
  526. \t\t\ttext-decoration: none;
  527. \t\t\tborder-radius: 50px;
  528. \t\t\tfont-weight: 600;
  529. \t\t\tfont-size: 0.95rem;
  530. \t\t\tborder: 2px solid #667eea;
  531. \t\t\ttransition: all 0.3s ease;
  532. \t\t}
  533. \t\t.btn-banner-secondary:hover {
  534. \t\t\tbackground: #667eea;
  535. \t\t\tcolor: white;
  536. \t\t\ttransform: translateY(-3px);
  537. \t\t\tbox-shadow: 0 4px 15px rgba(102, 126, 234, 0.4);
  538. \t\t}
  539. \t\t.banner-image-modern {
  540. \t\t\tposition: relative;
  541. \t\t\theight: 450px;
  542. \t\t\tdisplay: flex;
  543. \t\t\talign-items: center;
  544. \t\t\tjustify-content: center;
  545. \t\t}
  546. \t\t.banner-image-wrapper {
  547. \t\t\tposition: relative;
  548. \t\t\twidth: 100%;
  549. \t\t\theight: 100%;
  550. \t\t\tborder-radius: 20px;
  551. \t\t\toverflow: hidden;
  552. \t\t\tbox-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
  553. \t\t\tbackground: white;
  554. \t\t\tpadding: 20px;
  555. \t\t}
  556. \t\t.banner-img {
  557. \t\t\twidth: 100%;
  558. \t\t\theight: 100%;
  559. \t\t\tobject-fit: contain;
  560. \t\t\tborder-radius: 15px;
  561. \t\t\ttransition: transform 0.5s ease;
  562. \t\t}
  563. \t\t.banner-slide-item:hover .banner-img {
  564. \t\t\ttransform: scale(1.05);
  565. \t\t}
  566. \t\t.banner-image-overlay {
  567. \t\t\tposition: absolute;
  568. \t\t\ttop: 0;
  569. \t\t\tleft: 0;
  570. \t\t\twidth: 100%;
  571. \t\t\theight: 100%;
  572. \t\t\tbackground: linear-gradient(135deg, rgba(102, 126, 234, 0.1) 0%, rgba(118, 75, 162, 0.1) 100%);
  573. \t\t\tborder-radius: 15px;
  574. \t\t\tpointer-events: none;
  575. \t\t}
  576. \t\t/* Styles pour Owl Carousel */
  577. \t\t.banner-area-modern .owl-nav {
  578. \t\t\tposition: absolute;
  579. \t\t\ttop: 50%;
  580. \t\t\ttransform: translateY(-50%);
  581. \t\t\twidth: 100%;
  582. \t\t\tdisplay: flex;
  583. \t\t\tjustify-content: space-between;
  584. \t\t\talign-items: center;
  585. \t\t\tpadding: 0 20px;
  586. \t\t\tpointer-events: none;
  587. \t\t\tz-index: 10;
  588. \t\t\tleft: 0;
  589. \t\t\tright: 0;
  590. \t\t\tbox-sizing: border-box;
  591. \t\t}
  592. \t\t.banner-area-modern .owl-nav button {
  593. \t\t\twidth: 60px;
  594. \t\t\theight: 60px;
  595. \t\t\tmin-width: 60px;
  596. \t\t\tmin-height: 60px;
  597. \t\t\tbackground: #ffa200 !important;
  598. \t\t\tborder-radius: 50% !important;
  599. \t\t\tdisplay: flex !important;
  600. \t\t\talign-items: center;
  601. \t\t\tjustify-content: center;
  602. \t\t\tcolor: white !important;
  603. \t\t\tfont-size: 24px !important;
  604. \t\t\tbox-shadow: 0 4px 15px rgba(255, 162, 0, 0.4);
  605. \t\t\ttransition: all 0.3s ease;
  606. \t\t\tpointer-events: all;
  607. \t\t\tborder: none !important;
  608. \t\t\tposition: relative;
  609. \t\t\tflex-shrink: 0;
  610. \t\t\tmargin: 0;
  611. \t\t\tpadding: 0;
  612. \t\t\tline-height: 1;
  613. \t\t}
  614. \t\t.banner-area-modern .owl-nav button.owl-prev {
  615. \t\t\tmargin-right: auto;
  616. \t\t}
  617. \t\t.banner-area-modern .owl-nav button.owl-next {
  618. \t\t\tmargin-left: auto;
  619. \t\t}
  620. \t\t.banner-area-modern .owl-nav button:hover {
  621. \t\t\tbackground: #ff6b00 !important;
  622. \t\t\tcolor: white !important;
  623. \t\t\ttransform: scale(1.1);
  624. \t\t\tbox-shadow: 0 6px 20px rgba(255, 162, 0, 0.6);
  625. \t\t}
  626. \t\t.banner-area-modern .owl-nav button.disabled {
  627. \t\t\topacity: 0.5;
  628. \t\t\tcursor: not-allowed;
  629. \t\t}
  630. \t\t.banner-area-modern .owl-nav button.disabled:hover {
  631. \t\t\ttransform: scale(1);
  632. \t\t}
  633. \t\t.banner-area-modern .owl-dots {
  634. \t\t\tposition: absolute;
  635. \t\t\tbottom: 30px;
  636. \t\t\tleft: 50%;
  637. \t\t\ttransform: translateX(-50%);
  638. \t\t\tdisplay: flex;
  639. \t\t\tgap: 10px;
  640. \t\t\tz-index: 10;
  641. \t\t}
  642. \t\t.banner-area-modern .owl-dots button {
  643. \t\t\twidth: 12px;
  644. \t\t\theight: 12px;
  645. \t\t\tborder-radius: 50%;
  646. \t\t\tbackground: rgba(255, 255, 255, 0.6) !important;
  647. \t\t\tborder: 2px solid white !important;
  648. \t\t\ttransition: all 0.3s ease;
  649. \t\t\tmargin: 0 5px;
  650. \t\t}
  651. \t\t.banner-area-modern .owl-dots button.active {
  652. \t\t\tbackground: #ffa200 !important;
  653. \t\t\tborder-color: #ffa200 !important;
  654. \t\t\twidth: 30px;
  655. \t\t\tborder-radius: 6px;
  656. \t\t}
  657. \t\t/* Responsive */
  658. \t\t@media(max-width: 992px) {
  659. \t\t\t.banner-area-modern {
  660. \t\t\t\tmin-height: 450px;
  661. \t\t\t\tpadding: 40px 0;
  662. \t\t\t\tbackground-size: cover;
  663. \t\t\t\tbackground-position: center;
  664. \t\t\t}
  665. \t\t\t.banner-slide-item {
  666. \t\t\t\tmin-height: 450px;
  667. \t\t\t\tpadding: 30px 0;
  668. \t\t\t}
  669. \t\t\t.banner-title-modern {
  670. \t\t\t\tfont-size: 1.5rem;
  671. \t\t\t}
  672. \t\t\t.banner-description-modern {
  673. \t\t\t\tfont-size: 1rem;
  674. \t\t\t}
  675. \t\t\t.banner-image-modern {
  676. \t\t\t\theight: 350px;
  677. \t\t\t\tmargin-top: 30px;
  678. \t\t\t}
  679. \t\t\t.banner-content-modern {
  680. \t\t\t\tpadding: 25px;
  681. \t\t\t}
  682. \t\t}
  683. \t\t@media(max-width: 768px) {
  684. \t\t\t.banner-area-modern {
  685. \t\t\t\tmin-height: 400px;
  686. \t\t\t\tpadding: 30px 0;
  687. \t\t\t\tbackground-size: cover;
  688. \t\t\t\tbackground-position: center;
  689. \t\t\t}
  690. \t\t\t.banner-slide-item {
  691. \t\t\t\tmin-height: 400px;
  692. \t\t\t\tpadding: 20px 0;
  693. \t\t\t}
  694. \t\t\t.banner-title-modern {
  695. \t\t\t\tfont-size: 1.25rem;
  696. \t\t\t}
  697. \t\t\t.banner-description-modern {
  698. \t\t\t\tfont-size: 0.95rem;
  699. \t\t\t}
  700. \t\t\t.banner-image-modern {
  701. \t\t\t\theight: 280px;
  702. \t\t\t\tmargin-top: 20px;
  703. \t\t\t}
  704. \t\t\t.banner-content-modern {
  705. \t\t\t\tpadding: 20px;
  706. \t\t\t}
  707. \t\t\t.banner-price-modern .price-value {
  708. \t\t\t\tfont-size: 1.25rem;
  709. \t\t\t}
  710. \t\t\t.banner-actions-modern {
  711. \t\t\t\tflex-direction: column;
  712. \t\t\t}
  713. \t\t\t.btn-banner-primary,
  714. \t\t\t.btn-banner-secondary {
  715. \t\t\t\twidth: 100%;
  716. \t\t\t\tjustify-content: center;
  717. \t\t\t}
  718. \t\t\t.banner-area-modern .owl-nav button {
  719. \t\t\t\twidth: 50px;
  720. \t\t\t\theight: 50px;
  721. \t\t\t\tmin-width: 50px;
  722. \t\t\t\tmin-height: 50px;
  723. \t\t\t\tfont-size: 20px !important;
  724. \t\t\t\tbackground: #ffa200 !important;
  725. \t\t\t}
  726. \t\t\t.banner-area-modern .owl-nav button:hover {
  727. \t\t\t\tbackground: #ff6b00 !important;
  728. \t\t\t}
  729. \t\t}
  730. \t\t@media(max-width: 576px) {
  731. \t\t\t.banner-area-modern {
  732. \t\t\t\tmin-height: 350px;
  733. \t\t\t\tpadding: 0;
  734. \t\t\t\tbackground-size: cover;
  735. \t\t\t\tbackground-position: center;
  736. \t\t\t}
  737. \t\t\t.banner-slide-item {
  738. \t\t\t\tmin-height: 350px;
  739. \t\t\t}
  740. \t\t\t.banner-title-modern {
  741. \t\t\t\tfont-size: 1.25rem;
  742. \t\t\t}
  743. \t\t\t.banner-image-modern {
  744. \t\t\t\theight: 220px;
  745. \t\t\t}
  746. \t\t\t.banner-content-modern {
  747. \t\t\t\tpadding: 15px;
  748. \t\t\t}
  749. \t\t}
  750. \t\t/* Styles pour les catégories de boutiques cliquables */
  751. \t\t.shop-category-clickable {
  752. \t\t\tcursor: pointer;
  753. \t\t\ttransition: all 0.3s ease;
  754. \t\t\theight: 100%;
  755. \t\t}
  756. \t\t.shop-category-clickable:hover {
  757. \t\t\ttransform: translateY(-10px);
  758. \t\t\tbox-shadow: 0 8px 25px rgba(0, 0, 0, 0.15);
  759. \t\t}
  760. \t\t.shop-category-clickable:hover .category-image {
  761. \t\t\ttransform: scale(1.1);
  762. \t\t}
  763. \t\t.shop-category-clickable:hover .btn-primary-custom {
  764. \t\t\tbackground: #e8910a;
  765. \t\t\ttransform: translateX(5px);
  766. \t\t}
  767. \t\t/* Styles pour les cartes de catégories personnalisées */
  768. \t\t.category-card-custom {
  769. \t\t\tborder-radius: 15px;
  770. \t\t\toverflow: hidden;
  771. \t\t\tbox-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);
  772. \t\t\ttransition: transform 0.3s ease, box-shadow 0.3s ease;
  773. \t\t\tbackground: white;
  774. \t\t\theight: 100%;
  775. \t\t}
  776. \t\t.category-card-custom:hover {
  777. \t\t\ttransform: translateY(-10px);
  778. \t\t\tbox-shadow: 0 8px 25px rgba(0, 0, 0, 0.15);
  779. \t\t}
  780. \t\t.category-image-wrapper {
  781. \t\t\tposition: relative;
  782. \t\t\theight: 200px;
  783. \t\t\toverflow: hidden;
  784. \t\t}
  785. \t\t.category-image {
  786. \t\t\twidth: 100%;
  787. \t\t\theight: 100%;
  788. \t\t\tbackground-size: cover;
  789. \t\t\tbackground-position: center;
  790. \t\t\ttransition: transform 0.3s ease;
  791. \t\t}
  792. \t\t.category-card-custom:hover .category-image {
  793. \t\t\ttransform: scale(1.1);
  794. \t\t}
  795. \t\t.category-overlay-custom {
  796. \t\t\tposition: absolute;
  797. \t\t\ttop: 0;
  798. \t\t\tleft: 0;
  799. \t\t\twidth: 100%;
  800. \t\t\theight: 100%;
  801. \t\t\tbackground: rgba(0, 0, 0, 0.6);
  802. \t\t\tdisplay: flex;
  803. \t\t\talign-items: center;
  804. \t\t\tjustify-content: center;
  805. \t\t\topacity: 0;
  806. \t\t\ttransition: opacity 0.3s ease;
  807. \t\t\tcolor: white;
  808. \t\t}
  809. \t\t.category-card-custom:hover .category-overlay-custom {
  810. \t\t\topacity: 1;
  811. \t\t}
  812. \t\t.category-icon-wrapper {
  813. \t\t\ttext-align: center;
  814. \t\t}
  815. \t\t.category-icon-wrapper i {
  816. \t\t\tcolor: #ffa200;
  817. \t\t\tdisplay: block;
  818. \t\t}
  819. \t\t.category-icon-wrapper h4 {
  820. \t\t\tcolor: white;
  821. \t\t\tmargin-top: 10px;
  822. \t\t}
  823. \t\t/* Styles pour la galerie de produits en vedette */
  824. \t\t.featured-products-carousel-section {
  825. \t\t\tposition: relative;
  826. \t\t\toverflow: hidden;
  827. \t\t}
  828. \t\t.featured-gallery-wrapper {
  829. \t\t\tposition: relative;
  830. \t\t\tmax-width: 1400px;
  831. \t\t\tmargin: 0 auto;
  832. \t\t\tpadding: 0 15px;
  833. \t\t}
  834. \t\t.featured-gallery-container {
  835. \t\t\tposition: relative;
  836. \t\t\toverflow: visible;
  837. \t\t\tborder-radius: 12px;
  838. \t\t}
  839. \t\t.featured-gallery-grid {
  840. \t\t\tdisplay: flex;
  841. \t\t\tgap: 30px; /* Même espacement que dans listing (margin entre col-lg-4) */
  842. \t\t\tpadding: 10px 0;
  843. \t\t\toverflow-x: auto;
  844. \t\t\toverflow-y: hidden;
  845. \t\t\tscroll-behavior: smooth;
  846. \t\t\tscrollbar-width: none; /* Firefox */
  847. \t\t\t-ms-overflow-style: none; /* IE/Edge */
  848. \t\t\t-webkit-overflow-scrolling: touch; /* iOS smooth scroll */
  849. \t\t\twill-change: scroll-position;
  850. \t\t}
  851. \t\t.featured-gallery-grid::-webkit-scrollbar {
  852. \t\t\tdisplay: none; /* Chrome/Safari */
  853. \t\t}
  854. \t\t/* Mode OwlCarousel */
  855. \t\t.featured-gallery-grid.owl-carousel {
  856. \t\t\tdisplay: block;
  857. \t\t\toverflow: hidden;
  858. \t\t\tpadding: 25px 0;
  859. \t\t}
  860. \t\t.featured-gallery-grid.owl-carousel .owl-stage-outer {
  861. \t\t\toverflow: visible;
  862. \t\t}
  863. \t\t.featured-gallery-grid.owl-carousel .featured-gallery-item {
  864. \t\t\topacity: 1;
  865. \t\t\ttransform: none;
  866. \t\t\twidth: auto;
  867. \t\t\tmax-width: none;
  868. \t\t\tmargin: 0 15px;
  869. \t\t}
  870. \t\t.featured-gallery-grid.owl-carousel .owl-stage {
  871. \t\t\tdisplay: flex;
  872. \t\t}
  873. \t\t.featured-gallery-item {
  874. \t\t\tflex: 0 0 auto; /* Largeur automatique basée sur le contenu */
  875. \t\t\twidth: 100%;
  876. \t\t\tmax-width: 100%;
  877. \t\t\topacity: 0;
  878. \t\t\ttransform: translateY(20px) scale(0.95);
  879. \t\t\tanimation: galleryItemFadeIn 0.5s cubic-bezier(0.4, 0, 0.2, 1) forwards;
  880. \t\t\tanimation-delay: calc(var(--item-index, 0) * 0.05s);
  881. \t\t}
  882. \t\t/* Utiliser la même largeur que dans listing (col-lg-4 = ~33.33%) */
  883. \t\t@media(min-width: 992px) {
  884. \t\t\t.featured-gallery-item {
  885. \t\t\t\tflex: 0 0 33.333333%;
  886. \t\t\t\tmax-width: 25%;
  887. \t\t\t}
  888. \t\t}
  889. \t\t@media(min-width: 768px) and(max-width: 991px) {
  890. \t\t\t.featured-gallery-item {
  891. \t\t\t\tflex: 0 0 50%;
  892. \t\t\t\tmax-width: 50%;
  893. \t\t\t}
  894. \t\t}
  895. \t\t@media(max-width: 767px) {
  896. \t\t\t.featured-gallery-item {
  897. \t\t\t\tflex: 0 0 100%;
  898. \t\t\t\tmax-width: 100%;
  899. \t\t\t}
  900. \t\t}
  901. \t\t/* Ajustements minimaux pour single-product dans le carrousel - utiliser les styles de main.css */
  902. \t\t.featured-gallery-item .single-product {
  903. \t\t\tmargin-bottom: 0; /* Override main.css margin-bottom: 50px */
  904. \t\t\tmin-height: 480px;
  905. \t\t\tdisplay: flex;
  906. \t\t\tflex-direction: column;
  907. \t\t\tpadding: 20px;
  908. \t\t\tbackground: #fff;
  909. \t\t\tborder-radius: 12px;
  910. \t\t\tbox-shadow: 0 10px 30px rgba(15, 34, 58, 0.08);
  911. \t\t\ttransition: transform 0.25s ease, box-shadow 0.25s ease;
  912. \t\t}
  913. \t\t.featured-gallery-item .single-product:hover {
  914. \t\t\ttransform: translateY(-4px);
  915. \t\t\tbox-shadow: 0 18px 40px rgba(15, 34, 58, 0.12);
  916. \t\t}
  917. \t\t/* S'assurer que les images s'affichent correctement - styles identiques à listing.html.twig */
  918. \t\t.featured-gallery-item .single-product img {
  919. \t\t\tmargin-bottom: 20px;
  920. \t\t\twidth: 100%;
  921. \t\t}
  922. \t\t/* Styles pour product-image-container - identiques à listing.html.twig */
  923. \t\t.featured-gallery-item .product-image-container {
  924. \t\t\tposition: relative;
  925. \t\t\toverflow: hidden;
  926. \t\t\tborder-radius: 10px;
  927. \t\t\theight: 260px;
  928. \t\t\tdisplay: flex;
  929. \t\t\talign-items: center;
  930. \t\t\tjustify-content: center;
  931. \t\t\tbackground: #f7f7fb;
  932. \t\t\tmargin-bottom: 18px;
  933. \t\t}
  934. \t\t.featured-gallery-item .product-image-container:hover .main-product-img {
  935. \t\t\ttransform: scale(1.05);
  936. \t\t\ttransition: transform 0.3s ease;
  937. \t\t}
  938. \t\t.featured-gallery-item .product-image-container a {
  939. \t\t\tdisplay: block;
  940. \t\t\twidth: 100%;
  941. \t\t\theight: 100%;
  942. \t\t}
  943. \t\t.featured-gallery-item .main-product-img {
  944. \t\t\ttransition: transform 0.3s ease;
  945. \t\t\twidth: 100% !important;
  946. \t\t\theight: 100% !important;
  947. \t\t\tobject-fit: cover;
  948. \t\t\tobject-position: center;
  949. \t\t\tdisplay: block;
  950. \t\t\twill-change: transform, opacity;
  951. \t\t}
  952. \t\t.featured-gallery-item .main-product-img.image-fade {
  953. \t\t\tanimation: imageFade 0.5s ease;
  954. \t\t}
  955. \t\t@keyframes imageFade {
  956. \t\t\tfrom {
  957. \t\t\t\topacity: 0;
  958. \t\t\t\ttransform: scale(1.02);
  959. \t\t\t}
  960. \t\t\tto {
  961. \t\t\t\topacity: 1;
  962. \t\t\t\ttransform: scale(1);
  963. \t\t\t}
  964. \t\t}
  965. \t\t.featured-gallery-item .product-details {
  966. \t\t\tdisplay: flex;
  967. \t\t\tflex-direction: column;
  968. \t\t\theight: 100%;
  969. \t\t}
  970. \t\t.featured-gallery-item .prd-bottom {
  971. \t\t\tmargin-top: auto;
  972. \t\t}
  973. \t\t/* Styles pour img-nav-btn - identiques à listing.html.twig */
  974. \t\t.featured-gallery-item .img-nav-btn {
  975. \t\t\tposition: absolute;
  976. \t\t\ttop: 50%;
  977. \t\t\ttransform: translateY(-50%);
  978. \t\t\tbackground: rgba(0, 0, 0, 0.6);
  979. \t\t\tcolor: white;
  980. \t\t\tborder: none;
  981. \t\t\twidth: 35px;
  982. \t\t\theight: 35px;
  983. \t\t\tborder-radius: 50%;
  984. \t\t\tdisplay: flex;
  985. \t\t\talign-items: center;
  986. \t\t\tjustify-content: center;
  987. \t\t\tcursor: pointer;
  988. \t\t\ttransition: all 0.3s ease;
  989. \t\t\tz-index: 10;
  990. \t\t}
  991. \t\t.featured-gallery-item .img-nav-btn:hover {
  992. \t\t\tbackground: #095ad3;
  993. \t\t\ttransform: translateY(-50%) scale(1.1);
  994. \t\t}
  995. \t\t.featured-gallery-item .img-nav-left {
  996. \t\t\tleft: 10px;
  997. \t\t}
  998. \t\t.featured-gallery-item .img-nav-right {
  999. \t\t\tright: 10px;
  1000. \t\t}
  1001. \t\t.featured-gallery-item .img-indicators {
  1002. \t\t\tposition: absolute;
  1003. \t\t\tbottom: 10px;
  1004. \t\t\tleft: 50%;
  1005. \t\t\ttransform: translateX(-50%);
  1006. \t\t\tdisplay: flex;
  1007. \t\t\tgap: 5px;
  1008. \t\t\tz-index: 10;
  1009. \t\t}
  1010. \t\t.featured-gallery-item .indicator {
  1011. \t\t\twidth: 8px;
  1012. \t\t\theight: 8px;
  1013. \t\t\tborder-radius: 50%;
  1014. \t\t\tbackground: rgba(255, 255, 255, 0.5);
  1015. \t\t\tcursor: pointer;
  1016. \t\t\tmargin-bottom: 10px;
  1017. \t\t\ttransition: all 0.3s ease;
  1018. \t\t\tborder: 1px solid rgba(255, 255, 255, 0.3);
  1019. \t\t}
  1020. \t\t.featured-gallery-item .indicator.active {
  1021. \t\t\tbackground: #ffa200;
  1022. \t\t\tborder-color: #ffa200;
  1023. \t\t\ttransform: scale(1.2);
  1024. \t\t}
  1025. \t\t.featured-gallery-item .indicator:hover {
  1026. \t\t\tbackground: rgba(255, 255, 255, 0.8);
  1027. \t\t}
  1028. \t\t/* Styles pour shop-info - identiques à listing.html.twig */
  1029. \t\t.featured-gallery-item .shop-info {
  1030. \t\t\tmargin: 8px 0;
  1031. \t\t\tpadding: 5px 0;
  1032. \t\t\tborder-bottom: 1px solid #f0f0f0;
  1033. \t\t}
  1034. \t\t.featured-gallery-item .shop-link {
  1035. \t\t\tcolor: #007bff;
  1036. \t\t\ttext-decoration: none;
  1037. \t\t\tfont-weight: 500;
  1038. \t\t}
  1039. \t\t.featured-gallery-item .shop-link:hover {
  1040. \t\t\tcolor: #ffa200;
  1041. \t\t\ttext-decoration: underline;
  1042. \t\t}
  1043. \t\t/* Les autres styles (product-details h6, price, prd-bottom, social-info) sont déjà définis dans main.css */
  1044. \t\t@keyframes galleryItemFadeIn {
  1045. \t\t\tfrom {
  1046. \t\t\t\topacity: 0;
  1047. \t\t\t\ttransform: translateY(20px) scale(0.95);
  1048. \t\t\t}
  1049. \t\t\tto {
  1050. \t\t\t\topacity: 1;
  1051. \t\t\t\ttransform: translateY(0) scale(1);
  1052. \t\t\t}
  1053. \t\t}
  1054. \t\t.featured-gallery-card {
  1055. \t\t\tdisplay: flex;
  1056. \t\t\tflex-direction: column;
  1057. \t\t\theight: 100%;
  1058. \t\t\tbackground: white;
  1059. \t\t\tborder-radius: 12px;
  1060. \t\t\toverflow: hidden;
  1061. \t\t\tbox-shadow: 0 2px 12px rgba(0, 0, 0, 0.08);
  1062. \t\t\ttransition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
  1063. \t\t\tborder: 1px solid #f0f0f0;
  1064. \t\t}
  1065. \t\t.featured-gallery-card:hover {
  1066. \t\t\ttransform: translateY(-5px);
  1067. \t\t\tbox-shadow: 0 6px 20px rgba(0, 0, 0, 0.12);
  1068. \t\t\tborder-color: #ffa200;
  1069. \t\t}
  1070. \t\t.featured-gallery-image-wrapper {
  1071. \t\t\tposition: relative;
  1072. \t\t\twidth: 100%;
  1073. \t\t\tpadding-top: 100%; /* Ratio 1:1 pour une galerie carrée */
  1074. \t\t\toverflow: hidden;
  1075. \t\t\tbackground: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
  1076. \t\t}
  1077. \t\t.featured-gallery-image {
  1078. \t\t\tposition: absolute;
  1079. \t\t\ttop: 0;
  1080. \t\t\tleft: 0;
  1081. \t\t\twidth: 100%;
  1082. \t\t\theight: 100%;
  1083. \t\t\tbackground-size: cover;
  1084. \t\t\tbackground-position: center;
  1085. \t\t\ttransition: transform 0.5s cubic-bezier(0.4, 0, 0.2, 1);
  1086. \t\t}
  1087. \t\t.featured-gallery-card:hover .featured-gallery-image {
  1088. \t\t\ttransform: scale(1.08);
  1089. \t\t}
  1090. \t\t.featured-gallery-badge {
  1091. \t\t\tposition: absolute;
  1092. \t\t\ttop: 8px;
  1093. \t\t\tleft: 8px;
  1094. \t\t\tbackground: linear-gradient(135deg, #ffa200 0%, #ff6b00 100%);
  1095. \t\t\tcolor: white;
  1096. \t\t\tpadding: 4px 10px;
  1097. \t\t\tborder-radius: 15px;
  1098. \t\t\tfont-size: 12px;
  1099. \t\t\tfont-weight: 600;
  1100. \t\t\tz-index: 2;
  1101. \t\t\tbox-shadow: 0 2px 8px rgba(255, 162, 0, 0.4);
  1102. \t\t}
  1103. \t\t.featured-gallery-overlay {
  1104. \t\t\tposition: absolute;
  1105. \t\t\ttop: 0;
  1106. \t\t\tleft: 0;
  1107. \t\t\twidth: 100%;
  1108. \t\t\theight: 100%;
  1109. \t\t\tbackground: rgba(0, 0, 0, 0.5);
  1110. \t\t\tdisplay: flex;
  1111. \t\t\talign-items: center;
  1112. \t\t\tjustify-content: center;
  1113. \t\t\topacity: 0;
  1114. \t\t\ttransition: opacity 0.3s ease;
  1115. \t\t}
  1116. \t\t.featured-gallery-card:hover .featured-gallery-overlay {
  1117. \t\t\topacity: 1;
  1118. \t\t}
  1119. \t\t.featured-gallery-view-btn {
  1120. \t\t\tbackground: white;
  1121. \t\t\tcolor: #333;
  1122. \t\t\twidth: 40px;
  1123. \t\t\theight: 40px;
  1124. \t\t\tborder-radius: 50%;
  1125. \t\t\tdisplay: flex;
  1126. \t\t\talign-items: center;
  1127. \t\t\tjustify-content: center;
  1128. \t\t\ttext-decoration: none;
  1129. \t\t\tfont-size: 18px;
  1130. \t\t\ttransform: scale(0.8);
  1131. \t\t\ttransition: transform 0.3s ease;
  1132. \t\t}
  1133. \t\t.featured-gallery-card:hover .featured-gallery-view-btn {
  1134. \t\t\ttransform: scale(1);
  1135. \t\t}
  1136. \t\t.featured-gallery-info {
  1137. \t\t\tpadding: 12px;
  1138. \t\t\tflex: 1;
  1139. \t\t\tdisplay: flex;
  1140. \t\t\tflex-direction: column;
  1141. \t\t}
  1142. \t\t.featured-gallery-title {
  1143. \t\t\tfont-size: 14px;
  1144. \t\t\tfont-weight: 600;
  1145. \t\t\tmargin-bottom: 6px;
  1146. \t\t\tcolor: #333;
  1147. \t\t\tline-height: 1.3;
  1148. \t\t\tdisplay: -webkit-box;
  1149. \t\t\t-webkit-line-clamp: 2;
  1150. \t\t\t-webkit-box-orient: vertical;
  1151. \t\t\toverflow: hidden;
  1152. \t\t\tmin-height: 36px;
  1153. \t\t}
  1154. \t\t.featured-gallery-title a {
  1155. \t\t\tcolor: #333;
  1156. \t\t\ttext-decoration: none;
  1157. \t\t\ttransition: color 0.3s ease;
  1158. \t\t}
  1159. \t\t.featured-gallery-title a:hover {
  1160. \t\t\tcolor: #ffa200;
  1161. \t\t}
  1162. \t\t.featured-gallery-price {
  1163. \t\t\tfont-size: 16px;
  1164. \t\t\tfont-weight: 700;
  1165. \t\t\tcolor: #ffa200;
  1166. \t\t\tmargin-bottom: 6px;
  1167. \t\t}
  1168. \t\t.featured-gallery-rating {
  1169. \t\t\tdisplay: flex;
  1170. \t\t\talign-items: center;
  1171. \t\t\tgap: 3px;
  1172. \t\t\tfont-size: 11px;
  1173. \t\t}
  1174. \t\t.featured-gallery-rating .fa-star.active {
  1175. \t\t\tcolor: #ffa200;
  1176. \t\t}
  1177. \t\t.featured-gallery-rating .fa-star-o {
  1178. \t\t\tcolor: #ddd;
  1179. \t\t}
  1180. \t\t.featured-gallery-controls {
  1181. \t\t\tdisplay: flex;
  1182. \t\t\tjustify-content: center;
  1183. \t\t\tgap: 20px;
  1184. \t\t\tmargin-top: 25px;
  1185. \t\t\tpadding: 0 20px;
  1186. \t\t}
  1187. \t\t.featured-gallery-nav-btn {
  1188. \t\t\twidth: 42px;
  1189. \t\t\theight: 42px;
  1190. \t\t\tborder-radius: 50%;
  1191. \t\t\tborder: 1.5px solid #ffa200;
  1192. \t\t\tbackground: white;
  1193. \t\t\tcolor: #ffa200;
  1194. \t\t\tfont-size: 16px;
  1195. \t\t\tcursor: pointer;
  1196. \t\t\tdisplay: flex;
  1197. \t\t\talign-items: center;
  1198. \t\t\tjustify-content: center;
  1199. \t\t\ttransition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
  1200. \t\t\tbox-shadow: 0 3px 10px rgba(255, 162, 0, 0.18);
  1201. \t\t\tposition: relative;
  1202. \t\t\toverflow: hidden;
  1203. \t\t}
  1204. \t\t.featured-gallery-nav-btn.btn-ripple::after {
  1205. \t\t\tcontent: '';
  1206. \t\t\tposition: absolute;
  1207. \t\t\twidth: 100%;
  1208. \t\t\theight: 100%;
  1209. \t\t\tleft: 0;
  1210. \t\t\ttop: 0;
  1211. \t\t\tborder-radius: 50%;
  1212. \t\t\tbackground: rgba(255, 162, 0, 0.2);
  1213. \t\t\tanimation: rippleEffect 0.35s ease;
  1214. \t\t}
  1215. \t\t@keyframes rippleEffect {
  1216. \t\t\tfrom {
  1217. \t\t\t\ttransform: scale(0.6);
  1218. \t\t\t\topacity: 0.7;
  1219. \t\t\t}
  1220. \t\t\tto {
  1221. \t\t\t\ttransform: scale(1.4);
  1222. \t\t\t\topacity: 0;
  1223. \t\t\t}
  1224. \t\t}
  1225. \t\t.featured-gallery-nav-btn:hover:not(:disabled) {
  1226. \t\t\tbackground: #ffa200;
  1227. \t\t\tcolor: white;
  1228. \t\t\ttransform: scale(1.1);
  1229. \t\t\tbox-shadow: 0 5px 18px rgba(255, 162, 0, 0.4);
  1230. \t\t}
  1231. \t\t.featured-gallery-nav-btn:active:not(:disabled) {
  1232. \t\t\ttransform: scale(0.95);
  1233. \t\t}
  1234. \t\t.featured-gallery-nav-btn:disabled {
  1235. \t\t\topacity: 0.3;
  1236. \t\t\tcursor: not-allowed;
  1237. \t\t}
  1238. \t\t.featured-gallery-load-more {
  1239. \t\t\tmargin-top: 30px;
  1240. \t\t}
  1241. \t\t/* Style pour le bouton \"Voir tous les produits\" */
  1242. \t\t.btn-view-all-products {
  1243. \t\t\tdisplay: inline-flex;
  1244. \t\t\talign-items: center;
  1245. \t\t\tgap: 12px;
  1246. \t\t\tpadding: 16px 40px;
  1247. \t\t\tbackground: linear-gradient(135deg, #ffa200 0%, #ff6b00 100%);
  1248. \t\t\tcolor: white;
  1249. \t\t\ttext-decoration: none;
  1250. \t\t\tborder-radius: 50px;
  1251. \t\t\tfont-weight: 600;
  1252. \t\t\tfont-size: 16px;
  1253. \t\t\ttransition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
  1254. \t\t\tbox-shadow: 0 4px 15px rgba(255, 162, 0, 0.3);
  1255. \t\t\tposition: relative;
  1256. \t\t\toverflow: hidden;
  1257. \t\t}
  1258. \t\t.btn-view-all-products::before {
  1259. \t\t\tcontent: '';
  1260. \t\t\tposition: absolute;
  1261. \t\t\ttop: 0;
  1262. \t\t\tleft: -100%;
  1263. \t\t\twidth: 100%;
  1264. \t\t\theight: 100%;
  1265. \t\t\tbackground: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.3), transparent);
  1266. \t\t\ttransition: left 0.5s ease;
  1267. \t\t}
  1268. \t\t.btn-view-all-products:hover::before {
  1269. \t\t\tleft: 100%;
  1270. \t\t}
  1271. \t\t.btn-view-all-products:hover {
  1272. \t\t\ttransform: translateY(-3px);
  1273. \t\t\tbox-shadow: 0 8px 25px rgba(255, 162, 0, 0.5);
  1274. \t\t\tcolor: white;
  1275. \t\t}
  1276. \t\t.btn-view-all-products:active {
  1277. \t\t\ttransform: translateY(-1px);
  1278. \t\t}
  1279. \t\t.btn-view-all-products i {
  1280. \t\t\tfont-size: 18px;
  1281. \t\t\ttransition: transform 0.3s ease;
  1282. \t\t}
  1283. \t\t.btn-view-all-products:hover i {
  1284. \t\t\ttransform: translateX(5px);
  1285. \t\t}
  1286. \t\t.btn-view-all-products span {
  1287. \t\t\tposition: relative;
  1288. \t\t\tz-index: 1;
  1289. \t\t}
  1290. \t\t/* Responsive */
  1291. \t\t@media(max-width: 767px) {
  1292. \t\t\t.btn-view-all-products {
  1293. \t\t\t\tpadding: 14px 30px;
  1294. \t\t\t\tfont-size: 14px;
  1295. \t\t\t}
  1296. \t\t}
  1297. \t\t/* Responsive */
  1298. \t\t@media(max-width: 767px) {
  1299. \t\t\t.featured-gallery-grid {
  1300. \t\t\t\tgap: 10px;
  1301. \t\t\t}
  1302. \t\t\t.featured-gallery-info {
  1303. \t\t\t\tpadding: 10px;
  1304. \t\t\t}
  1305. \t\t\t.featured-gallery-title {
  1306. \t\t\t\tfont-size: 13px;
  1307. \t\t\t\tmin-height: 32px;
  1308. \t\t\t}
  1309. \t\t\t.featured-gallery-price {
  1310. \t\t\t\tfont-size: 14px;
  1311. \t\t\t}
  1312. \t\t}
  1313. \t\t/* Styles pour les grilles de produits Nouveautés */
  1314. \t\t.latest-products-grid {
  1315. \t\t\tmargin-top: 30px;
  1316. \t\t}
  1317. \t\t.product-card-modern {
  1318. \t\t\tbackground: white;
  1319. \t\t\tborder-radius: 12px;
  1320. \t\t\toverflow: hidden;
  1321. \t\t\tbox-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
  1322. \t\t\ttransition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
  1323. \t\t\theight: 100%;
  1324. \t\t\tdisplay: flex;
  1325. \t\t\tflex-direction: column;
  1326. \t\t\tborder: 1px solid #f0f0f0;
  1327. \t\t}
  1328. \t\t.product-card-modern:hover {
  1329. \t\t\ttransform: translateY(-8px);
  1330. \t\t\tbox-shadow: 0 8px 24px rgba(0, 0, 0, 0.15);
  1331. \t\t\tborder-color: #ffa200;
  1332. \t\t}
  1333. \t\t.product-image-wrapper {
  1334. \t\t\tposition: relative;
  1335. \t\t\twidth: 100%;
  1336. \t\t\tpadding-top: 75%; /* Ratio 4:3 */
  1337. \t\t\toverflow: hidden;
  1338. \t\t\tbackground: #f8f9fa;
  1339. \t\t}
  1340. \t\t.product-image {
  1341. \t\t\tposition: absolute;
  1342. \t\t\ttop: 0;
  1343. \t\t\tleft: 0;
  1344. \t\t\twidth: 100%;
  1345. \t\t\theight: 100%;
  1346. \t\t\tbackground-size: cover;
  1347. \t\t\tbackground-position: center;
  1348. \t\t\ttransition: transform 0.5s ease;
  1349. \t\t}
  1350. \t\t.product-card-modern:hover .product-image {
  1351. \t\t\ttransform: scale(1.1);
  1352. \t\t}
  1353. \t\t.product-badge-modern {
  1354. \t\t\tposition: absolute;
  1355. \t\t\ttop: 10px;
  1356. \t\t\tright: 10px;
  1357. \t\t\tbackground: linear-gradient(135deg, #ffa200 0%, #ff6b00 100%);
  1358. \t\t\tcolor: white;
  1359. \t\t\tpadding: 6px 12px;
  1360. \t\t\tborder-radius: 20px;
  1361. \t\t\tfont-size: 12px;
  1362. \t\t\tfont-weight: 600;
  1363. \t\t\tz-index: 2;
  1364. \t\t\tbox-shadow: 0 2px 8px rgba(255, 162, 0, 0.3);
  1365. \t\t}
  1366. \t\t.product-badge-modern.new-badge {
  1367. \t\t\tbackground: linear-gradient(135deg, #28a745 0%, #20c997 100%);
  1368. \t\t}
  1369. \t\t.product-overlay {
  1370. \t\t\tposition: absolute;
  1371. \t\t\ttop: 0;
  1372. \t\t\tleft: 0;
  1373. \t\t\twidth: 100%;
  1374. \t\t\theight: 100%;
  1375. \t\t\tbackground: rgba(0, 0, 0, 0.5);
  1376. \t\t\tdisplay: flex;
  1377. \t\t\talign-items: center;
  1378. \t\t\tjustify-content: center;
  1379. \t\t\topacity: 0;
  1380. \t\t\ttransition: opacity 0.3s ease;
  1381. \t\t\tz-index: 1;
  1382. \t\t}
  1383. \t\t.product-card-modern:hover .product-overlay {
  1384. \t\t\topacity: 1;
  1385. \t\t}
  1386. \t\t.btn-view-product {
  1387. \t\t\tbackground: white;
  1388. \t\t\tcolor: #333;
  1389. \t\t\tpadding: 12px 24px;
  1390. \t\t\tborder-radius: 25px;
  1391. \t\t\ttext-decoration: none;
  1392. \t\t\tfont-weight: 600;
  1393. \t\t\tdisplay: flex;
  1394. \t\t\talign-items: center;
  1395. \t\t\tgap: 8px;
  1396. \t\t\ttransition: all 0.3s ease;
  1397. \t\t\tbox-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
  1398. \t\t}
  1399. \t\t.btn-view-product:hover {
  1400. \t\t\tbackground: #ffa200;
  1401. \t\t\tcolor: white;
  1402. \t\t\ttransform: scale(1.05);
  1403. \t\t}
  1404. \t\t.product-info-modern {
  1405. \t\t\tpadding: 16px;
  1406. \t\t\tflex-grow: 1;
  1407. \t\t\tdisplay: flex;
  1408. \t\t\tflex-direction: column;
  1409. \t\t}
  1410. \t\t.product-title-modern {
  1411. \t\t\tmargin: 0 0 8px;
  1412. \t\t\tfont-size: 16px;
  1413. \t\t\tfont-weight: 600;
  1414. \t\t\tline-height: 1.4;
  1415. \t\t}
  1416. \t\t.product-title-modern a {
  1417. \t\t\tcolor: #333;
  1418. \t\t\ttext-decoration: none;
  1419. \t\t\ttransition: color 0.3s ease;
  1420. \t\t}
  1421. \t\t.product-title-modern a:hover {
  1422. \t\t\tcolor: #ffa200;
  1423. \t\t}
  1424. \t\t.product-price-modern {
  1425. \t\t\tfont-size: 20px;
  1426. \t\t\tfont-weight: 700;
  1427. \t\t\tcolor: #ffa200;
  1428. \t\t\tmargin-bottom: 8px;
  1429. \t\t}
  1430. \t\t.product-shop-modern {
  1431. \t\t\tdisplay: flex;
  1432. \t\t\talign-items: center;
  1433. \t\t\tgap: 6px;
  1434. \t\t\tfont-size: 13px;
  1435. \t\t\tcolor: #666;
  1436. \t\t\tmargin-bottom: 8px;
  1437. \t\t}
  1438. \t\t.product-shop-modern i {
  1439. \t\t\tcolor: #ffa200;
  1440. \t\t}
  1441. \t\t.shop-link {
  1442. \t\t\tcolor: #666;
  1443. \t\t\ttext-decoration: none;
  1444. \t\t\ttransition: color 0.3s ease;
  1445. \t\t}
  1446. \t\t.shop-link:hover {
  1447. \t\t\tcolor: #ffa200;
  1448. \t\t}
  1449. \t\t.product-rating-modern {
  1450. \t\t\tdisplay: flex;
  1451. \t\t\talign-items: center;
  1452. \t\t\tgap: 4px;
  1453. \t\t\tmargin-top: auto;
  1454. \t\t}
  1455. \t\t.product-rating-modern .fa-star.active {
  1456. \t\t\tcolor: #ffc107;
  1457. \t\t}
  1458. \t\t.product-rating-modern .fa-star-o {
  1459. \t\t\tcolor: #ddd;
  1460. \t\t}
  1461. \t\t.rating-count {
  1462. \t\t\tfont-size: 12px;
  1463. \t\t\tcolor: #666;
  1464. \t\t\tmargin-left: 4px;
  1465. \t\t}
  1466. \t\t.product-views-modern {
  1467. \t\t\tdisplay: flex;
  1468. \t\t\talign-items: center;
  1469. \t\t\tgap: 6px;
  1470. \t\t\tfont-size: 12px;
  1471. \t\t\tcolor: #666;
  1472. \t\t\tmargin-top: auto;
  1473. \t\t}
  1474. \t\t.product-views-modern i {
  1475. \t\t\tcolor: #999;
  1476. \t\t}
  1477. \t\t/* Style des cartes produits */
  1478. \t\t.product-card {
  1479. \t\t\tbackground: white;
  1480. \t\t\tborder-radius: 15px;
  1481. \t\t\toverflow: hidden;
  1482. \t\t\tbox-shadow: 0 5px 20px rgba(0, 0, 0, 0.1);
  1483. \t\t\ttransition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
  1484. \t\t\theight: 100%;
  1485. \t\t\tdisplay: flex;
  1486. \t\t\tflex-direction: column;
  1487. \t\t}
  1488. \t\t.product-card:hover {
  1489. \t\t\tbox-shadow: 0 15px 40px rgba(0, 0, 0, 0.2);
  1490. \t\t\ttransform: translateY(-5px);
  1491. \t\t}
  1492. \t\t.product-image {
  1493. \t\t\twidth: 100%;
  1494. \t\t\theight: 250px;
  1495. \t\t\tbackground-size: cover;
  1496. \t\t\tbackground-position: center;
  1497. \t\t\tposition: relative;
  1498. \t\t\toverflow: hidden;
  1499. \t\t}
  1500. \t\t.product-image::before {
  1501. \t\t\tcontent: '';
  1502. \t\t\tposition: absolute;
  1503. \t\t\ttop: 0;
  1504. \t\t\tleft: -100%;
  1505. \t\t\twidth: 100%;
  1506. \t\t\theight: 100%;
  1507. \t\t\tbackground: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.3), transparent);
  1508. \t\t\ttransition: left 0.6s ease;
  1509. \t\t}
  1510. \t\t.product-card:hover .product-image::before {
  1511. \t\t\tleft: 100%;
  1512. \t\t}
  1513. \t\t.product-badge {
  1514. \t\t\tposition: absolute;
  1515. \t\t\ttop: 15px;
  1516. \t\t\tright: 15px;
  1517. \t\t\tbackground: linear-gradient(135deg, #ffa200 0%, #ff6b00 100%);
  1518. \t\t\tcolor: white;
  1519. \t\t\tpadding: 8px 15px;
  1520. \t\t\tborder-radius: 20px;
  1521. \t\t\tfont-size: 0.85rem;
  1522. \t\t\tfont-weight: 600;
  1523. \t\t\tbox-shadow: 0 4px 10px rgba(255, 162, 0, 0.4);
  1524. \t\t\tz-index: 1;
  1525. \t\t}
  1526. \t\t.product-info {
  1527. \t\t\tpadding: 20px;
  1528. \t\t\tflex-grow: 1;
  1529. \t\t\tdisplay: flex;
  1530. \t\t\tflex-direction: column;
  1531. \t\t}
  1532. \t\t.product-title {
  1533. \t\t\tfont-size: 1.1rem;
  1534. \t\t\tfont-weight: 600;
  1535. \t\t\tcolor: #2c3e50;
  1536. \t\t\tmargin-bottom: 10px;
  1537. \t\t\tline-height: 1.4;
  1538. \t\t\tdisplay: -webkit-box;
  1539. \t\t\t-webkit-line-clamp: 2;
  1540. \t\t\t-webkit-box-orient: vertical;
  1541. \t\t\toverflow: hidden;
  1542. \t\t}
  1543. \t\t.product-price {
  1544. \t\t\tfont-size: 1.5rem;
  1545. \t\t\tfont-weight: 800;
  1546. \t\t\tcolor: #ffa200;
  1547. \t\t\tmargin-bottom: 15px;
  1548. \t\t}
  1549. \t\t.product-shop {
  1550. \t\t\tfont-size: 0.9rem;
  1551. \t\t\tcolor: #666;
  1552. \t\t\tmargin-bottom: 15px;
  1553. \t\t}
  1554. \t\t.product-shop a {
  1555. \t\t\tcolor: #667eea;
  1556. \t\t\ttext-decoration: none;
  1557. \t\t\ttransition: color 0.3s ease;
  1558. \t\t}
  1559. \t\t.product-shop a:hover {
  1560. \t\t\tcolor: #ffa200;
  1561. \t\t}
  1562. \t\t/* Newsletter Modern Styles */
  1563. \t\t.newsletter-section-modern {
  1564. \t\t\tbackground: linear-gradient(135deg, #ffa200 0%, #095ad3 100%);
  1565. \t\t\tposition: relative;
  1566. \t\t\toverflow: hidden;
  1567. \t\t}
  1568. \t\t.newsletter-section-modern::before {
  1569. \t\t\tcontent: '';
  1570. \t\t\tposition: absolute;
  1571. \t\t\ttop: -50%;
  1572. \t\t\tright: -50%;
  1573. \t\t\twidth: 100%;
  1574. \t\t\theight: 200%;
  1575. \t\t\tbackground: radial-gradient(circle, rgba(255,255,255,0.1) 0%, transparent 70%);
  1576. \t\t\tanimation: pulse 3s ease-in-out infinite;
  1577. \t\t}
  1578. \t\t@keyframes pulse {
  1579. \t\t\t0,
  1580. \t\t\t100% {
  1581. \t\t\t\ttransform: scale(1);
  1582. \t\t\t\topacity: 0.5;
  1583. \t\t\t}
  1584. \t\t\t50% {
  1585. \t\t\t\ttransform: scale(1.1);
  1586. \t\t\t\topacity: 0.8;
  1587. \t\t\t}
  1588. \t\t}
  1589. \t\t.newsletter-card {
  1590. \t\t\tbackground: white;
  1591. \t\t\tborder-radius: 20px;
  1592. \t\t\tpadding: 40px;
  1593. \t\t\tbox-shadow: 0 10px 40px rgba(0, 0, 0, 0.1);
  1594. \t\t\tposition: relative;
  1595. \t\t\tz-index: 1;
  1596. \t\t}
  1597. \t\t.newsletter-title {
  1598. \t\t\tfont-size: 2.5rem;
  1599. \t\t\tfont-weight: bold;
  1600. \t\t\tcolor: #333;
  1601. \t\t}
  1602. \t\t.newsletter-description {
  1603. \t\t\tcolor: #666;
  1604. \t\t\tfont-size: 1.1rem;
  1605. \t\t\tline-height: 1.8;
  1606. \t\t}
  1607. \t\t.newsletter-form-modern {
  1608. \t\t\tposition: relative;
  1609. \t\t}
  1610. \t\t.newsletter-input-wrapper {
  1611. \t\t\tdisplay: flex;
  1612. \t\t\tgap: 10px;
  1613. \t\t\tmargin-bottom: 15px;
  1614. \t\t}
  1615. \t\t.newsletter-input {
  1616. \t\t\tflex: 1;
  1617. \t\t\tpadding: 18px 25px;
  1618. \t\t\tborder: 2px solid #e0e0e0;
  1619. \t\t\tborder-radius: 50px;
  1620. \t\t\tfont-size: 1rem;
  1621. \t\t\ttransition: all 0.3s ease;
  1622. \t\t}
  1623. \t\t.newsletter-input:focus {
  1624. \t\t\toutline: none;
  1625. \t\t\tborder-color: #ffa200;
  1626. \t\t\tbox-shadow: 0 0 0 3px rgba(255, 162, 0, 0.1);
  1627. \t\t}
  1628. \t\t.newsletter-button {
  1629. \t\t\tpadding: 18px 35px;
  1630. \t\t\tbackground: linear-gradient(135deg, #ffa200 0%, #e8910a 100%);
  1631. \t\t\tcolor: white;
  1632. \t\t\tborder: none;
  1633. \t\t\tborder-radius: 50px;
  1634. \t\t\tfont-weight: 600;
  1635. \t\t\tfont-size: 1rem;
  1636. \t\t\tcursor: pointer;
  1637. \t\t\ttransition: all 0.3s ease;
  1638. \t\t\twhite-space: nowrap;
  1639. \t\t}
  1640. \t\t.newsletter-button:hover {
  1641. \t\t\ttransform: translateY(-2px);
  1642. \t\t\tbox-shadow: 0 5px 20px rgba(255, 162, 0, 0.4);
  1643. \t\t}
  1644. \t\t.newsletter-privacy {
  1645. \t\t\tcolor: #999;
  1646. \t\t}
  1647. \t\t/* CTA Modern Styles */
  1648. \t\t.cta-section-modern {
  1649. \t\t\tbackground: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
  1650. \t\t}
  1651. \t\t.cta-card {
  1652. \t\t\tbackground: white;
  1653. \t\t\tborder-radius: 25px;
  1654. \t\t\tpadding: 50px;
  1655. \t\t\tbox-shadow: 0 15px 50px rgba(0, 0, 0, 0.1);
  1656. \t\t\tposition: relative;
  1657. \t\t\toverflow: hidden;
  1658. \t\t}
  1659. \t\t.cta-card::before {
  1660. \t\t\tcontent: '';
  1661. \t\t\tposition: absolute;
  1662. \t\t\ttop: -50px;
  1663. \t\t\tright: -50px;
  1664. \t\t\twidth: 200px;
  1665. \t\t\theight: 200px;
  1666. \t\t\tbackground: linear-gradient(135deg, rgba(255,162,0,0.1) 0%, rgba(255,162,0,0.05) 100%);
  1667. \t\t\tborder-radius: 50%;
  1668. \t\t}
  1669. \t\t.cta-badge {
  1670. \t\t\tdisplay: inline-block;
  1671. \t\t\tpadding: 8px 20px;
  1672. \t\t\tbackground: linear-gradient(135deg, #ffa200 0%, #e8910a 100%);
  1673. \t\t\tcolor: white;
  1674. \t\t\tborder-radius: 50px;
  1675. \t\t\tfont-size: 0.9rem;
  1676. \t\t\tfont-weight: 600;
  1677. \t\t\tmargin-bottom: 20px;
  1678. \t\t}
  1679. \t\t.cta-title {
  1680. \t\t\tfont-size: 3rem;
  1681. \t\t\tfont-weight: bold;
  1682. \t\t\tcolor: #333;
  1683. \t\t\tmargin-bottom: 20px;
  1684. \t\t}
  1685. \t\t.cta-description {
  1686. \t\t\tfont-size: 1.2rem;
  1687. \t\t\tcolor: #666;
  1688. \t\t\tline-height: 1.8;
  1689. \t\t}
  1690. \t\t.cta-features {
  1691. \t\t\tdisplay: flex;
  1692. \t\t\tflex-direction: column;
  1693. \t\t\tgap: 15px;
  1694. \t\t}
  1695. \t\t.cta-feature-item {
  1696. \t\t\tdisplay: flex;
  1697. \t\t\talign-items: center;
  1698. \t\t\tgap: 10px;
  1699. \t\t\tfont-size: 1rem;
  1700. \t\t\tcolor: #555;
  1701. \t\t}
  1702. \t\t.cta-feature-item i {
  1703. \t\t\tcolor: #ffa200;
  1704. \t\t\tfont-size: 1.3rem;
  1705. \t\t}
  1706. \t\t.cta-buttons {
  1707. \t\t\tdisplay: flex;
  1708. \t\t\tgap: 15px;
  1709. \t\t\tflex-wrap: wrap;
  1710. \t\t}
  1711. \t\t.cta-button-primary {
  1712. \t\t\tpadding: 15px 35px;
  1713. \t\t\tbackground: linear-gradient(135deg, #ffa200 0%, #e8910a 100%);
  1714. \t\t\tcolor: white;
  1715. \t\t\tborder: none;
  1716. \t\t\tborder-radius: 50px;
  1717. \t\t\tfont-weight: 600;
  1718. \t\t\tfont-size: 1.1rem;
  1719. \t\t\ttransition: all 0.3s ease;
  1720. \t\t}
  1721. \t\t.cta-button-primary:hover {
  1722. \t\t\ttransform: translateY(-3px);
  1723. \t\t\tbox-shadow: 0 8px 25px rgba(255, 162, 0, 0.4);
  1724. \t\t\tcolor: white;
  1725. \t\t}
  1726. \t\t.cta-button-secondary {
  1727. \t\t\tpadding: 15px 35px;
  1728. \t\t\tbackground: white;
  1729. \t\t\tcolor: #ffa200;
  1730. \t\t\tborder: 2px solid #ffa200;
  1731. \t\t\tborder-radius: 50px;
  1732. \t\t\tfont-weight: 600;
  1733. \t\t\tfont-size: 1.1rem;
  1734. \t\t\ttransition: all 0.3s ease;
  1735. \t\t}
  1736. \t\t.cta-button-secondary:hover {
  1737. \t\t\tbackground: #ffa200;
  1738. \t\t\tcolor: white;
  1739. \t\t\ttransform: translateY(-3px);
  1740. \t\t\tbox-shadow: 0 8px 25px rgba(255, 162, 0, 0.3);
  1741. \t\t}
  1742. \t\t.cta-image-wrapper {
  1743. \t\t\tposition: relative;
  1744. \t\t}
  1745. \t\t.cta-decoration {
  1746. \t\t\tposition: absolute;
  1747. \t\t\ttop: -20px;
  1748. \t\t\tright: -20px;
  1749. \t\t\twidth: 150px;
  1750. \t\t\theight: 150px;
  1751. \t\t\tbackground: linear-gradient(135deg, rgba(255,162,0,0.2) 0%, rgba(255,162,0,0.05) 100%);
  1752. \t\t\tborder-radius: 50%;
  1753. \t\t\tz-index: 0;
  1754. \t\t}
  1755. \t\t.cta-image {
  1756. \t\t\tposition: relative;
  1757. \t\t\tz-index: 1;
  1758. \t\t\tmax-width: 100%;
  1759. \t\t\theight: auto;
  1760. \t\t\tborder-radius: 15px;
  1761. \t\t}
  1762. \t\t.home-section {
  1763. \t\t\tposition: relative;
  1764. \t\t\ttransition: background-color 0.3s ease, color 0.3s ease;
  1765. \t\t}
  1766. \t\t.home-section::before {
  1767. \t\t\tcontent: '';
  1768. \t\t\tposition: absolute;
  1769. \t\t\tinset: 0;
  1770. \t\t\tpointer-events: none;
  1771. \t\t\topacity: 0;
  1772. \t\t\ttransition: opacity 0.3s ease;
  1773. \t\t}
  1774. \t\thtml[data-theme=\"dark\"] .home-section {
  1775. \t\t\tbackground: linear-gradient(180deg, rgba(17, 24, 39, 0.98) 0%, rgba(15, 23, 42, 0.95) 100%) !important;
  1776. \t\t\tcolor: var(--mk-text) !important;
  1777. \t\t\tborder-top: 1px solid rgba(148, 163, 184, 0.08);
  1778. \t\t\tborder-bottom: 1px solid rgba(148, 163, 184, 0.08);
  1779. \t\t}
  1780. \t\thtml[data-theme=\"dark\"] .home-section--alt {
  1781. \t\t\tbackground: linear-gradient(180deg, rgba(12, 18, 30, 0.98) 0%, rgba(24, 34, 53, 0.95) 100%) !important;
  1782. \t\t}
  1783. \t\thtml[data-theme=\"dark\"] .home-section--alt::before {
  1784. \t\t\topacity: 1;
  1785. \t\t\tbackground: linear-gradient(
  1786. \t\t\t\t180deg,
  1787. \t\t\t\trgba(255, 255, 255, 0.015) 0%,
  1788. \t\t\t\trgba(255, 255, 255, 0.015) 50%,
  1789. \t\t\t\trgba(255, 255, 255, 0.03) 50%,
  1790. \t\t\t\trgba(255, 255, 255, 0.03) 100%
  1791. \t\t\t);
  1792. \t\t\tbackground-size: 100% 12px;
  1793. \t\t}
  1794. \t\thtml[data-theme=\"dark\"] .home-section .section-title h2,
  1795. \t\thtml[data-theme=\"dark\"] .home-section .category-content h5,
  1796. \t\thtml[data-theme=\"dark\"] .home-section .product-title-modern,
  1797. \t\thtml[data-theme=\"dark\"] .home-section .product-title-modern a,
  1798. \t\thtml[data-theme=\"dark\"] .home-section .product-title,
  1799. \t\thtml[data-theme=\"dark\"] .home-section .product-title a,
  1800. \t\thtml[data-theme=\"dark\"] .home-section .featured-gallery-title,
  1801. \t\thtml[data-theme=\"dark\"] .home-section .featured-gallery-title a,
  1802. \t\thtml[data-theme=\"dark\"] .home-section .newsletter-title,
  1803. \t\thtml[data-theme=\"dark\"] .home-section .cta-title,
  1804. \t\thtml[data-theme=\"dark\"] .home-section .feature-card h5,
  1805. \t\thtml[data-theme=\"dark\"] .home-section .banner-title-modern {
  1806. \t\t\tcolor: var(--mk-text) !important;
  1807. \t\t\t-webkit-text-fill-color: currentColor !important;
  1808. \t\t\tbackground: none !important;
  1809. \t\t}
  1810. \t\thtml[data-theme=\"dark\"] .home-section .section-title p,
  1811. \t\thtml[data-theme=\"dark\"] .home-section .category-content p,
  1812. \t\thtml[data-theme=\"dark\"] .home-section .product-shop-modern,
  1813. \t\thtml[data-theme=\"dark\"] .home-section .rating-count,
  1814. \t\thtml[data-theme=\"dark\"] .home-section .product-views-modern,
  1815. \t\thtml[data-theme=\"dark\"] .home-section .newsletter-description,
  1816. \t\thtml[data-theme=\"dark\"] .home-section .newsletter-privacy,
  1817. \t\thtml[data-theme=\"dark\"] .home-section .cta-description,
  1818. \t\thtml[data-theme=\"dark\"] .home-section .cta-feature-item,
  1819. \t\thtml[data-theme=\"dark\"] .home-section .banner-description-modern,
  1820. \t\thtml[data-theme=\"dark\"] .home-section .price-label {
  1821. \t\t\tcolor: var(--mk-text-soft) !important;
  1822. \t\t}
  1823. \t\thtml[data-theme=\"dark\"] .home-section .text-muted,
  1824. \t\thtml[data-theme=\"dark\"] .home-section small.text-muted,
  1825. \t\thtml[data-theme=\"dark\"] .home-section .small.text-muted {
  1826. \t\t\tcolor: var(--mk-text-muted) !important;
  1827. \t\t}
  1828. \t\thtml[data-theme=\"dark\"] .home-section .stats-card,
  1829. \t\thtml[data-theme=\"dark\"] .home-section .category-card-custom,
  1830. \t\thtml[data-theme=\"dark\"] .home-section .product-card-modern,
  1831. \t\thtml[data-theme=\"dark\"] .home-section .product-card,
  1832. \t\thtml[data-theme=\"dark\"] .home-section .feature-card,
  1833. \t\thtml[data-theme=\"dark\"] .home-section .newsletter-card,
  1834. \t\thtml[data-theme=\"dark\"] .home-section .cta-card,
  1835. \t\thtml[data-theme=\"dark\"] .home-section .single-product,
  1836. \t\thtml[data-theme=\"dark\"] .home-section .banner-content-modern,
  1837. \t\thtml[data-theme=\"dark\"] .home-section .featured-gallery-card {
  1838. \t\t\tbackground: var(--mk-surface-strong) !important;
  1839. \t\t\tcolor: var(--mk-text) !important;
  1840. \t\t\tborder-color: var(--mk-border) !important;
  1841. \t\t\tbox-shadow: 0 20px 45px rgba(2, 6, 23, 0.28) !important;
  1842. \t\t}
  1843. \t\thtml[data-theme=\"dark\"] .home-section--alt .stats-card,
  1844. \t\thtml[data-theme=\"dark\"] .home-section--alt .category-card-custom,
  1845. \t\thtml[data-theme=\"dark\"] .home-section--alt .product-card-modern,
  1846. \t\thtml[data-theme=\"dark\"] .home-section--alt .product-card,
  1847. \t\thtml[data-theme=\"dark\"] .home-section--alt .feature-card,
  1848. \t\thtml[data-theme=\"dark\"] .home-section--alt .newsletter-card,
  1849. \t\thtml[data-theme=\"dark\"] .home-section--alt .cta-card,
  1850. \t\thtml[data-theme=\"dark\"] .home-section--alt .single-product,
  1851. \t\thtml[data-theme=\"dark\"] .home-section--alt .banner-content-modern,
  1852. \t\thtml[data-theme=\"dark\"] .home-section--alt .featured-gallery-card {
  1853. \t\t\tbackground: rgba(31, 41, 55, 0.9) !important;
  1854. \t\t}
  1855. \t\thtml[data-theme=\"dark\"] .home-section .product-image-wrapper,
  1856. \t\thtml[data-theme=\"dark\"] .home-section .featured-gallery-image-wrapper,
  1857. \t\thtml[data-theme=\"dark\"] .home-section .product-image-container,
  1858. \t\thtml[data-theme=\"dark\"] .home-section .banner-image-wrapper {
  1859. \t\t\tbackground: #0f172a !important;
  1860. \t\t\tborder-color: var(--mk-border) !important;
  1861. \t\t}
  1862. \t\thtml[data-theme=\"dark\"] .home-section .shop-link,
  1863. \t\thtml[data-theme=\"dark\"] .home-section .product-shop a,
  1864. \t\thtml[data-theme=\"dark\"] .home-section .product-shop-modern a,
  1865. \t\thtml[data-theme=\"dark\"] .home-section .featured-gallery-view-btn {
  1866. \t\t\tcolor: #93c5fd !important;
  1867. \t\t}
  1868. \t\thtml[data-theme=\"dark\"] .home-section .shop-link:hover,
  1869. \t\thtml[data-theme=\"dark\"] .home-section .product-shop a:hover,
  1870. \t\thtml[data-theme=\"dark\"] .home-section .product-shop-modern a:hover {
  1871. \t\t\tcolor: var(--mk-primary) !important;
  1872. \t\t}
  1873. \t\thtml[data-theme=\"dark\"] .home-section .banner-price-modern {
  1874. \t\t\tbackground: linear-gradient(135deg, rgba(15, 23, 42, 0.96) 0%, rgba(31, 41, 55, 0.94) 100%) !important;
  1875. \t\t\tborder-left-color: var(--mk-primary) !important;
  1876. \t\t}
  1877. \t\thtml[data-theme=\"dark\"] .home-section .newsletter-input {
  1878. \t\t\tbackground: #0f172a !important;
  1879. \t\t\tborder-color: var(--mk-border) !important;
  1880. \t\t\tcolor: var(--mk-text) !important;
  1881. \t\t}
  1882. \t\thtml[data-theme=\"dark\"] .home-section .newsletter-input::placeholder {
  1883. \t\t\tcolor: var(--mk-text-muted) !important;
  1884. \t\t}
  1885. \t\thtml[data-theme=\"dark\"] .home-section .cta-section-modern,
  1886. \t\thtml[data-theme=\"dark\"] .home-section.cta-section-modern,
  1887. \t\thtml[data-theme=\"dark\"] .home-section.newsletter-section-modern {
  1888. \t\t\tcolor: var(--mk-text) !important;
  1889. \t\t}
  1890. \t</style>
  1891. ";
  1892.         
  1893.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  1894.         
  1895.         $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  1896.         yield from [];
  1897.     }
  1898.     // line 2051
  1899.     /**
  1900.      * @return iterable<null|scalar|\Stringable>
  1901.      */
  1902.     public function block_body(array $context, array $blocks = []): iterable
  1903.     {
  1904.         $macros $this->macros;
  1905.         $__internal_5a27a8ba21ca79b61932376b2fa922d2 $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  1906.         $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block""body"));
  1907.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  1908.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block""body"));
  1909.         // line 2052
  1910.         yield "\t<!-- Hero Section -->
  1911. \t<!-- start banner Area avec produits en vedette -->
  1912. \t\t";
  1913.         // line 2054
  1914.         if ((Twig\Extension\CoreExtension::length($this->env->getCharset(), ($context["featuredProducts"] ?? null)) > 0)) {
  1915.             // line 2055
  1916.             yield "\t\t\t<section class=\"banner-area-modern\"> <div class=\"banner-carousel-wrapper\">
  1917. \t\t\t\t<div class=\"active-banner-slider owl-carousel\" style=\"margin-top: 100px;\">
  1918. \t\t\t\t\t";
  1919.             // line 2057
  1920.             $context['_parent'] = $context;
  1921.             $context['_seq'] = CoreExtension::ensureTraversable(($context["featuredProducts"] ?? null));
  1922.             $context['loop'] = [
  1923.               'parent' => $context['_parent'],
  1924.               'index0' => 0,
  1925.               'index'  => 1,
  1926.               'first'  => true,
  1927.             ];
  1928.             if (is_array($context['_seq']) || (is_object($context['_seq']) && $context['_seq'] instanceof \Countable)) {
  1929.                 $length count($context['_seq']);
  1930.                 $context['loop']['revindex0'] = $length 1;
  1931.                 $context['loop']['revindex'] = $length;
  1932.                 $context['loop']['length'] = $length;
  1933.                 $context['loop']['last'] = === $length;
  1934.             }
  1935.             foreach ($context['_seq'] as $context["_key"] => $context["product"]) {
  1936.                 // line 2058
  1937.                 yield "\t\t\t\t\t\t<!-- single-slide -->
  1938. \t\t\t\t\t\t<div class=\"banner-slide-item\">
  1939. \t\t\t\t\t\t\t<div class=\"container\">
  1940. \t\t\t\t\t\t\t\t<div class=\"row align-items-center\">
  1941. \t\t\t\t\t\t\t\t\t<div class=\"col-lg-4 col-md-6 col-12\">
  1942. \t\t\t\t\t\t\t\t\t\t<div class=\"banner-content-modern\">
  1943. \t\t\t\t\t\t\t\t\t\t\t<div class=\"banner-badge\">
  1944. \t\t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-star\"></i>
  1945. \t\t\t\t\t\t\t\t\t\t\t\tProduit en vedette
  1946. \t\t\t\t\t\t\t\t\t\t\t</div>
  1947. \t\t\t\t\t\t\t\t\t\t\t<h1 class=\"banner-title-modern\">";
  1948.                 // line 2068
  1949.                 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source$context["product"], "name", [], "any"falsefalsefalse2068), "html"nulltrue);
  1950.                 yield "</h1>
  1951. \t\t\t\t\t\t\t\t\t\t\t<p class=\"banner-description-modern\">
  1952. \t\t\t\t\t\t\t\t\t\t\t\t";
  1953.                 // line 2070
  1954.                 yield (((($tmp CoreExtension::getAttribute($this->env$this->source$context["product"], "description", [], "any"falsefalsefalse2070)) && $tmp instanceof Markup ? (string) $tmp $tmp)) ? ($this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape((Twig\Extension\CoreExtension::slice($this->env->getCharset(), Twig\Extension\CoreExtension::striptags(CoreExtension::getAttribute($this->env$this->source$context["product"], "description", [], "any"falsefalsefalse2070)), 0120) . "..."), "html"nulltrue)) : ("Découvrez ce produit exclusif sur MaketOu"));
  1955.                 yield "
  1956. \t\t\t\t\t\t\t\t\t\t\t</p>
  1957. \t\t\t\t\t\t\t\t\t\t\t<div class=\"banner-price-modern\">
  1958. \t\t\t\t\t\t\t\t\t\t\t\t<span class=\"price-label\">Prix</span>
  1959. \t\t\t\t\t\t\t\t\t\t\t\t<span class=\"price-value\">";
  1960.                 // line 2074
  1961.                 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Twig\Extension\CoreExtension']->formatNumber(CoreExtension::getAttribute($this->env$this->source$context["product"], "price", [], "any"falsefalsefalse2074), 2"."" "), "html"nulltrue);
  1962.                 yield "
  1963. \t\t\t\t\t\t\t\t\t\t\t\t\tHTG</span>
  1964. \t\t\t\t\t\t\t\t\t\t\t</div>
  1965. \t\t\t\t\t\t\t\t\t\t\t<div class=\"banner-actions-modern\">
  1966. \t\t\t\t\t\t\t\t\t\t\t\t<a class=\"btn-banner-primary\" href=\"";
  1967.                 // line 2078
  1968.                 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("ui_product_show", ["slug" => CoreExtension::getAttribute($this->env$this->source$context["product"], "slug", [], "any"falsefalsefalse2078)]), "html"nulltrue);
  1969.                 yield "\">
  1970. \t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"btn-text\">Voir le produit</span>
  1971. \t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"btn-icon\">
  1972. \t\t\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-arrow-right\"></i>
  1973. \t\t\t\t\t\t\t\t\t\t\t\t\t</span>
  1974. \t\t\t\t\t\t\t\t\t\t\t\t</a>
  1975. \t\t\t\t\t\t\t\t\t\t\t\t";
  1976.                 // line 2084
  1977.                 if ((($tmp CoreExtension::getAttribute($this->env$this->source$context["product"], "shop", [], "any"falsefalsefalse2084)) && $tmp instanceof Markup ? (string) $tmp $tmp)) {
  1978.                     // line 2085
  1979.                     yield "\t\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"btn-banner-secondary\" href=\"";
  1980.                     yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("ui_shop_show", ["slug" => CoreExtension::getAttribute($this->env$this->sourceCoreExtension::getAttribute($this->env$this->source$context["product"], "shop", [], "any"falsefalsefalse2085), "slug", [], "any"falsefalsefalse2085)]), "html"nulltrue);
  1981.                     yield "\">
  1982. \t\t\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-store\"></i>
  1983. \t\t\t\t\t\t\t\t\t\t\t\t\t\t<span>";
  1984.                     // line 2087
  1985.                     yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->sourceCoreExtension::getAttribute($this->env$this->source$context["product"], "shop", [], "any"falsefalsefalse2087), "name", [], "any"falsefalsefalse2087), "html"nulltrue);
  1986.                     yield "</span>
  1987. \t\t\t\t\t\t\t\t\t\t\t\t\t</a>
  1988. \t\t\t\t\t\t\t\t\t\t\t\t";
  1989.                 }
  1990.                 // line 2090
  1991.                 yield "\t\t\t\t\t\t\t\t\t\t\t</div>
  1992. \t\t\t\t\t\t\t\t\t\t</div>
  1993. \t\t\t\t\t\t\t\t\t</div>
  1994. \t\t\t\t\t\t\t\t\t<div class=\"col-lg-8 col-md-6 col-12\">
  1995. \t\t\t\t\t\t\t\t\t\t<div class=\"banner-image-modern\">
  1996. \t\t\t\t\t\t\t\t\t\t\t<div class=\"banner-image-wrapper\">
  1997. \t\t\t\t\t\t\t\t\t\t\t\t";
  1998.                 // line 2096
  1999.                 if ((CoreExtension::getAttribute($this->env$this->source$context["product"], "images", [], "any"truetruefalse2096) && (Twig\Extension\CoreExtension::length($this->env->getCharset(), CoreExtension::getAttribute($this->env$this->source$context["product"], "images", [], "any"falsefalsefalse2096)) > 0))) {
  2000.                     // line 2097
  2001.                     yield "\t\t\t\t\t\t\t\t\t\t\t\t\t<img class=\"banner-img\" src=\"";
  2002.                     yield (((CoreExtension::getAttribute($this->env$this->sourceCoreExtension::getAttribute($this->env$this->source$context["product"], "images", [], "any"falsetruefalse2097), 0, [], "array"truetruefalse2097) && (($_v0 CoreExtension::getAttribute($this->env$this->source$context["product"], "images", [], "any"falsefalsefalse2097)) && is_array($_v0) || $_v0 instanceof ArrayAccess ? ($_v0[0] ?? null) : null))) ? ($this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl((($_v1 CoreExtension::getAttribute($this->env$this->source$context["product"], "images", [], "any"falsefalsefalse2097)) && is_array($_v1) || $_v1 instanceof ArrayAccess ? ($_v1[0] ?? null) : null)), "html"nulltrue)) : ($this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl((("ui/img/product/p" CoreExtension::getAttribute($this->env$this->source$context["loop"], "index", [], "any"falsefalsefalse2097)) . ".jpg")), "html"nulltrue)));
  2003.                     yield "\" alt=\"";
  2004.                     yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source$context["product"], "name", [], "any"falsefalsefalse2097), "html"nulltrue);
  2005.                     yield "\">
  2006. \t\t\t\t\t\t\t\t\t\t\t\t";
  2007.                 } else {
  2008.                     // line 2099
  2009.                     yield "\t\t\t\t\t\t\t\t\t\t\t\t\t<img class=\"banner-img\" src=\"";
  2010.                     yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl((("ui/img/product/p" CoreExtension::getAttribute($this->env$this->source$context["loop"], "index", [], "any"falsefalsefalse2099)) . ".jpg")), "html"nulltrue);
  2011.                     yield "\" alt=\"";
  2012.                     yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source$context["product"], "name", [], "any"falsefalsefalse2099), "html"nulltrue);
  2013.                     yield "\">
  2014. \t\t\t\t\t\t\t\t\t\t\t\t";
  2015.                 }
  2016.                 // line 2101
  2017.                 yield "\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"banner-image-overlay\"></div>
  2018. \t\t\t\t\t\t\t\t\t\t\t</div>
  2019. \t\t\t\t\t\t\t\t\t\t</div>
  2020. \t\t\t\t\t\t\t\t\t</div>
  2021. \t\t\t\t\t\t\t\t</div>
  2022. \t\t\t\t\t\t\t</div>
  2023. \t\t\t\t\t\t</div>
  2024. \t\t\t\t\t";
  2025.                 ++$context['loop']['index0'];
  2026.                 ++$context['loop']['index'];
  2027.                 $context['loop']['first'] = false;
  2028.                 if (isset($context['loop']['revindex0'], $context['loop']['revindex'])) {
  2029.                     --$context['loop']['revindex0'];
  2030.                     --$context['loop']['revindex'];
  2031.                     $context['loop']['last'] = === $context['loop']['revindex0'];
  2032.                 }
  2033.             }
  2034.             $_parent $context['_parent'];
  2035.             unset($context['_seq'], $context['_key'], $context['product'], $context['_parent'], $context['loop']);
  2036.             $context array_intersect_key($context$_parent) + $_parent;
  2037.             // line 2109
  2038.             yield "\t\t\t\t</div>
  2039. \t\t\t</div>
  2040. \t\t</section>
  2041. \t";
  2042.         } else {
  2043.             // line 2113
  2044.             yield "\t\t<!-- Banner par défaut si pas de produits en vedette -->
  2045. \t\t<section class=\"banner-area-modern\">
  2046. \t\t\t<div class=\"banner-carousel-wrapper\">
  2047. \t\t\t\t<div class=\"container\">
  2048. \t\t\t\t\t<div class=\"row align-items-center justify-content-center\">
  2049. \t\t\t\t\t\t<div class=\"col-lg-8 text-center\">
  2050. \t\t\t\t\t\t\t<div class=\"banner-content-modern\" style=\"margin-top: 140px;\">
  2051. \t\t\t\t\t\t\t\t<h1 class=\"banner-title-modern\">Bienvenue sur MaketOu</h1>
  2052. \t\t\t\t\t\t\t\t<p class=\"banner-description-modern\">Votre marketplace haïtienne</p>
  2053. \t\t\t\t\t\t\t</div>
  2054. \t\t\t\t\t\t</div>
  2055. \t\t\t\t\t</div>
  2056. \t\t\t\t</div>
  2057. \t\t\t</div>
  2058. \t\t</section>
  2059. \t";
  2060.         }
  2061.         // line 2129
  2062.         yield "\t<!-- End banner Area -->
  2063. \t<!-- Catégories de produits -->
  2064. \t";
  2065.         // line 2132
  2066.         if ((Twig\Extension\CoreExtension::length($this->env->getCharset(), ($context["categories"] ?? null)) > 0)) {
  2067.             // line 2133
  2068.             yield "\t\t<section class=\"py-5 home-section\">
  2069. \t\t\t<div class=\"container\">
  2070. \t\t\t\t<div class=\"section-title\">
  2071. \t\t\t\t\t<h2>Nos catégories</h2>
  2072. \t\t\t\t\t<p>Explorez nos différentes catégories de produits</p>
  2073. \t\t\t\t</div>
  2074. \t\t\t\t<div class=\"row\" id=\"productCategoriesContainer\">
  2075. \t\t\t\t\t";
  2076.             // line 2140
  2077.             $context['_parent'] = $context;
  2078.             $context['_seq'] = CoreExtension::ensureTraversable(Twig\Extension\CoreExtension::slice($this->env->getCharset(), ($context["categories"] ?? null), 08));
  2079.             $context['loop'] = [
  2080.               'parent' => $context['_parent'],
  2081.               'index0' => 0,
  2082.               'index'  => 1,
  2083.               'first'  => true,
  2084.             ];
  2085.             if (is_array($context['_seq']) || (is_object($context['_seq']) && $context['_seq'] instanceof \Countable)) {
  2086.                 $length count($context['_seq']);
  2087.                 $context['loop']['revindex0'] = $length 1;
  2088.                 $context['loop']['revindex'] = $length;
  2089.                 $context['loop']['length'] = $length;
  2090.                 $context['loop']['last'] = === $length;
  2091.             }
  2092.             foreach ($context['_seq'] as $context["_key"] => $context["category"]) {
  2093.                 // line 2141
  2094.                 yield "\t\t\t\t\t\t<div class=\"col-lg-3 col-md-4 col-sm-6 mb-4\">
  2095. \t\t\t\t\t\t\t<div class=\"category-card-custom d-flex flex-column h-100\">
  2096. \t\t\t\t\t\t\t\t<div class=\"category-image-wrapper\">
  2097. \t\t\t\t\t\t\t\t\t<div class=\"category-image\" style=\"background-image: url('";
  2098.                 // line 2144
  2099.                 if ((($tmp CoreExtension::getAttribute($this->env$this->source$context["category"], "bannerImage", [], "any"falsefalsefalse2144)) && $tmp instanceof Markup ? (string) $tmp $tmp)) {
  2100.                     yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl(("uploads/categories/banner/" CoreExtension::getAttribute($this->env$this->source$context["category"], "bannerImage", [], "any"falsefalsefalse2144))), "html"nulltrue);
  2101.                 } else {
  2102.                     yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl((("ui/img/category/cat-" CoreExtension::getAttribute($this->env$this->source$context["loop"], "index", [], "any"falsefalsefalse2144)) . ".jpg")), "html"nulltrue);
  2103.                 }
  2104.                 yield "')\">
  2105. \t\t\t\t\t\t\t\t\t\t<div class=\"category-overlay-custom\">
  2106. \t\t\t\t\t\t\t\t\t\t\t<div class=\"category-icon-wrapper\">
  2107. \t\t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-tag\" style=\"font-size: 3rem;\"></i>
  2108. \t\t\t\t\t\t\t\t\t\t\t\t<h4 class=\"mt-3\">";
  2109.                 // line 2148
  2110.                 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source$context["category"], "name", [], "any"falsefalsefalse2148), "html"nulltrue);
  2111.                 yield "</h4>
  2112. \t\t\t\t\t\t\t\t\t\t\t</div>
  2113. \t\t\t\t\t\t\t\t\t\t</div>
  2114. \t\t\t\t\t\t\t\t\t</div>
  2115. \t\t\t\t\t\t\t\t</div>
  2116. \t\t\t\t\t\t\t\t<div class=\"category-content p-3 d-flex flex-column flex-grow-1\">
  2117. \t\t\t\t\t\t\t\t\t<h5 class=\"mb-2\">";
  2118.                 // line 2154
  2119.                 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source$context["category"], "name", [], "any"falsefalsefalse2154), "html"nulltrue);
  2120.                 yield "</h5>
  2121. \t\t\t\t\t\t\t\t\t";
  2122.                 // line 2155
  2123.                 if ((($tmp CoreExtension::getAttribute($this->env$this->source$context["category"], "description", [], "any"falsefalsefalse2155)) && $tmp instanceof Markup ? (string) $tmp $tmp)) {
  2124.                     // line 2156
  2125.                     yield "\t\t\t\t\t\t\t\t\t\t<p class=\"text-muted mb-3 small\">";
  2126.                     yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(Twig\Extension\CoreExtension::slice($this->env->getCharset(), Twig\Extension\CoreExtension::striptags(CoreExtension::getAttribute($this->env$this->source$context["category"], "description", [], "any"falsefalsefalse2156)), 060), "html"nulltrue);
  2127.                     yield "
  2128. \t\t\t\t\t\t\t\t\t\t\t";
  2129.                     // line 2157
  2130.                     if ((Twig\Extension\CoreExtension::length($this->env->getCharset(), Twig\Extension\CoreExtension::striptags(CoreExtension::getAttribute($this->env$this->source$context["category"], "description", [], "any"falsefalsefalse2157))) > 60)) {
  2131.                         yield "...
  2132. \t\t\t\t\t\t\t\t\t\t\t";
  2133.                     }
  2134.                     // line 2159
  2135.                     yield "\t\t\t\t\t\t\t\t\t\t</p>
  2136. \t\t\t\t\t\t\t\t\t";
  2137.                 }
  2138.                 // line 2161
  2139.                 yield "\t\t\t\t\t\t\t\t\t<a href=\"";
  2140.                 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("ui_listing", ["category" => CoreExtension::getAttribute($this->env$this->source$context["category"], "slug", [], "any"falsefalsefalse2161)]), "html"nulltrue);
  2141.                 yield "\" class=\"btn btn-primary-custom btn-sm w-100 mt-auto\">
  2142. \t\t\t\t\t\t\t\t\t\tVoir les produits
  2143. \t\t\t\t\t\t\t\t\t</a>
  2144. \t\t\t\t\t\t\t\t</div>
  2145. \t\t\t\t\t\t\t</div>
  2146. \t\t\t\t\t\t</div>
  2147. \t\t\t\t\t";
  2148.                 ++$context['loop']['index0'];
  2149.                 ++$context['loop']['index'];
  2150.                 $context['loop']['first'] = false;
  2151.                 if (isset($context['loop']['revindex0'], $context['loop']['revindex'])) {
  2152.                     --$context['loop']['revindex0'];
  2153.                     --$context['loop']['revindex'];
  2154.                     $context['loop']['last'] = === $context['loop']['revindex0'];
  2155.                 }
  2156.             }
  2157.             $_parent $context['_parent'];
  2158.             unset($context['_seq'], $context['_key'], $context['category'], $context['_parent'], $context['loop']);
  2159.             $context array_intersect_key($context$_parent) + $_parent;
  2160.             // line 2168
  2161.             yield "\t\t\t\t</div>
  2162. \t\t\t</div>
  2163. \t\t</section>
  2164. \t";
  2165.         }
  2166.         // line 2172
  2167.         yield "
  2168. \t<!-- Catégories de boutiques -->
  2169. \t";
  2170.         // line 2174
  2171.         if ((Twig\Extension\CoreExtension::length($this->env->getCharset(), ($context["shopCategories"] ?? null)) > 0)) {
  2172.             // line 2175
  2173.             yield "\t\t<section class=\"py-5 bg-light home-section home-section--alt\">
  2174. \t\t\t<div class=\"container\">
  2175. \t\t\t\t<div class=\"section-title\">
  2176. \t\t\t\t\t<h2>Nos catégories de boutiques</h2>
  2177. \t\t\t\t\t<p>Explorez les différentes catégories de boutiques disponibles sur MaketOu</p>
  2178. \t\t\t\t</div>
  2179. \t\t\t\t<div class=\"row\" id=\"shopCategoriesContainer\">
  2180. \t\t\t\t\t";
  2181.             // line 2182
  2182.             $context['_parent'] = $context;
  2183.             $context['_seq'] = CoreExtension::ensureTraversable(Twig\Extension\CoreExtension::slice($this->env->getCharset(), ($context["shopCategories"] ?? null), 06));
  2184.             $context['loop'] = [
  2185.               'parent' => $context['_parent'],
  2186.               'index0' => 0,
  2187.               'index'  => 1,
  2188.               'first'  => true,
  2189.             ];
  2190.             if (is_array($context['_seq']) || (is_object($context['_seq']) && $context['_seq'] instanceof \Countable)) {
  2191.                 $length count($context['_seq']);
  2192.                 $context['loop']['revindex0'] = $length 1;
  2193.                 $context['loop']['revindex'] = $length;
  2194.                 $context['loop']['length'] = $length;
  2195.                 $context['loop']['last'] = === $length;
  2196.             }
  2197.             foreach ($context['_seq'] as $context["_key"] => $context["shopCategory"]) {
  2198.                 // line 2183
  2199.                 yield "\t\t\t\t\t\t<div class=\"col-lg-4 col-md-6 mb-4\">
  2200. \t\t\t\t\t\t\t<a href=\"";
  2201.                 // line 2184
  2202.                 yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("ui_shops_list");
  2203.                 yield "?category=";
  2204.                 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source$context["shopCategory"], "slug", [], "any"falsefalsefalse2184), "html"nulltrue);
  2205.                 yield "\" class=\"text-decoration-none h-100\" style=\"display: block;\">
  2206. \t\t\t\t\t\t\t\t<div class=\"category-card-custom shop-category-clickable d-flex flex-column h-100\">
  2207. \t\t\t\t\t\t\t\t\t<div class=\"category-image-wrapper\">
  2208. \t\t\t\t\t\t\t\t\t\t<div class=\"category-image\" style=\"background-image: url('";
  2209.                 // line 2187
  2210.                 if ((($tmp CoreExtension::getAttribute($this->env$this->source$context["shopCategory"], "bannerImage", [], "any"falsefalsefalse2187)) && $tmp instanceof Markup ? (string) $tmp $tmp)) {
  2211.                     yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl(CoreExtension::getAttribute($this->env$this->source$context["shopCategory"], "bannerImage", [], "any"falsefalsefalse2187)), "html"nulltrue);
  2212.                 } else {
  2213.                     yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl((("ui/img/category/shop-" CoreExtension::getAttribute($this->env$this->source$context["loop"], "index", [], "any"falsefalsefalse2187)) . ".jpg")), "html"nulltrue);
  2214.                 }
  2215.                 yield "')\">
  2216. \t\t\t\t\t\t\t\t\t\t\t<div class=\"category-overlay-custom\">
  2217. \t\t\t\t\t\t\t\t\t\t\t\t<div class=\"category-icon-wrapper\">
  2218. \t\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-store\" style=\"font-size: 3rem;\"></i>
  2219. \t\t\t\t\t\t\t\t\t\t\t\t\t<h4 class=\"mt-3\">";
  2220.                 // line 2191
  2221.                 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source$context["shopCategory"], "name", [], "any"falsefalsefalse2191), "html"nulltrue);
  2222.                 yield "</h4>
  2223. \t\t\t\t\t\t\t\t\t\t\t\t\t";
  2224.                 // line 2192
  2225.                 if ((($tmp CoreExtension::getAttribute($this->env$this->source$context["shopCategory"], "description", [], "any"falsefalsefalse2192)) && $tmp instanceof Markup ? (string) $tmp $tmp)) {
  2226.                     // line 2193
  2227.                     yield "\t\t\t\t\t\t\t\t\t\t\t\t\t\t<p class=\"mt-2 px-3\">";
  2228.                     yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(Twig\Extension\CoreExtension::slice($this->env->getCharset(), Twig\Extension\CoreExtension::striptags(CoreExtension::getAttribute($this->env$this->source$context["shopCategory"], "description", [], "any"falsefalsefalse2193)), 0100), "html"nulltrue);
  2229.                     yield "
  2230. \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t";
  2231.                     // line 2194
  2232.                     if ((Twig\Extension\CoreExtension::length($this->env->getCharset(), Twig\Extension\CoreExtension::striptags(CoreExtension::getAttribute($this->env$this->source$context["shopCategory"], "description", [], "any"falsefalsefalse2194))) > 100)) {
  2233.                         yield "...
  2234. \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t";
  2235.                     }
  2236.                     // line 2196
  2237.                     yield "\t\t\t\t\t\t\t\t\t\t\t\t\t\t</p>
  2238. \t\t\t\t\t\t\t\t\t\t\t\t\t";
  2239.                 }
  2240.                 // line 2198
  2241.                 yield "\t\t\t\t\t\t\t\t\t\t\t\t</div>
  2242. \t\t\t\t\t\t\t\t\t\t\t</div>
  2243. \t\t\t\t\t\t\t\t\t\t</div>
  2244. \t\t\t\t\t\t\t\t\t</div>
  2245. \t\t\t\t\t\t\t\t\t<div class=\"category-content p-3 d-flex flex-column flex-grow-1\">
  2246. \t\t\t\t\t\t\t\t\t\t<h5 class=\"mb-2\">";
  2247.                 // line 2203
  2248.                 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source$context["shopCategory"], "name", [], "any"falsefalsefalse2203), "html"nulltrue);
  2249.                 yield "</h5>
  2250. \t\t\t\t\t\t\t\t\t\t";
  2251.                 // line 2204
  2252.                 if ((($tmp CoreExtension::getAttribute($this->env$this->source$context["shopCategory"], "description", [], "any"falsefalsefalse2204)) && $tmp instanceof Markup ? (string) $tmp $tmp)) {
  2253.                     // line 2205
  2254.                     yield "\t\t\t\t\t\t\t\t\t\t\t<p class=\"text-muted mb-3 small\">";
  2255.                     yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(Twig\Extension\CoreExtension::slice($this->env->getCharset(), Twig\Extension\CoreExtension::striptags(CoreExtension::getAttribute($this->env$this->source$context["shopCategory"], "description", [], "any"falsefalsefalse2205)), 080), "html"nulltrue);
  2256.                     yield "
  2257. \t\t\t\t\t\t\t\t\t\t\t\t";
  2258.                     // line 2206
  2259.                     if ((Twig\Extension\CoreExtension::length($this->env->getCharset(), Twig\Extension\CoreExtension::striptags(CoreExtension::getAttribute($this->env$this->source$context["shopCategory"], "description", [], "any"falsefalsefalse2206))) > 80)) {
  2260.                         yield "...
  2261. \t\t\t\t\t\t\t\t\t\t\t\t";
  2262.                     }
  2263.                     // line 2208
  2264.                     yield "\t\t\t\t\t\t\t\t\t\t\t</p>
  2265. \t\t\t\t\t\t\t\t\t\t";
  2266.                 }
  2267.                 // line 2210
  2268.                 yield "\t\t\t\t\t\t\t\t\t\t<span class=\"btn btn-primary-custom btn-sm w-100 mt-auto\">
  2269. \t\t\t\t\t\t\t\t\t\t\tVoir les boutiques
  2270. \t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-arrow-right ms-2\"></i>
  2271. \t\t\t\t\t\t\t\t\t\t</span>
  2272. \t\t\t\t\t\t\t\t\t</div>
  2273. \t\t\t\t\t\t\t\t</div>
  2274. \t\t\t\t\t\t\t</a>
  2275. \t\t\t\t\t\t</div>
  2276. \t\t\t\t\t";
  2277.                 ++$context['loop']['index0'];
  2278.                 ++$context['loop']['index'];
  2279.                 $context['loop']['first'] = false;
  2280.                 if (isset($context['loop']['revindex0'], $context['loop']['revindex'])) {
  2281.                     --$context['loop']['revindex0'];
  2282.                     --$context['loop']['revindex'];
  2283.                     $context['loop']['last'] = === $context['loop']['revindex0'];
  2284.                 }
  2285.             }
  2286.             $_parent $context['_parent'];
  2287.             unset($context['_seq'], $context['_key'], $context['shopCategory'], $context['_parent'], $context['loop']);
  2288.             $context array_intersect_key($context$_parent) + $_parent;
  2289.             // line 2219
  2290.             yield "\t\t\t\t</div>
  2291. \t\t\t\t";
  2292.             // line 2220
  2293.             if ((Twig\Extension\CoreExtension::length($this->env->getCharset(), ($context["shopCategories"] ?? null)) > 6)) {
  2294.                 // line 2221
  2295.                 yield "\t\t\t\t\t<div class=\"text-center mt-4\">
  2296. \t\t\t\t\t\t<button class=\"btn btn-outline-primary btn-lg\" onclick=\"showAllShopCategories()\">
  2297. \t\t\t\t\t\t\t<i class=\"lnr lnr-store me-2\"></i>
  2298. \t\t\t\t\t\t\tVoir toutes les catégories de boutiques (";
  2299.                 // line 2224
  2300.                 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(Twig\Extension\CoreExtension::length($this->env->getCharset(), ($context["shopCategories"] ?? null)), "html"nulltrue);
  2301.                 yield ")
  2302. \t\t\t\t\t\t</button>
  2303. \t\t\t\t\t</div>
  2304. \t\t\t\t";
  2305.             }
  2306.             // line 2228
  2307.             yield "\t\t\t</div>
  2308. \t\t</section>
  2309. \t";
  2310.         }
  2311.         // line 2231
  2312.         yield "
  2313. \t<!-- Produits en vedette -->
  2314. \t";
  2315.         // line 2233
  2316.         if ((Twig\Extension\CoreExtension::length($this->env->getCharset(), ($context["featuredProducts"] ?? null)) > 0)) {
  2317.             // line 2234
  2318.             yield "\t\t<section class=\"py-5 bg-light home-section\">
  2319. \t\t\t<div class=\"container\">
  2320. \t\t\t\t<div class=\"section-title text-center mb-5\">
  2321. \t\t\t\t\t<h2>Produits en vedette</h2>
  2322. \t\t\t\t\t<p>Découvrez nos produits les plus populaires et les mieux notés</p>
  2323. \t\t\t\t</div>
  2324. \t\t\t\t<div class=\"featured-gallery-wrapper\">
  2325. \t\t\t\t\t<div class=\"featured-gallery-container\">
  2326. \t\t\t\t\t\t<div class=\"featured-gallery-grid\" id=\"featuredGalleryGrid\">
  2327. \t\t\t\t\t\t\t";
  2328.             // line 2244
  2329.             $context['_parent'] = $context;
  2330.             $context['_seq'] = CoreExtension::ensureTraversable(($context["featuredProducts"] ?? null));
  2331.             $context['loop'] = [
  2332.               'parent' => $context['_parent'],
  2333.               'index0' => 0,
  2334.               'index'  => 1,
  2335.               'first'  => true,
  2336.             ];
  2337.             if (is_array($context['_seq']) || (is_object($context['_seq']) && $context['_seq'] instanceof \Countable)) {
  2338.                 $length count($context['_seq']);
  2339.                 $context['loop']['revindex0'] = $length 1;
  2340.                 $context['loop']['revindex'] = $length;
  2341.                 $context['loop']['length'] = $length;
  2342.                 $context['loop']['last'] = === $length;
  2343.             }
  2344.             foreach ($context['_seq'] as $context["_key"] => $context["product"]) {
  2345.                 // line 2245
  2346.                 yield "\t\t\t\t\t\t\t\t<div class=\"featured-gallery-item\">
  2347. \t\t\t\t\t\t\t\t\t";
  2348.                 // line 2246
  2349.                 yield from $this->load("home/_single_product_card.html.twig"2246)->unwrap()->yield(CoreExtension::merge($context, ["product" => $context["product"]]));
  2350.                 // line 2247
  2351.                 yield "\t\t\t\t\t\t\t\t</div>
  2352. \t\t\t\t\t\t\t";
  2353.                 ++$context['loop']['index0'];
  2354.                 ++$context['loop']['index'];
  2355.                 $context['loop']['first'] = false;
  2356.                 if (isset($context['loop']['revindex0'], $context['loop']['revindex'])) {
  2357.                     --$context['loop']['revindex0'];
  2358.                     --$context['loop']['revindex'];
  2359.                     $context['loop']['last'] = === $context['loop']['revindex0'];
  2360.                 }
  2361.             }
  2362.             $_parent $context['_parent'];
  2363.             unset($context['_seq'], $context['_key'], $context['product'], $context['_parent'], $context['loop']);
  2364.             $context array_intersect_key($context$_parent) + $_parent;
  2365.             // line 2249
  2366.             yield "\t\t\t\t\t\t</div>
  2367. \t\t\t\t\t</div>
  2368. \t\t\t\t\t<!-- Contrôles de navigation -->
  2369. \t\t\t\t\t<div class=\"featured-gallery-controls\">
  2370. \t\t\t\t\t\t<button class=\"featured-gallery-nav-btn featured-gallery-prev\" id=\"featuredGalleryPrev\" aria-label=\"Précédent\">
  2371. \t\t\t\t\t\t\t<i class=\"lnr lnr-chevron-left\"></i>
  2372. \t\t\t\t\t\t</button>
  2373. \t\t\t\t\t\t<button class=\"featured-gallery-nav-btn featured-gallery-next\" id=\"featuredGalleryNext\" aria-label=\"Suivant\">
  2374. \t\t\t\t\t\t\t<i class=\"lnr lnr-chevron-right\"></i>
  2375. \t\t\t\t\t\t</button>
  2376. \t\t\t\t\t</div>
  2377. \t\t\t\t\t<!-- Bouton charger plus -->
  2378. \t\t\t\t\t<div class=\"featured-gallery-load-more text-center mt-4\" id=\"featuredGalleryLoadMore\" style=\"display: none;\">
  2379. \t\t\t\t\t\t<button class=\"btn btn-outline-primary\" id=\"loadMoreFeaturedBtn\">
  2380. \t\t\t\t\t\t\t<i class=\"lnr lnr-plus-circle me-2\"></i>
  2381. \t\t\t\t\t\t\tCharger plus de produits
  2382. \t\t\t\t\t\t</button>
  2383. \t\t\t\t\t</div>
  2384. \t\t\t\t</div>
  2385. \t\t\t\t<div class=\"text-center mt-5\">
  2386. \t\t\t\t\t<a href=\"";
  2387.             // line 2272
  2388.             yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("ui_listing");
  2389.             yield "\" class=\"btn-view-all-products\">
  2390. \t\t\t\t\t\t<span>Voir tous les produits</span>
  2391. \t\t\t\t\t\t<i class=\"lnr lnr-arrow-right\"></i>
  2392. \t\t\t\t\t</a>
  2393. \t\t\t\t</div>
  2394. \t\t\t</div>
  2395. \t\t</section>
  2396. \t";
  2397.         }
  2398.         // line 2280
  2399.         yield "
  2400. \t<!-- Nouveautés -->
  2401. \t";
  2402.         // line 2282
  2403.         if ((Twig\Extension\CoreExtension::length($this->env->getCharset(), ($context["latestProducts"] ?? null)) > 0)) {
  2404.             // line 2283
  2405.             yield "\t\t<section class=\"py-5 home-section home-section--alt\">
  2406. \t\t\t<div class=\"container\">
  2407. \t\t\t\t<div class=\"section-title text-center mb-5\">
  2408. \t\t\t\t\t<h2>Nouveautés</h2>
  2409. \t\t\t\t\t<p>Les derniers produits ajoutés sur MaketOu</p>
  2410. \t\t\t\t</div>
  2411. \t\t\t\t<div class=\"featured-gallery-wrapper\">
  2412. \t\t\t\t\t<div class=\"featured-gallery-container\">
  2413. \t\t\t\t\t\t<div class=\"featured-gallery-grid\" id=\"latestGalleryGrid\">
  2414. \t\t\t\t\t\t\t";
  2415.             // line 2293
  2416.             $context['_parent'] = $context;
  2417.             $context['_seq'] = CoreExtension::ensureTraversable(($context["latestProducts"] ?? null));
  2418.             $context['loop'] = [
  2419.               'parent' => $context['_parent'],
  2420.               'index0' => 0,
  2421.               'index'  => 1,
  2422.               'first'  => true,
  2423.             ];
  2424.             if (is_array($context['_seq']) || (is_object($context['_seq']) && $context['_seq'] instanceof \Countable)) {
  2425.                 $length count($context['_seq']);
  2426.                 $context['loop']['revindex0'] = $length 1;
  2427.                 $context['loop']['revindex'] = $length;
  2428.                 $context['loop']['length'] = $length;
  2429.                 $context['loop']['last'] = === $length;
  2430.             }
  2431.             foreach ($context['_seq'] as $context["_key"] => $context["product"]) {
  2432.                 // line 2294
  2433.                 yield "\t\t\t\t\t\t\t\t<div class=\"featured-gallery-item\">
  2434. \t\t\t\t\t\t\t\t\t";
  2435.                 // line 2295
  2436.                 yield from $this->load("home/_single_product_card.html.twig"2295)->unwrap()->yield(CoreExtension::merge($context, ["product" => $context["product"]]));
  2437.                 // line 2296
  2438.                 yield "\t\t\t\t\t\t\t\t</div>
  2439. \t\t\t\t\t\t\t";
  2440.                 ++$context['loop']['index0'];
  2441.                 ++$context['loop']['index'];
  2442.                 $context['loop']['first'] = false;
  2443.                 if (isset($context['loop']['revindex0'], $context['loop']['revindex'])) {
  2444.                     --$context['loop']['revindex0'];
  2445.                     --$context['loop']['revindex'];
  2446.                     $context['loop']['last'] = === $context['loop']['revindex0'];
  2447.                 }
  2448.             }
  2449.             $_parent $context['_parent'];
  2450.             unset($context['_seq'], $context['_key'], $context['product'], $context['_parent'], $context['loop']);
  2451.             $context array_intersect_key($context$_parent) + $_parent;
  2452.             // line 2298
  2453.             yield "\t\t\t\t\t\t</div>
  2454. \t\t\t\t\t</div>
  2455. \t\t\t\t\t<!-- Contrôles de navigation -->
  2456. \t\t\t\t\t<div class=\"featured-gallery-controls\">
  2457. \t\t\t\t\t\t<button class=\"featured-gallery-nav-btn featured-gallery-prev\" id=\"latestGalleryPrev\" aria-label=\"Précédent\">
  2458. \t\t\t\t\t\t\t<i class=\"lnr lnr-chevron-left\"></i>
  2459. \t\t\t\t\t\t</button>
  2460. \t\t\t\t\t\t<button class=\"featured-gallery-nav-btn featured-gallery-next\" id=\"latestGalleryNext\" aria-label=\"Suivant\">
  2461. \t\t\t\t\t\t\t<i class=\"lnr lnr-chevron-right\"></i>
  2462. \t\t\t\t\t\t</button>
  2463. \t\t\t\t\t</div>
  2464. \t\t\t\t\t<!-- Bouton charger plus -->
  2465. \t\t\t\t\t<div class=\"featured-gallery-load-more text-center mt-4\" id=\"latestGalleryLoadMore\" style=\"display: none;\">
  2466. \t\t\t\t\t\t<button class=\"btn btn-outline-primary\" id=\"loadMoreLatestBtn\">
  2467. \t\t\t\t\t\t\t<i class=\"lnr lnr-plus-circle me-2\"></i>
  2468. \t\t\t\t\t\t\tCharger plus de produits
  2469. \t\t\t\t\t\t</button>
  2470. \t\t\t\t\t</div>
  2471. \t\t\t\t</div>
  2472. \t\t\t\t<div class=\"text-center mt-5\">
  2473. \t\t\t\t\t<a href=\"";
  2474.             // line 2321
  2475.             yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("ui_listing");
  2476.             yield "\" class=\"btn-view-all-products\">
  2477. \t\t\t\t\t\t<span>Voir tous les produits</span>
  2478. \t\t\t\t\t\t<i class=\"lnr lnr-arrow-right\"></i>
  2479. \t\t\t\t\t</a>
  2480. \t\t\t\t</div>
  2481. \t\t\t</div>
  2482. \t\t</section>
  2483. \t";
  2484.         }
  2485.         // line 2329
  2486.         yield "
  2487. \t";
  2488.         // line 2330
  2489.         if ((Twig\Extension\CoreExtension::length($this->env->getCharset(), ($context["recommendedProducts"] ?? null)) > 0)) {
  2490.             // line 2331
  2491.             yield "\t\t<section class=\"py-5 bg-white home-section\">
  2492. \t\t\t<div class=\"container\">
  2493. \t\t\t\t<div class=\"section-title text-center mb-5\">
  2494. \t\t\t\t\t<h2>Recommandés pour vous</h2>
  2495. \t\t\t\t\t<p>Suggestions basées sur votre activité récente et les tendances de MaketOu</p>
  2496. \t\t\t\t</div>
  2497. \t\t\t\t<div class=\"row g-4\">
  2498. \t\t\t\t\t";
  2499.             // line 2338
  2500.             $context['_parent'] = $context;
  2501.             $context['_seq'] = CoreExtension::ensureTraversable(($context["recommendedProducts"] ?? null));
  2502.             foreach ($context['_seq'] as $context["_key"] => $context["product"]) {
  2503.                 // line 2339
  2504.                 yield "\t\t\t\t\t\t<div class=\"col-12 col-sm-6 col-lg-3\">
  2505. \t\t\t\t\t\t\t<div class=\"product-card h-100\">
  2506. \t\t\t\t\t\t\t\t";
  2507.                 // line 2341
  2508.                 $context["productImage"] = (((CoreExtension::getAttribute($this->env$this->sourceCoreExtension::getAttribute($this->env$this->source$context["product"], "images", [], "any"falsetruefalse2341), 0, [], "array"truetruefalse2341) &&  !(null === (($_v2 CoreExtension::getAttribute($this->env$this->source$context["product"], "images", [], "any"falsefalsefalse2341)) && is_array($_v2) || $_v2 instanceof ArrayAccess ? ($_v2[0] ?? null) : null)))) ? ((($_v3 CoreExtension::getAttribute($this->env$this->source$context["product"], "images", [], "any"falsefalsefalse2341)) && is_array($_v3) || $_v3 instanceof ArrayAccess ? ($_v3[0] ?? null) : null)) : ("ui/img/product/p1.jpg"));
  2509.                 // line 2342
  2510.                 yield "\t\t\t\t\t\t\t\t<div class=\"product-image\" style=\"background-image:url('";
  2511.                 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl(($context["productImage"] ?? null)), "html"nulltrue);
  2512.                 yield "');\">
  2513. \t\t\t\t\t\t\t\t\t";
  2514.                 // line 2343
  2515.                 if ((($tmp CoreExtension::getAttribute($this->env$this->source$context["product"], "isFeatured", [], "any"falsefalsefalse2343)) && $tmp instanceof Markup ? (string) $tmp $tmp)) {
  2516.                     // line 2344
  2517.                     yield "\t\t\t\t\t\t\t\t\t\t<span class=\"product-badge bg-success\">Populaire</span>
  2518. \t\t\t\t\t\t\t\t\t";
  2519.                 }
  2520.                 // line 2346
  2521.                 yield "\t\t\t\t\t\t\t\t</div>
  2522. \t\t\t\t\t\t\t\t<div class=\"p-3\">
  2523. \t\t\t\t\t\t\t\t\t<h6 class=\"mb-2\">
  2524. \t\t\t\t\t\t\t\t\t\t<a href=\"";
  2525.                 // line 2349
  2526.                 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("ui_product_show", ["slug" => CoreExtension::getAttribute($this->env$this->source$context["product"], "slug", [], "any"falsefalsefalse2349)]), "html"nulltrue);
  2527.                 yield "\">";
  2528.                 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source$context["product"], "name", [], "any"falsefalsefalse2349), "html"nulltrue);
  2529.                 yield "</a>
  2530. \t\t\t\t\t\t\t\t\t</h6>
  2531. \t\t\t\t\t\t\t\t\t<p class=\"mb-2 text-muted small\">
  2532. \t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-store\"></i>
  2533. \t\t\t\t\t\t\t\t\t\t";
  2534.                 // line 2353
  2535.                 if ((($tmp CoreExtension::getAttribute($this->env$this->source$context["product"], "shop", [], "any"falsefalsefalse2353)) && $tmp instanceof Markup ? (string) $tmp $tmp)) {
  2536.                     // line 2354
  2537.                     yield "\t\t\t\t\t\t\t\t\t\t\t<a href=\"";
  2538.                     yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("ui_shop_show", ["slug" => CoreExtension::getAttribute($this->env$this->sourceCoreExtension::getAttribute($this->env$this->source$context["product"], "shop", [], "any"falsefalsefalse2354), "slug", [], "any"falsefalsefalse2354)]), "html"nulltrue);
  2539.                     yield "\">";
  2540.                     yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->sourceCoreExtension::getAttribute($this->env$this->source$context["product"], "shop", [], "any"falsefalsefalse2354), "name", [], "any"falsefalsefalse2354), "html"nulltrue);
  2541.                     yield "</a>
  2542. \t\t\t\t\t\t\t\t\t\t";
  2543.                 } else {
  2544.                     // line 2356
  2545.                     yield "\t\t\t\t\t\t\t\t\t\t\tBoutique non spécifiée
  2546. \t\t\t\t\t\t\t\t\t\t";
  2547.                 }
  2548.                 // line 2358
  2549.                 yield "\t\t\t\t\t\t\t\t\t</p>
  2550. \t\t\t\t\t\t\t\t\t<div class=\"d-flex align-items-center justify-content-between\">
  2551. \t\t\t\t\t\t\t\t\t\t<span class=\"fw-bold text-primary\">";
  2552.                 // line 2360
  2553.                 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Twig\Extension\CoreExtension']->formatNumber(CoreExtension::getAttribute($this->env$this->source$context["product"], "price", [], "any"falsefalsefalse2360), 2"."" "), "html"nulltrue);
  2554.                 yield " HTG</span>
  2555. \t\t\t\t\t\t\t\t\t\t<a href=\"javascript:void(0)\" class=\"btn btn-sm btn-outline-primary add-to-cart\" data-product-id=\"";
  2556.                 // line 2361
  2557.                 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source$context["product"], "id", [], "any"falsefalsefalse2361), "html"nulltrue);
  2558.                 yield "\" data-qty=\"1\">
  2559. \t\t\t\t\t\t\t\t\t\t\t<i class=\"ti ti-bag\"></i>
  2560. \t\t\t\t\t\t\t\t\t\t</a>
  2561. \t\t\t\t\t\t\t\t\t</div>
  2562. \t\t\t\t\t\t\t\t</div>
  2563. \t\t\t\t\t\t\t</div>
  2564. \t\t\t\t\t\t</div>
  2565. \t\t\t\t\t";
  2566.             }
  2567.             $_parent $context['_parent'];
  2568.             unset($context['_seq'], $context['_key'], $context['product'], $context['_parent']);
  2569.             $context array_intersect_key($context$_parent) + $_parent;
  2570.             // line 2369
  2571.             yield "\t\t\t\t</div>
  2572. \t\t\t</div>
  2573. \t\t</section>
  2574. \t";
  2575.         }
  2576.         // line 2373
  2577.         yield "
  2578. \t";
  2579.         // line 2374
  2580.         if ((Twig\Extension\CoreExtension::length($this->env->getCharset(), ($context["recentlyViewedProducts"] ?? null)) > 0)) {
  2581.             // line 2375
  2582.             yield "\t\t<section class=\"py-5 bg-light home-section home-section--alt\">
  2583. \t\t\t<div class=\"container\">
  2584. \t\t\t\t<div class=\"section-title text-center mb-5\">
  2585. \t\t\t\t\t<h2>Récemment consultés</h2>
  2586. \t\t\t\t\t<p>Retrouvez les articles que vous avez explorés dernièrement</p>
  2587. \t\t\t\t</div>
  2588. \t\t\t\t<div class=\"featured-gallery-wrapper\">
  2589. \t\t\t\t\t<div class=\"featured-gallery-container\">
  2590. \t\t\t\t\t\t<div class=\"featured-gallery-grid\">
  2591. \t\t\t\t\t\t\t";
  2592.             // line 2384
  2593.             $context['_parent'] = $context;
  2594.             $context['_seq'] = CoreExtension::ensureTraversable(($context["recentlyViewedProducts"] ?? null));
  2595.             $context['loop'] = [
  2596.               'parent' => $context['_parent'],
  2597.               'index0' => 0,
  2598.               'index'  => 1,
  2599.               'first'  => true,
  2600.             ];
  2601.             if (is_array($context['_seq']) || (is_object($context['_seq']) && $context['_seq'] instanceof \Countable)) {
  2602.                 $length count($context['_seq']);
  2603.                 $context['loop']['revindex0'] = $length 1;
  2604.                 $context['loop']['revindex'] = $length;
  2605.                 $context['loop']['length'] = $length;
  2606.                 $context['loop']['last'] = === $length;
  2607.             }
  2608.             foreach ($context['_seq'] as $context["_key"] => $context["product"]) {
  2609.                 // line 2385
  2610.                 yield "\t\t\t\t\t\t\t\t<div class=\"featured-gallery-item\">
  2611. \t\t\t\t\t\t\t\t\t";
  2612.                 // line 2386
  2613.                 yield from $this->load("home/_single_product_card.html.twig"2386)->unwrap()->yield(CoreExtension::merge($context, ["product" => $context["product"]]));
  2614.                 // line 2387
  2615.                 yield "\t\t\t\t\t\t\t\t</div>
  2616. \t\t\t\t\t\t\t";
  2617.                 ++$context['loop']['index0'];
  2618.                 ++$context['loop']['index'];
  2619.                 $context['loop']['first'] = false;
  2620.                 if (isset($context['loop']['revindex0'], $context['loop']['revindex'])) {
  2621.                     --$context['loop']['revindex0'];
  2622.                     --$context['loop']['revindex'];
  2623.                     $context['loop']['last'] = === $context['loop']['revindex0'];
  2624.                 }
  2625.             }
  2626.             $_parent $context['_parent'];
  2627.             unset($context['_seq'], $context['_key'], $context['product'], $context['_parent'], $context['loop']);
  2628.             $context array_intersect_key($context$_parent) + $_parent;
  2629.             // line 2389
  2630.             yield "\t\t\t\t\t\t</div>
  2631. \t\t\t\t\t</div>
  2632. \t\t\t\t</div>
  2633. \t\t\t</div>
  2634. \t\t</section>
  2635. \t";
  2636.         }
  2637.         // line 2395
  2638.         yield "
  2639. \t<!-- Fonctionnalités -->
  2640. \t<section class=\"py-5 bg-light home-section\">
  2641. \t\t<div class=\"container\">
  2642. \t\t\t<div class=\"section-title\">
  2643. \t\t\t\t<h2>Pourquoi choisir MaketOu ?</h2>
  2644. \t\t\t\t<p>Découvrez les avantages de notre plateforme</p>
  2645. \t\t\t</div>
  2646. \t\t\t<div class=\"row\">
  2647. \t\t\t\t<div class=\"col-lg-3 col-md-6 mb-4\">
  2648. \t\t\t\t\t<div class=\"feature-card\">
  2649. \t\t\t\t\t\t<div class=\"feature-icon\">
  2650. \t\t\t\t\t\t\t<i class=\"lnr lnr-rocket\"></i>
  2651. \t\t\t\t\t\t</div>
  2652. \t\t\t\t\t\t<h5>Livraison rapide</h5>
  2653. \t\t\t\t\t\t<p>Recevez vos commandes rapidement avec notre réseau de livraison optimisé</p>
  2654. \t\t\t\t\t</div>
  2655. \t\t\t\t</div>
  2656. \t\t\t\t<div class=\"col-lg-3 col-md-6 mb-4\">
  2657. \t\t\t\t\t<div class=\"feature-card\">
  2658. \t\t\t\t\t\t<div class=\"feature-icon\">
  2659. \t\t\t\t\t\t\t<i class=\"lnr lnr-lock\"></i>
  2660. \t\t\t\t\t\t</div>
  2661. \t\t\t\t\t\t<h5>Paiement sécurisé</h5>
  2662. \t\t\t\t\t\t<p>Vos transactions sont protégées avec les dernières technologies de sécurité</p>
  2663. \t\t\t\t\t</div>
  2664. \t\t\t\t</div>
  2665. \t\t\t\t<div class=\"col-lg-3 col-md-6 mb-4\">
  2666. \t\t\t\t\t<div class=\"feature-card\">
  2667. \t\t\t\t\t\t<div class=\"feature-icon\">
  2668. \t\t\t\t\t\t\t<i class=\"lnr lnr-phone\"></i>
  2669. \t\t\t\t\t\t</div>
  2670. \t\t\t\t\t\t<h5>Support 24/7</h5>
  2671. \t\t\t\t\t\t<p>Notre équipe est disponible pour vous aider à tout moment</p>
  2672. \t\t\t\t\t</div>
  2673. \t\t\t\t</div>
  2674. \t\t\t\t<div class=\"col-lg-3 col-md-6 mb-4\">
  2675. \t\t\t\t\t<div class=\"feature-card\">
  2676. \t\t\t\t\t\t<div class=\"feature-icon\">
  2677. \t\t\t\t\t\t\t<i class=\"lnr lnr-undo\"></i>
  2678. \t\t\t\t\t\t</div>
  2679. \t\t\t\t\t\t<h5>Retour facile</h5>
  2680. \t\t\t\t\t\t<p>Politique de retour flexible pour votre tranquillité d'esprit</p>
  2681. \t\t\t\t\t</div>
  2682. \t\t\t\t</div>
  2683. \t\t\t</div>
  2684. \t\t</div>
  2685. \t</section>
  2686. \t<!-- Newsletter -->
  2687. \t<section class=\"newsletter-section-modern py-5 home-section home-section--alt\">
  2688. \t\t<div class=\"container\">
  2689. \t\t\t<div class=\"row justify-content-center\">
  2690. \t\t\t\t<div class=\"col-lg-10\">
  2691. \t\t\t\t\t<div class=\"newsletter-card\">
  2692. \t\t\t\t\t\t<div class=\"row align-items-center\">
  2693. \t\t\t\t\t\t\t<div class=\"col-lg-6 text-center text-lg-start mb-4 mb-lg-0\">
  2694. \t\t\t\t\t\t\t\t<div class=\"newsletter-icon mb-3\">
  2695. \t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-envelope\" style=\"font-size: 4rem; color: #ffa200;\"></i>
  2696. \t\t\t\t\t\t\t\t</div>
  2697. \t\t\t\t\t\t\t\t<h2 class=\"newsletter-title mb-3\">Restez informé des dernières nouveautés</h2>
  2698. \t\t\t\t\t\t\t\t<p class=\"newsletter-description mb-0\">
  2699. \t\t\t\t\t\t\t\t\tInscrivez-vous à notre newsletter pour recevoir les offres exclusives, 
  2700. \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t                                les nouveaux produits et les meilleures promotions directement dans votre boîte mail.
  2701. \t\t\t\t\t\t\t\t</p>
  2702. \t\t\t\t\t\t\t</div>
  2703. \t\t\t\t\t\t\t<div class=\"col-lg-6\">
  2704. \t\t\t\t\t\t\t\t<form class=\"newsletter-form-modern\" id=\"newsletterFormHome\">
  2705. \t\t\t\t\t\t\t\t\t<div class=\"newsletter-input-wrapper\">
  2706. \t\t\t\t\t\t\t\t\t\t<input type=\"email\" class=\"newsletter-input\" placeholder=\"Votre adresse email\" required name=\"email\">
  2707. \t\t\t\t\t\t\t\t\t\t<button class=\"newsletter-button\" type=\"submit\">
  2708. \t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-arrow-right me-2\"></i>
  2709. \t\t\t\t\t\t\t\t\t\t\tS'abonner
  2710. \t\t\t\t\t\t\t\t\t\t</button>
  2711. \t\t\t\t\t\t\t\t\t</div>
  2712. \t\t\t\t\t\t\t\t\t<p class=\"newsletter-privacy mt-3 text-center\">
  2713. \t\t\t\t\t\t\t\t\t\t<small>
  2714. \t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-lock me-1\"></i>
  2715. \t\t\t\t\t\t\t\t\t\t\tVos données sont sécurisées. Pas de spam, désinscription facile.
  2716. \t\t\t\t\t\t\t\t\t\t</small>
  2717. \t\t\t\t\t\t\t\t\t</p>
  2718. \t\t\t\t\t\t\t\t</form>
  2719. \t\t\t\t\t\t\t</div>
  2720. \t\t\t\t\t\t</div>
  2721. \t\t\t\t\t</div>
  2722. \t\t\t\t</div>
  2723. \t\t\t</div>
  2724. \t\t</div>
  2725. \t</section>
  2726. \t<!-- Call to Action -->
  2727. \t<section class=\"cta-section-modern py-5 home-section\">
  2728. \t\t<div class=\"container\">
  2729. \t\t\t<div class=\"cta-card\">
  2730. \t\t\t\t<div class=\"row align-items-center\">
  2731. \t\t\t\t\t<div class=\"col-lg-6 mb-4 mb-lg-0\">
  2732. \t\t\t\t\t\t<div class=\"cta-content\">
  2733. \t\t\t\t\t\t\t<span class=\"cta-badge\">
  2734. \t\t\t\t\t\t\t\t<i class=\"lnr lnr-rocket me-2\"></i>
  2735. \t\t\t\t\t\t\t\tCommencez dès aujourd'hui
  2736. \t\t\t\t\t\t\t</span>
  2737. \t\t\t\t\t\t\t<h2 class=\"cta-title mb-3\">Prêt à commencer ?</h2>
  2738. \t\t\t\t\t\t\t<p class=\"cta-description mb-4\">
  2739. \t\t\t\t\t\t\t\tQue vous soyez
  2740. \t\t\t\t\t\t\t\t<strong>acheteur</strong>
  2741. \t\t\t\t\t\t\t\tou
  2742. \t\t\t\t\t\t\t\t<strong>vendeur</strong>, MaketOu vous offre la plateforme idéale 
  2743. \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t                            pour vos besoins commerciaux en Haïti. Rejoignez des milliers d'utilisateurs satisfaits !
  2744. \t\t\t\t\t\t\t</p>
  2745. \t\t\t\t\t\t\t<div class=\"cta-features mb-4\">
  2746. \t\t\t\t\t\t\t\t<div class=\"cta-feature-item\">
  2747. \t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-checkmark-circle\"></i>
  2748. \t\t\t\t\t\t\t\t\t<span>Plateforme 100% sécurisée</span>
  2749. \t\t\t\t\t\t\t\t</div>
  2750. \t\t\t\t\t\t\t\t<div class=\"cta-feature-item\">
  2751. \t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-checkmark-circle\"></i>
  2752. \t\t\t\t\t\t\t\t\t<span>Support client 24/7</span>
  2753. \t\t\t\t\t\t\t\t</div>
  2754. \t\t\t\t\t\t\t\t<div class=\"cta-feature-item\">
  2755. \t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-checkmark-circle\"></i>
  2756. \t\t\t\t\t\t\t\t\t<span>Paiements multiples</span>
  2757. \t\t\t\t\t\t\t\t</div>
  2758. \t\t\t\t\t\t\t</div>
  2759. \t\t\t\t\t\t\t<div class=\"cta-buttons\">
  2760. \t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn cta-button-primary\" onclick=\"openReadyModal()\">
  2761. \t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-rocket me-2\"></i>
  2762. \t\t\t\t\t\t\t\t\tPrêt à commencer ?
  2763. \t\t\t\t\t\t\t\t</button>
  2764. \t\t\t\t\t\t\t\t<a href=\"";
  2765.         // line 2523
  2766.         yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("ui_listing");
  2767.         yield "\" class=\"btn cta-button-secondary\">
  2768. \t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-magnifier me-2\"></i>
  2769. \t\t\t\t\t\t\t\t\tVoir les produits
  2770. \t\t\t\t\t\t\t\t</a>
  2771. \t\t\t\t\t\t\t</div>
  2772. \t\t\t\t\t\t</div>
  2773. \t\t\t\t\t</div>
  2774. \t\t\t\t\t<div class=\"col-lg-6\">
  2775. \t\t\t\t\t\t<div class=\"cta-image-wrapper\">
  2776. \t\t\t\t\t\t\t<div class=\"cta-decoration\"></div>
  2777. \t\t\t\t\t\t\t<img src=\"";
  2778.         // line 2533
  2779.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("Start.png"), "html"nulltrue);
  2780.         yield "\" alt=\"MaketOu\" class=\"cta-image\">
  2781. \t\t\t\t\t\t</div>
  2782. \t\t\t\t\t</div>
  2783. \t\t\t\t</div>
  2784. \t\t\t</div>
  2785. \t\t</div>
  2786. \t</section>
  2787. ";
  2788.         
  2789.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  2790.         
  2791.         $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  2792.         yield from [];
  2793.     }
  2794.     // line 2542
  2795.     /**
  2796.      * @return iterable<null|scalar|\Stringable>
  2797.      */
  2798.     public function block_javascripts(array $context, array $blocks = []): iterable
  2799.     {
  2800.         $macros $this->macros;
  2801.         $__internal_5a27a8ba21ca79b61932376b2fa922d2 $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  2802.         $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block""javascripts"));
  2803.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  2804.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block""javascripts"));
  2805.         // line 2543
  2806.         yield "\t<script src=\"https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.3.4/owl.carousel.min.js\"></script>
  2807. \t<link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.3.4/assets/owl.carousel.min.css\">
  2808. \t<link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.3.4/assets/owl.theme.default.min.css\">
  2809. \t<script src=\"";
  2810.         // line 2546
  2811.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("ui/js/product-unified.js"), "html"nulltrue);
  2812.         yield "\"></script>
  2813. \t<script>
  2814. \t\twindow.openReadyModal = function () {
  2815. \t\t\tconst modalEl = document.getElementById('readyModal');
  2816. \t\t\tif (!modalEl) {
  2817. \t\t\t\tconsole.error('readyModal introuvable');
  2818. \t\t\t\treturn;
  2819. \t\t\t}
  2820. \t\t\tif (typeof bootstrap === 'undefined' || !bootstrap.Modal) {
  2821. \t\t\t\tconsole.error('Bootstrap Modal non chargé');
  2822. \t\t\t\treturn;
  2823. \t\t\t}
  2824. \t\t\tconst modalInstance = bootstrap.Modal.getOrCreateInstance(modalEl);
  2825. \t\t\tmodalInstance.show();
  2826. \t\t};
  2827. \t</script>
  2828. \t<script>
  2829. \t\t// Variables globales pour la navigation des images (si pas déjà définies)
  2830. if (typeof productImages === 'undefined') {
  2831. var productImages = {};
  2832. var currentImageIndex = {};
  2833. }
  2834. // Initialisation des données d'images pour les produits \"Produits en vedette\"
  2835. ";
  2836.         // line 2570
  2837.         if (array_key_exists("featuredProducts"$context)) {
  2838.             // line 2571
  2839.             $context['_parent'] = $context;
  2840.             $context['_seq'] = CoreExtension::ensureTraversable(($context["featuredProducts"] ?? null));
  2841.             foreach ($context['_seq'] as $context["_key"] => $context["product"]) {
  2842.                 // line 2572
  2843.                 if ((CoreExtension::getAttribute($this->env$this->source$context["product"], "images", [], "any"truetruefalse2572) && (Twig\Extension\CoreExtension::length($this->env->getCharset(), CoreExtension::getAttribute($this->env$this->source$context["product"], "images", [], "any"falsefalsefalse2572)) > 0))) {
  2844.                     // line 2573
  2845.                     yield "productImages[";
  2846.                     yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source$context["product"], "id", [], "any"falsefalsefalse2573), "html"nulltrue);
  2847.                     yield "] = [";
  2848.                     $context['_parent'] = $context;
  2849.                     $context['_seq'] = CoreExtension::ensureTraversable(CoreExtension::getAttribute($this->env$this->source$context["product"], "images", [], "any"falsefalsefalse2573));
  2850.                     $context['loop'] = [
  2851.                       'parent' => $context['_parent'],
  2852.                       'index0' => 0,
  2853.                       'index'  => 1,
  2854.                       'first'  => true,
  2855.                     ];
  2856.                     if (is_array($context['_seq']) || (is_object($context['_seq']) && $context['_seq'] instanceof \Countable)) {
  2857.                         $length count($context['_seq']);
  2858.                         $context['loop']['revindex0'] = $length 1;
  2859.                         $context['loop']['revindex'] = $length;
  2860.                         $context['loop']['length'] = $length;
  2861.                         $context['loop']['last'] = === $length;
  2862.                     }
  2863.                     foreach ($context['_seq'] as $context["_key"] => $context["img"]) {
  2864.                         yield "'";
  2865.                         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl($context["img"]), "html"nulltrue);
  2866.                         yield "'";
  2867.                         if ((($tmp =  !CoreExtension::getAttribute($this->env$this->source$context["loop"], "last", [], "any"falsefalsefalse2573)) && $tmp instanceof Markup ? (string) $tmp $tmp)) {
  2868.                             yield ",";
  2869.                         }
  2870.                         ++$context['loop']['index0'];
  2871.                         ++$context['loop']['index'];
  2872.                         $context['loop']['first'] = false;
  2873.                         if (isset($context['loop']['revindex0'], $context['loop']['revindex'])) {
  2874.                             --$context['loop']['revindex0'];
  2875.                             --$context['loop']['revindex'];
  2876.                             $context['loop']['last'] = === $context['loop']['revindex0'];
  2877.                         }
  2878.                     }
  2879.                     $_parent $context['_parent'];
  2880.                     unset($context['_seq'], $context['_key'], $context['img'], $context['_parent'], $context['loop']);
  2881.                     $context array_intersect_key($context$_parent) + $_parent;
  2882.                     yield "];
  2883. currentImageIndex[";
  2884.                     // line 2574
  2885.                     yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source$context["product"], "id", [], "any"falsefalsefalse2574), "html"nulltrue);
  2886.                     yield "] = 0;";
  2887.                 }
  2888.             }
  2889.             $_parent $context['_parent'];
  2890.             unset($context['_seq'], $context['_key'], $context['product'], $context['_parent']);
  2891.             $context array_intersect_key($context$_parent) + $_parent;
  2892.         }
  2893.         // line 2575
  2894.         yield "
  2895. // Initialisation des données d'images pour les produits \"Nouveautés\"
  2896. ";
  2897.         // line 2577
  2898.         if (array_key_exists("latestProducts"$context)) {
  2899.             // line 2578
  2900.             $context['_parent'] = $context;
  2901.             $context['_seq'] = CoreExtension::ensureTraversable(($context["latestProducts"] ?? null));
  2902.             foreach ($context['_seq'] as $context["_key"] => $context["product"]) {
  2903.                 // line 2579
  2904.                 if ((CoreExtension::getAttribute($this->env$this->source$context["product"], "images", [], "any"truetruefalse2579) && (Twig\Extension\CoreExtension::length($this->env->getCharset(), CoreExtension::getAttribute($this->env$this->source$context["product"], "images", [], "any"falsefalsefalse2579)) > 0))) {
  2905.                     // line 2580
  2906.                     yield "productImages[";
  2907.                     yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source$context["product"], "id", [], "any"falsefalsefalse2580), "html"nulltrue);
  2908.                     yield "] = [";
  2909.                     $context['_parent'] = $context;
  2910.                     $context['_seq'] = CoreExtension::ensureTraversable(CoreExtension::getAttribute($this->env$this->source$context["product"], "images", [], "any"falsefalsefalse2580));
  2911.                     $context['loop'] = [
  2912.                       'parent' => $context['_parent'],
  2913.                       'index0' => 0,
  2914.                       'index'  => 1,
  2915.                       'first'  => true,
  2916.                     ];
  2917.                     if (is_array($context['_seq']) || (is_object($context['_seq']) && $context['_seq'] instanceof \Countable)) {
  2918.                         $length count($context['_seq']);
  2919.                         $context['loop']['revindex0'] = $length 1;
  2920.                         $context['loop']['revindex'] = $length;
  2921.                         $context['loop']['length'] = $length;
  2922.                         $context['loop']['last'] = === $length;
  2923.                     }
  2924.                     foreach ($context['_seq'] as $context["_key"] => $context["img"]) {
  2925.                         yield "'";
  2926.                         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl($context["img"]), "html"nulltrue);
  2927.                         yield "'";
  2928.                         if ((($tmp =  !CoreExtension::getAttribute($this->env$this->source$context["loop"], "last", [], "any"falsefalsefalse2580)) && $tmp instanceof Markup ? (string) $tmp $tmp)) {
  2929.                             yield ",";
  2930.                         }
  2931.                         ++$context['loop']['index0'];
  2932.                         ++$context['loop']['index'];
  2933.                         $context['loop']['first'] = false;
  2934.                         if (isset($context['loop']['revindex0'], $context['loop']['revindex'])) {
  2935.                             --$context['loop']['revindex0'];
  2936.                             --$context['loop']['revindex'];
  2937.                             $context['loop']['last'] = === $context['loop']['revindex0'];
  2938.                         }
  2939.                     }
  2940.                     $_parent $context['_parent'];
  2941.                     unset($context['_seq'], $context['_key'], $context['img'], $context['_parent'], $context['loop']);
  2942.                     $context array_intersect_key($context$_parent) + $_parent;
  2943.                     yield "];
  2944. currentImageIndex[";
  2945.                     // line 2581
  2946.                     yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source$context["product"], "id", [], "any"falsefalsefalse2581), "html"nulltrue);
  2947.                     yield "] = 0;";
  2948.                 }
  2949.             }
  2950.             $_parent $context['_parent'];
  2951.             unset($context['_seq'], $context['_key'], $context['product'], $context['_parent']);
  2952.             $context array_intersect_key($context$_parent) + $_parent;
  2953.         }
  2954.         // line 2582
  2955.         yield "
  2956. console.log('SCRIPT LOADED - Featured Gallery');
  2957. (function () {
  2958. \t'use strict';
  2959. \tconst SECTION_CONFIGS = [
  2960. \t\t{ grid: '#featuredGalleryGrid', prev: '#featuredGalleryPrev', next: '#featuredGalleryNext' },
  2961. \t\t{ grid: '#latestGalleryGrid', prev: '#latestGalleryPrev', next: '#latestGalleryNext' }
  2962. \t];
  2963. \tfunction triggerRipple(button) {
  2964. \t\tbutton.classList.remove('btn-ripple');
  2965. \t\tvoid button.offsetWidth;
  2966. \t\tbutton.classList.add('btn-ripple');
  2967. \t\tsetTimeout(() => button.classList.remove('btn-ripple'), 350);
  2968. \t}
  2969. \tfunction initSectionCarousel(config) {
  2970. \t\tconst \$grid = \$(config.grid);
  2971. \t\tif (!\$grid.length) {
  2972. \t\t\treturn;
  2973. \t\t}
  2974. \t\tif (typeof \$.fn.owlCarousel !== 'function') {
  2975. \t\t\tconsole.warn('OwlCarousel n\\'est pas chargé pour', config.grid);
  2976. \t\t\treturn;
  2977. \t\t}
  2978. \t\tif (!\$grid.hasClass('owl-carousel')) {
  2979. \t\t\t\$grid.addClass('owl-carousel');
  2980. \t\t}
  2981. \t\tif (\$grid.hasClass('owl-loaded')) {
  2982. \t\t\treturn;
  2983. \t\t}
  2984. \t\tconst owlInstance = \$grid.owlCarousel({
  2985. \t\t\tloop: true,
  2986. \t\t\tmargin: 30,
  2987. \t\t\tautoplay: true,
  2988. \t\t\tautoplayTimeout: 4800,
  2989. \t\t\tautoplayHoverPause: true,
  2990. \t\t\tsmartSpeed: 650,
  2991. \t\t\tnav: false,
  2992. \t\t\tdots: false,
  2993. \t\t\tresponsive: {
  2994. \t\t\t\t0: { items: 1, margin: 15 },
  2995. \t\t\t\t576: { items: 1.2, margin: 18 },
  2996. \t\t\t\t768: { items: 2, margin: 20 },
  2997. \t\t\t\t992: { items: 3, margin: 25 },
  2998. \t\t\t\t1400: { items: 4, margin: 30 }
  2999. \t\t\t}
  3000. \t\t});
  3001. \t\tconst \$prev = \$(config.prev);
  3002. \t\tconst \$next = \$(config.next);
  3003. \t\tif (\$prev.length) {
  3004. \t\t\t\$prev.off('click.carouselNav').on('click.carouselNav', function (e) {
  3005. \t\t\t\te.preventDefault();
  3006. \t\t\t\towlInstance.trigger('prev.owl.carousel');
  3007. \t\t\t\ttriggerRipple(this);
  3008. \t\t\t});
  3009. \t\t}
  3010. \t\tif (\$next.length) {
  3011. \t\t\t\$next.off('click.carouselNav').on('click.carouselNav', function (e) {
  3012. \t\t\t\te.preventDefault();
  3013. \t\t\t\towlInstance.trigger('next.owl.carousel');
  3014. \t\t\t\ttriggerRipple(this);
  3015. \t\t\t});
  3016. \t\t}
  3017. \t}
  3018. \tfunction ensureOwl(attempt = 0) {
  3019. \t\tif (window.jQuery && typeof \$.fn !== 'undefined' && typeof \$.fn.owlCarousel === 'function') {
  3020. \t\t\tSECTION_CONFIGS.forEach(initSectionCarousel);
  3021. \t\t} else if (attempt < 15) {
  3022. \t\t\tsetTimeout(() => ensureOwl(attempt + 1), 200);
  3023. \t\t} else {
  3024. \t\t\tconsole.warn('OwlCarousel non disponible après plusieurs tentatives');
  3025. \t\t}
  3026. \t}
  3027. \tdocument.addEventListener('DOMContentLoaded', function () {
  3028. \t\tensureOwl();
  3029. \t});
  3030. })();
  3031. document.addEventListener('DOMContentLoaded', function () { // Animation des cartes au scroll
  3032. const observerOptions = {
  3033. threshold: 0.1,
  3034. rootMargin: '0px 0px -50px 0px'
  3035. };
  3036. const observer = new IntersectionObserver(function (entries) {
  3037. entries.forEach(entry => {
  3038. if (entry.isIntersecting) {
  3039. entry.target.style.opacity = '1';
  3040. entry.target.style.transform = 'translateY(0)';
  3041. }
  3042. });
  3043. }, observerOptions);
  3044. // Observer toutes les cartes
  3045. document.querySelectorAll('.stats-card, .category-card, .product-card, .feature-card').forEach(card => {
  3046. card.style.opacity = '0';
  3047. card.style.transform = 'translateY(30px)';
  3048. card.style.transition = 'all 0.6s ease';
  3049. observer.observe(card);
  3050. });
  3051. // Compteur animé pour les statistiques
  3052. function animateCounter(element, target, duration = 2000) {
  3053. let start = 0;
  3054. const increment = target / (duration / 16);
  3055. function updateCounter() {
  3056. start += increment;
  3057. if (start < target) {
  3058. element.textContent = Math.floor(start).toLocaleString();
  3059. requestAnimationFrame(updateCounter);
  3060. } else {
  3061. element.textContent = target.toLocaleString();
  3062. }
  3063. }
  3064. updateCounter();
  3065. }
  3066. // Animer les compteurs quand ils sont visibles
  3067. const statsObserver = new IntersectionObserver(function (entries) {
  3068. entries.forEach(entry => {
  3069. if (entry.isIntersecting) {
  3070. const numberElement = entry.target.querySelector('.stats-number');
  3071. const target = parseInt(numberElement.textContent.replace(/,/g, ''));
  3072. animateCounter(numberElement, target);
  3073. statsObserver.unobserve(entry.target);
  3074. }
  3075. });
  3076. });
  3077. document.querySelectorAll('.stats-card').forEach(card => {
  3078. statsObserver.observe(card);
  3079. });
  3080. // Gestion de la newsletter
  3081. const newsletterForm = document.querySelector('.newsletter-form');
  3082. if (newsletterForm) {
  3083. newsletterForm.addEventListener('submit', function (e) {
  3084. e.preventDefault();
  3085. const email = this.querySelector('input[type=\"email\"]').value;
  3086. const button = this.querySelector('button');
  3087. const originalText = button.innerHTML;
  3088. // Désactiver le bouton
  3089. button.disabled = true;
  3090. button.innerHTML = '<i class=\"lnr lnr-spinner me-2\"></i>Inscription...';
  3091. // Envoyer la requête
  3092. fetch('";
  3093.         // line 2742
  3094.         yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("ui_newsletter_subscribe");
  3095.         yield "', {
  3096. method: 'POST',
  3097. headers: {
  3098. 'Content-Type': 'application/x-www-form-urlencoded',
  3099. 'X-Requested-With': 'XMLHttpRequest'
  3100. },
  3101. body: 'email=' + encodeURIComponent(email)
  3102. }).then(response => response.json()).then(data => {
  3103. if (data.success) {
  3104. button.innerHTML = '<i class=\"lnr lnr-check me-2\"></i>Inscription réussie !';
  3105. button.classList.remove('btn-warning');
  3106. button.classList.add('btn-success');
  3107. this.reset();
  3108. } else {
  3109. button.innerHTML = '<i class=\"lnr lnr-warning me-2\"></i>Erreur';
  3110. button.classList.remove('btn-warning');
  3111. button.classList.add('btn-danger');
  3112. }
  3113. setTimeout(() => {
  3114. button.innerHTML = originalText;
  3115. button.classList.remove('btn-success', 'btn-danger');
  3116. button.classList.add('btn-warning');
  3117. button.disabled = false;
  3118. }, 3000);
  3119. }).catch(error => {
  3120. console.error('Erreur:', error);
  3121. button.innerHTML = '<i class=\"lnr lnr-warning me-2\"></i>Erreur';
  3122. button.classList.remove('btn-warning');
  3123. button.classList.add('btn-danger');
  3124. setTimeout(() => {
  3125. button.innerHTML = originalText;
  3126. button.classList.remove('btn-danger');
  3127. button.classList.add('btn-warning');
  3128. button.disabled = false;
  3129. }, 3000);
  3130. });
  3131. });
  3132. }
  3133. });
  3134. // Effet parallaxe léger pour le hero
  3135. window.addEventListener('scroll', function () {
  3136. const scrolled = window.pageYOffset;
  3137. const hero = document.querySelector('.hero-banner');
  3138. if (hero) {
  3139. hero.style.transform = `translateY(\${
  3140. scrolled * 0.5
  3141. }px)`;
  3142. }
  3143. });
  3144. });
  3145. // Fonction pour afficher toutes les catégories
  3146. function showAllCategories () {
  3147. const container = document.getElementById('productCategoriesContainer');
  3148. const btn = document.getElementById('showAllCategoriesBtn');";
  3149.         // line 2799
  3150.         if ((Twig\Extension\CoreExtension::length($this->env->getCharset(), ($context["allCategories"] ?? null)) > 8)) {
  3151.             $context['_parent'] = $context;
  3152.             $context['_seq'] = CoreExtension::ensureTraversable(($context["allCategories"] ?? null));
  3153.             $context['loop'] = [
  3154.               'parent' => $context['_parent'],
  3155.               'index0' => 0,
  3156.               'index'  => 1,
  3157.               'first'  => true,
  3158.             ];
  3159.             if (is_array($context['_seq']) || (is_object($context['_seq']) && $context['_seq'] instanceof \Countable)) {
  3160.                 $length count($context['_seq']);
  3161.                 $context['loop']['revindex0'] = $length 1;
  3162.                 $context['loop']['revindex'] = $length;
  3163.                 $context['loop']['length'] = $length;
  3164.                 $context['loop']['last'] = === $length;
  3165.             }
  3166.             foreach ($context['_seq'] as $context["_key"] => $context["category"]) {
  3167.                 if ((CoreExtension::getAttribute($this->env$this->source$context["loop"], "index", [], "any"falsefalsefalse2799) > 8)) {
  3168.                     yield "const categoryHtml ";
  3169.                     yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source$context["loop"], "index", [], "any"falsefalsefalse2799), "html"nulltrue);
  3170.                     yield " = `
  3171.         <div class=\"col-lg-3 col-md-4 col-sm-6 mb-4\">
  3172.             <div class=\"category-card-custom d-flex flex-column h-100\">
  3173.                 <div class=\"category-image-wrapper\">
  3174.                     <div class=\"category-image\" style=\"background-image: url('";
  3175.                     // line 2803
  3176.                     if ((($tmp CoreExtension::getAttribute($this->env$this->source$context["category"], "bannerImage", [], "any"falsefalsefalse2803)) && $tmp instanceof Markup ? (string) $tmp $tmp)) {
  3177.                         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl(("uploads/categories/banner/" CoreExtension::getAttribute($this->env$this->source$context["category"], "bannerImage", [], "any"falsefalsefalse2803))), "html"nulltrue);
  3178.                     } else {
  3179.                         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl((("ui/img/category/cat-" CoreExtension::getAttribute($this->env$this->source$context["loop"], "index", [], "any"falsefalsefalse2803)) . ".jpg")), "html"nulltrue);
  3180.                     }
  3181.                     yield "')\">
  3182.                         <div class=\"category-overlay-custom\">
  3183.                             <div class=\"category-icon-wrapper\">
  3184.                                 <i class=\"lnr lnr-tag\" style=\"font-size: 3rem;\"></i>
  3185.                                 <h4 class=\"mt-3\">";
  3186.                     // line 2807
  3187.                     yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source$context["category"], "name", [], "any"falsefalsefalse2807), "html"nulltrue);
  3188.                     yield "</h4>
  3189.                             </div>
  3190.                         </div>
  3191.                     </div>
  3192.                 </div>
  3193.                 <div class=\"category-content p-3 d-flex flex-column flex-grow-1\">
  3194.                     <h5 class=\"mb-2\">";
  3195.                     // line 2813
  3196.                     yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source$context["category"], "name", [], "any"falsefalsefalse2813), "html"nulltrue);
  3197.                     yield "</h5>
  3198.                     ";
  3199.                     // line 2814
  3200.                     if ((($tmp CoreExtension::getAttribute($this->env$this->source$context["category"], "description", [], "any"falsefalsefalse2814)) && $tmp instanceof Markup ? (string) $tmp $tmp)) {
  3201.                         // line 2815
  3202.                         yield "                        <p class=\"text-muted mb-3 small\">";
  3203.                         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(Twig\Extension\CoreExtension::slice($this->env->getCharset(), Twig\Extension\CoreExtension::striptags(CoreExtension::getAttribute($this->env$this->source$context["category"], "description", [], "any"falsefalsefalse2815)), 060), "html"nulltrue);
  3204.                         if ((Twig\Extension\CoreExtension::length($this->env->getCharset(), Twig\Extension\CoreExtension::striptags(CoreExtension::getAttribute($this->env$this->source$context["category"], "description", [], "any"falsefalsefalse2815))) > 60)) {
  3205.                             yield "...";
  3206.                         }
  3207.                         yield "</p>
  3208.                     ";
  3209.                     }
  3210.                     // line 2817
  3211.                     yield "                    <a href=\"";
  3212.                     yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("ui_listing", ["category" => CoreExtension::getAttribute($this->env$this->source$context["category"], "slug", [], "any"falsefalsefalse2817)]), "html"nulltrue);
  3213.                     yield "\" class=\"btn btn-primary-custom btn-sm w-100 mt-auto\">
  3214.                         Voir les produits
  3215.                     </a>
  3216.                 </div>
  3217.             </div>
  3218.         </div>
  3219.     `;
  3220. container.insertAdjacentHTML('beforeend', categoryHtml ";
  3221.                     // line 2824
  3222.                     yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source$context["loop"], "index", [], "any"falsefalsefalse2824), "html"nulltrue);
  3223.                     yield ");";
  3224.                 }
  3225.                 ++$context['loop']['index0'];
  3226.                 ++$context['loop']['index'];
  3227.                 $context['loop']['first'] = false;
  3228.                 if (isset($context['loop']['revindex0'], $context['loop']['revindex'])) {
  3229.                     --$context['loop']['revindex0'];
  3230.                     --$context['loop']['revindex'];
  3231.                     $context['loop']['last'] = === $context['loop']['revindex0'];
  3232.                 }
  3233.             }
  3234.             $_parent $context['_parent'];
  3235.             unset($context['_seq'], $context['_key'], $context['category'], $context['_parent'], $context['loop']);
  3236.             $context array_intersect_key($context$_parent) + $_parent;
  3237.         }
  3238.         yield "if (btn) 
  3239. btn.style.display = 'none';
  3240. }
  3241. // Fonction pour afficher toutes les catégories de boutiques
  3242. function showAllShopCategories () {
  3243. const container = document.getElementById('shopCategoriesContainer');
  3244. const btn = document.querySelector('[onclick=\"showAllShopCategories()\"]') ?. parentElement;";
  3245.         // line 2834
  3246.         if ((Twig\Extension\CoreExtension::length($this->env->getCharset(), ($context["allShopCategories"] ?? null)) > 6)) {
  3247.             $context['_parent'] = $context;
  3248.             $context['_seq'] = CoreExtension::ensureTraversable(($context["allShopCategories"] ?? null));
  3249.             $context['loop'] = [
  3250.               'parent' => $context['_parent'],
  3251.               'index0' => 0,
  3252.               'index'  => 1,
  3253.               'first'  => true,
  3254.             ];
  3255.             if (is_array($context['_seq']) || (is_object($context['_seq']) && $context['_seq'] instanceof \Countable)) {
  3256.                 $length count($context['_seq']);
  3257.                 $context['loop']['revindex0'] = $length 1;
  3258.                 $context['loop']['revindex'] = $length;
  3259.                 $context['loop']['length'] = $length;
  3260.                 $context['loop']['last'] = === $length;
  3261.             }
  3262.             foreach ($context['_seq'] as $context["_key"] => $context["shopCategory"]) {
  3263.                 if ((CoreExtension::getAttribute($this->env$this->source$context["loop"], "index", [], "any"falsefalsefalse2834) > 6)) {
  3264.                     yield "const shopCategoryHtml ";
  3265.                     yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source$context["loop"], "index", [], "any"falsefalsefalse2834), "html"nulltrue);
  3266.                     yield " = `
  3267.         <div class=\"col-lg-4 col-md-6 mb-4\">
  3268.             <a href=\"";
  3269.                     // line 2836
  3270.                     yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("ui_shops_list");
  3271.                     yield "?category=";
  3272.                     yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source$context["shopCategory"], "slug", [], "any"falsefalsefalse2836), "html"nulltrue);
  3273.                     yield "\" class=\"text-decoration-none h-100\" style=\"display: block;\">
  3274.                 <div class=\"category-card-custom shop-category-clickable d-flex flex-column h-100\">
  3275.                     <div class=\"category-image-wrapper\">
  3276.                         <div class=\"category-image\" style=\"background-image: url('";
  3277.                     // line 2839
  3278.                     if ((($tmp CoreExtension::getAttribute($this->env$this->source$context["shopCategory"], "bannerImage", [], "any"falsefalsefalse2839)) && $tmp instanceof Markup ? (string) $tmp $tmp)) {
  3279.                         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl(CoreExtension::getAttribute($this->env$this->source$context["shopCategory"], "bannerImage", [], "any"falsefalsefalse2839)), "html"nulltrue);
  3280.                     } else {
  3281.                         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl((("ui/img/category/shop-" CoreExtension::getAttribute($this->env$this->source$context["loop"], "index", [], "any"falsefalsefalse2839)) . ".jpg")), "html"nulltrue);
  3282.                     }
  3283.                     yield "')\">
  3284.                             <div class=\"category-overlay-custom\">
  3285.                                 <div class=\"category-icon-wrapper\">
  3286.                                     <i class=\"lnr lnr-store\" style=\"font-size: 3rem;\"></i>
  3287.                                     <h4 class=\"mt-3\">";
  3288.                     // line 2843
  3289.                     yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source$context["shopCategory"], "name", [], "any"falsefalsefalse2843), "html"nulltrue);
  3290.                     yield "</h4>
  3291.                                     ";
  3292.                     // line 2844
  3293.                     if ((($tmp CoreExtension::getAttribute($this->env$this->source$context["shopCategory"], "description", [], "any"falsefalsefalse2844)) && $tmp instanceof Markup ? (string) $tmp $tmp)) {
  3294.                         // line 2845
  3295.                         yield "                                        <p class=\"mt-2 px-3\">";
  3296.                         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(Twig\Extension\CoreExtension::slice($this->env->getCharset(), Twig\Extension\CoreExtension::striptags(CoreExtension::getAttribute($this->env$this->source$context["shopCategory"], "description", [], "any"falsefalsefalse2845)), 0100), "html"nulltrue);
  3297.                         if ((Twig\Extension\CoreExtension::length($this->env->getCharset(), Twig\Extension\CoreExtension::striptags(CoreExtension::getAttribute($this->env$this->source$context["shopCategory"], "description", [], "any"falsefalsefalse2845))) > 100)) {
  3298.                             yield "...";
  3299.                         }
  3300.                         yield "</p>
  3301.                                     ";
  3302.                     }
  3303.                     // line 2847
  3304.                     yield "                                </div>
  3305.                             </div>
  3306.                         </div>
  3307.                     </div>
  3308.                     <div class=\"category-content p-3 d-flex flex-column flex-grow-1\">
  3309.                         <h5 class=\"mb-2\">";
  3310.                     // line 2852
  3311.                     yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source$context["shopCategory"], "name", [], "any"falsefalsefalse2852), "html"nulltrue);
  3312.                     yield "</h5>
  3313.                         ";
  3314.                     // line 2853
  3315.                     if ((($tmp CoreExtension::getAttribute($this->env$this->source$context["shopCategory"], "description", [], "any"falsefalsefalse2853)) && $tmp instanceof Markup ? (string) $tmp $tmp)) {
  3316.                         // line 2854
  3317.                         yield "                            <p class=\"text-muted mb-3 small\">";
  3318.                         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(Twig\Extension\CoreExtension::slice($this->env->getCharset(), Twig\Extension\CoreExtension::striptags(CoreExtension::getAttribute($this->env$this->source$context["shopCategory"], "description", [], "any"falsefalsefalse2854)), 080), "html"nulltrue);
  3319.                         if ((Twig\Extension\CoreExtension::length($this->env->getCharset(), Twig\Extension\CoreExtension::striptags(CoreExtension::getAttribute($this->env$this->source$context["shopCategory"], "description", [], "any"falsefalsefalse2854))) > 80)) {
  3320.                             yield "...";
  3321.                         }
  3322.                         yield "</p>
  3323.                         ";
  3324.                     }
  3325.                     // line 2856
  3326.                     yield "                        <span class=\"btn btn-primary-custom btn-sm w-100 mt-auto\">
  3327.                             Voir les boutiques <i class=\"lnr lnr-arrow-right ms-2\"></i>
  3328.                         </span>
  3329.                     </div>
  3330.                 </div>
  3331.             </a>
  3332.         </div>
  3333.     `;
  3334. container.insertAdjacentHTML('beforeend', shopCategoryHtml ";
  3335.                     // line 2864
  3336.                     yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source$context["loop"], "index", [], "any"falsefalsefalse2864), "html"nulltrue);
  3337.                     yield ");";
  3338.                 }
  3339.                 ++$context['loop']['index0'];
  3340.                 ++$context['loop']['index'];
  3341.                 $context['loop']['first'] = false;
  3342.                 if (isset($context['loop']['revindex0'], $context['loop']['revindex'])) {
  3343.                     --$context['loop']['revindex0'];
  3344.                     --$context['loop']['revindex'];
  3345.                     $context['loop']['last'] = === $context['loop']['revindex0'];
  3346.                 }
  3347.             }
  3348.             $_parent $context['_parent'];
  3349.             unset($context['_seq'], $context['_key'], $context['shopCategory'], $context['_parent'], $context['loop']);
  3350.             $context array_intersect_key($context$_parent) + $_parent;
  3351.         }
  3352.         yield "if (btn) 
  3353. btn.style.display = 'none';
  3354. }
  3355. // Initialiser les carousels
  3356. \$(document).ready(function () { // Carousel bannière principale
  3357. if (\$('.active-banner-slider').length) {
  3358. \$('.active-banner-slider').owlCarousel({
  3359. items: 1,
  3360. loop: true,
  3361. autoplay: true,
  3362. autoplayTimeout: 6000,
  3363. autoplayHoverPause: true,
  3364. nav: true,
  3365. dots: true,
  3366. navText: [
  3367. '<i class=\"lnr lnr-chevron-left\"></i>', '<i class=\"lnr lnr-chevron-right\"></i>'
  3368. ],
  3369. smartSpeed: 1000,
  3370. animateOut: 'fadeOut',
  3371. animateIn: 'fadeIn',
  3372. responsive: {
  3373. 0: {
  3374. items: 1,
  3375. nav: true,
  3376. dots: true
  3377. },
  3378. 768: {
  3379. items: 1,
  3380. nav: true,
  3381. dots: true
  3382. },
  3383. 992: {
  3384. items: 1,
  3385. nav: true,
  3386. dots: true
  3387. }
  3388. }
  3389. });
  3390. }
  3391. // Animation d'apparition pour les cartes produits
  3392. const observerOptions = {
  3393. threshold: 0.1,
  3394. rootMargin: '0px 0px -50px 0px'
  3395. };
  3396. const productObserver = new IntersectionObserver(function (entries) {
  3397. entries.forEach(entry => {
  3398. if (entry.isIntersecting) {
  3399. entry.target.style.opacity = '1';
  3400. entry.target.style.transform = 'translateY(0)';
  3401. }
  3402. });
  3403. }, observerOptions);
  3404. document.querySelectorAll('.product-card-modern').forEach((card, index) => {
  3405. card.style.opacity = '0';
  3406. card.style.transform = 'translateY(20px)';
  3407. card.style.transition = `opacity 0.6s ease \${
  3408. index * 0.1
  3409. }s, transform 0.6s ease \${
  3410. index * 0.1
  3411. }s`;
  3412. productObserver.observe(card);
  3413. });
  3414. });
  3415. \t</script>
  3416. \t<!-- Modal \"Prêt à commencer ?\" -->
  3417. \t<div class=\"modal fade\" id=\"readyModal\" tabindex=\"-1\">
  3418. \t\t<div class=\"modal-dialog modal-dialog-centered\">
  3419. \t\t\t<div class=\"modal-content\">
  3420. \t\t\t\t<div class=\"modal-header\">
  3421. \t\t\t\t\t<h5 class=\"modal-title\">
  3422. \t\t\t\t\t\t<i class=\"lnr lnr-rocket me-2\"></i>Prêt à commencer ?
  3423. \t\t\t\t\t</h5>
  3424. \t\t\t\t\t<button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\"></button>
  3425. \t\t\t\t</div>
  3426. \t\t\t\t<div class=\"modal-body\">
  3427. \t\t\t\t\t";
  3428.         // line 2947
  3429.         if ((($tmp CoreExtension::getAttribute($this->env$this->source, ($context["app"] ?? null), "user", [], "any"falsefalsefalse2947)) && $tmp instanceof Markup ? (string) $tmp $tmp)) {
  3430.             // line 2948
  3431.             yield "\t\t\t\t\t\t";
  3432.             if ((CoreExtension::getAttribute($this->env$this->sourceCoreExtension::getAttribute($this->env$this->source, ($context["app"] ?? null), "user", [], "any"falsefalsefalse2948), "kycStatus", [], "any"falsefalsefalse2948) == "approved")) {
  3433.                 // line 2949
  3434.                 yield "\t\t\t\t\t\t\t<div class=\"text-center\">
  3435. \t\t\t\t\t\t\t\t<i class=\"lnr lnr-checkmark-circle\" style=\"font-size: 4rem; color: #28a745;\"></i>
  3436. \t\t\t\t\t\t\t\t<h4 class=\"mt-3\">Votre compte est vérifié !</h4>
  3437. \t\t\t\t\t\t\t\t<p class=\"text-muted\">Vous pouvez commencer à utiliser MaketOu en toute sérénité.</p>
  3438. \t\t\t\t\t\t\t\t<div class=\"mt-4\">
  3439. \t\t\t\t\t\t\t\t\t<a href=\"";
  3440.                 // line 2954
  3441.                 yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("seller_index");
  3442.                 yield "\" class=\"btn btn-primary me-2\">
  3443. \t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-store me-1\"></i>Ouvrir ma boutique
  3444. \t\t\t\t\t\t\t\t\t</a>
  3445. \t\t\t\t\t\t\t\t\t<a href=\"";
  3446.                 // line 2957
  3447.                 yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("ui_listing");
  3448.                 yield "\" class=\"btn btn-outline-primary\">
  3449. \t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-magnifier me-1\"></i>Voir les produits
  3450. \t\t\t\t\t\t\t\t\t</a>
  3451. \t\t\t\t\t\t\t\t</div>
  3452. \t\t\t\t\t\t\t</div>
  3453. \t\t\t\t\t\t";
  3454.             } else {
  3455.                 // line 2963
  3456.                 yield "\t\t\t\t\t\t\t<div class=\"text-center\">
  3457. \t\t\t\t\t\t\t\t<i class=\"lnr lnr-shield\" style=\"font-size: 4rem; color: #ffa200;\"></i>
  3458. \t\t\t\t\t\t\t\t<h4 class=\"mt-3\">Vérification requise</h4>
  3459. \t\t\t\t\t\t\t\t<p class=\"text-muted\">Pour utiliser toutes les fonctionnalités de MaketOu, vous devez compléter votre vérification KYC.</p>
  3460. \t\t\t\t\t\t\t\t<div class=\"mt-4\">
  3461. \t\t\t\t\t\t\t\t\t<a href=\"";
  3462.                 // line 2968
  3463.                 yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("ui_account_kyc");
  3464.                 yield "\" class=\"btn btn-primary btn-lg\">
  3465. \t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-checkmark-circle me-1\"></i> <span class=\"d-none d-md-inline\">Commencer la vérification</span>
  3466. \t\t\t\t\t\t\t\t\t</a>
  3467. \t\t\t\t\t\t\t\t</div>
  3468. \t\t\t\t\t\t\t</div>
  3469. \t\t\t\t\t\t";
  3470.             }
  3471.             // line 2974
  3472.             yield "\t\t\t\t\t";
  3473.         } else {
  3474.             // line 2975
  3475.             yield "\t\t\t\t\t\t<div class=\"text-center\">
  3476. \t\t\t\t\t\t\t<i class=\"lnr lnr-user\" style=\"font-size: 4rem; color: #007bff;\"></i>
  3477. \t\t\t\t\t\t\t<h4 class=\"mt-3\">Connectez-vous pour commencer</h4>
  3478. \t\t\t\t\t\t\t<p class=\"text-muted\">Créez un compte ou connectez-vous pour accéder à toutes les fonctionnalités de MaketOu.</p>
  3479. \t\t\t\t\t\t\t<div class=\"mt-4\">
  3480. \t\t\t\t\t\t\t\t<a href=\"";
  3481.             // line 2980
  3482.             yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("ui_app_login");
  3483.             yield "\" class=\"btn btn-primary btn-lg me-2\">
  3484. \t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-enter me-1\"></i>Se connecter
  3485. \t\t\t\t\t\t\t\t</a>
  3486. \t\t\t\t\t\t\t\t<a href=\"";
  3487.             // line 2983
  3488.             yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("ui_app_register");
  3489.             yield "\" class=\"btn btn-outline-primary btn-lg\">
  3490. \t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-user-plus me-1\"></i>S'inscrire
  3491. \t\t\t\t\t\t\t\t</a>
  3492. \t\t\t\t\t\t\t</div>
  3493. \t\t\t\t\t\t</div>
  3494. \t\t\t\t\t";
  3495.         }
  3496.         // line 2989
  3497.         yield "\t\t\t\t</div>
  3498. \t\t\t</div>
  3499. \t\t</div>
  3500. \t</div>
  3501. ";
  3502.         
  3503.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  3504.         
  3505.         $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  3506.         yield from [];
  3507.     }
  3508.     /**
  3509.      * @codeCoverageIgnore
  3510.      */
  3511.     public function getTemplateName(): string
  3512.     {
  3513.         return "home/index.html.twig";
  3514.     }
  3515.     /**
  3516.      * @codeCoverageIgnore
  3517.      */
  3518.     public function isTraitable(): bool
  3519.     {
  3520.         return false;
  3521.     }
  3522.     /**
  3523.      * @codeCoverageIgnore
  3524.      */
  3525.     public function getDebugInfo(): array
  3526.     {
  3527.         return array (  3815 => 2989,  3806 => 2983,  3800 => 2980,  3793 => 2975,  3790 => 2974,  3781 => 2968,  3774 => 2963,  3765 => 2957,  3759 => 2954,  3752 => 2949,  3749 => 2948,  3747 => 2947,  3646 => 2864,  3636 => 2856,  3627 => 2854,  3625 => 2853,  3621 => 2852,  3614 => 2847,  3605 => 2845,  3603 => 2844,  3599 => 2843,  3588 => 2839,  3580 => 2836,  3556 => 2834,  3528 => 2824,  3517 => 2817,  3508 => 2815,  3506 => 2814,  3502 => 2813,  3493 => 2807,  3482 => 2803,  3456 => 2799,  3396 => 2742,  3234 => 2582,  3225 => 2581,  3185 => 2580,  3183 => 2579,  3179 => 2578,  3177 => 2577,  3173 => 2575,  3164 => 2574,  3124 => 2573,  3122 => 2572,  3118 => 2571,  3116 => 2570,  3089 => 2546,  3084 => 2543,  3071 => 2542,  3052 => 2533,  3039 => 2523,  2909 => 2395,  2901 => 2389,  2886 => 2387,  2884 => 2386,  2881 => 2385,  2864 => 2384,  2853 => 2375,  2851 => 2374,  2848 => 2373,  2842 => 2369,  2828 => 2361,  2824 => 2360,  2820 => 2358,  2816 => 2356,  2808 => 2354,  2806 => 2353,  2797 => 2349,  2792 => 2346,  2788 => 2344,  2786 => 2343,  2781 => 2342,  2779 => 2341,  2775 => 2339,  2771 => 2338,  2762 => 2331,  2760 => 2330,  2757 => 2329,  2746 => 2321,  2721 => 2298,  2706 => 2296,  2704 => 2295,  2701 => 2294,  2684 => 2293,  2672 => 2283,  2670 => 2282,  2666 => 2280,  2655 => 2272,  2630 => 2249,  2615 => 2247,  2613 => 2246,  2610 => 2245,  2593 => 2244,  2581 => 2234,  2579 => 2233,  2575 => 2231,  2570 => 2228,  2563 => 2224,  2558 => 2221,  2556 => 2220,  2553 => 2219,  2531 => 2210,  2527 => 2208,  2522 => 2206,  2517 => 2205,  2515 => 2204,  2511 => 2203,  2504 => 2198,  2500 => 2196,  2495 => 2194,  2490 => 2193,  2488 => 2192,  2484 => 2191,  2473 => 2187,  2465 => 2184,  2462 => 2183,  2445 => 2182,  2436 => 2175,  2434 => 2174,  2430 => 2172,  2424 => 2168,  2402 => 2161,  2398 => 2159,  2393 => 2157,  2388 => 2156,  2386 => 2155,  2382 => 2154,  2373 => 2148,  2362 => 2144,  2357 => 2141,  2340 => 2140,  2331 => 2133,  2329 => 2132,  2324 => 2129,  2306 => 2113,  2300 => 2109,  2279 => 2101,  2271 => 2099,  2263 => 2097,  2261 => 2096,  2253 => 2090,  2247 => 2087,  2241 => 2085,  2239 => 2084,  2230 => 2078,  2223 => 2074,  2216 => 2070,  2211 => 2068,  2199 => 2058,  2182 => 2057,  2178 => 2055,  2176 => 2054,  2172 => 2052,  2159 => 2051,  453 => 355,  103 => 7,  90 => 6,  66 => 3,  43 => 1,);
  3528.     }
  3529.     public function getSourceContext(): Source
  3530.     {
  3531.         return new Source("{% extends 'base_home.html.twig' %}
  3532. {% block title %}Accueil | MaketOu - Votre marketplace haïtienne
  3533. {% endblock %}
  3534. {% block stylesheets %}
  3535. \t<style>
  3536. \t\t/* Styles personnalisés pour la page d'accueil */
  3537. \t\t.hero-banner {
  3538. \t\t\tbackground: linear-gradient(135deg, #ffa200 0%, #e8910a 100%);
  3539. \t\t\tcolor: white;
  3540. \t\t\tpadding: 100px 0;
  3541. \t\t\tposition: relative;
  3542. \t\t\toverflow: hidden;
  3543. \t\t}
  3544. \t\t.hero-banner::before {
  3545. \t\t\tcontent: '';
  3546. \t\t\tposition: absolute;
  3547. \t\t\ttop: 0;
  3548. \t\t\tleft: 0;
  3549. \t\t\tright: 0;
  3550. \t\t\tbottom: 0;
  3551. \t\t\tbackground: url('data:image/svg+xml, <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><defs><pattern id=\"grain\" width=\"100\" height=\"100\" patternUnits=\"userSpaceOnUse\"><circle cx=\"25\" cy=\"25\" r=\"1\" fill=\"rgba(255, 255, 255, 0.1)\"/><circle cx=\"75\" cy=\"75\" r=\"1\" fill=\"rgba(255, 255, 255, 0.1)\"/><circle cx=\"50\" cy=\"10\" r=\"0.5\" fill=\"rgba(255, 255, 255, 0.1)\"/><circle cx=\"10\" cy=\"90\" r=\"0.5\" fill=\"rgba(255, 255, 255, 0.1)\"/></pattern></defs><rect width=\"100\" height=\"100\" fill=\"url(%23grain)\"/></svg>');
  3552. \t\t\topacity: 0.3;
  3553. \t\t}
  3554. \t\t.hero-content {
  3555. \t\t\tposition: relative;
  3556. \t\t\tz-index: 2;
  3557. \t\t}
  3558. \t\t.stats-card {
  3559. \t\t\tbackground: white;
  3560. \t\t\tborder-radius: 15px;
  3561. \t\t\tpadding: 30px;
  3562. \t\t\ttext-align: center;
  3563. \t\t\tbox-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
  3564. \t\t\ttransition: transform 0.3s ease;
  3565. \t\t}
  3566. \t\t.stats-card:hover {
  3567. \t\t\ttransform: translateY(-5px);
  3568. \t\t}
  3569. \t\t.stats-number {
  3570. \t\t\tfont-size: 3rem;
  3571. \t\t\tfont-weight: bold;
  3572. \t\t\tcolor: #ffa200;
  3573. \t\t\tdisplay: block;
  3574. \t\t}
  3575. \t\t.stats-label {
  3576. \t\t\tcolor: #666;
  3577. \t\t\tfont-size: 1.1rem;
  3578. \t\t\tmargin-top: 10px;
  3579. \t\t}
  3580. \t\t.category-card {
  3581. \t\t\tbackground: white;
  3582. \t\t\tborder-radius: 15px;
  3583. \t\t\toverflow: hidden;
  3584. \t\t\tbox-shadow: 0 5px 20px rgba(0, 0, 0, 0.1);
  3585. \t\t\ttransition: all 0.3s ease;
  3586. \t\t\theight: 100%;
  3587. \t\t}
  3588. \t\t.category-card:hover {
  3589. \t\t\ttransform: translateY(-5px);
  3590. \t\t\tbox-shadow: 0 15px 40px rgba(0, 0, 0, 0.15);
  3591. \t\t}
  3592. \t\t.category-image {
  3593. \t\t\theight: 200px;
  3594. \t\t\tbackground-size: cover;
  3595. \t\t\tbackground-position: center;
  3596. \t\t\tposition: relative;
  3597. \t\t}
  3598. \t\t.category-overlay {
  3599. \t\t\tposition: absolute;
  3600. \t\t\ttop: 0;
  3601. \t\t\tleft: 0;
  3602. \t\t\tright: 0;
  3603. \t\t\tbottom: 0;
  3604. \t\t\tbackground: linear-gradient(45deg, rgba(255,162,0,0.8), rgba(232,145,10,0.8));
  3605. \t\t\tdisplay: flex;
  3606. \t\t\talign-items: center;
  3607. \t\t\tjustify-content: center;
  3608. \t\t\topacity: 0;
  3609. \t\t\ttransition: opacity 0.3s ease;
  3610. \t\t}
  3611. \t\t.category-card:hover .category-overlay {
  3612. \t\t\topacity: 1;
  3613. \t\t}
  3614. \t\t.product-card {
  3615. \t\t\tbackground: white;
  3616. \t\t\tborder-radius: 15px;
  3617. \t\t\toverflow: hidden;
  3618. \t\t\tbox-shadow: 0 5px 20px rgba(0, 0, 0, 0.1);
  3619. \t\t\ttransition: all 0.3s ease;
  3620. \t\t\theight: 100%;
  3621. \t\t}
  3622. \t\t.product-card:hover {
  3623. \t\t\ttransform: translateY(-5px);
  3624. \t\t\tbox-shadow: 0 15px 40px rgba(0, 0, 0, 0.15);
  3625. \t\t}
  3626. \t\t.product-image {
  3627. \t\t\theight: 250px;
  3628. \t\t\tbackground-size: cover;
  3629. \t\t\tbackground-position: center;
  3630. \t\t\tposition: relative;
  3631. \t\t}
  3632. \t\t.product-badge {
  3633. \t\t\tposition: absolute;
  3634. \t\t\ttop: 15px;
  3635. \t\t\tright: 15px;
  3636. \t\t\tbackground: #ffa200;
  3637. \t\t\tcolor: white;
  3638. \t\t\tpadding: 5px 10px;
  3639. \t\t\tborder-radius: 20px;
  3640. \t\t\tfont-size: 0.8rem;
  3641. \t\t\tfont-weight: bold;
  3642. \t\t}
  3643. \t\t.product-info {
  3644. \t\t\tpadding: 20px;
  3645. \t\t}
  3646. \t\t.product-title {
  3647. \t\t\tfont-size: 1.2rem;
  3648. \t\t\tfont-weight: 600;
  3649. \t\t\tmargin-bottom: 10px;
  3650. \t\t\tcolor: #333;
  3651. \t\t}
  3652. \t\t.product-price {
  3653. \t\t\tfont-size: 1.5rem;
  3654. \t\t\tfont-weight: bold;
  3655. \t\t\tcolor: #ffa200;
  3656. \t\t\tmargin-bottom: 10px;
  3657. \t\t}
  3658. \t\t.product-shop {
  3659. \t\t\tfont-size: 0.9rem;
  3660. \t\t\tcolor: #666;
  3661. \t\t\tmargin-bottom: 15px;
  3662. \t\t}
  3663. \t\t.btn-primary-custom {
  3664. \t\t\tbackground: #ffa200;
  3665. \t\t\tborder: none;
  3666. \t\t\tcolor: white;
  3667. \t\t\tpadding: 12px 30px;
  3668. \t\t\tborder-radius: 25px;
  3669. \t\t\tfont-weight: 500;
  3670. \t\t\ttransition: all 0.3s ease;
  3671. \t\t}
  3672. \t\t.btn-primary-custom:hover {
  3673. \t\t\tbackground: #e8910a;
  3674. \t\t\ttransform: translateY(-2px);
  3675. \t\t\tbox-shadow: 0 5px 15px rgba(255, 162, 0, 0.3);
  3676. \t\t}
  3677. \t\t.section-title {
  3678. \t\t\ttext-align: center;
  3679. \t\t\tmargin-bottom: 50px;
  3680. \t\t}
  3681. \t\t.section-title h2 {
  3682. \t\t\tfont-size: 2.5rem;
  3683. \t\t\tfont-weight: bold;
  3684. \t\t\tcolor: #333;
  3685. \t\t\tmargin-bottom: 15px;
  3686. \t\t}
  3687. \t\t.section-title p {
  3688. \t\t\tfont-size: 1.2rem;
  3689. \t\t\tcolor: #666;
  3690. \t\t\tmax-width: 600px;
  3691. \t\t\tmargin: 0 auto;
  3692. \t\t}
  3693. \t\t.feature-card {
  3694. \t\t\ttext-align: center;
  3695. \t\t\tpadding: 30px 20px;
  3696. \t\t\tbackground: white;
  3697. \t\t\tborder-radius: 15px;
  3698. \t\t\tbox-shadow: 0 5px 20px rgba(0, 0, 0, 0.1);
  3699. \t\t\ttransition: all 0.3s ease;
  3700. \t\t\theight: 100%;
  3701. \t\t}
  3702. \t\t.feature-card:hover {
  3703. \t\t\ttransform: translateY(-5px);
  3704. \t\t\tbox-shadow: 0 15px 40px rgba(0, 0, 0, 0.15);
  3705. \t\t}
  3706. \t\t.feature-icon {
  3707. \t\t\twidth: 80px;
  3708. \t\t\theight: 80px;
  3709. \t\t\tbackground: linear-gradient(135deg, #ffa200, #e8910a);
  3710. \t\t\tborder-radius: 50%;
  3711. \t\t\tdisplay: flex;
  3712. \t\t\talign-items: center;
  3713. \t\t\tjustify-content: center;
  3714. \t\t\tmargin: 0 auto 20px;
  3715. \t\t\tfont-size: 2rem;
  3716. \t\t\tcolor: white;
  3717. \t\t}
  3718. \t\t.newsletter-section {
  3719. \t\t\tbackground: linear-gradient(135deg, #ffa200 0%, #e8910a 100%);
  3720. \t\t\tcolor: white;
  3721. \t\t\tpadding: 80px 0;
  3722. \t\t}
  3723. \t\t.newsletter-form {
  3724. \t\t\tmax-width: 500px;
  3725. \t\t\tmargin: 0 auto;
  3726. \t\t}
  3727. \t\t.newsletter-form .form-control {
  3728. \t\t\tborder: none;
  3729. \t\t\tborder-radius: 25px;
  3730. \t\t\tpadding: 15px 25px;
  3731. \t\t\tfont-size: 1.1rem;
  3732. \t\t}
  3733. \t\t.newsletter-form .btn {
  3734. \t\t\tborder-radius: 25px;
  3735. \t\t\tpadding: 15px 30px;
  3736. \t\t\tfont-weight: 500;
  3737. \t\t}
  3738. \t\t/* Responsive Styles */
  3739. \t\t@media(max-width: 991.98px) {
  3740. \t\t\t.hero-banner {
  3741. \t\t\t\tpadding: 60px 0;
  3742. \t\t\t}
  3743. \t\t\t.stats-number {
  3744. \t\t\t\tfont-size: 2.5rem;
  3745. \t\t\t}
  3746. \t\t\t.section-title h2 {
  3747. \t\t\t\tfont-size: 2rem;
  3748. \t\t\t}
  3749. \t\t\t
  3750. \t\t\t.stats-card {
  3751. \t\t\t\tmargin-bottom: 1.5rem;
  3752. \t\t\t}
  3753. \t\t}
  3754. \t\t@media(max-width: 767.98px) {
  3755. \t\t\t.hero-banner {
  3756. \t\t\t\tpadding: 40px 0;
  3757. \t\t\t}
  3758. \t\t\t.hero-content h1 {
  3759. \t\t\t\tfont-size: 1.75rem;
  3760. \t\t\t}
  3761. \t\t\t.stats-number {
  3762. \t\t\t\tfont-size: 2rem;
  3763. \t\t\t}
  3764. \t\t\t.stats-label {
  3765. \t\t\t\tfont-size: 0.9rem;
  3766. \t\t\t}
  3767. \t\t\t.section-title h2 {
  3768. \t\t\t\tfont-size: 1.75rem;
  3769. \t\t\t}
  3770. \t\t\t.section-title p {
  3771. \t\t\t\tfont-size: 1rem;
  3772. \t\t\t}
  3773. \t\t\t
  3774. \t\t\t.category-card,
  3775. \t\t\t.product-card {
  3776. \t\t\t\tmargin-bottom: 1.5rem;
  3777. \t\t\t}
  3778. \t\t\t
  3779. \t\t\t.category-image {
  3780. \t\t\t\theight: 150px;
  3781. \t\t\t}
  3782. \t\t\t
  3783. \t\t\t.product-image {
  3784. \t\t\t\theight: 200px;
  3785. \t\t\t}
  3786. \t\t\t
  3787. \t\t\t.feature-card {
  3788. \t\t\t\tmargin-bottom: 1.5rem;
  3789. \t\t\t}
  3790. \t\t\t
  3791. \t\t\t.newsletter-section {
  3792. \t\t\t\tpadding: 40px 0;
  3793. \t\t\t}
  3794. \t\t}
  3795. \t\t@media(max-width: 575.98px) {
  3796. \t\t\t.hero-banner {
  3797. \t\t\t\tpadding: 30px 0;
  3798. \t\t\t}
  3799. \t\t\t.hero-content h1 {
  3800. \t\t\t\tfont-size: 1.5rem;
  3801. \t\t\t}
  3802. \t\t\t.stats-card {
  3803. \t\t\t\tpadding: 1.5rem;
  3804. \t\t\t}
  3805. \t\t\t.stats-number {
  3806. \t\t\t\tfont-size: 1.75rem;
  3807. \t\t\t}
  3808. \t\t\t.section-title h2 {
  3809. \t\t\t\tfont-size: 1.5rem;
  3810. \t\t\t}
  3811. \t\t\t
  3812. \t\t\t.category-image {
  3813. \t\t\t\theight: 120px;
  3814. \t\t\t}
  3815. \t\t\t
  3816. \t\t\t.product-image {
  3817. \t\t\t\theight: 180px;
  3818. \t\t\t}
  3819. \t\t\t
  3820. \t\t\t.product-info {
  3821. \t\t\t\tpadding: 1rem;
  3822. \t\t\t}
  3823. \t\t\t
  3824. \t\t\t.product-title {
  3825. \t\t\t\tfont-size: 1rem;
  3826. \t\t\t}
  3827. \t\t\t
  3828. \t\t\t.product-price {
  3829. \t\t\t\tfont-size: 1.25rem;
  3830. \t\t\t}
  3831. \t\t}
  3832. \t\t/* Styles modernes pour le carousel de bannière */
  3833. \t\t.banner-area-modern {
  3834. \t\t\tposition: relative;
  3835. \t\t\twidth: 100%;
  3836. \t\t\tmin-height: 500px;
  3837. \t\t\tbackground: url('{{ asset('ui/img/banner/banner-bg.jpg') }}') center center no-repeat;
  3838. \t\t\tbackground-size: cover;
  3839. \t\t\toverflow: hidden;
  3840. \t\t\tpadding: 60px 0;
  3841. \t\t}
  3842. \t\t.banner-area-modern::before {
  3843. \t\t\tcontent: '';
  3844. \t\t\tposition: absolute;
  3845. \t\t\ttop: 0;
  3846. \t\t\tleft: 0;
  3847. \t\t\twidth: 100%;
  3848. \t\t\theight: 100%;
  3849. \t\t\tbackground: rgba(0, 0, 0, 0.1);
  3850. \t\t\tz-index: 1;
  3851. \t\t}
  3852. \t\t.banner-carousel-wrapper {
  3853. \t\t\tposition: relative;
  3854. \t\t\twidth: 100%;
  3855. \t\t\theight: 100%;
  3856. \t\t\tz-index: 2;
  3857. \t\t}
  3858. \t\t.banner-slide-item {
  3859. \t\t\tmin-height: 500px;
  3860. \t\t\tdisplay: flex;
  3861. \t\t\talign-items: center;
  3862. \t\t\tpadding: 40px 0;
  3863. \t\t}
  3864. \t\t.banner-content-modern {
  3865. \t\t\tposition: relative;
  3866. \t\t\tz-index: 2;
  3867. \t\t\tpadding: 30px;
  3868. \t\t\tbackground: rgba(255, 255, 255, 0.98);
  3869. \t\t\tborder-radius: 20px;
  3870. \t\t\tbox-shadow: 0 20px 60px rgba(0, 0, 0, 0.4);
  3871. \t\t\tbackdrop-filter: blur(10px);
  3872. \t\t\tanimation: fadeInUp 0.8s ease;
  3873. \t\t}
  3874. \t\t@keyframes fadeInUp {
  3875. \t\t\tfrom {
  3876. \t\t\t\topacity: 0;
  3877. \t\t\t\ttransform: translateY(30px);
  3878. \t\t\t}
  3879. \t\t\tto {
  3880. \t\t\t\topacity: 1;
  3881. \t\t\t\ttransform: translateY(0);
  3882. \t\t\t}
  3883. \t\t}
  3884. \t\t.banner-badge {
  3885. \t\t\tdisplay: inline-block;
  3886. \t\t\tbackground: linear-gradient(135deg, #ffa200 0%, #ff6b00 100%);
  3887. \t\t\tcolor: white;
  3888. \t\t\tpadding: 8px 20px;
  3889. \t\t\tborder-radius: 50px;
  3890. \t\t\tfont-size: 0.85rem;
  3891. \t\t\tfont-weight: 600;
  3892. \t\t\tmargin-bottom: 20px;
  3893. \t\t\tbox-shadow: 0 4px 15px rgba(255, 162, 0, 0.4);
  3894. \t\t}
  3895. \t\t.banner-badge i {
  3896. \t\t\tmargin-right: 5px;
  3897. \t\t}
  3898. \t\t.banner-title-modern {
  3899. \t\t\tfont-size: 2.0rem;
  3900. \t\t\tfont-weight: 600;
  3901. \t\t\tcolor: #2c3e50;
  3902. \t\t\tmargin-bottom: 20px;
  3903. \t\t\tline-height: 1.2;
  3904. \t\t\tbackground: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
  3905. \t\t\t-webkit-background-clip: text;
  3906. \t\t\t-webkit-text-fill-color: transparent;
  3907. \t\t\tbackground-clip: text;
  3908. \t\t}
  3909. \t\t.banner-description-modern {
  3910. \t\t\tfont-size: 1.1rem;
  3911. \t\t\tcolor: #555;
  3912. \t\t\tline-height: 1.8;
  3913. \t\t\tmargin-bottom: 25px;
  3914. \t\t}
  3915. \t\t.banner-price-modern {
  3916. \t\t\tdisplay: flex;
  3917. \t\t\talign-items: center;
  3918. \t\t\tgap: 15px;
  3919. \t\t\tmargin-bottom: 30px;
  3920. \t\t\tpadding: 15px 20px;
  3921. \t\t\tbackground: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
  3922. \t\t\tborder-radius: 12px;
  3923. \t\t\tborder-left: 4px solid #ffa200;
  3924. \t\t}
  3925. \t\t.banner-price-modern .price-label {
  3926. \t\t\tfont-size: 0.9rem;
  3927. \t\t\tcolor: #666;
  3928. \t\t\tfont-weight: 600;
  3929. \t\t\ttext-transform: uppercase;
  3930. \t\t\tletter-spacing: 1px;
  3931. \t\t}
  3932. \t\t.banner-price-modern .price-value {
  3933. \t\t\tfont-size: 1.2rem;
  3934. \t\t\tfont-weight: 600;
  3935. \t\t\tcolor: #ffa200;
  3936. \t\t}
  3937. \t\t.banner-actions-modern {
  3938. \t\t\tdisplay: flex;
  3939. \t\t\tgap: 15px;
  3940. \t\t\tflex-wrap: wrap;
  3941. \t\t}
  3942. \t\t.btn-banner-primary {
  3943. \t\t\tdisplay: inline-flex;
  3944. \t\t\talign-items: center;
  3945. \t\t\tgap: 10px;
  3946. \t\t\tpadding: 15px 35px;
  3947. \t\t\tbackground: linear-gradient(135deg, #ffa200 0%, #ff6b00 100%);
  3948. \t\t\tcolor: white;
  3949. \t\t\ttext-decoration: none;
  3950. \t\t\tborder-radius: 50px;
  3951. \t\t\tfont-weight: 600;
  3952. \t\t\tfont-size: 1rem;
  3953. \t\t\ttransition: all 0.3s ease;
  3954. \t\t\tbox-shadow: 0 4px 15px rgba(255, 162, 0, 0.4);
  3955. \t\t}
  3956. \t\t.btn-banner-primary:hover {
  3957. \t\t\ttransform: translateY(-3px);
  3958. \t\t\tbox-shadow: 0 8px 25px rgba(255, 162, 0, 0.6);
  3959. \t\t\tcolor: white;
  3960. \t\t}
  3961. \t\t.btn-banner-primary .btn-icon {
  3962. \t\t\ttransition: transform 0.3s ease;
  3963. \t\t}
  3964. \t\t.btn-banner-primary:hover .btn-icon {
  3965. \t\t\ttransform: translateX(5px);
  3966. \t\t}
  3967. \t\t.btn-banner-secondary {
  3968. \t\t\tdisplay: inline-flex;
  3969. \t\t\talign-items: center;
  3970. \t\t\tgap: 8px;
  3971. \t\t\tpadding: 15px 25px;
  3972. \t\t\tbackground: white;
  3973. \t\t\tcolor: #667eea;
  3974. \t\t\ttext-decoration: none;
  3975. \t\t\tborder-radius: 50px;
  3976. \t\t\tfont-weight: 600;
  3977. \t\t\tfont-size: 0.95rem;
  3978. \t\t\tborder: 2px solid #667eea;
  3979. \t\t\ttransition: all 0.3s ease;
  3980. \t\t}
  3981. \t\t.btn-banner-secondary:hover {
  3982. \t\t\tbackground: #667eea;
  3983. \t\t\tcolor: white;
  3984. \t\t\ttransform: translateY(-3px);
  3985. \t\t\tbox-shadow: 0 4px 15px rgba(102, 126, 234, 0.4);
  3986. \t\t}
  3987. \t\t.banner-image-modern {
  3988. \t\t\tposition: relative;
  3989. \t\t\theight: 450px;
  3990. \t\t\tdisplay: flex;
  3991. \t\t\talign-items: center;
  3992. \t\t\tjustify-content: center;
  3993. \t\t}
  3994. \t\t.banner-image-wrapper {
  3995. \t\t\tposition: relative;
  3996. \t\t\twidth: 100%;
  3997. \t\t\theight: 100%;
  3998. \t\t\tborder-radius: 20px;
  3999. \t\t\toverflow: hidden;
  4000. \t\t\tbox-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
  4001. \t\t\tbackground: white;
  4002. \t\t\tpadding: 20px;
  4003. \t\t}
  4004. \t\t.banner-img {
  4005. \t\t\twidth: 100%;
  4006. \t\t\theight: 100%;
  4007. \t\t\tobject-fit: contain;
  4008. \t\t\tborder-radius: 15px;
  4009. \t\t\ttransition: transform 0.5s ease;
  4010. \t\t}
  4011. \t\t.banner-slide-item:hover .banner-img {
  4012. \t\t\ttransform: scale(1.05);
  4013. \t\t}
  4014. \t\t.banner-image-overlay {
  4015. \t\t\tposition: absolute;
  4016. \t\t\ttop: 0;
  4017. \t\t\tleft: 0;
  4018. \t\t\twidth: 100%;
  4019. \t\t\theight: 100%;
  4020. \t\t\tbackground: linear-gradient(135deg, rgba(102, 126, 234, 0.1) 0%, rgba(118, 75, 162, 0.1) 100%);
  4021. \t\t\tborder-radius: 15px;
  4022. \t\t\tpointer-events: none;
  4023. \t\t}
  4024. \t\t/* Styles pour Owl Carousel */
  4025. \t\t.banner-area-modern .owl-nav {
  4026. \t\t\tposition: absolute;
  4027. \t\t\ttop: 50%;
  4028. \t\t\ttransform: translateY(-50%);
  4029. \t\t\twidth: 100%;
  4030. \t\t\tdisplay: flex;
  4031. \t\t\tjustify-content: space-between;
  4032. \t\t\talign-items: center;
  4033. \t\t\tpadding: 0 20px;
  4034. \t\t\tpointer-events: none;
  4035. \t\t\tz-index: 10;
  4036. \t\t\tleft: 0;
  4037. \t\t\tright: 0;
  4038. \t\t\tbox-sizing: border-box;
  4039. \t\t}
  4040. \t\t.banner-area-modern .owl-nav button {
  4041. \t\t\twidth: 60px;
  4042. \t\t\theight: 60px;
  4043. \t\t\tmin-width: 60px;
  4044. \t\t\tmin-height: 60px;
  4045. \t\t\tbackground: #ffa200 !important;
  4046. \t\t\tborder-radius: 50% !important;
  4047. \t\t\tdisplay: flex !important;
  4048. \t\t\talign-items: center;
  4049. \t\t\tjustify-content: center;
  4050. \t\t\tcolor: white !important;
  4051. \t\t\tfont-size: 24px !important;
  4052. \t\t\tbox-shadow: 0 4px 15px rgba(255, 162, 0, 0.4);
  4053. \t\t\ttransition: all 0.3s ease;
  4054. \t\t\tpointer-events: all;
  4055. \t\t\tborder: none !important;
  4056. \t\t\tposition: relative;
  4057. \t\t\tflex-shrink: 0;
  4058. \t\t\tmargin: 0;
  4059. \t\t\tpadding: 0;
  4060. \t\t\tline-height: 1;
  4061. \t\t}
  4062. \t\t.banner-area-modern .owl-nav button.owl-prev {
  4063. \t\t\tmargin-right: auto;
  4064. \t\t}
  4065. \t\t.banner-area-modern .owl-nav button.owl-next {
  4066. \t\t\tmargin-left: auto;
  4067. \t\t}
  4068. \t\t.banner-area-modern .owl-nav button:hover {
  4069. \t\t\tbackground: #ff6b00 !important;
  4070. \t\t\tcolor: white !important;
  4071. \t\t\ttransform: scale(1.1);
  4072. \t\t\tbox-shadow: 0 6px 20px rgba(255, 162, 0, 0.6);
  4073. \t\t}
  4074. \t\t.banner-area-modern .owl-nav button.disabled {
  4075. \t\t\topacity: 0.5;
  4076. \t\t\tcursor: not-allowed;
  4077. \t\t}
  4078. \t\t.banner-area-modern .owl-nav button.disabled:hover {
  4079. \t\t\ttransform: scale(1);
  4080. \t\t}
  4081. \t\t.banner-area-modern .owl-dots {
  4082. \t\t\tposition: absolute;
  4083. \t\t\tbottom: 30px;
  4084. \t\t\tleft: 50%;
  4085. \t\t\ttransform: translateX(-50%);
  4086. \t\t\tdisplay: flex;
  4087. \t\t\tgap: 10px;
  4088. \t\t\tz-index: 10;
  4089. \t\t}
  4090. \t\t.banner-area-modern .owl-dots button {
  4091. \t\t\twidth: 12px;
  4092. \t\t\theight: 12px;
  4093. \t\t\tborder-radius: 50%;
  4094. \t\t\tbackground: rgba(255, 255, 255, 0.6) !important;
  4095. \t\t\tborder: 2px solid white !important;
  4096. \t\t\ttransition: all 0.3s ease;
  4097. \t\t\tmargin: 0 5px;
  4098. \t\t}
  4099. \t\t.banner-area-modern .owl-dots button.active {
  4100. \t\t\tbackground: #ffa200 !important;
  4101. \t\t\tborder-color: #ffa200 !important;
  4102. \t\t\twidth: 30px;
  4103. \t\t\tborder-radius: 6px;
  4104. \t\t}
  4105. \t\t/* Responsive */
  4106. \t\t@media(max-width: 992px) {
  4107. \t\t\t.banner-area-modern {
  4108. \t\t\t\tmin-height: 450px;
  4109. \t\t\t\tpadding: 40px 0;
  4110. \t\t\t\tbackground-size: cover;
  4111. \t\t\t\tbackground-position: center;
  4112. \t\t\t}
  4113. \t\t\t.banner-slide-item {
  4114. \t\t\t\tmin-height: 450px;
  4115. \t\t\t\tpadding: 30px 0;
  4116. \t\t\t}
  4117. \t\t\t.banner-title-modern {
  4118. \t\t\t\tfont-size: 1.5rem;
  4119. \t\t\t}
  4120. \t\t\t.banner-description-modern {
  4121. \t\t\t\tfont-size: 1rem;
  4122. \t\t\t}
  4123. \t\t\t.banner-image-modern {
  4124. \t\t\t\theight: 350px;
  4125. \t\t\t\tmargin-top: 30px;
  4126. \t\t\t}
  4127. \t\t\t.banner-content-modern {
  4128. \t\t\t\tpadding: 25px;
  4129. \t\t\t}
  4130. \t\t}
  4131. \t\t@media(max-width: 768px) {
  4132. \t\t\t.banner-area-modern {
  4133. \t\t\t\tmin-height: 400px;
  4134. \t\t\t\tpadding: 30px 0;
  4135. \t\t\t\tbackground-size: cover;
  4136. \t\t\t\tbackground-position: center;
  4137. \t\t\t}
  4138. \t\t\t.banner-slide-item {
  4139. \t\t\t\tmin-height: 400px;
  4140. \t\t\t\tpadding: 20px 0;
  4141. \t\t\t}
  4142. \t\t\t.banner-title-modern {
  4143. \t\t\t\tfont-size: 1.25rem;
  4144. \t\t\t}
  4145. \t\t\t.banner-description-modern {
  4146. \t\t\t\tfont-size: 0.95rem;
  4147. \t\t\t}
  4148. \t\t\t.banner-image-modern {
  4149. \t\t\t\theight: 280px;
  4150. \t\t\t\tmargin-top: 20px;
  4151. \t\t\t}
  4152. \t\t\t.banner-content-modern {
  4153. \t\t\t\tpadding: 20px;
  4154. \t\t\t}
  4155. \t\t\t.banner-price-modern .price-value {
  4156. \t\t\t\tfont-size: 1.25rem;
  4157. \t\t\t}
  4158. \t\t\t.banner-actions-modern {
  4159. \t\t\t\tflex-direction: column;
  4160. \t\t\t}
  4161. \t\t\t.btn-banner-primary,
  4162. \t\t\t.btn-banner-secondary {
  4163. \t\t\t\twidth: 100%;
  4164. \t\t\t\tjustify-content: center;
  4165. \t\t\t}
  4166. \t\t\t.banner-area-modern .owl-nav button {
  4167. \t\t\t\twidth: 50px;
  4168. \t\t\t\theight: 50px;
  4169. \t\t\t\tmin-width: 50px;
  4170. \t\t\t\tmin-height: 50px;
  4171. \t\t\t\tfont-size: 20px !important;
  4172. \t\t\t\tbackground: #ffa200 !important;
  4173. \t\t\t}
  4174. \t\t\t.banner-area-modern .owl-nav button:hover {
  4175. \t\t\t\tbackground: #ff6b00 !important;
  4176. \t\t\t}
  4177. \t\t}
  4178. \t\t@media(max-width: 576px) {
  4179. \t\t\t.banner-area-modern {
  4180. \t\t\t\tmin-height: 350px;
  4181. \t\t\t\tpadding: 0;
  4182. \t\t\t\tbackground-size: cover;
  4183. \t\t\t\tbackground-position: center;
  4184. \t\t\t}
  4185. \t\t\t.banner-slide-item {
  4186. \t\t\t\tmin-height: 350px;
  4187. \t\t\t}
  4188. \t\t\t.banner-title-modern {
  4189. \t\t\t\tfont-size: 1.25rem;
  4190. \t\t\t}
  4191. \t\t\t.banner-image-modern {
  4192. \t\t\t\theight: 220px;
  4193. \t\t\t}
  4194. \t\t\t.banner-content-modern {
  4195. \t\t\t\tpadding: 15px;
  4196. \t\t\t}
  4197. \t\t}
  4198. \t\t/* Styles pour les catégories de boutiques cliquables */
  4199. \t\t.shop-category-clickable {
  4200. \t\t\tcursor: pointer;
  4201. \t\t\ttransition: all 0.3s ease;
  4202. \t\t\theight: 100%;
  4203. \t\t}
  4204. \t\t.shop-category-clickable:hover {
  4205. \t\t\ttransform: translateY(-10px);
  4206. \t\t\tbox-shadow: 0 8px 25px rgba(0, 0, 0, 0.15);
  4207. \t\t}
  4208. \t\t.shop-category-clickable:hover .category-image {
  4209. \t\t\ttransform: scale(1.1);
  4210. \t\t}
  4211. \t\t.shop-category-clickable:hover .btn-primary-custom {
  4212. \t\t\tbackground: #e8910a;
  4213. \t\t\ttransform: translateX(5px);
  4214. \t\t}
  4215. \t\t/* Styles pour les cartes de catégories personnalisées */
  4216. \t\t.category-card-custom {
  4217. \t\t\tborder-radius: 15px;
  4218. \t\t\toverflow: hidden;
  4219. \t\t\tbox-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);
  4220. \t\t\ttransition: transform 0.3s ease, box-shadow 0.3s ease;
  4221. \t\t\tbackground: white;
  4222. \t\t\theight: 100%;
  4223. \t\t}
  4224. \t\t.category-card-custom:hover {
  4225. \t\t\ttransform: translateY(-10px);
  4226. \t\t\tbox-shadow: 0 8px 25px rgba(0, 0, 0, 0.15);
  4227. \t\t}
  4228. \t\t.category-image-wrapper {
  4229. \t\t\tposition: relative;
  4230. \t\t\theight: 200px;
  4231. \t\t\toverflow: hidden;
  4232. \t\t}
  4233. \t\t.category-image {
  4234. \t\t\twidth: 100%;
  4235. \t\t\theight: 100%;
  4236. \t\t\tbackground-size: cover;
  4237. \t\t\tbackground-position: center;
  4238. \t\t\ttransition: transform 0.3s ease;
  4239. \t\t}
  4240. \t\t.category-card-custom:hover .category-image {
  4241. \t\t\ttransform: scale(1.1);
  4242. \t\t}
  4243. \t\t.category-overlay-custom {
  4244. \t\t\tposition: absolute;
  4245. \t\t\ttop: 0;
  4246. \t\t\tleft: 0;
  4247. \t\t\twidth: 100%;
  4248. \t\t\theight: 100%;
  4249. \t\t\tbackground: rgba(0, 0, 0, 0.6);
  4250. \t\t\tdisplay: flex;
  4251. \t\t\talign-items: center;
  4252. \t\t\tjustify-content: center;
  4253. \t\t\topacity: 0;
  4254. \t\t\ttransition: opacity 0.3s ease;
  4255. \t\t\tcolor: white;
  4256. \t\t}
  4257. \t\t.category-card-custom:hover .category-overlay-custom {
  4258. \t\t\topacity: 1;
  4259. \t\t}
  4260. \t\t.category-icon-wrapper {
  4261. \t\t\ttext-align: center;
  4262. \t\t}
  4263. \t\t.category-icon-wrapper i {
  4264. \t\t\tcolor: #ffa200;
  4265. \t\t\tdisplay: block;
  4266. \t\t}
  4267. \t\t.category-icon-wrapper h4 {
  4268. \t\t\tcolor: white;
  4269. \t\t\tmargin-top: 10px;
  4270. \t\t}
  4271. \t\t/* Styles pour la galerie de produits en vedette */
  4272. \t\t.featured-products-carousel-section {
  4273. \t\t\tposition: relative;
  4274. \t\t\toverflow: hidden;
  4275. \t\t}
  4276. \t\t.featured-gallery-wrapper {
  4277. \t\t\tposition: relative;
  4278. \t\t\tmax-width: 1400px;
  4279. \t\t\tmargin: 0 auto;
  4280. \t\t\tpadding: 0 15px;
  4281. \t\t}
  4282. \t\t.featured-gallery-container {
  4283. \t\t\tposition: relative;
  4284. \t\t\toverflow: visible;
  4285. \t\t\tborder-radius: 12px;
  4286. \t\t}
  4287. \t\t.featured-gallery-grid {
  4288. \t\t\tdisplay: flex;
  4289. \t\t\tgap: 30px; /* Même espacement que dans listing (margin entre col-lg-4) */
  4290. \t\t\tpadding: 10px 0;
  4291. \t\t\toverflow-x: auto;
  4292. \t\t\toverflow-y: hidden;
  4293. \t\t\tscroll-behavior: smooth;
  4294. \t\t\tscrollbar-width: none; /* Firefox */
  4295. \t\t\t-ms-overflow-style: none; /* IE/Edge */
  4296. \t\t\t-webkit-overflow-scrolling: touch; /* iOS smooth scroll */
  4297. \t\t\twill-change: scroll-position;
  4298. \t\t}
  4299. \t\t.featured-gallery-grid::-webkit-scrollbar {
  4300. \t\t\tdisplay: none; /* Chrome/Safari */
  4301. \t\t}
  4302. \t\t/* Mode OwlCarousel */
  4303. \t\t.featured-gallery-grid.owl-carousel {
  4304. \t\t\tdisplay: block;
  4305. \t\t\toverflow: hidden;
  4306. \t\t\tpadding: 25px 0;
  4307. \t\t}
  4308. \t\t.featured-gallery-grid.owl-carousel .owl-stage-outer {
  4309. \t\t\toverflow: visible;
  4310. \t\t}
  4311. \t\t.featured-gallery-grid.owl-carousel .featured-gallery-item {
  4312. \t\t\topacity: 1;
  4313. \t\t\ttransform: none;
  4314. \t\t\twidth: auto;
  4315. \t\t\tmax-width: none;
  4316. \t\t\tmargin: 0 15px;
  4317. \t\t}
  4318. \t\t.featured-gallery-grid.owl-carousel .owl-stage {
  4319. \t\t\tdisplay: flex;
  4320. \t\t}
  4321. \t\t.featured-gallery-item {
  4322. \t\t\tflex: 0 0 auto; /* Largeur automatique basée sur le contenu */
  4323. \t\t\twidth: 100%;
  4324. \t\t\tmax-width: 100%;
  4325. \t\t\topacity: 0;
  4326. \t\t\ttransform: translateY(20px) scale(0.95);
  4327. \t\t\tanimation: galleryItemFadeIn 0.5s cubic-bezier(0.4, 0, 0.2, 1) forwards;
  4328. \t\t\tanimation-delay: calc(var(--item-index, 0) * 0.05s);
  4329. \t\t}
  4330. \t\t/* Utiliser la même largeur que dans listing (col-lg-4 = ~33.33%) */
  4331. \t\t@media(min-width: 992px) {
  4332. \t\t\t.featured-gallery-item {
  4333. \t\t\t\tflex: 0 0 33.333333%;
  4334. \t\t\t\tmax-width: 25%;
  4335. \t\t\t}
  4336. \t\t}
  4337. \t\t@media(min-width: 768px) and(max-width: 991px) {
  4338. \t\t\t.featured-gallery-item {
  4339. \t\t\t\tflex: 0 0 50%;
  4340. \t\t\t\tmax-width: 50%;
  4341. \t\t\t}
  4342. \t\t}
  4343. \t\t@media(max-width: 767px) {
  4344. \t\t\t.featured-gallery-item {
  4345. \t\t\t\tflex: 0 0 100%;
  4346. \t\t\t\tmax-width: 100%;
  4347. \t\t\t}
  4348. \t\t}
  4349. \t\t/* Ajustements minimaux pour single-product dans le carrousel - utiliser les styles de main.css */
  4350. \t\t.featured-gallery-item .single-product {
  4351. \t\t\tmargin-bottom: 0; /* Override main.css margin-bottom: 50px */
  4352. \t\t\tmin-height: 480px;
  4353. \t\t\tdisplay: flex;
  4354. \t\t\tflex-direction: column;
  4355. \t\t\tpadding: 20px;
  4356. \t\t\tbackground: #fff;
  4357. \t\t\tborder-radius: 12px;
  4358. \t\t\tbox-shadow: 0 10px 30px rgba(15, 34, 58, 0.08);
  4359. \t\t\ttransition: transform 0.25s ease, box-shadow 0.25s ease;
  4360. \t\t}
  4361. \t\t.featured-gallery-item .single-product:hover {
  4362. \t\t\ttransform: translateY(-4px);
  4363. \t\t\tbox-shadow: 0 18px 40px rgba(15, 34, 58, 0.12);
  4364. \t\t}
  4365. \t\t/* S'assurer que les images s'affichent correctement - styles identiques à listing.html.twig */
  4366. \t\t.featured-gallery-item .single-product img {
  4367. \t\t\tmargin-bottom: 20px;
  4368. \t\t\twidth: 100%;
  4369. \t\t}
  4370. \t\t/* Styles pour product-image-container - identiques à listing.html.twig */
  4371. \t\t.featured-gallery-item .product-image-container {
  4372. \t\t\tposition: relative;
  4373. \t\t\toverflow: hidden;
  4374. \t\t\tborder-radius: 10px;
  4375. \t\t\theight: 260px;
  4376. \t\t\tdisplay: flex;
  4377. \t\t\talign-items: center;
  4378. \t\t\tjustify-content: center;
  4379. \t\t\tbackground: #f7f7fb;
  4380. \t\t\tmargin-bottom: 18px;
  4381. \t\t}
  4382. \t\t.featured-gallery-item .product-image-container:hover .main-product-img {
  4383. \t\t\ttransform: scale(1.05);
  4384. \t\t\ttransition: transform 0.3s ease;
  4385. \t\t}
  4386. \t\t.featured-gallery-item .product-image-container a {
  4387. \t\t\tdisplay: block;
  4388. \t\t\twidth: 100%;
  4389. \t\t\theight: 100%;
  4390. \t\t}
  4391. \t\t.featured-gallery-item .main-product-img {
  4392. \t\t\ttransition: transform 0.3s ease;
  4393. \t\t\twidth: 100% !important;
  4394. \t\t\theight: 100% !important;
  4395. \t\t\tobject-fit: cover;
  4396. \t\t\tobject-position: center;
  4397. \t\t\tdisplay: block;
  4398. \t\t\twill-change: transform, opacity;
  4399. \t\t}
  4400. \t\t.featured-gallery-item .main-product-img.image-fade {
  4401. \t\t\tanimation: imageFade 0.5s ease;
  4402. \t\t}
  4403. \t\t@keyframes imageFade {
  4404. \t\t\tfrom {
  4405. \t\t\t\topacity: 0;
  4406. \t\t\t\ttransform: scale(1.02);
  4407. \t\t\t}
  4408. \t\t\tto {
  4409. \t\t\t\topacity: 1;
  4410. \t\t\t\ttransform: scale(1);
  4411. \t\t\t}
  4412. \t\t}
  4413. \t\t.featured-gallery-item .product-details {
  4414. \t\t\tdisplay: flex;
  4415. \t\t\tflex-direction: column;
  4416. \t\t\theight: 100%;
  4417. \t\t}
  4418. \t\t.featured-gallery-item .prd-bottom {
  4419. \t\t\tmargin-top: auto;
  4420. \t\t}
  4421. \t\t/* Styles pour img-nav-btn - identiques à listing.html.twig */
  4422. \t\t.featured-gallery-item .img-nav-btn {
  4423. \t\t\tposition: absolute;
  4424. \t\t\ttop: 50%;
  4425. \t\t\ttransform: translateY(-50%);
  4426. \t\t\tbackground: rgba(0, 0, 0, 0.6);
  4427. \t\t\tcolor: white;
  4428. \t\t\tborder: none;
  4429. \t\t\twidth: 35px;
  4430. \t\t\theight: 35px;
  4431. \t\t\tborder-radius: 50%;
  4432. \t\t\tdisplay: flex;
  4433. \t\t\talign-items: center;
  4434. \t\t\tjustify-content: center;
  4435. \t\t\tcursor: pointer;
  4436. \t\t\ttransition: all 0.3s ease;
  4437. \t\t\tz-index: 10;
  4438. \t\t}
  4439. \t\t.featured-gallery-item .img-nav-btn:hover {
  4440. \t\t\tbackground: #095ad3;
  4441. \t\t\ttransform: translateY(-50%) scale(1.1);
  4442. \t\t}
  4443. \t\t.featured-gallery-item .img-nav-left {
  4444. \t\t\tleft: 10px;
  4445. \t\t}
  4446. \t\t.featured-gallery-item .img-nav-right {
  4447. \t\t\tright: 10px;
  4448. \t\t}
  4449. \t\t.featured-gallery-item .img-indicators {
  4450. \t\t\tposition: absolute;
  4451. \t\t\tbottom: 10px;
  4452. \t\t\tleft: 50%;
  4453. \t\t\ttransform: translateX(-50%);
  4454. \t\t\tdisplay: flex;
  4455. \t\t\tgap: 5px;
  4456. \t\t\tz-index: 10;
  4457. \t\t}
  4458. \t\t.featured-gallery-item .indicator {
  4459. \t\t\twidth: 8px;
  4460. \t\t\theight: 8px;
  4461. \t\t\tborder-radius: 50%;
  4462. \t\t\tbackground: rgba(255, 255, 255, 0.5);
  4463. \t\t\tcursor: pointer;
  4464. \t\t\tmargin-bottom: 10px;
  4465. \t\t\ttransition: all 0.3s ease;
  4466. \t\t\tborder: 1px solid rgba(255, 255, 255, 0.3);
  4467. \t\t}
  4468. \t\t.featured-gallery-item .indicator.active {
  4469. \t\t\tbackground: #ffa200;
  4470. \t\t\tborder-color: #ffa200;
  4471. \t\t\ttransform: scale(1.2);
  4472. \t\t}
  4473. \t\t.featured-gallery-item .indicator:hover {
  4474. \t\t\tbackground: rgba(255, 255, 255, 0.8);
  4475. \t\t}
  4476. \t\t/* Styles pour shop-info - identiques à listing.html.twig */
  4477. \t\t.featured-gallery-item .shop-info {
  4478. \t\t\tmargin: 8px 0;
  4479. \t\t\tpadding: 5px 0;
  4480. \t\t\tborder-bottom: 1px solid #f0f0f0;
  4481. \t\t}
  4482. \t\t.featured-gallery-item .shop-link {
  4483. \t\t\tcolor: #007bff;
  4484. \t\t\ttext-decoration: none;
  4485. \t\t\tfont-weight: 500;
  4486. \t\t}
  4487. \t\t.featured-gallery-item .shop-link:hover {
  4488. \t\t\tcolor: #ffa200;
  4489. \t\t\ttext-decoration: underline;
  4490. \t\t}
  4491. \t\t/* Les autres styles (product-details h6, price, prd-bottom, social-info) sont déjà définis dans main.css */
  4492. \t\t@keyframes galleryItemFadeIn {
  4493. \t\t\tfrom {
  4494. \t\t\t\topacity: 0;
  4495. \t\t\t\ttransform: translateY(20px) scale(0.95);
  4496. \t\t\t}
  4497. \t\t\tto {
  4498. \t\t\t\topacity: 1;
  4499. \t\t\t\ttransform: translateY(0) scale(1);
  4500. \t\t\t}
  4501. \t\t}
  4502. \t\t.featured-gallery-card {
  4503. \t\t\tdisplay: flex;
  4504. \t\t\tflex-direction: column;
  4505. \t\t\theight: 100%;
  4506. \t\t\tbackground: white;
  4507. \t\t\tborder-radius: 12px;
  4508. \t\t\toverflow: hidden;
  4509. \t\t\tbox-shadow: 0 2px 12px rgba(0, 0, 0, 0.08);
  4510. \t\t\ttransition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
  4511. \t\t\tborder: 1px solid #f0f0f0;
  4512. \t\t}
  4513. \t\t.featured-gallery-card:hover {
  4514. \t\t\ttransform: translateY(-5px);
  4515. \t\t\tbox-shadow: 0 6px 20px rgba(0, 0, 0, 0.12);
  4516. \t\t\tborder-color: #ffa200;
  4517. \t\t}
  4518. \t\t.featured-gallery-image-wrapper {
  4519. \t\t\tposition: relative;
  4520. \t\t\twidth: 100%;
  4521. \t\t\tpadding-top: 100%; /* Ratio 1:1 pour une galerie carrée */
  4522. \t\t\toverflow: hidden;
  4523. \t\t\tbackground: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
  4524. \t\t}
  4525. \t\t.featured-gallery-image {
  4526. \t\t\tposition: absolute;
  4527. \t\t\ttop: 0;
  4528. \t\t\tleft: 0;
  4529. \t\t\twidth: 100%;
  4530. \t\t\theight: 100%;
  4531. \t\t\tbackground-size: cover;
  4532. \t\t\tbackground-position: center;
  4533. \t\t\ttransition: transform 0.5s cubic-bezier(0.4, 0, 0.2, 1);
  4534. \t\t}
  4535. \t\t.featured-gallery-card:hover .featured-gallery-image {
  4536. \t\t\ttransform: scale(1.08);
  4537. \t\t}
  4538. \t\t.featured-gallery-badge {
  4539. \t\t\tposition: absolute;
  4540. \t\t\ttop: 8px;
  4541. \t\t\tleft: 8px;
  4542. \t\t\tbackground: linear-gradient(135deg, #ffa200 0%, #ff6b00 100%);
  4543. \t\t\tcolor: white;
  4544. \t\t\tpadding: 4px 10px;
  4545. \t\t\tborder-radius: 15px;
  4546. \t\t\tfont-size: 12px;
  4547. \t\t\tfont-weight: 600;
  4548. \t\t\tz-index: 2;
  4549. \t\t\tbox-shadow: 0 2px 8px rgba(255, 162, 0, 0.4);
  4550. \t\t}
  4551. \t\t.featured-gallery-overlay {
  4552. \t\t\tposition: absolute;
  4553. \t\t\ttop: 0;
  4554. \t\t\tleft: 0;
  4555. \t\t\twidth: 100%;
  4556. \t\t\theight: 100%;
  4557. \t\t\tbackground: rgba(0, 0, 0, 0.5);
  4558. \t\t\tdisplay: flex;
  4559. \t\t\talign-items: center;
  4560. \t\t\tjustify-content: center;
  4561. \t\t\topacity: 0;
  4562. \t\t\ttransition: opacity 0.3s ease;
  4563. \t\t}
  4564. \t\t.featured-gallery-card:hover .featured-gallery-overlay {
  4565. \t\t\topacity: 1;
  4566. \t\t}
  4567. \t\t.featured-gallery-view-btn {
  4568. \t\t\tbackground: white;
  4569. \t\t\tcolor: #333;
  4570. \t\t\twidth: 40px;
  4571. \t\t\theight: 40px;
  4572. \t\t\tborder-radius: 50%;
  4573. \t\t\tdisplay: flex;
  4574. \t\t\talign-items: center;
  4575. \t\t\tjustify-content: center;
  4576. \t\t\ttext-decoration: none;
  4577. \t\t\tfont-size: 18px;
  4578. \t\t\ttransform: scale(0.8);
  4579. \t\t\ttransition: transform 0.3s ease;
  4580. \t\t}
  4581. \t\t.featured-gallery-card:hover .featured-gallery-view-btn {
  4582. \t\t\ttransform: scale(1);
  4583. \t\t}
  4584. \t\t.featured-gallery-info {
  4585. \t\t\tpadding: 12px;
  4586. \t\t\tflex: 1;
  4587. \t\t\tdisplay: flex;
  4588. \t\t\tflex-direction: column;
  4589. \t\t}
  4590. \t\t.featured-gallery-title {
  4591. \t\t\tfont-size: 14px;
  4592. \t\t\tfont-weight: 600;
  4593. \t\t\tmargin-bottom: 6px;
  4594. \t\t\tcolor: #333;
  4595. \t\t\tline-height: 1.3;
  4596. \t\t\tdisplay: -webkit-box;
  4597. \t\t\t-webkit-line-clamp: 2;
  4598. \t\t\t-webkit-box-orient: vertical;
  4599. \t\t\toverflow: hidden;
  4600. \t\t\tmin-height: 36px;
  4601. \t\t}
  4602. \t\t.featured-gallery-title a {
  4603. \t\t\tcolor: #333;
  4604. \t\t\ttext-decoration: none;
  4605. \t\t\ttransition: color 0.3s ease;
  4606. \t\t}
  4607. \t\t.featured-gallery-title a:hover {
  4608. \t\t\tcolor: #ffa200;
  4609. \t\t}
  4610. \t\t.featured-gallery-price {
  4611. \t\t\tfont-size: 16px;
  4612. \t\t\tfont-weight: 700;
  4613. \t\t\tcolor: #ffa200;
  4614. \t\t\tmargin-bottom: 6px;
  4615. \t\t}
  4616. \t\t.featured-gallery-rating {
  4617. \t\t\tdisplay: flex;
  4618. \t\t\talign-items: center;
  4619. \t\t\tgap: 3px;
  4620. \t\t\tfont-size: 11px;
  4621. \t\t}
  4622. \t\t.featured-gallery-rating .fa-star.active {
  4623. \t\t\tcolor: #ffa200;
  4624. \t\t}
  4625. \t\t.featured-gallery-rating .fa-star-o {
  4626. \t\t\tcolor: #ddd;
  4627. \t\t}
  4628. \t\t.featured-gallery-controls {
  4629. \t\t\tdisplay: flex;
  4630. \t\t\tjustify-content: center;
  4631. \t\t\tgap: 20px;
  4632. \t\t\tmargin-top: 25px;
  4633. \t\t\tpadding: 0 20px;
  4634. \t\t}
  4635. \t\t.featured-gallery-nav-btn {
  4636. \t\t\twidth: 42px;
  4637. \t\t\theight: 42px;
  4638. \t\t\tborder-radius: 50%;
  4639. \t\t\tborder: 1.5px solid #ffa200;
  4640. \t\t\tbackground: white;
  4641. \t\t\tcolor: #ffa200;
  4642. \t\t\tfont-size: 16px;
  4643. \t\t\tcursor: pointer;
  4644. \t\t\tdisplay: flex;
  4645. \t\t\talign-items: center;
  4646. \t\t\tjustify-content: center;
  4647. \t\t\ttransition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
  4648. \t\t\tbox-shadow: 0 3px 10px rgba(255, 162, 0, 0.18);
  4649. \t\t\tposition: relative;
  4650. \t\t\toverflow: hidden;
  4651. \t\t}
  4652. \t\t.featured-gallery-nav-btn.btn-ripple::after {
  4653. \t\t\tcontent: '';
  4654. \t\t\tposition: absolute;
  4655. \t\t\twidth: 100%;
  4656. \t\t\theight: 100%;
  4657. \t\t\tleft: 0;
  4658. \t\t\ttop: 0;
  4659. \t\t\tborder-radius: 50%;
  4660. \t\t\tbackground: rgba(255, 162, 0, 0.2);
  4661. \t\t\tanimation: rippleEffect 0.35s ease;
  4662. \t\t}
  4663. \t\t@keyframes rippleEffect {
  4664. \t\t\tfrom {
  4665. \t\t\t\ttransform: scale(0.6);
  4666. \t\t\t\topacity: 0.7;
  4667. \t\t\t}
  4668. \t\t\tto {
  4669. \t\t\t\ttransform: scale(1.4);
  4670. \t\t\t\topacity: 0;
  4671. \t\t\t}
  4672. \t\t}
  4673. \t\t.featured-gallery-nav-btn:hover:not(:disabled) {
  4674. \t\t\tbackground: #ffa200;
  4675. \t\t\tcolor: white;
  4676. \t\t\ttransform: scale(1.1);
  4677. \t\t\tbox-shadow: 0 5px 18px rgba(255, 162, 0, 0.4);
  4678. \t\t}
  4679. \t\t.featured-gallery-nav-btn:active:not(:disabled) {
  4680. \t\t\ttransform: scale(0.95);
  4681. \t\t}
  4682. \t\t.featured-gallery-nav-btn:disabled {
  4683. \t\t\topacity: 0.3;
  4684. \t\t\tcursor: not-allowed;
  4685. \t\t}
  4686. \t\t.featured-gallery-load-more {
  4687. \t\t\tmargin-top: 30px;
  4688. \t\t}
  4689. \t\t/* Style pour le bouton \"Voir tous les produits\" */
  4690. \t\t.btn-view-all-products {
  4691. \t\t\tdisplay: inline-flex;
  4692. \t\t\talign-items: center;
  4693. \t\t\tgap: 12px;
  4694. \t\t\tpadding: 16px 40px;
  4695. \t\t\tbackground: linear-gradient(135deg, #ffa200 0%, #ff6b00 100%);
  4696. \t\t\tcolor: white;
  4697. \t\t\ttext-decoration: none;
  4698. \t\t\tborder-radius: 50px;
  4699. \t\t\tfont-weight: 600;
  4700. \t\t\tfont-size: 16px;
  4701. \t\t\ttransition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
  4702. \t\t\tbox-shadow: 0 4px 15px rgba(255, 162, 0, 0.3);
  4703. \t\t\tposition: relative;
  4704. \t\t\toverflow: hidden;
  4705. \t\t}
  4706. \t\t.btn-view-all-products::before {
  4707. \t\t\tcontent: '';
  4708. \t\t\tposition: absolute;
  4709. \t\t\ttop: 0;
  4710. \t\t\tleft: -100%;
  4711. \t\t\twidth: 100%;
  4712. \t\t\theight: 100%;
  4713. \t\t\tbackground: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.3), transparent);
  4714. \t\t\ttransition: left 0.5s ease;
  4715. \t\t}
  4716. \t\t.btn-view-all-products:hover::before {
  4717. \t\t\tleft: 100%;
  4718. \t\t}
  4719. \t\t.btn-view-all-products:hover {
  4720. \t\t\ttransform: translateY(-3px);
  4721. \t\t\tbox-shadow: 0 8px 25px rgba(255, 162, 0, 0.5);
  4722. \t\t\tcolor: white;
  4723. \t\t}
  4724. \t\t.btn-view-all-products:active {
  4725. \t\t\ttransform: translateY(-1px);
  4726. \t\t}
  4727. \t\t.btn-view-all-products i {
  4728. \t\t\tfont-size: 18px;
  4729. \t\t\ttransition: transform 0.3s ease;
  4730. \t\t}
  4731. \t\t.btn-view-all-products:hover i {
  4732. \t\t\ttransform: translateX(5px);
  4733. \t\t}
  4734. \t\t.btn-view-all-products span {
  4735. \t\t\tposition: relative;
  4736. \t\t\tz-index: 1;
  4737. \t\t}
  4738. \t\t/* Responsive */
  4739. \t\t@media(max-width: 767px) {
  4740. \t\t\t.btn-view-all-products {
  4741. \t\t\t\tpadding: 14px 30px;
  4742. \t\t\t\tfont-size: 14px;
  4743. \t\t\t}
  4744. \t\t}
  4745. \t\t/* Responsive */
  4746. \t\t@media(max-width: 767px) {
  4747. \t\t\t.featured-gallery-grid {
  4748. \t\t\t\tgap: 10px;
  4749. \t\t\t}
  4750. \t\t\t.featured-gallery-info {
  4751. \t\t\t\tpadding: 10px;
  4752. \t\t\t}
  4753. \t\t\t.featured-gallery-title {
  4754. \t\t\t\tfont-size: 13px;
  4755. \t\t\t\tmin-height: 32px;
  4756. \t\t\t}
  4757. \t\t\t.featured-gallery-price {
  4758. \t\t\t\tfont-size: 14px;
  4759. \t\t\t}
  4760. \t\t}
  4761. \t\t/* Styles pour les grilles de produits Nouveautés */
  4762. \t\t.latest-products-grid {
  4763. \t\t\tmargin-top: 30px;
  4764. \t\t}
  4765. \t\t.product-card-modern {
  4766. \t\t\tbackground: white;
  4767. \t\t\tborder-radius: 12px;
  4768. \t\t\toverflow: hidden;
  4769. \t\t\tbox-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
  4770. \t\t\ttransition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
  4771. \t\t\theight: 100%;
  4772. \t\t\tdisplay: flex;
  4773. \t\t\tflex-direction: column;
  4774. \t\t\tborder: 1px solid #f0f0f0;
  4775. \t\t}
  4776. \t\t.product-card-modern:hover {
  4777. \t\t\ttransform: translateY(-8px);
  4778. \t\t\tbox-shadow: 0 8px 24px rgba(0, 0, 0, 0.15);
  4779. \t\t\tborder-color: #ffa200;
  4780. \t\t}
  4781. \t\t.product-image-wrapper {
  4782. \t\t\tposition: relative;
  4783. \t\t\twidth: 100%;
  4784. \t\t\tpadding-top: 75%; /* Ratio 4:3 */
  4785. \t\t\toverflow: hidden;
  4786. \t\t\tbackground: #f8f9fa;
  4787. \t\t}
  4788. \t\t.product-image {
  4789. \t\t\tposition: absolute;
  4790. \t\t\ttop: 0;
  4791. \t\t\tleft: 0;
  4792. \t\t\twidth: 100%;
  4793. \t\t\theight: 100%;
  4794. \t\t\tbackground-size: cover;
  4795. \t\t\tbackground-position: center;
  4796. \t\t\ttransition: transform 0.5s ease;
  4797. \t\t}
  4798. \t\t.product-card-modern:hover .product-image {
  4799. \t\t\ttransform: scale(1.1);
  4800. \t\t}
  4801. \t\t.product-badge-modern {
  4802. \t\t\tposition: absolute;
  4803. \t\t\ttop: 10px;
  4804. \t\t\tright: 10px;
  4805. \t\t\tbackground: linear-gradient(135deg, #ffa200 0%, #ff6b00 100%);
  4806. \t\t\tcolor: white;
  4807. \t\t\tpadding: 6px 12px;
  4808. \t\t\tborder-radius: 20px;
  4809. \t\t\tfont-size: 12px;
  4810. \t\t\tfont-weight: 600;
  4811. \t\t\tz-index: 2;
  4812. \t\t\tbox-shadow: 0 2px 8px rgba(255, 162, 0, 0.3);
  4813. \t\t}
  4814. \t\t.product-badge-modern.new-badge {
  4815. \t\t\tbackground: linear-gradient(135deg, #28a745 0%, #20c997 100%);
  4816. \t\t}
  4817. \t\t.product-overlay {
  4818. \t\t\tposition: absolute;
  4819. \t\t\ttop: 0;
  4820. \t\t\tleft: 0;
  4821. \t\t\twidth: 100%;
  4822. \t\t\theight: 100%;
  4823. \t\t\tbackground: rgba(0, 0, 0, 0.5);
  4824. \t\t\tdisplay: flex;
  4825. \t\t\talign-items: center;
  4826. \t\t\tjustify-content: center;
  4827. \t\t\topacity: 0;
  4828. \t\t\ttransition: opacity 0.3s ease;
  4829. \t\t\tz-index: 1;
  4830. \t\t}
  4831. \t\t.product-card-modern:hover .product-overlay {
  4832. \t\t\topacity: 1;
  4833. \t\t}
  4834. \t\t.btn-view-product {
  4835. \t\t\tbackground: white;
  4836. \t\t\tcolor: #333;
  4837. \t\t\tpadding: 12px 24px;
  4838. \t\t\tborder-radius: 25px;
  4839. \t\t\ttext-decoration: none;
  4840. \t\t\tfont-weight: 600;
  4841. \t\t\tdisplay: flex;
  4842. \t\t\talign-items: center;
  4843. \t\t\tgap: 8px;
  4844. \t\t\ttransition: all 0.3s ease;
  4845. \t\t\tbox-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
  4846. \t\t}
  4847. \t\t.btn-view-product:hover {
  4848. \t\t\tbackground: #ffa200;
  4849. \t\t\tcolor: white;
  4850. \t\t\ttransform: scale(1.05);
  4851. \t\t}
  4852. \t\t.product-info-modern {
  4853. \t\t\tpadding: 16px;
  4854. \t\t\tflex-grow: 1;
  4855. \t\t\tdisplay: flex;
  4856. \t\t\tflex-direction: column;
  4857. \t\t}
  4858. \t\t.product-title-modern {
  4859. \t\t\tmargin: 0 0 8px;
  4860. \t\t\tfont-size: 16px;
  4861. \t\t\tfont-weight: 600;
  4862. \t\t\tline-height: 1.4;
  4863. \t\t}
  4864. \t\t.product-title-modern a {
  4865. \t\t\tcolor: #333;
  4866. \t\t\ttext-decoration: none;
  4867. \t\t\ttransition: color 0.3s ease;
  4868. \t\t}
  4869. \t\t.product-title-modern a:hover {
  4870. \t\t\tcolor: #ffa200;
  4871. \t\t}
  4872. \t\t.product-price-modern {
  4873. \t\t\tfont-size: 20px;
  4874. \t\t\tfont-weight: 700;
  4875. \t\t\tcolor: #ffa200;
  4876. \t\t\tmargin-bottom: 8px;
  4877. \t\t}
  4878. \t\t.product-shop-modern {
  4879. \t\t\tdisplay: flex;
  4880. \t\t\talign-items: center;
  4881. \t\t\tgap: 6px;
  4882. \t\t\tfont-size: 13px;
  4883. \t\t\tcolor: #666;
  4884. \t\t\tmargin-bottom: 8px;
  4885. \t\t}
  4886. \t\t.product-shop-modern i {
  4887. \t\t\tcolor: #ffa200;
  4888. \t\t}
  4889. \t\t.shop-link {
  4890. \t\t\tcolor: #666;
  4891. \t\t\ttext-decoration: none;
  4892. \t\t\ttransition: color 0.3s ease;
  4893. \t\t}
  4894. \t\t.shop-link:hover {
  4895. \t\t\tcolor: #ffa200;
  4896. \t\t}
  4897. \t\t.product-rating-modern {
  4898. \t\t\tdisplay: flex;
  4899. \t\t\talign-items: center;
  4900. \t\t\tgap: 4px;
  4901. \t\t\tmargin-top: auto;
  4902. \t\t}
  4903. \t\t.product-rating-modern .fa-star.active {
  4904. \t\t\tcolor: #ffc107;
  4905. \t\t}
  4906. \t\t.product-rating-modern .fa-star-o {
  4907. \t\t\tcolor: #ddd;
  4908. \t\t}
  4909. \t\t.rating-count {
  4910. \t\t\tfont-size: 12px;
  4911. \t\t\tcolor: #666;
  4912. \t\t\tmargin-left: 4px;
  4913. \t\t}
  4914. \t\t.product-views-modern {
  4915. \t\t\tdisplay: flex;
  4916. \t\t\talign-items: center;
  4917. \t\t\tgap: 6px;
  4918. \t\t\tfont-size: 12px;
  4919. \t\t\tcolor: #666;
  4920. \t\t\tmargin-top: auto;
  4921. \t\t}
  4922. \t\t.product-views-modern i {
  4923. \t\t\tcolor: #999;
  4924. \t\t}
  4925. \t\t/* Style des cartes produits */
  4926. \t\t.product-card {
  4927. \t\t\tbackground: white;
  4928. \t\t\tborder-radius: 15px;
  4929. \t\t\toverflow: hidden;
  4930. \t\t\tbox-shadow: 0 5px 20px rgba(0, 0, 0, 0.1);
  4931. \t\t\ttransition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
  4932. \t\t\theight: 100%;
  4933. \t\t\tdisplay: flex;
  4934. \t\t\tflex-direction: column;
  4935. \t\t}
  4936. \t\t.product-card:hover {
  4937. \t\t\tbox-shadow: 0 15px 40px rgba(0, 0, 0, 0.2);
  4938. \t\t\ttransform: translateY(-5px);
  4939. \t\t}
  4940. \t\t.product-image {
  4941. \t\t\twidth: 100%;
  4942. \t\t\theight: 250px;
  4943. \t\t\tbackground-size: cover;
  4944. \t\t\tbackground-position: center;
  4945. \t\t\tposition: relative;
  4946. \t\t\toverflow: hidden;
  4947. \t\t}
  4948. \t\t.product-image::before {
  4949. \t\t\tcontent: '';
  4950. \t\t\tposition: absolute;
  4951. \t\t\ttop: 0;
  4952. \t\t\tleft: -100%;
  4953. \t\t\twidth: 100%;
  4954. \t\t\theight: 100%;
  4955. \t\t\tbackground: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.3), transparent);
  4956. \t\t\ttransition: left 0.6s ease;
  4957. \t\t}
  4958. \t\t.product-card:hover .product-image::before {
  4959. \t\t\tleft: 100%;
  4960. \t\t}
  4961. \t\t.product-badge {
  4962. \t\t\tposition: absolute;
  4963. \t\t\ttop: 15px;
  4964. \t\t\tright: 15px;
  4965. \t\t\tbackground: linear-gradient(135deg, #ffa200 0%, #ff6b00 100%);
  4966. \t\t\tcolor: white;
  4967. \t\t\tpadding: 8px 15px;
  4968. \t\t\tborder-radius: 20px;
  4969. \t\t\tfont-size: 0.85rem;
  4970. \t\t\tfont-weight: 600;
  4971. \t\t\tbox-shadow: 0 4px 10px rgba(255, 162, 0, 0.4);
  4972. \t\t\tz-index: 1;
  4973. \t\t}
  4974. \t\t.product-info {
  4975. \t\t\tpadding: 20px;
  4976. \t\t\tflex-grow: 1;
  4977. \t\t\tdisplay: flex;
  4978. \t\t\tflex-direction: column;
  4979. \t\t}
  4980. \t\t.product-title {
  4981. \t\t\tfont-size: 1.1rem;
  4982. \t\t\tfont-weight: 600;
  4983. \t\t\tcolor: #2c3e50;
  4984. \t\t\tmargin-bottom: 10px;
  4985. \t\t\tline-height: 1.4;
  4986. \t\t\tdisplay: -webkit-box;
  4987. \t\t\t-webkit-line-clamp: 2;
  4988. \t\t\t-webkit-box-orient: vertical;
  4989. \t\t\toverflow: hidden;
  4990. \t\t}
  4991. \t\t.product-price {
  4992. \t\t\tfont-size: 1.5rem;
  4993. \t\t\tfont-weight: 800;
  4994. \t\t\tcolor: #ffa200;
  4995. \t\t\tmargin-bottom: 15px;
  4996. \t\t}
  4997. \t\t.product-shop {
  4998. \t\t\tfont-size: 0.9rem;
  4999. \t\t\tcolor: #666;
  5000. \t\t\tmargin-bottom: 15px;
  5001. \t\t}
  5002. \t\t.product-shop a {
  5003. \t\t\tcolor: #667eea;
  5004. \t\t\ttext-decoration: none;
  5005. \t\t\ttransition: color 0.3s ease;
  5006. \t\t}
  5007. \t\t.product-shop a:hover {
  5008. \t\t\tcolor: #ffa200;
  5009. \t\t}
  5010. \t\t/* Newsletter Modern Styles */
  5011. \t\t.newsletter-section-modern {
  5012. \t\t\tbackground: linear-gradient(135deg, #ffa200 0%, #095ad3 100%);
  5013. \t\t\tposition: relative;
  5014. \t\t\toverflow: hidden;
  5015. \t\t}
  5016. \t\t.newsletter-section-modern::before {
  5017. \t\t\tcontent: '';
  5018. \t\t\tposition: absolute;
  5019. \t\t\ttop: -50%;
  5020. \t\t\tright: -50%;
  5021. \t\t\twidth: 100%;
  5022. \t\t\theight: 200%;
  5023. \t\t\tbackground: radial-gradient(circle, rgba(255,255,255,0.1) 0%, transparent 70%);
  5024. \t\t\tanimation: pulse 3s ease-in-out infinite;
  5025. \t\t}
  5026. \t\t@keyframes pulse {
  5027. \t\t\t0,
  5028. \t\t\t100% {
  5029. \t\t\t\ttransform: scale(1);
  5030. \t\t\t\topacity: 0.5;
  5031. \t\t\t}
  5032. \t\t\t50% {
  5033. \t\t\t\ttransform: scale(1.1);
  5034. \t\t\t\topacity: 0.8;
  5035. \t\t\t}
  5036. \t\t}
  5037. \t\t.newsletter-card {
  5038. \t\t\tbackground: white;
  5039. \t\t\tborder-radius: 20px;
  5040. \t\t\tpadding: 40px;
  5041. \t\t\tbox-shadow: 0 10px 40px rgba(0, 0, 0, 0.1);
  5042. \t\t\tposition: relative;
  5043. \t\t\tz-index: 1;
  5044. \t\t}
  5045. \t\t.newsletter-title {
  5046. \t\t\tfont-size: 2.5rem;
  5047. \t\t\tfont-weight: bold;
  5048. \t\t\tcolor: #333;
  5049. \t\t}
  5050. \t\t.newsletter-description {
  5051. \t\t\tcolor: #666;
  5052. \t\t\tfont-size: 1.1rem;
  5053. \t\t\tline-height: 1.8;
  5054. \t\t}
  5055. \t\t.newsletter-form-modern {
  5056. \t\t\tposition: relative;
  5057. \t\t}
  5058. \t\t.newsletter-input-wrapper {
  5059. \t\t\tdisplay: flex;
  5060. \t\t\tgap: 10px;
  5061. \t\t\tmargin-bottom: 15px;
  5062. \t\t}
  5063. \t\t.newsletter-input {
  5064. \t\t\tflex: 1;
  5065. \t\t\tpadding: 18px 25px;
  5066. \t\t\tborder: 2px solid #e0e0e0;
  5067. \t\t\tborder-radius: 50px;
  5068. \t\t\tfont-size: 1rem;
  5069. \t\t\ttransition: all 0.3s ease;
  5070. \t\t}
  5071. \t\t.newsletter-input:focus {
  5072. \t\t\toutline: none;
  5073. \t\t\tborder-color: #ffa200;
  5074. \t\t\tbox-shadow: 0 0 0 3px rgba(255, 162, 0, 0.1);
  5075. \t\t}
  5076. \t\t.newsletter-button {
  5077. \t\t\tpadding: 18px 35px;
  5078. \t\t\tbackground: linear-gradient(135deg, #ffa200 0%, #e8910a 100%);
  5079. \t\t\tcolor: white;
  5080. \t\t\tborder: none;
  5081. \t\t\tborder-radius: 50px;
  5082. \t\t\tfont-weight: 600;
  5083. \t\t\tfont-size: 1rem;
  5084. \t\t\tcursor: pointer;
  5085. \t\t\ttransition: all 0.3s ease;
  5086. \t\t\twhite-space: nowrap;
  5087. \t\t}
  5088. \t\t.newsletter-button:hover {
  5089. \t\t\ttransform: translateY(-2px);
  5090. \t\t\tbox-shadow: 0 5px 20px rgba(255, 162, 0, 0.4);
  5091. \t\t}
  5092. \t\t.newsletter-privacy {
  5093. \t\t\tcolor: #999;
  5094. \t\t}
  5095. \t\t/* CTA Modern Styles */
  5096. \t\t.cta-section-modern {
  5097. \t\t\tbackground: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
  5098. \t\t}
  5099. \t\t.cta-card {
  5100. \t\t\tbackground: white;
  5101. \t\t\tborder-radius: 25px;
  5102. \t\t\tpadding: 50px;
  5103. \t\t\tbox-shadow: 0 15px 50px rgba(0, 0, 0, 0.1);
  5104. \t\t\tposition: relative;
  5105. \t\t\toverflow: hidden;
  5106. \t\t}
  5107. \t\t.cta-card::before {
  5108. \t\t\tcontent: '';
  5109. \t\t\tposition: absolute;
  5110. \t\t\ttop: -50px;
  5111. \t\t\tright: -50px;
  5112. \t\t\twidth: 200px;
  5113. \t\t\theight: 200px;
  5114. \t\t\tbackground: linear-gradient(135deg, rgba(255,162,0,0.1) 0%, rgba(255,162,0,0.05) 100%);
  5115. \t\t\tborder-radius: 50%;
  5116. \t\t}
  5117. \t\t.cta-badge {
  5118. \t\t\tdisplay: inline-block;
  5119. \t\t\tpadding: 8px 20px;
  5120. \t\t\tbackground: linear-gradient(135deg, #ffa200 0%, #e8910a 100%);
  5121. \t\t\tcolor: white;
  5122. \t\t\tborder-radius: 50px;
  5123. \t\t\tfont-size: 0.9rem;
  5124. \t\t\tfont-weight: 600;
  5125. \t\t\tmargin-bottom: 20px;
  5126. \t\t}
  5127. \t\t.cta-title {
  5128. \t\t\tfont-size: 3rem;
  5129. \t\t\tfont-weight: bold;
  5130. \t\t\tcolor: #333;
  5131. \t\t\tmargin-bottom: 20px;
  5132. \t\t}
  5133. \t\t.cta-description {
  5134. \t\t\tfont-size: 1.2rem;
  5135. \t\t\tcolor: #666;
  5136. \t\t\tline-height: 1.8;
  5137. \t\t}
  5138. \t\t.cta-features {
  5139. \t\t\tdisplay: flex;
  5140. \t\t\tflex-direction: column;
  5141. \t\t\tgap: 15px;
  5142. \t\t}
  5143. \t\t.cta-feature-item {
  5144. \t\t\tdisplay: flex;
  5145. \t\t\talign-items: center;
  5146. \t\t\tgap: 10px;
  5147. \t\t\tfont-size: 1rem;
  5148. \t\t\tcolor: #555;
  5149. \t\t}
  5150. \t\t.cta-feature-item i {
  5151. \t\t\tcolor: #ffa200;
  5152. \t\t\tfont-size: 1.3rem;
  5153. \t\t}
  5154. \t\t.cta-buttons {
  5155. \t\t\tdisplay: flex;
  5156. \t\t\tgap: 15px;
  5157. \t\t\tflex-wrap: wrap;
  5158. \t\t}
  5159. \t\t.cta-button-primary {
  5160. \t\t\tpadding: 15px 35px;
  5161. \t\t\tbackground: linear-gradient(135deg, #ffa200 0%, #e8910a 100%);
  5162. \t\t\tcolor: white;
  5163. \t\t\tborder: none;
  5164. \t\t\tborder-radius: 50px;
  5165. \t\t\tfont-weight: 600;
  5166. \t\t\tfont-size: 1.1rem;
  5167. \t\t\ttransition: all 0.3s ease;
  5168. \t\t}
  5169. \t\t.cta-button-primary:hover {
  5170. \t\t\ttransform: translateY(-3px);
  5171. \t\t\tbox-shadow: 0 8px 25px rgba(255, 162, 0, 0.4);
  5172. \t\t\tcolor: white;
  5173. \t\t}
  5174. \t\t.cta-button-secondary {
  5175. \t\t\tpadding: 15px 35px;
  5176. \t\t\tbackground: white;
  5177. \t\t\tcolor: #ffa200;
  5178. \t\t\tborder: 2px solid #ffa200;
  5179. \t\t\tborder-radius: 50px;
  5180. \t\t\tfont-weight: 600;
  5181. \t\t\tfont-size: 1.1rem;
  5182. \t\t\ttransition: all 0.3s ease;
  5183. \t\t}
  5184. \t\t.cta-button-secondary:hover {
  5185. \t\t\tbackground: #ffa200;
  5186. \t\t\tcolor: white;
  5187. \t\t\ttransform: translateY(-3px);
  5188. \t\t\tbox-shadow: 0 8px 25px rgba(255, 162, 0, 0.3);
  5189. \t\t}
  5190. \t\t.cta-image-wrapper {
  5191. \t\t\tposition: relative;
  5192. \t\t}
  5193. \t\t.cta-decoration {
  5194. \t\t\tposition: absolute;
  5195. \t\t\ttop: -20px;
  5196. \t\t\tright: -20px;
  5197. \t\t\twidth: 150px;
  5198. \t\t\theight: 150px;
  5199. \t\t\tbackground: linear-gradient(135deg, rgba(255,162,0,0.2) 0%, rgba(255,162,0,0.05) 100%);
  5200. \t\t\tborder-radius: 50%;
  5201. \t\t\tz-index: 0;
  5202. \t\t}
  5203. \t\t.cta-image {
  5204. \t\t\tposition: relative;
  5205. \t\t\tz-index: 1;
  5206. \t\t\tmax-width: 100%;
  5207. \t\t\theight: auto;
  5208. \t\t\tborder-radius: 15px;
  5209. \t\t}
  5210. \t\t.home-section {
  5211. \t\t\tposition: relative;
  5212. \t\t\ttransition: background-color 0.3s ease, color 0.3s ease;
  5213. \t\t}
  5214. \t\t.home-section::before {
  5215. \t\t\tcontent: '';
  5216. \t\t\tposition: absolute;
  5217. \t\t\tinset: 0;
  5218. \t\t\tpointer-events: none;
  5219. \t\t\topacity: 0;
  5220. \t\t\ttransition: opacity 0.3s ease;
  5221. \t\t}
  5222. \t\thtml[data-theme=\"dark\"] .home-section {
  5223. \t\t\tbackground: linear-gradient(180deg, rgba(17, 24, 39, 0.98) 0%, rgba(15, 23, 42, 0.95) 100%) !important;
  5224. \t\t\tcolor: var(--mk-text) !important;
  5225. \t\t\tborder-top: 1px solid rgba(148, 163, 184, 0.08);
  5226. \t\t\tborder-bottom: 1px solid rgba(148, 163, 184, 0.08);
  5227. \t\t}
  5228. \t\thtml[data-theme=\"dark\"] .home-section--alt {
  5229. \t\t\tbackground: linear-gradient(180deg, rgba(12, 18, 30, 0.98) 0%, rgba(24, 34, 53, 0.95) 100%) !important;
  5230. \t\t}
  5231. \t\thtml[data-theme=\"dark\"] .home-section--alt::before {
  5232. \t\t\topacity: 1;
  5233. \t\t\tbackground: linear-gradient(
  5234. \t\t\t\t180deg,
  5235. \t\t\t\trgba(255, 255, 255, 0.015) 0%,
  5236. \t\t\t\trgba(255, 255, 255, 0.015) 50%,
  5237. \t\t\t\trgba(255, 255, 255, 0.03) 50%,
  5238. \t\t\t\trgba(255, 255, 255, 0.03) 100%
  5239. \t\t\t);
  5240. \t\t\tbackground-size: 100% 12px;
  5241. \t\t}
  5242. \t\thtml[data-theme=\"dark\"] .home-section .section-title h2,
  5243. \t\thtml[data-theme=\"dark\"] .home-section .category-content h5,
  5244. \t\thtml[data-theme=\"dark\"] .home-section .product-title-modern,
  5245. \t\thtml[data-theme=\"dark\"] .home-section .product-title-modern a,
  5246. \t\thtml[data-theme=\"dark\"] .home-section .product-title,
  5247. \t\thtml[data-theme=\"dark\"] .home-section .product-title a,
  5248. \t\thtml[data-theme=\"dark\"] .home-section .featured-gallery-title,
  5249. \t\thtml[data-theme=\"dark\"] .home-section .featured-gallery-title a,
  5250. \t\thtml[data-theme=\"dark\"] .home-section .newsletter-title,
  5251. \t\thtml[data-theme=\"dark\"] .home-section .cta-title,
  5252. \t\thtml[data-theme=\"dark\"] .home-section .feature-card h5,
  5253. \t\thtml[data-theme=\"dark\"] .home-section .banner-title-modern {
  5254. \t\t\tcolor: var(--mk-text) !important;
  5255. \t\t\t-webkit-text-fill-color: currentColor !important;
  5256. \t\t\tbackground: none !important;
  5257. \t\t}
  5258. \t\thtml[data-theme=\"dark\"] .home-section .section-title p,
  5259. \t\thtml[data-theme=\"dark\"] .home-section .category-content p,
  5260. \t\thtml[data-theme=\"dark\"] .home-section .product-shop-modern,
  5261. \t\thtml[data-theme=\"dark\"] .home-section .rating-count,
  5262. \t\thtml[data-theme=\"dark\"] .home-section .product-views-modern,
  5263. \t\thtml[data-theme=\"dark\"] .home-section .newsletter-description,
  5264. \t\thtml[data-theme=\"dark\"] .home-section .newsletter-privacy,
  5265. \t\thtml[data-theme=\"dark\"] .home-section .cta-description,
  5266. \t\thtml[data-theme=\"dark\"] .home-section .cta-feature-item,
  5267. \t\thtml[data-theme=\"dark\"] .home-section .banner-description-modern,
  5268. \t\thtml[data-theme=\"dark\"] .home-section .price-label {
  5269. \t\t\tcolor: var(--mk-text-soft) !important;
  5270. \t\t}
  5271. \t\thtml[data-theme=\"dark\"] .home-section .text-muted,
  5272. \t\thtml[data-theme=\"dark\"] .home-section small.text-muted,
  5273. \t\thtml[data-theme=\"dark\"] .home-section .small.text-muted {
  5274. \t\t\tcolor: var(--mk-text-muted) !important;
  5275. \t\t}
  5276. \t\thtml[data-theme=\"dark\"] .home-section .stats-card,
  5277. \t\thtml[data-theme=\"dark\"] .home-section .category-card-custom,
  5278. \t\thtml[data-theme=\"dark\"] .home-section .product-card-modern,
  5279. \t\thtml[data-theme=\"dark\"] .home-section .product-card,
  5280. \t\thtml[data-theme=\"dark\"] .home-section .feature-card,
  5281. \t\thtml[data-theme=\"dark\"] .home-section .newsletter-card,
  5282. \t\thtml[data-theme=\"dark\"] .home-section .cta-card,
  5283. \t\thtml[data-theme=\"dark\"] .home-section .single-product,
  5284. \t\thtml[data-theme=\"dark\"] .home-section .banner-content-modern,
  5285. \t\thtml[data-theme=\"dark\"] .home-section .featured-gallery-card {
  5286. \t\t\tbackground: var(--mk-surface-strong) !important;
  5287. \t\t\tcolor: var(--mk-text) !important;
  5288. \t\t\tborder-color: var(--mk-border) !important;
  5289. \t\t\tbox-shadow: 0 20px 45px rgba(2, 6, 23, 0.28) !important;
  5290. \t\t}
  5291. \t\thtml[data-theme=\"dark\"] .home-section--alt .stats-card,
  5292. \t\thtml[data-theme=\"dark\"] .home-section--alt .category-card-custom,
  5293. \t\thtml[data-theme=\"dark\"] .home-section--alt .product-card-modern,
  5294. \t\thtml[data-theme=\"dark\"] .home-section--alt .product-card,
  5295. \t\thtml[data-theme=\"dark\"] .home-section--alt .feature-card,
  5296. \t\thtml[data-theme=\"dark\"] .home-section--alt .newsletter-card,
  5297. \t\thtml[data-theme=\"dark\"] .home-section--alt .cta-card,
  5298. \t\thtml[data-theme=\"dark\"] .home-section--alt .single-product,
  5299. \t\thtml[data-theme=\"dark\"] .home-section--alt .banner-content-modern,
  5300. \t\thtml[data-theme=\"dark\"] .home-section--alt .featured-gallery-card {
  5301. \t\t\tbackground: rgba(31, 41, 55, 0.9) !important;
  5302. \t\t}
  5303. \t\thtml[data-theme=\"dark\"] .home-section .product-image-wrapper,
  5304. \t\thtml[data-theme=\"dark\"] .home-section .featured-gallery-image-wrapper,
  5305. \t\thtml[data-theme=\"dark\"] .home-section .product-image-container,
  5306. \t\thtml[data-theme=\"dark\"] .home-section .banner-image-wrapper {
  5307. \t\t\tbackground: #0f172a !important;
  5308. \t\t\tborder-color: var(--mk-border) !important;
  5309. \t\t}
  5310. \t\thtml[data-theme=\"dark\"] .home-section .shop-link,
  5311. \t\thtml[data-theme=\"dark\"] .home-section .product-shop a,
  5312. \t\thtml[data-theme=\"dark\"] .home-section .product-shop-modern a,
  5313. \t\thtml[data-theme=\"dark\"] .home-section .featured-gallery-view-btn {
  5314. \t\t\tcolor: #93c5fd !important;
  5315. \t\t}
  5316. \t\thtml[data-theme=\"dark\"] .home-section .shop-link:hover,
  5317. \t\thtml[data-theme=\"dark\"] .home-section .product-shop a:hover,
  5318. \t\thtml[data-theme=\"dark\"] .home-section .product-shop-modern a:hover {
  5319. \t\t\tcolor: var(--mk-primary) !important;
  5320. \t\t}
  5321. \t\thtml[data-theme=\"dark\"] .home-section .banner-price-modern {
  5322. \t\t\tbackground: linear-gradient(135deg, rgba(15, 23, 42, 0.96) 0%, rgba(31, 41, 55, 0.94) 100%) !important;
  5323. \t\t\tborder-left-color: var(--mk-primary) !important;
  5324. \t\t}
  5325. \t\thtml[data-theme=\"dark\"] .home-section .newsletter-input {
  5326. \t\t\tbackground: #0f172a !important;
  5327. \t\t\tborder-color: var(--mk-border) !important;
  5328. \t\t\tcolor: var(--mk-text) !important;
  5329. \t\t}
  5330. \t\thtml[data-theme=\"dark\"] .home-section .newsletter-input::placeholder {
  5331. \t\t\tcolor: var(--mk-text-muted) !important;
  5332. \t\t}
  5333. \t\thtml[data-theme=\"dark\"] .home-section .cta-section-modern,
  5334. \t\thtml[data-theme=\"dark\"] .home-section.cta-section-modern,
  5335. \t\thtml[data-theme=\"dark\"] .home-section.newsletter-section-modern {
  5336. \t\t\tcolor: var(--mk-text) !important;
  5337. \t\t}
  5338. \t</style>
  5339. {% endblock %}
  5340. {% block body %}
  5341. \t<!-- Hero Section -->
  5342. \t<!-- start banner Area avec produits en vedette -->
  5343. \t\t{% if featuredProducts|length > 0 %}
  5344. \t\t\t<section class=\"banner-area-modern\"> <div class=\"banner-carousel-wrapper\">
  5345. \t\t\t\t<div class=\"active-banner-slider owl-carousel\" style=\"margin-top: 100px;\">
  5346. \t\t\t\t\t{% for product in featuredProducts %}
  5347. \t\t\t\t\t\t<!-- single-slide -->
  5348. \t\t\t\t\t\t<div class=\"banner-slide-item\">
  5349. \t\t\t\t\t\t\t<div class=\"container\">
  5350. \t\t\t\t\t\t\t\t<div class=\"row align-items-center\">
  5351. \t\t\t\t\t\t\t\t\t<div class=\"col-lg-4 col-md-6 col-12\">
  5352. \t\t\t\t\t\t\t\t\t\t<div class=\"banner-content-modern\">
  5353. \t\t\t\t\t\t\t\t\t\t\t<div class=\"banner-badge\">
  5354. \t\t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-star\"></i>
  5355. \t\t\t\t\t\t\t\t\t\t\t\tProduit en vedette
  5356. \t\t\t\t\t\t\t\t\t\t\t</div>
  5357. \t\t\t\t\t\t\t\t\t\t\t<h1 class=\"banner-title-modern\">{{ product.name }}</h1>
  5358. \t\t\t\t\t\t\t\t\t\t\t<p class=\"banner-description-modern\">
  5359. \t\t\t\t\t\t\t\t\t\t\t\t{{ product.description ? (product.description|striptags|slice(0, 120) ~ '...') : 'Découvrez ce produit exclusif sur MaketOu' }}
  5360. \t\t\t\t\t\t\t\t\t\t\t</p>
  5361. \t\t\t\t\t\t\t\t\t\t\t<div class=\"banner-price-modern\">
  5362. \t\t\t\t\t\t\t\t\t\t\t\t<span class=\"price-label\">Prix</span>
  5363. \t\t\t\t\t\t\t\t\t\t\t\t<span class=\"price-value\">{{ product.price|number_format(2, '.', ' ') }}
  5364. \t\t\t\t\t\t\t\t\t\t\t\t\tHTG</span>
  5365. \t\t\t\t\t\t\t\t\t\t\t</div>
  5366. \t\t\t\t\t\t\t\t\t\t\t<div class=\"banner-actions-modern\">
  5367. \t\t\t\t\t\t\t\t\t\t\t\t<a class=\"btn-banner-primary\" href=\"{{ path('ui_product_show', {'slug': product.slug}) }}\">
  5368. \t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"btn-text\">Voir le produit</span>
  5369. \t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"btn-icon\">
  5370. \t\t\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-arrow-right\"></i>
  5371. \t\t\t\t\t\t\t\t\t\t\t\t\t</span>
  5372. \t\t\t\t\t\t\t\t\t\t\t\t</a>
  5373. \t\t\t\t\t\t\t\t\t\t\t\t{% if product.shop %}
  5374. \t\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"btn-banner-secondary\" href=\"{{ path('ui_shop_show', {'slug': product.shop.slug}) }}\">
  5375. \t\t\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-store\"></i>
  5376. \t\t\t\t\t\t\t\t\t\t\t\t\t\t<span>{{ product.shop.name }}</span>
  5377. \t\t\t\t\t\t\t\t\t\t\t\t\t</a>
  5378. \t\t\t\t\t\t\t\t\t\t\t\t{% endif %}
  5379. \t\t\t\t\t\t\t\t\t\t\t</div>
  5380. \t\t\t\t\t\t\t\t\t\t</div>
  5381. \t\t\t\t\t\t\t\t\t</div>
  5382. \t\t\t\t\t\t\t\t\t<div class=\"col-lg-8 col-md-6 col-12\">
  5383. \t\t\t\t\t\t\t\t\t\t<div class=\"banner-image-modern\">
  5384. \t\t\t\t\t\t\t\t\t\t\t<div class=\"banner-image-wrapper\">
  5385. \t\t\t\t\t\t\t\t\t\t\t\t{% if product.images is defined and product.images|length > 0 %}
  5386. \t\t\t\t\t\t\t\t\t\t\t\t\t<img class=\"banner-img\" src=\"{{ product.images[0] is defined and product.images[0] ? asset(product.images[0]) : asset('ui/img/product/p' ~ loop.index ~ '.jpg') }}\" alt=\"{{ product.name }}\">
  5387. \t\t\t\t\t\t\t\t\t\t\t\t{% else %}
  5388. \t\t\t\t\t\t\t\t\t\t\t\t\t<img class=\"banner-img\" src=\"{{ asset('ui/img/product/p' ~ loop.index ~ '.jpg') }}\" alt=\"{{ product.name }}\">
  5389. \t\t\t\t\t\t\t\t\t\t\t\t{% endif %}
  5390. \t\t\t\t\t\t\t\t\t\t\t\t<div class=\"banner-image-overlay\"></div>
  5391. \t\t\t\t\t\t\t\t\t\t\t</div>
  5392. \t\t\t\t\t\t\t\t\t\t</div>
  5393. \t\t\t\t\t\t\t\t\t</div>
  5394. \t\t\t\t\t\t\t\t</div>
  5395. \t\t\t\t\t\t\t</div>
  5396. \t\t\t\t\t\t</div>
  5397. \t\t\t\t\t{% endfor %}
  5398. \t\t\t\t</div>
  5399. \t\t\t</div>
  5400. \t\t</section>
  5401. \t{% else %}
  5402. \t\t<!-- Banner par défaut si pas de produits en vedette -->
  5403. \t\t<section class=\"banner-area-modern\">
  5404. \t\t\t<div class=\"banner-carousel-wrapper\">
  5405. \t\t\t\t<div class=\"container\">
  5406. \t\t\t\t\t<div class=\"row align-items-center justify-content-center\">
  5407. \t\t\t\t\t\t<div class=\"col-lg-8 text-center\">
  5408. \t\t\t\t\t\t\t<div class=\"banner-content-modern\" style=\"margin-top: 140px;\">
  5409. \t\t\t\t\t\t\t\t<h1 class=\"banner-title-modern\">Bienvenue sur MaketOu</h1>
  5410. \t\t\t\t\t\t\t\t<p class=\"banner-description-modern\">Votre marketplace haïtienne</p>
  5411. \t\t\t\t\t\t\t</div>
  5412. \t\t\t\t\t\t</div>
  5413. \t\t\t\t\t</div>
  5414. \t\t\t\t</div>
  5415. \t\t\t</div>
  5416. \t\t</section>
  5417. \t{% endif %}
  5418. \t<!-- End banner Area -->
  5419. \t<!-- Catégories de produits -->
  5420. \t{% if categories|length > 0 %}
  5421. \t\t<section class=\"py-5 home-section\">
  5422. \t\t\t<div class=\"container\">
  5423. \t\t\t\t<div class=\"section-title\">
  5424. \t\t\t\t\t<h2>Nos catégories</h2>
  5425. \t\t\t\t\t<p>Explorez nos différentes catégories de produits</p>
  5426. \t\t\t\t</div>
  5427. \t\t\t\t<div class=\"row\" id=\"productCategoriesContainer\">
  5428. \t\t\t\t\t{% for category in categories|slice(0, 8) %}
  5429. \t\t\t\t\t\t<div class=\"col-lg-3 col-md-4 col-sm-6 mb-4\">
  5430. \t\t\t\t\t\t\t<div class=\"category-card-custom d-flex flex-column h-100\">
  5431. \t\t\t\t\t\t\t\t<div class=\"category-image-wrapper\">
  5432. \t\t\t\t\t\t\t\t\t<div class=\"category-image\" style=\"background-image: url('{% if category.bannerImage %}{{ asset('uploads/categories/banner/' ~ category.bannerImage) }}{% else %}{{ asset('ui/img/category/cat-' ~ loop.index ~ '.jpg') }}{% endif %}')\">
  5433. \t\t\t\t\t\t\t\t\t\t<div class=\"category-overlay-custom\">
  5434. \t\t\t\t\t\t\t\t\t\t\t<div class=\"category-icon-wrapper\">
  5435. \t\t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-tag\" style=\"font-size: 3rem;\"></i>
  5436. \t\t\t\t\t\t\t\t\t\t\t\t<h4 class=\"mt-3\">{{ category.name }}</h4>
  5437. \t\t\t\t\t\t\t\t\t\t\t</div>
  5438. \t\t\t\t\t\t\t\t\t\t</div>
  5439. \t\t\t\t\t\t\t\t\t</div>
  5440. \t\t\t\t\t\t\t\t</div>
  5441. \t\t\t\t\t\t\t\t<div class=\"category-content p-3 d-flex flex-column flex-grow-1\">
  5442. \t\t\t\t\t\t\t\t\t<h5 class=\"mb-2\">{{ category.name }}</h5>
  5443. \t\t\t\t\t\t\t\t\t{% if category.description %}
  5444. \t\t\t\t\t\t\t\t\t\t<p class=\"text-muted mb-3 small\">{{ category.description|striptags|slice(0, 60) }}
  5445. \t\t\t\t\t\t\t\t\t\t\t{% if category.description|striptags|length > 60 %}...
  5446. \t\t\t\t\t\t\t\t\t\t\t{% endif %}
  5447. \t\t\t\t\t\t\t\t\t\t</p>
  5448. \t\t\t\t\t\t\t\t\t{% endif %}
  5449. \t\t\t\t\t\t\t\t\t<a href=\"{{ path('ui_listing', {'category': category.slug}) }}\" class=\"btn btn-primary-custom btn-sm w-100 mt-auto\">
  5450. \t\t\t\t\t\t\t\t\t\tVoir les produits
  5451. \t\t\t\t\t\t\t\t\t</a>
  5452. \t\t\t\t\t\t\t\t</div>
  5453. \t\t\t\t\t\t\t</div>
  5454. \t\t\t\t\t\t</div>
  5455. \t\t\t\t\t{% endfor %}
  5456. \t\t\t\t</div>
  5457. \t\t\t</div>
  5458. \t\t</section>
  5459. \t{% endif %}
  5460. \t<!-- Catégories de boutiques -->
  5461. \t{% if shopCategories|length > 0 %}
  5462. \t\t<section class=\"py-5 bg-light home-section home-section--alt\">
  5463. \t\t\t<div class=\"container\">
  5464. \t\t\t\t<div class=\"section-title\">
  5465. \t\t\t\t\t<h2>Nos catégories de boutiques</h2>
  5466. \t\t\t\t\t<p>Explorez les différentes catégories de boutiques disponibles sur MaketOu</p>
  5467. \t\t\t\t</div>
  5468. \t\t\t\t<div class=\"row\" id=\"shopCategoriesContainer\">
  5469. \t\t\t\t\t{% for shopCategory in shopCategories|slice(0, 6) %}
  5470. \t\t\t\t\t\t<div class=\"col-lg-4 col-md-6 mb-4\">
  5471. \t\t\t\t\t\t\t<a href=\"{{ path('ui_shops_list') }}?category={{ shopCategory.slug }}\" class=\"text-decoration-none h-100\" style=\"display: block;\">
  5472. \t\t\t\t\t\t\t\t<div class=\"category-card-custom shop-category-clickable d-flex flex-column h-100\">
  5473. \t\t\t\t\t\t\t\t\t<div class=\"category-image-wrapper\">
  5474. \t\t\t\t\t\t\t\t\t\t<div class=\"category-image\" style=\"background-image: url('{% if shopCategory.bannerImage %}{{ asset(shopCategory.bannerImage) }}{% else %}{{ asset('ui/img/category/shop-' ~ loop.index ~ '.jpg') }}{% endif %}')\">
  5475. \t\t\t\t\t\t\t\t\t\t\t<div class=\"category-overlay-custom\">
  5476. \t\t\t\t\t\t\t\t\t\t\t\t<div class=\"category-icon-wrapper\">
  5477. \t\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-store\" style=\"font-size: 3rem;\"></i>
  5478. \t\t\t\t\t\t\t\t\t\t\t\t\t<h4 class=\"mt-3\">{{ shopCategory.name }}</h4>
  5479. \t\t\t\t\t\t\t\t\t\t\t\t\t{% if shopCategory.description %}
  5480. \t\t\t\t\t\t\t\t\t\t\t\t\t\t<p class=\"mt-2 px-3\">{{ shopCategory.description|striptags|slice(0, 100) }}
  5481. \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{% if shopCategory.description|striptags|length > 100 %}...
  5482. \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{% endif %}
  5483. \t\t\t\t\t\t\t\t\t\t\t\t\t\t</p>
  5484. \t\t\t\t\t\t\t\t\t\t\t\t\t{% endif %}
  5485. \t\t\t\t\t\t\t\t\t\t\t\t</div>
  5486. \t\t\t\t\t\t\t\t\t\t\t</div>
  5487. \t\t\t\t\t\t\t\t\t\t</div>
  5488. \t\t\t\t\t\t\t\t\t</div>
  5489. \t\t\t\t\t\t\t\t\t<div class=\"category-content p-3 d-flex flex-column flex-grow-1\">
  5490. \t\t\t\t\t\t\t\t\t\t<h5 class=\"mb-2\">{{ shopCategory.name }}</h5>
  5491. \t\t\t\t\t\t\t\t\t\t{% if shopCategory.description %}
  5492. \t\t\t\t\t\t\t\t\t\t\t<p class=\"text-muted mb-3 small\">{{ shopCategory.description|striptags|slice(0, 80) }}
  5493. \t\t\t\t\t\t\t\t\t\t\t\t{% if shopCategory.description|striptags|length > 80 %}...
  5494. \t\t\t\t\t\t\t\t\t\t\t\t{% endif %}
  5495. \t\t\t\t\t\t\t\t\t\t\t</p>
  5496. \t\t\t\t\t\t\t\t\t\t{% endif %}
  5497. \t\t\t\t\t\t\t\t\t\t<span class=\"btn btn-primary-custom btn-sm w-100 mt-auto\">
  5498. \t\t\t\t\t\t\t\t\t\t\tVoir les boutiques
  5499. \t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-arrow-right ms-2\"></i>
  5500. \t\t\t\t\t\t\t\t\t\t</span>
  5501. \t\t\t\t\t\t\t\t\t</div>
  5502. \t\t\t\t\t\t\t\t</div>
  5503. \t\t\t\t\t\t\t</a>
  5504. \t\t\t\t\t\t</div>
  5505. \t\t\t\t\t{% endfor %}
  5506. \t\t\t\t</div>
  5507. \t\t\t\t{% if shopCategories|length > 6 %}
  5508. \t\t\t\t\t<div class=\"text-center mt-4\">
  5509. \t\t\t\t\t\t<button class=\"btn btn-outline-primary btn-lg\" onclick=\"showAllShopCategories()\">
  5510. \t\t\t\t\t\t\t<i class=\"lnr lnr-store me-2\"></i>
  5511. \t\t\t\t\t\t\tVoir toutes les catégories de boutiques ({{ shopCategories|length }})
  5512. \t\t\t\t\t\t</button>
  5513. \t\t\t\t\t</div>
  5514. \t\t\t\t{% endif %}
  5515. \t\t\t</div>
  5516. \t\t</section>
  5517. \t{% endif %}
  5518. \t<!-- Produits en vedette -->
  5519. \t{% if featuredProducts|length > 0 %}
  5520. \t\t<section class=\"py-5 bg-light home-section\">
  5521. \t\t\t<div class=\"container\">
  5522. \t\t\t\t<div class=\"section-title text-center mb-5\">
  5523. \t\t\t\t\t<h2>Produits en vedette</h2>
  5524. \t\t\t\t\t<p>Découvrez nos produits les plus populaires et les mieux notés</p>
  5525. \t\t\t\t</div>
  5526. \t\t\t\t<div class=\"featured-gallery-wrapper\">
  5527. \t\t\t\t\t<div class=\"featured-gallery-container\">
  5528. \t\t\t\t\t\t<div class=\"featured-gallery-grid\" id=\"featuredGalleryGrid\">
  5529. \t\t\t\t\t\t\t{% for product in featuredProducts %}
  5530. \t\t\t\t\t\t\t\t<div class=\"featured-gallery-item\">
  5531. \t\t\t\t\t\t\t\t\t{% include 'home/_single_product_card.html.twig' with {'product': product} %}
  5532. \t\t\t\t\t\t\t\t</div>
  5533. \t\t\t\t\t\t\t{% endfor %}
  5534. \t\t\t\t\t\t</div>
  5535. \t\t\t\t\t</div>
  5536. \t\t\t\t\t<!-- Contrôles de navigation -->
  5537. \t\t\t\t\t<div class=\"featured-gallery-controls\">
  5538. \t\t\t\t\t\t<button class=\"featured-gallery-nav-btn featured-gallery-prev\" id=\"featuredGalleryPrev\" aria-label=\"Précédent\">
  5539. \t\t\t\t\t\t\t<i class=\"lnr lnr-chevron-left\"></i>
  5540. \t\t\t\t\t\t</button>
  5541. \t\t\t\t\t\t<button class=\"featured-gallery-nav-btn featured-gallery-next\" id=\"featuredGalleryNext\" aria-label=\"Suivant\">
  5542. \t\t\t\t\t\t\t<i class=\"lnr lnr-chevron-right\"></i>
  5543. \t\t\t\t\t\t</button>
  5544. \t\t\t\t\t</div>
  5545. \t\t\t\t\t<!-- Bouton charger plus -->
  5546. \t\t\t\t\t<div class=\"featured-gallery-load-more text-center mt-4\" id=\"featuredGalleryLoadMore\" style=\"display: none;\">
  5547. \t\t\t\t\t\t<button class=\"btn btn-outline-primary\" id=\"loadMoreFeaturedBtn\">
  5548. \t\t\t\t\t\t\t<i class=\"lnr lnr-plus-circle me-2\"></i>
  5549. \t\t\t\t\t\t\tCharger plus de produits
  5550. \t\t\t\t\t\t</button>
  5551. \t\t\t\t\t</div>
  5552. \t\t\t\t</div>
  5553. \t\t\t\t<div class=\"text-center mt-5\">
  5554. \t\t\t\t\t<a href=\"{{ path('ui_listing') }}\" class=\"btn-view-all-products\">
  5555. \t\t\t\t\t\t<span>Voir tous les produits</span>
  5556. \t\t\t\t\t\t<i class=\"lnr lnr-arrow-right\"></i>
  5557. \t\t\t\t\t</a>
  5558. \t\t\t\t</div>
  5559. \t\t\t</div>
  5560. \t\t</section>
  5561. \t{% endif %}
  5562. \t<!-- Nouveautés -->
  5563. \t{% if latestProducts|length > 0 %}
  5564. \t\t<section class=\"py-5 home-section home-section--alt\">
  5565. \t\t\t<div class=\"container\">
  5566. \t\t\t\t<div class=\"section-title text-center mb-5\">
  5567. \t\t\t\t\t<h2>Nouveautés</h2>
  5568. \t\t\t\t\t<p>Les derniers produits ajoutés sur MaketOu</p>
  5569. \t\t\t\t</div>
  5570. \t\t\t\t<div class=\"featured-gallery-wrapper\">
  5571. \t\t\t\t\t<div class=\"featured-gallery-container\">
  5572. \t\t\t\t\t\t<div class=\"featured-gallery-grid\" id=\"latestGalleryGrid\">
  5573. \t\t\t\t\t\t\t{% for product in latestProducts %}
  5574. \t\t\t\t\t\t\t\t<div class=\"featured-gallery-item\">
  5575. \t\t\t\t\t\t\t\t\t{% include 'home/_single_product_card.html.twig' with {'product': product} %}
  5576. \t\t\t\t\t\t\t\t</div>
  5577. \t\t\t\t\t\t\t{% endfor %}
  5578. \t\t\t\t\t\t</div>
  5579. \t\t\t\t\t</div>
  5580. \t\t\t\t\t<!-- Contrôles de navigation -->
  5581. \t\t\t\t\t<div class=\"featured-gallery-controls\">
  5582. \t\t\t\t\t\t<button class=\"featured-gallery-nav-btn featured-gallery-prev\" id=\"latestGalleryPrev\" aria-label=\"Précédent\">
  5583. \t\t\t\t\t\t\t<i class=\"lnr lnr-chevron-left\"></i>
  5584. \t\t\t\t\t\t</button>
  5585. \t\t\t\t\t\t<button class=\"featured-gallery-nav-btn featured-gallery-next\" id=\"latestGalleryNext\" aria-label=\"Suivant\">
  5586. \t\t\t\t\t\t\t<i class=\"lnr lnr-chevron-right\"></i>
  5587. \t\t\t\t\t\t</button>
  5588. \t\t\t\t\t</div>
  5589. \t\t\t\t\t<!-- Bouton charger plus -->
  5590. \t\t\t\t\t<div class=\"featured-gallery-load-more text-center mt-4\" id=\"latestGalleryLoadMore\" style=\"display: none;\">
  5591. \t\t\t\t\t\t<button class=\"btn btn-outline-primary\" id=\"loadMoreLatestBtn\">
  5592. \t\t\t\t\t\t\t<i class=\"lnr lnr-plus-circle me-2\"></i>
  5593. \t\t\t\t\t\t\tCharger plus de produits
  5594. \t\t\t\t\t\t</button>
  5595. \t\t\t\t\t</div>
  5596. \t\t\t\t</div>
  5597. \t\t\t\t<div class=\"text-center mt-5\">
  5598. \t\t\t\t\t<a href=\"{{ path('ui_listing') }}\" class=\"btn-view-all-products\">
  5599. \t\t\t\t\t\t<span>Voir tous les produits</span>
  5600. \t\t\t\t\t\t<i class=\"lnr lnr-arrow-right\"></i>
  5601. \t\t\t\t\t</a>
  5602. \t\t\t\t</div>
  5603. \t\t\t</div>
  5604. \t\t</section>
  5605. \t{% endif %}
  5606. \t{% if recommendedProducts|length > 0 %}
  5607. \t\t<section class=\"py-5 bg-white home-section\">
  5608. \t\t\t<div class=\"container\">
  5609. \t\t\t\t<div class=\"section-title text-center mb-5\">
  5610. \t\t\t\t\t<h2>Recommandés pour vous</h2>
  5611. \t\t\t\t\t<p>Suggestions basées sur votre activité récente et les tendances de MaketOu</p>
  5612. \t\t\t\t</div>
  5613. \t\t\t\t<div class=\"row g-4\">
  5614. \t\t\t\t\t{% for product in recommendedProducts %}
  5615. \t\t\t\t\t\t<div class=\"col-12 col-sm-6 col-lg-3\">
  5616. \t\t\t\t\t\t\t<div class=\"product-card h-100\">
  5617. \t\t\t\t\t\t\t\t{% set productImage = product.images[0] ?? 'ui/img/product/p1.jpg' %}
  5618. \t\t\t\t\t\t\t\t<div class=\"product-image\" style=\"background-image:url('{{ asset(productImage) }}');\">
  5619. \t\t\t\t\t\t\t\t\t{% if product.isFeatured %}
  5620. \t\t\t\t\t\t\t\t\t\t<span class=\"product-badge bg-success\">Populaire</span>
  5621. \t\t\t\t\t\t\t\t\t{% endif %}
  5622. \t\t\t\t\t\t\t\t</div>
  5623. \t\t\t\t\t\t\t\t<div class=\"p-3\">
  5624. \t\t\t\t\t\t\t\t\t<h6 class=\"mb-2\">
  5625. \t\t\t\t\t\t\t\t\t\t<a href=\"{{ path('ui_product_show', { slug: product.slug }) }}\">{{ product.name }}</a>
  5626. \t\t\t\t\t\t\t\t\t</h6>
  5627. \t\t\t\t\t\t\t\t\t<p class=\"mb-2 text-muted small\">
  5628. \t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-store\"></i>
  5629. \t\t\t\t\t\t\t\t\t\t{% if product.shop %}
  5630. \t\t\t\t\t\t\t\t\t\t\t<a href=\"{{ path('ui_shop_show', {'slug': product.shop.slug}) }}\">{{ product.shop.name }}</a>
  5631. \t\t\t\t\t\t\t\t\t\t{% else %}
  5632. \t\t\t\t\t\t\t\t\t\t\tBoutique non spécifiée
  5633. \t\t\t\t\t\t\t\t\t\t{% endif %}
  5634. \t\t\t\t\t\t\t\t\t</p>
  5635. \t\t\t\t\t\t\t\t\t<div class=\"d-flex align-items-center justify-content-between\">
  5636. \t\t\t\t\t\t\t\t\t\t<span class=\"fw-bold text-primary\">{{ product.price|number_format(2, '.', ' ') }} HTG</span>
  5637. \t\t\t\t\t\t\t\t\t\t<a href=\"javascript:void(0)\" class=\"btn btn-sm btn-outline-primary add-to-cart\" data-product-id=\"{{ product.id }}\" data-qty=\"1\">
  5638. \t\t\t\t\t\t\t\t\t\t\t<i class=\"ti ti-bag\"></i>
  5639. \t\t\t\t\t\t\t\t\t\t</a>
  5640. \t\t\t\t\t\t\t\t\t</div>
  5641. \t\t\t\t\t\t\t\t</div>
  5642. \t\t\t\t\t\t\t</div>
  5643. \t\t\t\t\t\t</div>
  5644. \t\t\t\t\t{% endfor %}
  5645. \t\t\t\t</div>
  5646. \t\t\t</div>
  5647. \t\t</section>
  5648. \t{% endif %}
  5649. \t{% if recentlyViewedProducts|length > 0 %}
  5650. \t\t<section class=\"py-5 bg-light home-section home-section--alt\">
  5651. \t\t\t<div class=\"container\">
  5652. \t\t\t\t<div class=\"section-title text-center mb-5\">
  5653. \t\t\t\t\t<h2>Récemment consultés</h2>
  5654. \t\t\t\t\t<p>Retrouvez les articles que vous avez explorés dernièrement</p>
  5655. \t\t\t\t</div>
  5656. \t\t\t\t<div class=\"featured-gallery-wrapper\">
  5657. \t\t\t\t\t<div class=\"featured-gallery-container\">
  5658. \t\t\t\t\t\t<div class=\"featured-gallery-grid\">
  5659. \t\t\t\t\t\t\t{% for product in recentlyViewedProducts %}
  5660. \t\t\t\t\t\t\t\t<div class=\"featured-gallery-item\">
  5661. \t\t\t\t\t\t\t\t\t{% include 'home/_single_product_card.html.twig' with {'product': product} %}
  5662. \t\t\t\t\t\t\t\t</div>
  5663. \t\t\t\t\t\t\t{% endfor %}
  5664. \t\t\t\t\t\t</div>
  5665. \t\t\t\t\t</div>
  5666. \t\t\t\t</div>
  5667. \t\t\t</div>
  5668. \t\t</section>
  5669. \t{% endif %}
  5670. \t<!-- Fonctionnalités -->
  5671. \t<section class=\"py-5 bg-light home-section\">
  5672. \t\t<div class=\"container\">
  5673. \t\t\t<div class=\"section-title\">
  5674. \t\t\t\t<h2>Pourquoi choisir MaketOu ?</h2>
  5675. \t\t\t\t<p>Découvrez les avantages de notre plateforme</p>
  5676. \t\t\t</div>
  5677. \t\t\t<div class=\"row\">
  5678. \t\t\t\t<div class=\"col-lg-3 col-md-6 mb-4\">
  5679. \t\t\t\t\t<div class=\"feature-card\">
  5680. \t\t\t\t\t\t<div class=\"feature-icon\">
  5681. \t\t\t\t\t\t\t<i class=\"lnr lnr-rocket\"></i>
  5682. \t\t\t\t\t\t</div>
  5683. \t\t\t\t\t\t<h5>Livraison rapide</h5>
  5684. \t\t\t\t\t\t<p>Recevez vos commandes rapidement avec notre réseau de livraison optimisé</p>
  5685. \t\t\t\t\t</div>
  5686. \t\t\t\t</div>
  5687. \t\t\t\t<div class=\"col-lg-3 col-md-6 mb-4\">
  5688. \t\t\t\t\t<div class=\"feature-card\">
  5689. \t\t\t\t\t\t<div class=\"feature-icon\">
  5690. \t\t\t\t\t\t\t<i class=\"lnr lnr-lock\"></i>
  5691. \t\t\t\t\t\t</div>
  5692. \t\t\t\t\t\t<h5>Paiement sécurisé</h5>
  5693. \t\t\t\t\t\t<p>Vos transactions sont protégées avec les dernières technologies de sécurité</p>
  5694. \t\t\t\t\t</div>
  5695. \t\t\t\t</div>
  5696. \t\t\t\t<div class=\"col-lg-3 col-md-6 mb-4\">
  5697. \t\t\t\t\t<div class=\"feature-card\">
  5698. \t\t\t\t\t\t<div class=\"feature-icon\">
  5699. \t\t\t\t\t\t\t<i class=\"lnr lnr-phone\"></i>
  5700. \t\t\t\t\t\t</div>
  5701. \t\t\t\t\t\t<h5>Support 24/7</h5>
  5702. \t\t\t\t\t\t<p>Notre équipe est disponible pour vous aider à tout moment</p>
  5703. \t\t\t\t\t</div>
  5704. \t\t\t\t</div>
  5705. \t\t\t\t<div class=\"col-lg-3 col-md-6 mb-4\">
  5706. \t\t\t\t\t<div class=\"feature-card\">
  5707. \t\t\t\t\t\t<div class=\"feature-icon\">
  5708. \t\t\t\t\t\t\t<i class=\"lnr lnr-undo\"></i>
  5709. \t\t\t\t\t\t</div>
  5710. \t\t\t\t\t\t<h5>Retour facile</h5>
  5711. \t\t\t\t\t\t<p>Politique de retour flexible pour votre tranquillité d'esprit</p>
  5712. \t\t\t\t\t</div>
  5713. \t\t\t\t</div>
  5714. \t\t\t</div>
  5715. \t\t</div>
  5716. \t</section>
  5717. \t<!-- Newsletter -->
  5718. \t<section class=\"newsletter-section-modern py-5 home-section home-section--alt\">
  5719. \t\t<div class=\"container\">
  5720. \t\t\t<div class=\"row justify-content-center\">
  5721. \t\t\t\t<div class=\"col-lg-10\">
  5722. \t\t\t\t\t<div class=\"newsletter-card\">
  5723. \t\t\t\t\t\t<div class=\"row align-items-center\">
  5724. \t\t\t\t\t\t\t<div class=\"col-lg-6 text-center text-lg-start mb-4 mb-lg-0\">
  5725. \t\t\t\t\t\t\t\t<div class=\"newsletter-icon mb-3\">
  5726. \t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-envelope\" style=\"font-size: 4rem; color: #ffa200;\"></i>
  5727. \t\t\t\t\t\t\t\t</div>
  5728. \t\t\t\t\t\t\t\t<h2 class=\"newsletter-title mb-3\">Restez informé des dernières nouveautés</h2>
  5729. \t\t\t\t\t\t\t\t<p class=\"newsletter-description mb-0\">
  5730. \t\t\t\t\t\t\t\t\tInscrivez-vous à notre newsletter pour recevoir les offres exclusives, 
  5731. \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t                                les nouveaux produits et les meilleures promotions directement dans votre boîte mail.
  5732. \t\t\t\t\t\t\t\t</p>
  5733. \t\t\t\t\t\t\t</div>
  5734. \t\t\t\t\t\t\t<div class=\"col-lg-6\">
  5735. \t\t\t\t\t\t\t\t<form class=\"newsletter-form-modern\" id=\"newsletterFormHome\">
  5736. \t\t\t\t\t\t\t\t\t<div class=\"newsletter-input-wrapper\">
  5737. \t\t\t\t\t\t\t\t\t\t<input type=\"email\" class=\"newsletter-input\" placeholder=\"Votre adresse email\" required name=\"email\">
  5738. \t\t\t\t\t\t\t\t\t\t<button class=\"newsletter-button\" type=\"submit\">
  5739. \t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-arrow-right me-2\"></i>
  5740. \t\t\t\t\t\t\t\t\t\t\tS'abonner
  5741. \t\t\t\t\t\t\t\t\t\t</button>
  5742. \t\t\t\t\t\t\t\t\t</div>
  5743. \t\t\t\t\t\t\t\t\t<p class=\"newsletter-privacy mt-3 text-center\">
  5744. \t\t\t\t\t\t\t\t\t\t<small>
  5745. \t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-lock me-1\"></i>
  5746. \t\t\t\t\t\t\t\t\t\t\tVos données sont sécurisées. Pas de spam, désinscription facile.
  5747. \t\t\t\t\t\t\t\t\t\t</small>
  5748. \t\t\t\t\t\t\t\t\t</p>
  5749. \t\t\t\t\t\t\t\t</form>
  5750. \t\t\t\t\t\t\t</div>
  5751. \t\t\t\t\t\t</div>
  5752. \t\t\t\t\t</div>
  5753. \t\t\t\t</div>
  5754. \t\t\t</div>
  5755. \t\t</div>
  5756. \t</section>
  5757. \t<!-- Call to Action -->
  5758. \t<section class=\"cta-section-modern py-5 home-section\">
  5759. \t\t<div class=\"container\">
  5760. \t\t\t<div class=\"cta-card\">
  5761. \t\t\t\t<div class=\"row align-items-center\">
  5762. \t\t\t\t\t<div class=\"col-lg-6 mb-4 mb-lg-0\">
  5763. \t\t\t\t\t\t<div class=\"cta-content\">
  5764. \t\t\t\t\t\t\t<span class=\"cta-badge\">
  5765. \t\t\t\t\t\t\t\t<i class=\"lnr lnr-rocket me-2\"></i>
  5766. \t\t\t\t\t\t\t\tCommencez dès aujourd'hui
  5767. \t\t\t\t\t\t\t</span>
  5768. \t\t\t\t\t\t\t<h2 class=\"cta-title mb-3\">Prêt à commencer ?</h2>
  5769. \t\t\t\t\t\t\t<p class=\"cta-description mb-4\">
  5770. \t\t\t\t\t\t\t\tQue vous soyez
  5771. \t\t\t\t\t\t\t\t<strong>acheteur</strong>
  5772. \t\t\t\t\t\t\t\tou
  5773. \t\t\t\t\t\t\t\t<strong>vendeur</strong>, MaketOu vous offre la plateforme idéale 
  5774. \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t                            pour vos besoins commerciaux en Haïti. Rejoignez des milliers d'utilisateurs satisfaits !
  5775. \t\t\t\t\t\t\t</p>
  5776. \t\t\t\t\t\t\t<div class=\"cta-features mb-4\">
  5777. \t\t\t\t\t\t\t\t<div class=\"cta-feature-item\">
  5778. \t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-checkmark-circle\"></i>
  5779. \t\t\t\t\t\t\t\t\t<span>Plateforme 100% sécurisée</span>
  5780. \t\t\t\t\t\t\t\t</div>
  5781. \t\t\t\t\t\t\t\t<div class=\"cta-feature-item\">
  5782. \t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-checkmark-circle\"></i>
  5783. \t\t\t\t\t\t\t\t\t<span>Support client 24/7</span>
  5784. \t\t\t\t\t\t\t\t</div>
  5785. \t\t\t\t\t\t\t\t<div class=\"cta-feature-item\">
  5786. \t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-checkmark-circle\"></i>
  5787. \t\t\t\t\t\t\t\t\t<span>Paiements multiples</span>
  5788. \t\t\t\t\t\t\t\t</div>
  5789. \t\t\t\t\t\t\t</div>
  5790. \t\t\t\t\t\t\t<div class=\"cta-buttons\">
  5791. \t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn cta-button-primary\" onclick=\"openReadyModal()\">
  5792. \t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-rocket me-2\"></i>
  5793. \t\t\t\t\t\t\t\t\tPrêt à commencer ?
  5794. \t\t\t\t\t\t\t\t</button>
  5795. \t\t\t\t\t\t\t\t<a href=\"{{ path('ui_listing') }}\" class=\"btn cta-button-secondary\">
  5796. \t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-magnifier me-2\"></i>
  5797. \t\t\t\t\t\t\t\t\tVoir les produits
  5798. \t\t\t\t\t\t\t\t</a>
  5799. \t\t\t\t\t\t\t</div>
  5800. \t\t\t\t\t\t</div>
  5801. \t\t\t\t\t</div>
  5802. \t\t\t\t\t<div class=\"col-lg-6\">
  5803. \t\t\t\t\t\t<div class=\"cta-image-wrapper\">
  5804. \t\t\t\t\t\t\t<div class=\"cta-decoration\"></div>
  5805. \t\t\t\t\t\t\t<img src=\"{{ asset('Start.png') }}\" alt=\"MaketOu\" class=\"cta-image\">
  5806. \t\t\t\t\t\t</div>
  5807. \t\t\t\t\t</div>
  5808. \t\t\t\t</div>
  5809. \t\t\t</div>
  5810. \t\t</div>
  5811. \t</section>
  5812. {% endblock %}
  5813. {% block javascripts %}
  5814. \t<script src=\"https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.3.4/owl.carousel.min.js\"></script>
  5815. \t<link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.3.4/assets/owl.carousel.min.css\">
  5816. \t<link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.3.4/assets/owl.theme.default.min.css\">
  5817. \t<script src=\"{{ asset('ui/js/product-unified.js') }}\"></script>
  5818. \t<script>
  5819. \t\twindow.openReadyModal = function () {
  5820. \t\t\tconst modalEl = document.getElementById('readyModal');
  5821. \t\t\tif (!modalEl) {
  5822. \t\t\t\tconsole.error('readyModal introuvable');
  5823. \t\t\t\treturn;
  5824. \t\t\t}
  5825. \t\t\tif (typeof bootstrap === 'undefined' || !bootstrap.Modal) {
  5826. \t\t\t\tconsole.error('Bootstrap Modal non chargé');
  5827. \t\t\t\treturn;
  5828. \t\t\t}
  5829. \t\t\tconst modalInstance = bootstrap.Modal.getOrCreateInstance(modalEl);
  5830. \t\t\tmodalInstance.show();
  5831. \t\t};
  5832. \t</script>
  5833. \t<script>
  5834. \t\t// Variables globales pour la navigation des images (si pas déjà définies)
  5835. if (typeof productImages === 'undefined') {
  5836. var productImages = {};
  5837. var currentImageIndex = {};
  5838. }
  5839. // Initialisation des données d'images pour les produits \"Produits en vedette\"
  5840. {% if featuredProducts is defined %}
  5841. {% for product in featuredProducts %}
  5842. {% if product.images is defined and product.images|length > 0 %}
  5843. productImages[{{ product.id }}] = [{% for img in product.images %}'{{ asset(img) }}'{% if not loop.last %},{% endif %}{% endfor %}];
  5844. currentImageIndex[{{ product.id }}] = 0;{% endif %}{% endfor %}{% endif %}
  5845. // Initialisation des données d'images pour les produits \"Nouveautés\"
  5846. {% if latestProducts is defined %}
  5847. {% for product in latestProducts %}
  5848. {% if product.images is defined and product.images|length > 0 %}
  5849. productImages[{{ product.id }}] = [{% for img in product.images %}'{{ asset(img) }}'{% if not loop.last %},{% endif %}{% endfor %}];
  5850. currentImageIndex[{{ product.id }}] = 0;{% endif %}{% endfor %}{% endif %}
  5851. console.log('SCRIPT LOADED - Featured Gallery');
  5852. (function () {
  5853. \t'use strict';
  5854. \tconst SECTION_CONFIGS = [
  5855. \t\t{ grid: '#featuredGalleryGrid', prev: '#featuredGalleryPrev', next: '#featuredGalleryNext' },
  5856. \t\t{ grid: '#latestGalleryGrid', prev: '#latestGalleryPrev', next: '#latestGalleryNext' }
  5857. \t];
  5858. \tfunction triggerRipple(button) {
  5859. \t\tbutton.classList.remove('btn-ripple');
  5860. \t\tvoid button.offsetWidth;
  5861. \t\tbutton.classList.add('btn-ripple');
  5862. \t\tsetTimeout(() => button.classList.remove('btn-ripple'), 350);
  5863. \t}
  5864. \tfunction initSectionCarousel(config) {
  5865. \t\tconst \$grid = \$(config.grid);
  5866. \t\tif (!\$grid.length) {
  5867. \t\t\treturn;
  5868. \t\t}
  5869. \t\tif (typeof \$.fn.owlCarousel !== 'function') {
  5870. \t\t\tconsole.warn('OwlCarousel n\\'est pas chargé pour', config.grid);
  5871. \t\t\treturn;
  5872. \t\t}
  5873. \t\tif (!\$grid.hasClass('owl-carousel')) {
  5874. \t\t\t\$grid.addClass('owl-carousel');
  5875. \t\t}
  5876. \t\tif (\$grid.hasClass('owl-loaded')) {
  5877. \t\t\treturn;
  5878. \t\t}
  5879. \t\tconst owlInstance = \$grid.owlCarousel({
  5880. \t\t\tloop: true,
  5881. \t\t\tmargin: 30,
  5882. \t\t\tautoplay: true,
  5883. \t\t\tautoplayTimeout: 4800,
  5884. \t\t\tautoplayHoverPause: true,
  5885. \t\t\tsmartSpeed: 650,
  5886. \t\t\tnav: false,
  5887. \t\t\tdots: false,
  5888. \t\t\tresponsive: {
  5889. \t\t\t\t0: { items: 1, margin: 15 },
  5890. \t\t\t\t576: { items: 1.2, margin: 18 },
  5891. \t\t\t\t768: { items: 2, margin: 20 },
  5892. \t\t\t\t992: { items: 3, margin: 25 },
  5893. \t\t\t\t1400: { items: 4, margin: 30 }
  5894. \t\t\t}
  5895. \t\t});
  5896. \t\tconst \$prev = \$(config.prev);
  5897. \t\tconst \$next = \$(config.next);
  5898. \t\tif (\$prev.length) {
  5899. \t\t\t\$prev.off('click.carouselNav').on('click.carouselNav', function (e) {
  5900. \t\t\t\te.preventDefault();
  5901. \t\t\t\towlInstance.trigger('prev.owl.carousel');
  5902. \t\t\t\ttriggerRipple(this);
  5903. \t\t\t});
  5904. \t\t}
  5905. \t\tif (\$next.length) {
  5906. \t\t\t\$next.off('click.carouselNav').on('click.carouselNav', function (e) {
  5907. \t\t\t\te.preventDefault();
  5908. \t\t\t\towlInstance.trigger('next.owl.carousel');
  5909. \t\t\t\ttriggerRipple(this);
  5910. \t\t\t});
  5911. \t\t}
  5912. \t}
  5913. \tfunction ensureOwl(attempt = 0) {
  5914. \t\tif (window.jQuery && typeof \$.fn !== 'undefined' && typeof \$.fn.owlCarousel === 'function') {
  5915. \t\t\tSECTION_CONFIGS.forEach(initSectionCarousel);
  5916. \t\t} else if (attempt < 15) {
  5917. \t\t\tsetTimeout(() => ensureOwl(attempt + 1), 200);
  5918. \t\t} else {
  5919. \t\t\tconsole.warn('OwlCarousel non disponible après plusieurs tentatives');
  5920. \t\t}
  5921. \t}
  5922. \tdocument.addEventListener('DOMContentLoaded', function () {
  5923. \t\tensureOwl();
  5924. \t});
  5925. })();
  5926. document.addEventListener('DOMContentLoaded', function () { // Animation des cartes au scroll
  5927. const observerOptions = {
  5928. threshold: 0.1,
  5929. rootMargin: '0px 0px -50px 0px'
  5930. };
  5931. const observer = new IntersectionObserver(function (entries) {
  5932. entries.forEach(entry => {
  5933. if (entry.isIntersecting) {
  5934. entry.target.style.opacity = '1';
  5935. entry.target.style.transform = 'translateY(0)';
  5936. }
  5937. });
  5938. }, observerOptions);
  5939. // Observer toutes les cartes
  5940. document.querySelectorAll('.stats-card, .category-card, .product-card, .feature-card').forEach(card => {
  5941. card.style.opacity = '0';
  5942. card.style.transform = 'translateY(30px)';
  5943. card.style.transition = 'all 0.6s ease';
  5944. observer.observe(card);
  5945. });
  5946. // Compteur animé pour les statistiques
  5947. function animateCounter(element, target, duration = 2000) {
  5948. let start = 0;
  5949. const increment = target / (duration / 16);
  5950. function updateCounter() {
  5951. start += increment;
  5952. if (start < target) {
  5953. element.textContent = Math.floor(start).toLocaleString();
  5954. requestAnimationFrame(updateCounter);
  5955. } else {
  5956. element.textContent = target.toLocaleString();
  5957. }
  5958. }
  5959. updateCounter();
  5960. }
  5961. // Animer les compteurs quand ils sont visibles
  5962. const statsObserver = new IntersectionObserver(function (entries) {
  5963. entries.forEach(entry => {
  5964. if (entry.isIntersecting) {
  5965. const numberElement = entry.target.querySelector('.stats-number');
  5966. const target = parseInt(numberElement.textContent.replace(/,/g, ''));
  5967. animateCounter(numberElement, target);
  5968. statsObserver.unobserve(entry.target);
  5969. }
  5970. });
  5971. });
  5972. document.querySelectorAll('.stats-card').forEach(card => {
  5973. statsObserver.observe(card);
  5974. });
  5975. // Gestion de la newsletter
  5976. const newsletterForm = document.querySelector('.newsletter-form');
  5977. if (newsletterForm) {
  5978. newsletterForm.addEventListener('submit', function (e) {
  5979. e.preventDefault();
  5980. const email = this.querySelector('input[type=\"email\"]').value;
  5981. const button = this.querySelector('button');
  5982. const originalText = button.innerHTML;
  5983. // Désactiver le bouton
  5984. button.disabled = true;
  5985. button.innerHTML = '<i class=\"lnr lnr-spinner me-2\"></i>Inscription...';
  5986. // Envoyer la requête
  5987. fetch('{{ path(\"ui_newsletter_subscribe\") }}', {
  5988. method: 'POST',
  5989. headers: {
  5990. 'Content-Type': 'application/x-www-form-urlencoded',
  5991. 'X-Requested-With': 'XMLHttpRequest'
  5992. },
  5993. body: 'email=' + encodeURIComponent(email)
  5994. }).then(response => response.json()).then(data => {
  5995. if (data.success) {
  5996. button.innerHTML = '<i class=\"lnr lnr-check me-2\"></i>Inscription réussie !';
  5997. button.classList.remove('btn-warning');
  5998. button.classList.add('btn-success');
  5999. this.reset();
  6000. } else {
  6001. button.innerHTML = '<i class=\"lnr lnr-warning me-2\"></i>Erreur';
  6002. button.classList.remove('btn-warning');
  6003. button.classList.add('btn-danger');
  6004. }
  6005. setTimeout(() => {
  6006. button.innerHTML = originalText;
  6007. button.classList.remove('btn-success', 'btn-danger');
  6008. button.classList.add('btn-warning');
  6009. button.disabled = false;
  6010. }, 3000);
  6011. }).catch(error => {
  6012. console.error('Erreur:', error);
  6013. button.innerHTML = '<i class=\"lnr lnr-warning me-2\"></i>Erreur';
  6014. button.classList.remove('btn-warning');
  6015. button.classList.add('btn-danger');
  6016. setTimeout(() => {
  6017. button.innerHTML = originalText;
  6018. button.classList.remove('btn-danger');
  6019. button.classList.add('btn-warning');
  6020. button.disabled = false;
  6021. }, 3000);
  6022. });
  6023. });
  6024. }
  6025. });
  6026. // Effet parallaxe léger pour le hero
  6027. window.addEventListener('scroll', function () {
  6028. const scrolled = window.pageYOffset;
  6029. const hero = document.querySelector('.hero-banner');
  6030. if (hero) {
  6031. hero.style.transform = `translateY(\${
  6032. scrolled * 0.5
  6033. }px)`;
  6034. }
  6035. });
  6036. });
  6037. // Fonction pour afficher toutes les catégories
  6038. function showAllCategories () {
  6039. const container = document.getElementById('productCategoriesContainer');
  6040. const btn = document.getElementById('showAllCategoriesBtn');{% if allCategories|length > 8 %}{% for category in allCategories %}{% if loop.index > 8 %}const categoryHtml {{ loop.index }} = `
  6041.         <div class=\"col-lg-3 col-md-4 col-sm-6 mb-4\">
  6042.             <div class=\"category-card-custom d-flex flex-column h-100\">
  6043.                 <div class=\"category-image-wrapper\">
  6044.                     <div class=\"category-image\" style=\"background-image: url('{% if category.bannerImage %}{{ asset('uploads/categories/banner/' ~ category.bannerImage) }}{% else %}{{ asset('ui/img/category/cat-' ~ loop.index ~ '.jpg') }}{% endif %}')\">
  6045.                         <div class=\"category-overlay-custom\">
  6046.                             <div class=\"category-icon-wrapper\">
  6047.                                 <i class=\"lnr lnr-tag\" style=\"font-size: 3rem;\"></i>
  6048.                                 <h4 class=\"mt-3\">{{ category.name }}</h4>
  6049.                             </div>
  6050.                         </div>
  6051.                     </div>
  6052.                 </div>
  6053.                 <div class=\"category-content p-3 d-flex flex-column flex-grow-1\">
  6054.                     <h5 class=\"mb-2\">{{ category.name }}</h5>
  6055.                     {% if category.description %}
  6056.                         <p class=\"text-muted mb-3 small\">{{ category.description|striptags|slice(0, 60) }}{% if category.description|striptags|length > 60 %}...{% endif %}</p>
  6057.                     {% endif %}
  6058.                     <a href=\"{{ path('ui_listing', {'category': category.slug}) }}\" class=\"btn btn-primary-custom btn-sm w-100 mt-auto\">
  6059.                         Voir les produits
  6060.                     </a>
  6061.                 </div>
  6062.             </div>
  6063.         </div>
  6064.     `;
  6065. container.insertAdjacentHTML('beforeend', categoryHtml {{ loop.index }});{% endif %}{% endfor %}{% endif %}if (btn) 
  6066. btn.style.display = 'none';
  6067. }
  6068. // Fonction pour afficher toutes les catégories de boutiques
  6069. function showAllShopCategories () {
  6070. const container = document.getElementById('shopCategoriesContainer');
  6071. const btn = document.querySelector('[onclick=\"showAllShopCategories()\"]') ?. parentElement;{% if allShopCategories|length > 6 %}{% for shopCategory in allShopCategories %}{% if loop.index > 6 %}const shopCategoryHtml {{ loop.index }} = `
  6072.         <div class=\"col-lg-4 col-md-6 mb-4\">
  6073.             <a href=\"{{ path('ui_shops_list') }}?category={{ shopCategory.slug }}\" class=\"text-decoration-none h-100\" style=\"display: block;\">
  6074.                 <div class=\"category-card-custom shop-category-clickable d-flex flex-column h-100\">
  6075.                     <div class=\"category-image-wrapper\">
  6076.                         <div class=\"category-image\" style=\"background-image: url('{% if shopCategory.bannerImage %}{{ asset(shopCategory.bannerImage) }}{% else %}{{ asset('ui/img/category/shop-' ~ loop.index ~ '.jpg') }}{% endif %}')\">
  6077.                             <div class=\"category-overlay-custom\">
  6078.                                 <div class=\"category-icon-wrapper\">
  6079.                                     <i class=\"lnr lnr-store\" style=\"font-size: 3rem;\"></i>
  6080.                                     <h4 class=\"mt-3\">{{ shopCategory.name }}</h4>
  6081.                                     {% if shopCategory.description %}
  6082.                                         <p class=\"mt-2 px-3\">{{ shopCategory.description|striptags|slice(0, 100) }}{% if shopCategory.description|striptags|length > 100 %}...{% endif %}</p>
  6083.                                     {% endif %}
  6084.                                 </div>
  6085.                             </div>
  6086.                         </div>
  6087.                     </div>
  6088.                     <div class=\"category-content p-3 d-flex flex-column flex-grow-1\">
  6089.                         <h5 class=\"mb-2\">{{ shopCategory.name }}</h5>
  6090.                         {% if shopCategory.description %}
  6091.                             <p class=\"text-muted mb-3 small\">{{ shopCategory.description|striptags|slice(0, 80) }}{% if shopCategory.description|striptags|length > 80 %}...{% endif %}</p>
  6092.                         {% endif %}
  6093.                         <span class=\"btn btn-primary-custom btn-sm w-100 mt-auto\">
  6094.                             Voir les boutiques <i class=\"lnr lnr-arrow-right ms-2\"></i>
  6095.                         </span>
  6096.                     </div>
  6097.                 </div>
  6098.             </a>
  6099.         </div>
  6100.     `;
  6101. container.insertAdjacentHTML('beforeend', shopCategoryHtml {{ loop.index }});{% endif %}{% endfor %}{% endif %}if (btn) 
  6102. btn.style.display = 'none';
  6103. }
  6104. // Initialiser les carousels
  6105. \$(document).ready(function () { // Carousel bannière principale
  6106. if (\$('.active-banner-slider').length) {
  6107. \$('.active-banner-slider').owlCarousel({
  6108. items: 1,
  6109. loop: true,
  6110. autoplay: true,
  6111. autoplayTimeout: 6000,
  6112. autoplayHoverPause: true,
  6113. nav: true,
  6114. dots: true,
  6115. navText: [
  6116. '<i class=\"lnr lnr-chevron-left\"></i>', '<i class=\"lnr lnr-chevron-right\"></i>'
  6117. ],
  6118. smartSpeed: 1000,
  6119. animateOut: 'fadeOut',
  6120. animateIn: 'fadeIn',
  6121. responsive: {
  6122. 0: {
  6123. items: 1,
  6124. nav: true,
  6125. dots: true
  6126. },
  6127. 768: {
  6128. items: 1,
  6129. nav: true,
  6130. dots: true
  6131. },
  6132. 992: {
  6133. items: 1,
  6134. nav: true,
  6135. dots: true
  6136. }
  6137. }
  6138. });
  6139. }
  6140. // Animation d'apparition pour les cartes produits
  6141. const observerOptions = {
  6142. threshold: 0.1,
  6143. rootMargin: '0px 0px -50px 0px'
  6144. };
  6145. const productObserver = new IntersectionObserver(function (entries) {
  6146. entries.forEach(entry => {
  6147. if (entry.isIntersecting) {
  6148. entry.target.style.opacity = '1';
  6149. entry.target.style.transform = 'translateY(0)';
  6150. }
  6151. });
  6152. }, observerOptions);
  6153. document.querySelectorAll('.product-card-modern').forEach((card, index) => {
  6154. card.style.opacity = '0';
  6155. card.style.transform = 'translateY(20px)';
  6156. card.style.transition = `opacity 0.6s ease \${
  6157. index * 0.1
  6158. }s, transform 0.6s ease \${
  6159. index * 0.1
  6160. }s`;
  6161. productObserver.observe(card);
  6162. });
  6163. });
  6164. \t</script>
  6165. \t<!-- Modal \"Prêt à commencer ?\" -->
  6166. \t<div class=\"modal fade\" id=\"readyModal\" tabindex=\"-1\">
  6167. \t\t<div class=\"modal-dialog modal-dialog-centered\">
  6168. \t\t\t<div class=\"modal-content\">
  6169. \t\t\t\t<div class=\"modal-header\">
  6170. \t\t\t\t\t<h5 class=\"modal-title\">
  6171. \t\t\t\t\t\t<i class=\"lnr lnr-rocket me-2\"></i>Prêt à commencer ?
  6172. \t\t\t\t\t</h5>
  6173. \t\t\t\t\t<button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\"></button>
  6174. \t\t\t\t</div>
  6175. \t\t\t\t<div class=\"modal-body\">
  6176. \t\t\t\t\t{% if app.user %}
  6177. \t\t\t\t\t\t{% if app.user.kycStatus == 'approved' %}
  6178. \t\t\t\t\t\t\t<div class=\"text-center\">
  6179. \t\t\t\t\t\t\t\t<i class=\"lnr lnr-checkmark-circle\" style=\"font-size: 4rem; color: #28a745;\"></i>
  6180. \t\t\t\t\t\t\t\t<h4 class=\"mt-3\">Votre compte est vérifié !</h4>
  6181. \t\t\t\t\t\t\t\t<p class=\"text-muted\">Vous pouvez commencer à utiliser MaketOu en toute sérénité.</p>
  6182. \t\t\t\t\t\t\t\t<div class=\"mt-4\">
  6183. \t\t\t\t\t\t\t\t\t<a href=\"{{ path('seller_index') }}\" class=\"btn btn-primary me-2\">
  6184. \t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-store me-1\"></i>Ouvrir ma boutique
  6185. \t\t\t\t\t\t\t\t\t</a>
  6186. \t\t\t\t\t\t\t\t\t<a href=\"{{ path('ui_listing') }}\" class=\"btn btn-outline-primary\">
  6187. \t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-magnifier me-1\"></i>Voir les produits
  6188. \t\t\t\t\t\t\t\t\t</a>
  6189. \t\t\t\t\t\t\t\t</div>
  6190. \t\t\t\t\t\t\t</div>
  6191. \t\t\t\t\t\t{% else %}
  6192. \t\t\t\t\t\t\t<div class=\"text-center\">
  6193. \t\t\t\t\t\t\t\t<i class=\"lnr lnr-shield\" style=\"font-size: 4rem; color: #ffa200;\"></i>
  6194. \t\t\t\t\t\t\t\t<h4 class=\"mt-3\">Vérification requise</h4>
  6195. \t\t\t\t\t\t\t\t<p class=\"text-muted\">Pour utiliser toutes les fonctionnalités de MaketOu, vous devez compléter votre vérification KYC.</p>
  6196. \t\t\t\t\t\t\t\t<div class=\"mt-4\">
  6197. \t\t\t\t\t\t\t\t\t<a href=\"{{ path('ui_account_kyc') }}\" class=\"btn btn-primary btn-lg\">
  6198. \t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-checkmark-circle me-1\"></i> <span class=\"d-none d-md-inline\">Commencer la vérification</span>
  6199. \t\t\t\t\t\t\t\t\t</a>
  6200. \t\t\t\t\t\t\t\t</div>
  6201. \t\t\t\t\t\t\t</div>
  6202. \t\t\t\t\t\t{% endif %}
  6203. \t\t\t\t\t{% else %}
  6204. \t\t\t\t\t\t<div class=\"text-center\">
  6205. \t\t\t\t\t\t\t<i class=\"lnr lnr-user\" style=\"font-size: 4rem; color: #007bff;\"></i>
  6206. \t\t\t\t\t\t\t<h4 class=\"mt-3\">Connectez-vous pour commencer</h4>
  6207. \t\t\t\t\t\t\t<p class=\"text-muted\">Créez un compte ou connectez-vous pour accéder à toutes les fonctionnalités de MaketOu.</p>
  6208. \t\t\t\t\t\t\t<div class=\"mt-4\">
  6209. \t\t\t\t\t\t\t\t<a href=\"{{ path('ui_app_login') }}\" class=\"btn btn-primary btn-lg me-2\">
  6210. \t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-enter me-1\"></i>Se connecter
  6211. \t\t\t\t\t\t\t\t</a>
  6212. \t\t\t\t\t\t\t\t<a href=\"{{ path('ui_app_register') }}\" class=\"btn btn-outline-primary btn-lg\">
  6213. \t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-user-plus me-1\"></i>S'inscrire
  6214. \t\t\t\t\t\t\t\t</a>
  6215. \t\t\t\t\t\t\t</div>
  6216. \t\t\t\t\t\t</div>
  6217. \t\t\t\t\t{% endif %}
  6218. \t\t\t\t</div>
  6219. \t\t\t</div>
  6220. \t\t</div>
  6221. \t</div>
  6222. {% endblock %}
  6223. ""home/index.html.twig""/home/u540977899/domains/maketou-ht.com/public_html/templates/home/index.html.twig");
  6224.     }
  6225. }