<?php
use Twig\Environment;
use Twig\Error\LoaderError;
use Twig\Error\RuntimeError;
use Twig\Extension\CoreExtension;
use Twig\Extension\SandboxExtension;
use Twig\Markup;
use Twig\Sandbox\SecurityError;
use Twig\Sandbox\SecurityNotAllowedTagError;
use Twig\Sandbox\SecurityNotAllowedFilterError;
use Twig\Sandbox\SecurityNotAllowedFunctionError;
use Twig\Source;
use Twig\Template;
use Twig\TemplateWrapper;
/* home/index.html.twig */
class __TwigTemplate_affacb9b2c747adbd7a2c975972a32a5 extends Template
{
private Source $source;
/**
* @var array<string, Template>
*/
private array $macros = [];
public function __construct(Environment $env)
{
parent::__construct($env);
$this->source = $this->getSourceContext();
$this->blocks = [
'title' => [$this, 'block_title'],
'stylesheets' => [$this, 'block_stylesheets'],
'body' => [$this, 'block_body'],
'javascripts' => [$this, 'block_javascripts'],
];
}
protected function doGetParent(array $context): bool|string|Template|TemplateWrapper
{
// line 1
return "base_home.html.twig";
}
protected function doDisplay(array $context, array $blocks = []): iterable
{
$macros = $this->macros;
$__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
$__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "template", "home/index.html.twig"));
$__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
$__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "template", "home/index.html.twig"));
$this->parent = $this->load("base_home.html.twig", 1);
yield from $this->parent->unwrap()->yield($context, array_merge($this->blocks, $blocks));
$__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
$__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
}
// line 3
/**
* @return iterable<null|scalar|\Stringable>
*/
public function block_title(array $context, array $blocks = []): iterable
{
$macros = $this->macros;
$__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
$__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "title"));
$__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
$__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "title"));
yield "Accueil | MaketOu - Votre marketplace haïtienne
";
$__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
$__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
yield from [];
}
// line 6
/**
* @return iterable<null|scalar|\Stringable>
*/
public function block_stylesheets(array $context, array $blocks = []): iterable
{
$macros = $this->macros;
$__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
$__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "stylesheets"));
$__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
$__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "stylesheets"));
// line 7
yield "\t<style>
\t\t/* Styles personnalisés pour la page d'accueil */
\t\t.hero-banner {
\t\t\tbackground: linear-gradient(135deg, #ffa200 0%, #e8910a 100%);
\t\t\tcolor: white;
\t\t\tpadding: 100px 0;
\t\t\tposition: relative;
\t\t\toverflow: hidden;
\t\t}
\t\t.hero-banner::before {
\t\t\tcontent: '';
\t\t\tposition: absolute;
\t\t\ttop: 0;
\t\t\tleft: 0;
\t\t\tright: 0;
\t\t\tbottom: 0;
\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>');
\t\t\topacity: 0.3;
\t\t}
\t\t.hero-content {
\t\t\tposition: relative;
\t\t\tz-index: 2;
\t\t}
\t\t.stats-card {
\t\t\tbackground: white;
\t\t\tborder-radius: 15px;
\t\t\tpadding: 30px;
\t\t\ttext-align: center;
\t\t\tbox-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
\t\t\ttransition: transform 0.3s ease;
\t\t}
\t\t.stats-card:hover {
\t\t\ttransform: translateY(-5px);
\t\t}
\t\t.stats-number {
\t\t\tfont-size: 3rem;
\t\t\tfont-weight: bold;
\t\t\tcolor: #ffa200;
\t\t\tdisplay: block;
\t\t}
\t\t.stats-label {
\t\t\tcolor: #666;
\t\t\tfont-size: 1.1rem;
\t\t\tmargin-top: 10px;
\t\t}
\t\t.category-card {
\t\t\tbackground: white;
\t\t\tborder-radius: 15px;
\t\t\toverflow: hidden;
\t\t\tbox-shadow: 0 5px 20px rgba(0, 0, 0, 0.1);
\t\t\ttransition: all 0.3s ease;
\t\t\theight: 100%;
\t\t}
\t\t.category-card:hover {
\t\t\ttransform: translateY(-5px);
\t\t\tbox-shadow: 0 15px 40px rgba(0, 0, 0, 0.15);
\t\t}
\t\t.category-image {
\t\t\theight: 200px;
\t\t\tbackground-size: cover;
\t\t\tbackground-position: center;
\t\t\tposition: relative;
\t\t}
\t\t.category-overlay {
\t\t\tposition: absolute;
\t\t\ttop: 0;
\t\t\tleft: 0;
\t\t\tright: 0;
\t\t\tbottom: 0;
\t\t\tbackground: linear-gradient(45deg, rgba(255,162,0,0.8), rgba(232,145,10,0.8));
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tjustify-content: center;
\t\t\topacity: 0;
\t\t\ttransition: opacity 0.3s ease;
\t\t}
\t\t.category-card:hover .category-overlay {
\t\t\topacity: 1;
\t\t}
\t\t.product-card {
\t\t\tbackground: white;
\t\t\tborder-radius: 15px;
\t\t\toverflow: hidden;
\t\t\tbox-shadow: 0 5px 20px rgba(0, 0, 0, 0.1);
\t\t\ttransition: all 0.3s ease;
\t\t\theight: 100%;
\t\t}
\t\t.product-card:hover {
\t\t\ttransform: translateY(-5px);
\t\t\tbox-shadow: 0 15px 40px rgba(0, 0, 0, 0.15);
\t\t}
\t\t.product-image {
\t\t\theight: 250px;
\t\t\tbackground-size: cover;
\t\t\tbackground-position: center;
\t\t\tposition: relative;
\t\t}
\t\t.product-badge {
\t\t\tposition: absolute;
\t\t\ttop: 15px;
\t\t\tright: 15px;
\t\t\tbackground: #ffa200;
\t\t\tcolor: white;
\t\t\tpadding: 5px 10px;
\t\t\tborder-radius: 20px;
\t\t\tfont-size: 0.8rem;
\t\t\tfont-weight: bold;
\t\t}
\t\t.product-info {
\t\t\tpadding: 20px;
\t\t}
\t\t.product-title {
\t\t\tfont-size: 1.2rem;
\t\t\tfont-weight: 600;
\t\t\tmargin-bottom: 10px;
\t\t\tcolor: #333;
\t\t}
\t\t.product-price {
\t\t\tfont-size: 1.5rem;
\t\t\tfont-weight: bold;
\t\t\tcolor: #ffa200;
\t\t\tmargin-bottom: 10px;
\t\t}
\t\t.product-shop {
\t\t\tfont-size: 0.9rem;
\t\t\tcolor: #666;
\t\t\tmargin-bottom: 15px;
\t\t}
\t\t.btn-primary-custom {
\t\t\tbackground: #ffa200;
\t\t\tborder: none;
\t\t\tcolor: white;
\t\t\tpadding: 12px 30px;
\t\t\tborder-radius: 25px;
\t\t\tfont-weight: 500;
\t\t\ttransition: all 0.3s ease;
\t\t}
\t\t.btn-primary-custom:hover {
\t\t\tbackground: #e8910a;
\t\t\ttransform: translateY(-2px);
\t\t\tbox-shadow: 0 5px 15px rgba(255, 162, 0, 0.3);
\t\t}
\t\t.section-title {
\t\t\ttext-align: center;
\t\t\tmargin-bottom: 50px;
\t\t}
\t\t.section-title h2 {
\t\t\tfont-size: 2.5rem;
\t\t\tfont-weight: bold;
\t\t\tcolor: #333;
\t\t\tmargin-bottom: 15px;
\t\t}
\t\t.section-title p {
\t\t\tfont-size: 1.2rem;
\t\t\tcolor: #666;
\t\t\tmax-width: 600px;
\t\t\tmargin: 0 auto;
\t\t}
\t\t.feature-card {
\t\t\ttext-align: center;
\t\t\tpadding: 30px 20px;
\t\t\tbackground: white;
\t\t\tborder-radius: 15px;
\t\t\tbox-shadow: 0 5px 20px rgba(0, 0, 0, 0.1);
\t\t\ttransition: all 0.3s ease;
\t\t\theight: 100%;
\t\t}
\t\t.feature-card:hover {
\t\t\ttransform: translateY(-5px);
\t\t\tbox-shadow: 0 15px 40px rgba(0, 0, 0, 0.15);
\t\t}
\t\t.feature-icon {
\t\t\twidth: 80px;
\t\t\theight: 80px;
\t\t\tbackground: linear-gradient(135deg, #ffa200, #e8910a);
\t\t\tborder-radius: 50%;
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tjustify-content: center;
\t\t\tmargin: 0 auto 20px;
\t\t\tfont-size: 2rem;
\t\t\tcolor: white;
\t\t}
\t\t.newsletter-section {
\t\t\tbackground: linear-gradient(135deg, #ffa200 0%, #e8910a 100%);
\t\t\tcolor: white;
\t\t\tpadding: 80px 0;
\t\t}
\t\t.newsletter-form {
\t\t\tmax-width: 500px;
\t\t\tmargin: 0 auto;
\t\t}
\t\t.newsletter-form .form-control {
\t\t\tborder: none;
\t\t\tborder-radius: 25px;
\t\t\tpadding: 15px 25px;
\t\t\tfont-size: 1.1rem;
\t\t}
\t\t.newsletter-form .btn {
\t\t\tborder-radius: 25px;
\t\t\tpadding: 15px 30px;
\t\t\tfont-weight: 500;
\t\t}
\t\t/* Styles pour les catégories personnalisées */
\t\t.category-card-custom {
\t\t\tbackground: white;
\t\t\tborder-radius: 15px;
\t\t\toverflow: hidden;
\t\t\tbox-shadow: 0 5px 20px rgba(0, 0, 0, 0.1);
\t\t\ttransition: all 0.3s ease;
\t\t\theight: 100%;
\t\t\tdisplay: flex;
\t\t\tflex-direction: column;
\t\t}
\t\t.category-card-custom:hover {
\t\t\ttransform: translateY(-5px);
\t\t\tbox-shadow: 0 15px 40px rgba(0, 0, 0, 0.15);
\t\t}
\t\t.category-image-wrapper {
\t\t\tposition: relative;
\t\t\toverflow: hidden;
\t\t}
\t\t.category-image {
\t\t\theight: 200px;
\t\t\tbackground-size: cover;
\t\t\tbackground-position: center;
\t\t\tposition: relative;
\t\t\ttransition: transform 0.5s ease;
\t\t}
\t\t.category-card-custom:hover .category-image {
\t\t\ttransform: scale(1.1);
\t\t}
\t\t.category-overlay-custom {
\t\t\tposition: absolute;
\t\t\ttop: 0;
\t\t\tleft: 0;
\t\t\tright: 0;
\t\t\tbottom: 0;
\t\t\tbackground: rgba(0, 0, 0, 0.5);
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tjustify-content: center;
\t\t\topacity: 0;
\t\t\ttransition: opacity 0.3s ease;
\t\t}
\t\t.category-card-custom:hover .category-overlay-custom {
\t\t\topacity: 1;
\t\t}
\t\t.category-icon-wrapper {
\t\t\ttext-align: center;
\t\t\tcolor: white;
\t\t\ttransform: translateY(20px);
\t\t\ttransition: transform 0.3s ease;
\t\t}
\t\t.category-card-custom:hover .category-icon-wrapper {
\t\t\ttransform: translateY(0);
\t\t}
\t\t.category-content {
\t\t\tflex-grow: 1;
\t\t\tdisplay: flex;
\t\t\tflex-direction: column;
\t\t}
\t\t.category-content .btn {
\t\t\tmargin-top: auto;
\t\t}
\t\t/* Responsive Styles */
\t\t@media(max-width: 991.98px) {
\t\t\t.hero-banner {
\t\t\t\tpadding: 60px 0;
\t\t\t}
\t\t\t.stats-number {
\t\t\t\tfont-size: 2.5rem;
\t\t\t}
\t\t\t.section-title h2 {
\t\t\t\tfont-size: 2rem;
\t\t\t}
\t\t\t
\t\t\t.stats-card {
\t\t\t\tmargin-bottom: 1.5rem;
\t\t\t}
\t\t}
\t\t@media(max-width: 767.98px) {
\t\t\t.hero-banner {
\t\t\t\tpadding: 40px 0;
\t\t\t}
\t\t\t.hero-content h1 {
\t\t\t\tfont-size: 1.75rem;
\t\t\t}
\t\t\t.stats-number {
\t\t\t\tfont-size: 2rem;
\t\t\t}
\t\t\t.stats-label {
\t\t\t\tfont-size: 0.9rem;
\t\t\t}
\t\t\t.section-title h2 {
\t\t\t\tfont-size: 1.75rem;
\t\t\t}
\t\t\t.section-title p {
\t\t\t\tfont-size: 1rem;
\t\t\t}
\t\t\t
\t\t\t.category-card,
\t\t\t.product-card {
\t\t\t\tmargin-bottom: 1.5rem;
\t\t\t}
\t\t\t
\t\t\t.category-image {
\t\t\t\theight: 150px;
\t\t\t}
\t\t\t
\t\t\t.product-image {
\t\t\t\theight: 200px;
\t\t\t}
\t\t\t
\t\t\t.feature-card {
\t\t\t\tmargin-bottom: 1.5rem;
\t\t\t}
\t\t\t
\t\t\t.newsletter-section {
\t\t\t\tpadding: 40px 0;
\t\t\t}
\t\t}
\t\t@media(max-width: 575.98px) {
\t\t\t.hero-banner {
\t\t\t\tpadding: 30px 0;
\t\t\t}
\t\t\t.hero-content h1 {
\t\t\t\tfont-size: 1.5rem;
\t\t\t}
\t\t\t.stats-card {
\t\t\t\tpadding: 1.5rem;
\t\t\t}
\t\t\t.stats-number {
\t\t\t\tfont-size: 1.75rem;
\t\t\t}
\t\t\t.section-title h2 {
\t\t\t\tfont-size: 1.5rem;
\t\t\t}
\t\t\t
\t\t\t.category-image {
\t\t\t\theight: 120px;
\t\t\t}
\t\t\t
\t\t\t.product-image {
\t\t\t\theight: 180px;
\t\t\t}
\t\t\t
\t\t\t.product-info {
\t\t\t\tpadding: 1rem;
\t\t\t}
\t\t\t
\t\t\t.product-title {
\t\t\t\tfont-size: 1rem;
\t\t\t}
\t\t\t
\t\t\t.product-price {
\t\t\t\tfont-size: 1.25rem;
\t\t\t}
\t\t}
\t\t/* Styles modernes pour le carousel de bannière */
\t\t.banner-area-modern {
\t\t\tposition: relative;
\t\t\twidth: 100%;
\t\t\tmin-height: 500px;
\t\t\tbackground: url('";
// line 428
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("ui/img/banner/banner-bg.jpg"), "html", null, true);
yield "') center center no-repeat;
\t\t\tbackground-size: cover;
\t\t\toverflow: hidden;
\t\t\tpadding: 60px 0;
\t\t}
\t\t.banner-area-modern::before {
\t\t\tcontent: '';
\t\t\tposition: absolute;
\t\t\ttop: 0;
\t\t\tleft: 0;
\t\t\twidth: 100%;
\t\t\theight: 100%;
\t\t\tbackground: rgba(0, 0, 0, 0.1);
\t\t\tz-index: 1;
\t\t}
\t\t.banner-carousel-wrapper {
\t\t\tposition: relative;
\t\t\twidth: 100%;
\t\t\theight: 100%;
\t\t\tz-index: 2;
\t\t}
\t\t.banner-slide-item {
\t\t\tmin-height: 500px;
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tpadding: 40px 0;
\t\t}
\t\t.banner-content-modern {
\t\t\tposition: relative;
\t\t\tz-index: 2;
\t\t\tpadding: 30px;
\t\t\tbackground: rgba(255, 255, 255, 0.98);
\t\t\tborder-radius: 20px;
\t\t\tbox-shadow: 0 20px 60px rgba(0, 0, 0, 0.4);
\t\t\tbackdrop-filter: blur(10px);
\t\t\tanimation: fadeInUp 0.8s ease;
\t\t}
\t\t@keyframes fadeInUp {
\t\t\tfrom {
\t\t\t\topacity: 0;
\t\t\t\ttransform: translateY(30px);
\t\t\t}
\t\t\tto {
\t\t\t\topacity: 1;
\t\t\t\ttransform: translateY(0);
\t\t\t}
\t\t}
\t\t.banner-badge {
\t\t\tdisplay: inline-block;
\t\t\tbackground: linear-gradient(135deg, #ffa200 0%, #ff6b00 100%);
\t\t\tcolor: white;
\t\t\tpadding: 8px 20px;
\t\t\tborder-radius: 50px;
\t\t\tfont-size: 0.85rem;
\t\t\tfont-weight: 600;
\t\t\tmargin-bottom: 20px;
\t\t\tbox-shadow: 0 4px 15px rgba(255, 162, 0, 0.4);
\t\t}
\t\t.banner-badge i {
\t\t\tmargin-right: 5px;
\t\t}
\t\t.banner-title-modern {
\t\t\tfont-size: 2.0rem;
\t\t\tfont-weight: 600;
\t\t\tcolor: #2c3e50;
\t\t\tmargin-bottom: 20px;
\t\t\tline-height: 1.2;
\t\t\tbackground: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
\t\t\t-webkit-background-clip: text;
\t\t\t-webkit-text-fill-color: transparent;
\t\t\tbackground-clip: text;
\t\t}
\t\t.banner-description-modern {
\t\t\tfont-size: 1.1rem;
\t\t\tcolor: #555;
\t\t\tline-height: 1.8;
\t\t\tmargin-bottom: 25px;
\t\t}
\t\t.banner-price-modern {
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tgap: 15px;
\t\t\tmargin-bottom: 30px;
\t\t\tpadding: 15px 20px;
\t\t\tbackground: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
\t\t\tborder-radius: 12px;
\t\t\tborder-left: 4px solid #ffa200;
\t\t}
\t\t.banner-price-modern .price-label {
\t\t\tfont-size: 0.9rem;
\t\t\tcolor: #666;
\t\t\tfont-weight: 600;
\t\t\ttext-transform: uppercase;
\t\t\tletter-spacing: 1px;
\t\t}
\t\t.banner-price-modern .price-value {
\t\t\tfont-size: 1.2rem;
\t\t\tfont-weight: 600;
\t\t\tcolor: #ffa200;
\t\t}
\t\t.banner-actions-modern {
\t\t\tdisplay: flex;
\t\t\tgap: 15px;
\t\t\tflex-wrap: wrap;
\t\t}
\t\t.btn-banner-primary {
\t\t\tdisplay: inline-flex;
\t\t\talign-items: center;
\t\t\tgap: 10px;
\t\t\tpadding: 15px 35px;
\t\t\tbackground: linear-gradient(135deg, #ffa200 0%, #ff6b00 100%);
\t\t\tcolor: white;
\t\t\ttext-decoration: none;
\t\t\tborder-radius: 50px;
\t\t\tfont-weight: 600;
\t\t\tfont-size: 1rem;
\t\t\ttransition: all 0.3s ease;
\t\t\tbox-shadow: 0 4px 15px rgba(255, 162, 0, 0.4);
\t\t}
\t\t.btn-banner-primary:hover {
\t\t\ttransform: translateY(-3px);
\t\t\tbox-shadow: 0 8px 25px rgba(255, 162, 0, 0.6);
\t\t\tcolor: white;
\t\t}
\t\t.btn-banner-primary .btn-icon {
\t\t\ttransition: transform 0.3s ease;
\t\t}
\t\t.btn-banner-primary:hover .btn-icon {
\t\t\ttransform: translateX(5px);
\t\t}
\t\t.btn-banner-secondary {
\t\t\tdisplay: inline-flex;
\t\t\talign-items: center;
\t\t\tgap: 8px;
\t\t\tpadding: 15px 25px;
\t\t\tbackground: white;
\t\t\tcolor: #667eea;
\t\t\ttext-decoration: none;
\t\t\tborder-radius: 50px;
\t\t\tfont-weight: 600;
\t\t\tfont-size: 0.95rem;
\t\t\tborder: 2px solid #667eea;
\t\t\ttransition: all 0.3s ease;
\t\t}
\t\t.btn-banner-secondary:hover {
\t\t\tbackground: #667eea;
\t\t\tcolor: white;
\t\t\ttransform: translateY(-3px);
\t\t\tbox-shadow: 0 4px 15px rgba(102, 126, 234, 0.4);
\t\t}
\t\t.banner-image-modern {
\t\t\tposition: relative;
\t\t\theight: 450px;
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tjustify-content: center;
\t\t}
\t\t.banner-image-wrapper {
\t\t\tposition: relative;
\t\t\twidth: 100%;
\t\t\theight: 100%;
\t\t\tborder-radius: 20px;
\t\t\toverflow: hidden;
\t\t\tbox-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
\t\t\tbackground: white;
\t\t\tpadding: 20px;
\t\t}
\t\t.banner-img {
\t\t\twidth: 100%;
\t\t\theight: 100%;
\t\t\tobject-fit: contain;
\t\t\tborder-radius: 15px;
\t\t\ttransition: transform 0.5s ease;
\t\t}
\t\t.banner-slide-item:hover .banner-img {
\t\t\ttransform: scale(1.05);
\t\t}
\t\t.banner-image-overlay {
\t\t\tposition: absolute;
\t\t\ttop: 0;
\t\t\tleft: 0;
\t\t\twidth: 100%;
\t\t\theight: 100%;
\t\t\tbackground: linear-gradient(135deg, rgba(102, 126, 234, 0.1) 0%, rgba(118, 75, 162, 0.1) 100%);
\t\t\tborder-radius: 15px;
\t\t\tpointer-events: none;
\t\t}
\t\t/* Styles pour Owl Carousel */
\t\t.banner-area-modern .owl-nav {
\t\t\tposition: absolute;
\t\t\ttop: 50%;
\t\t\ttransform: translateY(-50%);
\t\t\twidth: 100%;
\t\t\tdisplay: flex;
\t\t\tjustify-content: space-between;
\t\t\talign-items: center;
\t\t\tpadding: 0 20px;
\t\t\tpointer-events: none;
\t\t\tz-index: 10;
\t\t\tleft: 0;
\t\t\tright: 0;
\t\t\tbox-sizing: border-box;
\t\t}
\t\t.banner-area-modern .owl-nav button {
\t\t\twidth: 60px;
\t\t\theight: 60px;
\t\t\tmin-width: 60px;
\t\t\tmin-height: 60px;
\t\t\tbackground: #ffa200 !important;
\t\t\tborder-radius: 50% !important;
\t\t\tdisplay: flex !important;
\t\t\talign-items: center;
\t\t\tjustify-content: center;
\t\t\tcolor: white !important;
\t\t\tfont-size: 24px !important;
\t\t\tbox-shadow: 0 4px 15px rgba(255, 162, 0, 0.4);
\t\t\ttransition: all 0.3s ease;
\t\t\tpointer-events: all;
\t\t\tborder: none !important;
\t\t\tposition: relative;
\t\t\tflex-shrink: 0;
\t\t\tmargin: 0;
\t\t\tpadding: 0;
\t\t\tline-height: 1;
\t\t}
\t\t.banner-area-modern .owl-nav button.owl-prev {
\t\t\tmargin-right: auto;
\t\t}
\t\t.banner-area-modern .owl-nav button.owl-next {
\t\t\tmargin-left: auto;
\t\t}
\t\t.banner-area-modern .owl-nav button:hover {
\t\t\tbackground: #ff6b00 !important;
\t\t\tcolor: white !important;
\t\t\ttransform: scale(1.1);
\t\t\tbox-shadow: 0 6px 20px rgba(255, 162, 0, 0.6);
\t\t}
\t\t.banner-area-modern .owl-nav button.disabled {
\t\t\topacity: 0.5;
\t\t\tcursor: not-allowed;
\t\t}
\t\t.banner-area-modern .owl-nav button.disabled:hover {
\t\t\ttransform: scale(1);
\t\t}
\t\t.banner-area-modern .owl-dots {
\t\t\tposition: absolute;
\t\t\tbottom: 30px;
\t\t\tleft: 50%;
\t\t\ttransform: translateX(-50%);
\t\t\tdisplay: flex;
\t\t\tgap: 10px;
\t\t\tz-index: 10;
\t\t}
\t\t.banner-area-modern .owl-dots button {
\t\t\twidth: 12px;
\t\t\theight: 12px;
\t\t\tborder-radius: 50%;
\t\t\tbackground: rgba(255, 255, 255, 0.6) !important;
\t\t\tborder: 2px solid white !important;
\t\t\ttransition: all 0.3s ease;
\t\t\tmargin: 0 5px;
\t\t}
\t\t.banner-area-modern .owl-dots button.active {
\t\t\tbackground: #ffa200 !important;
\t\t\tborder-color: #ffa200 !important;
\t\t\twidth: 30px;
\t\t\tborder-radius: 6px;
\t\t}
\t\t/* Responsive */
\t\t@media(max-width: 992px) {
\t\t\t.banner-area-modern {
\t\t\t\tmin-height: 450px;
\t\t\t\tpadding: 40px 0;
\t\t\t\tbackground-size: cover;
\t\t\t\tbackground-position: center;
\t\t\t}
\t\t\t.banner-slide-item {
\t\t\t\tmin-height: 450px;
\t\t\t\tpadding: 30px 0;
\t\t\t}
\t\t\t.banner-title-modern {
\t\t\t\tfont-size: 1.5rem;
\t\t\t}
\t\t\t.banner-description-modern {
\t\t\t\tfont-size: 1rem;
\t\t\t}
\t\t\t.banner-image-modern {
\t\t\t\theight: 350px;
\t\t\t\tmargin-top: 30px;
\t\t\t}
\t\t\t.banner-content-modern {
\t\t\t\tpadding: 25px;
\t\t\t}
\t\t}
\t\t@media(max-width: 768px) {
\t\t\t.banner-area-modern {
\t\t\t\tmin-height: 400px;
\t\t\t\tpadding: 30px 0;
\t\t\t\tbackground-size: cover;
\t\t\t\tbackground-position: center;
\t\t\t}
\t\t\t.banner-slide-item {
\t\t\t\tmin-height: 400px;
\t\t\t\tpadding: 20px 0;
\t\t\t}
\t\t\t.banner-title-modern {
\t\t\t\tfont-size: 1.25rem;
\t\t\t}
\t\t\t.banner-description-modern {
\t\t\t\tfont-size: 0.95rem;
\t\t\t}
\t\t\t.banner-image-modern {
\t\t\t\theight: 280px;
\t\t\t\tmargin-top: 20px;
\t\t\t}
\t\t\t.banner-content-modern {
\t\t\t\tpadding: 20px;
\t\t\t}
\t\t\t.banner-price-modern .price-value {
\t\t\t\tfont-size: 1.25rem;
\t\t\t}
\t\t\t.banner-actions-modern {
\t\t\t\tflex-direction: column;
\t\t\t}
\t\t\t.btn-banner-primary,
\t\t\t.btn-banner-secondary {
\t\t\t\twidth: 100%;
\t\t\t\tjustify-content: center;
\t\t\t}
\t\t\t.banner-area-modern .owl-nav button {
\t\t\t\twidth: 50px;
\t\t\t\theight: 50px;
\t\t\t\tmin-width: 50px;
\t\t\t\tmin-height: 50px;
\t\t\t\tfont-size: 20px !important;
\t\t\t\tbackground: #ffa200 !important;
\t\t\t}
\t\t\t.banner-area-modern .owl-nav button:hover {
\t\t\t\tbackground: #ff6b00 !important;
\t\t\t}
\t\t}
\t\t@media(max-width: 576px) {
\t\t\t.banner-area-modern {
\t\t\t\tmin-height: 350px;
\t\t\t\tpadding: 0;
\t\t\t\tbackground-size: cover;
\t\t\t\tbackground-position: center;
\t\t\t}
\t\t\t.banner-slide-item {
\t\t\t\tmin-height: 350px;
\t\t\t}
\t\t\t.banner-title-modern {
\t\t\t\tfont-size: 1.25rem;
\t\t\t}
\t\t\t.banner-image-modern {
\t\t\t\theight: 220px;
\t\t\t}
\t\t\t.banner-content-modern {
\t\t\t\tpadding: 15px;
\t\t\t}
\t\t}
\t\t/* Styles pour les catégories de boutiques cliquables */
\t\t.shop-category-clickable {
\t\t\tcursor: pointer;
\t\t\ttransition: all 0.3s ease;
\t\t\theight: 100%;
\t\t}
\t\t.shop-category-clickable:hover {
\t\t\ttransform: translateY(-10px);
\t\t\tbox-shadow: 0 8px 25px rgba(0, 0, 0, 0.15);
\t\t}
\t\t.shop-category-clickable:hover .category-image {
\t\t\ttransform: scale(1.1);
\t\t}
\t\t.shop-category-clickable:hover .btn-primary-custom {
\t\t\tbackground: #e8910a;
\t\t\ttransform: translateX(5px);
\t\t}
\t\t/* Styles pour les cartes de catégories personnalisées */
\t\t.category-card-custom {
\t\t\tborder-radius: 15px;
\t\t\toverflow: hidden;
\t\t\tbox-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);
\t\t\ttransition: transform 0.3s ease, box-shadow 0.3s ease;
\t\t\tbackground: white;
\t\t\theight: 100%;
\t\t}
\t\t.category-card-custom:hover {
\t\t\ttransform: translateY(-10px);
\t\t\tbox-shadow: 0 8px 25px rgba(0, 0, 0, 0.15);
\t\t}
\t\t.category-image-wrapper {
\t\t\tposition: relative;
\t\t\theight: 200px;
\t\t\toverflow: hidden;
\t\t}
\t\t.category-image {
\t\t\twidth: 100%;
\t\t\theight: 100%;
\t\t\tbackground-size: cover;
\t\t\tbackground-position: center;
\t\t\ttransition: transform 0.3s ease;
\t\t}
\t\t.category-card-custom:hover .category-image {
\t\t\ttransform: scale(1.1);
\t\t}
\t\t.category-overlay-custom {
\t\t\tposition: absolute;
\t\t\ttop: 0;
\t\t\tleft: 0;
\t\t\twidth: 100%;
\t\t\theight: 100%;
\t\t\tbackground: rgba(0, 0, 0, 0.6);
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tjustify-content: center;
\t\t\topacity: 0;
\t\t\ttransition: opacity 0.3s ease;
\t\t\tcolor: white;
\t\t}
\t\t.category-card-custom:hover .category-overlay-custom {
\t\t\topacity: 1;
\t\t}
\t\t.category-icon-wrapper {
\t\t\ttext-align: center;
\t\t}
\t\t.category-icon-wrapper i {
\t\t\tcolor: #ffa200;
\t\t\tdisplay: block;
\t\t}
\t\t.category-icon-wrapper h4 {
\t\t\tcolor: white;
\t\t\tmargin-top: 10px;
\t\t}
\t\t/* Styles pour la galerie de produits en vedette */
\t\t.featured-products-carousel-section {
\t\t\tposition: relative;
\t\t\toverflow: hidden;
\t\t}
\t\t.featured-gallery-wrapper {
\t\t\tposition: relative;
\t\t\tmax-width: 1400px;
\t\t\tmargin: 0 auto;
\t\t\tpadding: 0 15px;
\t\t}
\t\t.featured-gallery-container {
\t\t\tposition: relative;
\t\t\toverflow: visible;
\t\t\tborder-radius: 12px;
\t\t}
\t\t.featured-gallery-grid {
\t\t\tdisplay: flex;
\t\t\tgap: 30px;
\t\t\tpadding: 15px 0;
\t\t\toverflow-x: auto;
\t\t\toverflow-y: hidden;
\t\t\tscroll-behavior: smooth;
\t\t\tscroll-behavior: smooth;
\t\t\tscrollbar-width: none; /* Firefox */
\t\t\t-ms-overflow-style: none; /* IE/Edge */
\t\t\t-webkit-overflow-scrolling: touch; /* iOS smooth scroll */
\t\t\twill-change: scroll-position;
\t\t}
\t\t.featured-gallery-grid::-webkit-scrollbar {
\t\t\tdisplay: none; /* Chrome/Safari */
\t\t}
\t\t/* Mode OwlCarousel */
\t\t.featured-gallery-grid.owl-carousel {
\t\t\tdisplay: block;
\t\t\toverflow: hidden;
\t\t\tpadding: 25px 0;
\t\t}
\t\t.featured-gallery-grid.owl-carousel .owl-stage-outer {
\t\t\toverflow: visible;
\t\t}
\t\t.featured-gallery-grid.owl-carousel .featured-gallery-item {
\t\t\topacity: 1;
\t\t\ttransform: none;
\t\t\twidth: auto;
\t\t\tmax-width: none;
\t\t\tmargin: 0 15px;
\t\t}
\t\t.featured-gallery-grid.owl-carousel .owl-stage {
\t\t\tdisplay: flex;
\t\t}
\t\t.featured-gallery-item {
\t\t\tflex: 0 0 auto; /* Largeur automatique basée sur le contenu */
\t\t\twidth: 100%;
\t\t\tmax-width: 100%;
\t\t\topacity: 0;
\t\t\ttransform: translateY(20px) scale(0.95);
\t\t\tanimation: galleryItemFadeIn 0.5s cubic-bezier(0.4, 0, 0.2, 1) forwards;
\t\t\tanimation-delay: calc(var(--item-index, 0) * 0.05s);
\t\t}
\t\t/* Produits plus larges et esthétiques - 3 par ligne sur grands écrans */
\t\t@media(min-width: 1200px) {
\t\t\t.featured-gallery-item {
\t\t\t\tflex: 0 0 calc(33.333333% - 20px);
\t\t\t\tmax-width: calc(33.333333% - 20px);
\t\t\t}
\t\t}
\t\t@media(min-width: 992px) and (max-width: 1199px) {
\t\t\t.featured-gallery-item {
\t\t\t\tflex: 0 0 calc(33.333333% - 20px);
\t\t\t\tmax-width: calc(33.333333% - 20px);
\t\t\t}
\t\t}
\t\t@media(min-width: 768px) and (max-width: 991px) {
\t\t\t.featured-gallery-item {
\t\t\t\tflex: 0 0 calc(50% - 15px);
\t\t\t\tmax-width: calc(50% - 15px);
\t\t\t}
\t\t}
\t\t@media(max-width: 767px) {
\t\t\t.featured-gallery-item {
\t\t\t\tflex: 0 0 100%;
\t\t\t\tmax-width: 100%;
\t\t\t}
\t\t}
\t\t/* Design amélioré pour single-product - plus large et esthétique */
\t\t.featured-gallery-item .single-product {
\t\t\tmargin-bottom: 0;
\t\t\tmin-height: 520px;
\t\t\tdisplay: flex;
\t\t\tflex-direction: column;
\t\t\tpadding: 25px;
\t\t\tbackground: #fff;
\t\t\tborder-radius: 16px;
\t\t\tbox-shadow: 0 8px 25px rgba(15, 34, 58, 0.1);
\t\t\ttransition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
\t\t\tborder: 1px solid rgba(0, 0, 0, 0.05);
\t\t\tposition: relative;
\t\t\toverflow: hidden;
\t\t}
\t\t.featured-gallery-item .single-product::before {
\t\t\tcontent: '';
\t\t\tposition: absolute;
\t\t\ttop: 0;
\t\t\tleft: 0;
\t\t\tright: 0;
\t\t\theight: 4px;
\t\t\tbackground: linear-gradient(90deg, #ffa200 0%, #ff6b00 100%);
\t\t\ttransform: scaleX(0);
\t\t\ttransform-origin: left;
\t\t\ttransition: transform 0.4s ease;
\t\t}
\t\t.featured-gallery-item .single-product:hover {
\t\t\ttransform: translateY(-8px);
\t\t\tbox-shadow: 0 20px 50px rgba(15, 34, 58, 0.15);
\t\t\tborder-color: rgba(255, 162, 0, 0.3);
\t\t}
\t\t.featured-gallery-item .single-product:hover::before {
\t\t\ttransform: scaleX(1);
\t\t}
\t\t/* S'assurer que les images s'affichent correctement - styles identiques à listing.html.twig */
\t\t.featured-gallery-item .single-product img {
\t\t\tmargin-bottom: 20px;
\t\t\twidth: 100%;
\t\t}
\t\t/* Styles améliorés pour product-image-container - plus large et esthétique */
\t\t.featured-gallery-item .product-image-container {
\t\t\tposition: relative;
\t\t\toverflow: hidden;
\t\t\tborder-radius: 14px;
\t\t\theight: 320px;
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tjustify-content: center;
\t\t\tbackground: linear-gradient(135deg, #f7f7fb 0%, #e8ecf1 100%);
\t\t\tmargin-bottom: 22px;
\t\t\tbox-shadow: 0 4px 15px rgba(0, 0, 0, 0.05);
\t\t}
\t\t.featured-gallery-item .product-image-container:hover {
\t\t\tbox-shadow: 0 8px 25px rgba(0, 0, 0, 0.1);
\t\t}
\t\t.featured-gallery-item .product-image-container:hover .main-product-img {
\t\t\ttransform: scale(1.08);
\t\t\ttransition: transform 0.4s cubic-bezier(0.4, 0, 0.2, 1);
\t\t}
\t\t.featured-gallery-item .product-image-container a {
\t\t\tdisplay: block;
\t\t\twidth: 100%;
\t\t\theight: 100%;
\t\t}
\t\t.featured-gallery-item .main-product-img {
\t\t\ttransition: transform 0.3s ease;
\t\t\twidth: 100% !important;
\t\t\theight: 100% !important;
\t\t\tobject-fit: cover;
\t\t\tobject-position: center;
\t\t\tdisplay: block;
\t\t\twill-change: transform, opacity;
\t\t}
\t\t.featured-gallery-item .main-product-img.image-fade {
\t\t\tanimation: imageFade 0.5s ease;
\t\t}
\t\t@keyframes imageFade {
\t\t\tfrom {
\t\t\t\topacity: 0;
\t\t\t\ttransform: scale(1.02);
\t\t\t}
\t\t\tto {
\t\t\t\topacity: 1;
\t\t\t\ttransform: scale(1);
\t\t\t}
\t\t}
\t\t.featured-gallery-item .product-details {
\t\t\tdisplay: flex;
\t\t\tflex-direction: column;
\t\t\theight: 100%;
\t\t\tpadding: 0 5px;
\t\t}
\t\t.featured-gallery-item .product-details h6 {
\t\t\tfont-size: 1.1rem;
\t\t\tfont-weight: 600;
\t\t\tmargin-bottom: 12px;
\t\t\tline-height: 1.4;
\t\t\tcolor: #2c3e50;
\t\t\tmin-height: 48px;
\t\t}
\t\t.featured-gallery-item .product-details h6 a {
\t\t\tcolor: #2c3e50;
\t\t\ttext-decoration: none;
\t\t\ttransition: color 0.3s ease;
\t\t}
\t\t.featured-gallery-item .product-details h6 a:hover {
\t\t\tcolor: #ffa200;
\t\t}
\t\t.featured-gallery-item .prd-bottom {
\t\t\tmargin-top: auto;
\t\t}
\t\t/* Styles pour img-nav-btn - identiques à listing.html.twig */
\t\t.featured-gallery-item .img-nav-btn {
\t\t\tposition: absolute;
\t\t\ttop: 50%;
\t\t\ttransform: translateY(-50%);
\t\t\tbackground: rgba(0, 0, 0, 0.6);
\t\t\tcolor: white;
\t\t\tborder: none;
\t\t\twidth: 35px;
\t\t\theight: 35px;
\t\t\tborder-radius: 50%;
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tjustify-content: center;
\t\t\tcursor: pointer;
\t\t\ttransition: all 0.3s ease;
\t\t\tz-index: 10;
\t\t}
\t\t.featured-gallery-item .img-nav-btn:hover {
\t\t\tbackground: #095ad3;
\t\t\ttransform: translateY(-50%) scale(1.1);
\t\t}
\t\t.featured-gallery-item .img-nav-left {
\t\t\tleft: 10px;
\t\t}
\t\t.featured-gallery-item .img-nav-right {
\t\t\tright: 10px;
\t\t}
\t\t.featured-gallery-item .img-indicators {
\t\t\tposition: absolute;
\t\t\tbottom: 10px;
\t\t\tleft: 50%;
\t\t\ttransform: translateX(-50%);
\t\t\tdisplay: flex;
\t\t\tgap: 5px;
\t\t\tz-index: 10;
\t\t}
\t\t.featured-gallery-item .indicator {
\t\t\twidth: 8px;
\t\t\theight: 8px;
\t\t\tborder-radius: 50%;
\t\t\tbackground: rgba(255, 255, 255, 0.5);
\t\t\tcursor: pointer;
\t\t\tmargin-bottom: 10px;
\t\t\ttransition: all 0.3s ease;
\t\t\tborder: 1px solid rgba(255, 255, 255, 0.3);
\t\t}
\t\t.featured-gallery-item .indicator.active {
\t\t\tbackground: #ffa200;
\t\t\tborder-color: #ffa200;
\t\t\ttransform: scale(1.2);
\t\t}
\t\t.featured-gallery-item .indicator:hover {
\t\t\tbackground: rgba(255, 255, 255, 0.8);
\t\t}
\t\t/* Styles pour shop-info - identiques à listing.html.twig */
\t\t.featured-gallery-item .shop-info {
\t\t\tmargin: 10px 0 15px 0;
\t\t\tpadding: 8px 0;
\t\t\tborder-bottom: 1px solid #f0f0f0;
\t\t}
\t\t.featured-gallery-item .shop-info small {
\t\t\tfont-size: 0.9rem;
\t\t}
\t\t.featured-gallery-item .shop-link {
\t\t\tcolor: #007bff;
\t\t\ttext-decoration: none;
\t\t\tfont-weight: 500;
\t\t}
\t\t.featured-gallery-item .shop-link:hover {
\t\t\tcolor: #ffa200;
\t\t\ttext-decoration: underline;
\t\t}
\t\t/* Styles améliorés pour le prix */
\t\t.featured-gallery-item .price {
\t\t\tmargin-bottom: 18px;
\t\t}
\t\t.featured-gallery-item .price h6 {
\t\t\tfont-size: 1.4rem;
\t\t\tfont-weight: 700;
\t\t\tcolor: #ffa200;
\t\t\tmargin-bottom: 5px;
\t\t}
\t\t.featured-gallery-item .price h6.l-through {
\t\t\tfont-size: 1rem;
\t\t\tcolor: #95a5a6;
\t\t\ttext-decoration: line-through;
\t\t\tfont-weight: 500;
\t\t}
\t\t/* Les autres styles (prd-bottom, social-info) sont déjà définis dans main.css */
\t\t@keyframes galleryItemFadeIn {
\t\t\tfrom {
\t\t\t\topacity: 0;
\t\t\t\ttransform: translateY(20px) scale(0.95);
\t\t\t}
\t\t\tto {
\t\t\t\topacity: 1;
\t\t\t\ttransform: translateY(0) scale(1);
\t\t\t}
\t\t}
\t\t.featured-gallery-card {
\t\t\tdisplay: flex;
\t\t\tflex-direction: column;
\t\t\theight: 100%;
\t\t\tbackground: white;
\t\t\tborder-radius: 12px;
\t\t\toverflow: hidden;
\t\t\tbox-shadow: 0 2px 12px rgba(0, 0, 0, 0.08);
\t\t\ttransition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
\t\t\tborder: 1px solid #f0f0f0;
\t\t}
\t\t.featured-gallery-card:hover {
\t\t\ttransform: translateY(-5px);
\t\t\tbox-shadow: 0 6px 20px rgba(0, 0, 0, 0.12);
\t\t\tborder-color: #ffa200;
\t\t}
\t\t.featured-gallery-image-wrapper {
\t\t\tposition: relative;
\t\t\twidth: 100%;
\t\t\tpadding-top: 100%; /* Ratio 1:1 pour une galerie carrée */
\t\t\toverflow: hidden;
\t\t\tbackground: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
\t\t}
\t\t.featured-gallery-image {
\t\t\tposition: absolute;
\t\t\ttop: 0;
\t\t\tleft: 0;
\t\t\twidth: 100%;
\t\t\theight: 100%;
\t\t\tbackground-size: cover;
\t\t\tbackground-position: center;
\t\t\ttransition: transform 0.5s cubic-bezier(0.4, 0, 0.2, 1);
\t\t}
\t\t.featured-gallery-card:hover .featured-gallery-image {
\t\t\ttransform: scale(1.08);
\t\t}
\t\t.featured-gallery-badge {
\t\t\tposition: absolute;
\t\t\ttop: 8px;
\t\t\tleft: 8px;
\t\t\tbackground: linear-gradient(135deg, #ffa200 0%, #ff6b00 100%);
\t\t\tcolor: white;
\t\t\tpadding: 4px 10px;
\t\t\tborder-radius: 15px;
\t\t\tfont-size: 12px;
\t\t\tfont-weight: 600;
\t\t\tz-index: 2;
\t\t\tbox-shadow: 0 2px 8px rgba(255, 162, 0, 0.4);
\t\t}
\t\t.featured-gallery-overlay {
\t\t\tposition: absolute;
\t\t\ttop: 0;
\t\t\tleft: 0;
\t\t\twidth: 100%;
\t\t\theight: 100%;
\t\t\tbackground: rgba(0, 0, 0, 0.5);
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tjustify-content: center;
\t\t\topacity: 0;
\t\t\ttransition: opacity 0.3s ease;
\t\t}
\t\t.featured-gallery-card:hover .featured-gallery-overlay {
\t\t\topacity: 1;
\t\t}
\t\t.featured-gallery-view-btn {
\t\t\tbackground: white;
\t\t\tcolor: #333;
\t\t\twidth: 40px;
\t\t\theight: 40px;
\t\t\tborder-radius: 50%;
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tjustify-content: center;
\t\t\ttext-decoration: none;
\t\t\tfont-size: 18px;
\t\t\ttransform: scale(0.8);
\t\t\ttransition: transform 0.3s ease;
\t\t}
\t\t.featured-gallery-card:hover .featured-gallery-view-btn {
\t\t\ttransform: scale(1);
\t\t}
\t\t.featured-gallery-info {
\t\t\tpadding: 12px;
\t\t\tflex: 1;
\t\t\tdisplay: flex;
\t\t\tflex-direction: column;
\t\t}
\t\t.featured-gallery-title {
\t\t\tfont-size: 14px;
\t\t\tfont-weight: 600;
\t\t\tmargin-bottom: 6px;
\t\t\tcolor: #333;
\t\t\tline-height: 1.3;
\t\t\tdisplay: -webkit-box;
\t\t\t-webkit-line-clamp: 2;
\t\t\t-webkit-box-orient: vertical;
\t\t\toverflow: hidden;
\t\t\tmin-height: 36px;
\t\t}
\t\t.featured-gallery-title a {
\t\t\tcolor: #333;
\t\t\ttext-decoration: none;
\t\t\ttransition: color 0.3s ease;
\t\t}
\t\t.featured-gallery-title a:hover {
\t\t\tcolor: #ffa200;
\t\t}
\t\t.featured-gallery-price {
\t\t\tfont-size: 16px;
\t\t\tfont-weight: 700;
\t\t\tcolor: #ffa200;
\t\t\tmargin-bottom: 6px;
\t\t}
\t\t.featured-gallery-rating {
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tgap: 3px;
\t\t\tfont-size: 11px;
\t\t}
\t\t.featured-gallery-rating .fa-star.active {
\t\t\tcolor: #ffa200;
\t\t}
\t\t.featured-gallery-rating .fa-star-o {
\t\t\tcolor: #ddd;
\t\t}
\t\t.featured-gallery-controls {
\t\t\tdisplay: flex;
\t\t\tjustify-content: center;
\t\t\tgap: 20px;
\t\t\tmargin-top: 25px;
\t\t\tpadding: 0 20px;
\t\t}
\t\t.featured-gallery-nav-btn {
\t\t\twidth: 42px;
\t\t\theight: 42px;
\t\t\tborder-radius: 50%;
\t\t\tborder: 1.5px solid #ffa200;
\t\t\tbackground: white;
\t\t\tcolor: #ffa200;
\t\t\tfont-size: 16px;
\t\t\tcursor: pointer;
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tjustify-content: center;
\t\t\ttransition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
\t\t\tbox-shadow: 0 3px 10px rgba(255, 162, 0, 0.18);
\t\t\tposition: relative;
\t\t\toverflow: hidden;
\t\t}
\t\t.featured-gallery-nav-btn.btn-ripple::after {
\t\t\tcontent: '';
\t\t\tposition: absolute;
\t\t\twidth: 100%;
\t\t\theight: 100%;
\t\t\tleft: 0;
\t\t\ttop: 0;
\t\t\tborder-radius: 50%;
\t\t\tbackground: rgba(255, 162, 0, 0.2);
\t\t\tanimation: rippleEffect 0.35s ease;
\t\t}
\t\t@keyframes rippleEffect {
\t\t\tfrom {
\t\t\t\ttransform: scale(0.6);
\t\t\t\topacity: 0.7;
\t\t\t}
\t\t\tto {
\t\t\t\ttransform: scale(1.4);
\t\t\t\topacity: 0;
\t\t\t}
\t\t}
\t\t.featured-gallery-nav-btn:hover:not(:disabled) {
\t\t\tbackground: #ffa200;
\t\t\tcolor: white;
\t\t\ttransform: scale(1.1);
\t\t\tbox-shadow: 0 5px 18px rgba(255, 162, 0, 0.4);
\t\t}
\t\t.featured-gallery-nav-btn:active:not(:disabled) {
\t\t\ttransform: scale(0.95);
\t\t}
\t\t.featured-gallery-nav-btn:disabled {
\t\t\topacity: 0.3;
\t\t\tcursor: not-allowed;
\t\t}
\t\t.featured-gallery-load-more {
\t\t\tmargin-top: 30px;
\t\t}
\t\t/* Style pour le bouton \"Voir tous les produits\" */
\t\t.btn-view-all-products {
\t\t\tdisplay: inline-flex;
\t\t\talign-items: center;
\t\t\tgap: 12px;
\t\t\tpadding: 16px 40px;
\t\t\tbackground: linear-gradient(135deg, #ffa200 0%, #ff6b00 100%);
\t\t\tcolor: white;
\t\t\ttext-decoration: none;
\t\t\tborder-radius: 50px;
\t\t\tfont-weight: 600;
\t\t\tfont-size: 16px;
\t\t\ttransition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
\t\t\tbox-shadow: 0 4px 15px rgba(255, 162, 0, 0.3);
\t\t\tposition: relative;
\t\t\toverflow: hidden;
\t\t}
\t\t.btn-view-all-products::before {
\t\t\tcontent: '';
\t\t\tposition: absolute;
\t\t\ttop: 0;
\t\t\tleft: -100%;
\t\t\twidth: 100%;
\t\t\theight: 100%;
\t\t\tbackground: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.3), transparent);
\t\t\ttransition: left 0.5s ease;
\t\t}
\t\t.btn-view-all-products:hover::before {
\t\t\tleft: 100%;
\t\t}
\t\t.btn-view-all-products:hover {
\t\t\ttransform: translateY(-3px);
\t\t\tbox-shadow: 0 8px 25px rgba(255, 162, 0, 0.5);
\t\t\tcolor: white;
\t\t}
\t\t.btn-view-all-products:active {
\t\t\ttransform: translateY(-1px);
\t\t}
\t\t.btn-view-all-products i {
\t\t\tfont-size: 18px;
\t\t\ttransition: transform 0.3s ease;
\t\t}
\t\t.btn-view-all-products:hover i {
\t\t\ttransform: translateX(5px);
\t\t}
\t\t.btn-view-all-products span {
\t\t\tposition: relative;
\t\t\tz-index: 1;
\t\t}
\t\t/* Responsive */
\t\t@media(max-width: 767px) {
\t\t\t.btn-view-all-products {
\t\t\t\tpadding: 14px 30px;
\t\t\t\tfont-size: 14px;
\t\t\t}
\t\t}
\t\t/* Responsive */
\t\t@media(max-width: 767px) {
\t\t\t.featured-gallery-grid {
\t\t\t\tgap: 10px;
\t\t\t}
\t\t\t.featured-gallery-info {
\t\t\t\tpadding: 10px;
\t\t\t}
\t\t\t.featured-gallery-title {
\t\t\t\tfont-size: 13px;
\t\t\t\tmin-height: 32px;
\t\t\t}
\t\t\t.featured-gallery-price {
\t\t\t\tfont-size: 14px;
\t\t\t}
\t\t}
\t\t/* Styles pour les grilles de produits Nouveautés */
\t\t.latest-products-grid {
\t\t\tmargin-top: 30px;
\t\t}
\t\t.product-card-modern {
\t\t\tbackground: white;
\t\t\tborder-radius: 12px;
\t\t\toverflow: hidden;
\t\t\tbox-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
\t\t\ttransition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
\t\t\theight: 100%;
\t\t\tdisplay: flex;
\t\t\tflex-direction: column;
\t\t\tborder: 1px solid #f0f0f0;
\t\t}
\t\t.product-card-modern:hover {
\t\t\ttransform: translateY(-8px);
\t\t\tbox-shadow: 0 8px 24px rgba(0, 0, 0, 0.15);
\t\t\tborder-color: #ffa200;
\t\t}
\t\t.product-image-wrapper {
\t\t\tposition: relative;
\t\t\twidth: 100%;
\t\t\tpadding-top: 75%; /* Ratio 4:3 */
\t\t\toverflow: hidden;
\t\t\tbackground: #f8f9fa;
\t\t}
\t\t.product-image {
\t\t\tposition: absolute;
\t\t\ttop: 0;
\t\t\tleft: 0;
\t\t\twidth: 100%;
\t\t\theight: 100%;
\t\t\tbackground-size: cover;
\t\t\tbackground-position: center;
\t\t\ttransition: transform 0.5s ease;
\t\t}
\t\t.product-card-modern:hover .product-image {
\t\t\ttransform: scale(1.1);
\t\t}
\t\t.product-badge-modern {
\t\t\tposition: absolute;
\t\t\ttop: 10px;
\t\t\tright: 10px;
\t\t\tbackground: linear-gradient(135deg, #ffa200 0%, #ff6b00 100%);
\t\t\tcolor: white;
\t\t\tpadding: 6px 12px;
\t\t\tborder-radius: 20px;
\t\t\tfont-size: 12px;
\t\t\tfont-weight: 600;
\t\t\tz-index: 2;
\t\t\tbox-shadow: 0 2px 8px rgba(255, 162, 0, 0.3);
\t\t}
\t\t.product-badge-modern.new-badge {
\t\t\tbackground: linear-gradient(135deg, #28a745 0%, #20c997 100%);
\t\t}
\t\t.product-overlay {
\t\t\tposition: absolute;
\t\t\ttop: 0;
\t\t\tleft: 0;
\t\t\twidth: 100%;
\t\t\theight: 100%;
\t\t\tbackground: rgba(0, 0, 0, 0.5);
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tjustify-content: center;
\t\t\topacity: 0;
\t\t\ttransition: opacity 0.3s ease;
\t\t\tz-index: 1;
\t\t}
\t\t.product-card-modern:hover .product-overlay {
\t\t\topacity: 1;
\t\t}
\t\t.btn-view-product {
\t\t\tbackground: white;
\t\t\tcolor: #333;
\t\t\tpadding: 12px 24px;
\t\t\tborder-radius: 25px;
\t\t\ttext-decoration: none;
\t\t\tfont-weight: 600;
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tgap: 8px;
\t\t\ttransition: all 0.3s ease;
\t\t\tbox-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
\t\t}
\t\t.btn-view-product:hover {
\t\t\tbackground: #ffa200;
\t\t\tcolor: white;
\t\t\ttransform: scale(1.05);
\t\t}
\t\t.product-info-modern {
\t\t\tpadding: 16px;
\t\t\tflex-grow: 1;
\t\t\tdisplay: flex;
\t\t\tflex-direction: column;
\t\t}
\t\t.product-title-modern {
\t\t\tmargin: 0 0 8px;
\t\t\tfont-size: 16px;
\t\t\tfont-weight: 600;
\t\t\tline-height: 1.4;
\t\t}
\t\t.product-title-modern a {
\t\t\tcolor: #333;
\t\t\ttext-decoration: none;
\t\t\ttransition: color 0.3s ease;
\t\t}
\t\t.product-title-modern a:hover {
\t\t\tcolor: #ffa200;
\t\t}
\t\t.product-price-modern {
\t\t\tfont-size: 20px;
\t\t\tfont-weight: 700;
\t\t\tcolor: #ffa200;
\t\t\tmargin-bottom: 8px;
\t\t}
\t\t.product-shop-modern {
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tgap: 6px;
\t\t\tfont-size: 13px;
\t\t\tcolor: #666;
\t\t\tmargin-bottom: 8px;
\t\t}
\t\t.product-shop-modern i {
\t\t\tcolor: #ffa200;
\t\t}
\t\t.shop-link {
\t\t\tcolor: #666;
\t\t\ttext-decoration: none;
\t\t\ttransition: color 0.3s ease;
\t\t}
\t\t.shop-link:hover {
\t\t\tcolor: #ffa200;
\t\t}
\t\t.product-rating-modern {
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tgap: 4px;
\t\t\tmargin-top: auto;
\t\t}
\t\t.product-rating-modern .fa-star.active {
\t\t\tcolor: #ffc107;
\t\t}
\t\t.product-rating-modern .fa-star-o {
\t\t\tcolor: #ddd;
\t\t}
\t\t.rating-count {
\t\t\tfont-size: 12px;
\t\t\tcolor: #666;
\t\t\tmargin-left: 4px;
\t\t}
\t\t.product-views-modern {
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tgap: 6px;
\t\t\tfont-size: 12px;
\t\t\tcolor: #666;
\t\t\tmargin-top: auto;
\t\t}
\t\t.product-views-modern i {
\t\t\tcolor: #999;
\t\t}
\t\t/* Style des cartes produits */
\t\t.product-card {
\t\t\tbackground: white;
\t\t\tborder-radius: 15px;
\t\t\toverflow: hidden;
\t\t\tbox-shadow: 0 5px 20px rgba(0, 0, 0, 0.1);
\t\t\ttransition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
\t\t\theight: 100%;
\t\t\tdisplay: flex;
\t\t\tflex-direction: column;
\t\t}
\t\t.product-card:hover {
\t\t\tbox-shadow: 0 15px 40px rgba(0, 0, 0, 0.2);
\t\t\ttransform: translateY(-5px);
\t\t}
\t\t.product-image {
\t\t\twidth: 100%;
\t\t\theight: 250px;
\t\t\tbackground-size: cover;
\t\t\tbackground-position: center;
\t\t\tposition: relative;
\t\t\toverflow: hidden;
\t\t}
\t\t.product-image::before {
\t\t\tcontent: '';
\t\t\tposition: absolute;
\t\t\ttop: 0;
\t\t\tleft: -100%;
\t\t\twidth: 100%;
\t\t\theight: 100%;
\t\t\tbackground: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.3), transparent);
\t\t\ttransition: left 0.6s ease;
\t\t}
\t\t.product-card:hover .product-image::before {
\t\t\tleft: 100%;
\t\t}
\t\t.product-badge {
\t\t\tposition: absolute;
\t\t\ttop: 15px;
\t\t\tright: 15px;
\t\t\tbackground: linear-gradient(135deg, #ffa200 0%, #ff6b00 100%);
\t\t\tcolor: white;
\t\t\tpadding: 8px 15px;
\t\t\tborder-radius: 20px;
\t\t\tfont-size: 0.85rem;
\t\t\tfont-weight: 600;
\t\t\tbox-shadow: 0 4px 10px rgba(255, 162, 0, 0.4);
\t\t\tz-index: 1;
\t\t}
\t\t.product-info {
\t\t\tpadding: 20px;
\t\t\tflex-grow: 1;
\t\t\tdisplay: flex;
\t\t\tflex-direction: column;
\t\t}
\t\t.product-title {
\t\t\tfont-size: 1.1rem;
\t\t\tfont-weight: 600;
\t\t\tcolor: #2c3e50;
\t\t\tmargin-bottom: 10px;
\t\t\tline-height: 1.4;
\t\t\tdisplay: -webkit-box;
\t\t\t-webkit-line-clamp: 2;
\t\t\t-webkit-box-orient: vertical;
\t\t\toverflow: hidden;
\t\t}
\t\t.product-price {
\t\t\tfont-size: 1.5rem;
\t\t\tfont-weight: 800;
\t\t\tcolor: #ffa200;
\t\t\tmargin-bottom: 15px;
\t\t}
\t\t.product-shop {
\t\t\tfont-size: 0.9rem;
\t\t\tcolor: #666;
\t\t\tmargin-bottom: 15px;
\t\t}
\t\t.product-shop a {
\t\t\tcolor: #667eea;
\t\t\ttext-decoration: none;
\t\t\ttransition: color 0.3s ease;
\t\t}
\t\t.product-shop a:hover {
\t\t\tcolor: #ffa200;
\t\t}
\t\t/* Newsletter Modern Styles */
\t\t.newsletter-section-modern {
\t\t\tbackground: linear-gradient(135deg, #ffa200 0%, #095ad3 100%);
\t\t\tposition: relative;
\t\t\toverflow: hidden;
\t\t}
\t\t.newsletter-section-modern::before {
\t\t\tcontent: '';
\t\t\tposition: absolute;
\t\t\ttop: -50%;
\t\t\tright: -50%;
\t\t\twidth: 100%;
\t\t\theight: 200%;
\t\t\tbackground: radial-gradient(circle, rgba(255,255,255,0.1) 0%, transparent 70%);
\t\t\tanimation: pulse 3s ease-in-out infinite;
\t\t}
\t\t@keyframes pulse {
\t\t\t0,
\t\t\t100% {
\t\t\t\ttransform: scale(1);
\t\t\t\topacity: 0.5;
\t\t\t}
\t\t\t50% {
\t\t\t\ttransform: scale(1.1);
\t\t\t\topacity: 0.8;
\t\t\t}
\t\t}
\t\t.newsletter-card {
\t\t\tbackground: white;
\t\t\tborder-radius: 20px;
\t\t\tpadding: 40px;
\t\t\tbox-shadow: 0 10px 40px rgba(0, 0, 0, 0.1);
\t\t\tposition: relative;
\t\t\tz-index: 1;
\t\t}
\t\t.newsletter-title {
\t\t\tfont-size: 2.5rem;
\t\t\tfont-weight: bold;
\t\t\tcolor: #333;
\t\t}
\t\t.newsletter-description {
\t\t\tcolor: #666;
\t\t\tfont-size: 1.1rem;
\t\t\tline-height: 1.8;
\t\t}
\t\t.newsletter-form-modern {
\t\t\tposition: relative;
\t\t}
\t\t.newsletter-input-wrapper {
\t\t\tdisplay: flex;
\t\t\tgap: 10px;
\t\t\tmargin-bottom: 15px;
\t\t}
\t\t.newsletter-input {
\t\t\tflex: 1;
\t\t\tpadding: 18px 25px;
\t\t\tborder: 2px solid #e0e0e0;
\t\t\tborder-radius: 50px;
\t\t\tfont-size: 1rem;
\t\t\ttransition: all 0.3s ease;\t\t\tbackground: #fff;
\t\t\tcolor: #333;
\t\t}
\t\t.newsletter-input::placeholder {
\t\t\tcolor: #777;
\t\t}
\t\t.newsletter-input:focus {
\t\t\toutline: none;
\t\t\tborder-color: #ffa200;
\t\t\tbox-shadow: 0 0 0 3px rgba(255, 162, 0, 0.1);
\t\t}
\t\t.newsletter-button {
\t\t\tpadding: 18px 35px;
\t\t\tbackground: linear-gradient(135deg, #ffa200 0%, #e8910a 100%);
\t\t\tcolor: white;
\t\t\tborder: none;
\t\t\tborder-radius: 50px;
\t\t\tfont-weight: 600;
\t\t\tfont-size: 1rem;
\t\t\tcursor: pointer;
\t\t\ttransition: all 0.3s ease;
\t\t\twhite-space: nowrap;
\t\t}
\t\t.newsletter-button:hover {
\t\t\ttransform: translateY(-2px);
\t\t\tbox-shadow: 0 5px 20px rgba(255, 162, 0, 0.4);
\t\t}
\t\t.newsletter-privacy {
\t\t\tcolor: #999;
\t\t}
\t\t/* CTA Modern Styles */
\t\t.cta-section-modern {
\t\t\tbackground: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
\t\t}
\t\t.cta-card {
\t\t\tbackground: white;
\t\t\tborder-radius: 25px;
\t\t\tpadding: 50px;
\t\t\tbox-shadow: 0 15px 50px rgba(0, 0, 0, 0.1);
\t\t\tposition: relative;
\t\t\toverflow: hidden;
\t\t}
\t\t.cta-card::before {
\t\t\tcontent: '';
\t\t\tposition: absolute;
\t\t\ttop: -50px;
\t\t\tright: -50px;
\t\t\twidth: 200px;
\t\t\theight: 200px;
\t\t\tbackground: linear-gradient(135deg, rgba(255,162,0,0.1) 0%, rgba(255,162,0,0.05) 100%);
\t\t\tborder-radius: 50%;
\t\t}
\t\t.cta-badge {
\t\t\tdisplay: inline-block;
\t\t\tpadding: 8px 20px;
\t\t\tbackground: linear-gradient(135deg, #ffa200 0%, #e8910a 100%);
\t\t\tcolor: white;
\t\t\tborder-radius: 50px;
\t\t\tfont-size: 0.9rem;
\t\t\tfont-weight: 600;
\t\t\tmargin-bottom: 20px;
\t\t}
\t\t.cta-title {
\t\t\tfont-size: 3rem;
\t\t\tfont-weight: bold;
\t\t\tcolor: #333;
\t\t\tmargin-bottom: 20px;
\t\t}
\t\t.cta-description {
\t\t\tfont-size: 1.2rem;
\t\t\tcolor: #666;
\t\t\tline-height: 1.8;
\t\t}
\t\t.cta-features {
\t\t\tdisplay: flex;
\t\t\tflex-direction: column;
\t\t\tgap: 15px;
\t\t}
\t\t.cta-feature-item {
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tgap: 10px;
\t\t\tfont-size: 1rem;
\t\t\tcolor: #555;
\t\t}
\t\t.cta-feature-item i {
\t\t\tcolor: #ffa200;
\t\t\tfont-size: 1.3rem;
\t\t}
\t\t.cta-buttons {
\t\t\tdisplay: flex;
\t\t\tgap: 15px;
\t\t\tflex-wrap: wrap;
\t\t}
\t\t.cta-button-primary {
\t\t\tpadding: 15px 35px;
\t\t\tbackground: linear-gradient(135deg, #ffa200 0%, #e8910a 100%);
\t\t\tcolor: white;
\t\t\tborder: none;
\t\t\tborder-radius: 50px;
\t\t\tfont-weight: 600;
\t\t\tfont-size: 1.1rem;
\t\t\ttransition: all 0.3s ease;
\t\t}
\t\t.cta-button-primary:hover {
\t\t\ttransform: translateY(-3px);
\t\t\tbox-shadow: 0 8px 25px rgba(255, 162, 0, 0.4);
\t\t\tcolor: white;
\t\t}
\t\t.cta-button-secondary {
\t\t\tpadding: 15px 35px;
\t\t\tbackground: white;
\t\t\tcolor: #ffa200;
\t\t\tborder: 2px solid #ffa200;
\t\t\tborder-radius: 50px;
\t\t\tfont-weight: 600;
\t\t\tfont-size: 1.1rem;
\t\t\ttransition: all 0.3s ease;
\t\t}
\t\t.cta-button-secondary:hover {
\t\t\tbackground: #ffa200;
\t\t\tcolor: white;
\t\t\ttransform: translateY(-3px);
\t\t\tbox-shadow: 0 8px 25px rgba(255, 162, 0, 0.3);
\t\t}
\t\t.cta-image-wrapper {
\t\t\tposition: relative;
\t\t}
\t\t.cta-decoration {
\t\t\tposition: absolute;
\t\t\ttop: -20px;
\t\t\tright: -20px;
\t\t\twidth: 150px;
\t\t\theight: 150px;
\t\t\tbackground: linear-gradient(135deg, rgba(255,162,0,0.2) 0%, rgba(255,162,0,0.05) 100%);
\t\t\tborder-radius: 50%;
\t\t\tz-index: 0;
\t\t}
\t\t.cta-image {
\t\t\tposition: relative;
\t\t\tz-index: 1;
\t\t\tmax-width: 100%;
\t\t\theight: auto;
\t\t\tborder-radius: 15px;
\t\t}
\t</style>
";
$__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
$__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
yield from [];
}
// line 2060
/**
* @return iterable<null|scalar|\Stringable>
*/
public function block_body(array $context, array $blocks = []): iterable
{
$macros = $this->macros;
$__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
$__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "body"));
$__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
$__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "body"));
// line 2061
yield "\t<!-- Hero Section -->
\t<!-- start banner Area avec produits en vedette -->
\t\t";
// line 2063
if ((array_key_exists("bannerProducts", $context) && (Twig\Extension\CoreExtension::length($this->env->getCharset(), ($context["bannerProducts"] ?? null)) > 0))) {
// line 2064
yield "\t\t\t<section class=\"banner-area-modern\"> <div class=\"banner-carousel-wrapper\">
\t\t\t\t<div class=\"active-banner-slider owl-carousel\" style=\"margin-top: 100px;\">
\t\t\t\t\t";
// line 2066
$context['_parent'] = $context;
$context['_seq'] = CoreExtension::ensureTraversable(($context["bannerProducts"] ?? null));
$context['loop'] = [
'parent' => $context['_parent'],
'index0' => 0,
'index' => 1,
'first' => true,
];
if (is_array($context['_seq']) || (is_object($context['_seq']) && $context['_seq'] instanceof \Countable)) {
$length = count($context['_seq']);
$context['loop']['revindex0'] = $length - 1;
$context['loop']['revindex'] = $length;
$context['loop']['length'] = $length;
$context['loop']['last'] = 1 === $length;
}
foreach ($context['_seq'] as $context["_key"] => $context["product"]) {
// line 2067
yield "\t\t\t\t\t\t<!-- single-slide -->
\t\t\t\t\t\t<div class=\"banner-slide-item\">
\t\t\t\t\t\t\t<div class=\"container\">
\t\t\t\t\t\t\t\t<div class=\"row align-items-center\">
\t\t\t\t\t\t\t\t\t<div class=\"col-lg-4 col-md-6 col-12\">
\t\t\t\t\t\t\t\t\t\t<div class=\"banner-content-modern\">
\t\t\t\t\t\t\t\t\t\t\t<div class=\"banner-badge\">
\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-star\"></i>
\t\t\t\t\t\t\t\t\t\t\t\tProduit en vedette
\t\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t\t\t<h1 class=\"banner-title-modern\">";
// line 2077
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "name", [], "any", false, false, false, 2077), "html", null, true);
yield "</h1>
\t\t\t\t\t\t\t\t\t\t\t<p class=\"banner-description-modern\">
\t\t\t\t\t\t\t\t\t\t\t\t";
// line 2079
yield (((($tmp = CoreExtension::getAttribute($this->env, $this->source, $context["product"], "description", [], "any", false, false, false, 2079)) && $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", false, false, false, 2079)), 0, 120) . "..."), "html", null, true)) : ("Découvrez ce produit exclusif sur MaketOu"));
yield "
\t\t\t\t\t\t\t\t\t\t\t</p>
\t\t\t\t\t\t\t\t\t\t\t<div class=\"banner-price-modern\">
\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"price-label\">Prix</span>
\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"price-value\">";
// line 2083
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Twig\Extension\CoreExtension']->formatNumber(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "price", [], "any", false, false, false, 2083), 2, ".", " "), "html", null, true);
yield "
\t\t\t\t\t\t\t\t\t\t\t\t\tHTG</span>
\t\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t\t\t<div class=\"banner-actions-modern\">
\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"btn-banner-primary\" href=\"";
// line 2087
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", false, false, false, 2087)]), "html", null, true);
yield "\">
\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"btn-text\">Voir le produit</span>
\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"btn-icon\">
\t\t\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-arrow-right\"></i>
\t\t\t\t\t\t\t\t\t\t\t\t\t</span>
\t\t\t\t\t\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t\t\t\t\t\t\t";
// line 2093
if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, $context["product"], "shop", [], "any", false, false, false, 2093)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
// line 2094
yield "\t\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"btn-banner-secondary\" href=\"";
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->source, CoreExtension::getAttribute($this->env, $this->source, $context["product"], "shop", [], "any", false, false, false, 2094), "slug", [], "any", false, false, false, 2094)]), "html", null, true);
yield "\">
\t\t\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-store\"></i>
\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span>";
// line 2096
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, CoreExtension::getAttribute($this->env, $this->source, $context["product"], "shop", [], "any", false, false, false, 2096), "name", [], "any", false, false, false, 2096), "html", null, true);
yield "</span>
\t\t\t\t\t\t\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t\t\t\t\t\t\t";
}
// line 2099
yield "\t\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t<div class=\"col-lg-8 col-md-6 col-12\">
\t\t\t\t\t\t\t\t\t\t<div class=\"banner-image-modern\">
\t\t\t\t\t\t\t\t\t\t\t<div class=\"banner-image-wrapper\">
\t\t\t\t\t\t\t\t\t\t\t\t";
// line 2105
if ((CoreExtension::getAttribute($this->env, $this->source, $context["product"], "images", [], "any", true, true, false, 2105) && (Twig\Extension\CoreExtension::length($this->env->getCharset(), CoreExtension::getAttribute($this->env, $this->source, $context["product"], "images", [], "any", false, false, false, 2105)) > 0))) {
// line 2106
yield "\t\t\t\t\t\t\t\t\t\t\t\t\t<img class=\"banner-img\" src=\"";
yield (((CoreExtension::getAttribute($this->env, $this->source, CoreExtension::getAttribute($this->env, $this->source, $context["product"], "images", [], "any", false, true, false, 2106), 0, [], "array", true, true, false, 2106) && (($_v0 = CoreExtension::getAttribute($this->env, $this->source, $context["product"], "images", [], "any", false, false, false, 2106)) && 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", false, false, false, 2106)) && is_array($_v1) || $_v1 instanceof ArrayAccess ? ($_v1[0] ?? null) : null)), "html", null, true)) : ($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", false, false, false, 2106)) . ".jpg")), "html", null, true)));
yield "\" alt=\"";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "name", [], "any", false, false, false, 2106), "html", null, true);
yield "\">
\t\t\t\t\t\t\t\t\t\t\t\t";
} else {
// line 2108
yield "\t\t\t\t\t\t\t\t\t\t\t\t\t<img class=\"banner-img\" src=\"";
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", false, false, false, 2108)) . ".jpg")), "html", null, true);
yield "\" alt=\"";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "name", [], "any", false, false, false, 2108), "html", null, true);
yield "\">
\t\t\t\t\t\t\t\t\t\t\t\t";
}
// line 2110
yield "\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"banner-image-overlay\"></div>
\t\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t</div>
\t\t\t\t\t";
++$context['loop']['index0'];
++$context['loop']['index'];
$context['loop']['first'] = false;
if (isset($context['loop']['revindex0'], $context['loop']['revindex'])) {
--$context['loop']['revindex0'];
--$context['loop']['revindex'];
$context['loop']['last'] = 0 === $context['loop']['revindex0'];
}
}
$_parent = $context['_parent'];
unset($context['_seq'], $context['_key'], $context['product'], $context['_parent'], $context['loop']);
$context = array_intersect_key($context, $_parent) + $_parent;
// line 2118
yield "\t\t\t\t</div>
\t\t\t</div>
\t\t</section>
\t";
} else {
// line 2122
yield "\t\t<!-- Banner par défaut si pas de produits en vedette -->
\t\t<section class=\"banner-area-modern\">
\t\t\t<div class=\"banner-carousel-wrapper\">
\t\t\t\t<div class=\"container\">
\t\t\t\t\t<div class=\"row align-items-center justify-content-center\">
\t\t\t\t\t\t<div class=\"col-lg-8 text-center\">
\t\t\t\t\t\t\t<div class=\"banner-content-modern\" style=\"margin-top: 140px;\">
\t\t\t\t\t\t\t\t<h1 class=\"banner-title-modern\">Bienvenue sur MaketOu</h1>
\t\t\t\t\t\t\t\t<p class=\"banner-description-modern\">Votre marketplace haïtienne</p>
\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t</div>
\t\t\t\t\t</div>
\t\t\t\t</div>
\t\t\t</div>
\t\t</section>
\t";
}
// line 2138
yield "\t<!-- End banner Area -->
\t<!-- Catégories de produits -->
\t";
// line 2141
if ((Twig\Extension\CoreExtension::length($this->env->getCharset(), ($context["categories"] ?? null)) > 0)) {
// line 2142
yield "\t\t<section class=\"py-5\">
\t\t\t<div class=\"container\">
\t\t\t\t<div class=\"section-title\">
\t\t\t\t\t<h2>Nos catégories</h2>
\t\t\t\t\t<p>Explorez nos différentes catégories de produits</p>
\t\t\t\t</div>
\t\t\t\t<div class=\"row\" id=\"productCategoriesContainer\">
\t\t\t\t\t";
// line 2149
$context['_parent'] = $context;
$context['_seq'] = CoreExtension::ensureTraversable(Twig\Extension\CoreExtension::slice($this->env->getCharset(), ($context["categories"] ?? null), 0, 8));
$context['loop'] = [
'parent' => $context['_parent'],
'index0' => 0,
'index' => 1,
'first' => true,
];
if (is_array($context['_seq']) || (is_object($context['_seq']) && $context['_seq'] instanceof \Countable)) {
$length = count($context['_seq']);
$context['loop']['revindex0'] = $length - 1;
$context['loop']['revindex'] = $length;
$context['loop']['length'] = $length;
$context['loop']['last'] = 1 === $length;
}
foreach ($context['_seq'] as $context["_key"] => $context["category"]) {
// line 2150
yield "\t\t\t\t\t\t<div class=\"col-lg-3 col-md-4 col-sm-6 mb-4\">
\t\t\t\t\t\t\t<div class=\"category-card-custom\">
\t\t\t\t\t\t\t\t<div class=\"category-image-wrapper\">
\t\t\t\t\t\t\t\t\t<div class=\"category-image\" style=\"background-image: url('";
// line 2153
if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, $context["category"], "bannerImage", [], "any", false, false, false, 2153)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
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", false, false, false, 2153))), "html", null, true);
} else {
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", false, false, false, 2153)) . ".jpg")), "html", null, true);
}
yield "')\">
\t\t\t\t\t\t\t\t\t\t<div class=\"category-overlay-custom\">
\t\t\t\t\t\t\t\t\t\t\t<div class=\"category-icon-wrapper\">
\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-tag\" style=\"font-size: 3rem;\"></i>
\t\t\t\t\t\t\t\t\t\t\t\t<h4 class=\"mt-3\">";
// line 2157
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["category"], "name", [], "any", false, false, false, 2157), "html", null, true);
yield "</h4>
\t\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t<div class=\"category-content p-3\">
\t\t\t\t\t\t\t\t\t<h5 class=\"mb-2\">";
// line 2163
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["category"], "name", [], "any", false, false, false, 2163), "html", null, true);
yield "</h5>
\t\t\t\t\t\t\t\t\t";
// line 2164
if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, $context["category"], "description", [], "any", false, false, false, 2164)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
// line 2165
yield "\t\t\t\t\t\t\t\t\t\t<p class=\"text-muted mb-3 small\">";
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", false, false, false, 2165)), 0, 60), "html", null, true);
yield "
\t\t\t\t\t\t\t\t\t\t\t";
// line 2166
if ((Twig\Extension\CoreExtension::length($this->env->getCharset(), Twig\Extension\CoreExtension::striptags(CoreExtension::getAttribute($this->env, $this->source, $context["category"], "description", [], "any", false, false, false, 2166))) > 60)) {
yield "...
\t\t\t\t\t\t\t\t\t\t\t";
}
// line 2168
yield "\t\t\t\t\t\t\t\t\t\t</p>
\t\t\t\t\t\t\t\t\t";
}
// line 2170
yield "\t\t\t\t\t\t\t\t\t<a href=\"";
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", false, false, false, 2170)]), "html", null, true);
yield "\" class=\"btn btn-primary-custom btn-sm w-100\">
\t\t\t\t\t\t\t\t\t\tVoir les produits
\t\t\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t</div>
\t\t\t\t\t";
++$context['loop']['index0'];
++$context['loop']['index'];
$context['loop']['first'] = false;
if (isset($context['loop']['revindex0'], $context['loop']['revindex'])) {
--$context['loop']['revindex0'];
--$context['loop']['revindex'];
$context['loop']['last'] = 0 === $context['loop']['revindex0'];
}
}
$_parent = $context['_parent'];
unset($context['_seq'], $context['_key'], $context['category'], $context['_parent'], $context['loop']);
$context = array_intersect_key($context, $_parent) + $_parent;
// line 2177
yield "\t\t\t\t</div>
\t\t\t</div>
\t\t</section>
\t";
}
// line 2181
yield "
\t<!-- Catégories de boutiques -->
\t";
// line 2183
if ((Twig\Extension\CoreExtension::length($this->env->getCharset(), ($context["shopCategories"] ?? null)) > 0)) {
// line 2184
yield "\t\t<section class=\"py-5 bg-light\">
\t\t\t<div class=\"container\">
\t\t\t\t<div class=\"section-title\">
\t\t\t\t\t<h2>Nos catégories de boutiques</h2>
\t\t\t\t\t<p>Explorez les différentes catégories de boutiques disponibles sur MaketOu</p>
\t\t\t\t</div>
\t\t\t\t<div class=\"row\" id=\"shopCategoriesContainer\">
\t\t\t\t\t";
// line 2191
$context['_parent'] = $context;
$context['_seq'] = CoreExtension::ensureTraversable(Twig\Extension\CoreExtension::slice($this->env->getCharset(), ($context["shopCategories"] ?? null), 0, 6));
$context['loop'] = [
'parent' => $context['_parent'],
'index0' => 0,
'index' => 1,
'first' => true,
];
if (is_array($context['_seq']) || (is_object($context['_seq']) && $context['_seq'] instanceof \Countable)) {
$length = count($context['_seq']);
$context['loop']['revindex0'] = $length - 1;
$context['loop']['revindex'] = $length;
$context['loop']['length'] = $length;
$context['loop']['last'] = 1 === $length;
}
foreach ($context['_seq'] as $context["_key"] => $context["shopCategory"]) {
// line 2192
yield "\t\t\t\t\t\t<div class=\"col-lg-4 col-md-6 mb-4\">
\t\t\t\t\t\t\t<a href=\"";
// line 2193
yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("ui_shops_list");
yield "?category=";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["shopCategory"], "slug", [], "any", false, false, false, 2193), "html", null, true);
yield "\" class=\"text-decoration-none\" style=\"display: block;\">
\t\t\t\t\t\t\t\t<div class=\"category-card-custom shop-category-clickable\">
\t\t\t\t\t\t\t\t\t<div class=\"category-image-wrapper\">
\t\t\t\t\t\t\t\t\t\t<div class=\"category-image\" style=\"background-image: url('";
// line 2196
if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, $context["shopCategory"], "bannerImage", [], "any", false, false, false, 2196)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
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", false, false, false, 2196)), "html", null, true);
} else {
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", false, false, false, 2196)) . ".jpg")), "html", null, true);
}
yield "')\">
\t\t\t\t\t\t\t\t\t\t\t<div class=\"category-overlay-custom\">
\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"category-icon-wrapper\">
\t\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-store\" style=\"font-size: 3rem;\"></i>
\t\t\t\t\t\t\t\t\t\t\t\t\t<h4 class=\"mt-3\">";
// line 2200
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["shopCategory"], "name", [], "any", false, false, false, 2200), "html", null, true);
yield "</h4>
\t\t\t\t\t\t\t\t\t\t\t\t\t";
// line 2201
if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, $context["shopCategory"], "description", [], "any", false, false, false, 2201)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
// line 2202
yield "\t\t\t\t\t\t\t\t\t\t\t\t\t\t<p class=\"mt-2 px-3\">";
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", false, false, false, 2202)), 0, 100), "html", null, true);
yield "
\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t";
// line 2203
if ((Twig\Extension\CoreExtension::length($this->env->getCharset(), Twig\Extension\CoreExtension::striptags(CoreExtension::getAttribute($this->env, $this->source, $context["shopCategory"], "description", [], "any", false, false, false, 2203))) > 100)) {
yield "...
\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t";
}
// line 2205
yield "\t\t\t\t\t\t\t\t\t\t\t\t\t\t</p>
\t\t\t\t\t\t\t\t\t\t\t\t\t";
}
// line 2207
yield "\t\t\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t<div class=\"category-content p-3\">
\t\t\t\t\t\t\t\t\t\t<h5 class=\"mb-2\">";
// line 2212
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["shopCategory"], "name", [], "any", false, false, false, 2212), "html", null, true);
yield "</h5>
\t\t\t\t\t\t\t\t\t\t";
// line 2213
if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, $context["shopCategory"], "description", [], "any", false, false, false, 2213)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
// line 2214
yield "\t\t\t\t\t\t\t\t\t\t\t<p class=\"text-muted mb-3 small\">";
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", false, false, false, 2214)), 0, 80), "html", null, true);
yield "
\t\t\t\t\t\t\t\t\t\t\t\t";
// line 2215
if ((Twig\Extension\CoreExtension::length($this->env->getCharset(), Twig\Extension\CoreExtension::striptags(CoreExtension::getAttribute($this->env, $this->source, $context["shopCategory"], "description", [], "any", false, false, false, 2215))) > 80)) {
yield "...
\t\t\t\t\t\t\t\t\t\t\t\t";
}
// line 2217
yield "\t\t\t\t\t\t\t\t\t\t\t</p>
\t\t\t\t\t\t\t\t\t\t";
}
// line 2219
yield "\t\t\t\t\t\t\t\t\t\t<span class=\"btn btn-primary-custom btn-sm w-100\">
\t\t\t\t\t\t\t\t\t\t\tVoir les boutiques
\t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-arrow-right ms-2\"></i>
\t\t\t\t\t\t\t\t\t\t</span>
\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t</div>
\t\t\t\t\t";
++$context['loop']['index0'];
++$context['loop']['index'];
$context['loop']['first'] = false;
if (isset($context['loop']['revindex0'], $context['loop']['revindex'])) {
--$context['loop']['revindex0'];
--$context['loop']['revindex'];
$context['loop']['last'] = 0 === $context['loop']['revindex0'];
}
}
$_parent = $context['_parent'];
unset($context['_seq'], $context['_key'], $context['shopCategory'], $context['_parent'], $context['loop']);
$context = array_intersect_key($context, $_parent) + $_parent;
// line 2228
yield "\t\t\t\t</div>
\t\t\t\t";
// line 2229
if ((Twig\Extension\CoreExtension::length($this->env->getCharset(), ($context["shopCategories"] ?? null)) > 6)) {
// line 2230
yield "\t\t\t\t\t<div class=\"text-center mt-4\">
\t\t\t\t\t\t<button class=\"btn btn-outline-primary btn-lg\" onclick=\"showAllShopCategories()\">
\t\t\t\t\t\t\t<i class=\"lnr lnr-store me-2\"></i>
\t\t\t\t\t\t\tVoir toutes les catégories de boutiques (";
// line 2233
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(Twig\Extension\CoreExtension::length($this->env->getCharset(), ($context["shopCategories"] ?? null)), "html", null, true);
yield ")
\t\t\t\t\t\t</button>
\t\t\t\t\t</div>
\t\t\t\t";
}
// line 2237
yield "\t\t\t</div>
\t\t</section>
\t";
}
// line 2240
yield "
\t<!-- Produits en vedette -->
\t";
// line 2242
if ((Twig\Extension\CoreExtension::length($this->env->getCharset(), ($context["featuredProducts"] ?? null)) > 0)) {
// line 2243
yield "\t\t<section class=\"py-5\">
\t\t\t<div class=\"container\">
\t\t\t\t<div class=\"section-title text-center mb-5\">
\t\t\t\t\t<h2>Produits en vedette</h2>
\t\t\t\t\t<p>Découvrez nos produits les plus populaires et les mieux notés</p>
\t\t\t\t</div>
\t\t\t\t<div class=\"featured-gallery-wrapper\">
\t\t\t\t\t<div class=\"featured-gallery-container\">
\t\t\t\t\t\t<div class=\"featured-gallery-grid\" id=\"featuredGalleryGrid\">
\t\t\t\t\t\t\t";
// line 2253
$context['_parent'] = $context;
$context['_seq'] = CoreExtension::ensureTraversable(($context["featuredProducts"] ?? null));
foreach ($context['_seq'] as $context["_key"] => $context["product"]) {
// line 2254
yield "\t\t\t\t\t\t\t\t<div class=\"featured-gallery-item\">
\t\t\t\t\t\t\t\t\t<div class=\"single-product\">
\t\t\t\t\t\t\t\t\t\t<div class=\"product-image-container\" onmouseenter=\"showImageNav(";
// line 2256
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "id", [], "any", false, false, false, 2256), "html", null, true);
yield ")\" onmouseleave=\"hideImageNav(";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "id", [], "any", false, false, false, 2256), "html", null, true);
yield ")\">
\t\t\t\t\t\t\t\t\t\t\t<a href=\"";
// line 2257
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", false, false, false, 2257)]), "html", null, true);
yield "\">
\t\t\t\t\t\t\t\t\t\t\t\t";
// line 2258
if ((CoreExtension::getAttribute($this->env, $this->source, $context["product"], "images", [], "any", true, true, false, 2258) && (Twig\Extension\CoreExtension::length($this->env->getCharset(), CoreExtension::getAttribute($this->env, $this->source, $context["product"], "images", [], "any", false, false, false, 2258)) > 0))) {
// line 2259
yield "\t\t\t\t\t\t\t\t\t\t\t\t\t<img
\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"img-fluid main-product-img\"
\t\t\t\t\t\t\t\t\t\t\t\t\t\tid=\"main-img-";
// line 2261
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "id", [], "any", false, false, false, 2261), "html", null, true);
yield "\"
\t\t\t\t\t\t\t\t\t\t\t\t\t\tsrc=\"";
// line 2262
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl((($_v2 = CoreExtension::getAttribute($this->env, $this->source, $context["product"], "images", [], "any", false, false, false, 2262)) && is_array($_v2) || $_v2 instanceof ArrayAccess ? ($_v2[0] ?? null) : null)), "html", null, true);
yield "\"
\t\t\t\t\t\t\t\t\t\t\t\t\t\talt=\"";
// line 2263
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "name", [], "any", false, false, false, 2263), "html", null, true);
yield "\"
\t\t\t\t\t\t\t\t\t\t\t\t\t\tonerror=\"this.onerror=null;this.src='";
// line 2264
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("ui/img/product/p1.jpg"), "html", null, true);
yield "';\"
\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";
} else {
// line 2267
yield "\t\t\t\t\t\t\t\t\t\t\t\t\t<img class=\"img-fluid main-product-img\" id=\"main-img-";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "id", [], "any", false, false, false, 2267), "html", null, true);
yield "\" src=\"";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("ui/img/product/p1.jpg"), "html", null, true);
yield "\" alt=\"";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "name", [], "any", false, false, false, 2267), "html", null, true);
yield "\">
\t\t\t\t\t\t\t\t\t\t\t\t";
}
// line 2269
yield "\t\t\t\t\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t\t\t\t\t\t<!-- Boutons de navigation (visibles au survol) -->
\t\t\t\t\t\t\t\t\t\t\t";
// line 2272
if ((CoreExtension::getAttribute($this->env, $this->source, $context["product"], "images", [], "any", true, true, false, 2272) && (Twig\Extension\CoreExtension::length($this->env->getCharset(), CoreExtension::getAttribute($this->env, $this->source, $context["product"], "images", [], "any", false, false, false, 2272)) > 1))) {
// line 2273
yield "\t\t\t\t\t\t\t\t\t\t\t\t<button class=\"img-nav-btn img-nav-left\" id=\"img-left-";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "id", [], "any", false, false, false, 2273), "html", null, true);
yield "\" onclick=\"prevImage(";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "id", [], "any", false, false, false, 2273), "html", null, true);
yield ")\" style=\"display: none;\">
\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"lnr lnr-chevron-left\"></span>
\t\t\t\t\t\t\t\t\t\t\t\t</button>
\t\t\t\t\t\t\t\t\t\t\t\t<button class=\"img-nav-btn img-nav-right\" id=\"img-right-";
// line 2276
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "id", [], "any", false, false, false, 2276), "html", null, true);
yield "\" onclick=\"nextImage(";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "id", [], "any", false, false, false, 2276), "html", null, true);
yield ")\" style=\"display: none;\">
\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"lnr lnr-chevron-right\"></span>
\t\t\t\t\t\t\t\t\t\t\t\t</button>
\t\t\t\t\t\t\t\t\t\t\t\t<!-- Indicateurs de position -->
\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"img-indicators\" id=\"img-indicators-";
// line 2281
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "id", [], "any", false, false, false, 2281), "html", null, true);
yield "\" style=\"display: none;\">
\t\t\t\t\t\t\t\t\t\t\t\t\t";
// line 2282
$context['_parent'] = $context;
$context['_seq'] = CoreExtension::ensureTraversable(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "images", [], "any", false, false, false, 2282));
$context['loop'] = [
'parent' => $context['_parent'],
'index0' => 0,
'index' => 1,
'first' => true,
];
if (is_array($context['_seq']) || (is_object($context['_seq']) && $context['_seq'] instanceof \Countable)) {
$length = count($context['_seq']);
$context['loop']['revindex0'] = $length - 1;
$context['loop']['revindex'] = $length;
$context['loop']['length'] = $length;
$context['loop']['last'] = 1 === $length;
}
foreach ($context['_seq'] as $context["_key"] => $context["img"]) {
// line 2283
yield "\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"indicator\" id=\"indicator-";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "id", [], "any", false, false, false, 2283), "html", null, true);
yield "-";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["loop"], "index0", [], "any", false, false, false, 2283), "html", null, true);
yield "\" onclick=\"showImage(";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "id", [], "any", false, false, false, 2283), "html", null, true);
yield ", ";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["loop"], "index0", [], "any", false, false, false, 2283), "html", null, true);
yield ")\"></span>
\t\t\t\t\t\t\t\t\t\t\t\t\t";
++$context['loop']['index0'];
++$context['loop']['index'];
$context['loop']['first'] = false;
if (isset($context['loop']['revindex0'], $context['loop']['revindex'])) {
--$context['loop']['revindex0'];
--$context['loop']['revindex'];
$context['loop']['last'] = 0 === $context['loop']['revindex0'];
}
}
$_parent = $context['_parent'];
unset($context['_seq'], $context['_key'], $context['img'], $context['_parent'], $context['loop']);
$context = array_intersect_key($context, $_parent) + $_parent;
// line 2285
yield "\t\t\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t\t\t";
}
// line 2287
yield "\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t\t<div class=\"product-details\">
\t\t\t\t\t\t\t\t\t\t\t<a href=\"";
// line 2290
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", false, false, false, 2290)]), "html", null, true);
yield "\">
\t\t\t\t\t\t\t\t\t\t\t\t<h6>";
// line 2291
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "name", [], "any", false, false, false, 2291), "html", null, true);
yield "</h6>
\t\t\t\t\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t\t\t\t\t\t<!-- Affichage de la boutique -->
\t\t\t\t\t\t\t\t\t\t\t<div class=\"shop-info\">
\t\t\t\t\t\t\t\t\t\t\t\t<small class=\"text-muted\">
\t\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-store\"></i>
\t\t\t\t\t\t\t\t\t\t\t\t\tVendu par :
\t\t\t\t\t\t\t\t\t\t\t\t\t";
// line 2299
if ((CoreExtension::getAttribute($this->env, $this->source, $context["product"], "shop", [], "any", true, true, false, 2299) && CoreExtension::getAttribute($this->env, $this->source, $context["product"], "shop", [], "any", false, false, false, 2299))) {
// line 2300
yield "\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"";
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->source, CoreExtension::getAttribute($this->env, $this->source, $context["product"], "shop", [], "any", false, false, false, 2300), "slug", [], "any", false, false, false, 2300)]), "html", null, true);
yield "\" class=\"shop-link\">
\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t";
// line 2301
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, CoreExtension::getAttribute($this->env, $this->source, $context["product"], "shop", [], "any", false, false, false, 2301), "name", [], "any", false, false, false, 2301), "html", null, true);
yield "
\t\t\t\t\t\t\t\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t\t\t\t\t\t\t\t";
} else {
// line 2304
yield "\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"text-muted\">Boutique inconnue</span>
\t\t\t\t\t\t\t\t\t\t\t\t\t";
}
// line 2306
yield "\t\t\t\t\t\t\t\t\t\t\t\t</small>
\t\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t\t\t<div class=\"price\">
\t\t\t\t\t\t\t\t\t\t\t\t<h6>";
// line 2310
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Twig\Extension\CoreExtension']->formatNumber(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "price", [], "any", false, false, false, 2310), 2, ".", " "), "html", null, true);
yield "
\t\t\t\t\t\t\t\t\t\t\t\t\tHTG</h6>
\t\t\t\t\t\t\t\t\t\t\t\t";
// line 2312
if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, $context["product"], "compareAtPrice", [], "any", false, false, false, 2312)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
// line 2313
yield "\t\t\t\t\t\t\t\t\t\t\t\t\t<h6 class=\"l-through\">";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Twig\Extension\CoreExtension']->formatNumber(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "compareAtPrice", [], "any", false, false, false, 2313), 2, ".", " "), "html", null, true);
yield "
\t\t\t\t\t\t\t\t\t\t\t\t\t\tHTG</h6>
\t\t\t\t\t\t\t\t\t\t\t\t";
}
// line 2316
yield "\t\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t\t\t<div class=\"prd-bottom\">
\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"javascript:void(0)\" class=\"social-info add-to-cart\" data-product-id=\"";
// line 2318
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "id", [], "any", false, false, false, 2318), "html", null, true);
yield "\" data-qty=\"1\">
\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"ti-bag\"></span>
\t\t\t\t\t\t\t\t\t\t\t\t\t<p class=\"hover-text\">+ panier</p>
\t\t\t\t\t\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"#\" class=\"social-info wishlist-btn\" data-product-id=\"";
// line 2322
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "id", [], "any", false, false, false, 2322), "html", null, true);
yield "\" ";
if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, ($context["app"] ?? null), "user", [], "any", false, false, false, 2322)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
yield " onclick=\"toggleWishlist(";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "id", [], "any", false, false, false, 2322), "html", null, true);
yield ", this); return false;\" ";
} else {
yield " onclick=\"alert('Vous devez être connecté pour ajouter aux favoris'); return false;\" ";
}
yield ">
\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"lnr lnr-heart\"></span>
\t\t\t\t\t\t\t\t\t\t\t\t\t<p class=\"hover-text\">Favoris</p>
\t\t\t\t\t\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"#\" class=\"social-info comparison-btn\" data-product-id=\"";
// line 2326
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "id", [], "any", false, false, false, 2326), "html", null, true);
yield "\" ";
if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, ($context["app"] ?? null), "user", [], "any", false, false, false, 2326)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
yield " onclick=\"toggleComparison(";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "id", [], "any", false, false, false, 2326), "html", null, true);
yield ", this); return false;\" ";
} else {
yield " onclick=\"alert('Vous devez être connecté pour comparer des produits'); return false;\" ";
}
yield ">
\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"lnr lnr-sync\"></span>
\t\t\t\t\t\t\t\t\t\t\t\t\t<p class=\"hover-text\">Comparer</p>
\t\t\t\t\t\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"";
// line 2330
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", false, false, false, 2330)]), "html", null, true);
yield "\" class=\"social-info\">
\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"lnr lnr-move\"></span>
\t\t\t\t\t\t\t\t\t\t\t\t\t<p class=\"hover-text\">Voir plus</p>
\t\t\t\t\t\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t";
}
$_parent = $context['_parent'];
unset($context['_seq'], $context['_key'], $context['product'], $context['_parent']);
$context = array_intersect_key($context, $_parent) + $_parent;
// line 2339
yield "\t\t\t\t\t\t</div>
\t\t\t\t\t</div>
\t\t\t\t\t<!-- Contrôles de navigation -->
\t\t\t\t\t<div class=\"featured-gallery-controls\">
\t\t\t\t\t\t<button class=\"featured-gallery-nav-btn featured-gallery-prev\" id=\"featuredGalleryPrev\" aria-label=\"Précédent\">
\t\t\t\t\t\t\t<i class=\"lnr lnr-chevron-left\"></i>
\t\t\t\t\t\t</button>
\t\t\t\t\t\t<button class=\"featured-gallery-nav-btn featured-gallery-next\" id=\"featuredGalleryNext\" aria-label=\"Suivant\">
\t\t\t\t\t\t\t<i class=\"lnr lnr-chevron-right\"></i>
\t\t\t\t\t\t</button>
\t\t\t\t\t</div>
\t\t\t\t\t<!-- Bouton charger plus -->
\t\t\t\t\t<div class=\"featured-gallery-load-more text-center mt-4\" id=\"featuredGalleryLoadMore\" style=\"display: none;\">
\t\t\t\t\t\t<button class=\"btn btn-outline-primary\" id=\"loadMoreFeaturedBtn\">
\t\t\t\t\t\t\t<i class=\"lnr lnr-plus-circle me-2\"></i>
\t\t\t\t\t\t\tCharger plus de produits
\t\t\t\t\t\t</button>
\t\t\t\t\t</div>
\t\t\t\t</div>
\t\t\t\t<div class=\"text-center mt-5\">
\t\t\t\t\t<a href=\"";
// line 2362
yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("ui_listing");
yield "\" class=\"btn-view-all-products\">
\t\t\t\t\t\t<span>Voir tous les produits</span>
\t\t\t\t\t\t<i class=\"lnr lnr-arrow-right\"></i>
\t\t\t\t\t</a>
\t\t\t\t</div>
\t\t\t</div>
\t\t</section>
\t";
}
// line 2370
yield "
\t<!-- Nouveautés -->
\t";
// line 2372
if ((Twig\Extension\CoreExtension::length($this->env->getCharset(), ($context["latestProducts"] ?? null)) > 0)) {
// line 2373
yield "\t\t<section class=\"py-5 bg-light\">
\t\t\t<div class=\"container\">
\t\t\t\t<div class=\"section-title text-center mb-5\">
\t\t\t\t\t<h2>Nouveautés</h2>
\t\t\t\t\t<p>Les derniers produits ajoutés sur MaketOu</p>
\t\t\t\t</div>
\t\t\t\t<div class=\"featured-gallery-wrapper\">
\t\t\t\t\t<div class=\"featured-gallery-container\">
\t\t\t\t\t\t<div class=\"featured-gallery-grid\" id=\"latestGalleryGrid\">
\t\t\t\t\t\t\t";
// line 2383
$context['_parent'] = $context;
$context['_seq'] = CoreExtension::ensureTraversable(($context["latestProducts"] ?? null));
foreach ($context['_seq'] as $context["_key"] => $context["product"]) {
// line 2384
yield "\t\t\t\t\t\t\t\t<div class=\"featured-gallery-item\">
\t\t\t\t\t\t\t\t\t<div class=\"single-product\">
\t\t\t\t\t\t\t\t\t\t<div class=\"product-image-container\" onmouseenter=\"showImageNav(";
// line 2386
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "id", [], "any", false, false, false, 2386), "html", null, true);
yield ")\" onmouseleave=\"hideImageNav(";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "id", [], "any", false, false, false, 2386), "html", null, true);
yield ")\">
\t\t\t\t\t\t\t\t\t\t\t<a href=\"";
// line 2387
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", false, false, false, 2387)]), "html", null, true);
yield "\">
\t\t\t\t\t\t\t\t\t\t\t\t";
// line 2388
if ((CoreExtension::getAttribute($this->env, $this->source, $context["product"], "images", [], "any", true, true, false, 2388) && (Twig\Extension\CoreExtension::length($this->env->getCharset(), CoreExtension::getAttribute($this->env, $this->source, $context["product"], "images", [], "any", false, false, false, 2388)) > 0))) {
// line 2389
yield "\t\t\t\t\t\t\t\t\t\t\t\t\t<img class=\"img-fluid main-product-img\" id=\"main-img-";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "id", [], "any", false, false, false, 2389), "html", null, true);
yield "\" src=\"";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl((($_v3 = CoreExtension::getAttribute($this->env, $this->source, $context["product"], "images", [], "any", false, false, false, 2389)) && is_array($_v3) || $_v3 instanceof ArrayAccess ? ($_v3[0] ?? null) : null)), "html", null, true);
yield "\" alt=\"";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "name", [], "any", false, false, false, 2389), "html", null, true);
yield "\">
\t\t\t\t\t\t\t\t\t\t\t\t";
} else {
// line 2391
yield "\t\t\t\t\t\t\t\t\t\t\t\t\t<img class=\"img-fluid main-product-img\" id=\"main-img-";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "id", [], "any", false, false, false, 2391), "html", null, true);
yield "\" src=\"";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("ui/img/product/p1.jpg"), "html", null, true);
yield "\" alt=\"";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "name", [], "any", false, false, false, 2391), "html", null, true);
yield "\">
\t\t\t\t\t\t\t\t\t\t\t\t";
}
// line 2393
yield "\t\t\t\t\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t\t\t\t\t\t<!-- Boutons de navigation (visibles au survol) -->
\t\t\t\t\t\t\t\t\t\t\t";
// line 2396
if ((CoreExtension::getAttribute($this->env, $this->source, $context["product"], "images", [], "any", true, true, false, 2396) && (Twig\Extension\CoreExtension::length($this->env->getCharset(), CoreExtension::getAttribute($this->env, $this->source, $context["product"], "images", [], "any", false, false, false, 2396)) > 1))) {
// line 2397
yield "\t\t\t\t\t\t\t\t\t\t\t\t<button class=\"img-nav-btn img-nav-left\" id=\"img-left-";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "id", [], "any", false, false, false, 2397), "html", null, true);
yield "\" onclick=\"prevImage(";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "id", [], "any", false, false, false, 2397), "html", null, true);
yield ")\" style=\"display: none;\">
\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"lnr lnr-chevron-left\"></span>
\t\t\t\t\t\t\t\t\t\t\t\t</button>
\t\t\t\t\t\t\t\t\t\t\t\t<button class=\"img-nav-btn img-nav-right\" id=\"img-right-";
// line 2400
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "id", [], "any", false, false, false, 2400), "html", null, true);
yield "\" onclick=\"nextImage(";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "id", [], "any", false, false, false, 2400), "html", null, true);
yield ")\" style=\"display: none;\">
\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"lnr lnr-chevron-right\"></span>
\t\t\t\t\t\t\t\t\t\t\t\t</button>
\t\t\t\t\t\t\t\t\t\t\t\t<!-- Indicateurs de position -->
\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"img-indicators\" id=\"img-indicators-";
// line 2405
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "id", [], "any", false, false, false, 2405), "html", null, true);
yield "\" style=\"display: none;\">
\t\t\t\t\t\t\t\t\t\t\t\t\t";
// line 2406
$context['_parent'] = $context;
$context['_seq'] = CoreExtension::ensureTraversable(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "images", [], "any", false, false, false, 2406));
$context['loop'] = [
'parent' => $context['_parent'],
'index0' => 0,
'index' => 1,
'first' => true,
];
if (is_array($context['_seq']) || (is_object($context['_seq']) && $context['_seq'] instanceof \Countable)) {
$length = count($context['_seq']);
$context['loop']['revindex0'] = $length - 1;
$context['loop']['revindex'] = $length;
$context['loop']['length'] = $length;
$context['loop']['last'] = 1 === $length;
}
foreach ($context['_seq'] as $context["_key"] => $context["img"]) {
// line 2407
yield "\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"indicator\" id=\"indicator-";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "id", [], "any", false, false, false, 2407), "html", null, true);
yield "-";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["loop"], "index0", [], "any", false, false, false, 2407), "html", null, true);
yield "\" onclick=\"showImage(";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "id", [], "any", false, false, false, 2407), "html", null, true);
yield ", ";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["loop"], "index0", [], "any", false, false, false, 2407), "html", null, true);
yield ")\"></span>
\t\t\t\t\t\t\t\t\t\t\t\t\t";
++$context['loop']['index0'];
++$context['loop']['index'];
$context['loop']['first'] = false;
if (isset($context['loop']['revindex0'], $context['loop']['revindex'])) {
--$context['loop']['revindex0'];
--$context['loop']['revindex'];
$context['loop']['last'] = 0 === $context['loop']['revindex0'];
}
}
$_parent = $context['_parent'];
unset($context['_seq'], $context['_key'], $context['img'], $context['_parent'], $context['loop']);
$context = array_intersect_key($context, $_parent) + $_parent;
// line 2409
yield "\t\t\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t\t\t";
}
// line 2411
yield "\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t\t<div class=\"product-details\">
\t\t\t\t\t\t\t\t\t\t\t<a href=\"";
// line 2414
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", false, false, false, 2414)]), "html", null, true);
yield "\">
\t\t\t\t\t\t\t\t\t\t\t\t<h6>";
// line 2415
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "name", [], "any", false, false, false, 2415), "html", null, true);
yield "</h6>
\t\t\t\t\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t\t\t\t\t\t<!-- Affichage de la boutique -->
\t\t\t\t\t\t\t\t\t\t\t<div class=\"shop-info\">
\t\t\t\t\t\t\t\t\t\t\t\t<small class=\"text-muted\">
\t\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-store\"></i>
\t\t\t\t\t\t\t\t\t\t\t\t\tVendu par :
\t\t\t\t\t\t\t\t\t\t\t\t\t";
// line 2423
if ((CoreExtension::getAttribute($this->env, $this->source, $context["product"], "shop", [], "any", true, true, false, 2423) && CoreExtension::getAttribute($this->env, $this->source, $context["product"], "shop", [], "any", false, false, false, 2423))) {
// line 2424
yield "\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"";
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->source, CoreExtension::getAttribute($this->env, $this->source, $context["product"], "shop", [], "any", false, false, false, 2424), "slug", [], "any", false, false, false, 2424)]), "html", null, true);
yield "\" class=\"shop-link\">
\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t";
// line 2425
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, CoreExtension::getAttribute($this->env, $this->source, $context["product"], "shop", [], "any", false, false, false, 2425), "name", [], "any", false, false, false, 2425), "html", null, true);
yield "
\t\t\t\t\t\t\t\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t\t\t\t\t\t\t\t";
} else {
// line 2428
yield "\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"text-muted\">Boutique inconnue</span>
\t\t\t\t\t\t\t\t\t\t\t\t\t";
}
// line 2430
yield "\t\t\t\t\t\t\t\t\t\t\t\t</small>
\t\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t\t\t<div class=\"price\">
\t\t\t\t\t\t\t\t\t\t\t\t<h6>";
// line 2434
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Twig\Extension\CoreExtension']->formatNumber(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "price", [], "any", false, false, false, 2434), 2, ".", " "), "html", null, true);
yield "
\t\t\t\t\t\t\t\t\t\t\t\t\tHTG</h6>
\t\t\t\t\t\t\t\t\t\t\t\t";
// line 2436
if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, $context["product"], "compareAtPrice", [], "any", false, false, false, 2436)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
// line 2437
yield "\t\t\t\t\t\t\t\t\t\t\t\t\t<h6 class=\"l-through\">";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Twig\Extension\CoreExtension']->formatNumber(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "compareAtPrice", [], "any", false, false, false, 2437), 2, ".", " "), "html", null, true);
yield "
\t\t\t\t\t\t\t\t\t\t\t\t\t\tHTG</h6>
\t\t\t\t\t\t\t\t\t\t\t\t";
}
// line 2440
yield "\t\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t\t\t<div class=\"prd-bottom\">
\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"javascript:void(0)\" class=\"social-info add-to-cart\" data-product-id=\"";
// line 2442
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "id", [], "any", false, false, false, 2442), "html", null, true);
yield "\" data-qty=\"1\">
\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"ti-bag\"></span>
\t\t\t\t\t\t\t\t\t\t\t\t\t<p class=\"hover-text\">+ panier</p>
\t\t\t\t\t\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"#\" class=\"social-info wishlist-btn\" data-product-id=\"";
// line 2446
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "id", [], "any", false, false, false, 2446), "html", null, true);
yield "\" ";
if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, ($context["app"] ?? null), "user", [], "any", false, false, false, 2446)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
yield " onclick=\"toggleWishlist(";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "id", [], "any", false, false, false, 2446), "html", null, true);
yield ", this); return false;\" ";
} else {
yield " onclick=\"alert('Vous devez être connecté pour ajouter aux favoris'); return false;\" ";
}
yield ">
\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"lnr lnr-heart\"></span>
\t\t\t\t\t\t\t\t\t\t\t\t\t<p class=\"hover-text\">Favoris</p>
\t\t\t\t\t\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"#\" class=\"social-info comparison-btn\" data-product-id=\"";
// line 2450
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "id", [], "any", false, false, false, 2450), "html", null, true);
yield "\" ";
if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, ($context["app"] ?? null), "user", [], "any", false, false, false, 2450)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
yield " onclick=\"toggleComparison(";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "id", [], "any", false, false, false, 2450), "html", null, true);
yield ", this); return false;\" ";
} else {
yield " onclick=\"alert('Vous devez être connecté pour comparer des produits'); return false;\" ";
}
yield ">
\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"lnr lnr-sync\"></span>
\t\t\t\t\t\t\t\t\t\t\t\t\t<p class=\"hover-text\">Comparer</p>
\t\t\t\t\t\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"";
// line 2454
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", false, false, false, 2454)]), "html", null, true);
yield "\" class=\"social-info\">
\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"lnr lnr-move\"></span>
\t\t\t\t\t\t\t\t\t\t\t\t\t<p class=\"hover-text\">Voir plus</p>
\t\t\t\t\t\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t";
}
$_parent = $context['_parent'];
unset($context['_seq'], $context['_key'], $context['product'], $context['_parent']);
$context = array_intersect_key($context, $_parent) + $_parent;
// line 2463
yield "\t\t\t\t\t\t</div>
\t\t\t\t\t</div>
\t\t\t\t\t<!-- Contrôles de navigation -->
\t\t\t\t\t<div class=\"featured-gallery-controls\">
\t\t\t\t\t\t<button class=\"featured-gallery-nav-btn featured-gallery-prev\" id=\"latestGalleryPrev\" aria-label=\"Précédent\">
\t\t\t\t\t\t\t<i class=\"lnr lnr-chevron-left\"></i>
\t\t\t\t\t\t</button>
\t\t\t\t\t\t<button class=\"featured-gallery-nav-btn featured-gallery-next\" id=\"latestGalleryNext\" aria-label=\"Suivant\">
\t\t\t\t\t\t\t<i class=\"lnr lnr-chevron-right\"></i>
\t\t\t\t\t\t</button>
\t\t\t\t\t</div>
\t\t\t\t\t<!-- Bouton charger plus -->
\t\t\t\t\t<div class=\"featured-gallery-load-more text-center mt-4\" id=\"latestGalleryLoadMore\" style=\"display: none;\">
\t\t\t\t\t\t<button class=\"btn btn-outline-primary\" id=\"loadMoreLatestBtn\">
\t\t\t\t\t\t\t<i class=\"lnr lnr-plus-circle me-2\"></i>
\t\t\t\t\t\t\tCharger plus de produits
\t\t\t\t\t\t</button>
\t\t\t\t\t</div>
\t\t\t\t</div>
\t\t\t\t<div class=\"text-center mt-5\">
\t\t\t\t\t<a href=\"";
// line 2486
yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("ui_listing");
yield "\" class=\"btn-view-all-products\">
\t\t\t\t\t\t<span>Voir tous les produits</span>
\t\t\t\t\t\t<i class=\"lnr lnr-arrow-right\"></i>
\t\t\t\t\t</a>
\t\t\t\t</div>
\t\t\t</div>
\t\t</section>
\t";
}
// line 2494
yield "
\t";
// line 2495
if ((Twig\Extension\CoreExtension::length($this->env->getCharset(), ($context["recommendedProducts"] ?? null)) > 0)) {
// line 2496
yield "\t\t<section class=\"py-5\">
\t\t\t<div class=\"container\">
\t\t\t\t<div class=\"section-title text-center mb-5\">
\t\t\t\t\t<h2>Recommandés pour vous</h2>
\t\t\t\t\t<p>Suggestions basées sur votre activité récente et les tendances de MaketOu</p>
\t\t\t\t</div>
\t\t\t\t<div class=\"row g-4\">
\t\t\t\t\t";
// line 2503
$context['_parent'] = $context;
$context['_seq'] = CoreExtension::ensureTraversable(($context["recommendedProducts"] ?? null));
foreach ($context['_seq'] as $context["_key"] => $context["product"]) {
// line 2504
yield "\t\t\t\t\t\t<div class=\"col-12 col-sm-6 col-lg-3\">
\t\t\t\t\t\t\t<div class=\"product-card h-100\">
\t\t\t\t\t\t\t\t";
// line 2506
$context["productImage"] = (((CoreExtension::getAttribute($this->env, $this->source, CoreExtension::getAttribute($this->env, $this->source, $context["product"], "images", [], "any", false, true, false, 2506), 0, [], "array", true, true, false, 2506) && !(null === (($_v4 = CoreExtension::getAttribute($this->env, $this->source, $context["product"], "images", [], "any", false, false, false, 2506)) && is_array($_v4) || $_v4 instanceof ArrayAccess ? ($_v4[0] ?? null) : null)))) ? ((($_v5 = CoreExtension::getAttribute($this->env, $this->source, $context["product"], "images", [], "any", false, false, false, 2506)) && is_array($_v5) || $_v5 instanceof ArrayAccess ? ($_v5[0] ?? null) : null)) : ("ui/img/product/p1.jpg"));
// line 2507
yield "\t\t\t\t\t\t\t\t<div class=\"product-image\" style=\"background-image:url('";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl(($context["productImage"] ?? null)), "html", null, true);
yield "');\">
\t\t\t\t\t\t\t\t\t";
// line 2508
if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, $context["product"], "isFeatured", [], "any", false, false, false, 2508)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
// line 2509
yield "\t\t\t\t\t\t\t\t\t\t<span class=\"product-badge bg-success\">Populaire</span>
\t\t\t\t\t\t\t\t\t";
}
// line 2511
yield "\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t<div class=\"p-3\">
\t\t\t\t\t\t\t\t\t<h6 class=\"mb-2\">
\t\t\t\t\t\t\t\t\t\t<a href=\"";
// line 2514
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", false, false, false, 2514)]), "html", null, true);
yield "\">";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "name", [], "any", false, false, false, 2514), "html", null, true);
yield "</a>
\t\t\t\t\t\t\t\t\t</h6>
\t\t\t\t\t\t\t\t\t<p class=\"mb-2 text-muted small\">
\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-store\"></i>
\t\t\t\t\t\t\t\t\t\t";
// line 2518
if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, $context["product"], "shop", [], "any", false, false, false, 2518)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
// line 2519
yield "\t\t\t\t\t\t\t\t\t\t\t<a href=\"";
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->source, CoreExtension::getAttribute($this->env, $this->source, $context["product"], "shop", [], "any", false, false, false, 2519), "slug", [], "any", false, false, false, 2519)]), "html", null, true);
yield "\">";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, CoreExtension::getAttribute($this->env, $this->source, $context["product"], "shop", [], "any", false, false, false, 2519), "name", [], "any", false, false, false, 2519), "html", null, true);
yield "</a>
\t\t\t\t\t\t\t\t\t\t";
} else {
// line 2521
yield "\t\t\t\t\t\t\t\t\t\t\tBoutique non spécifiée
\t\t\t\t\t\t\t\t\t\t";
}
// line 2523
yield "\t\t\t\t\t\t\t\t\t</p>
\t\t\t\t\t\t\t\t\t<div class=\"d-flex align-items-center justify-content-between\">
\t\t\t\t\t\t\t\t\t\t<span class=\"fw-bold text-primary\">";
// line 2525
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Twig\Extension\CoreExtension']->formatNumber(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "price", [], "any", false, false, false, 2525), 2, ".", " "), "html", null, true);
yield " HTG</span>
\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=\"";
// line 2526
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "id", [], "any", false, false, false, 2526), "html", null, true);
yield "\" data-qty=\"1\">
\t\t\t\t\t\t\t\t\t\t\t<i class=\"ti ti-bag\"></i>
\t\t\t\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t</div>
\t\t\t\t\t";
}
$_parent = $context['_parent'];
unset($context['_seq'], $context['_key'], $context['product'], $context['_parent']);
$context = array_intersect_key($context, $_parent) + $_parent;
// line 2534
yield "\t\t\t\t</div>
\t\t\t</div>
\t\t</section>
\t";
}
// line 2538
yield "
\t";
// line 2539
if ((Twig\Extension\CoreExtension::length($this->env->getCharset(), ($context["recentlyViewedProducts"] ?? null)) > 0)) {
// line 2540
yield "\t\t<section class=\"py-5 bg-light\">
\t\t\t<div class=\"container\">
\t\t\t\t<div class=\"section-title text-center mb-5\">
\t\t\t\t\t<h2>Récemment consultés</h2>
\t\t\t\t\t<p>Retrouvez les articles que vous avez explorés dernièrement</p>
\t\t\t\t</div>
\t\t\t\t<div class=\"featured-gallery-wrapper\">
\t\t\t\t\t<div class=\"featured-gallery-container\">
\t\t\t\t\t\t<div class=\"featured-gallery-grid\">
\t\t\t\t\t\t\t";
// line 2549
$context['_parent'] = $context;
$context['_seq'] = CoreExtension::ensureTraversable(($context["recentlyViewedProducts"] ?? null));
foreach ($context['_seq'] as $context["_key"] => $context["product"]) {
// line 2550
yield "\t\t\t\t\t\t\t\t<div class=\"featured-gallery-item\">
\t\t\t\t\t\t\t\t\t<div class=\"single-product\">
\t\t\t\t\t\t\t\t\t\t<div class=\"product-image-container\">
\t\t\t\t\t\t\t\t\t\t\t<a href=\"";
// line 2553
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", false, false, false, 2553)]), "html", null, true);
yield "\">
\t\t\t\t\t\t\t\t\t\t\t\t";
// line 2554
if ((CoreExtension::getAttribute($this->env, $this->source, $context["product"], "images", [], "any", true, true, false, 2554) && (Twig\Extension\CoreExtension::length($this->env->getCharset(), CoreExtension::getAttribute($this->env, $this->source, $context["product"], "images", [], "any", false, false, false, 2554)) > 0))) {
// line 2555
yield "\t\t\t\t\t\t\t\t\t\t\t\t\t<img class=\"img-fluid main-product-img\" src=\"";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl((($_v6 = CoreExtension::getAttribute($this->env, $this->source, $context["product"], "images", [], "any", false, false, false, 2555)) && is_array($_v6) || $_v6 instanceof ArrayAccess ? ($_v6[0] ?? null) : null)), "html", null, true);
yield "\" alt=\"";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "name", [], "any", false, false, false, 2555), "html", null, true);
yield "\">
\t\t\t\t\t\t\t\t\t\t\t\t";
} else {
// line 2557
yield "\t\t\t\t\t\t\t\t\t\t\t\t\t<img class=\"img-fluid main-product-img\" src=\"";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("ui/img/product/p1.jpg"), "html", null, true);
yield "\" alt=\"";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "name", [], "any", false, false, false, 2557), "html", null, true);
yield "\">
\t\t\t\t\t\t\t\t\t\t\t\t";
}
// line 2559
yield "\t\t\t\t\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t\t<div class=\"product-details\">
\t\t\t\t\t\t\t\t\t\t\t<a href=\"";
// line 2562
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", false, false, false, 2562)]), "html", null, true);
yield "\">
\t\t\t\t\t\t\t\t\t\t\t\t<h6>";
// line 2563
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "name", [], "any", false, false, false, 2563), "html", null, true);
yield "</h6>
\t\t\t\t\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t\t\t\t\t\t<div class=\"price\">
\t\t\t\t\t\t\t\t\t\t\t\t<h6>";
// line 2566
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Twig\Extension\CoreExtension']->formatNumber(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "price", [], "any", false, false, false, 2566), 2, ".", " "), "html", null, true);
yield " HTG</h6>
\t\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t\t\t<div class=\"prd-bottom\">
\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"javascript:void(0)\" class=\"social-info add-to-cart\" data-product-id=\"";
// line 2569
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "id", [], "any", false, false, false, 2569), "html", null, true);
yield "\" data-qty=\"1\">
\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"ti-bag\"></span>
\t\t\t\t\t\t\t\t\t\t\t\t\t<p class=\"hover-text\">+ panier</p>
\t\t\t\t\t\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"";
// line 2573
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", false, false, false, 2573)]), "html", null, true);
yield "\" class=\"social-info\">
\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"lnr lnr-move\"></span>
\t\t\t\t\t\t\t\t\t\t\t\t\t<p class=\"hover-text\">Voir</p>
\t\t\t\t\t\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t";
}
$_parent = $context['_parent'];
unset($context['_seq'], $context['_key'], $context['product'], $context['_parent']);
$context = array_intersect_key($context, $_parent) + $_parent;
// line 2582
yield "\t\t\t\t\t\t</div>
\t\t\t\t\t</div>
\t\t\t\t</div>
\t\t\t</div>
\t\t</section>
\t";
}
// line 2588
yield "
\t<!-- Fonctionnalités -->
\t<section class=\"py-5\">
\t\t<div class=\"container\">
\t\t\t<div class=\"section-title\">
\t\t\t\t<h2>Pourquoi choisir MaketOu ?</h2>
\t\t\t\t<p>Découvrez les avantages de notre plateforme</p>
\t\t\t</div>
\t\t\t<div class=\"row\">
\t\t\t\t<div class=\"col-lg-3 col-md-6 mb-4\">
\t\t\t\t\t<div class=\"feature-card\">
\t\t\t\t\t\t<div class=\"feature-icon\">
\t\t\t\t\t\t\t<i class=\"lnr lnr-rocket\"></i>
\t\t\t\t\t\t</div>
\t\t\t\t\t\t<h5>Livraison rapide</h5>
\t\t\t\t\t\t<p>Recevez vos commandes rapidement avec notre réseau de livraison optimisé</p>
\t\t\t\t\t</div>
\t\t\t\t</div>
\t\t\t\t<div class=\"col-lg-3 col-md-6 mb-4\">
\t\t\t\t\t<div class=\"feature-card\">
\t\t\t\t\t\t<div class=\"feature-icon\">
\t\t\t\t\t\t\t<i class=\"lnr lnr-lock\"></i>
\t\t\t\t\t\t</div>
\t\t\t\t\t\t<h5>Paiement sécurisé</h5>
\t\t\t\t\t\t<p>Vos transactions sont protégées avec les dernières technologies de sécurité</p>
\t\t\t\t\t</div>
\t\t\t\t</div>
\t\t\t\t<div class=\"col-lg-3 col-md-6 mb-4\">
\t\t\t\t\t<div class=\"feature-card\">
\t\t\t\t\t\t<div class=\"feature-icon\">
\t\t\t\t\t\t\t<i class=\"lnr lnr-phone\"></i>
\t\t\t\t\t\t</div>
\t\t\t\t\t\t<h5>Support 24/7</h5>
\t\t\t\t\t\t<p>Notre équipe est disponible pour vous aider à tout moment</p>
\t\t\t\t\t</div>
\t\t\t\t</div>
\t\t\t\t<div class=\"col-lg-3 col-md-6 mb-4\">
\t\t\t\t\t<div class=\"feature-card\">
\t\t\t\t\t\t<div class=\"feature-icon\">
\t\t\t\t\t\t\t<i class=\"lnr lnr-undo\"></i>
\t\t\t\t\t\t</div>
\t\t\t\t\t\t<h5>Retour facile</h5>
\t\t\t\t\t\t<p>Politique de retour flexible pour votre tranquillité d'esprit</p>
\t\t\t\t\t</div>
\t\t\t\t</div>
\t\t\t</div>
\t\t</div>
\t</section>
\t<!-- Newsletter -->
\t<section class=\"newsletter-section-modern py-5\">
\t\t<div class=\"container\">
\t\t\t<div class=\"row justify-content-center\">
\t\t\t\t<div class=\"col-lg-10\">
\t\t\t\t\t<div class=\"newsletter-card\">
\t\t\t\t\t\t<div class=\"row align-items-center\">
\t\t\t\t\t\t\t<div class=\"col-lg-6 text-center text-lg-start mb-4 mb-lg-0\">
\t\t\t\t\t\t\t\t<div class=\"newsletter-icon mb-3\">
\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-envelope\" style=\"font-size: 4rem; color: #ffa200;\"></i>
\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t<h2 class=\"newsletter-title mb-3\">Restez informé des dernières nouveautés</h2>
\t\t\t\t\t\t\t\t<p class=\"newsletter-description mb-0\">
\t\t\t\t\t\t\t\t\tInscrivez-vous à notre newsletter pour recevoir les offres exclusives,
\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.
\t\t\t\t\t\t\t\t</p>
\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t<div class=\"col-lg-6\">
\t\t\t\t\t\t\t\t<form class=\"newsletter-form-modern\" id=\"newsletterFormHome\">
\t\t\t\t\t\t\t\t\t<div class=\"newsletter-input-wrapper\">
\t\t\t\t\t\t\t\t\t\t<input type=\"email\" class=\"newsletter-input\" placeholder=\"Votre adresse email\" required name=\"email\">
\t\t\t\t\t\t\t\t\t\t<button class=\"newsletter-button\" type=\"submit\">
\t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-arrow-right me-2\"></i>
\t\t\t\t\t\t\t\t\t\t\tS'abonner
\t\t\t\t\t\t\t\t\t\t</button>
\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t<p class=\"newsletter-privacy mt-3 text-center\">
\t\t\t\t\t\t\t\t\t\t<small>
\t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-lock me-1\"></i>
\t\t\t\t\t\t\t\t\t\t\tVos données sont sécurisées. Pas de spam, désinscription facile.
\t\t\t\t\t\t\t\t\t\t</small>
\t\t\t\t\t\t\t\t\t</p>
\t\t\t\t\t\t\t\t</form>
\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t</div>
\t\t\t\t\t</div>
\t\t\t\t</div>
\t\t\t</div>
\t\t</div>
\t</section>
\t<!-- Call to Action -->
\t<section class=\"cta-section-modern py-5\">
\t\t<div class=\"container\">
\t\t\t<div class=\"cta-card\">
\t\t\t\t<div class=\"row align-items-center\">
\t\t\t\t\t<div class=\"col-lg-6 mb-4 mb-lg-0\">
\t\t\t\t\t\t<div class=\"cta-content\">
\t\t\t\t\t\t\t<span class=\"cta-badge\">
\t\t\t\t\t\t\t\t<i class=\"lnr lnr-rocket me-2\"></i>
\t\t\t\t\t\t\t\tCommencez dès aujourd'hui
\t\t\t\t\t\t\t</span>
\t\t\t\t\t\t\t<h2 class=\"cta-title mb-3\">Prêt à commencer ?</h2>
\t\t\t\t\t\t\t<p class=\"cta-description mb-4\">
\t\t\t\t\t\t\t\tQue vous soyez
\t\t\t\t\t\t\t\t<strong>acheteur</strong>
\t\t\t\t\t\t\t\tou
\t\t\t\t\t\t\t\t<strong>vendeur</strong>, MaketOu vous offre la plateforme idéale
\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 !
\t\t\t\t\t\t\t</p>
\t\t\t\t\t\t\t<div class=\"cta-features mb-4\">
\t\t\t\t\t\t\t\t<div class=\"cta-feature-item\">
\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-checkmark-circle\"></i>
\t\t\t\t\t\t\t\t\t<span>Plateforme 100% sécurisée</span>
\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t<div class=\"cta-feature-item\">
\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-checkmark-circle\"></i>
\t\t\t\t\t\t\t\t\t<span>Support client 24/7</span>
\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t<div class=\"cta-feature-item\">
\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-checkmark-circle\"></i>
\t\t\t\t\t\t\t\t\t<span>Paiements multiples</span>
\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t<div class=\"cta-buttons\">
\t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn cta-button-primary\" onclick=\"openReadyModal()\">
\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-rocket me-2\"></i>
\t\t\t\t\t\t\t\t\tPrêt à commencer ?
\t\t\t\t\t\t\t\t</button>
\t\t\t\t\t\t\t\t<a href=\"";
// line 2716
yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("ui_listing");
yield "\" class=\"btn cta-button-secondary\">
\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-magnifier me-2\"></i>
\t\t\t\t\t\t\t\t\tVoir les produits
\t\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t</div>
\t\t\t\t\t</div>
\t\t\t\t\t<div class=\"col-lg-6\">
\t\t\t\t\t\t<div class=\"cta-image-wrapper\">
\t\t\t\t\t\t\t<div class=\"cta-decoration\"></div>
\t\t\t\t\t\t\t<img src=\"";
// line 2726
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("Start.png"), "html", null, true);
yield "\" alt=\"MaketOu\" class=\"cta-image\">
\t\t\t\t\t\t</div>
\t\t\t\t\t</div>
\t\t\t\t</div>
\t\t\t</div>
\t\t</div>
\t</section>
";
$__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
$__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
yield from [];
}
// line 2735
/**
* @return iterable<null|scalar|\Stringable>
*/
public function block_javascripts(array $context, array $blocks = []): iterable
{
$macros = $this->macros;
$__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
$__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "javascripts"));
$__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
$__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "javascripts"));
// line 2736
yield "\t<script src=\"";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("ui/js/product-unified.js"), "html", null, true);
yield "\"></script>
\t<script>
\t\twindow.openReadyModal = function () {
\t\t\tconst modalEl = document.getElementById('readyModal');
\t\t\tif (!modalEl) {
\t\t\t\tconsole.error('readyModal introuvable');
\t\t\t\treturn;
\t\t\t}
\t\t\tif (typeof bootstrap === 'undefined' || !bootstrap.Modal) {
\t\t\t\tconsole.error('Bootstrap Modal non chargé');
\t\t\t\treturn;
\t\t\t}
\t\t\tconst modalInstance = bootstrap.Modal.getOrCreateInstance(modalEl);
\t\t\tmodalInstance.show();
\t\t};
\t</script>
\t<script>
\t\t// Variables globales pour la navigation des images (si pas déjà définies)
\t\tif (typeof productImages === 'undefined') {
\t\t\twindow.productImages = {};
\t\t\twindow.currentImageIndex = {};
\t\t}
// Initialisation des données d'images pour les produits \"Produits en vedette\"
";
// line 2760
if (array_key_exists("featuredProducts", $context)) {
// line 2761
$context['_parent'] = $context;
$context['_seq'] = CoreExtension::ensureTraversable(($context["featuredProducts"] ?? null));
foreach ($context['_seq'] as $context["_key"] => $context["product"]) {
// line 2762
if ((CoreExtension::getAttribute($this->env, $this->source, $context["product"], "images", [], "any", true, true, false, 2762) && (Twig\Extension\CoreExtension::length($this->env->getCharset(), CoreExtension::getAttribute($this->env, $this->source, $context["product"], "images", [], "any", false, false, false, 2762)) > 0))) {
// line 2763
yield "productImages[";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "id", [], "any", false, false, false, 2763), "html", null, true);
yield "] = [";
$context['_parent'] = $context;
$context['_seq'] = CoreExtension::ensureTraversable(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "images", [], "any", false, false, false, 2763));
$context['loop'] = [
'parent' => $context['_parent'],
'index0' => 0,
'index' => 1,
'first' => true,
];
if (is_array($context['_seq']) || (is_object($context['_seq']) && $context['_seq'] instanceof \Countable)) {
$length = count($context['_seq']);
$context['loop']['revindex0'] = $length - 1;
$context['loop']['revindex'] = $length;
$context['loop']['length'] = $length;
$context['loop']['last'] = 1 === $length;
}
foreach ($context['_seq'] as $context["_key"] => $context["img"]) {
yield "'";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl($context["img"]), "html", null, true);
yield "'";
if ((($tmp = !CoreExtension::getAttribute($this->env, $this->source, $context["loop"], "last", [], "any", false, false, false, 2763)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
yield ",";
}
++$context['loop']['index0'];
++$context['loop']['index'];
$context['loop']['first'] = false;
if (isset($context['loop']['revindex0'], $context['loop']['revindex'])) {
--$context['loop']['revindex0'];
--$context['loop']['revindex'];
$context['loop']['last'] = 0 === $context['loop']['revindex0'];
}
}
$_parent = $context['_parent'];
unset($context['_seq'], $context['_key'], $context['img'], $context['_parent'], $context['loop']);
$context = array_intersect_key($context, $_parent) + $_parent;
yield "];
currentImageIndex[";
// line 2764
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "id", [], "any", false, false, false, 2764), "html", null, true);
yield "] = 0;";
}
}
$_parent = $context['_parent'];
unset($context['_seq'], $context['_key'], $context['product'], $context['_parent']);
$context = array_intersect_key($context, $_parent) + $_parent;
}
// line 2765
yield "
// Initialisation des données d'images pour les produits \"Nouveautés\"
";
// line 2767
if (array_key_exists("latestProducts", $context)) {
// line 2768
$context['_parent'] = $context;
$context['_seq'] = CoreExtension::ensureTraversable(($context["latestProducts"] ?? null));
foreach ($context['_seq'] as $context["_key"] => $context["product"]) {
// line 2769
if ((CoreExtension::getAttribute($this->env, $this->source, $context["product"], "images", [], "any", true, true, false, 2769) && (Twig\Extension\CoreExtension::length($this->env->getCharset(), CoreExtension::getAttribute($this->env, $this->source, $context["product"], "images", [], "any", false, false, false, 2769)) > 0))) {
// line 2770
yield "productImages[";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "id", [], "any", false, false, false, 2770), "html", null, true);
yield "] = [";
$context['_parent'] = $context;
$context['_seq'] = CoreExtension::ensureTraversable(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "images", [], "any", false, false, false, 2770));
$context['loop'] = [
'parent' => $context['_parent'],
'index0' => 0,
'index' => 1,
'first' => true,
];
if (is_array($context['_seq']) || (is_object($context['_seq']) && $context['_seq'] instanceof \Countable)) {
$length = count($context['_seq']);
$context['loop']['revindex0'] = $length - 1;
$context['loop']['revindex'] = $length;
$context['loop']['length'] = $length;
$context['loop']['last'] = 1 === $length;
}
foreach ($context['_seq'] as $context["_key"] => $context["img"]) {
yield "'";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl($context["img"]), "html", null, true);
yield "'";
if ((($tmp = !CoreExtension::getAttribute($this->env, $this->source, $context["loop"], "last", [], "any", false, false, false, 2770)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
yield ",";
}
++$context['loop']['index0'];
++$context['loop']['index'];
$context['loop']['first'] = false;
if (isset($context['loop']['revindex0'], $context['loop']['revindex'])) {
--$context['loop']['revindex0'];
--$context['loop']['revindex'];
$context['loop']['last'] = 0 === $context['loop']['revindex0'];
}
}
$_parent = $context['_parent'];
unset($context['_seq'], $context['_key'], $context['img'], $context['_parent'], $context['loop']);
$context = array_intersect_key($context, $_parent) + $_parent;
yield "];
currentImageIndex[";
// line 2771
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "id", [], "any", false, false, false, 2771), "html", null, true);
yield "] = 0;";
}
}
$_parent = $context['_parent'];
unset($context['_seq'], $context['_key'], $context['product'], $context['_parent']);
$context = array_intersect_key($context, $_parent) + $_parent;
}
// line 2772
yield "
console.log('SCRIPT LOADED - Featured Gallery');
(function () {
\t'use strict';
\tconst SECTION_CONFIGS = [
\t\t{ grid: '#featuredGalleryGrid', prev: '#featuredGalleryPrev', next: '#featuredGalleryNext' },
\t\t{ grid: '#latestGalleryGrid', prev: '#latestGalleryPrev', next: '#latestGalleryNext' }
\t];
\tfunction triggerRipple(button) {
\t\tbutton.classList.remove('btn-ripple');
\t\tvoid button.offsetWidth;
\t\tbutton.classList.add('btn-ripple');
\t\tsetTimeout(() => button.classList.remove('btn-ripple'), 350);
\t}
\tfunction initSectionCarousel(config) {
\t\tconst \$grid = \$(config.grid);
\t\tif (!\$grid.length) {
\t\t\tconsole.warn('Grid not found:', config.grid);
\t\t\treturn;
\t\t}
\t\tif (typeof \$.fn.owlCarousel !== 'function') {
\t\t\tconsole.warn('OwlCarousel n\\'est pas chargé pour', config.grid);
\t\t\treturn;
\t\t}
\t\t// Si déjà initialisé, récupérer l'instance existante
\t\tlet owlInstance;
\t\tif (\$grid.hasClass('owl-loaded')) {
\t\t\towlInstance = \$grid.data('owl.carousel');
\t\t\tconsole.log('OwlCarousel already initialized for', config.grid, owlInstance);
\t\t} else {
\t\t\tif (!\$grid.hasClass('owl-carousel')) {
\t\t\t\t\$grid.addClass('owl-carousel');
\t\t\t}
\t\t\towlInstance = \$grid.owlCarousel({
\t\t\t\tloop: true,
\t\t\t\tmargin: 30,
\t\t\t\tautoplay: true,
\t\t\t\tautoplayTimeout: 4800,
\t\t\t\tautoplayHoverPause: true,
\t\t\t\tsmartSpeed: 650,
\t\t\t\tnav: false,
\t\t\t\tdots: false,
\t\t\t\tresponsive: {
\t\t\t\t\t0: { items: 1, margin: 15 },
\t\t\t\t\t576: { items: 1.2, margin: 18 },
\t\t\t\t\t768: { items: 2, margin: 20 },
\t\t\t\t\t992: { items: 3, margin: 25 },
\t\t\t\t\t1400: { items: 4, margin: 30 }
\t\t\t\t}
\t\t\t});
\t\t\tconsole.log('OwlCarousel initialized for', config.grid, owlInstance);
\t\t}
\t\tconst \$prev = \$(config.prev);
\t\tconst \$next = \$(config.next);
\t\tif (\$prev.length) {
\t\t\t\$prev.off('click.carouselNav').on('click.carouselNav', function (e) {
\t\t\t\te.preventDefault();
\t\t\t\te.stopPropagation();
\t\t\t\tconsole.log('Prev clicked for', config.grid, 'Instance:', owlInstance);
\t\t\t\tif (owlInstance) {
\t\t\t\t\ttry {
\t\t\t\t\t\t\$grid.trigger('prev.owl.carousel');
\t\t\t\t\t\ttriggerRipple(this);
\t\t\t\t\t} catch (err) {
\t\t\t\t\t\tconsole.error('Error triggering prev:', err);
\t\t\t\t\t}
\t\t\t\t} else {
\t\t\t\t\tconsole.error('OwlCarousel instance not available');
\t\t\t\t}
\t\t\t});
\t\t} else {
\t\t\tconsole.warn('Prev button not found:', config.prev);
\t\t}
\t\tif (\$next.length) {
\t\t\t\$next.off('click.carouselNav').on('click.carouselNav', function (e) {
\t\t\t\te.preventDefault();
\t\t\t\te.stopPropagation();
\t\t\t\tconsole.log('Next clicked for', config.grid, 'Instance:', owlInstance);
\t\t\t\tif (owlInstance) {
\t\t\t\t\ttry {
\t\t\t\t\t\t\$grid.trigger('next.owl.carousel');
\t\t\t\t\t\ttriggerRipple(this);
\t\t\t\t\t} catch (err) {
\t\t\t\t\t\tconsole.error('Error triggering next:', err);
\t\t\t\t\t}
\t\t\t\t} else {
\t\t\t\t\tconsole.error('OwlCarousel instance not available');
\t\t\t\t}
\t\t\t});
\t\t} else {
\t\t\tconsole.warn('Next button not found:', config.next);
\t\t}
\t}
\tfunction ensureOwl(attempt = 0) {
\t\tif (window.jQuery && typeof \$.fn !== 'undefined' && typeof \$.fn.owlCarousel === 'function') {
\t\t\tSECTION_CONFIGS.forEach(initSectionCarousel);
\t\t} else if (attempt < 15) {
\t\t\tsetTimeout(() => ensureOwl(attempt + 1), 200);
\t\t} else {
\t\t\tconsole.warn('OwlCarousel non disponible après plusieurs tentatives');
\t\t}
\t}
\tdocument.addEventListener('DOMContentLoaded', function () {
\t\tensureOwl();
\t});
})();
document.addEventListener('DOMContentLoaded', function () { // Animation des cartes au scroll
const observerOptions = {
threshold: 0.1,
rootMargin: '0px 0px -50px 0px'
};
const observer = new IntersectionObserver(function (entries) {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.style.opacity = '1';
entry.target.style.transform = 'translateY(0)';
}
});
}, observerOptions);
// Observer toutes les cartes
document.querySelectorAll('.stats-card, .category-card, .product-card, .feature-card').forEach(card => {
card.style.opacity = '0';
card.style.transform = 'translateY(30px)';
card.style.transition = 'all 0.6s ease';
observer.observe(card);
});
// Compteur animé pour les statistiques
function animateCounter(element, target, duration = 2000) {
let start = 0;
const increment = target / (duration / 16);
function updateCounter() {
start += increment;
if (start < target) {
element.textContent = Math.floor(start).toLocaleString();
requestAnimationFrame(updateCounter);
} else {
element.textContent = target.toLocaleString();
}
}
updateCounter();
}
// Animer les compteurs quand ils sont visibles
const statsObserver = new IntersectionObserver(function (entries) {
entries.forEach(entry => {
if (entry.isIntersecting) {
const numberElement = entry.target.querySelector('.stats-number');
const target = parseInt(numberElement.textContent.replace(/,/g, ''));
animateCounter(numberElement, target);
statsObserver.unobserve(entry.target);
}
});
});
document.querySelectorAll('.stats-card').forEach(card => {
statsObserver.observe(card);
});
// Gestion de la newsletter
const newsletterForm = document.querySelector('.newsletter-form');
if (newsletterForm) {
newsletterForm.addEventListener('submit', function (e) {
e.preventDefault();
const email = this.querySelector('input[type=\"email\"]').value;
const button = this.querySelector('button');
const originalText = button.innerHTML;
// Désactiver le bouton
button.disabled = true;
button.innerHTML = '<i class=\"lnr lnr-spinner me-2\"></i>Inscription...';
// Envoyer la requête
fetch('";
// line 2961
yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("ui_newsletter_subscribe");
yield "', {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'X-Requested-With': 'XMLHttpRequest'
},
body: 'email=' + encodeURIComponent(email)
}).then(response => response.json()).then(data => {
if (data.success) {
button.innerHTML = '<i class=\"lnr lnr-check me-2\"></i>Inscription réussie !';
button.classList.remove('btn-warning');
button.classList.add('btn-success');
this.reset();
} else {
button.innerHTML = '<i class=\"lnr lnr-warning me-2\"></i>Erreur';
button.classList.remove('btn-warning');
button.classList.add('btn-danger');
}
setTimeout(() => {
button.innerHTML = originalText;
button.classList.remove('btn-success', 'btn-danger');
button.classList.add('btn-warning');
button.disabled = false;
}, 3000);
}).catch(error => {
console.error('Erreur:', error);
button.innerHTML = '<i class=\"lnr lnr-warning me-2\"></i>Erreur';
button.classList.remove('btn-warning');
button.classList.add('btn-danger');
setTimeout(() => {
button.innerHTML = originalText;
button.classList.remove('btn-danger');
button.classList.add('btn-warning');
button.disabled = false;
}, 3000);
});
});
}
});
// Effet parallaxe léger pour le hero
window.addEventListener('scroll', function () {
const scrolled = window.pageYOffset;
const hero = document.querySelector('.hero-banner');
if (hero) {
hero.style.transform = `translateY(\${
scrolled * 0.5
}px)`;
}
});
});
// Fonction pour afficher toutes les catégories
function showAllCategories () {
const container = document.getElementById('productCategoriesContainer');
const btn = document.getElementById('showAllCategoriesBtn');";
// line 3018
if ((Twig\Extension\CoreExtension::length($this->env->getCharset(), ($context["allCategories"] ?? null)) > 8)) {
$context['_parent'] = $context;
$context['_seq'] = CoreExtension::ensureTraversable(($context["allCategories"] ?? null));
$context['loop'] = [
'parent' => $context['_parent'],
'index0' => 0,
'index' => 1,
'first' => true,
];
if (is_array($context['_seq']) || (is_object($context['_seq']) && $context['_seq'] instanceof \Countable)) {
$length = count($context['_seq']);
$context['loop']['revindex0'] = $length - 1;
$context['loop']['revindex'] = $length;
$context['loop']['length'] = $length;
$context['loop']['last'] = 1 === $length;
}
foreach ($context['_seq'] as $context["_key"] => $context["category"]) {
if ((CoreExtension::getAttribute($this->env, $this->source, $context["loop"], "index", [], "any", false, false, false, 3018) > 8)) {
yield "const categoryHtml ";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["loop"], "index", [], "any", false, false, false, 3018), "html", null, true);
yield " = `
<div class=\"col-lg-3 col-md-4 col-sm-6 mb-4\">
<div class=\"category-card-custom\">
<div class=\"category-image-wrapper\">
<div class=\"category-image\" style=\"background-image: url('";
// line 3022
if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, $context["category"], "bannerImage", [], "any", false, false, false, 3022)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
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", false, false, false, 3022))), "html", null, true);
} else {
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", false, false, false, 3022)) . ".jpg")), "html", null, true);
}
yield "')\">
<div class=\"category-overlay-custom\">
<div class=\"category-icon-wrapper\">
<i class=\"lnr lnr-tag\" style=\"font-size: 3rem;\"></i>
<h4 class=\"mt-3\">";
// line 3026
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["category"], "name", [], "any", false, false, false, 3026), "html", null, true);
yield "</h4>
</div>
</div>
</div>
</div>
<div class=\"category-content p-3\">
<h5 class=\"mb-2\">";
// line 3032
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["category"], "name", [], "any", false, false, false, 3032), "html", null, true);
yield "</h5>
";
// line 3033
if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, $context["category"], "description", [], "any", false, false, false, 3033)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
// line 3034
yield " <p class=\"text-muted mb-3 small\">";
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", false, false, false, 3034)), 0, 60), "html", null, true);
if ((Twig\Extension\CoreExtension::length($this->env->getCharset(), Twig\Extension\CoreExtension::striptags(CoreExtension::getAttribute($this->env, $this->source, $context["category"], "description", [], "any", false, false, false, 3034))) > 60)) {
yield "...";
}
yield "</p>
";
}
// line 3036
yield " <a href=\"";
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", false, false, false, 3036)]), "html", null, true);
yield "\" class=\"btn btn-primary-custom btn-sm w-100\">
Voir les produits
</a>
</div>
</div>
</div>
`;
container.insertAdjacentHTML('beforeend', categoryHtml ";
// line 3043
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["loop"], "index", [], "any", false, false, false, 3043), "html", null, true);
yield ");";
}
++$context['loop']['index0'];
++$context['loop']['index'];
$context['loop']['first'] = false;
if (isset($context['loop']['revindex0'], $context['loop']['revindex'])) {
--$context['loop']['revindex0'];
--$context['loop']['revindex'];
$context['loop']['last'] = 0 === $context['loop']['revindex0'];
}
}
$_parent = $context['_parent'];
unset($context['_seq'], $context['_key'], $context['category'], $context['_parent'], $context['loop']);
$context = array_intersect_key($context, $_parent) + $_parent;
}
yield "if (btn)
btn.style.display = 'none';
}
// Fonction pour afficher toutes les catégories de boutiques
function showAllShopCategories () {
const container = document.getElementById('shopCategoriesContainer');
const btn = document.querySelector('[onclick=\"showAllShopCategories()\"]') ?. parentElement;";
// line 3053
if ((Twig\Extension\CoreExtension::length($this->env->getCharset(), ($context["allShopCategories"] ?? null)) > 6)) {
$context['_parent'] = $context;
$context['_seq'] = CoreExtension::ensureTraversable(($context["allShopCategories"] ?? null));
$context['loop'] = [
'parent' => $context['_parent'],
'index0' => 0,
'index' => 1,
'first' => true,
];
if (is_array($context['_seq']) || (is_object($context['_seq']) && $context['_seq'] instanceof \Countable)) {
$length = count($context['_seq']);
$context['loop']['revindex0'] = $length - 1;
$context['loop']['revindex'] = $length;
$context['loop']['length'] = $length;
$context['loop']['last'] = 1 === $length;
}
foreach ($context['_seq'] as $context["_key"] => $context["shopCategory"]) {
if ((CoreExtension::getAttribute($this->env, $this->source, $context["loop"], "index", [], "any", false, false, false, 3053) > 6)) {
yield "const shopCategoryHtml ";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["loop"], "index", [], "any", false, false, false, 3053), "html", null, true);
yield " = `
<div class=\"col-lg-4 col-md-6 mb-4\">
<a href=\"";
// line 3055
yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("ui_shops_list");
yield "?category=";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["shopCategory"], "slug", [], "any", false, false, false, 3055), "html", null, true);
yield "\" class=\"text-decoration-none\" style=\"display: block;\">
<div class=\"category-card-custom shop-category-clickable\">
<div class=\"category-image-wrapper\">
<div class=\"category-image\" style=\"background-image: url('";
// line 3058
if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, $context["shopCategory"], "bannerImage", [], "any", false, false, false, 3058)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
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", false, false, false, 3058)), "html", null, true);
} else {
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", false, false, false, 3058)) . ".jpg")), "html", null, true);
}
yield "')\">
<div class=\"category-overlay-custom\">
<div class=\"category-icon-wrapper\">
<i class=\"lnr lnr-store\" style=\"font-size: 3rem;\"></i>
<h4 class=\"mt-3\">";
// line 3062
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["shopCategory"], "name", [], "any", false, false, false, 3062), "html", null, true);
yield "</h4>
";
// line 3063
if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, $context["shopCategory"], "description", [], "any", false, false, false, 3063)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
// line 3064
yield " <p class=\"mt-2 px-3\">";
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", false, false, false, 3064)), 0, 100), "html", null, true);
if ((Twig\Extension\CoreExtension::length($this->env->getCharset(), Twig\Extension\CoreExtension::striptags(CoreExtension::getAttribute($this->env, $this->source, $context["shopCategory"], "description", [], "any", false, false, false, 3064))) > 100)) {
yield "...";
}
yield "</p>
";
}
// line 3066
yield " </div>
</div>
</div>
</div>
<div class=\"category-content p-3\">
<h5 class=\"mb-2\">";
// line 3071
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["shopCategory"], "name", [], "any", false, false, false, 3071), "html", null, true);
yield "</h5>
";
// line 3072
if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, $context["shopCategory"], "description", [], "any", false, false, false, 3072)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
// line 3073
yield " <p class=\"text-muted mb-3 small\">";
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", false, false, false, 3073)), 0, 80), "html", null, true);
if ((Twig\Extension\CoreExtension::length($this->env->getCharset(), Twig\Extension\CoreExtension::striptags(CoreExtension::getAttribute($this->env, $this->source, $context["shopCategory"], "description", [], "any", false, false, false, 3073))) > 80)) {
yield "...";
}
yield "</p>
";
}
// line 3075
yield " <span class=\"btn btn-primary-custom btn-sm w-100\">
Voir les boutiques <i class=\"lnr lnr-arrow-right ms-2\"></i>
</span>
</div>
</div>
</a>
</div>
`;
container.insertAdjacentHTML('beforeend', shopCategoryHtml ";
// line 3083
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["loop"], "index", [], "any", false, false, false, 3083), "html", null, true);
yield ");";
}
++$context['loop']['index0'];
++$context['loop']['index'];
$context['loop']['first'] = false;
if (isset($context['loop']['revindex0'], $context['loop']['revindex'])) {
--$context['loop']['revindex0'];
--$context['loop']['revindex'];
$context['loop']['last'] = 0 === $context['loop']['revindex0'];
}
}
$_parent = $context['_parent'];
unset($context['_seq'], $context['_key'], $context['shopCategory'], $context['_parent'], $context['loop']);
$context = array_intersect_key($context, $_parent) + $_parent;
}
yield "if (btn)
btn.style.display = 'none';
}
// Initialiser les carousels
<script src=\"";
// line 3091
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("ui/js/product-unified.js"), "html", null, true);
yield "\"></script>
<script>
document.addEventListener('DOMContentLoaded', function() {
// Init featured products images
";
// line 3095
if (array_key_exists("featuredProducts", $context)) {
// line 3096
yield " ";
$context['_parent'] = $context;
$context['_seq'] = CoreExtension::ensureTraversable(($context["featuredProducts"] ?? null));
foreach ($context['_seq'] as $context["_key"] => $context["product"]) {
// line 3097
yield " ";
if ((CoreExtension::getAttribute($this->env, $this->source, $context["product"], "images", [], "any", true, true, false, 3097) && (Twig\Extension\CoreExtension::length($this->env->getCharset(), CoreExtension::getAttribute($this->env, $this->source, $context["product"], "images", [], "any", false, false, false, 3097)) > 0))) {
// line 3098
yield " if (typeof initProductImages === 'function') {
initProductImages(";
// line 3099
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "id", [], "any", false, false, false, 3099), "html", null, true);
yield ", ";
yield json_encode(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "images", [], "any", false, false, false, 3099));
yield ");
}
";
}
// line 3102
yield " ";
}
$_parent = $context['_parent'];
unset($context['_seq'], $context['_key'], $context['product'], $context['_parent']);
$context = array_intersect_key($context, $_parent) + $_parent;
// line 3103
yield " ";
}
// line 3104
yield "
// Init latest products images
";
// line 3106
if (array_key_exists("latestProducts", $context)) {
// line 3107
yield " ";
$context['_parent'] = $context;
$context['_seq'] = CoreExtension::ensureTraversable(($context["latestProducts"] ?? null));
foreach ($context['_seq'] as $context["_key"] => $context["product"]) {
// line 3108
yield " ";
if ((CoreExtension::getAttribute($this->env, $this->source, $context["product"], "images", [], "any", true, true, false, 3108) && (Twig\Extension\CoreExtension::length($this->env->getCharset(), CoreExtension::getAttribute($this->env, $this->source, $context["product"], "images", [], "any", false, false, false, 3108)) > 0))) {
// line 3109
yield " if (typeof initProductImages === 'function') {
initProductImages(";
// line 3110
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "id", [], "any", false, false, false, 3110), "html", null, true);
yield ", ";
yield json_encode(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "images", [], "any", false, false, false, 3110));
yield ");
}
";
}
// line 3113
yield " ";
}
$_parent = $context['_parent'];
unset($context['_seq'], $context['_key'], $context['product'], $context['_parent']);
$context = array_intersect_key($context, $_parent) + $_parent;
// line 3114
yield " ";
}
// line 3115
yield " });
</script>
<script>
\$(document).ready(function () { // Carousel bannière principale
if (\$('.active-banner-slider').length) {
\$('.active-banner-slider').owlCarousel({
items: 1,
loop: true,
autoplay: true,
autoplayTimeout: 6000,
autoplayHoverPause: true,
nav: true,
dots: true,
navText: [
'<i class=\"lnr lnr-chevron-left\"></i>', '<i class=\"lnr lnr-chevron-right\"></i>'
],
smartSpeed: 1000,
animateOut: 'fadeOut',
animateIn: 'fadeIn',
responsive: {
0: {
items: 1,
nav: true,
dots: true
},
768: {
items: 1,
nav: true,
dots: true
},
992: {
items: 1,
nav: true,
dots: true
}
}
});
}
// Animation d'apparition pour les cartes produits
const observerOptions = {
threshold: 0.1,
rootMargin: '0px 0px -50px 0px'
};
const productObserver = new IntersectionObserver(function (entries) {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.style.opacity = '1';
entry.target.style.transform = 'translateY(0)';
}
});
}, observerOptions);
document.querySelectorAll('.product-card-modern').forEach((card, index) => {
card.style.opacity = '0';
card.style.transform = 'translateY(20px)';
card.style.transition = `opacity 0.6s ease \${
index * 0.1
}s, transform 0.6s ease \${
index * 0.1
}s`;
productObserver.observe(card);
});
});
\t</script>
\t<!-- Modal \"Prêt à commencer ?\" -->
\t<div class=\"modal fade\" id=\"readyModal\" tabindex=\"-1\">
\t\t<div class=\"modal-dialog modal-dialog-centered\">
\t\t\t<div class=\"modal-content\">
\t\t\t\t<div class=\"modal-header\">
\t\t\t\t\t<h5 class=\"modal-title\">
\t\t\t\t\t\t<i class=\"lnr lnr-rocket me-2\"></i>Prêt à commencer ?
\t\t\t\t\t</h5>
\t\t\t\t\t<button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\"></button>
\t\t\t\t</div>
\t\t\t\t<div class=\"modal-body\">
\t\t\t\t\t";
// line 3193
if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, ($context["app"] ?? null), "user", [], "any", false, false, false, 3193)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
// line 3194
yield "\t\t\t\t\t\t";
if ((CoreExtension::getAttribute($this->env, $this->source, CoreExtension::getAttribute($this->env, $this->source, ($context["app"] ?? null), "user", [], "any", false, false, false, 3194), "kycStatus", [], "any", false, false, false, 3194) == "verified")) {
// line 3195
yield "\t\t\t\t\t\t\t<div class=\"text-center\">
\t\t\t\t\t\t\t\t<i class=\"lnr lnr-checkmark-circle\" style=\"font-size: 4rem; color: #28a745;\"></i>
\t\t\t\t\t\t\t\t<h4 class=\"mt-3\">Votre compte est vérifié !</h4>
\t\t\t\t\t\t\t\t<p class=\"text-muted\">Vous pouvez commencer à utiliser MaketOu en toute sérénité.</p>
\t\t\t\t\t\t\t\t<div class=\"mt-4\">
\t\t\t\t\t\t\t\t\t<a href=\"";
// line 3200
yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("seller_index");
yield "\" class=\"btn btn-primary me-2\">
\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-store me-1\"></i>Ouvrir ma boutique
\t\t\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t\t\t\t<a href=\"";
// line 3203
yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("ui_listing");
yield "\" class=\"btn btn-outline-primary\">
\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-magnifier me-1\"></i>Voir les produits
\t\t\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t";
} else {
// line 3209
yield "\t\t\t\t\t\t\t<div class=\"text-center\">
\t\t\t\t\t\t\t\t<i class=\"lnr lnr-shield\" style=\"font-size: 4rem; color: #ffa200;\"></i>
\t\t\t\t\t\t\t\t<h4 class=\"mt-3\">Vérification requise</h4>
\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>
\t\t\t\t\t\t\t\t<div class=\"mt-4\">
\t\t\t\t\t\t\t\t\t<a href=\"";
// line 3214
yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("ui_account_kyc");
yield "\" class=\"btn btn-primary btn-lg\">
\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>
\t\t\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t";
}
// line 3220
yield "\t\t\t\t\t";
} else {
// line 3221
yield "\t\t\t\t\t\t<div class=\"text-center\">
\t\t\t\t\t\t\t<i class=\"lnr lnr-user\" style=\"font-size: 4rem; color: #007bff;\"></i>
\t\t\t\t\t\t\t<h4 class=\"mt-3\">Connectez-vous pour commencer</h4>
\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>
\t\t\t\t\t\t\t<div class=\"mt-4\">
\t\t\t\t\t\t\t\t<a href=\"";
// line 3226
yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("ui_app_login");
yield "\" class=\"btn btn-primary btn-lg me-2\">
\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-enter me-1\"></i> Se connecter
\t\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t\t\t<a href=\"";
// line 3229
yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("ui_app_register");
yield "\" class=\"btn btn-outline-primary btn-lg\">
\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-user-plus me-1\"></i> S'inscrire
\t\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t</div>
\t\t\t\t\t";
}
// line 3235
yield "\t\t\t\t</div>
\t\t\t</div>
\t\t</div>
\t</div>
";
$__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
$__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
yield from [];
}
/**
* @codeCoverageIgnore
*/
public function getTemplateName(): string
{
return "home/index.html.twig";
}
/**
* @codeCoverageIgnore
*/
public function isTraitable(): bool
{
return false;
}
/**
* @codeCoverageIgnore
*/
public function getDebugInfo(): array
{
return array ( 4354 => 3235, 4345 => 3229, 4339 => 3226, 4332 => 3221, 4329 => 3220, 4320 => 3214, 4313 => 3209, 4304 => 3203, 4298 => 3200, 4291 => 3195, 4288 => 3194, 4286 => 3193, 4206 => 3115, 4203 => 3114, 4197 => 3113, 4189 => 3110, 4186 => 3109, 4183 => 3108, 4178 => 3107, 4176 => 3106, 4172 => 3104, 4169 => 3103, 4163 => 3102, 4155 => 3099, 4152 => 3098, 4149 => 3097, 4144 => 3096, 4142 => 3095, 4135 => 3091, 4109 => 3083, 4099 => 3075, 4090 => 3073, 4088 => 3072, 4084 => 3071, 4077 => 3066, 4068 => 3064, 4066 => 3063, 4062 => 3062, 4051 => 3058, 4043 => 3055, 4019 => 3053, 3991 => 3043, 3980 => 3036, 3971 => 3034, 3969 => 3033, 3965 => 3032, 3956 => 3026, 3945 => 3022, 3919 => 3018, 3859 => 2961, 3668 => 2772, 3659 => 2771, 3619 => 2770, 3617 => 2769, 3613 => 2768, 3611 => 2767, 3607 => 2765, 3598 => 2764, 3558 => 2763, 3556 => 2762, 3552 => 2761, 3550 => 2760, 3522 => 2736, 3509 => 2735, 3490 => 2726, 3477 => 2716, 3347 => 2588, 3339 => 2582, 3324 => 2573, 3317 => 2569, 3311 => 2566, 3305 => 2563, 3301 => 2562, 3296 => 2559, 3288 => 2557, 3280 => 2555, 3278 => 2554, 3274 => 2553, 3269 => 2550, 3265 => 2549, 3254 => 2540, 3252 => 2539, 3249 => 2538, 3243 => 2534, 3229 => 2526, 3225 => 2525, 3221 => 2523, 3217 => 2521, 3209 => 2519, 3207 => 2518, 3198 => 2514, 3193 => 2511, 3189 => 2509, 3187 => 2508, 3182 => 2507, 3180 => 2506, 3176 => 2504, 3172 => 2503, 3163 => 2496, 3161 => 2495, 3158 => 2494, 3147 => 2486, 3122 => 2463, 3107 => 2454, 3092 => 2450, 3077 => 2446, 3070 => 2442, 3066 => 2440, 3059 => 2437, 3057 => 2436, 3052 => 2434, 3046 => 2430, 3042 => 2428, 3036 => 2425, 3031 => 2424, 3029 => 2423, 3018 => 2415, 3014 => 2414, 3009 => 2411, 3005 => 2409, 2982 => 2407, 2965 => 2406, 2961 => 2405, 2951 => 2400, 2942 => 2397, 2940 => 2396, 2935 => 2393, 2925 => 2391, 2915 => 2389, 2913 => 2388, 2909 => 2387, 2903 => 2386, 2899 => 2384, 2895 => 2383, 2883 => 2373, 2881 => 2372, 2877 => 2370, 2866 => 2362, 2841 => 2339, 2826 => 2330, 2811 => 2326, 2796 => 2322, 2789 => 2318, 2785 => 2316, 2778 => 2313, 2776 => 2312, 2771 => 2310, 2765 => 2306, 2761 => 2304, 2755 => 2301, 2750 => 2300, 2748 => 2299, 2737 => 2291, 2733 => 2290, 2728 => 2287, 2724 => 2285, 2701 => 2283, 2684 => 2282, 2680 => 2281, 2670 => 2276, 2661 => 2273, 2659 => 2272, 2654 => 2269, 2644 => 2267, 2638 => 2264, 2634 => 2263, 2630 => 2262, 2626 => 2261, 2622 => 2259, 2620 => 2258, 2616 => 2257, 2610 => 2256, 2606 => 2254, 2602 => 2253, 2590 => 2243, 2588 => 2242, 2584 => 2240, 2579 => 2237, 2572 => 2233, 2567 => 2230, 2565 => 2229, 2562 => 2228, 2540 => 2219, 2536 => 2217, 2531 => 2215, 2526 => 2214, 2524 => 2213, 2520 => 2212, 2513 => 2207, 2509 => 2205, 2504 => 2203, 2499 => 2202, 2497 => 2201, 2493 => 2200, 2482 => 2196, 2474 => 2193, 2471 => 2192, 2454 => 2191, 2445 => 2184, 2443 => 2183, 2439 => 2181, 2433 => 2177, 2411 => 2170, 2407 => 2168, 2402 => 2166, 2397 => 2165, 2395 => 2164, 2391 => 2163, 2382 => 2157, 2371 => 2153, 2366 => 2150, 2349 => 2149, 2340 => 2142, 2338 => 2141, 2333 => 2138, 2315 => 2122, 2309 => 2118, 2288 => 2110, 2280 => 2108, 2272 => 2106, 2270 => 2105, 2262 => 2099, 2256 => 2096, 2250 => 2094, 2248 => 2093, 2239 => 2087, 2232 => 2083, 2225 => 2079, 2220 => 2077, 2208 => 2067, 2191 => 2066, 2187 => 2064, 2185 => 2063, 2181 => 2061, 2168 => 2060, 526 => 428, 103 => 7, 90 => 6, 66 => 3, 43 => 1,);
}
public function getSourceContext(): Source
{
return new Source("{% extends 'base_home.html.twig' %}
{% block title %}Accueil | MaketOu - Votre marketplace haïtienne
{% endblock %}
{% block stylesheets %}
\t<style>
\t\t/* Styles personnalisés pour la page d'accueil */
\t\t.hero-banner {
\t\t\tbackground: linear-gradient(135deg, #ffa200 0%, #e8910a 100%);
\t\t\tcolor: white;
\t\t\tpadding: 100px 0;
\t\t\tposition: relative;
\t\t\toverflow: hidden;
\t\t}
\t\t.hero-banner::before {
\t\t\tcontent: '';
\t\t\tposition: absolute;
\t\t\ttop: 0;
\t\t\tleft: 0;
\t\t\tright: 0;
\t\t\tbottom: 0;
\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>');
\t\t\topacity: 0.3;
\t\t}
\t\t.hero-content {
\t\t\tposition: relative;
\t\t\tz-index: 2;
\t\t}
\t\t.stats-card {
\t\t\tbackground: white;
\t\t\tborder-radius: 15px;
\t\t\tpadding: 30px;
\t\t\ttext-align: center;
\t\t\tbox-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
\t\t\ttransition: transform 0.3s ease;
\t\t}
\t\t.stats-card:hover {
\t\t\ttransform: translateY(-5px);
\t\t}
\t\t.stats-number {
\t\t\tfont-size: 3rem;
\t\t\tfont-weight: bold;
\t\t\tcolor: #ffa200;
\t\t\tdisplay: block;
\t\t}
\t\t.stats-label {
\t\t\tcolor: #666;
\t\t\tfont-size: 1.1rem;
\t\t\tmargin-top: 10px;
\t\t}
\t\t.category-card {
\t\t\tbackground: white;
\t\t\tborder-radius: 15px;
\t\t\toverflow: hidden;
\t\t\tbox-shadow: 0 5px 20px rgba(0, 0, 0, 0.1);
\t\t\ttransition: all 0.3s ease;
\t\t\theight: 100%;
\t\t}
\t\t.category-card:hover {
\t\t\ttransform: translateY(-5px);
\t\t\tbox-shadow: 0 15px 40px rgba(0, 0, 0, 0.15);
\t\t}
\t\t.category-image {
\t\t\theight: 200px;
\t\t\tbackground-size: cover;
\t\t\tbackground-position: center;
\t\t\tposition: relative;
\t\t}
\t\t.category-overlay {
\t\t\tposition: absolute;
\t\t\ttop: 0;
\t\t\tleft: 0;
\t\t\tright: 0;
\t\t\tbottom: 0;
\t\t\tbackground: linear-gradient(45deg, rgba(255,162,0,0.8), rgba(232,145,10,0.8));
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tjustify-content: center;
\t\t\topacity: 0;
\t\t\ttransition: opacity 0.3s ease;
\t\t}
\t\t.category-card:hover .category-overlay {
\t\t\topacity: 1;
\t\t}
\t\t.product-card {
\t\t\tbackground: white;
\t\t\tborder-radius: 15px;
\t\t\toverflow: hidden;
\t\t\tbox-shadow: 0 5px 20px rgba(0, 0, 0, 0.1);
\t\t\ttransition: all 0.3s ease;
\t\t\theight: 100%;
\t\t}
\t\t.product-card:hover {
\t\t\ttransform: translateY(-5px);
\t\t\tbox-shadow: 0 15px 40px rgba(0, 0, 0, 0.15);
\t\t}
\t\t.product-image {
\t\t\theight: 250px;
\t\t\tbackground-size: cover;
\t\t\tbackground-position: center;
\t\t\tposition: relative;
\t\t}
\t\t.product-badge {
\t\t\tposition: absolute;
\t\t\ttop: 15px;
\t\t\tright: 15px;
\t\t\tbackground: #ffa200;
\t\t\tcolor: white;
\t\t\tpadding: 5px 10px;
\t\t\tborder-radius: 20px;
\t\t\tfont-size: 0.8rem;
\t\t\tfont-weight: bold;
\t\t}
\t\t.product-info {
\t\t\tpadding: 20px;
\t\t}
\t\t.product-title {
\t\t\tfont-size: 1.2rem;
\t\t\tfont-weight: 600;
\t\t\tmargin-bottom: 10px;
\t\t\tcolor: #333;
\t\t}
\t\t.product-price {
\t\t\tfont-size: 1.5rem;
\t\t\tfont-weight: bold;
\t\t\tcolor: #ffa200;
\t\t\tmargin-bottom: 10px;
\t\t}
\t\t.product-shop {
\t\t\tfont-size: 0.9rem;
\t\t\tcolor: #666;
\t\t\tmargin-bottom: 15px;
\t\t}
\t\t.btn-primary-custom {
\t\t\tbackground: #ffa200;
\t\t\tborder: none;
\t\t\tcolor: white;
\t\t\tpadding: 12px 30px;
\t\t\tborder-radius: 25px;
\t\t\tfont-weight: 500;
\t\t\ttransition: all 0.3s ease;
\t\t}
\t\t.btn-primary-custom:hover {
\t\t\tbackground: #e8910a;
\t\t\ttransform: translateY(-2px);
\t\t\tbox-shadow: 0 5px 15px rgba(255, 162, 0, 0.3);
\t\t}
\t\t.section-title {
\t\t\ttext-align: center;
\t\t\tmargin-bottom: 50px;
\t\t}
\t\t.section-title h2 {
\t\t\tfont-size: 2.5rem;
\t\t\tfont-weight: bold;
\t\t\tcolor: #333;
\t\t\tmargin-bottom: 15px;
\t\t}
\t\t.section-title p {
\t\t\tfont-size: 1.2rem;
\t\t\tcolor: #666;
\t\t\tmax-width: 600px;
\t\t\tmargin: 0 auto;
\t\t}
\t\t.feature-card {
\t\t\ttext-align: center;
\t\t\tpadding: 30px 20px;
\t\t\tbackground: white;
\t\t\tborder-radius: 15px;
\t\t\tbox-shadow: 0 5px 20px rgba(0, 0, 0, 0.1);
\t\t\ttransition: all 0.3s ease;
\t\t\theight: 100%;
\t\t}
\t\t.feature-card:hover {
\t\t\ttransform: translateY(-5px);
\t\t\tbox-shadow: 0 15px 40px rgba(0, 0, 0, 0.15);
\t\t}
\t\t.feature-icon {
\t\t\twidth: 80px;
\t\t\theight: 80px;
\t\t\tbackground: linear-gradient(135deg, #ffa200, #e8910a);
\t\t\tborder-radius: 50%;
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tjustify-content: center;
\t\t\tmargin: 0 auto 20px;
\t\t\tfont-size: 2rem;
\t\t\tcolor: white;
\t\t}
\t\t.newsletter-section {
\t\t\tbackground: linear-gradient(135deg, #ffa200 0%, #e8910a 100%);
\t\t\tcolor: white;
\t\t\tpadding: 80px 0;
\t\t}
\t\t.newsletter-form {
\t\t\tmax-width: 500px;
\t\t\tmargin: 0 auto;
\t\t}
\t\t.newsletter-form .form-control {
\t\t\tborder: none;
\t\t\tborder-radius: 25px;
\t\t\tpadding: 15px 25px;
\t\t\tfont-size: 1.1rem;
\t\t}
\t\t.newsletter-form .btn {
\t\t\tborder-radius: 25px;
\t\t\tpadding: 15px 30px;
\t\t\tfont-weight: 500;
\t\t}
\t\t/* Styles pour les catégories personnalisées */
\t\t.category-card-custom {
\t\t\tbackground: white;
\t\t\tborder-radius: 15px;
\t\t\toverflow: hidden;
\t\t\tbox-shadow: 0 5px 20px rgba(0, 0, 0, 0.1);
\t\t\ttransition: all 0.3s ease;
\t\t\theight: 100%;
\t\t\tdisplay: flex;
\t\t\tflex-direction: column;
\t\t}
\t\t.category-card-custom:hover {
\t\t\ttransform: translateY(-5px);
\t\t\tbox-shadow: 0 15px 40px rgba(0, 0, 0, 0.15);
\t\t}
\t\t.category-image-wrapper {
\t\t\tposition: relative;
\t\t\toverflow: hidden;
\t\t}
\t\t.category-image {
\t\t\theight: 200px;
\t\t\tbackground-size: cover;
\t\t\tbackground-position: center;
\t\t\tposition: relative;
\t\t\ttransition: transform 0.5s ease;
\t\t}
\t\t.category-card-custom:hover .category-image {
\t\t\ttransform: scale(1.1);
\t\t}
\t\t.category-overlay-custom {
\t\t\tposition: absolute;
\t\t\ttop: 0;
\t\t\tleft: 0;
\t\t\tright: 0;
\t\t\tbottom: 0;
\t\t\tbackground: rgba(0, 0, 0, 0.5);
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tjustify-content: center;
\t\t\topacity: 0;
\t\t\ttransition: opacity 0.3s ease;
\t\t}
\t\t.category-card-custom:hover .category-overlay-custom {
\t\t\topacity: 1;
\t\t}
\t\t.category-icon-wrapper {
\t\t\ttext-align: center;
\t\t\tcolor: white;
\t\t\ttransform: translateY(20px);
\t\t\ttransition: transform 0.3s ease;
\t\t}
\t\t.category-card-custom:hover .category-icon-wrapper {
\t\t\ttransform: translateY(0);
\t\t}
\t\t.category-content {
\t\t\tflex-grow: 1;
\t\t\tdisplay: flex;
\t\t\tflex-direction: column;
\t\t}
\t\t.category-content .btn {
\t\t\tmargin-top: auto;
\t\t}
\t\t/* Responsive Styles */
\t\t@media(max-width: 991.98px) {
\t\t\t.hero-banner {
\t\t\t\tpadding: 60px 0;
\t\t\t}
\t\t\t.stats-number {
\t\t\t\tfont-size: 2.5rem;
\t\t\t}
\t\t\t.section-title h2 {
\t\t\t\tfont-size: 2rem;
\t\t\t}
\t\t\t
\t\t\t.stats-card {
\t\t\t\tmargin-bottom: 1.5rem;
\t\t\t}
\t\t}
\t\t@media(max-width: 767.98px) {
\t\t\t.hero-banner {
\t\t\t\tpadding: 40px 0;
\t\t\t}
\t\t\t.hero-content h1 {
\t\t\t\tfont-size: 1.75rem;
\t\t\t}
\t\t\t.stats-number {
\t\t\t\tfont-size: 2rem;
\t\t\t}
\t\t\t.stats-label {
\t\t\t\tfont-size: 0.9rem;
\t\t\t}
\t\t\t.section-title h2 {
\t\t\t\tfont-size: 1.75rem;
\t\t\t}
\t\t\t.section-title p {
\t\t\t\tfont-size: 1rem;
\t\t\t}
\t\t\t
\t\t\t.category-card,
\t\t\t.product-card {
\t\t\t\tmargin-bottom: 1.5rem;
\t\t\t}
\t\t\t
\t\t\t.category-image {
\t\t\t\theight: 150px;
\t\t\t}
\t\t\t
\t\t\t.product-image {
\t\t\t\theight: 200px;
\t\t\t}
\t\t\t
\t\t\t.feature-card {
\t\t\t\tmargin-bottom: 1.5rem;
\t\t\t}
\t\t\t
\t\t\t.newsletter-section {
\t\t\t\tpadding: 40px 0;
\t\t\t}
\t\t}
\t\t@media(max-width: 575.98px) {
\t\t\t.hero-banner {
\t\t\t\tpadding: 30px 0;
\t\t\t}
\t\t\t.hero-content h1 {
\t\t\t\tfont-size: 1.5rem;
\t\t\t}
\t\t\t.stats-card {
\t\t\t\tpadding: 1.5rem;
\t\t\t}
\t\t\t.stats-number {
\t\t\t\tfont-size: 1.75rem;
\t\t\t}
\t\t\t.section-title h2 {
\t\t\t\tfont-size: 1.5rem;
\t\t\t}
\t\t\t
\t\t\t.category-image {
\t\t\t\theight: 120px;
\t\t\t}
\t\t\t
\t\t\t.product-image {
\t\t\t\theight: 180px;
\t\t\t}
\t\t\t
\t\t\t.product-info {
\t\t\t\tpadding: 1rem;
\t\t\t}
\t\t\t
\t\t\t.product-title {
\t\t\t\tfont-size: 1rem;
\t\t\t}
\t\t\t
\t\t\t.product-price {
\t\t\t\tfont-size: 1.25rem;
\t\t\t}
\t\t}
\t\t/* Styles modernes pour le carousel de bannière */
\t\t.banner-area-modern {
\t\t\tposition: relative;
\t\t\twidth: 100%;
\t\t\tmin-height: 500px;
\t\t\tbackground: url('{{ asset('ui/img/banner/banner-bg.jpg') }}') center center no-repeat;
\t\t\tbackground-size: cover;
\t\t\toverflow: hidden;
\t\t\tpadding: 60px 0;
\t\t}
\t\t.banner-area-modern::before {
\t\t\tcontent: '';
\t\t\tposition: absolute;
\t\t\ttop: 0;
\t\t\tleft: 0;
\t\t\twidth: 100%;
\t\t\theight: 100%;
\t\t\tbackground: rgba(0, 0, 0, 0.1);
\t\t\tz-index: 1;
\t\t}
\t\t.banner-carousel-wrapper {
\t\t\tposition: relative;
\t\t\twidth: 100%;
\t\t\theight: 100%;
\t\t\tz-index: 2;
\t\t}
\t\t.banner-slide-item {
\t\t\tmin-height: 500px;
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tpadding: 40px 0;
\t\t}
\t\t.banner-content-modern {
\t\t\tposition: relative;
\t\t\tz-index: 2;
\t\t\tpadding: 30px;
\t\t\tbackground: rgba(255, 255, 255, 0.98);
\t\t\tborder-radius: 20px;
\t\t\tbox-shadow: 0 20px 60px rgba(0, 0, 0, 0.4);
\t\t\tbackdrop-filter: blur(10px);
\t\t\tanimation: fadeInUp 0.8s ease;
\t\t}
\t\t@keyframes fadeInUp {
\t\t\tfrom {
\t\t\t\topacity: 0;
\t\t\t\ttransform: translateY(30px);
\t\t\t}
\t\t\tto {
\t\t\t\topacity: 1;
\t\t\t\ttransform: translateY(0);
\t\t\t}
\t\t}
\t\t.banner-badge {
\t\t\tdisplay: inline-block;
\t\t\tbackground: linear-gradient(135deg, #ffa200 0%, #ff6b00 100%);
\t\t\tcolor: white;
\t\t\tpadding: 8px 20px;
\t\t\tborder-radius: 50px;
\t\t\tfont-size: 0.85rem;
\t\t\tfont-weight: 600;
\t\t\tmargin-bottom: 20px;
\t\t\tbox-shadow: 0 4px 15px rgba(255, 162, 0, 0.4);
\t\t}
\t\t.banner-badge i {
\t\t\tmargin-right: 5px;
\t\t}
\t\t.banner-title-modern {
\t\t\tfont-size: 2.0rem;
\t\t\tfont-weight: 600;
\t\t\tcolor: #2c3e50;
\t\t\tmargin-bottom: 20px;
\t\t\tline-height: 1.2;
\t\t\tbackground: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
\t\t\t-webkit-background-clip: text;
\t\t\t-webkit-text-fill-color: transparent;
\t\t\tbackground-clip: text;
\t\t}
\t\t.banner-description-modern {
\t\t\tfont-size: 1.1rem;
\t\t\tcolor: #555;
\t\t\tline-height: 1.8;
\t\t\tmargin-bottom: 25px;
\t\t}
\t\t.banner-price-modern {
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tgap: 15px;
\t\t\tmargin-bottom: 30px;
\t\t\tpadding: 15px 20px;
\t\t\tbackground: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
\t\t\tborder-radius: 12px;
\t\t\tborder-left: 4px solid #ffa200;
\t\t}
\t\t.banner-price-modern .price-label {
\t\t\tfont-size: 0.9rem;
\t\t\tcolor: #666;
\t\t\tfont-weight: 600;
\t\t\ttext-transform: uppercase;
\t\t\tletter-spacing: 1px;
\t\t}
\t\t.banner-price-modern .price-value {
\t\t\tfont-size: 1.2rem;
\t\t\tfont-weight: 600;
\t\t\tcolor: #ffa200;
\t\t}
\t\t.banner-actions-modern {
\t\t\tdisplay: flex;
\t\t\tgap: 15px;
\t\t\tflex-wrap: wrap;
\t\t}
\t\t.btn-banner-primary {
\t\t\tdisplay: inline-flex;
\t\t\talign-items: center;
\t\t\tgap: 10px;
\t\t\tpadding: 15px 35px;
\t\t\tbackground: linear-gradient(135deg, #ffa200 0%, #ff6b00 100%);
\t\t\tcolor: white;
\t\t\ttext-decoration: none;
\t\t\tborder-radius: 50px;
\t\t\tfont-weight: 600;
\t\t\tfont-size: 1rem;
\t\t\ttransition: all 0.3s ease;
\t\t\tbox-shadow: 0 4px 15px rgba(255, 162, 0, 0.4);
\t\t}
\t\t.btn-banner-primary:hover {
\t\t\ttransform: translateY(-3px);
\t\t\tbox-shadow: 0 8px 25px rgba(255, 162, 0, 0.6);
\t\t\tcolor: white;
\t\t}
\t\t.btn-banner-primary .btn-icon {
\t\t\ttransition: transform 0.3s ease;
\t\t}
\t\t.btn-banner-primary:hover .btn-icon {
\t\t\ttransform: translateX(5px);
\t\t}
\t\t.btn-banner-secondary {
\t\t\tdisplay: inline-flex;
\t\t\talign-items: center;
\t\t\tgap: 8px;
\t\t\tpadding: 15px 25px;
\t\t\tbackground: white;
\t\t\tcolor: #667eea;
\t\t\ttext-decoration: none;
\t\t\tborder-radius: 50px;
\t\t\tfont-weight: 600;
\t\t\tfont-size: 0.95rem;
\t\t\tborder: 2px solid #667eea;
\t\t\ttransition: all 0.3s ease;
\t\t}
\t\t.btn-banner-secondary:hover {
\t\t\tbackground: #667eea;
\t\t\tcolor: white;
\t\t\ttransform: translateY(-3px);
\t\t\tbox-shadow: 0 4px 15px rgba(102, 126, 234, 0.4);
\t\t}
\t\t.banner-image-modern {
\t\t\tposition: relative;
\t\t\theight: 450px;
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tjustify-content: center;
\t\t}
\t\t.banner-image-wrapper {
\t\t\tposition: relative;
\t\t\twidth: 100%;
\t\t\theight: 100%;
\t\t\tborder-radius: 20px;
\t\t\toverflow: hidden;
\t\t\tbox-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
\t\t\tbackground: white;
\t\t\tpadding: 20px;
\t\t}
\t\t.banner-img {
\t\t\twidth: 100%;
\t\t\theight: 100%;
\t\t\tobject-fit: contain;
\t\t\tborder-radius: 15px;
\t\t\ttransition: transform 0.5s ease;
\t\t}
\t\t.banner-slide-item:hover .banner-img {
\t\t\ttransform: scale(1.05);
\t\t}
\t\t.banner-image-overlay {
\t\t\tposition: absolute;
\t\t\ttop: 0;
\t\t\tleft: 0;
\t\t\twidth: 100%;
\t\t\theight: 100%;
\t\t\tbackground: linear-gradient(135deg, rgba(102, 126, 234, 0.1) 0%, rgba(118, 75, 162, 0.1) 100%);
\t\t\tborder-radius: 15px;
\t\t\tpointer-events: none;
\t\t}
\t\t/* Styles pour Owl Carousel */
\t\t.banner-area-modern .owl-nav {
\t\t\tposition: absolute;
\t\t\ttop: 50%;
\t\t\ttransform: translateY(-50%);
\t\t\twidth: 100%;
\t\t\tdisplay: flex;
\t\t\tjustify-content: space-between;
\t\t\talign-items: center;
\t\t\tpadding: 0 20px;
\t\t\tpointer-events: none;
\t\t\tz-index: 10;
\t\t\tleft: 0;
\t\t\tright: 0;
\t\t\tbox-sizing: border-box;
\t\t}
\t\t.banner-area-modern .owl-nav button {
\t\t\twidth: 60px;
\t\t\theight: 60px;
\t\t\tmin-width: 60px;
\t\t\tmin-height: 60px;
\t\t\tbackground: #ffa200 !important;
\t\t\tborder-radius: 50% !important;
\t\t\tdisplay: flex !important;
\t\t\talign-items: center;
\t\t\tjustify-content: center;
\t\t\tcolor: white !important;
\t\t\tfont-size: 24px !important;
\t\t\tbox-shadow: 0 4px 15px rgba(255, 162, 0, 0.4);
\t\t\ttransition: all 0.3s ease;
\t\t\tpointer-events: all;
\t\t\tborder: none !important;
\t\t\tposition: relative;
\t\t\tflex-shrink: 0;
\t\t\tmargin: 0;
\t\t\tpadding: 0;
\t\t\tline-height: 1;
\t\t}
\t\t.banner-area-modern .owl-nav button.owl-prev {
\t\t\tmargin-right: auto;
\t\t}
\t\t.banner-area-modern .owl-nav button.owl-next {
\t\t\tmargin-left: auto;
\t\t}
\t\t.banner-area-modern .owl-nav button:hover {
\t\t\tbackground: #ff6b00 !important;
\t\t\tcolor: white !important;
\t\t\ttransform: scale(1.1);
\t\t\tbox-shadow: 0 6px 20px rgba(255, 162, 0, 0.6);
\t\t}
\t\t.banner-area-modern .owl-nav button.disabled {
\t\t\topacity: 0.5;
\t\t\tcursor: not-allowed;
\t\t}
\t\t.banner-area-modern .owl-nav button.disabled:hover {
\t\t\ttransform: scale(1);
\t\t}
\t\t.banner-area-modern .owl-dots {
\t\t\tposition: absolute;
\t\t\tbottom: 30px;
\t\t\tleft: 50%;
\t\t\ttransform: translateX(-50%);
\t\t\tdisplay: flex;
\t\t\tgap: 10px;
\t\t\tz-index: 10;
\t\t}
\t\t.banner-area-modern .owl-dots button {
\t\t\twidth: 12px;
\t\t\theight: 12px;
\t\t\tborder-radius: 50%;
\t\t\tbackground: rgba(255, 255, 255, 0.6) !important;
\t\t\tborder: 2px solid white !important;
\t\t\ttransition: all 0.3s ease;
\t\t\tmargin: 0 5px;
\t\t}
\t\t.banner-area-modern .owl-dots button.active {
\t\t\tbackground: #ffa200 !important;
\t\t\tborder-color: #ffa200 !important;
\t\t\twidth: 30px;
\t\t\tborder-radius: 6px;
\t\t}
\t\t/* Responsive */
\t\t@media(max-width: 992px) {
\t\t\t.banner-area-modern {
\t\t\t\tmin-height: 450px;
\t\t\t\tpadding: 40px 0;
\t\t\t\tbackground-size: cover;
\t\t\t\tbackground-position: center;
\t\t\t}
\t\t\t.banner-slide-item {
\t\t\t\tmin-height: 450px;
\t\t\t\tpadding: 30px 0;
\t\t\t}
\t\t\t.banner-title-modern {
\t\t\t\tfont-size: 1.5rem;
\t\t\t}
\t\t\t.banner-description-modern {
\t\t\t\tfont-size: 1rem;
\t\t\t}
\t\t\t.banner-image-modern {
\t\t\t\theight: 350px;
\t\t\t\tmargin-top: 30px;
\t\t\t}
\t\t\t.banner-content-modern {
\t\t\t\tpadding: 25px;
\t\t\t}
\t\t}
\t\t@media(max-width: 768px) {
\t\t\t.banner-area-modern {
\t\t\t\tmin-height: 400px;
\t\t\t\tpadding: 30px 0;
\t\t\t\tbackground-size: cover;
\t\t\t\tbackground-position: center;
\t\t\t}
\t\t\t.banner-slide-item {
\t\t\t\tmin-height: 400px;
\t\t\t\tpadding: 20px 0;
\t\t\t}
\t\t\t.banner-title-modern {
\t\t\t\tfont-size: 1.25rem;
\t\t\t}
\t\t\t.banner-description-modern {
\t\t\t\tfont-size: 0.95rem;
\t\t\t}
\t\t\t.banner-image-modern {
\t\t\t\theight: 280px;
\t\t\t\tmargin-top: 20px;
\t\t\t}
\t\t\t.banner-content-modern {
\t\t\t\tpadding: 20px;
\t\t\t}
\t\t\t.banner-price-modern .price-value {
\t\t\t\tfont-size: 1.25rem;
\t\t\t}
\t\t\t.banner-actions-modern {
\t\t\t\tflex-direction: column;
\t\t\t}
\t\t\t.btn-banner-primary,
\t\t\t.btn-banner-secondary {
\t\t\t\twidth: 100%;
\t\t\t\tjustify-content: center;
\t\t\t}
\t\t\t.banner-area-modern .owl-nav button {
\t\t\t\twidth: 50px;
\t\t\t\theight: 50px;
\t\t\t\tmin-width: 50px;
\t\t\t\tmin-height: 50px;
\t\t\t\tfont-size: 20px !important;
\t\t\t\tbackground: #ffa200 !important;
\t\t\t}
\t\t\t.banner-area-modern .owl-nav button:hover {
\t\t\t\tbackground: #ff6b00 !important;
\t\t\t}
\t\t}
\t\t@media(max-width: 576px) {
\t\t\t.banner-area-modern {
\t\t\t\tmin-height: 350px;
\t\t\t\tpadding: 0;
\t\t\t\tbackground-size: cover;
\t\t\t\tbackground-position: center;
\t\t\t}
\t\t\t.banner-slide-item {
\t\t\t\tmin-height: 350px;
\t\t\t}
\t\t\t.banner-title-modern {
\t\t\t\tfont-size: 1.25rem;
\t\t\t}
\t\t\t.banner-image-modern {
\t\t\t\theight: 220px;
\t\t\t}
\t\t\t.banner-content-modern {
\t\t\t\tpadding: 15px;
\t\t\t}
\t\t}
\t\t/* Styles pour les catégories de boutiques cliquables */
\t\t.shop-category-clickable {
\t\t\tcursor: pointer;
\t\t\ttransition: all 0.3s ease;
\t\t\theight: 100%;
\t\t}
\t\t.shop-category-clickable:hover {
\t\t\ttransform: translateY(-10px);
\t\t\tbox-shadow: 0 8px 25px rgba(0, 0, 0, 0.15);
\t\t}
\t\t.shop-category-clickable:hover .category-image {
\t\t\ttransform: scale(1.1);
\t\t}
\t\t.shop-category-clickable:hover .btn-primary-custom {
\t\t\tbackground: #e8910a;
\t\t\ttransform: translateX(5px);
\t\t}
\t\t/* Styles pour les cartes de catégories personnalisées */
\t\t.category-card-custom {
\t\t\tborder-radius: 15px;
\t\t\toverflow: hidden;
\t\t\tbox-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);
\t\t\ttransition: transform 0.3s ease, box-shadow 0.3s ease;
\t\t\tbackground: white;
\t\t\theight: 100%;
\t\t}
\t\t.category-card-custom:hover {
\t\t\ttransform: translateY(-10px);
\t\t\tbox-shadow: 0 8px 25px rgba(0, 0, 0, 0.15);
\t\t}
\t\t.category-image-wrapper {
\t\t\tposition: relative;
\t\t\theight: 200px;
\t\t\toverflow: hidden;
\t\t}
\t\t.category-image {
\t\t\twidth: 100%;
\t\t\theight: 100%;
\t\t\tbackground-size: cover;
\t\t\tbackground-position: center;
\t\t\ttransition: transform 0.3s ease;
\t\t}
\t\t.category-card-custom:hover .category-image {
\t\t\ttransform: scale(1.1);
\t\t}
\t\t.category-overlay-custom {
\t\t\tposition: absolute;
\t\t\ttop: 0;
\t\t\tleft: 0;
\t\t\twidth: 100%;
\t\t\theight: 100%;
\t\t\tbackground: rgba(0, 0, 0, 0.6);
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tjustify-content: center;
\t\t\topacity: 0;
\t\t\ttransition: opacity 0.3s ease;
\t\t\tcolor: white;
\t\t}
\t\t.category-card-custom:hover .category-overlay-custom {
\t\t\topacity: 1;
\t\t}
\t\t.category-icon-wrapper {
\t\t\ttext-align: center;
\t\t}
\t\t.category-icon-wrapper i {
\t\t\tcolor: #ffa200;
\t\t\tdisplay: block;
\t\t}
\t\t.category-icon-wrapper h4 {
\t\t\tcolor: white;
\t\t\tmargin-top: 10px;
\t\t}
\t\t/* Styles pour la galerie de produits en vedette */
\t\t.featured-products-carousel-section {
\t\t\tposition: relative;
\t\t\toverflow: hidden;
\t\t}
\t\t.featured-gallery-wrapper {
\t\t\tposition: relative;
\t\t\tmax-width: 1400px;
\t\t\tmargin: 0 auto;
\t\t\tpadding: 0 15px;
\t\t}
\t\t.featured-gallery-container {
\t\t\tposition: relative;
\t\t\toverflow: visible;
\t\t\tborder-radius: 12px;
\t\t}
\t\t.featured-gallery-grid {
\t\t\tdisplay: flex;
\t\t\tgap: 30px;
\t\t\tpadding: 15px 0;
\t\t\toverflow-x: auto;
\t\t\toverflow-y: hidden;
\t\t\tscroll-behavior: smooth;
\t\t\tscroll-behavior: smooth;
\t\t\tscrollbar-width: none; /* Firefox */
\t\t\t-ms-overflow-style: none; /* IE/Edge */
\t\t\t-webkit-overflow-scrolling: touch; /* iOS smooth scroll */
\t\t\twill-change: scroll-position;
\t\t}
\t\t.featured-gallery-grid::-webkit-scrollbar {
\t\t\tdisplay: none; /* Chrome/Safari */
\t\t}
\t\t/* Mode OwlCarousel */
\t\t.featured-gallery-grid.owl-carousel {
\t\t\tdisplay: block;
\t\t\toverflow: hidden;
\t\t\tpadding: 25px 0;
\t\t}
\t\t.featured-gallery-grid.owl-carousel .owl-stage-outer {
\t\t\toverflow: visible;
\t\t}
\t\t.featured-gallery-grid.owl-carousel .featured-gallery-item {
\t\t\topacity: 1;
\t\t\ttransform: none;
\t\t\twidth: auto;
\t\t\tmax-width: none;
\t\t\tmargin: 0 15px;
\t\t}
\t\t.featured-gallery-grid.owl-carousel .owl-stage {
\t\t\tdisplay: flex;
\t\t}
\t\t.featured-gallery-item {
\t\t\tflex: 0 0 auto; /* Largeur automatique basée sur le contenu */
\t\t\twidth: 100%;
\t\t\tmax-width: 100%;
\t\t\topacity: 0;
\t\t\ttransform: translateY(20px) scale(0.95);
\t\t\tanimation: galleryItemFadeIn 0.5s cubic-bezier(0.4, 0, 0.2, 1) forwards;
\t\t\tanimation-delay: calc(var(--item-index, 0) * 0.05s);
\t\t}
\t\t/* Produits plus larges et esthétiques - 3 par ligne sur grands écrans */
\t\t@media(min-width: 1200px) {
\t\t\t.featured-gallery-item {
\t\t\t\tflex: 0 0 calc(33.333333% - 20px);
\t\t\t\tmax-width: calc(33.333333% - 20px);
\t\t\t}
\t\t}
\t\t@media(min-width: 992px) and (max-width: 1199px) {
\t\t\t.featured-gallery-item {
\t\t\t\tflex: 0 0 calc(33.333333% - 20px);
\t\t\t\tmax-width: calc(33.333333% - 20px);
\t\t\t}
\t\t}
\t\t@media(min-width: 768px) and (max-width: 991px) {
\t\t\t.featured-gallery-item {
\t\t\t\tflex: 0 0 calc(50% - 15px);
\t\t\t\tmax-width: calc(50% - 15px);
\t\t\t}
\t\t}
\t\t@media(max-width: 767px) {
\t\t\t.featured-gallery-item {
\t\t\t\tflex: 0 0 100%;
\t\t\t\tmax-width: 100%;
\t\t\t}
\t\t}
\t\t/* Design amélioré pour single-product - plus large et esthétique */
\t\t.featured-gallery-item .single-product {
\t\t\tmargin-bottom: 0;
\t\t\tmin-height: 520px;
\t\t\tdisplay: flex;
\t\t\tflex-direction: column;
\t\t\tpadding: 25px;
\t\t\tbackground: #fff;
\t\t\tborder-radius: 16px;
\t\t\tbox-shadow: 0 8px 25px rgba(15, 34, 58, 0.1);
\t\t\ttransition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
\t\t\tborder: 1px solid rgba(0, 0, 0, 0.05);
\t\t\tposition: relative;
\t\t\toverflow: hidden;
\t\t}
\t\t.featured-gallery-item .single-product::before {
\t\t\tcontent: '';
\t\t\tposition: absolute;
\t\t\ttop: 0;
\t\t\tleft: 0;
\t\t\tright: 0;
\t\t\theight: 4px;
\t\t\tbackground: linear-gradient(90deg, #ffa200 0%, #ff6b00 100%);
\t\t\ttransform: scaleX(0);
\t\t\ttransform-origin: left;
\t\t\ttransition: transform 0.4s ease;
\t\t}
\t\t.featured-gallery-item .single-product:hover {
\t\t\ttransform: translateY(-8px);
\t\t\tbox-shadow: 0 20px 50px rgba(15, 34, 58, 0.15);
\t\t\tborder-color: rgba(255, 162, 0, 0.3);
\t\t}
\t\t.featured-gallery-item .single-product:hover::before {
\t\t\ttransform: scaleX(1);
\t\t}
\t\t/* S'assurer que les images s'affichent correctement - styles identiques à listing.html.twig */
\t\t.featured-gallery-item .single-product img {
\t\t\tmargin-bottom: 20px;
\t\t\twidth: 100%;
\t\t}
\t\t/* Styles améliorés pour product-image-container - plus large et esthétique */
\t\t.featured-gallery-item .product-image-container {
\t\t\tposition: relative;
\t\t\toverflow: hidden;
\t\t\tborder-radius: 14px;
\t\t\theight: 320px;
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tjustify-content: center;
\t\t\tbackground: linear-gradient(135deg, #f7f7fb 0%, #e8ecf1 100%);
\t\t\tmargin-bottom: 22px;
\t\t\tbox-shadow: 0 4px 15px rgba(0, 0, 0, 0.05);
\t\t}
\t\t.featured-gallery-item .product-image-container:hover {
\t\t\tbox-shadow: 0 8px 25px rgba(0, 0, 0, 0.1);
\t\t}
\t\t.featured-gallery-item .product-image-container:hover .main-product-img {
\t\t\ttransform: scale(1.08);
\t\t\ttransition: transform 0.4s cubic-bezier(0.4, 0, 0.2, 1);
\t\t}
\t\t.featured-gallery-item .product-image-container a {
\t\t\tdisplay: block;
\t\t\twidth: 100%;
\t\t\theight: 100%;
\t\t}
\t\t.featured-gallery-item .main-product-img {
\t\t\ttransition: transform 0.3s ease;
\t\t\twidth: 100% !important;
\t\t\theight: 100% !important;
\t\t\tobject-fit: cover;
\t\t\tobject-position: center;
\t\t\tdisplay: block;
\t\t\twill-change: transform, opacity;
\t\t}
\t\t.featured-gallery-item .main-product-img.image-fade {
\t\t\tanimation: imageFade 0.5s ease;
\t\t}
\t\t@keyframes imageFade {
\t\t\tfrom {
\t\t\t\topacity: 0;
\t\t\t\ttransform: scale(1.02);
\t\t\t}
\t\t\tto {
\t\t\t\topacity: 1;
\t\t\t\ttransform: scale(1);
\t\t\t}
\t\t}
\t\t.featured-gallery-item .product-details {
\t\t\tdisplay: flex;
\t\t\tflex-direction: column;
\t\t\theight: 100%;
\t\t\tpadding: 0 5px;
\t\t}
\t\t.featured-gallery-item .product-details h6 {
\t\t\tfont-size: 1.1rem;
\t\t\tfont-weight: 600;
\t\t\tmargin-bottom: 12px;
\t\t\tline-height: 1.4;
\t\t\tcolor: #2c3e50;
\t\t\tmin-height: 48px;
\t\t}
\t\t.featured-gallery-item .product-details h6 a {
\t\t\tcolor: #2c3e50;
\t\t\ttext-decoration: none;
\t\t\ttransition: color 0.3s ease;
\t\t}
\t\t.featured-gallery-item .product-details h6 a:hover {
\t\t\tcolor: #ffa200;
\t\t}
\t\t.featured-gallery-item .prd-bottom {
\t\t\tmargin-top: auto;
\t\t}
\t\t/* Styles pour img-nav-btn - identiques à listing.html.twig */
\t\t.featured-gallery-item .img-nav-btn {
\t\t\tposition: absolute;
\t\t\ttop: 50%;
\t\t\ttransform: translateY(-50%);
\t\t\tbackground: rgba(0, 0, 0, 0.6);
\t\t\tcolor: white;
\t\t\tborder: none;
\t\t\twidth: 35px;
\t\t\theight: 35px;
\t\t\tborder-radius: 50%;
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tjustify-content: center;
\t\t\tcursor: pointer;
\t\t\ttransition: all 0.3s ease;
\t\t\tz-index: 10;
\t\t}
\t\t.featured-gallery-item .img-nav-btn:hover {
\t\t\tbackground: #095ad3;
\t\t\ttransform: translateY(-50%) scale(1.1);
\t\t}
\t\t.featured-gallery-item .img-nav-left {
\t\t\tleft: 10px;
\t\t}
\t\t.featured-gallery-item .img-nav-right {
\t\t\tright: 10px;
\t\t}
\t\t.featured-gallery-item .img-indicators {
\t\t\tposition: absolute;
\t\t\tbottom: 10px;
\t\t\tleft: 50%;
\t\t\ttransform: translateX(-50%);
\t\t\tdisplay: flex;
\t\t\tgap: 5px;
\t\t\tz-index: 10;
\t\t}
\t\t.featured-gallery-item .indicator {
\t\t\twidth: 8px;
\t\t\theight: 8px;
\t\t\tborder-radius: 50%;
\t\t\tbackground: rgba(255, 255, 255, 0.5);
\t\t\tcursor: pointer;
\t\t\tmargin-bottom: 10px;
\t\t\ttransition: all 0.3s ease;
\t\t\tborder: 1px solid rgba(255, 255, 255, 0.3);
\t\t}
\t\t.featured-gallery-item .indicator.active {
\t\t\tbackground: #ffa200;
\t\t\tborder-color: #ffa200;
\t\t\ttransform: scale(1.2);
\t\t}
\t\t.featured-gallery-item .indicator:hover {
\t\t\tbackground: rgba(255, 255, 255, 0.8);
\t\t}
\t\t/* Styles pour shop-info - identiques à listing.html.twig */
\t\t.featured-gallery-item .shop-info {
\t\t\tmargin: 10px 0 15px 0;
\t\t\tpadding: 8px 0;
\t\t\tborder-bottom: 1px solid #f0f0f0;
\t\t}
\t\t.featured-gallery-item .shop-info small {
\t\t\tfont-size: 0.9rem;
\t\t}
\t\t.featured-gallery-item .shop-link {
\t\t\tcolor: #007bff;
\t\t\ttext-decoration: none;
\t\t\tfont-weight: 500;
\t\t}
\t\t.featured-gallery-item .shop-link:hover {
\t\t\tcolor: #ffa200;
\t\t\ttext-decoration: underline;
\t\t}
\t\t/* Styles améliorés pour le prix */
\t\t.featured-gallery-item .price {
\t\t\tmargin-bottom: 18px;
\t\t}
\t\t.featured-gallery-item .price h6 {
\t\t\tfont-size: 1.4rem;
\t\t\tfont-weight: 700;
\t\t\tcolor: #ffa200;
\t\t\tmargin-bottom: 5px;
\t\t}
\t\t.featured-gallery-item .price h6.l-through {
\t\t\tfont-size: 1rem;
\t\t\tcolor: #95a5a6;
\t\t\ttext-decoration: line-through;
\t\t\tfont-weight: 500;
\t\t}
\t\t/* Les autres styles (prd-bottom, social-info) sont déjà définis dans main.css */
\t\t@keyframes galleryItemFadeIn {
\t\t\tfrom {
\t\t\t\topacity: 0;
\t\t\t\ttransform: translateY(20px) scale(0.95);
\t\t\t}
\t\t\tto {
\t\t\t\topacity: 1;
\t\t\t\ttransform: translateY(0) scale(1);
\t\t\t}
\t\t}
\t\t.featured-gallery-card {
\t\t\tdisplay: flex;
\t\t\tflex-direction: column;
\t\t\theight: 100%;
\t\t\tbackground: white;
\t\t\tborder-radius: 12px;
\t\t\toverflow: hidden;
\t\t\tbox-shadow: 0 2px 12px rgba(0, 0, 0, 0.08);
\t\t\ttransition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
\t\t\tborder: 1px solid #f0f0f0;
\t\t}
\t\t.featured-gallery-card:hover {
\t\t\ttransform: translateY(-5px);
\t\t\tbox-shadow: 0 6px 20px rgba(0, 0, 0, 0.12);
\t\t\tborder-color: #ffa200;
\t\t}
\t\t.featured-gallery-image-wrapper {
\t\t\tposition: relative;
\t\t\twidth: 100%;
\t\t\tpadding-top: 100%; /* Ratio 1:1 pour une galerie carrée */
\t\t\toverflow: hidden;
\t\t\tbackground: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
\t\t}
\t\t.featured-gallery-image {
\t\t\tposition: absolute;
\t\t\ttop: 0;
\t\t\tleft: 0;
\t\t\twidth: 100%;
\t\t\theight: 100%;
\t\t\tbackground-size: cover;
\t\t\tbackground-position: center;
\t\t\ttransition: transform 0.5s cubic-bezier(0.4, 0, 0.2, 1);
\t\t}
\t\t.featured-gallery-card:hover .featured-gallery-image {
\t\t\ttransform: scale(1.08);
\t\t}
\t\t.featured-gallery-badge {
\t\t\tposition: absolute;
\t\t\ttop: 8px;
\t\t\tleft: 8px;
\t\t\tbackground: linear-gradient(135deg, #ffa200 0%, #ff6b00 100%);
\t\t\tcolor: white;
\t\t\tpadding: 4px 10px;
\t\t\tborder-radius: 15px;
\t\t\tfont-size: 12px;
\t\t\tfont-weight: 600;
\t\t\tz-index: 2;
\t\t\tbox-shadow: 0 2px 8px rgba(255, 162, 0, 0.4);
\t\t}
\t\t.featured-gallery-overlay {
\t\t\tposition: absolute;
\t\t\ttop: 0;
\t\t\tleft: 0;
\t\t\twidth: 100%;
\t\t\theight: 100%;
\t\t\tbackground: rgba(0, 0, 0, 0.5);
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tjustify-content: center;
\t\t\topacity: 0;
\t\t\ttransition: opacity 0.3s ease;
\t\t}
\t\t.featured-gallery-card:hover .featured-gallery-overlay {
\t\t\topacity: 1;
\t\t}
\t\t.featured-gallery-view-btn {
\t\t\tbackground: white;
\t\t\tcolor: #333;
\t\t\twidth: 40px;
\t\t\theight: 40px;
\t\t\tborder-radius: 50%;
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tjustify-content: center;
\t\t\ttext-decoration: none;
\t\t\tfont-size: 18px;
\t\t\ttransform: scale(0.8);
\t\t\ttransition: transform 0.3s ease;
\t\t}
\t\t.featured-gallery-card:hover .featured-gallery-view-btn {
\t\t\ttransform: scale(1);
\t\t}
\t\t.featured-gallery-info {
\t\t\tpadding: 12px;
\t\t\tflex: 1;
\t\t\tdisplay: flex;
\t\t\tflex-direction: column;
\t\t}
\t\t.featured-gallery-title {
\t\t\tfont-size: 14px;
\t\t\tfont-weight: 600;
\t\t\tmargin-bottom: 6px;
\t\t\tcolor: #333;
\t\t\tline-height: 1.3;
\t\t\tdisplay: -webkit-box;
\t\t\t-webkit-line-clamp: 2;
\t\t\t-webkit-box-orient: vertical;
\t\t\toverflow: hidden;
\t\t\tmin-height: 36px;
\t\t}
\t\t.featured-gallery-title a {
\t\t\tcolor: #333;
\t\t\ttext-decoration: none;
\t\t\ttransition: color 0.3s ease;
\t\t}
\t\t.featured-gallery-title a:hover {
\t\t\tcolor: #ffa200;
\t\t}
\t\t.featured-gallery-price {
\t\t\tfont-size: 16px;
\t\t\tfont-weight: 700;
\t\t\tcolor: #ffa200;
\t\t\tmargin-bottom: 6px;
\t\t}
\t\t.featured-gallery-rating {
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tgap: 3px;
\t\t\tfont-size: 11px;
\t\t}
\t\t.featured-gallery-rating .fa-star.active {
\t\t\tcolor: #ffa200;
\t\t}
\t\t.featured-gallery-rating .fa-star-o {
\t\t\tcolor: #ddd;
\t\t}
\t\t.featured-gallery-controls {
\t\t\tdisplay: flex;
\t\t\tjustify-content: center;
\t\t\tgap: 20px;
\t\t\tmargin-top: 25px;
\t\t\tpadding: 0 20px;
\t\t}
\t\t.featured-gallery-nav-btn {
\t\t\twidth: 42px;
\t\t\theight: 42px;
\t\t\tborder-radius: 50%;
\t\t\tborder: 1.5px solid #ffa200;
\t\t\tbackground: white;
\t\t\tcolor: #ffa200;
\t\t\tfont-size: 16px;
\t\t\tcursor: pointer;
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tjustify-content: center;
\t\t\ttransition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
\t\t\tbox-shadow: 0 3px 10px rgba(255, 162, 0, 0.18);
\t\t\tposition: relative;
\t\t\toverflow: hidden;
\t\t}
\t\t.featured-gallery-nav-btn.btn-ripple::after {
\t\t\tcontent: '';
\t\t\tposition: absolute;
\t\t\twidth: 100%;
\t\t\theight: 100%;
\t\t\tleft: 0;
\t\t\ttop: 0;
\t\t\tborder-radius: 50%;
\t\t\tbackground: rgba(255, 162, 0, 0.2);
\t\t\tanimation: rippleEffect 0.35s ease;
\t\t}
\t\t@keyframes rippleEffect {
\t\t\tfrom {
\t\t\t\ttransform: scale(0.6);
\t\t\t\topacity: 0.7;
\t\t\t}
\t\t\tto {
\t\t\t\ttransform: scale(1.4);
\t\t\t\topacity: 0;
\t\t\t}
\t\t}
\t\t.featured-gallery-nav-btn:hover:not(:disabled) {
\t\t\tbackground: #ffa200;
\t\t\tcolor: white;
\t\t\ttransform: scale(1.1);
\t\t\tbox-shadow: 0 5px 18px rgba(255, 162, 0, 0.4);
\t\t}
\t\t.featured-gallery-nav-btn:active:not(:disabled) {
\t\t\ttransform: scale(0.95);
\t\t}
\t\t.featured-gallery-nav-btn:disabled {
\t\t\topacity: 0.3;
\t\t\tcursor: not-allowed;
\t\t}
\t\t.featured-gallery-load-more {
\t\t\tmargin-top: 30px;
\t\t}
\t\t/* Style pour le bouton \"Voir tous les produits\" */
\t\t.btn-view-all-products {
\t\t\tdisplay: inline-flex;
\t\t\talign-items: center;
\t\t\tgap: 12px;
\t\t\tpadding: 16px 40px;
\t\t\tbackground: linear-gradient(135deg, #ffa200 0%, #ff6b00 100%);
\t\t\tcolor: white;
\t\t\ttext-decoration: none;
\t\t\tborder-radius: 50px;
\t\t\tfont-weight: 600;
\t\t\tfont-size: 16px;
\t\t\ttransition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
\t\t\tbox-shadow: 0 4px 15px rgba(255, 162, 0, 0.3);
\t\t\tposition: relative;
\t\t\toverflow: hidden;
\t\t}
\t\t.btn-view-all-products::before {
\t\t\tcontent: '';
\t\t\tposition: absolute;
\t\t\ttop: 0;
\t\t\tleft: -100%;
\t\t\twidth: 100%;
\t\t\theight: 100%;
\t\t\tbackground: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.3), transparent);
\t\t\ttransition: left 0.5s ease;
\t\t}
\t\t.btn-view-all-products:hover::before {
\t\t\tleft: 100%;
\t\t}
\t\t.btn-view-all-products:hover {
\t\t\ttransform: translateY(-3px);
\t\t\tbox-shadow: 0 8px 25px rgba(255, 162, 0, 0.5);
\t\t\tcolor: white;
\t\t}
\t\t.btn-view-all-products:active {
\t\t\ttransform: translateY(-1px);
\t\t}
\t\t.btn-view-all-products i {
\t\t\tfont-size: 18px;
\t\t\ttransition: transform 0.3s ease;
\t\t}
\t\t.btn-view-all-products:hover i {
\t\t\ttransform: translateX(5px);
\t\t}
\t\t.btn-view-all-products span {
\t\t\tposition: relative;
\t\t\tz-index: 1;
\t\t}
\t\t/* Responsive */
\t\t@media(max-width: 767px) {
\t\t\t.btn-view-all-products {
\t\t\t\tpadding: 14px 30px;
\t\t\t\tfont-size: 14px;
\t\t\t}
\t\t}
\t\t/* Responsive */
\t\t@media(max-width: 767px) {
\t\t\t.featured-gallery-grid {
\t\t\t\tgap: 10px;
\t\t\t}
\t\t\t.featured-gallery-info {
\t\t\t\tpadding: 10px;
\t\t\t}
\t\t\t.featured-gallery-title {
\t\t\t\tfont-size: 13px;
\t\t\t\tmin-height: 32px;
\t\t\t}
\t\t\t.featured-gallery-price {
\t\t\t\tfont-size: 14px;
\t\t\t}
\t\t}
\t\t/* Styles pour les grilles de produits Nouveautés */
\t\t.latest-products-grid {
\t\t\tmargin-top: 30px;
\t\t}
\t\t.product-card-modern {
\t\t\tbackground: white;
\t\t\tborder-radius: 12px;
\t\t\toverflow: hidden;
\t\t\tbox-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
\t\t\ttransition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
\t\t\theight: 100%;
\t\t\tdisplay: flex;
\t\t\tflex-direction: column;
\t\t\tborder: 1px solid #f0f0f0;
\t\t}
\t\t.product-card-modern:hover {
\t\t\ttransform: translateY(-8px);
\t\t\tbox-shadow: 0 8px 24px rgba(0, 0, 0, 0.15);
\t\t\tborder-color: #ffa200;
\t\t}
\t\t.product-image-wrapper {
\t\t\tposition: relative;
\t\t\twidth: 100%;
\t\t\tpadding-top: 75%; /* Ratio 4:3 */
\t\t\toverflow: hidden;
\t\t\tbackground: #f8f9fa;
\t\t}
\t\t.product-image {
\t\t\tposition: absolute;
\t\t\ttop: 0;
\t\t\tleft: 0;
\t\t\twidth: 100%;
\t\t\theight: 100%;
\t\t\tbackground-size: cover;
\t\t\tbackground-position: center;
\t\t\ttransition: transform 0.5s ease;
\t\t}
\t\t.product-card-modern:hover .product-image {
\t\t\ttransform: scale(1.1);
\t\t}
\t\t.product-badge-modern {
\t\t\tposition: absolute;
\t\t\ttop: 10px;
\t\t\tright: 10px;
\t\t\tbackground: linear-gradient(135deg, #ffa200 0%, #ff6b00 100%);
\t\t\tcolor: white;
\t\t\tpadding: 6px 12px;
\t\t\tborder-radius: 20px;
\t\t\tfont-size: 12px;
\t\t\tfont-weight: 600;
\t\t\tz-index: 2;
\t\t\tbox-shadow: 0 2px 8px rgba(255, 162, 0, 0.3);
\t\t}
\t\t.product-badge-modern.new-badge {
\t\t\tbackground: linear-gradient(135deg, #28a745 0%, #20c997 100%);
\t\t}
\t\t.product-overlay {
\t\t\tposition: absolute;
\t\t\ttop: 0;
\t\t\tleft: 0;
\t\t\twidth: 100%;
\t\t\theight: 100%;
\t\t\tbackground: rgba(0, 0, 0, 0.5);
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tjustify-content: center;
\t\t\topacity: 0;
\t\t\ttransition: opacity 0.3s ease;
\t\t\tz-index: 1;
\t\t}
\t\t.product-card-modern:hover .product-overlay {
\t\t\topacity: 1;
\t\t}
\t\t.btn-view-product {
\t\t\tbackground: white;
\t\t\tcolor: #333;
\t\t\tpadding: 12px 24px;
\t\t\tborder-radius: 25px;
\t\t\ttext-decoration: none;
\t\t\tfont-weight: 600;
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tgap: 8px;
\t\t\ttransition: all 0.3s ease;
\t\t\tbox-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
\t\t}
\t\t.btn-view-product:hover {
\t\t\tbackground: #ffa200;
\t\t\tcolor: white;
\t\t\ttransform: scale(1.05);
\t\t}
\t\t.product-info-modern {
\t\t\tpadding: 16px;
\t\t\tflex-grow: 1;
\t\t\tdisplay: flex;
\t\t\tflex-direction: column;
\t\t}
\t\t.product-title-modern {
\t\t\tmargin: 0 0 8px;
\t\t\tfont-size: 16px;
\t\t\tfont-weight: 600;
\t\t\tline-height: 1.4;
\t\t}
\t\t.product-title-modern a {
\t\t\tcolor: #333;
\t\t\ttext-decoration: none;
\t\t\ttransition: color 0.3s ease;
\t\t}
\t\t.product-title-modern a:hover {
\t\t\tcolor: #ffa200;
\t\t}
\t\t.product-price-modern {
\t\t\tfont-size: 20px;
\t\t\tfont-weight: 700;
\t\t\tcolor: #ffa200;
\t\t\tmargin-bottom: 8px;
\t\t}
\t\t.product-shop-modern {
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tgap: 6px;
\t\t\tfont-size: 13px;
\t\t\tcolor: #666;
\t\t\tmargin-bottom: 8px;
\t\t}
\t\t.product-shop-modern i {
\t\t\tcolor: #ffa200;
\t\t}
\t\t.shop-link {
\t\t\tcolor: #666;
\t\t\ttext-decoration: none;
\t\t\ttransition: color 0.3s ease;
\t\t}
\t\t.shop-link:hover {
\t\t\tcolor: #ffa200;
\t\t}
\t\t.product-rating-modern {
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tgap: 4px;
\t\t\tmargin-top: auto;
\t\t}
\t\t.product-rating-modern .fa-star.active {
\t\t\tcolor: #ffc107;
\t\t}
\t\t.product-rating-modern .fa-star-o {
\t\t\tcolor: #ddd;
\t\t}
\t\t.rating-count {
\t\t\tfont-size: 12px;
\t\t\tcolor: #666;
\t\t\tmargin-left: 4px;
\t\t}
\t\t.product-views-modern {
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tgap: 6px;
\t\t\tfont-size: 12px;
\t\t\tcolor: #666;
\t\t\tmargin-top: auto;
\t\t}
\t\t.product-views-modern i {
\t\t\tcolor: #999;
\t\t}
\t\t/* Style des cartes produits */
\t\t.product-card {
\t\t\tbackground: white;
\t\t\tborder-radius: 15px;
\t\t\toverflow: hidden;
\t\t\tbox-shadow: 0 5px 20px rgba(0, 0, 0, 0.1);
\t\t\ttransition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
\t\t\theight: 100%;
\t\t\tdisplay: flex;
\t\t\tflex-direction: column;
\t\t}
\t\t.product-card:hover {
\t\t\tbox-shadow: 0 15px 40px rgba(0, 0, 0, 0.2);
\t\t\ttransform: translateY(-5px);
\t\t}
\t\t.product-image {
\t\t\twidth: 100%;
\t\t\theight: 250px;
\t\t\tbackground-size: cover;
\t\t\tbackground-position: center;
\t\t\tposition: relative;
\t\t\toverflow: hidden;
\t\t}
\t\t.product-image::before {
\t\t\tcontent: '';
\t\t\tposition: absolute;
\t\t\ttop: 0;
\t\t\tleft: -100%;
\t\t\twidth: 100%;
\t\t\theight: 100%;
\t\t\tbackground: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.3), transparent);
\t\t\ttransition: left 0.6s ease;
\t\t}
\t\t.product-card:hover .product-image::before {
\t\t\tleft: 100%;
\t\t}
\t\t.product-badge {
\t\t\tposition: absolute;
\t\t\ttop: 15px;
\t\t\tright: 15px;
\t\t\tbackground: linear-gradient(135deg, #ffa200 0%, #ff6b00 100%);
\t\t\tcolor: white;
\t\t\tpadding: 8px 15px;
\t\t\tborder-radius: 20px;
\t\t\tfont-size: 0.85rem;
\t\t\tfont-weight: 600;
\t\t\tbox-shadow: 0 4px 10px rgba(255, 162, 0, 0.4);
\t\t\tz-index: 1;
\t\t}
\t\t.product-info {
\t\t\tpadding: 20px;
\t\t\tflex-grow: 1;
\t\t\tdisplay: flex;
\t\t\tflex-direction: column;
\t\t}
\t\t.product-title {
\t\t\tfont-size: 1.1rem;
\t\t\tfont-weight: 600;
\t\t\tcolor: #2c3e50;
\t\t\tmargin-bottom: 10px;
\t\t\tline-height: 1.4;
\t\t\tdisplay: -webkit-box;
\t\t\t-webkit-line-clamp: 2;
\t\t\t-webkit-box-orient: vertical;
\t\t\toverflow: hidden;
\t\t}
\t\t.product-price {
\t\t\tfont-size: 1.5rem;
\t\t\tfont-weight: 800;
\t\t\tcolor: #ffa200;
\t\t\tmargin-bottom: 15px;
\t\t}
\t\t.product-shop {
\t\t\tfont-size: 0.9rem;
\t\t\tcolor: #666;
\t\t\tmargin-bottom: 15px;
\t\t}
\t\t.product-shop a {
\t\t\tcolor: #667eea;
\t\t\ttext-decoration: none;
\t\t\ttransition: color 0.3s ease;
\t\t}
\t\t.product-shop a:hover {
\t\t\tcolor: #ffa200;
\t\t}
\t\t/* Newsletter Modern Styles */
\t\t.newsletter-section-modern {
\t\t\tbackground: linear-gradient(135deg, #ffa200 0%, #095ad3 100%);
\t\t\tposition: relative;
\t\t\toverflow: hidden;
\t\t}
\t\t.newsletter-section-modern::before {
\t\t\tcontent: '';
\t\t\tposition: absolute;
\t\t\ttop: -50%;
\t\t\tright: -50%;
\t\t\twidth: 100%;
\t\t\theight: 200%;
\t\t\tbackground: radial-gradient(circle, rgba(255,255,255,0.1) 0%, transparent 70%);
\t\t\tanimation: pulse 3s ease-in-out infinite;
\t\t}
\t\t@keyframes pulse {
\t\t\t0,
\t\t\t100% {
\t\t\t\ttransform: scale(1);
\t\t\t\topacity: 0.5;
\t\t\t}
\t\t\t50% {
\t\t\t\ttransform: scale(1.1);
\t\t\t\topacity: 0.8;
\t\t\t}
\t\t}
\t\t.newsletter-card {
\t\t\tbackground: white;
\t\t\tborder-radius: 20px;
\t\t\tpadding: 40px;
\t\t\tbox-shadow: 0 10px 40px rgba(0, 0, 0, 0.1);
\t\t\tposition: relative;
\t\t\tz-index: 1;
\t\t}
\t\t.newsletter-title {
\t\t\tfont-size: 2.5rem;
\t\t\tfont-weight: bold;
\t\t\tcolor: #333;
\t\t}
\t\t.newsletter-description {
\t\t\tcolor: #666;
\t\t\tfont-size: 1.1rem;
\t\t\tline-height: 1.8;
\t\t}
\t\t.newsletter-form-modern {
\t\t\tposition: relative;
\t\t}
\t\t.newsletter-input-wrapper {
\t\t\tdisplay: flex;
\t\t\tgap: 10px;
\t\t\tmargin-bottom: 15px;
\t\t}
\t\t.newsletter-input {
\t\t\tflex: 1;
\t\t\tpadding: 18px 25px;
\t\t\tborder: 2px solid #e0e0e0;
\t\t\tborder-radius: 50px;
\t\t\tfont-size: 1rem;
\t\t\ttransition: all 0.3s ease;\t\t\tbackground: #fff;
\t\t\tcolor: #333;
\t\t}
\t\t.newsletter-input::placeholder {
\t\t\tcolor: #777;
\t\t}
\t\t.newsletter-input:focus {
\t\t\toutline: none;
\t\t\tborder-color: #ffa200;
\t\t\tbox-shadow: 0 0 0 3px rgba(255, 162, 0, 0.1);
\t\t}
\t\t.newsletter-button {
\t\t\tpadding: 18px 35px;
\t\t\tbackground: linear-gradient(135deg, #ffa200 0%, #e8910a 100%);
\t\t\tcolor: white;
\t\t\tborder: none;
\t\t\tborder-radius: 50px;
\t\t\tfont-weight: 600;
\t\t\tfont-size: 1rem;
\t\t\tcursor: pointer;
\t\t\ttransition: all 0.3s ease;
\t\t\twhite-space: nowrap;
\t\t}
\t\t.newsletter-button:hover {
\t\t\ttransform: translateY(-2px);
\t\t\tbox-shadow: 0 5px 20px rgba(255, 162, 0, 0.4);
\t\t}
\t\t.newsletter-privacy {
\t\t\tcolor: #999;
\t\t}
\t\t/* CTA Modern Styles */
\t\t.cta-section-modern {
\t\t\tbackground: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
\t\t}
\t\t.cta-card {
\t\t\tbackground: white;
\t\t\tborder-radius: 25px;
\t\t\tpadding: 50px;
\t\t\tbox-shadow: 0 15px 50px rgba(0, 0, 0, 0.1);
\t\t\tposition: relative;
\t\t\toverflow: hidden;
\t\t}
\t\t.cta-card::before {
\t\t\tcontent: '';
\t\t\tposition: absolute;
\t\t\ttop: -50px;
\t\t\tright: -50px;
\t\t\twidth: 200px;
\t\t\theight: 200px;
\t\t\tbackground: linear-gradient(135deg, rgba(255,162,0,0.1) 0%, rgba(255,162,0,0.05) 100%);
\t\t\tborder-radius: 50%;
\t\t}
\t\t.cta-badge {
\t\t\tdisplay: inline-block;
\t\t\tpadding: 8px 20px;
\t\t\tbackground: linear-gradient(135deg, #ffa200 0%, #e8910a 100%);
\t\t\tcolor: white;
\t\t\tborder-radius: 50px;
\t\t\tfont-size: 0.9rem;
\t\t\tfont-weight: 600;
\t\t\tmargin-bottom: 20px;
\t\t}
\t\t.cta-title {
\t\t\tfont-size: 3rem;
\t\t\tfont-weight: bold;
\t\t\tcolor: #333;
\t\t\tmargin-bottom: 20px;
\t\t}
\t\t.cta-description {
\t\t\tfont-size: 1.2rem;
\t\t\tcolor: #666;
\t\t\tline-height: 1.8;
\t\t}
\t\t.cta-features {
\t\t\tdisplay: flex;
\t\t\tflex-direction: column;
\t\t\tgap: 15px;
\t\t}
\t\t.cta-feature-item {
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tgap: 10px;
\t\t\tfont-size: 1rem;
\t\t\tcolor: #555;
\t\t}
\t\t.cta-feature-item i {
\t\t\tcolor: #ffa200;
\t\t\tfont-size: 1.3rem;
\t\t}
\t\t.cta-buttons {
\t\t\tdisplay: flex;
\t\t\tgap: 15px;
\t\t\tflex-wrap: wrap;
\t\t}
\t\t.cta-button-primary {
\t\t\tpadding: 15px 35px;
\t\t\tbackground: linear-gradient(135deg, #ffa200 0%, #e8910a 100%);
\t\t\tcolor: white;
\t\t\tborder: none;
\t\t\tborder-radius: 50px;
\t\t\tfont-weight: 600;
\t\t\tfont-size: 1.1rem;
\t\t\ttransition: all 0.3s ease;
\t\t}
\t\t.cta-button-primary:hover {
\t\t\ttransform: translateY(-3px);
\t\t\tbox-shadow: 0 8px 25px rgba(255, 162, 0, 0.4);
\t\t\tcolor: white;
\t\t}
\t\t.cta-button-secondary {
\t\t\tpadding: 15px 35px;
\t\t\tbackground: white;
\t\t\tcolor: #ffa200;
\t\t\tborder: 2px solid #ffa200;
\t\t\tborder-radius: 50px;
\t\t\tfont-weight: 600;
\t\t\tfont-size: 1.1rem;
\t\t\ttransition: all 0.3s ease;
\t\t}
\t\t.cta-button-secondary:hover {
\t\t\tbackground: #ffa200;
\t\t\tcolor: white;
\t\t\ttransform: translateY(-3px);
\t\t\tbox-shadow: 0 8px 25px rgba(255, 162, 0, 0.3);
\t\t}
\t\t.cta-image-wrapper {
\t\t\tposition: relative;
\t\t}
\t\t.cta-decoration {
\t\t\tposition: absolute;
\t\t\ttop: -20px;
\t\t\tright: -20px;
\t\t\twidth: 150px;
\t\t\theight: 150px;
\t\t\tbackground: linear-gradient(135deg, rgba(255,162,0,0.2) 0%, rgba(255,162,0,0.05) 100%);
\t\t\tborder-radius: 50%;
\t\t\tz-index: 0;
\t\t}
\t\t.cta-image {
\t\t\tposition: relative;
\t\t\tz-index: 1;
\t\t\tmax-width: 100%;
\t\t\theight: auto;
\t\t\tborder-radius: 15px;
\t\t}
\t</style>
{% endblock %}
{% block body %}
\t<!-- Hero Section -->
\t<!-- start banner Area avec produits en vedette -->
\t\t{% if bannerProducts is defined and bannerProducts|length > 0 %}
\t\t\t<section class=\"banner-area-modern\"> <div class=\"banner-carousel-wrapper\">
\t\t\t\t<div class=\"active-banner-slider owl-carousel\" style=\"margin-top: 100px;\">
\t\t\t\t\t{% for product in bannerProducts %}
\t\t\t\t\t\t<!-- single-slide -->
\t\t\t\t\t\t<div class=\"banner-slide-item\">
\t\t\t\t\t\t\t<div class=\"container\">
\t\t\t\t\t\t\t\t<div class=\"row align-items-center\">
\t\t\t\t\t\t\t\t\t<div class=\"col-lg-4 col-md-6 col-12\">
\t\t\t\t\t\t\t\t\t\t<div class=\"banner-content-modern\">
\t\t\t\t\t\t\t\t\t\t\t<div class=\"banner-badge\">
\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-star\"></i>
\t\t\t\t\t\t\t\t\t\t\t\tProduit en vedette
\t\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t\t\t<h1 class=\"banner-title-modern\">{{ product.name }}</h1>
\t\t\t\t\t\t\t\t\t\t\t<p class=\"banner-description-modern\">
\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' }}
\t\t\t\t\t\t\t\t\t\t\t</p>
\t\t\t\t\t\t\t\t\t\t\t<div class=\"banner-price-modern\">
\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"price-label\">Prix</span>
\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"price-value\">{{ product.price|number_format(2, '.', ' ') }}
\t\t\t\t\t\t\t\t\t\t\t\t\tHTG</span>
\t\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t\t\t<div class=\"banner-actions-modern\">
\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}) }}\">
\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"btn-text\">Voir le produit</span>
\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"btn-icon\">
\t\t\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-arrow-right\"></i>
\t\t\t\t\t\t\t\t\t\t\t\t\t</span>
\t\t\t\t\t\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t\t\t\t\t\t\t{% if product.shop %}
\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}) }}\">
\t\t\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-store\"></i>
\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span>{{ product.shop.name }}</span>
\t\t\t\t\t\t\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t\t\t\t\t\t\t{% endif %}
\t\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t<div class=\"col-lg-8 col-md-6 col-12\">
\t\t\t\t\t\t\t\t\t\t<div class=\"banner-image-modern\">
\t\t\t\t\t\t\t\t\t\t\t<div class=\"banner-image-wrapper\">
\t\t\t\t\t\t\t\t\t\t\t\t{% if product.images is defined and product.images|length > 0 %}
\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 }}\">
\t\t\t\t\t\t\t\t\t\t\t\t{% else %}
\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 }}\">
\t\t\t\t\t\t\t\t\t\t\t\t{% endif %}
\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"banner-image-overlay\"></div>
\t\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t</div>
\t\t\t\t\t{% endfor %}
\t\t\t\t</div>
\t\t\t</div>
\t\t</section>
\t{% else %}
\t\t<!-- Banner par défaut si pas de produits en vedette -->
\t\t<section class=\"banner-area-modern\">
\t\t\t<div class=\"banner-carousel-wrapper\">
\t\t\t\t<div class=\"container\">
\t\t\t\t\t<div class=\"row align-items-center justify-content-center\">
\t\t\t\t\t\t<div class=\"col-lg-8 text-center\">
\t\t\t\t\t\t\t<div class=\"banner-content-modern\" style=\"margin-top: 140px;\">
\t\t\t\t\t\t\t\t<h1 class=\"banner-title-modern\">Bienvenue sur MaketOu</h1>
\t\t\t\t\t\t\t\t<p class=\"banner-description-modern\">Votre marketplace haïtienne</p>
\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t</div>
\t\t\t\t\t</div>
\t\t\t\t</div>
\t\t\t</div>
\t\t</section>
\t{% endif %}
\t<!-- End banner Area -->
\t<!-- Catégories de produits -->
\t{% if categories|length > 0 %}
\t\t<section class=\"py-5\">
\t\t\t<div class=\"container\">
\t\t\t\t<div class=\"section-title\">
\t\t\t\t\t<h2>Nos catégories</h2>
\t\t\t\t\t<p>Explorez nos différentes catégories de produits</p>
\t\t\t\t</div>
\t\t\t\t<div class=\"row\" id=\"productCategoriesContainer\">
\t\t\t\t\t{% for category in categories|slice(0, 8) %}
\t\t\t\t\t\t<div class=\"col-lg-3 col-md-4 col-sm-6 mb-4\">
\t\t\t\t\t\t\t<div class=\"category-card-custom\">
\t\t\t\t\t\t\t\t<div class=\"category-image-wrapper\">
\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 %}')\">
\t\t\t\t\t\t\t\t\t\t<div class=\"category-overlay-custom\">
\t\t\t\t\t\t\t\t\t\t\t<div class=\"category-icon-wrapper\">
\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-tag\" style=\"font-size: 3rem;\"></i>
\t\t\t\t\t\t\t\t\t\t\t\t<h4 class=\"mt-3\">{{ category.name }}</h4>
\t\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t<div class=\"category-content p-3\">
\t\t\t\t\t\t\t\t\t<h5 class=\"mb-2\">{{ category.name }}</h5>
\t\t\t\t\t\t\t\t\t{% if category.description %}
\t\t\t\t\t\t\t\t\t\t<p class=\"text-muted mb-3 small\">{{ category.description|striptags|slice(0, 60) }}
\t\t\t\t\t\t\t\t\t\t\t{% if category.description|striptags|length > 60 %}...
\t\t\t\t\t\t\t\t\t\t\t{% endif %}
\t\t\t\t\t\t\t\t\t\t</p>
\t\t\t\t\t\t\t\t\t{% endif %}
\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\">
\t\t\t\t\t\t\t\t\t\tVoir les produits
\t\t\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t</div>
\t\t\t\t\t{% endfor %}
\t\t\t\t</div>
\t\t\t</div>
\t\t</section>
\t{% endif %}
\t<!-- Catégories de boutiques -->
\t{% if shopCategories|length > 0 %}
\t\t<section class=\"py-5 bg-light\">
\t\t\t<div class=\"container\">
\t\t\t\t<div class=\"section-title\">
\t\t\t\t\t<h2>Nos catégories de boutiques</h2>
\t\t\t\t\t<p>Explorez les différentes catégories de boutiques disponibles sur MaketOu</p>
\t\t\t\t</div>
\t\t\t\t<div class=\"row\" id=\"shopCategoriesContainer\">
\t\t\t\t\t{% for shopCategory in shopCategories|slice(0, 6) %}
\t\t\t\t\t\t<div class=\"col-lg-4 col-md-6 mb-4\">
\t\t\t\t\t\t\t<a href=\"{{ path('ui_shops_list') }}?category={{ shopCategory.slug }}\" class=\"text-decoration-none\" style=\"display: block;\">
\t\t\t\t\t\t\t\t<div class=\"category-card-custom shop-category-clickable\">
\t\t\t\t\t\t\t\t\t<div class=\"category-image-wrapper\">
\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 %}')\">
\t\t\t\t\t\t\t\t\t\t\t<div class=\"category-overlay-custom\">
\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"category-icon-wrapper\">
\t\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-store\" style=\"font-size: 3rem;\"></i>
\t\t\t\t\t\t\t\t\t\t\t\t\t<h4 class=\"mt-3\">{{ shopCategory.name }}</h4>
\t\t\t\t\t\t\t\t\t\t\t\t\t{% if shopCategory.description %}
\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) }}
\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{% if shopCategory.description|striptags|length > 100 %}...
\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{% endif %}
\t\t\t\t\t\t\t\t\t\t\t\t\t\t</p>
\t\t\t\t\t\t\t\t\t\t\t\t\t{% endif %}
\t\t\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t<div class=\"category-content p-3\">
\t\t\t\t\t\t\t\t\t\t<h5 class=\"mb-2\">{{ shopCategory.name }}</h5>
\t\t\t\t\t\t\t\t\t\t{% if shopCategory.description %}
\t\t\t\t\t\t\t\t\t\t\t<p class=\"text-muted mb-3 small\">{{ shopCategory.description|striptags|slice(0, 80) }}
\t\t\t\t\t\t\t\t\t\t\t\t{% if shopCategory.description|striptags|length > 80 %}...
\t\t\t\t\t\t\t\t\t\t\t\t{% endif %}
\t\t\t\t\t\t\t\t\t\t\t</p>
\t\t\t\t\t\t\t\t\t\t{% endif %}
\t\t\t\t\t\t\t\t\t\t<span class=\"btn btn-primary-custom btn-sm w-100\">
\t\t\t\t\t\t\t\t\t\t\tVoir les boutiques
\t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-arrow-right ms-2\"></i>
\t\t\t\t\t\t\t\t\t\t</span>
\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t</div>
\t\t\t\t\t{% endfor %}
\t\t\t\t</div>
\t\t\t\t{% if shopCategories|length > 6 %}
\t\t\t\t\t<div class=\"text-center mt-4\">
\t\t\t\t\t\t<button class=\"btn btn-outline-primary btn-lg\" onclick=\"showAllShopCategories()\">
\t\t\t\t\t\t\t<i class=\"lnr lnr-store me-2\"></i>
\t\t\t\t\t\t\tVoir toutes les catégories de boutiques ({{ shopCategories|length }})
\t\t\t\t\t\t</button>
\t\t\t\t\t</div>
\t\t\t\t{% endif %}
\t\t\t</div>
\t\t</section>
\t{% endif %}
\t<!-- Produits en vedette -->
\t{% if featuredProducts|length > 0 %}
\t\t<section class=\"py-5\">
\t\t\t<div class=\"container\">
\t\t\t\t<div class=\"section-title text-center mb-5\">
\t\t\t\t\t<h2>Produits en vedette</h2>
\t\t\t\t\t<p>Découvrez nos produits les plus populaires et les mieux notés</p>
\t\t\t\t</div>
\t\t\t\t<div class=\"featured-gallery-wrapper\">
\t\t\t\t\t<div class=\"featured-gallery-container\">
\t\t\t\t\t\t<div class=\"featured-gallery-grid\" id=\"featuredGalleryGrid\">
\t\t\t\t\t\t\t{% for product in featuredProducts %}
\t\t\t\t\t\t\t\t<div class=\"featured-gallery-item\">
\t\t\t\t\t\t\t\t\t<div class=\"single-product\">
\t\t\t\t\t\t\t\t\t\t<div class=\"product-image-container\" onmouseenter=\"showImageNav({{ product.id }})\" onmouseleave=\"hideImageNav({{ product.id }})\">
\t\t\t\t\t\t\t\t\t\t\t<a href=\"{{ path('ui_product_show', { slug: product.slug }) }}\">
\t\t\t\t\t\t\t\t\t\t\t\t{% if product.images is defined and product.images|length > 0 %}
\t\t\t\t\t\t\t\t\t\t\t\t\t<img
\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"img-fluid main-product-img\"
\t\t\t\t\t\t\t\t\t\t\t\t\t\tid=\"main-img-{{ product.id }}\"
\t\t\t\t\t\t\t\t\t\t\t\t\t\tsrc=\"{{ asset(product.images[0]) }}\"
\t\t\t\t\t\t\t\t\t\t\t\t\t\talt=\"{{ product.name }}\"
\t\t\t\t\t\t\t\t\t\t\t\t\t\tonerror=\"this.onerror=null;this.src='{{ asset('ui/img/product/p1.jpg') }}';\"
\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{% else %}
\t\t\t\t\t\t\t\t\t\t\t\t\t<img class=\"img-fluid main-product-img\" id=\"main-img-{{ product.id }}\" src=\"{{ asset('ui/img/product/p1.jpg') }}\" alt=\"{{ product.name }}\">
\t\t\t\t\t\t\t\t\t\t\t\t{% endif %}
\t\t\t\t\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t\t\t\t\t\t<!-- Boutons de navigation (visibles au survol) -->
\t\t\t\t\t\t\t\t\t\t\t{% if product.images is defined and product.images|length > 1 %}
\t\t\t\t\t\t\t\t\t\t\t\t<button class=\"img-nav-btn img-nav-left\" id=\"img-left-{{ product.id }}\" onclick=\"prevImage({{ product.id }})\" style=\"display: none;\">
\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"lnr lnr-chevron-left\"></span>
\t\t\t\t\t\t\t\t\t\t\t\t</button>
\t\t\t\t\t\t\t\t\t\t\t\t<button class=\"img-nav-btn img-nav-right\" id=\"img-right-{{ product.id }}\" onclick=\"nextImage({{ product.id }})\" style=\"display: none;\">
\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"lnr lnr-chevron-right\"></span>
\t\t\t\t\t\t\t\t\t\t\t\t</button>
\t\t\t\t\t\t\t\t\t\t\t\t<!-- Indicateurs de position -->
\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"img-indicators\" id=\"img-indicators-{{ product.id }}\" style=\"display: none;\">
\t\t\t\t\t\t\t\t\t\t\t\t\t{% for img in product.images %}
\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"indicator\" id=\"indicator-{{ product.id }}-{{ loop.index0 }}\" onclick=\"showImage({{ product.id }}, {{ loop.index0 }})\"></span>
\t\t\t\t\t\t\t\t\t\t\t\t\t{% endfor %}
\t\t\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t\t\t{% endif %}
\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t\t<div class=\"product-details\">
\t\t\t\t\t\t\t\t\t\t\t<a href=\"{{ path('ui_product_show', { slug: product.slug }) }}\">
\t\t\t\t\t\t\t\t\t\t\t\t<h6>{{ product.name }}</h6>
\t\t\t\t\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t\t\t\t\t\t<!-- Affichage de la boutique -->
\t\t\t\t\t\t\t\t\t\t\t<div class=\"shop-info\">
\t\t\t\t\t\t\t\t\t\t\t\t<small class=\"text-muted\">
\t\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-store\"></i>
\t\t\t\t\t\t\t\t\t\t\t\t\tVendu par :
\t\t\t\t\t\t\t\t\t\t\t\t\t{% if product.shop is defined and product.shop %}
\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"{{ path('ui_shop_show', {'slug': product.shop.slug}) }}\" class=\"shop-link\">
\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{{ product.shop.name }}
\t\t\t\t\t\t\t\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t\t\t\t\t\t\t\t{% else %}
\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"text-muted\">Boutique inconnue</span>
\t\t\t\t\t\t\t\t\t\t\t\t\t{% endif %}
\t\t\t\t\t\t\t\t\t\t\t\t</small>
\t\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t\t\t<div class=\"price\">
\t\t\t\t\t\t\t\t\t\t\t\t<h6>{{ product.price|number_format(2, '.', ' ') }}
\t\t\t\t\t\t\t\t\t\t\t\t\tHTG</h6>
\t\t\t\t\t\t\t\t\t\t\t\t{% if product.compareAtPrice %}
\t\t\t\t\t\t\t\t\t\t\t\t\t<h6 class=\"l-through\">{{ product.compareAtPrice|number_format(2, '.', ' ') }}
\t\t\t\t\t\t\t\t\t\t\t\t\t\tHTG</h6>
\t\t\t\t\t\t\t\t\t\t\t\t{% endif %}
\t\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t\t\t<div class=\"prd-bottom\">
\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"javascript:void(0)\" class=\"social-info add-to-cart\" data-product-id=\"{{ product.id }}\" data-qty=\"1\">
\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"ti-bag\"></span>
\t\t\t\t\t\t\t\t\t\t\t\t\t<p class=\"hover-text\">+ panier</p>
\t\t\t\t\t\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"#\" class=\"social-info wishlist-btn\" data-product-id=\"{{ product.id }}\" {% if app.user %} onclick=\"toggleWishlist({{ product.id }}, this); return false;\" {% else %} onclick=\"alert('Vous devez être connecté pour ajouter aux favoris'); return false;\" {% endif %}>
\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"lnr lnr-heart\"></span>
\t\t\t\t\t\t\t\t\t\t\t\t\t<p class=\"hover-text\">Favoris</p>
\t\t\t\t\t\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"#\" class=\"social-info comparison-btn\" data-product-id=\"{{ product.id }}\" {% if app.user %} onclick=\"toggleComparison({{ product.id }}, this); return false;\" {% else %} onclick=\"alert('Vous devez être connecté pour comparer des produits'); return false;\" {% endif %}>
\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"lnr lnr-sync\"></span>
\t\t\t\t\t\t\t\t\t\t\t\t\t<p class=\"hover-text\">Comparer</p>
\t\t\t\t\t\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"{{ path('ui_product_show', { slug: product.slug }) }}\" class=\"social-info\">
\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"lnr lnr-move\"></span>
\t\t\t\t\t\t\t\t\t\t\t\t\t<p class=\"hover-text\">Voir plus</p>
\t\t\t\t\t\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t{% endfor %}
\t\t\t\t\t\t</div>
\t\t\t\t\t</div>
\t\t\t\t\t<!-- Contrôles de navigation -->
\t\t\t\t\t<div class=\"featured-gallery-controls\">
\t\t\t\t\t\t<button class=\"featured-gallery-nav-btn featured-gallery-prev\" id=\"featuredGalleryPrev\" aria-label=\"Précédent\">
\t\t\t\t\t\t\t<i class=\"lnr lnr-chevron-left\"></i>
\t\t\t\t\t\t</button>
\t\t\t\t\t\t<button class=\"featured-gallery-nav-btn featured-gallery-next\" id=\"featuredGalleryNext\" aria-label=\"Suivant\">
\t\t\t\t\t\t\t<i class=\"lnr lnr-chevron-right\"></i>
\t\t\t\t\t\t</button>
\t\t\t\t\t</div>
\t\t\t\t\t<!-- Bouton charger plus -->
\t\t\t\t\t<div class=\"featured-gallery-load-more text-center mt-4\" id=\"featuredGalleryLoadMore\" style=\"display: none;\">
\t\t\t\t\t\t<button class=\"btn btn-outline-primary\" id=\"loadMoreFeaturedBtn\">
\t\t\t\t\t\t\t<i class=\"lnr lnr-plus-circle me-2\"></i>
\t\t\t\t\t\t\tCharger plus de produits
\t\t\t\t\t\t</button>
\t\t\t\t\t</div>
\t\t\t\t</div>
\t\t\t\t<div class=\"text-center mt-5\">
\t\t\t\t\t<a href=\"{{ path('ui_listing') }}\" class=\"btn-view-all-products\">
\t\t\t\t\t\t<span>Voir tous les produits</span>
\t\t\t\t\t\t<i class=\"lnr lnr-arrow-right\"></i>
\t\t\t\t\t</a>
\t\t\t\t</div>
\t\t\t</div>
\t\t</section>
\t{% endif %}
\t<!-- Nouveautés -->
\t{% if latestProducts|length > 0 %}
\t\t<section class=\"py-5 bg-light\">
\t\t\t<div class=\"container\">
\t\t\t\t<div class=\"section-title text-center mb-5\">
\t\t\t\t\t<h2>Nouveautés</h2>
\t\t\t\t\t<p>Les derniers produits ajoutés sur MaketOu</p>
\t\t\t\t</div>
\t\t\t\t<div class=\"featured-gallery-wrapper\">
\t\t\t\t\t<div class=\"featured-gallery-container\">
\t\t\t\t\t\t<div class=\"featured-gallery-grid\" id=\"latestGalleryGrid\">
\t\t\t\t\t\t\t{% for product in latestProducts %}
\t\t\t\t\t\t\t\t<div class=\"featured-gallery-item\">
\t\t\t\t\t\t\t\t\t<div class=\"single-product\">
\t\t\t\t\t\t\t\t\t\t<div class=\"product-image-container\" onmouseenter=\"showImageNav({{ product.id }})\" onmouseleave=\"hideImageNav({{ product.id }})\">
\t\t\t\t\t\t\t\t\t\t\t<a href=\"{{ path('ui_product_show', { slug: product.slug }) }}\">
\t\t\t\t\t\t\t\t\t\t\t\t{% if product.images is defined and product.images|length > 0 %}
\t\t\t\t\t\t\t\t\t\t\t\t\t<img class=\"img-fluid main-product-img\" id=\"main-img-{{ product.id }}\" src=\"{{ asset(product.images[0]) }}\" alt=\"{{ product.name }}\">
\t\t\t\t\t\t\t\t\t\t\t\t{% else %}
\t\t\t\t\t\t\t\t\t\t\t\t\t<img class=\"img-fluid main-product-img\" id=\"main-img-{{ product.id }}\" src=\"{{ asset('ui/img/product/p1.jpg') }}\" alt=\"{{ product.name }}\">
\t\t\t\t\t\t\t\t\t\t\t\t{% endif %}
\t\t\t\t\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t\t\t\t\t\t<!-- Boutons de navigation (visibles au survol) -->
\t\t\t\t\t\t\t\t\t\t\t{% if product.images is defined and product.images|length > 1 %}
\t\t\t\t\t\t\t\t\t\t\t\t<button class=\"img-nav-btn img-nav-left\" id=\"img-left-{{ product.id }}\" onclick=\"prevImage({{ product.id }})\" style=\"display: none;\">
\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"lnr lnr-chevron-left\"></span>
\t\t\t\t\t\t\t\t\t\t\t\t</button>
\t\t\t\t\t\t\t\t\t\t\t\t<button class=\"img-nav-btn img-nav-right\" id=\"img-right-{{ product.id }}\" onclick=\"nextImage({{ product.id }})\" style=\"display: none;\">
\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"lnr lnr-chevron-right\"></span>
\t\t\t\t\t\t\t\t\t\t\t\t</button>
\t\t\t\t\t\t\t\t\t\t\t\t<!-- Indicateurs de position -->
\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"img-indicators\" id=\"img-indicators-{{ product.id }}\" style=\"display: none;\">
\t\t\t\t\t\t\t\t\t\t\t\t\t{% for img in product.images %}
\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"indicator\" id=\"indicator-{{ product.id }}-{{ loop.index0 }}\" onclick=\"showImage({{ product.id }}, {{ loop.index0 }})\"></span>
\t\t\t\t\t\t\t\t\t\t\t\t\t{% endfor %}
\t\t\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t\t\t{% endif %}
\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t\t<div class=\"product-details\">
\t\t\t\t\t\t\t\t\t\t\t<a href=\"{{ path('ui_product_show', { slug: product.slug }) }}\">
\t\t\t\t\t\t\t\t\t\t\t\t<h6>{{ product.name }}</h6>
\t\t\t\t\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t\t\t\t\t\t<!-- Affichage de la boutique -->
\t\t\t\t\t\t\t\t\t\t\t<div class=\"shop-info\">
\t\t\t\t\t\t\t\t\t\t\t\t<small class=\"text-muted\">
\t\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-store\"></i>
\t\t\t\t\t\t\t\t\t\t\t\t\tVendu par :
\t\t\t\t\t\t\t\t\t\t\t\t\t{% if product.shop is defined and product.shop %}
\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"{{ path('ui_shop_show', {'slug': product.shop.slug}) }}\" class=\"shop-link\">
\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{{ product.shop.name }}
\t\t\t\t\t\t\t\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t\t\t\t\t\t\t\t{% else %}
\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"text-muted\">Boutique inconnue</span>
\t\t\t\t\t\t\t\t\t\t\t\t\t{% endif %}
\t\t\t\t\t\t\t\t\t\t\t\t</small>
\t\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t\t\t<div class=\"price\">
\t\t\t\t\t\t\t\t\t\t\t\t<h6>{{ product.price|number_format(2, '.', ' ') }}
\t\t\t\t\t\t\t\t\t\t\t\t\tHTG</h6>
\t\t\t\t\t\t\t\t\t\t\t\t{% if product.compareAtPrice %}
\t\t\t\t\t\t\t\t\t\t\t\t\t<h6 class=\"l-through\">{{ product.compareAtPrice|number_format(2, '.', ' ') }}
\t\t\t\t\t\t\t\t\t\t\t\t\t\tHTG</h6>
\t\t\t\t\t\t\t\t\t\t\t\t{% endif %}
\t\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t\t\t<div class=\"prd-bottom\">
\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"javascript:void(0)\" class=\"social-info add-to-cart\" data-product-id=\"{{ product.id }}\" data-qty=\"1\">
\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"ti-bag\"></span>
\t\t\t\t\t\t\t\t\t\t\t\t\t<p class=\"hover-text\">+ panier</p>
\t\t\t\t\t\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"#\" class=\"social-info wishlist-btn\" data-product-id=\"{{ product.id }}\" {% if app.user %} onclick=\"toggleWishlist({{ product.id }}, this); return false;\" {% else %} onclick=\"alert('Vous devez être connecté pour ajouter aux favoris'); return false;\" {% endif %}>
\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"lnr lnr-heart\"></span>
\t\t\t\t\t\t\t\t\t\t\t\t\t<p class=\"hover-text\">Favoris</p>
\t\t\t\t\t\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"#\" class=\"social-info comparison-btn\" data-product-id=\"{{ product.id }}\" {% if app.user %} onclick=\"toggleComparison({{ product.id }}, this); return false;\" {% else %} onclick=\"alert('Vous devez être connecté pour comparer des produits'); return false;\" {% endif %}>
\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"lnr lnr-sync\"></span>
\t\t\t\t\t\t\t\t\t\t\t\t\t<p class=\"hover-text\">Comparer</p>
\t\t\t\t\t\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"{{ path('ui_product_show', { slug: product.slug }) }}\" class=\"social-info\">
\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"lnr lnr-move\"></span>
\t\t\t\t\t\t\t\t\t\t\t\t\t<p class=\"hover-text\">Voir plus</p>
\t\t\t\t\t\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t{% endfor %}
\t\t\t\t\t\t</div>
\t\t\t\t\t</div>
\t\t\t\t\t<!-- Contrôles de navigation -->
\t\t\t\t\t<div class=\"featured-gallery-controls\">
\t\t\t\t\t\t<button class=\"featured-gallery-nav-btn featured-gallery-prev\" id=\"latestGalleryPrev\" aria-label=\"Précédent\">
\t\t\t\t\t\t\t<i class=\"lnr lnr-chevron-left\"></i>
\t\t\t\t\t\t</button>
\t\t\t\t\t\t<button class=\"featured-gallery-nav-btn featured-gallery-next\" id=\"latestGalleryNext\" aria-label=\"Suivant\">
\t\t\t\t\t\t\t<i class=\"lnr lnr-chevron-right\"></i>
\t\t\t\t\t\t</button>
\t\t\t\t\t</div>
\t\t\t\t\t<!-- Bouton charger plus -->
\t\t\t\t\t<div class=\"featured-gallery-load-more text-center mt-4\" id=\"latestGalleryLoadMore\" style=\"display: none;\">
\t\t\t\t\t\t<button class=\"btn btn-outline-primary\" id=\"loadMoreLatestBtn\">
\t\t\t\t\t\t\t<i class=\"lnr lnr-plus-circle me-2\"></i>
\t\t\t\t\t\t\tCharger plus de produits
\t\t\t\t\t\t</button>
\t\t\t\t\t</div>
\t\t\t\t</div>
\t\t\t\t<div class=\"text-center mt-5\">
\t\t\t\t\t<a href=\"{{ path('ui_listing') }}\" class=\"btn-view-all-products\">
\t\t\t\t\t\t<span>Voir tous les produits</span>
\t\t\t\t\t\t<i class=\"lnr lnr-arrow-right\"></i>
\t\t\t\t\t</a>
\t\t\t\t</div>
\t\t\t</div>
\t\t</section>
\t{% endif %}
\t{% if recommendedProducts|length > 0 %}
\t\t<section class=\"py-5\">
\t\t\t<div class=\"container\">
\t\t\t\t<div class=\"section-title text-center mb-5\">
\t\t\t\t\t<h2>Recommandés pour vous</h2>
\t\t\t\t\t<p>Suggestions basées sur votre activité récente et les tendances de MaketOu</p>
\t\t\t\t</div>
\t\t\t\t<div class=\"row g-4\">
\t\t\t\t\t{% for product in recommendedProducts %}
\t\t\t\t\t\t<div class=\"col-12 col-sm-6 col-lg-3\">
\t\t\t\t\t\t\t<div class=\"product-card h-100\">
\t\t\t\t\t\t\t\t{% set productImage = product.images[0] ?? 'ui/img/product/p1.jpg' %}
\t\t\t\t\t\t\t\t<div class=\"product-image\" style=\"background-image:url('{{ asset(productImage) }}');\">
\t\t\t\t\t\t\t\t\t{% if product.isFeatured %}
\t\t\t\t\t\t\t\t\t\t<span class=\"product-badge bg-success\">Populaire</span>
\t\t\t\t\t\t\t\t\t{% endif %}
\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t<div class=\"p-3\">
\t\t\t\t\t\t\t\t\t<h6 class=\"mb-2\">
\t\t\t\t\t\t\t\t\t\t<a href=\"{{ path('ui_product_show', { slug: product.slug }) }}\">{{ product.name }}</a>
\t\t\t\t\t\t\t\t\t</h6>
\t\t\t\t\t\t\t\t\t<p class=\"mb-2 text-muted small\">
\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-store\"></i>
\t\t\t\t\t\t\t\t\t\t{% if product.shop %}
\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>
\t\t\t\t\t\t\t\t\t\t{% else %}
\t\t\t\t\t\t\t\t\t\t\tBoutique non spécifiée
\t\t\t\t\t\t\t\t\t\t{% endif %}
\t\t\t\t\t\t\t\t\t</p>
\t\t\t\t\t\t\t\t\t<div class=\"d-flex align-items-center justify-content-between\">
\t\t\t\t\t\t\t\t\t\t<span class=\"fw-bold text-primary\">{{ product.price|number_format(2, '.', ' ') }} HTG</span>
\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\">
\t\t\t\t\t\t\t\t\t\t\t<i class=\"ti ti-bag\"></i>
\t\t\t\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t</div>
\t\t\t\t\t{% endfor %}
\t\t\t\t</div>
\t\t\t</div>
\t\t</section>
\t{% endif %}
\t{% if recentlyViewedProducts|length > 0 %}
\t\t<section class=\"py-5 bg-light\">
\t\t\t<div class=\"container\">
\t\t\t\t<div class=\"section-title text-center mb-5\">
\t\t\t\t\t<h2>Récemment consultés</h2>
\t\t\t\t\t<p>Retrouvez les articles que vous avez explorés dernièrement</p>
\t\t\t\t</div>
\t\t\t\t<div class=\"featured-gallery-wrapper\">
\t\t\t\t\t<div class=\"featured-gallery-container\">
\t\t\t\t\t\t<div class=\"featured-gallery-grid\">
\t\t\t\t\t\t\t{% for product in recentlyViewedProducts %}
\t\t\t\t\t\t\t\t<div class=\"featured-gallery-item\">
\t\t\t\t\t\t\t\t\t<div class=\"single-product\">
\t\t\t\t\t\t\t\t\t\t<div class=\"product-image-container\">
\t\t\t\t\t\t\t\t\t\t\t<a href=\"{{ path('ui_product_show', { slug: product.slug }) }}\">
\t\t\t\t\t\t\t\t\t\t\t\t{% if product.images is defined and product.images|length > 0 %}
\t\t\t\t\t\t\t\t\t\t\t\t\t<img class=\"img-fluid main-product-img\" src=\"{{ asset(product.images[0]) }}\" alt=\"{{ product.name }}\">
\t\t\t\t\t\t\t\t\t\t\t\t{% else %}
\t\t\t\t\t\t\t\t\t\t\t\t\t<img class=\"img-fluid main-product-img\" src=\"{{ asset('ui/img/product/p1.jpg') }}\" alt=\"{{ product.name }}\">
\t\t\t\t\t\t\t\t\t\t\t\t{% endif %}
\t\t\t\t\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t\t<div class=\"product-details\">
\t\t\t\t\t\t\t\t\t\t\t<a href=\"{{ path('ui_product_show', { slug: product.slug }) }}\">
\t\t\t\t\t\t\t\t\t\t\t\t<h6>{{ product.name }}</h6>
\t\t\t\t\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t\t\t\t\t\t<div class=\"price\">
\t\t\t\t\t\t\t\t\t\t\t\t<h6>{{ product.price|number_format(2, '.', ' ') }} HTG</h6>
\t\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t\t\t<div class=\"prd-bottom\">
\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"javascript:void(0)\" class=\"social-info add-to-cart\" data-product-id=\"{{ product.id }}\" data-qty=\"1\">
\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"ti-bag\"></span>
\t\t\t\t\t\t\t\t\t\t\t\t\t<p class=\"hover-text\">+ panier</p>
\t\t\t\t\t\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"{{ path('ui_product_show', { slug: product.slug }) }}\" class=\"social-info\">
\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"lnr lnr-move\"></span>
\t\t\t\t\t\t\t\t\t\t\t\t\t<p class=\"hover-text\">Voir</p>
\t\t\t\t\t\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t{% endfor %}
\t\t\t\t\t\t</div>
\t\t\t\t\t</div>
\t\t\t\t</div>
\t\t\t</div>
\t\t</section>
\t{% endif %}
\t<!-- Fonctionnalités -->
\t<section class=\"py-5\">
\t\t<div class=\"container\">
\t\t\t<div class=\"section-title\">
\t\t\t\t<h2>Pourquoi choisir MaketOu ?</h2>
\t\t\t\t<p>Découvrez les avantages de notre plateforme</p>
\t\t\t</div>
\t\t\t<div class=\"row\">
\t\t\t\t<div class=\"col-lg-3 col-md-6 mb-4\">
\t\t\t\t\t<div class=\"feature-card\">
\t\t\t\t\t\t<div class=\"feature-icon\">
\t\t\t\t\t\t\t<i class=\"lnr lnr-rocket\"></i>
\t\t\t\t\t\t</div>
\t\t\t\t\t\t<h5>Livraison rapide</h5>
\t\t\t\t\t\t<p>Recevez vos commandes rapidement avec notre réseau de livraison optimisé</p>
\t\t\t\t\t</div>
\t\t\t\t</div>
\t\t\t\t<div class=\"col-lg-3 col-md-6 mb-4\">
\t\t\t\t\t<div class=\"feature-card\">
\t\t\t\t\t\t<div class=\"feature-icon\">
\t\t\t\t\t\t\t<i class=\"lnr lnr-lock\"></i>
\t\t\t\t\t\t</div>
\t\t\t\t\t\t<h5>Paiement sécurisé</h5>
\t\t\t\t\t\t<p>Vos transactions sont protégées avec les dernières technologies de sécurité</p>
\t\t\t\t\t</div>
\t\t\t\t</div>
\t\t\t\t<div class=\"col-lg-3 col-md-6 mb-4\">
\t\t\t\t\t<div class=\"feature-card\">
\t\t\t\t\t\t<div class=\"feature-icon\">
\t\t\t\t\t\t\t<i class=\"lnr lnr-phone\"></i>
\t\t\t\t\t\t</div>
\t\t\t\t\t\t<h5>Support 24/7</h5>
\t\t\t\t\t\t<p>Notre équipe est disponible pour vous aider à tout moment</p>
\t\t\t\t\t</div>
\t\t\t\t</div>
\t\t\t\t<div class=\"col-lg-3 col-md-6 mb-4\">
\t\t\t\t\t<div class=\"feature-card\">
\t\t\t\t\t\t<div class=\"feature-icon\">
\t\t\t\t\t\t\t<i class=\"lnr lnr-undo\"></i>
\t\t\t\t\t\t</div>
\t\t\t\t\t\t<h5>Retour facile</h5>
\t\t\t\t\t\t<p>Politique de retour flexible pour votre tranquillité d'esprit</p>
\t\t\t\t\t</div>
\t\t\t\t</div>
\t\t\t</div>
\t\t</div>
\t</section>
\t<!-- Newsletter -->
\t<section class=\"newsletter-section-modern py-5\">
\t\t<div class=\"container\">
\t\t\t<div class=\"row justify-content-center\">
\t\t\t\t<div class=\"col-lg-10\">
\t\t\t\t\t<div class=\"newsletter-card\">
\t\t\t\t\t\t<div class=\"row align-items-center\">
\t\t\t\t\t\t\t<div class=\"col-lg-6 text-center text-lg-start mb-4 mb-lg-0\">
\t\t\t\t\t\t\t\t<div class=\"newsletter-icon mb-3\">
\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-envelope\" style=\"font-size: 4rem; color: #ffa200;\"></i>
\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t<h2 class=\"newsletter-title mb-3\">Restez informé des dernières nouveautés</h2>
\t\t\t\t\t\t\t\t<p class=\"newsletter-description mb-0\">
\t\t\t\t\t\t\t\t\tInscrivez-vous à notre newsletter pour recevoir les offres exclusives,
\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.
\t\t\t\t\t\t\t\t</p>
\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t<div class=\"col-lg-6\">
\t\t\t\t\t\t\t\t<form class=\"newsletter-form-modern\" id=\"newsletterFormHome\">
\t\t\t\t\t\t\t\t\t<div class=\"newsletter-input-wrapper\">
\t\t\t\t\t\t\t\t\t\t<input type=\"email\" class=\"newsletter-input\" placeholder=\"Votre adresse email\" required name=\"email\">
\t\t\t\t\t\t\t\t\t\t<button class=\"newsletter-button\" type=\"submit\">
\t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-arrow-right me-2\"></i>
\t\t\t\t\t\t\t\t\t\t\tS'abonner
\t\t\t\t\t\t\t\t\t\t</button>
\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t<p class=\"newsletter-privacy mt-3 text-center\">
\t\t\t\t\t\t\t\t\t\t<small>
\t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-lock me-1\"></i>
\t\t\t\t\t\t\t\t\t\t\tVos données sont sécurisées. Pas de spam, désinscription facile.
\t\t\t\t\t\t\t\t\t\t</small>
\t\t\t\t\t\t\t\t\t</p>
\t\t\t\t\t\t\t\t</form>
\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t</div>
\t\t\t\t\t</div>
\t\t\t\t</div>
\t\t\t</div>
\t\t</div>
\t</section>
\t<!-- Call to Action -->
\t<section class=\"cta-section-modern py-5\">
\t\t<div class=\"container\">
\t\t\t<div class=\"cta-card\">
\t\t\t\t<div class=\"row align-items-center\">
\t\t\t\t\t<div class=\"col-lg-6 mb-4 mb-lg-0\">
\t\t\t\t\t\t<div class=\"cta-content\">
\t\t\t\t\t\t\t<span class=\"cta-badge\">
\t\t\t\t\t\t\t\t<i class=\"lnr lnr-rocket me-2\"></i>
\t\t\t\t\t\t\t\tCommencez dès aujourd'hui
\t\t\t\t\t\t\t</span>
\t\t\t\t\t\t\t<h2 class=\"cta-title mb-3\">Prêt à commencer ?</h2>
\t\t\t\t\t\t\t<p class=\"cta-description mb-4\">
\t\t\t\t\t\t\t\tQue vous soyez
\t\t\t\t\t\t\t\t<strong>acheteur</strong>
\t\t\t\t\t\t\t\tou
\t\t\t\t\t\t\t\t<strong>vendeur</strong>, MaketOu vous offre la plateforme idéale
\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 !
\t\t\t\t\t\t\t</p>
\t\t\t\t\t\t\t<div class=\"cta-features mb-4\">
\t\t\t\t\t\t\t\t<div class=\"cta-feature-item\">
\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-checkmark-circle\"></i>
\t\t\t\t\t\t\t\t\t<span>Plateforme 100% sécurisée</span>
\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t<div class=\"cta-feature-item\">
\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-checkmark-circle\"></i>
\t\t\t\t\t\t\t\t\t<span>Support client 24/7</span>
\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t<div class=\"cta-feature-item\">
\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-checkmark-circle\"></i>
\t\t\t\t\t\t\t\t\t<span>Paiements multiples</span>
\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t<div class=\"cta-buttons\">
\t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn cta-button-primary\" onclick=\"openReadyModal()\">
\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-rocket me-2\"></i>
\t\t\t\t\t\t\t\t\tPrêt à commencer ?
\t\t\t\t\t\t\t\t</button>
\t\t\t\t\t\t\t\t<a href=\"{{ path('ui_listing') }}\" class=\"btn cta-button-secondary\">
\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-magnifier me-2\"></i>
\t\t\t\t\t\t\t\t\tVoir les produits
\t\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t</div>
\t\t\t\t\t</div>
\t\t\t\t\t<div class=\"col-lg-6\">
\t\t\t\t\t\t<div class=\"cta-image-wrapper\">
\t\t\t\t\t\t\t<div class=\"cta-decoration\"></div>
\t\t\t\t\t\t\t<img src=\"{{ asset('Start.png') }}\" alt=\"MaketOu\" class=\"cta-image\">
\t\t\t\t\t\t</div>
\t\t\t\t\t</div>
\t\t\t\t</div>
\t\t\t</div>
\t\t</div>
\t</section>
{% endblock %}
{% block javascripts %}
\t<script src=\"{{ asset('ui/js/product-unified.js') }}\"></script>
\t<script>
\t\twindow.openReadyModal = function () {
\t\t\tconst modalEl = document.getElementById('readyModal');
\t\t\tif (!modalEl) {
\t\t\t\tconsole.error('readyModal introuvable');
\t\t\t\treturn;
\t\t\t}
\t\t\tif (typeof bootstrap === 'undefined' || !bootstrap.Modal) {
\t\t\t\tconsole.error('Bootstrap Modal non chargé');
\t\t\t\treturn;
\t\t\t}
\t\t\tconst modalInstance = bootstrap.Modal.getOrCreateInstance(modalEl);
\t\t\tmodalInstance.show();
\t\t};
\t</script>
\t<script>
\t\t// Variables globales pour la navigation des images (si pas déjà définies)
\t\tif (typeof productImages === 'undefined') {
\t\t\twindow.productImages = {};
\t\t\twindow.currentImageIndex = {};
\t\t}
// Initialisation des données d'images pour les produits \"Produits en vedette\"
{% if featuredProducts is defined %}
{% for product in featuredProducts %}
{% if product.images is defined and product.images|length > 0 %}
productImages[{{ product.id }}] = [{% for img in product.images %}'{{ asset(img) }}'{% if not loop.last %},{% endif %}{% endfor %}];
currentImageIndex[{{ product.id }}] = 0;{% endif %}{% endfor %}{% endif %}
// Initialisation des données d'images pour les produits \"Nouveautés\"
{% if latestProducts is defined %}
{% for product in latestProducts %}
{% if product.images is defined and product.images|length > 0 %}
productImages[{{ product.id }}] = [{% for img in product.images %}'{{ asset(img) }}'{% if not loop.last %},{% endif %}{% endfor %}];
currentImageIndex[{{ product.id }}] = 0;{% endif %}{% endfor %}{% endif %}
console.log('SCRIPT LOADED - Featured Gallery');
(function () {
\t'use strict';
\tconst SECTION_CONFIGS = [
\t\t{ grid: '#featuredGalleryGrid', prev: '#featuredGalleryPrev', next: '#featuredGalleryNext' },
\t\t{ grid: '#latestGalleryGrid', prev: '#latestGalleryPrev', next: '#latestGalleryNext' }
\t];
\tfunction triggerRipple(button) {
\t\tbutton.classList.remove('btn-ripple');
\t\tvoid button.offsetWidth;
\t\tbutton.classList.add('btn-ripple');
\t\tsetTimeout(() => button.classList.remove('btn-ripple'), 350);
\t}
\tfunction initSectionCarousel(config) {
\t\tconst \$grid = \$(config.grid);
\t\tif (!\$grid.length) {
\t\t\tconsole.warn('Grid not found:', config.grid);
\t\t\treturn;
\t\t}
\t\tif (typeof \$.fn.owlCarousel !== 'function') {
\t\t\tconsole.warn('OwlCarousel n\\'est pas chargé pour', config.grid);
\t\t\treturn;
\t\t}
\t\t// Si déjà initialisé, récupérer l'instance existante
\t\tlet owlInstance;
\t\tif (\$grid.hasClass('owl-loaded')) {
\t\t\towlInstance = \$grid.data('owl.carousel');
\t\t\tconsole.log('OwlCarousel already initialized for', config.grid, owlInstance);
\t\t} else {
\t\t\tif (!\$grid.hasClass('owl-carousel')) {
\t\t\t\t\$grid.addClass('owl-carousel');
\t\t\t}
\t\t\towlInstance = \$grid.owlCarousel({
\t\t\t\tloop: true,
\t\t\t\tmargin: 30,
\t\t\t\tautoplay: true,
\t\t\t\tautoplayTimeout: 4800,
\t\t\t\tautoplayHoverPause: true,
\t\t\t\tsmartSpeed: 650,
\t\t\t\tnav: false,
\t\t\t\tdots: false,
\t\t\t\tresponsive: {
\t\t\t\t\t0: { items: 1, margin: 15 },
\t\t\t\t\t576: { items: 1.2, margin: 18 },
\t\t\t\t\t768: { items: 2, margin: 20 },
\t\t\t\t\t992: { items: 3, margin: 25 },
\t\t\t\t\t1400: { items: 4, margin: 30 }
\t\t\t\t}
\t\t\t});
\t\t\tconsole.log('OwlCarousel initialized for', config.grid, owlInstance);
\t\t}
\t\tconst \$prev = \$(config.prev);
\t\tconst \$next = \$(config.next);
\t\tif (\$prev.length) {
\t\t\t\$prev.off('click.carouselNav').on('click.carouselNav', function (e) {
\t\t\t\te.preventDefault();
\t\t\t\te.stopPropagation();
\t\t\t\tconsole.log('Prev clicked for', config.grid, 'Instance:', owlInstance);
\t\t\t\tif (owlInstance) {
\t\t\t\t\ttry {
\t\t\t\t\t\t\$grid.trigger('prev.owl.carousel');
\t\t\t\t\t\ttriggerRipple(this);
\t\t\t\t\t} catch (err) {
\t\t\t\t\t\tconsole.error('Error triggering prev:', err);
\t\t\t\t\t}
\t\t\t\t} else {
\t\t\t\t\tconsole.error('OwlCarousel instance not available');
\t\t\t\t}
\t\t\t});
\t\t} else {
\t\t\tconsole.warn('Prev button not found:', config.prev);
\t\t}
\t\tif (\$next.length) {
\t\t\t\$next.off('click.carouselNav').on('click.carouselNav', function (e) {
\t\t\t\te.preventDefault();
\t\t\t\te.stopPropagation();
\t\t\t\tconsole.log('Next clicked for', config.grid, 'Instance:', owlInstance);
\t\t\t\tif (owlInstance) {
\t\t\t\t\ttry {
\t\t\t\t\t\t\$grid.trigger('next.owl.carousel');
\t\t\t\t\t\ttriggerRipple(this);
\t\t\t\t\t} catch (err) {
\t\t\t\t\t\tconsole.error('Error triggering next:', err);
\t\t\t\t\t}
\t\t\t\t} else {
\t\t\t\t\tconsole.error('OwlCarousel instance not available');
\t\t\t\t}
\t\t\t});
\t\t} else {
\t\t\tconsole.warn('Next button not found:', config.next);
\t\t}
\t}
\tfunction ensureOwl(attempt = 0) {
\t\tif (window.jQuery && typeof \$.fn !== 'undefined' && typeof \$.fn.owlCarousel === 'function') {
\t\t\tSECTION_CONFIGS.forEach(initSectionCarousel);
\t\t} else if (attempt < 15) {
\t\t\tsetTimeout(() => ensureOwl(attempt + 1), 200);
\t\t} else {
\t\t\tconsole.warn('OwlCarousel non disponible après plusieurs tentatives');
\t\t}
\t}
\tdocument.addEventListener('DOMContentLoaded', function () {
\t\tensureOwl();
\t});
})();
document.addEventListener('DOMContentLoaded', function () { // Animation des cartes au scroll
const observerOptions = {
threshold: 0.1,
rootMargin: '0px 0px -50px 0px'
};
const observer = new IntersectionObserver(function (entries) {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.style.opacity = '1';
entry.target.style.transform = 'translateY(0)';
}
});
}, observerOptions);
// Observer toutes les cartes
document.querySelectorAll('.stats-card, .category-card, .product-card, .feature-card').forEach(card => {
card.style.opacity = '0';
card.style.transform = 'translateY(30px)';
card.style.transition = 'all 0.6s ease';
observer.observe(card);
});
// Compteur animé pour les statistiques
function animateCounter(element, target, duration = 2000) {
let start = 0;
const increment = target / (duration / 16);
function updateCounter() {
start += increment;
if (start < target) {
element.textContent = Math.floor(start).toLocaleString();
requestAnimationFrame(updateCounter);
} else {
element.textContent = target.toLocaleString();
}
}
updateCounter();
}
// Animer les compteurs quand ils sont visibles
const statsObserver = new IntersectionObserver(function (entries) {
entries.forEach(entry => {
if (entry.isIntersecting) {
const numberElement = entry.target.querySelector('.stats-number');
const target = parseInt(numberElement.textContent.replace(/,/g, ''));
animateCounter(numberElement, target);
statsObserver.unobserve(entry.target);
}
});
});
document.querySelectorAll('.stats-card').forEach(card => {
statsObserver.observe(card);
});
// Gestion de la newsletter
const newsletterForm = document.querySelector('.newsletter-form');
if (newsletterForm) {
newsletterForm.addEventListener('submit', function (e) {
e.preventDefault();
const email = this.querySelector('input[type=\"email\"]').value;
const button = this.querySelector('button');
const originalText = button.innerHTML;
// Désactiver le bouton
button.disabled = true;
button.innerHTML = '<i class=\"lnr lnr-spinner me-2\"></i>Inscription...';
// Envoyer la requête
fetch('{{ path(\"ui_newsletter_subscribe\") }}', {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'X-Requested-With': 'XMLHttpRequest'
},
body: 'email=' + encodeURIComponent(email)
}).then(response => response.json()).then(data => {
if (data.success) {
button.innerHTML = '<i class=\"lnr lnr-check me-2\"></i>Inscription réussie !';
button.classList.remove('btn-warning');
button.classList.add('btn-success');
this.reset();
} else {
button.innerHTML = '<i class=\"lnr lnr-warning me-2\"></i>Erreur';
button.classList.remove('btn-warning');
button.classList.add('btn-danger');
}
setTimeout(() => {
button.innerHTML = originalText;
button.classList.remove('btn-success', 'btn-danger');
button.classList.add('btn-warning');
button.disabled = false;
}, 3000);
}).catch(error => {
console.error('Erreur:', error);
button.innerHTML = '<i class=\"lnr lnr-warning me-2\"></i>Erreur';
button.classList.remove('btn-warning');
button.classList.add('btn-danger');
setTimeout(() => {
button.innerHTML = originalText;
button.classList.remove('btn-danger');
button.classList.add('btn-warning');
button.disabled = false;
}, 3000);
});
});
}
});
// Effet parallaxe léger pour le hero
window.addEventListener('scroll', function () {
const scrolled = window.pageYOffset;
const hero = document.querySelector('.hero-banner');
if (hero) {
hero.style.transform = `translateY(\${
scrolled * 0.5
}px)`;
}
});
});
// Fonction pour afficher toutes les catégories
function showAllCategories () {
const container = document.getElementById('productCategoriesContainer');
const btn = document.getElementById('showAllCategoriesBtn');{% if allCategories|length > 8 %}{% for category in allCategories %}{% if loop.index > 8 %}const categoryHtml {{ loop.index }} = `
<div class=\"col-lg-3 col-md-4 col-sm-6 mb-4\">
<div class=\"category-card-custom\">
<div class=\"category-image-wrapper\">
<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 %}')\">
<div class=\"category-overlay-custom\">
<div class=\"category-icon-wrapper\">
<i class=\"lnr lnr-tag\" style=\"font-size: 3rem;\"></i>
<h4 class=\"mt-3\">{{ category.name }}</h4>
</div>
</div>
</div>
</div>
<div class=\"category-content p-3\">
<h5 class=\"mb-2\">{{ category.name }}</h5>
{% if category.description %}
<p class=\"text-muted mb-3 small\">{{ category.description|striptags|slice(0, 60) }}{% if category.description|striptags|length > 60 %}...{% endif %}</p>
{% endif %}
<a href=\"{{ path('ui_listing', {'category': category.slug}) }}\" class=\"btn btn-primary-custom btn-sm w-100\">
Voir les produits
</a>
</div>
</div>
</div>
`;
container.insertAdjacentHTML('beforeend', categoryHtml {{ loop.index }});{% endif %}{% endfor %}{% endif %}if (btn)
btn.style.display = 'none';
}
// Fonction pour afficher toutes les catégories de boutiques
function showAllShopCategories () {
const container = document.getElementById('shopCategoriesContainer');
const btn = document.querySelector('[onclick=\"showAllShopCategories()\"]') ?. parentElement;{% if allShopCategories|length > 6 %}{% for shopCategory in allShopCategories %}{% if loop.index > 6 %}const shopCategoryHtml {{ loop.index }} = `
<div class=\"col-lg-4 col-md-6 mb-4\">
<a href=\"{{ path('ui_shops_list') }}?category={{ shopCategory.slug }}\" class=\"text-decoration-none\" style=\"display: block;\">
<div class=\"category-card-custom shop-category-clickable\">
<div class=\"category-image-wrapper\">
<div class=\"category-image\" style=\"background-image: url('{% if shopCategory.bannerImage %}{{ asset(shopCategory.bannerImage) }}{% else %}{{ asset('ui/img/category/shop-' ~ loop.index ~ '.jpg') }}{% endif %}')\">
<div class=\"category-overlay-custom\">
<div class=\"category-icon-wrapper\">
<i class=\"lnr lnr-store\" style=\"font-size: 3rem;\"></i>
<h4 class=\"mt-3\">{{ shopCategory.name }}</h4>
{% if shopCategory.description %}
<p class=\"mt-2 px-3\">{{ shopCategory.description|striptags|slice(0, 100) }}{% if shopCategory.description|striptags|length > 100 %}...{% endif %}</p>
{% endif %}
</div>
</div>
</div>
</div>
<div class=\"category-content p-3\">
<h5 class=\"mb-2\">{{ shopCategory.name }}</h5>
{% if shopCategory.description %}
<p class=\"text-muted mb-3 small\">{{ shopCategory.description|striptags|slice(0, 80) }}{% if shopCategory.description|striptags|length > 80 %}...{% endif %}</p>
{% endif %}
<span class=\"btn btn-primary-custom btn-sm w-100\">
Voir les boutiques <i class=\"lnr lnr-arrow-right ms-2\"></i>
</span>
</div>
</div>
</a>
</div>
`;
container.insertAdjacentHTML('beforeend', shopCategoryHtml {{ loop.index }});{% endif %}{% endfor %}{% endif %}if (btn)
btn.style.display = 'none';
}
// Initialiser les carousels
<script src=\"{{ asset('ui/js/product-unified.js') }}\"></script>
<script>
document.addEventListener('DOMContentLoaded', function() {
// Init featured products images
{% if featuredProducts is defined %}
{% for product in featuredProducts %}
{% if product.images is defined and product.images|length > 0 %}
if (typeof initProductImages === 'function') {
initProductImages({{ product.id }}, {{ product.images|json_encode|raw }});
}
{% endif %}
{% endfor %}
{% endif %}
// Init latest products images
{% if latestProducts is defined %}
{% for product in latestProducts %}
{% if product.images is defined and product.images|length > 0 %}
if (typeof initProductImages === 'function') {
initProductImages({{ product.id }}, {{ product.images|json_encode|raw }});
}
{% endif %}
{% endfor %}
{% endif %}
});
</script>
<script>
\$(document).ready(function () { // Carousel bannière principale
if (\$('.active-banner-slider').length) {
\$('.active-banner-slider').owlCarousel({
items: 1,
loop: true,
autoplay: true,
autoplayTimeout: 6000,
autoplayHoverPause: true,
nav: true,
dots: true,
navText: [
'<i class=\"lnr lnr-chevron-left\"></i>', '<i class=\"lnr lnr-chevron-right\"></i>'
],
smartSpeed: 1000,
animateOut: 'fadeOut',
animateIn: 'fadeIn',
responsive: {
0: {
items: 1,
nav: true,
dots: true
},
768: {
items: 1,
nav: true,
dots: true
},
992: {
items: 1,
nav: true,
dots: true
}
}
});
}
// Animation d'apparition pour les cartes produits
const observerOptions = {
threshold: 0.1,
rootMargin: '0px 0px -50px 0px'
};
const productObserver = new IntersectionObserver(function (entries) {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.style.opacity = '1';
entry.target.style.transform = 'translateY(0)';
}
});
}, observerOptions);
document.querySelectorAll('.product-card-modern').forEach((card, index) => {
card.style.opacity = '0';
card.style.transform = 'translateY(20px)';
card.style.transition = `opacity 0.6s ease \${
index * 0.1
}s, transform 0.6s ease \${
index * 0.1
}s`;
productObserver.observe(card);
});
});
\t</script>
\t<!-- Modal \"Prêt à commencer ?\" -->
\t<div class=\"modal fade\" id=\"readyModal\" tabindex=\"-1\">
\t\t<div class=\"modal-dialog modal-dialog-centered\">
\t\t\t<div class=\"modal-content\">
\t\t\t\t<div class=\"modal-header\">
\t\t\t\t\t<h5 class=\"modal-title\">
\t\t\t\t\t\t<i class=\"lnr lnr-rocket me-2\"></i>Prêt à commencer ?
\t\t\t\t\t</h5>
\t\t\t\t\t<button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\"></button>
\t\t\t\t</div>
\t\t\t\t<div class=\"modal-body\">
\t\t\t\t\t{% if app.user %}
\t\t\t\t\t\t{% if app.user.kycStatus == 'verified' %}
\t\t\t\t\t\t\t<div class=\"text-center\">
\t\t\t\t\t\t\t\t<i class=\"lnr lnr-checkmark-circle\" style=\"font-size: 4rem; color: #28a745;\"></i>
\t\t\t\t\t\t\t\t<h4 class=\"mt-3\">Votre compte est vérifié !</h4>
\t\t\t\t\t\t\t\t<p class=\"text-muted\">Vous pouvez commencer à utiliser MaketOu en toute sérénité.</p>
\t\t\t\t\t\t\t\t<div class=\"mt-4\">
\t\t\t\t\t\t\t\t\t<a href=\"{{ path('seller_index') }}\" class=\"btn btn-primary me-2\">
\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-store me-1\"></i>Ouvrir ma boutique
\t\t\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t\t\t\t<a href=\"{{ path('ui_listing') }}\" class=\"btn btn-outline-primary\">
\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-magnifier me-1\"></i>Voir les produits
\t\t\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t{% else %}
\t\t\t\t\t\t\t<div class=\"text-center\">
\t\t\t\t\t\t\t\t<i class=\"lnr lnr-shield\" style=\"font-size: 4rem; color: #ffa200;\"></i>
\t\t\t\t\t\t\t\t<h4 class=\"mt-3\">Vérification requise</h4>
\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>
\t\t\t\t\t\t\t\t<div class=\"mt-4\">
\t\t\t\t\t\t\t\t\t<a href=\"{{ path('ui_account_kyc') }}\" class=\"btn btn-primary btn-lg\">
\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>
\t\t\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t{% endif %}
\t\t\t\t\t{% else %}
\t\t\t\t\t\t<div class=\"text-center\">
\t\t\t\t\t\t\t<i class=\"lnr lnr-user\" style=\"font-size: 4rem; color: #007bff;\"></i>
\t\t\t\t\t\t\t<h4 class=\"mt-3\">Connectez-vous pour commencer</h4>
\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>
\t\t\t\t\t\t\t<div class=\"mt-4\">
\t\t\t\t\t\t\t\t<a href=\"{{ path('ui_app_login') }}\" class=\"btn btn-primary btn-lg me-2\">
\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-enter me-1\"></i> Se connecter
\t\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t\t\t<a href=\"{{ path('ui_app_register') }}\" class=\"btn btn-outline-primary btn-lg\">
\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-user-plus me-1\"></i> S'inscrire
\t\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t</div>
\t\t\t\t\t{% endif %}
\t\t\t\t</div>
\t\t\t</div>
\t\t</div>
\t</div>
{% endblock %}
", "home/index.html.twig", "/home/u540977899/domains/maketou-ht.com/public_html/templates/home/index.html.twig");
}
}