<?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/shop.html.twig */
class __TwigTemplate_7992206d50dde9eda3e4c58b92b00147 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/shop.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/shop.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"));
// line 4
yield "\t";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "name", [], "any", false, false, false, 4), "html", null, true);
yield "
\t| MaketOu
";
$__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
$__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
yield from [];
}
// line 8
/**
* @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 9
yield "\t<style>
\t\t/* Style pour la description formatée de la boutique */
\t\t.shop-description-content {
\t\t\tline-height: 1.6;
\t\t\tcolor: #333;
\t\t}
\t\t
\t\t.shop-description-content h1,
\t\t.shop-description-content h2,
\t\t.shop-description-content h3 {
\t\t\tcolor: #ffa200;
\t\t\tmargin-top: 1.5rem;
\t\t\tmargin-bottom: 1rem;
\t\t}
\t\t
\t\t.shop-description-content h1 { font-size: 1.75rem; }
\t\t.shop-description-content h2 { font-size: 1.5rem; }
\t\t.shop-description-content h3 { font-size: 1.25rem; }
\t\t
\t\t.shop-description-content ul,
\t\t.shop-description-content ol {
\t\t\tmargin-left: 1.5rem;
\t\t\tmargin-bottom: 1rem;
\t\t}
\t\t
\t\t.shop-description-content li {
\t\t\tmargin-bottom: 0.5rem;
\t\t}
\t\t
\t\t.shop-description-content p {
\t\t\tmargin-bottom: 1rem;
\t\t}
\t\t
\t\t.shop-description-content a {
\t\t\tcolor: #ffa200;
\t\t\ttext-decoration: underline;
\t\t}
\t\t
\t\t.shop-description-content a:hover {
\t\t\tcolor: #e8910a;
\t\t}
\t\t
\t\t.shop-description-content img {
\t\t\tmax-width: 100%;
\t\t\theight: auto;
\t\t\tborder-radius: 8px;
\t\t\tmargin: 1rem 0;
\t\t}
\t\t
\t\t.shop-description-content blockquote {
\t\t\tborder-left: 4px solid #ffa200;
\t\t\tpadding-left: 1rem;
\t\t\tmargin: 1rem 0;
\t\t\tfont-style: italic;
\t\t\tcolor: #666;
\t\t}
\t\t
\t\t.shop-description-content table {
\t\t\twidth: 100%;
\t\t\tborder-collapse: collapse;
\t\t\tmargin: 1rem 0;
\t\t}
\t\t
\t\t.shop-description-content table th,
\t\t.shop-description-content table td {
\t\t\tborder: 1px solid #ddd;
\t\t\tpadding: 0.5rem;
\t\t}
\t\t
\t\t.shop-description-content table th {
\t\t\tbackground-color: #f8f9fa;
\t\t\tfont-weight: bold;
\t\t}
\t\t
\t\t/* Design eBay-like intégré avec Karma - Pleine largeur */
\t\t.shop-header {
\t\t\tbackground: #f7f7f7;
\t\t\tborder-bottom: 1px solid #e1e1e1;
\t\t\tpadding: 0;
\t\t\tmargin-bottom: 0;
\t\t\twidth: 100%;
\t\t\tposition: relative;
\t\t}
\t\t.shop-banner {
\t\t\twidth: 100%;
\t\t\theight: 350px;
\t\t\tbackground-size: cover;
\t\t\tbackground-position: center;
\t\t\tbackground-repeat: no-repeat;
\t\t\tposition: relative;
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tjustify-content: center;
\t\t}
\t\t/* Carrousel eBay-style amélioré */
\t\t.shop-carousel-ebay {
\t\t\twidth: 100%;
\t\t\theight: 450px;
\t\t\tposition: relative;
\t\t\toverflow: hidden;
\t\t\tbackground: #f8f9fa;
\t\t\tborder-radius: 8px;
\t\t\tbox-sizing: border-box;
\t\t\tmargin-bottom: 0;
\t\t\ttransition: height 0.3s ease;
\t\t}
\t\t.carousel-container {
\t\t\tposition: relative;
\t\t\twidth: 100%;
\t\t\theight: 100%;
\t\t}
\t\t.carousel-slide {
\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\tbackground-repeat: no-repeat;
\t\t\topacity: 0;
\t\t\ttransition: opacity 0.6s ease-in-out;
\t\t}
\t\t
\t\t/* Amélioration responsive pour les images */
\t\t@media (max-width: 768px) {
\t\t\t.carousel-slide {
\t\t\t\tbackground-size: cover;
\t\t\t\tbackground-position: center center;
\t\t\t}
\t\t}
\t\t.carousel-slide.active {
\t\t\topacity: 1;
\t\t}
\t\t.carousel-controls {
\t\t\tposition: absolute;
\t\t\tbottom: 20px;
\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.carousel-btn {
\t\t\twidth: 40px;
\t\t\theight: 40px;
\t\t\tborder: none;
\t\t\tborder-radius: 50%;
\t\t\tbackground: rgba(255, 255, 255, 0.9);
\t\t\tcolor: #333;
\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 ease;
\t\t\tbox-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
\t\t}
\t\t.carousel-btn:hover {
\t\t\tbackground: white;
\t\t\ttransform: scale(1.1);
\t\t}
\t\t.carousel-btn:disabled {
\t\t\topacity: 0.5;
\t\t\tcursor: not-allowed;
\t\t\ttransform: none;
\t\t}
\t\t.carousel-pause {
\t\t\tbackground: #dc3545;
\t\t\tcolor: white;
\t\t}
\t\t.carousel-pause:hover {
\t\t\tbackground: #c82333;
\t\t}
\t\t.carousel-indicators {
\t\t\tposition: absolute;
\t\t\tbottom: 70px;
\t\t\tleft: 50%;
\t\t\ttransform: translateX(-50%);
\t\t\tdisplay: flex;
\t\t\tgap: 8px;
\t\t\tz-index: 10;
\t\t}
\t\t.carousel-indicator {
\t\t\twidth: 12px;
\t\t\theight: 12px;
\t\t\tborder-radius: 50%;
\t\t\tbackground: rgba(255, 255, 255, 0.5);
\t\t\tborder: none;
\t\t\tcursor: pointer;
\t\t\ttransition: all 0.3s ease;
\t\t}
\t\t.carousel-indicator.active {
\t\t\tbackground: white;
\t\t\ttransform: scale(1.2);
\t\t}
\t\t/* Contrôles eBay-style améliorés - Positionnés en bas à droite */
\t\t.carousel-controls-ebay {
\t\t\tposition: absolute;
\t\t\tbottom: 20px;
\t\t\tright: 20px;
\t\t\tdisplay: flex;
\t\t\tgap: 12px;
\t\t\talign-items: center;
\t\t\tz-index: 10;
\t\t\tpointer-events: none;
\t\t}
\t\t.carousel-btn-ebay {
\t\t\twidth: 52px;
\t\t\theight: 52px;
\t\t\tborder: none;
\t\t\tborder-radius: 50% !important;
\t\t\tbackground: linear-gradient(135deg, rgba(255, 255, 255, 0.95) 0%, rgba(255, 255, 255, 0.9) 100%);
\t\t\tcolor: #333;
\t\t\tfont-size: 22px;
\t\t\tcursor: pointer;
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tjustify-content: center;
\t\t\ttransition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
\t\t\tpointer-events: all;
\t\t\tbox-shadow: 0 4px 15px rgba(0, 0, 0, 0.25), 0 2px 8px rgba(0, 0, 0, 0.15);
\t\t\tbackdrop-filter: blur(10px);
\t\t\tposition: relative;
\t\t\toverflow: visible;
\t\t}
\t\t.carousel-btn-ebay::before {
\t\t\tcontent: '';
\t\t\tposition: absolute;
\t\t\ttop: 50%;
\t\t\tleft: 50%;
\t\t\twidth: 0;
\t\t\theight: 0;
\t\t\tborder-radius: 50%;
\t\t\tbackground: rgba(255, 255, 255, 0.3);
\t\t\ttransform: translate(-50%, -50%);
\t\t\ttransition: width 0.6s ease, height 0.6s ease;
\t\t}
\t\t.carousel-btn-ebay:hover::before {
\t\t\twidth: 100%;
\t\t\theight: 100%;
\t\t}
\t\t.carousel-btn-ebay:hover {
\t\t\ttransform: translateY(-3px) scale(1.1);
\t\t\tbox-shadow: 0 8px 25px rgba(0, 0, 0, 0.35), 0 4px 12px rgba(0, 0, 0, 0.2);
\t\t}
\t\t
\t\t/* Désactiver les effets hover sur mobile pour éviter les problèmes tactiles */
\t\t@media (hover: none) and (pointer: coarse) {
\t\t\t.carousel-btn-ebay:hover {
\t\t\t\ttransform: none;
\t\t\t}
\t\t\t
\t\t\t.carousel-btn-ebay:active {
\t\t\t\ttransform: scale(0.95);
\t\t\t}
\t\t\t
\t\t\t.carousel-indicator-ebay:hover {
\t\t\t\ttransform: none;
\t\t\t}
\t\t}
\t\t.carousel-btn-ebay:active {
\t\t\ttransform: translateY(-1px) scale(1.05);
\t\t\tbox-shadow: 0 4px 15px rgba(0, 0, 0, 0.3);
\t\t}
\t\t
\t\t/* Désactiver les effets hover sur mobile pour éviter les problèmes tactiles */
\t\t@media (hover: none) and (pointer: coarse) {
\t\t\t.carousel-btn-ebay:hover {
\t\t\t\ttransform: none;
\t\t\t}
\t\t\t
\t\t\t.carousel-btn-ebay:active {
\t\t\t\ttransform: scale(0.95);
\t\t\t}
\t\t\t
\t\t\t.carousel-indicator-ebay:hover {
\t\t\t\ttransform: none;
\t\t\t}
\t\t}
\t\t.carousel-btn-ebay:disabled {
\t\t\topacity: 0.4;
\t\t\tcursor: not-allowed;
\t\t\ttransform: none;
\t\t}
\t\t.carousel-btn-ebay i {
\t\t\tposition: relative;
\t\t\tz-index: 10;
\t\t\ttransition: transform 0.3s ease;
\t\t\tdisplay: inline-block;
\t\t\tline-height: 1;
\t\t}
\t\t.carousel-btn-ebay:hover i {
\t\t\ttransform: scale(1.15);
\t\t}
\t\t
\t\t.carousel-btn-ebay.pause-btn i,
\t\t.carousel-btn-ebay.pause-btn #pauseIcon {
\t\t\tz-index: 10 !important;
\t\t\tcolor: white !important;
\t\t\tdisplay: inline-block !important;
\t\t\tvisibility: visible !important;
\t\t\topacity: 1 !important;
\t\t}
\t\t.carousel-btn-ebay.prev-btn,
\t\t.carousel-btn-ebay.next-btn {
\t\t\tbackground: linear-gradient(135deg, rgba(255, 255, 255, 0.98) 0%, rgba(255, 255, 255, 0.92) 100%);
\t\t\tcolor: #333;
\t\t}
\t\t.carousel-btn-ebay.prev-btn:hover,
\t\t.carousel-btn-ebay.next-btn:hover {
\t\t\tbackground: linear-gradient(135deg, #ffa200 0%, #ff6b00 100%);
\t\t\tcolor: white;
\t\t}
\t\t.carousel-btn-ebay.pause-btn {
\t\t\tbackground: linear-gradient(135deg, rgba(220, 53, 69, 0.95) 0%, rgba(200, 35, 51, 0.95) 100%);
\t\t\tcolor: white !important;
\t\t}
\t\t.carousel-btn-ebay.pause-btn:hover {
\t\t\tbackground: linear-gradient(135deg, #dc3545 0%, #c82333 100%);
\t\t\tcolor: white !important;
\t\t}
\t\t.carousel-btn-ebay.pause-btn.playing {
\t\t\tbackground: linear-gradient(135deg, rgba(40, 167, 69, 0.95) 0%, rgba(33, 136, 56, 0.95) 100%);
\t\t\tcolor: white !important;
\t\t}
\t\t.carousel-btn-ebay.pause-btn.playing:hover {
\t\t\tbackground: linear-gradient(135deg, #28a745 0%, #218838 100%);
\t\t\tcolor: white !important;
\t\t}
\t\t/* Style spécifique pour l'icône du bouton pause - Utilisation directe d'Unicode */
\t\t.carousel-btn-ebay.pause-btn {
\t\t\ttext-align: center;
\t\t\tposition: relative;
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tjustify-content: center;
\t\t}
\t\t
\t\t.carousel-btn-ebay.pause-btn #pauseIcon,
\t\t.carousel-btn-ebay.pause-btn .pause-icon-content {
\t\t\tdisplay: block !important;
\t\t\tcolor: white !important;
\t\t\tfont-size: 24px !important;
\t\t\tline-height: 1 !important;
\t\t\twidth: auto !important;
\t\t\theight: auto !important;
\t\t\tposition: static !important;
\t\t\ttext-align: center !important;
\t\t\tz-index: 10 !important;
\t\t\tvisibility: visible !important;
\t\t\topacity: 1 !important;
\t\t\tpointer-events: none !important;
\t\t\tfont-family: Arial, \"Segoe UI\", sans-serif !important;
\t\t\tfont-weight: normal !important;
\t\t\tmargin: 0 !important;
\t\t\tpadding: 0 !important;
\t\t}
\t\t/* Indicateurs eBay-style améliorés - Positionnés en bas à gauche */
\t\t.carousel-indicators-ebay {
\t\t\tposition: absolute;
\t\t\tbottom: 20px;
\t\t\tleft: 50%;
\t\t\ttransform: translateX(-50%);
\t\t\tdisplay: flex;
\t\t\tgap: 10px;
\t\t\tz-index: 10;
\t\t\tbackground: rgba(0, 0, 0, 0.4);
\t\t\tpadding: 8px 14px;
\t\t\tborder-radius: 25px;
\t\t\tbackdrop-filter: blur(8px);
\t\t\tbox-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);
\t\t}
\t\t.carousel-indicator-ebay {
\t\t\twidth: 10px;
\t\t\theight: 10px;
\t\t\tborder-radius: 50%;
\t\t\tbackground: rgba(255, 255, 255, 0.5);
\t\t\tborder: 2px solid rgba(255, 255, 255, 0.8);
\t\t\tcursor: pointer;
\t\t\ttransition: all 0.3s ease;
\t\t}
\t\t.carousel-indicator-ebay.active {
\t\t\tbackground: white !important;
\t\t\tborder-color: #ffa200 !important;
\t\t\ttransform: scale(1.3) !important;
\t\t\tbox-shadow: 0 0 8px rgba(255, 162, 0, 0.6) !important;
\t\t}
\t\t.carousel-indicator-ebay:hover {
\t\t\tbackground: rgba(255, 255, 255, 0.8);
\t\t\ttransform: scale(1.1);
\t\t}
\t\t/* Styles eBay-style pour les détails de boutique */
\t\t.shop-avatar-container-ebay {
\t\t\tposition: relative;
\t\t\tmargin-right: 20px;
\t\t}
\t\t.shop-avatar-ebay {
\t\t\twidth: 100px;
\t\t\theight: 100px;
\t\t\tborder-radius: 12px;
\t\t\tobject-fit: cover;
\t\t\tborder: 3px solid white;
\t\t\tbox-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
\t\t\ttransition: transform 0.3s ease;
\t\t}
\t\t.shop-avatar-ebay:hover {
\t\t\ttransform: scale(1.05);
\t\t}
\t\t.shop-avatar-placeholder {
\t\t\tbackground: linear-gradient(135deg, #f0f0f0 0%, #e0e0e0 100%);
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tjustify-content: center;
\t\t\tfont-size: 2.5rem;
\t\t\tcolor: #999;
\t\t}
\t\t.verified-badge-ebay {
\t\t\tposition: absolute;
\t\t\tbottom: -5px;
\t\t\tright: -5px;
\t\t\tbackground: #28a745;
\t\t\tcolor: white;
\t\t\twidth: 24px;
\t\t\theight: 24px;
\t\t\tborder-radius: 50%;
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tjustify-content: center;
\t\t\tfont-size: 12px;
\t\t\tborder: 2px solid white;
\t\t}
\t\t.shop-info-ebay {
\t\t\tpadding: 0;
\t\t}
\t\t.shop-name-section {
\t\t\tmargin-bottom: 12px;
\t\t}
\t\t.shop-name-ebay {
\t\t\tfont-size: 2.2rem;
\t\t\tfont-weight: 800;
\t\t\tbackground: linear-gradient(135deg, #333 0%, #555 100%);
\t\t\t-webkit-background-clip: text;
\t\t\t-webkit-text-fill-color: transparent;
\t\t\tbackground-clip: text;
\t\t\tmargin: 0;
\t\t\tline-height: 1.2;
\t\t\tword-wrap: break-word;
\t\t\toverflow-wrap: break-word;
\t\t\thyphens: auto;
\t\t\tletter-spacing: -0.5px;
\t\t}
\t\t.verified-text {
\t\t\tbackground: linear-gradient(135deg, #28a745 0%, #20c997 100%);
\t\t\t-webkit-background-clip: text;
\t\t\t-webkit-text-fill-color: transparent;
\t\t\tbackground-clip: text;
\t\t\tfont-size: 0.9rem;
\t\t\tfont-weight: 600;
\t\t\tdisplay: inline-flex;
\t\t\talign-items: center;
\t\t\tgap: 4px;
\t\t\tword-wrap: break-word;
\t\t\toverflow-wrap: break-word;
\t\t\tline-height: 1.4;
\t\t\twhite-space: normal;
\t\t\tflex-wrap: wrap;
\t\t\tmax-width: 100%;
\t\t}
\t\t.verified-text i {
\t\t\t-webkit-text-fill-color: #28a745;
\t\t\tcolor: #28a745;
\t\t\tflex-shrink: 0;
\t\t}
\t\t.shop-category-ebay {
\t\t\tbackground: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%);
\t\t\tcolor: #666;
\t\t\tpadding: 6px 14px;
\t\t\tborder-radius: 20px;
\t\t\tfont-size: 0.875rem;
\t\t\tfont-weight: 500;
\t\t\tdisplay: inline-block;
\t\t\tborder: 1px solid #dee2e6;
\t\t\tword-wrap: break-word;
\t\t\toverflow-wrap: break-word;
\t\t\tmax-width: 100%;
\t\t\tline-height: 1.4;
\t\t\twhite-space: normal;
\t\t}
\t\t.shop-stats-ebay {
\t\t\tmargin-top: 16px;
\t\t}
\t\t.stat-row {
\t\t\tdisplay: flex;
\t\t\tgap: 32px;
\t\t\tmargin-bottom: 12px;
\t\t\tflex-wrap: wrap;
\t\t}
\t\t.stat-item-ebay {
\t\t\tdisplay: flex;
\t\t\tflex-direction: column;
\t\t\talign-items: flex-start;
\t\t\tmin-width: 100px;
\t\t}
\t\t.stat-percentage {
\t\t\tfont-size: 1.4rem;
\t\t\tfont-weight: 800;
\t\t\tbackground: linear-gradient(135deg, #28a745 0%, #20c997 100%);
\t\t\t-webkit-background-clip: text;
\t\t\t-webkit-text-fill-color: transparent;
\t\t\tbackground-clip: text;
\t\t\tline-height: 1.1;
\t\t\tmargin-bottom: 4px;
\t\t\tword-wrap: break-word;
\t\t\toverflow-wrap: break-word;
\t\t}
\t\t.stat-number-ebay {
\t\t\tfont-size: 1.4rem;
\t\t\tfont-weight: 800;
\t\t\tbackground: linear-gradient(135deg, #333 0%, #555 100%);
\t\t\t-webkit-background-clip: text;
\t\t\t-webkit-text-fill-color: transparent;
\t\t\tbackground-clip: text;
\t\t\tline-height: 1.1;
\t\t\tmargin-bottom: 4px;
\t\t\tword-wrap: break-word;
\t\t\toverflow-wrap: break-word;
\t\t}
\t\t.stat-label-ebay {
\t\t\tfont-size: 0.75rem;
\t\t\tcolor: #6c757d;
\t\t\ttext-transform: uppercase;
\t\t\tletter-spacing: 0.8px;
\t\t\tfont-weight: 600;
\t\t\tmargin-top: 0;
\t\t\tline-height: 1.3;
\t\t\tword-wrap: break-word;
\t\t\toverflow-wrap: break-word;
\t\t\ttext-align: left;
\t\t\thyphens: auto;
\t\t\tmax-width: 100%;
\t\t}
\t\t.shop-additional-info {
\t\t\tdisplay: flex;
\t\t\tflex-wrap: wrap;
\t\t\tgap: 12px 20px;
\t\t\tfont-size: 0.875rem;
\t\t\tcolor: #495057;
\t\t\tmargin-top: 12px;
\t\t\tpadding-top: 16px;
\t\t\tborder-top: 1px solid #e9ecef;
\t\t\tline-height: 1.5;
\t\t\tword-wrap: break-word;
\t\t\toverflow-wrap: break-word;
\t\t}
\t\t.member-since {
\t\t\tfont-weight: 500;
\t\t\tdisplay: inline-flex;
\t\t\talign-items: center;
\t\t\twhite-space: normal;
\t\t\tpadding: 6px 12px;
\t\t\tbackground: #f8f9fa;
\t\t\tborder-radius: 8px;
\t\t\ttransition: all 0.3s ease;
\t\t\tborder: 1px solid transparent;
\t\t\tword-wrap: break-word;
\t\t\toverflow-wrap: break-word;
\t\t\tline-height: 1.4;
\t\t\tmax-width: 100%;
\t\t\tflex-wrap: wrap;
\t\t\ttext-align: center;
\t\t}
\t\t.member-since:hover {
\t\t\tbackground: #e9ecef;
\t\t\tborder-color: #dee2e6;
\t\t\ttransform: translateY(-1px);
\t\t}
\t\t.member-since i {
\t\t\tcolor: #ffa200;
\t\t\tmargin-right: 6px;
\t\t\tfont-size: 0.95rem;
\t\t\ttransition: transform 0.3s ease;
\t\t\tflex-shrink: 0;
\t\t}
\t\t.member-since:hover i {
\t\t\ttransform: scale(1.2);
\t\t}
\t\t.location {
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t}
\t\t.shop-actions-ebay {
\t\t\tdisplay: flex;
\t\t\tflex-direction: column;
\t\t\tgap: 10px;
\t\t\tmin-width: 160px;
\t\t}
\t\t.btn-ebay {
\t\t\tpadding: 10px 18px;
\t\t\tfont-size: 0.9rem;
\t\t\tfont-weight: 500;
\t\t\tborder-radius: 6px;
\t\t\ttext-align: center;
\t\t\ttransition: all 0.3s ease;
\t\t\tborder-width: 1px;
\t\t\twhite-space: normal;
\t\t\tword-wrap: break-word;
\t\t\toverflow-wrap: break-word;
\t\t\tline-height: 1.4;
\t\t}
\t\t.btn-ebay:hover {
\t\t\ttransform: translateY(-2px);
\t\t\tbox-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
\t\t}
\t\t.btn-ebay i {
\t\t\tvertical-align: middle;
\t\t}
\t\t.btn-ebay.following {
\t\t\tbackground: #28a745;
\t\t\tborder-color: #28a745;
\t\t\tcolor: white;
\t\t}
\t\t/* Styles pour les avis */
\t\t.review-stats {
\t\t\tbackground: white;
\t\t\tborder-radius: 12px;
\t\t\tpadding: 20px;
\t\t\tbox-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
\t\t\tmargin-bottom: 20px;
\t\t}
\t\t.stat-card {
\t\t\tpadding: 15px;
\t\t}
\t\t.stat-number {
\t\t\tfont-size: 2.5rem;
\t\t\tfont-weight: 700;
\t\t\tcolor: #333;
\t\t\tmargin: 0;
\t\t}
\t\t.stat-label {
\t\t\tcolor: #666;
\t\t\tfont-size: 0.9rem;
\t\t\tmargin: 5px 0 0;
\t\t}
\t\t.rating-stars {
\t\t\tcolor: #ffc107;
\t\t\tfont-size: 1.2rem;
\t\t\tmargin: 10px 0;
\t\t}
\t\t.reviews-preview {
\t\t\tbackground: white;
\t\t\tborder-radius: 12px;
\t\t\tpadding: 20px;
\t\t\tbox-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
\t\t}
\t\t.review-item {
\t\t\tborder-bottom: 1px solid #f0f0f0;
\t\t\tpadding: 15px 0;
\t\t}
\t\t.review-item:last-child {
\t\t\tborder-bottom: none;
\t\t}
\t\t.review-header {
\t\t\tdisplay: flex;
\t\t\tjustify-content: space-between;
\t\t\talign-items: flex-start;
\t\t\tmargin-bottom: 10px;
\t\t}
\t\t.reviewer-info {
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tgap: 10px;
\t\t}
\t\t.reviewer-avatar {
\t\t\twidth: 40px;
\t\t\theight: 40px;
\t\t\tborder-radius: 50%;
\t\t\tbackground: #f8f9fa;
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tjustify-content: center;
\t\t\tcolor: #666;
\t\t}
\t\t.reviewer-name {
\t\t\tmargin: 0;
\t\t\tfont-size: 1rem;
\t\t\tfont-weight: 600;
\t\t}
\t\t.review-rating {
\t\t\tcolor: #ffc107;
\t\t\tfont-size: 0.9rem;
\t\t}
\t\t.review-meta {
\t\t\ttext-align: right;
\t\t}
\t\t.review-date {
\t\t\tcolor: #666;
\t\t\tfont-size: 0.8rem;
\t\t}
\t\t.verified-badge {
\t\t\tdisplay: inline-block;
\t\t\tbackground: #28a745;
\t\t\tcolor: white;
\t\t\tpadding: 2px 8px;
\t\t\tborder-radius: 12px;
\t\t\tfont-size: 0.7rem;
\t\t\tmargin-left: 10px;
\t\t}
\t\t.review-comment {
\t\t\tmargin: 10px 0 0;
\t\t\tline-height: 1.5;
\t\t\tcolor: #333;
\t\t}
\t\t.review-actions-card {
\t\t\tbackground: white;
\t\t\tborder-radius: 12px;
\t\t\tpadding: 20px;
\t\t\tbox-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
\t\t\ttext-align: center;
\t\t}
\t\t.shop-banner-overlay {
\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.3);
\t\t\tz-index: 1;
\t\t}
\t\t.shop-header-content {
\t\t\tbackground: white;
\t\t\tborder: 1px solid #e1e1e1;
\t\t\tborder-radius: 4px;
\t\t\tpadding: 20px;
\t\t\tmargin: 0 20px 20px;
\t\t\tbox-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
\t\t\tposition: relative;
\t\t\tz-index: 2;
\t\t}
\t\t.shop-avatar {
\t\t\twidth: 80px;
\t\t\theight: 80px;
\t\t\tborder-radius: 4px;
\t\t\tborder: 1px solid #e1e1e1;
\t\t\tobject-fit: cover;
\t\t\tposition: relative;
\t\t\tz-index: 3;
\t\t}
\t\t.shop-title {
\t\t\tfont-size: 1.5rem;
\t\t\tfont-weight: 600;
\t\t\tcolor: #333;
\t\t\tmargin-bottom: 8px;
\t\t}
\t\t.shop-subtitle {
\t\t\tcolor: #666;
\t\t\tfont-size: 0.9rem;
\t\t\tmargin-bottom: 15px;
\t\t}
\t\t.shop-stats-row {
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tgap: 20px;
\t\t\tflex-wrap: wrap;
\t\t\tmargin-bottom: 15px;
\t\t}
\t\t.shop-stat-item {
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tgap: 5px;
\t\t\tfont-size: 0.9rem;
\t\t}
\t\t.positive-feedback {
\t\t\tcolor: #007bff;
\t\t\tfont-weight: 600;
\t\t}
\t\t.items-sold {
\t\t\tcolor: #666;
\t\t}
\t\t.followers-count {
\t\t\tcolor: #666;
\t\t}
\t\t.shop-badges {
\t\t\tdisplay: flex;
\t\t\tgap: 10px;
\t\t\tmargin-bottom: 15px;
\t\t}
\t\t.shop-badge {
\t\t\tbackground: #f0f0f0;
\t\t\tcolor: #333;
\t\t\tpadding: 4px 8px;
\t\t\tborder-radius: 3px;
\t\t\tfont-size: 0.8rem;
\t\t\tfont-weight: 500;
\t\t}
\t\t.shop-badge.verified {
\t\t\tbackground: #d4edda;
\t\t\tcolor: #155724;
\t\t}
\t\t.shop-badge.premium {
\t\t\tbackground: #fff3cd;
\t\t\tcolor: #856404;
\t\t}
\t\t.shop-actions-row {
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tgap: 15px;
\t\t\tflex-wrap: wrap;
\t\t}
\t\t.shop-action-btn {
\t\t\tbackground: #007bff;
\t\t\tcolor: white;
\t\t\tborder: none;
\t\t\tpadding: 8px 16px;
\t\t\tborder-radius: 3px;
\t\t\tfont-size: 0.9rem;
\t\t\tfont-weight: 500;
\t\t\tcursor: pointer;
\t\t\ttransition: background-color 0.2s;
\t\t\ttext-decoration: none;
\t\t\tdisplay: inline-flex;
\t\t\talign-items: center;
\t\t\tgap: 5px;
\t\t}
\t\t.shop-action-btn:hover {
\t\t\tbackground: #0056b3;
\t\t\tcolor: white;
\t\t}
\t\t.shop-action-btn.following {
\t\t\tbackground: #28a745;
\t\t}
\t\t.shop-action-btn.following:hover {
\t\t\tbackground: #1e7e34;
\t\t}
\t\t.shop-action-btn.secondary {
\t\t\tbackground: #6c757d;
\t\t}
\t\t.shop-action-btn.secondary:hover {
\t\t\tbackground: #545b62;
\t\t}
\t\t/* Onglets eBay-style avec classes Karma */
\t\t.shop-tabs {
\t\t\tbackground: white;
\t\t\tborder: 1px solid #e1e1e1;
\t\t\tborder-top: none;
\t\t\tborder-radius: 0 0 4px 4px;
\t\t\tmargin-top: 0;
\t\t}
\t\t.shop-tabs-nav {
\t\t\tdisplay: flex;
\t\t\tborder-bottom: 1px solid #e1e1e1;
\t\t\tmargin: 0;
\t\t\tpadding: 0;
\t\t\tlist-style: none;
\t\t\tbackground: #f8f9fa;
\t\t}
\t\t.shop-tab {
\t\t\tmargin: 0;
\t\t}
\t\t.shop-tab-link {
\t\t\tdisplay: block;
\t\t\tpadding: 12px 20px;
\t\t\tcolor: #000000;
\t\t\ttext-decoration: none;
\t\t\tborder-bottom: 2px solid transparent;
\t\t\ttransition: all 0.2s;
\t\t\tfont-weight: 500;
\t\t\tfont-size: 1rem;
\t\t}
\t\t.shop-tab-link:hover,
\t\t.shop-tab-link.active {
\t\t\tcolor: #095ad3;
\t\t\tborder-bottom-color: #095ad3;
\t\t\tbackground: #ffa200;
\t\t}
\t\t.shop-tab-content {
\t\t\tpadding: 30px;
\t\t\tmin-height: 400px;
\t\t}
\t\t.shop-tab-content:not(.active) {
\t\t\tdisplay: none;
\t\t}
\t\t.shop-tab-content.active {
\t\t\tdisplay: block;
\t\t}
\t\t/* Cards d'information avec style Karma */
\t\t.shop-info-card {
\t\t\tbackground: #f8f9fa;
\t\t\tborder: 1px solid #e1e1e1;
\t\t\tborder-radius: 4px;
\t\t\tpadding: 20px;
\t\t\tmargin-bottom: 20px;
\t\t}
\t\t.shop-info-card h6 {
\t\t\tcolor: #333;
\t\t\tfont-weight: 600;
\t\t\tmargin-bottom: 15px;
\t\t\tfont-size: 1.1rem;
\t\t}
\t\t.shop-info-card p {
\t\t\tcolor: #666;
\t\t\tfont-size: 0.9rem;
\t\t\tmargin: 0;
\t\t\tline-height: 1.5;
\t\t}
\t\t.shop-contact-info {
\t\t\tdisplay: flex;
\t\t\tflex-direction: column;
\t\t\tgap: 10px;
\t\t}
\t\t.shop-contact-item {
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tgap: 10px;
\t\t\tfont-size: 0.9rem;
\t\t\tcolor: #666;
\t\t\tpadding: 5px 0;
\t\t}
\t\t.shop-contact-item i {
\t\t\twidth: 16px;
\t\t\tcolor: #007bff;
\t\t\ttext-align: center;
\t\t}
\t\t.shop-social-links {
\t\t\tdisplay: flex;
\t\t\tgap: 10px;
\t\t\tmargin-top: 15px;
\t\t\tflex-wrap: wrap;
\t\t}
\t\t.shop-social-link {
\t\t\tdisplay: inline-flex;
\t\t\talign-items: center;
\t\t\tjustify-content: center;
\t\t\twidth: 36px;
\t\t\theight: 36px;
\t\t\tbackground: #f0f0f0;
\t\t\tcolor: #666;
\t\t\tborder-radius: 4px;
\t\t\ttext-decoration: none;
\t\t\ttransition: all 0.2s;
\t\t\tfont-size: 1.1rem;
\t\t}
\t\t.shop-social-link:hover {
\t\t\tbackground: #007bff;
\t\t\tcolor: white;
\t\t\ttransform: translateY(-2px);
\t\t}
\t\t/* Produits avec style Karma */
\t\t.product-card {
\t\t\tbackground: white;
\t\t\tborder: 1px solid #e1e1e1;
\t\t\tborder-radius: 4px;
\t\t\toverflow: hidden;
\t\t\ttransition: all 0.3s ease;
\t\t\tmargin-bottom: 20px;
\t\t}
\t\t.product-card:hover {
\t\t\ttransform: translateY(-2px);
\t\t\tbox-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
\t\t}
\t\t/* Animation de tri des produits */
\t\t.product-item {
\t\t\ttransition: all 0.3s ease;
\t\t}
\t\t.product-item.sorting {
\t\t\topacity: 0;
\t\t\ttransform: translateY(20px);
\t\t}
\t\t.product-item.sorted {
\t\t\topacity: 1;
\t\t\ttransform: translateY(0);
\t\t}
\t\t.product-image {
\t\t\theight: 200px;
\t\t\tbackground-size: cover;
\t\t\tbackground-position: center;
\t\t\tposition: relative;
\t\t\toverflow: hidden;
\t\t}
\t\t.product-info {
\t\t\tpadding: 15px;
\t\t}
\t\t.product-title {
\t\t\tfont-size: 1rem;
\t\t\tfont-weight: 600;
\t\t\tmargin-bottom: 8px;
\t\t\tcolor: #333;
\t\t\tline-height: 1.3;
\t\t}
\t\t.product-title a {
\t\t\tcolor: #333;
\t\t\ttext-decoration: none;
\t\t}
\t\t.product-title a:hover {
\t\t\tcolor: #007bff;
\t\t}
\t\t.product-price {
\t\t\tfont-size: 1.2rem;
\t\t\tfont-weight: bold;
\t\t\tcolor: #ff6b35;
\t\t\tmargin-bottom: 10px;
\t\t}
\t\t.product-meta {
\t\t\tdisplay: flex;
\t\t\tjustify-content: space-between;
\t\t\talign-items: center;
\t\t\tfont-size: 0.85rem;
\t\t\tcolor: #666;
\t\t}
\t\t.rating {
\t\t\tcolor: #ffc107;
\t\t}
\t\t/* Responsive avec classes Karma */
\t\t/* Responsive amélioré pour la page shop */
\t\t/* Tablettes et écrans moyens */
\t\t@media(max-width: 1200px) {
\t\t\t.shop-carousel-ebay {
\t\t\t\theight: 400px;
\t\t\t}
\t\t\t
\t\t\t.carousel-controls-ebay {
\t\t\t\tbottom: 18px;
\t\t\t\tright: 18px;
\t\t\t\tgap: 11px;
\t\t\t}
\t\t\t
\t\t\t.carousel-btn-ebay {
\t\t\t\twidth: 48px;
\t\t\t\theight: 48px;
\t\t\t\tfont-size: 21px;
\t\t\t}
\t\t\t
\t\t\t.carousel-indicators-ebay {
\t\t\t\tbottom: 18px;
\t\t\t\tpadding: 7px 13px;
\t\t\t}
\t\t\t
\t\t\t.carousel-indicator-ebay {
\t\t\t\twidth: 9px;
\t\t\t\theight: 9px;
\t\t\t}
\t\t}
\t\t
\t\t@media(max-width: 991.98px) {
\t\t\t.shop-carousel-ebay {
\t\t\t\tmargin: 0 10px;
\t\t\t\theight: 380px;
\t\t\t}
\t\t\t
\t\t\t.carousel-controls-ebay {
\t\t\t\tbottom: 16px;
\t\t\t\tright: 16px;
\t\t\t\tgap: 10px;
\t\t\t}
\t\t\t
\t\t\t.carousel-btn-ebay {
\t\t\t\twidth: 46px;
\t\t\t\theight: 46px;
\t\t\t\tfont-size: 20px;
\t\t\t}
\t\t\t
\t\t\t.carousel-indicators-ebay {
\t\t\t\tbottom: 16px;
\t\t\t\tleft: 50%;
\t\t\t\ttransform: translateX(-50%);
\t\t\t\tpadding: 6px 12px;
\t\t\t}
\t\t\t
\t\t\t.carousel-indicator-ebay {
\t\t\t\twidth: 9px;
\t\t\t\theight: 9px;
\t\t\t}
\t\t\t
\t\t\t.shop-header-content {
\t\t\t\tpadding: 20px;
\t\t\t\tmargin: 0 10px 20px;
\t\t\t}
\t\t\t
\t\t\t.shop-header-content .row {
\t\t\t\tflex-wrap: wrap;
\t\t\t}
\t\t\t
\t\t\t.shop-info-ebay {
\t\t\t\tmargin-top: 0;
\t\t\t\ttext-align: center;
\t\t\t}
\t\t\t.shop-name-ebay {
\t\t\t\tfont-size: 1.75rem;
\t\t\t\tline-height: 1.3;
\t\t\t}
\t\t\t.verified-text {
\t\t\t\tfont-size: 0.85rem;
\t\t\t}
\t\t\t.shop-category-ebay {
\t\t\t\tfont-size: 0.8rem;
\t\t\t\tpadding: 5px 12px;
\t\t\t}
\t\t\t.stat-row {
\t\t\t\tjustify-content: center;
\t\t\t\tgap: 20px;
\t\t\t}
\t\t\t.stat-item-ebay {
\t\t\t\talign-items: center;
\t\t\t\tmin-width: 90px;
\t\t\t}
\t\t\t.stat-percentage,
\t\t\t.stat-number-ebay {
\t\t\t\tfont-size: 1.15rem;
\t\t\t}
\t\t\t.stat-label-ebay {
\t\t\t\tfont-size: 0.75rem;
\t\t\t\ttext-align: center;
\t\t\t}
\t\t\t.shop-additional-info {
\t\t\t\tjustify-content: center;
\t\t\t\tgap: 12px 18px;
\t\t\t\tfont-size: 0.8rem;
\t\t\t}
\t\t\t.member-since {
\t\t\t\tfont-size: 0.8rem;
\t\t\t}
\t\t\t.shop-actions-ebay {
\t\t\t\tmin-width: auto;
\t\t\t}
\t\t}
\t\t
\t\t@media(max-width: 768px) {
\t\t\t.shop-banner,
\t\t\t.shop-carousel-ebay {
\t\t\t\theight: 300px;
\t\t\t\tmargin: 0;
\t\t\t\tborder-radius: 0;
\t\t\t}
\t\t\t
\t\t\t.shop-carousel-ebay .carousel-container {
\t\t\t\tborder-radius: 0;
\t\t\t}
\t\t\t.carousel-controls-ebay {
\t\t\t\tbottom: 12px;
\t\t\t\tright: 12px;
\t\t\t\tgap: 8px;
\t\t\t}
\t\t\t.carousel-btn-ebay {
\t\t\t\twidth: 40px;
\t\t\t\theight: 40px;
\t\t\t\tfont-size: 16px;
\t\t\t}
\t\t\t
\t\t\t.carousel-btn-ebay #pauseIcon,
\t\t\t.carousel-btn-ebay .pause-icon-content {
\t\t\t\tfont-size: 18px !important;
\t\t\t}
\t\t\t.carousel-indicators-ebay {
\t\t\t\tbottom: 12px;
\t\t\t\tleft: 50%;
\t\t\t\ttransform: translateX(-50%);
\t\t\t\tgap: 6px;
\t\t\t\tpadding: 5px 10px;
\t\t\t}
\t\t\t
\t\t\t.carousel-indicator-ebay {
\t\t\t\twidth: 8px;
\t\t\t\theight: 8px;
\t\t\t}
\t\t\t.shop-header-content {
\t\t\t\tpadding: 20px 16px;
\t\t\t\tmargin: 0;
\t\t\t\tborder-radius: 0;
\t\t\t}
\t\t\t.shop-header-content .row {
\t\t\t\tflex-direction: column;
\t\t\t\ttext-align: center;
\t\t\t}
\t\t\t.shop-avatar-container-ebay {
\t\t\t\tmargin: 0 auto 16px;
\t\t\t}
\t\t\t.shop-avatar-ebay {
\t\t\t\twidth: 90px;
\t\t\t\theight: 90px;
\t\t\t}
\t\t\t.shop-name-ebay {
\t\t\t\tfont-size: 1.5rem;
\t\t\t\tmargin-bottom: 8px;
\t\t\t\tline-height: 1.3;
\t\t\t\tword-break: break-word;
\t\t\t\thyphens: auto;
\t\t\t\tmax-width: 100%;
\t\t\t}
\t\t\t.shop-name-section {
\t\t\t\tmargin-bottom: 10px;
\t\t\t}
\t\t\t.verified-text {
\t\t\t\tfont-size: 0.8rem;
\t\t\t\twhite-space: normal;
\t\t\t\tjustify-content: center;
\t\t\t\tflex-wrap: wrap;
\t\t\t\tline-height: 1.4;
\t\t\t}
\t\t\t.verified-text i {
\t\t\t\tfont-size: 0.85rem;
\t\t\t}
\t\t\t.shop-category-ebay {
\t\t\t\tfont-size: 0.75rem;
\t\t\t\tpadding: 5px 10px;
\t\t\t\tmax-width: 100%;
\t\t\t\tline-height: 1.3;
\t\t\t\tword-break: break-word;
\t\t\t}
\t\t\t.shop-info-ebay {
\t\t\t\ttext-align: center;
\t\t\t}
\t\t\t.stat-row {
\t\t\t\tjustify-content: center;
\t\t\t\tgap: 10px;
\t\t\t\tflex-wrap: wrap;
\t\t\t}
\t\t\t
\t\t\t.stat-item-ebay {
\t\t\t\talign-items: center;
\t\t\t\tmin-width: 75px;
\t\t\t\tflex: 0 1 auto;
\t\t\t\tpadding: 10px 8px;
\t\t\t}
\t\t\t.stat-percentage,
\t\t\t.stat-number-ebay {
\t\t\t\tfont-size: 1rem;
\t\t\t\tline-height: 1.1;
\t\t\t\tword-break: break-word;
\t\t\t}
\t\t\t.stat-label-ebay {
\t\t\t\tfont-size: 0.65rem;
\t\t\t\ttext-align: center;
\t\t\t\tline-height: 1.2;
\t\t\t\tletter-spacing: 0.3px;
\t\t\t\tword-break: break-word;
\t\t\t\thyphens: auto;
\t\t\t}
\t\t\t.shop-additional-info {
\t\t\t\tjustify-content: center;
\t\t\t\tflex-wrap: wrap;
\t\t\t\tgap: 8px 10px;
\t\t\t\tfont-size: 0.75rem;
\t\t\t\tline-height: 1.4;
\t\t\t}
\t\t\t.member-since {
\t\t\t\tflex-direction: row;
\t\t\t\ttext-align: center;
\t\t\t\tgap: 4px;
\t\t\t\twhite-space: normal;
\t\t\t\tfont-size: 0.75rem;
\t\t\t\tline-height: 1.4;
\t\t\t\tpadding: 5px 8px;
\t\t\t\tword-break: break-word;
\t\t\t}
\t\t\t.member-since i {
\t\t\t\tmargin-right: 4px;
\t\t\t\tfont-size: 0.85rem;
\t\t\t\tflex-shrink: 0;
\t\t\t}
\t\t\t.shop-actions-ebay {
\t\t\t\tflex-direction: column;
\t\t\t\tjustify-content: center;
\t\t\t\tmin-width: auto;
\t\t\t\tmargin-top: 20px;
\t\t\t\twidth: 100%;
\t\t\t}
\t\t\t.btn-ebay {
\t\t\t\twidth: 100%;
\t\t\t\tmin-width: auto;
\t\t\t}
\t\t\t.shop-actions-ebay .d-flex {
\t\t\t\twidth: 100%;
\t\t\t}
\t\t\t.btn-shop,
\t\t\t.shop-action-btn {
\t\t\t\twidth: 100%;
\t\t\t\tmin-width: auto;
\t\t\t\theight: 45px;
\t\t\t\tfont-size: 0.9rem;
\t\t\t\tpadding: 12px 20px;
\t\t\t}
\t\t\t.shop-tabs-nav {
\t\t\t\tflex-wrap: wrap;
\t\t\t\tjustify-content: center;
\t\t\t}
\t\t\t
\t\t\t.shop-tab-link {
\t\t\t\tfont-size: 0.85rem;
\t\t\t\tpadding: 0.5rem 0.75rem;
\t\t\t\tflex: 1;
\t\t\t\tmin-width: auto;
\t\t\t}
\t\t\t
\t\t\t/* Produits responsive */
\t\t\t#products-container .product-item {
\t\t\t\tmargin-bottom: 20px;
\t\t\t}
\t\t\t
\t\t\t.product-card {
\t\t\t\tpadding: 15px;
\t\t\t}
\t\t\t
\t\t\t.product-title {
\t\t\t\tfont-size: 0.95rem;
\t\t\t}
\t\t\t
\t\t\t.product-price {
\t\t\t\tfont-size: 1.1rem;
\t\t\t}
\t\t\t
\t\t\t/* Détails de la boutique responsive */
\t\t\t.shop-info-ebay {
\t\t\t\ttext-align: center;
\t\t\t}
\t\t}
\t\t
\t\t@media(max-width: 575.98px) {
\t\t\t.shop-banner,
\t\t\t.shop-carousel-ebay {
\t\t\t\theight: 280px;
\t\t\t\tmargin: 0;
\t\t\t}
\t\t\t
\t\t\t.carousel-controls-ebay {
\t\t\t\tbottom: 10px;
\t\t\t\tright: 10px;
\t\t\t\tgap: 6px;
\t\t\t}
\t\t\t
\t\t\t.carousel-btn-ebay {
\t\t\t\twidth: 36px;
\t\t\t\theight: 36px;
\t\t\t\tfont-size: 14px;
\t\t\t}
\t\t\t
\t\t\t.carousel-btn-ebay #pauseIcon,
\t\t\t.carousel-btn-ebay .pause-icon-content {
\t\t\t\tfont-size: 16px !important;
\t\t\t}
\t\t\t
\t\t\t.carousel-indicators-ebay {
\t\t\t\tbottom: 10px;
\t\t\t\tleft: 50%;
\t\t\t\ttransform: translateX(-50%);
\t\t\t\tpadding: 4px 8px;
\t\t\t\tgap: 5px;
\t\t\t}
\t\t\t
\t\t\t.carousel-indicator-ebay {
\t\t\t\twidth: 7px;
\t\t\t\theight: 7px;
\t\t\t}
\t\t\t
\t\t\t.shop-header-content {
\t\t\t\tmargin: 0;
\t\t\t\tpadding: 16px 12px;
\t\t\t}
\t\t\t
\t\t\t.shop-avatar-ebay {
\t\t\t\twidth: 80px;
\t\t\t\theight: 80px;
\t\t\t}
\t\t\t
\t\t\t.shop-name-ebay {
\t\t\t\tfont-size: 1.3rem;
\t\t\t\tline-height: 1.3;
\t\t\t\tword-break: break-word;
\t\t\t\tletter-spacing: -0.1px;
\t\t\t\thyphens: auto;
\t\t\t\tmax-width: 100%;
\t\t\t}
\t\t\t.shop-name-section {
\t\t\t\tmargin-bottom: 8px;
\t\t\t}
\t\t\t.verified-text {
\t\t\t\tfont-size: 0.7rem;
\t\t\t\twhite-space: normal;
\t\t\t\tline-height: 1.4;
\t\t\t\tflex-wrap: wrap;
\t\t\t\tjustify-content: center;
\t\t\t\tword-break: break-word;
\t\t\t}
\t\t\t.verified-text i {
\t\t\t\tfont-size: 0.75rem;
\t\t\t\tflex-shrink: 0;
\t\t\t}
\t\t\t.shop-category-ebay {
\t\t\t\tfont-size: 0.65rem;
\t\t\t\tpadding: 4px 8px;
\t\t\t\tmax-width: 100%;
\t\t\t\tline-height: 1.3;
\t\t\t\tword-break: break-word;
\t\t\t}
\t\t\t
\t\t\t.stat-row {
\t\t\t\tgap: 6px;
\t\t\t\tflex-direction: row;
\t\t\t\tjustify-content: space-around;
\t\t\t}
\t\t\t
\t\t\t.stat-item-ebay {
\t\t\t\tflex: 1;
\t\t\t\tmin-width: 0;
\t\t\t\talign-items: center;
\t\t\t\tpadding: 8px 4px;
\t\t\t}
\t\t\t.stat-percentage,
\t\t\t.stat-number-ebay {
\t\t\t\tfont-size: 0.95rem;
\t\t\t\tline-height: 1.1;
\t\t\t\tword-break: break-word;
\t\t\t}
\t\t\t.stat-label-ebay {
\t\t\t\tfont-size: 0.6rem;
\t\t\t\ttext-align: center;
\t\t\t\tline-height: 1.2;
\t\t\t\tletter-spacing: 0.2px;
\t\t\t\tpadding: 0 2px;
\t\t\t\tword-break: break-word;
\t\t\t\thyphens: auto;
\t\t\t}
\t\t\t.shop-additional-info {
\t\t\t\tflex-direction: column;
\t\t\t\tgap: 8px;
\t\t\t\tfont-size: 0.7rem;
\t\t\t\talign-items: center;
\t\t\t\tline-height: 1.5;
\t\t\t}
\t\t\t.member-since {
\t\t\t\tfont-size: 0.7rem;
\t\t\t\tpadding: 4px 8px;
\t\t\t\tline-height: 1.4;
\t\t\t\tword-break: break-word;
\t\t\t\ttext-align: center;
\t\t\t\twidth: 100%;
\t\t\t\tmax-width: 100%;
\t\t\t\tjustify-content: center;
\t\t\t\twhite-space: normal;
\t\t\t}
\t\t\t.member-since i {
\t\t\t\tfont-size: 0.8rem;
\t\t\t\tmargin-right: 3px;
\t\t\t\tflex-shrink: 0;
\t\t\t}
\t\t\t.btn-ebay {
\t\t\t\tfont-size: 0.8rem;
\t\t\t\tpadding: 10px 14px;
\t\t\t\tline-height: 1.3;
\t\t\t}
\t\t\t.member-since i {
\t\t\t\tmargin-right: 4px;
\t\t\t\tfont-size: 0.8rem;
\t\t\t}
\t\t\t
\t\t\t.btn-ebay {
\t\t\t\tfont-size: 0.85rem;
\t\t\t\tpadding: 10px 16px;
\t\t\t}
\t\t\t
\t\t\t.member-since {
\t\t\t\tfont-size: 0.75rem;
\t\t\t}
\t\t\t
\t\t\t.shop-tab-content {
\t\t\t\tpadding: 15px 10px;
\t\t\t}
\t\t\t.shop-stats-row {
\t\t\t\tflex-direction: column;
\t\t\t\tgap: 10px;
\t\t\t\talign-items: flex-start;
\t\t\t}
\t\t}
\t\t.follow-button {
\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: 600;
\t\t\ttransition: all 0.3s ease;
\t\t\tcursor: pointer;
\t\t\tdisplay: inline-flex;
\t\t\talign-items: center;
\t\t\tgap: 8px;
\t\t}
\t\t.follow-button: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.follow-button.following {
\t\t\tbackground: #28a745;
\t\t}
\t\t.follow-button.following:hover {
\t\t\tbackground: #218838;
\t\t}
\t\t.follow-button:disabled {
\t\t\topacity: 0.6;
\t\t\tcursor: not-allowed;
\t\t\ttransform: none;
\t\t}
\t\t.follow-stats {
\t\t\tdisplay: flex;
\t\t\tgap: 30px;
\t\t\tmargin-top: 20px;
\t\t\tflex-wrap: wrap;
\t\t}
\t\t.follow-stat {
\t\t\ttext-align: center;
\t\t\tpadding: 15px;
\t\t\tbackground: #f8f9fa;
\t\t\tborder-radius: 10px;
\t\t\tmin-width: 120px;
\t\t}
\t\t.follow-stat-number {
\t\t\tfont-size: 1.8rem;
\t\t\tfont-weight: bold;
\t\t\tcolor: #ffa200;
\t\t\tdisplay: block;
\t\t}
\t\t.follow-stat-label {
\t\t\tcolor: #666;
\t\t\tfont-size: 0.9rem;
\t\t\ttext-transform: uppercase;
\t\t\tletter-spacing: 0.5px;
\t\t}
\t\t.shop-actions {
\t\t\tdisplay: flex;
\t\t\tgap: 15px;
\t\t\talign-items: center;
\t\t\tflex-wrap: wrap;
\t\t\tmargin-top: 20px;
\t\t}
\t\t.action-button {
\t\t\tbackground: white;
\t\t\tborder: 2px solid #ffa200;
\t\t\tcolor: #ffa200;
\t\t\tpadding: 10px 20px;
\t\t\tborder-radius: 20px;
\t\t\ttext-decoration: none;
\t\t\tfont-weight: 500;
\t\t\ttransition: all 0.3s ease;
\t\t\tdisplay: inline-flex;
\t\t\talign-items: center;
\t\t\tgap: 8px;
\t\t}
\t\t.action-button:hover {
\t\t\tbackground: #ffa200;
\t\t\tcolor: white;
\t\t\ttransform: translateY(-2px);
\t\t\tbox-shadow: 0 5px 15px rgba(255, 162, 0, 0.3);
\t\t}
\t\t.positive-feedback {
\t\t\tcolor: #28a745;
\t\t\tfont-weight: bold;
\t\t}
\t\t.items-sold {
\t\t\tcolor: #666;
\t\t\tfont-size: 0.9rem;
\t\t}
\t\t.followers-count {
\t\t\tcolor: #666;
\t\t\tfont-size: 0.9rem;
\t\t}
\t\t.shop-avatar {
\t\t\twidth: 120px;
\t\t\theight: 120px;
\t\t\tborder-radius: 50%;
\t\t\tborder: 4px solid white;
\t\t\tobject-fit: cover;
\t\t\tmargin-bottom: 20px;
\t\t}
\t\t.shop-stats {
\t\t\tbackground: white;
\t\t\tborder-radius: 10px;
\t\t\tpadding: 30px;
\t\t\tbox-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
\t\t\tmargin-top: -50px;
\t\t\tposition: relative;
\t\t\tz-index: 10;
\t\t}
\t\t.stat-item {
\t\t\ttext-align: center;
\t\t\tpadding: 20px;
\t\t}
\t\t.stat-number {
\t\t\tfont-size: 2.5rem;
\t\t\tfont-weight: bold;
\t\t\tcolor: #ffa200;
\t\t\tdisplay: block;
\t\t}
\t\t.stat-label {
\t\t\tcolor: #666;
\t\t\tfont-size: 0.9rem;
\t\t\ttext-transform: uppercase;
\t\t\tletter-spacing: 1px;
\t\t}
\t\t.shop-description {
\t\t\tbackground: #f8f9fa;
\t\t\tpadding: 30px;
\t\t\tborder-radius: 10px;
\t\t\tmargin-bottom: 40px;
\t\t}
\t\t.shop-contact {
\t\t\tbackground: white;
\t\t\tborder: 1px solid #e9ecef;
\t\t\tborder-radius: 10px;
\t\t\tpadding: 25px;
\t\t\tmargin-bottom: 40px;
\t\t}
\t\t.contact-item {
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tmargin-bottom: 15px;
\t\t}
\t\t.contact-item i {
\t\t\tcolor: #ffa200;
\t\t\tmargin-right: 15px;
\t\t\twidth: 20px;
\t\t}
\t\t.product-card {
\t\t\tbackground: white;
\t\t\tborder-radius: 10px;
\t\t\toverflow: hidden;
\t\t\tbox-shadow: 0 3px 10px rgba(0, 0, 0, 0.1);
\t\t\ttransition: transform 0.3s ease, box-shadow 0.3s ease;
\t\t\tmargin-bottom: 30px;
\t\t}
\t\t.product-card:hover {
\t\t\ttransform: translateY(-5px);
\t\t\tbox-shadow: 0 8px 25px rgba(0, 0, 0, 0.15);
\t\t}
\t\t.product-image {
\t\t\theight: 200px;
\t\t\tbackground-size: cover;
\t\t\tbackground-position: center;
\t\t\tposition: relative;
\t\t}
\t\t.product-info {
\t\t\tpadding: 20px;
\t\t}
\t\t.product-title {
\t\t\tfont-size: 1.1rem;
\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.3rem;
\t\t\tfont-weight: bold;
\t\t\tcolor: #ffa200;
\t\t\tmargin-bottom: 15px;
\t\t}
\t\t.product-meta {
\t\t\tdisplay: flex;
\t\t\tjustify-content: space-between;
\t\t\talign-items: center;
\t\t\tfont-size: 0.9rem;
\t\t\tcolor: #666;
\t\t}
\t\t.rating {
\t\t\tcolor: #ffa200;
\t\t}
\t\t/* Boutons d'action uniformes */
\t\t.btn-shop,
\t\t.shop-action-btn {
\t\t\tbackground: #ffa200;
\t\t\tborder: 1px solid #ffa200;
\t\t\tcolor: white;
\t\t\tpadding: 12px 24px;
\t\t\tborder-radius: 6px;
\t\t\tfont-weight: 500;
\t\t\tfont-size: 0.9rem;
\t\t\ttransition: all 0.3s ease;
\t\t\ttext-decoration: none;
\t\t\tdisplay: inline-flex;
\t\t\talign-items: center;
\t\t\tjustify-content: center;
\t\t\tgap: 8px;
\t\t\tmin-width: 120px;
\t\t\theight: 44px;
\t\t\twhite-space: nowrap;
\t\t}
\t\t.btn-shop:hover,
\t\t.shop-action-btn:hover {
\t\t\tbackground: #e8910a;
\t\t\tborder-color: #e8910a;
\t\t\tcolor: white;
\t\t\ttransform: translateY(-1px);
\t\t\tbox-shadow: 0 4px 12px rgba(255, 162, 0, 0.3);
\t\t}
\t\t/* Boutons secondaires */
\t\t.shop-action-btn.secondary {
\t\t\tbackground: transparent;
\t\t\tborder: 1px solid #6c757d;
\t\t\tcolor: #6c757d;
\t\t}
\t\t.shop-action-btn.secondary:hover {
\t\t\tbackground: #6c757d;
\t\t\tborder-color: #6c757d;
\t\t\tcolor: white;
\t\t\ttransform: translateY(-1px);
\t\t\tbox-shadow: 0 4px 12px rgba(108, 117, 125, 0.3);
\t\t}
\t\t/* Responsive */
\t\t@media(max-width: 768px) {
\t\t\t.shop-header {
\t\t\t\tpadding: 100px 0 40px;
\t\t\t}
\t\t\t.shop-avatar {
\t\t\t\twidth: 80px;
\t\t\t\theight: 80px;
\t\t\t}
\t\t\t.shop-stats {
\t\t\t\tmargin-top: -30px;
\t\t\t\tpadding: 20px;
\t\t\t}
\t\t\t.stat-number {
\t\t\t\tfont-size: 2rem;
\t\t\t}
\t\t}
\t\t/* Très petits écrans */
\t\t@media(max-width: 480px) {
\t\t\t.btn-shop,
\t\t\t.shop-action-btn {
\t\t\t\tmin-width: 90px;
\t\t\t\theight: 38px;
\t\t\t\tfont-size: 0.8rem;
\t\t\t\tpadding: 8px 16px;
\t\t\t}
\t\t\t.shop-actions-row {
\t\t\t\tgap: 8px;
\t\t\t}
\t\t}
\t\t/* Styles pour la section des avis */
\t\t.review-stats-card {
\t\t\tbackground: white;
\t\t\tborder-radius: 10px;
\t\t\tpadding: 20px;
\t\t\tbox-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
\t\t\tmargin-bottom: 20px;
\t\t}
\t\t.stats-header {
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tmargin-bottom: 20px;
\t\t}
\t\t.overall-rating {
\t\t\ttext-align: center;
\t\t\tmargin-right: 20px;
\t\t}
\t\t.rating-number {
\t\t\tfont-size: 36px;
\t\t\tfont-weight: bold;
\t\t\tcolor: #333;
\t\t\tdisplay: block;
\t\t}
\t\t.stars {
\t\t\tcolor: #ffc107;
\t\t\tfont-size: 18px;
\t\t\tmargin-top: 5px;
\t\t}
\t\t.rating-summary p {
\t\t\tmargin: 0;
\t\t\tcolor: #666;
\t\t}
\t\t.rating-breakdown {
\t\t\tmargin-top: 15px;
\t\t}
\t\t.rating-bar {
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tmargin-bottom: 8px;
\t\t}
\t\t.rating-label {
\t\t\twidth: 40px;
\t\t\tfont-size: 14px;
\t\t\tcolor: #666;
\t\t}
\t\t.rating-progress {
\t\t\tflex: 1;
\t\t\theight: 6px;
\t\t\tbackground: #e9ecef;
\t\t\tborder-radius: 3px;
\t\t\tmargin: 0 10px;
\t\t\toverflow: hidden;
\t\t}
\t\t.rating-fill {
\t\t\theight: 100%;
\t\t\tbackground: linear-gradient(45deg, #ffc107, #ff8c00);
\t\t\ttransition: width 0.3s ease;
\t\t}
\t\t.rating-count {
\t\t\twidth: 30px;
\t\t\ttext-align: right;
\t\t\tfont-size: 14px;
\t\t\tcolor: #666;
\t\t}
\t\t.reviews-preview {
\t\t\tbackground: white;
\t\t\tborder-radius: 10px;
\t\t\tpadding: 20px;
\t\t\tbox-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
\t\t}
\t\t.review-card-preview {
\t\t\tborder-bottom: 1px solid #f0f0f0;
\t\t\tpadding-bottom: 15px;
\t\t\tmargin-bottom: 15px;
\t\t}
\t\t.review-card-preview:last-child {
\t\t\tborder-bottom: none;
\t\t\tmargin-bottom: 0;
\t\t}
\t\t.review-header {
\t\t\tdisplay: flex;
\t\t\tjustify-content: space-between;
\t\t\talign-items: center;
\t\t\tmargin-bottom: 10px;
\t\t}
\t\t.review-user {
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t}
\t\t.user-avatar {
\t\t\twidth: 35px;
\t\t\theight: 35px;
\t\t\tborder-radius: 50%;
\t\t\tbackground: linear-gradient(45deg, #667eea, #764ba2);
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tjustify-content: center;
\t\t\tcolor: white;
\t\t\tfont-weight: bold;
\t\t\tmargin-right: 10px;
\t\t}
\t\t.user-info h6 {
\t\t\tmargin: 0;
\t\t\tfont-size: 14px;
\t\t\tfont-weight: 600;
\t\t\tcolor: #333;
\t\t}
\t\t.user-info small {
\t\t\tcolor: #666;
\t\t\tfont-size: 12px;
\t\t}
\t\t.review-rating {
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tgap: 5px;
\t\t}
\t\t.verified-badge {
\t\t\tbackground: #28a745;
\t\t\tcolor: white;
\t\t\tpadding: 2px 4px;
\t\t\tborder-radius: 3px;
\t\t\tfont-size: 10px;
\t\t\tfont-weight: bold;
\t\t}
\t\t.review-content {
\t\t\tcolor: #666;
\t\t\tfont-size: 14px;
\t\t\tline-height: 1.5;
\t\t}
\t\t.empty-reviews {
\t\t\ttext-align: center;
\t\t\tpadding: 40px 20px;
\t\t\tcolor: #666;
\t\t}
\t\t.empty-reviews i {
\t\t\tfont-size: 48px;
\t\t\tcolor: #ddd;
\t\t\tmargin-bottom: 15px;
\t\t}
\t\t.empty-reviews h4 {
\t\t\tcolor: #333;
\t\t\tmargin-bottom: 10px;
\t\t}
\t\t.section-title h2 {
\t\t\tcolor: #333;
\t\t\tmargin-bottom: 10px;
\t\t}
\t\t.section-title p {
\t\t\tcolor: #666;
\t\t\tmargin-bottom: 30px;
\t\t}
\t\t@media(max-width: 768px) {
\t\t\t.stats-header {
\t\t\t\tflex-direction: column;
\t\t\t\ttext-align: center;
\t\t\t}
\t\t\t.overall-rating {
\t\t\t\tmargin-right: 0;
\t\t\t\tmargin-bottom: 15px;
\t\t\t}
\t\t\t.review-header {
\t\t\t\tflex-direction: column;
\t\t\t\talign-items: flex-start;
\t\t\t}
\t\t\t.review-rating {
\t\t\t\tmargin-top: 5px;
\t\t\t}
\t\t}
\t</style>
";
$__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
$__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
yield from [];
}
// line 2166
/**
* @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 2167
yield "
\t<!-- Shop Header eBay-style avec Karma - Pleine largeur -->
\t<section
\t\tclass=\"shop-header\">
\t\t<!-- Carrousel eBay-style -->
\t\t<div class=\"shop-carousel-ebay\">
\t\t\t<div class=\"carousel-container\">
\t\t\t\t";
// line 2174
$context["allBannerImages"] = CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "getAllBannerImages", [], "method", false, false, false, 2174);
// line 2175
yield "\t\t\t\t";
if ((Twig\Extension\CoreExtension::length($this->env->getCharset(), ($context["allBannerImages"] ?? null)) > 0)) {
// line 2176
yield "\t\t\t\t\t";
$context['_parent'] = $context;
$context['_seq'] = CoreExtension::ensureTraversable(($context["allBannerImages"] ?? 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["image"]) {
// line 2177
yield "\t\t\t\t\t\t<div class=\"carousel-slide ";
if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, $context["loop"], "first", [], "any", false, false, false, 2177)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
yield "active";
}
yield "\" style=\"background-image: url('";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl($context["image"]), "html", null, true);
yield "')\">
\t\t\t\t\t\t\t<div class=\"shop-banner-overlay\"></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['image'], $context['_parent'], $context['loop']);
$context = array_intersect_key($context, $_parent) + $_parent;
// line 2181
yield "\t\t\t\t";
} else {
// line 2182
yield "\t\t\t\t\t<!-- Slide par défaut avec dégradé si aucune image de bannière -->
\t\t\t\t\t<div class=\"carousel-slide active\" style=\"background: linear-gradient(135deg, #667eea 0%, #764ba2 50%, #f093fb 100%);\">
\t\t\t\t\t\t<div class=\"shop-banner-overlay\"></div>
\t\t\t\t\t</div>
\t\t\t\t";
}
// line 2187
yield "\t\t\t</div>
\t\t\t<!-- Contrôles eBay-style améliorés - toujours affichés si plusieurs images -->
\t\t\t";
// line 2190
$context["totalBannerImages"] = Twig\Extension\CoreExtension::length($this->env->getCharset(), ($context["allBannerImages"] ?? null));
// line 2191
yield "\t\t\t";
if ((($context["totalBannerImages"] ?? null) > 1)) {
// line 2192
yield "\t\t\t\t<div class=\"carousel-controls-ebay\">
\t\t\t\t\t<button class=\"carousel-btn-ebay prev-btn\" onclick=\"previousSlide()\" id=\"prevBtn\" title=\"Image précédente\" aria-label=\"Image précédente\">
\t\t\t\t\t\t<i class=\"lnr lnr-chevron-left\"></i>
\t\t\t\t\t</button>
\t\t\t\t\t<button class=\"carousel-btn-ebay pause-btn\" onclick=\"toggleCarousel()\" id=\"pauseBtn\" title=\"Pause/Reprendre\" aria-label=\"Pause/Reprendre\">
\t\t\t\t\t\t<span id=\"pauseIcon\" class=\"pause-icon-content\">⏸</span>
\t\t\t\t\t</button>
\t\t\t\t\t<button class=\"carousel-btn-ebay next-btn\" onclick=\"nextSlide()\" id=\"nextBtn\" title=\"Image suivante\" aria-label=\"Image suivante\">
\t\t\t\t\t\t<i class=\"lnr lnr-chevron-right\"></i>
\t\t\t\t\t</button>
\t\t\t\t</div>
\t\t\t\t<!-- Indicateurs eBay-style améliorés -->
\t\t\t\t<div class=\"carousel-indicators-ebay\">
\t\t\t\t\t";
// line 2206
$context['_parent'] = $context;
$context['_seq'] = CoreExtension::ensureTraversable(($context["allBannerImages"] ?? 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["image"]) {
// line 2207
yield "\t\t\t\t\t\t<button class=\"carousel-indicator-ebay ";
if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, $context["loop"], "first", [], "any", false, false, false, 2207)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
yield "active";
}
yield "\" onclick=\"goToSlide(";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["loop"], "index0", [], "any", false, false, false, 2207), "html", null, true);
yield ")\" title=\"Image ";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["loop"], "index", [], "any", false, false, false, 2207), "html", null, true);
yield "\" aria-label=\"Aller à l'image ";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["loop"], "index", [], "any", false, false, false, 2207), "html", null, true);
yield "\"></button>
\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['image'], $context['_parent'], $context['loop']);
$context = array_intersect_key($context, $_parent) + $_parent;
// line 2209
yield "\t\t\t\t</div>
\t\t\t";
}
// line 2211
yield "\t\t</div>
\t\t<!-- Contenu de la boutique eBay-style -->
\t\t<div class=\"shop-header-content\">
\t\t\t<div class=\"row g-3 g-md-4 align-items-start align-items-md-center\">
\t\t\t\t<!-- Logo de la boutique -->
\t\t\t\t<div class=\"col-12 col-md-auto text-center text-md-start\">
\t\t\t\t\t<div class=\"shop-avatar-container-ebay\">
\t\t\t\t\t\t";
// line 2219
if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "logo", [], "any", false, false, false, 2219)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
// line 2220
yield "\t\t\t\t\t\t\t<img src=\"";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl(CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "logo", [], "any", false, false, false, 2220)), "html", null, true);
yield "\" alt=\"";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "name", [], "any", false, false, false, 2220), "html", null, true);
yield "\" class=\"shop-avatar-ebay\">
\t\t\t\t\t\t";
} else {
// line 2222
yield "\t\t\t\t\t\t\t<div class=\"shop-avatar-ebay shop-avatar-placeholder\">
\t\t\t\t\t\t\t\t<i class=\"lnr lnr-store\"></i>
\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t";
}
// line 2226
yield "\t\t\t\t\t\t";
if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "isVerified", [], "any", false, false, false, 2226)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
// line 2227
yield "\t\t\t\t\t\t\t<div class=\"verified-badge-ebay\">
\t\t\t\t\t\t\t\t<i class=\"lnr lnr-checkmark-circle\"></i>
\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t";
}
// line 2231
yield "\t\t\t\t\t</div>
\t\t\t\t</div>
\t\t\t\t<!-- Informations principales -->
\t\t\t\t<div class=\"col-12 col-md\">
\t\t\t\t\t<div class=\"shop-info-ebay\">
\t\t\t\t\t\t<!-- Nom de la boutique -->
\t\t\t\t\t\t<div class=\"shop-name-section mb-2\">
\t\t\t\t\t\t\t<h1 class=\"shop-name-ebay mb-1\">";
// line 2239
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "name", [], "any", false, false, false, 2239), "html", null, true);
yield "</h1>
\t\t\t\t\t\t\t<div class=\"d-flex flex-wrap align-items-center gap-2\">
\t\t\t\t\t\t\t";
// line 2241
if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "isVerified", [], "any", false, false, false, 2241)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
// line 2242
yield "\t\t\t\t\t\t\t\t<span class=\"verified-text\">
\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-checkmark-circle me-1\"></i>Vendeur vérifié
\t\t\t\t\t\t\t\t</span>
\t\t\t\t\t\t\t";
}
// line 2246
yield "\t\t\t\t\t\t";
if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "shopCategory", [], "any", false, false, false, 2246)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
// line 2247
yield "\t\t\t\t\t\t\t\t<span class=\"shop-category-ebay\">";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "shopCategory", [], "any", false, false, false, 2247), "name", [], "any", false, false, false, 2247), "html", null, true);
yield "</span>
\t\t\t\t\t\t";
}
// line 2249
yield "\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t</div>
\t\t\t\t\t\t<!-- Statistiques principales -->
\t\t\t\t\t\t<div class=\"shop-stats-ebay\">
\t\t\t\t\t\t\t<div class=\"stat-row mb-2\">
\t\t\t\t\t\t\t\t";
// line 2255
if ((CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "averageRating", [], "any", false, false, false, 2255) > 0)) {
// line 2256
yield "\t\t\t\t\t\t\t\t\t<div class=\"stat-item-ebay\">
\t\t\t\t\t\t\t\t\t\t<span class=\"stat-percentage\">";
// line 2257
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Twig\Extension\CoreExtension']->formatNumber(CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "averageRating", [], "any", false, false, false, 2257), 1), "html", null, true);
yield "%</span>
\t\t\t\t\t\t\t\t\t\t<span class=\"stat-label-ebay\">Évaluations positives</span>
\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t";
}
// line 2261
yield "
\t\t\t\t\t\t\t\t";
// line 2262
if ((CoreExtension::getAttribute($this->env, $this->source, ($context["stats"] ?? null), "totalProductSales", [], "any", false, false, false, 2262) > 0)) {
// line 2263
yield "\t\t\t\t\t\t\t\t\t<div class=\"stat-item-ebay\">
\t\t\t\t\t\t\t\t\t\t<span class=\"stat-number-ebay\">";
// line 2264
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Twig\Extension\CoreExtension']->formatNumber(CoreExtension::getAttribute($this->env, $this->source, ($context["stats"] ?? null), "totalProductSales", [], "any", false, false, false, 2264)), "html", null, true);
yield "</span>
\t\t\t\t\t\t\t\t\t\t<span class=\"stat-label-ebay\">Articles vendus</span>
\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t";
}
// line 2268
yield "
\t\t\t\t\t\t\t\t";
// line 2269
if ((CoreExtension::getAttribute($this->env, $this->source, ($context["followStats"] ?? null), "active_follows", [], "any", false, false, false, 2269) > 0)) {
// line 2270
yield "\t\t\t\t\t\t\t\t\t<div class=\"stat-item-ebay\">
\t\t\t\t\t\t\t\t\t\t<span class=\"stat-number-ebay\">";
// line 2271
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Twig\Extension\CoreExtension']->formatNumber(CoreExtension::getAttribute($this->env, $this->source, ($context["followStats"] ?? null), "active_follows", [], "any", false, false, false, 2271)), "html", null, true);
yield "</span>
\t\t\t\t\t\t\t\t\t\t<span class=\"stat-label-ebay\">Suiveurs</span>
\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t";
}
// line 2275
yield "\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t<!-- Informations supplémentaires -->
\t\t\t\t\t\t\t<div class=\"shop-additional-info\">
\t\t\t\t\t\t\t\t<div class=\"d-flex flex-wrap gap-3 gap-md-4\">
\t\t\t\t\t\t\t\t\t";
// line 2280
if ((CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "averageRating", [], "any", false, false, false, 2280) > 0)) {
// line 2281
yield "\t\t\t\t\t\t\t\t\t\t<span class=\"member-since\">
\t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-thumbs-up me-1\"></i>
\t\t\t\t\t\t\t\t\t\t\t";
// line 2283
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Twig\Extension\CoreExtension']->formatNumber(CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "averageRating", [], "any", false, false, false, 2283), 1), "html", null, true);
yield "% positive feedback
\t\t\t\t\t\t\t\t\t\t</span>
\t\t\t\t\t\t\t\t\t";
}
// line 2286
yield "\t\t\t\t\t\t\t\t\t";
if ((CoreExtension::getAttribute($this->env, $this->source, ($context["stats"] ?? null), "totalProductSales", [], "any", false, false, false, 2286) > 0)) {
// line 2287
yield "\t\t\t\t\t\t\t\t\t\t<span class=\"member-since\">
\t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-cart me-1\"></i>
\t\t\t\t\t\t\t\t\t\t\t";
// line 2289
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Twig\Extension\CoreExtension']->formatNumber(CoreExtension::getAttribute($this->env, $this->source, ($context["stats"] ?? null), "totalProductSales", [], "any", false, false, false, 2289)), "html", null, true);
yield " produit";
yield (((CoreExtension::getAttribute($this->env, $this->source, ($context["stats"] ?? null), "totalProductSales", [], "any", false, false, false, 2289) > 1)) ? ("s") : (""));
yield " vendu";
yield (((CoreExtension::getAttribute($this->env, $this->source, ($context["stats"] ?? null), "totalProductSales", [], "any", false, false, false, 2289) > 1)) ? ("s") : (""));
yield "
\t\t\t\t\t\t\t\t\t\t</span>
\t\t\t\t\t\t\t\t\t";
}
// line 2292
yield "\t\t\t\t\t\t\t\t\t<span class=\"member-since\">
\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-history me-1\"></i>
\t\t\t\t\t\t\t\t\t\tCréé depuis ";
// line 2294
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Twig\Extension\CoreExtension']->formatDate(CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "createdAt", [], "any", false, false, false, 2294), "M Y"), "html", null, true);
yield "
\t\t\t\t\t\t\t\t\t</span>
\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</div>
\t\t\t\t</div>
\t\t\t\t<!-- Actions eBay-style -->
\t\t\t\t<div class=\"col-12 col-md-auto\">
\t\t\t\t\t<div class=\"shop-actions-ebay\">
\t\t\t\t\t\t";
// line 2305
if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, ($context["app"] ?? null), "user", [], "any", false, false, false, 2305)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
// line 2306
yield "\t\t\t\t\t\t\t<button id=\"follow-button\" class=\"btn btn-primary btn-ebay w-100 ";
if ((($tmp = ($context["isFollowing"] ?? null)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
yield "following";
}
yield "\" data-shop-id=\"";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "id", [], "any", false, false, false, 2306), "html", null, true);
yield "\" data-following=\"";
yield (((($tmp = ($context["isFollowing"] ?? null)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) ? ("true") : ("false"));
yield "\">
\t\t\t\t\t\t\t\t<span id=\"follow-text\">
\t\t\t\t\t\t\t\t\t";
// line 2308
if ((($tmp = ($context["isFollowing"] ?? null)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
// line 2309
yield "\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-checkmark-circle me-1\"></i> Suivi
\t\t\t\t\t\t\t\t\t";
} else {
// line 2311
yield "\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-plus me-1\"></i> Suivre
\t\t\t\t\t\t\t\t\t";
}
// line 2313
yield "\t\t\t\t\t\t\t\t</span>
\t\t\t\t\t\t\t</button>
\t\t\t\t\t\t";
} else {
// line 2316
yield "\t\t\t\t\t\t\t<a href=\"";
yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("ui_app_login");
yield "\" class=\"btn btn-primary btn-ebay w-100\">
\t\t\t\t\t\t\t\t<i class=\"lnr lnr-user me-1\"></i> Se connecter pour suivre
\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t";
}
// line 2320
yield "
\t\t\t\t\t\t<div class=\"d-flex gap-2 mt-2\">
\t\t\t\t\t\t\t<button class=\"btn btn-outline-secondary btn-ebay flex-fill\" onclick=\"shareShop()\" title=\"Partager\">
\t\t\t\t\t\t\t\t<i class=\"lnr lnr-bubble\"></i>
\t\t\t\t\t\t\t\t<span class=\"d-none d-md-inline ms-1\">Partager</span>
\t\t\t\t\t\t</button>
\t\t\t\t\t\t\t<button class=\"btn btn-outline-danger btn-ebay flex-fill\" onclick=\"reportShop()\" title=\"Signaler\">
\t\t\t\t\t\t\t\t<i class=\"lnr lnr-flag\"></i>
\t\t\t\t\t\t\t\t<span class=\"d-none d-md-inline ms-1\">Signaler</span>
\t\t\t\t\t\t</button>
\t\t\t\t\t\t</div>
\t\t\t\t\t\t";
// line 2333
if ((($tmp = ($context["canEdit"] ?? null)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
// line 2334
yield "\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("seller_shop_edit", ["slug" => CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "slug", [], "any", false, false, false, 2334)]), "html", null, true);
yield "\" class=\"btn btn-outline-primary btn-ebay w-100 mt-2\">
\t\t\t\t\t\t\t\t<i class=\"lnr lnr-pencil me-1\"></i> Modifier la boutique
\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t";
}
// line 2338
yield "\t\t\t\t\t</div>
\t\t\t\t</div>
\t\t\t</div>
\t\t</div>
\t</section>
\t<!-- Shop Tabs eBay-style avec Karma -->
\t<section class=\"container\">
\t\t<div class=\"shop-tabs\">
\t\t\t<ul class=\"nav nav-tabs shop-tabs-nav\" role=\"tablist\">
\t\t\t\t<li class=\"nav-item shop-tab\">
\t\t\t\t\t<a href=\"#shop-items\" class=\"nav-link shop-tab-link active\" data-tab=\"items\" role=\"tab\">
\t\t\t\t\t\tBoutique
\t\t\t\t\t</a>
\t\t\t\t</li>
\t\t\t\t<li class=\"nav-item shop-tab\">
\t\t\t\t\t<a href=\"#shop-sale\" class=\"nav-link shop-tab-link\" data-tab=\"sale\" role=\"tab\">
\t\t\t\t\t\tPromotions
\t\t\t\t\t</a>
\t\t\t\t</li>
\t\t\t\t<li class=\"nav-item shop-tab\">
\t\t\t\t\t<a href=\"#shop-about\" class=\"nav-link shop-tab-link\" data-tab=\"about\" role=\"tab\">
\t\t\t\t\t\tÀ propos
\t\t\t\t\t</a>
\t\t\t\t</li>
\t\t\t\t<li class=\"nav-item shop-tab\">
\t\t\t\t\t<a href=\"#shop-feedback\" class=\"nav-link shop-tab-link\" data-tab=\"feedback\" role=\"tab\">
\t\t\t\t\t\tAvis (";
// line 2365
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "getVisibleReviewsCount", [], "method", false, false, false, 2365), "html", null, true);
yield ")
\t\t\t\t\t</a>
\t\t\t\t</li>
\t\t\t</ul>
\t\t\t<!-- Tab Content: Shop Items avec Karma -->
\t\t\t<div id=\"shop-items\" class=\"tab-content shop-tab-content active\">
\t\t\t\t<div class=\"row\">
\t\t\t\t\t<div class=\"col-lg-12\">
\t\t\t\t\t\t<div class=\"d-flex justify-content-between align-items-center mb-4\">
\t\t\t\t\t\t\t<h4 class=\"mb-0\">Produits de
\t\t\t\t\t\t\t\t";
// line 2376
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "name", [], "any", false, false, false, 2376), "html", null, true);
yield "</h4>
\t\t\t\t\t\t\t<div class=\"d-flex align-items-center gap-3\">
\t\t\t\t\t\t\t\t<span style=\"font-size: 2rem; font-weight: 600; min-width: 100px; display: inline-block; text-align: center;\">
\t\t\t\t\t\t\t\t\t<span class=\"product-count\">";
// line 2379
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Twig\Extension\CoreExtension']->formatNumber(Twig\Extension\CoreExtension::length($this->env->getCharset(), ($context["products"] ?? null))), "html", null, true);
yield "</span>
\t\t\t\t\t\t\t\t\t<span style=\"font-size: 1rem; font-weight: 400;\">produits</span>
\t\t\t\t\t\t\t\t</span>
\t\t\t\t\t\t\t\t<select class=\"form-select\" id=\"product-sort\" style=\"width: auto;\" onchange=\"if(window.sortProducts) window.sortProducts(this.value);\">
\t\t\t\t\t\t\t\t\t<option value=\"\">Trier par</option>
\t\t\t\t\t\t\t\t\t<option value=\"price_asc\">Prix : Croissant</option>
\t\t\t\t\t\t\t\t\t<option value=\"price_desc\">Prix : Décroissant</option>
\t\t\t\t\t\t\t\t\t<option value=\"newest\">Plus récents</option>
\t\t\t\t\t\t\t\t\t<option value=\"popular\">Plus populaires</option>
\t\t\t\t\t\t\t\t\t<option value=\"name_asc\">Nom : A-Z</option>
\t\t\t\t\t\t\t\t\t<option value=\"name_desc\">Nom : Z-A</option>
\t\t\t\t\t\t\t\t</select>
\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t</div>
\t\t\t\t\t\t";
// line 2395
if ((Twig\Extension\CoreExtension::length($this->env->getCharset(), ($context["products"] ?? null)) > 0)) {
// line 2396
yield "\t\t\t\t\t\t\t<div class=\"row\" id=\"products-container\">
\t\t\t\t\t\t\t\t";
// line 2397
$context['_parent'] = $context;
$context['_seq'] = CoreExtension::ensureTraversable(($context["products"] ?? null));
foreach ($context['_seq'] as $context["_key"] => $context["product"]) {
// line 2398
yield "\t\t\t\t\t\t\t\t\t<div class=\"col-lg-3 col-md-4 col-sm-6 mb-4 product-item\" data-price=\"";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "price", [], "any", false, false, false, 2398), "html", null, true);
yield "\" data-name=\"";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(Twig\Extension\CoreExtension::lower($this->env->getCharset(), CoreExtension::getAttribute($this->env, $this->source, $context["product"], "name", [], "any", false, false, false, 2398)), "html", null, true);
yield "\" data-views=\"";
yield (((CoreExtension::getAttribute($this->env, $this->source, $context["product"], "viewCount", [], "any", true, true, false, 2398) && !(null === CoreExtension::getAttribute($this->env, $this->source, $context["product"], "viewCount", [], "any", false, false, false, 2398)))) ? ($this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "viewCount", [], "any", false, false, false, 2398), "html", null, true)) : (0));
yield "\" data-created=\"";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Twig\Extension\CoreExtension']->formatDate(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "publishedAt", [], "any", false, false, false, 2398), "Y-m-d"), "html", null, true);
yield "\">
\t\t\t\t\t\t\t\t\t\t<div class=\"product-card\">
\t\t\t\t\t\t\t\t\t\t\t<a href=\"";
// line 2400
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, 2400)]), "html", null, true);
yield "\">
\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"product-image\" style=\"background-image: url('";
// line 2401
if ((CoreExtension::getAttribute($this->env, $this->source, $context["product"], "images", [], "any", true, true, false, 2401) && (Twig\Extension\CoreExtension::length($this->env->getCharset(), CoreExtension::getAttribute($this->env, $this->source, $context["product"], "images", [], "any", false, false, false, 2401)) > 0))) {
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl((($_v0 = CoreExtension::getAttribute($this->env, $this->source, $context["product"], "images", [], "any", false, false, false, 2401)) && is_array($_v0) || $_v0 instanceof ArrayAccess ? ($_v0[0] ?? null) : null)), "html", null, true);
} else {
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 "')\"></div>
\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=\"product-info\">
\t\t\t\t\t\t\t\t\t\t\t\t<h6 class=\"product-title\">
\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"";
// line 2405
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, 2405)]), "html", null, true);
yield "\" class=\"text-decoration-none\">
\t\t\t\t\t\t\t\t\t\t\t\t\t\t";
// line 2406
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "name", [], "any", false, false, false, 2406), "html", null, true);
yield "
\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</h6>
\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"product-price\">";
// line 2409
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, 2409), 2, ".", " "), "html", null, true);
yield "
\t\t\t\t\t\t\t\t\t\t\t\t\tHTG</div>
\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"product-meta\">
\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\t\t";
// line 2413
if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, $context["product"], "averageRating", [], "any", false, false, false, 2413)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
// line 2414
yield "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"rating\">
\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t";
// line 2415
$context['_parent'] = $context;
$context['_seq'] = CoreExtension::ensureTraversable(range(1, 5));
foreach ($context['_seq'] as $context["_key"] => $context["i"]) {
// line 2416
yield "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"fa fa-star";
if (($context["i"] <= CoreExtension::getAttribute($this->env, $this->source, $context["product"], "averageRating", [], "any", false, false, false, 2416))) {
} else {
yield "-o";
}
yield "\"></i>
\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t";
}
$_parent = $context['_parent'];
unset($context['_seq'], $context['_key'], $context['i'], $context['_parent']);
$context = array_intersect_key($context, $_parent) + $_parent;
// line 2418
yield "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t\t\t\t\t\t";
}
// line 2420
yield "\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\t<span class=\"text-muted\">";
// line 2421
yield (((CoreExtension::getAttribute($this->env, $this->source, $context["product"], "viewCount", [], "any", true, true, false, 2421) && !(null === CoreExtension::getAttribute($this->env, $this->source, $context["product"], "viewCount", [], "any", false, false, false, 2421)))) ? ($this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "viewCount", [], "any", false, false, false, 2421), "html", null, true)) : (0));
yield "
\t\t\t\t\t\t\t\t\t\t\t\t\t\tvues</span>
\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";
}
$_parent = $context['_parent'];
unset($context['_seq'], $context['_key'], $context['product'], $context['_parent']);
$context = array_intersect_key($context, $_parent) + $_parent;
// line 2428
yield "\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t";
} else {
// line 2430
yield "\t\t\t\t\t\t\t<div class=\"text-center py-5\">
\t\t\t\t\t\t\t\t<i class=\"lnr lnr-package\" style=\"font-size: 4rem; color: #ccc;\"></i>
\t\t\t\t\t\t\t\t<h4 class=\"mt-3\">Aucun produit disponible</h4>
\t\t\t\t\t\t\t\t<p class=\"text-muted\">Cette boutique n'a pas encore de produits en vente.</p>
\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t";
}
// line 2436
yield "\t\t\t\t\t</div>
\t\t\t\t</div>
\t\t\t</div>
\t\t\t<!-- Tab Content: Sale avec Karma -->
\t\t\t<div id=\"shop-sale\" class=\"tab-content shop-tab-content\">
\t\t\t\t<div class=\"text-center py-5\">
\t\t\t\t\t<i class=\"lnr lnr-tag\" style=\"font-size: 4rem; color: #ccc;\"></i>
\t\t\t\t\t<h4 class=\"mt-3\">Aucune promotion actuellement</h4>
\t\t\t\t\t<p class=\"text-muted\">Cette boutique n'a pas de promotions actives pour le moment.</p>
\t\t\t\t</div>
\t\t\t</div>
\t\t\t<!-- Tab Content: About avec Karma -->
\t\t\t<div id=\"shop-about\" class=\"tab-content shop-tab-content\">
\t\t\t\t<div class=\"row\">
\t\t\t\t\t<div class=\"col-lg-8\">
\t\t\t\t\t\t<div class=\"card\">
\t\t\t\t\t\t\t<div class=\"card-header\">
\t\t\t\t\t\t\t\t<h5 class=\"mb-0\">
\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-user me-2\"></i>À propos de
\t\t\t\t\t\t\t\t\t";
// line 2458
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "name", [], "any", false, false, false, 2458), "html", null, true);
yield "
\t\t\t\t\t\t\t\t</h5>
\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t<div class=\"card-body\">
\t\t\t\t\t\t\t\t";
// line 2462
if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "description", [], "any", false, false, false, 2462)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
// line 2463
yield "\t\t\t\t\t\t\t\t\t<div class=\"card-text shop-description-content\">";
yield CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "description", [], "any", false, false, false, 2463);
yield "</div>
\t\t\t\t\t\t\t\t";
} else {
// line 2465
yield "\t\t\t\t\t\t\t\t\t<p class=\"text-muted\">Aucune description disponible.</p>
\t\t\t\t\t\t\t\t";
}
// line 2467
yield "
\t\t\t\t\t\t\t\t";
// line 2468
if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "businessHours", [], "any", false, false, false, 2468)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
// line 2469
yield "\t\t\t\t\t\t\t\t\t<h6 class=\"mt-4\">
\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-clock me-2\"></i>Heures d'ouverture
\t\t\t\t\t\t\t\t\t</h6>
\t\t\t\t\t\t\t\t\t<p>";
// line 2472
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "businessHours", [], "any", false, false, false, 2472), "html", null, true);
yield "</p>
\t\t\t\t\t\t\t\t";
}
// line 2474
yield "
\t\t\t\t\t\t\t\t";
// line 2475
if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "returnPolicy", [], "any", false, false, false, 2475)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
// line 2476
yield "\t\t\t\t\t\t\t\t\t<h6 class=\"mt-4\">
\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-undo me-2\"></i>Politique de retour
\t\t\t\t\t\t\t\t\t</h6>
\t\t\t\t\t\t\t\t\t<p>";
// line 2479
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "returnPolicy", [], "any", false, false, false, 2479), "html", null, true);
yield "</p>
\t\t\t\t\t\t\t\t";
}
// line 2481
yield "\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-4\">
\t\t\t\t\t\t<div class=\"card shop-info-card\">
\t\t\t\t\t\t\t<div class=\"card-header\">
\t\t\t\t\t\t\t\t<h6 class=\"mb-0\">
\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-chart me-2\"></i>Statistiques de la boutique
\t\t\t\t\t\t\t\t</h6>
\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t<div class=\"card-body\">
\t\t\t\t\t\t\t\t<div class=\"row text-center\">
\t\t\t\t\t\t\t\t\t<div class=\"col-6\">
\t\t\t\t\t\t\t\t\t\t<div class=\"shop-stat-item\">
\t\t\t\t\t\t\t\t\t\t\t<span class=\"stat-number h4 text-primary\">";
// line 2495
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, ($context["stats"] ?? null), "activeProducts", [], "any", false, false, false, 2495), "html", null, true);
yield "</span>
\t\t\t\t\t\t\t\t\t\t\t<span class=\"stat-label d-block\">Produits actifs</span>
\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-6\">
\t\t\t\t\t\t\t\t\t\t<div class=\"shop-stat-item\">
\t\t\t\t\t\t\t\t\t\t\t<span class=\"stat-number h4 text-info\">";
// line 2501
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, ($context["stats"] ?? null), "shopViews", [], "any", false, false, false, 2501), "html", null, true);
yield "</span>
\t\t\t\t\t\t\t\t\t\t\t<span class=\"stat-label d-block\">Vues boutique</span>
\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</div>
\t\t\t\t</div>
\t\t\t</div>
\t\t\t<!-- Tab Content: Feedback avec Karma -->
\t\t\t<div id=\"shop-feedback\" class=\"tab-content shop-tab-content\">
\t\t\t\t<div class=\"row\">
\t\t\t\t\t<div
\t\t\t\t\t\tclass=\"col-lg-8\">
\t\t\t\t\t\t<!-- Statistiques des avis -->
\t\t\t\t\t\t<div class=\"review-stats mb-4\">
\t\t\t\t\t\t\t<div class=\"row\">
\t\t\t\t\t\t\t\t<div class=\"col-md-4\">
\t\t\t\t\t\t\t\t\t<div class=\"stat-card text-center\">
\t\t\t\t\t\t\t\t\t\t<h3 class=\"stat-number\">";
// line 2522
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "getAverageRating", [], "method", false, false, false, 2522), "html", null, true);
yield "</h3>
\t\t\t\t\t\t\t\t\t\t<div class=\"rating-stars\">
\t\t\t\t\t\t\t\t\t\t\t";
// line 2524
$context['_parent'] = $context;
$context['_seq'] = CoreExtension::ensureTraversable(range(1, 5));
foreach ($context['_seq'] as $context["_key"] => $context["i"]) {
// line 2525
yield "\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-star";
if (($context["i"] <= CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "getAverageRating", [], "method", false, false, false, 2525))) {
} else {
yield "-empty";
}
yield "\"></i>
\t\t\t\t\t\t\t\t\t\t\t";
}
$_parent = $context['_parent'];
unset($context['_seq'], $context['_key'], $context['i'], $context['_parent']);
$context = array_intersect_key($context, $_parent) + $_parent;
// line 2527
yield "\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t\t<p class=\"stat-label\">Note moyenne</p>
\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=\"col-md-4\">
\t\t\t\t\t\t\t\t\t<div class=\"stat-card text-center\">
\t\t\t\t\t\t\t\t\t\t<h3 class=\"stat-number\">";
// line 2533
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "getVisibleReviewsCount", [], "method", false, false, false, 2533), "html", null, true);
yield "</h3>
\t\t\t\t\t\t\t\t\t\t<p class=\"stat-label\">Avis clients</p>
\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=\"col-md-4\">
\t\t\t\t\t\t\t\t\t<div class=\"stat-card text-center\">
\t\t\t\t\t\t\t\t\t\t<h3 class=\"stat-number\">";
// line 2539
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(Twig\Extension\CoreExtension::round(((CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "getVisibleReviewsCount", [], "method", false, false, false, 2539) / 100) * 100)), "html", null, true);
yield "%</h3>
\t\t\t\t\t\t\t\t\t\t<p class=\"stat-label\">Satisfaction</p>
\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\t<!-- Liste des avis récents -->
\t\t\t\t\t\t<div class=\"reviews-preview\">
\t\t\t\t\t\t\t<h5 class=\"mb-3\">Avis récents</h5>
\t\t\t\t\t\t\t";
// line 2549
if ((Twig\Extension\CoreExtension::length($this->env->getCharset(), CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "reviews", [], "any", false, false, false, 2549)) > 0)) {
// line 2550
yield "\t\t\t\t\t\t\t\t<div class=\"reviews-list\">
\t\t\t\t\t\t\t\t\t";
// line 2551
$context['_parent'] = $context;
$context['_seq'] = CoreExtension::ensureTraversable(Twig\Extension\CoreExtension::slice($this->env->getCharset(), CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "reviews", [], "any", false, false, false, 2551), 0, 5));
foreach ($context['_seq'] as $context["_key"] => $context["review"]) {
// line 2552
yield "\t\t\t\t\t\t\t\t\t\t";
if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, $context["review"], "isVisible", [], "any", false, false, false, 2552)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
// line 2553
yield "\t\t\t\t\t\t\t\t\t\t\t<div class=\"review-item\">
\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"review-header\">
\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"reviewer-info\">
\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"reviewer-avatar\">
\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-user\"></i>
\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"reviewer-details\">
\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<h6 class=\"reviewer-name\">";
// line 2560
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, CoreExtension::getAttribute($this->env, $this->source, $context["review"], "user", [], "any", false, false, false, 2560), "userIdentifier", [], "any", false, false, false, 2560), "html", null, true);
yield "</h6>
\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"review-rating\">
\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t";
// line 2562
$context['_parent'] = $context;
$context['_seq'] = CoreExtension::ensureTraversable(range(1, 5));
foreach ($context['_seq'] as $context["_key"] => $context["i"]) {
// line 2563
yield "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-star";
if (($context["i"] <= CoreExtension::getAttribute($this->env, $this->source, $context["review"], "rating", [], "any", false, false, false, 2563))) {
} else {
yield "-empty";
}
yield "\"></i>
\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t";
}
$_parent = $context['_parent'];
unset($context['_seq'], $context['_key'], $context['i'], $context['_parent']);
$context = array_intersect_key($context, $_parent) + $_parent;
// line 2565
yield "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"review-meta\">
\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"review-date\">";
// line 2569
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Twig\Extension\CoreExtension']->formatDate(CoreExtension::getAttribute($this->env, $this->source, $context["review"], "createdAt", [], "any", false, false, false, 2569), "d/m/Y"), "html", null, true);
yield "</span>
\t\t\t\t\t\t\t\t\t\t\t\t\t\t";
// line 2570
if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, $context["review"], "isVerified", [], "any", false, false, false, 2570)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
// line 2571
yield "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"verified-badge\">
\t\t\t\t\t\t\t\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\t\t\t\t\t\t\tVérifié
\t\t\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\t\t";
}
// line 2576
yield "\t\t\t\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t\t\t\t";
// line 2579
if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, $context["review"], "comment", [], "any", false, false, false, 2579)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
// line 2580
yield "\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"review-comment\">
\t\t\t\t\t\t\t\t\t\t\t\t\t\t<p>";
// line 2581
yield (((Twig\Extension\CoreExtension::length($this->env->getCharset(), CoreExtension::getAttribute($this->env, $this->source, $context["review"], "comment", [], "any", false, false, false, 2581)) > 150)) ? ($this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape((Twig\Extension\CoreExtension::slice($this->env->getCharset(), CoreExtension::getAttribute($this->env, $this->source, $context["review"], "comment", [], "any", false, false, false, 2581), 0, 150) . "..."), "html", null, true)) : ($this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["review"], "comment", [], "any", false, false, false, 2581), "html", null, true)));
yield "</p>
\t\t\t\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t\t\t\t";
}
// line 2584
yield "\t\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t\t";
}
// line 2586
yield "\t\t\t\t\t\t\t\t\t";
}
$_parent = $context['_parent'];
unset($context['_seq'], $context['_key'], $context['review'], $context['_parent']);
$context = array_intersect_key($context, $_parent) + $_parent;
// line 2587
yield "\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t<div class=\"text-center mt-4\">
\t\t\t\t\t\t\t\t\t<a href=\"";
// line 2590
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("shop_reviews_index", ["slug" => CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "slug", [], "any", false, false, false, 2590)]), "html", null, true);
yield "\" class=\"btn btn-primary\">
\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-star me-1\"></i>Voir tous les avis
\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";
} else {
// line 2595
yield "\t\t\t\t\t\t\t\t<div class=\"text-center py-4\">
\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-star\" style=\"font-size: 3rem; color: #ccc;\"></i>
\t\t\t\t\t\t\t\t\t<h5 class=\"mt-3\">Aucun avis pour le moment</h5>
\t\t\t\t\t\t\t\t\t<p class=\"text-muted\">Cette boutique n'a pas encore reçu d'avis clients.</p>
\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t";
}
// line 2601
yield "\t\t\t\t\t\t</div>
\t\t\t\t\t</div>
\t\t\t\t\t<div
\t\t\t\t\t\tclass=\"col-lg-4\">
\t\t\t\t\t\t<!-- Lien vers la page complète des avis -->
\t\t\t\t\t\t<div class=\"review-actions-card\">
\t\t\t\t\t\t\t<h5>Évaluer cette boutique</h5>
\t\t\t\t\t\t\t<p class=\"text-muted\">Partagez votre expérience avec cette boutique.</p>
\t\t\t\t\t\t\t<a href=\"";
// line 2610
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("shop_reviews_new", ["slug" => CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "slug", [], "any", false, false, false, 2610)]), "html", null, true);
yield "\" class=\"btn btn-primary w-100\">
\t\t\t\t\t\t\t\t<i class=\"lnr lnr-star me-1\"></i>Laisser un avis
\t\t\t\t\t\t\t</a>
\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<!-- Modal de signalement -->
\t<div class=\"modal fade\" id=\"reportModal\" tabindex=\"-1\" aria-labelledby=\"reportModalLabel\" aria-hidden=\"true\">
\t\t<div class=\"modal-dialog\">
\t\t\t<div class=\"modal-content\">
\t\t\t\t<div class=\"modal-header\">
\t\t\t\t\t<h5 class=\"modal-title\" id=\"reportModalLabel\">
\t\t\t\t\t\t<i class=\"lnr lnr-flag me-2\"></i> Signaler cette boutique
\t\t\t\t\t</h5>
\t\t\t\t\t<button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>
\t\t\t\t</div>
\t\t\t\t<div class=\"modal-body\">
\t\t\t\t\t<form id=\"reportForm\">
\t\t\t\t\t\t<div class=\"mb-3\">
\t\t\t\t\t\t\t<label for=\"reportReason\" class=\"form-label\">Motif du signalement *</label>
\t\t\t\t\t\t\t<select class=\"form-select\" id=\"reportReason\" required>
\t\t\t\t\t\t\t\t<option value=\"\">Sélectionnez un motif</option>
\t\t\t\t\t\t\t\t<option value=\"fake_products\">Produits contrefaits</option>
\t\t\t\t\t\t\t\t<option value=\"inappropriate_content\">Contenu inapproprié</option>
\t\t\t\t\t\t\t\t<option value=\"spam\">Spam ou publicité abusive</option>
\t\t\t\t\t\t\t\t<option value=\"fraud\">Fraude ou escroquerie</option>
\t\t\t\t\t\t\t\t<option value=\"harassment\">Harcèlement</option>
\t\t\t\t\t\t\t\t<option value=\"other\">Autre</option>
\t\t\t\t\t\t\t</select>
\t\t\t\t\t\t</div>
\t\t\t\t\t\t<div class=\"mb-3\">
\t\t\t\t\t\t\t<label for=\"reportDescription\" class=\"form-label\">Description détaillée *</label>
\t\t\t\t\t\t\t<textarea class=\"form-control\" id=\"reportDescription\" rows=\"4\" placeholder=\"Décrivez le problème rencontré...\" required></textarea>
\t\t\t\t\t\t</div>
\t\t\t\t\t\t<div class=\"mb-3\">
\t\t\t\t\t\t\t<label for=\"reportEmail\" class=\"form-label\">Votre email (optionnel)</label>
\t\t\t\t\t\t\t<input type=\"email\" class=\"form-control\" id=\"reportEmail\" placeholder=\"votre@email.com\">
\t\t\t\t\t\t\t<div class=\"form-text\">Nous pourrons vous contacter pour plus d'informations</div>
\t\t\t\t\t\t</div>
\t\t\t\t\t</form>
\t\t\t\t</div>
\t\t\t\t<div class=\"modal-footer\">
\t\t\t\t\t<button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Annuler</button>
\t\t\t\t\t<button type=\"button\" class=\"btn btn-danger\" onclick=\"submitReport()\">
\t\t\t\t\t\t<i class=\"lnr lnr-flag me-2\"></i>Envoyer le signalement
\t\t\t\t\t</button>
\t\t\t\t</div>
\t\t\t</div>
\t\t</div>
\t</div>
\t<!-- Section des avis -->
\t<div class=\"container my-5\">
\t\t<div class=\"row\">
\t\t\t<div class=\"col-12\">
\t\t\t\t<div class=\"section-title text-center\">
\t\t\t\t\t<h2>Avis clients</h2>
\t\t\t\t\t<p>Découvrez ce que pensent nos clients de cette boutique</p>
\t\t\t\t</div>
\t\t\t</div>
\t\t</div>
\t\t<div
\t\t\tclass=\"row\">
\t\t\t<!-- Statistiques des avis -->
\t\t\t<div class=\"col-md-4\">
\t\t\t\t<div class=\"review-stats-card\">
\t\t\t\t\t<div class=\"stats-header\">
\t\t\t\t\t\t<div class=\"overall-rating\">
\t\t\t\t\t\t\t<span class=\"rating-number\">";
// line 2683
yield (((Twig\Extension\CoreExtension::length($this->env->getCharset(), CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "reviews", [], "any", false, false, false, 2683)) > 0)) ? ($this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Twig\Extension\CoreExtension']->formatNumber((Twig\Extension\CoreExtension::reduce($this->env, Twig\Extension\CoreExtension::map($this->env, CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "reviews", [], "any", false, false, false, 2683), function ($__r__) use ($context, $macros) { $context["r"] = $__r__; return CoreExtension::getAttribute($this->env, $this->source, ($context["r"] ?? null), "rating", [], "any", false, false, false, 2683); }), function ($__a__, $__b__) use ($context, $macros) { $context["a"] = $__a__; $context["b"] = $__b__; return (($context["a"] ?? null) + ($context["b"] ?? null)); }) / Twig\Extension\CoreExtension::length($this->env->getCharset(), CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "reviews", [], "any", false, false, false, 2683))), 1), "html", null, true)) : ("0.0"));
yield "</span>
\t\t\t\t\t\t\t<div class=\"stars\">
\t\t\t\t\t\t\t\t";
// line 2685
$context["avgRating"] = (((Twig\Extension\CoreExtension::length($this->env->getCharset(), CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "reviews", [], "any", false, false, false, 2685)) > 0)) ? ((Twig\Extension\CoreExtension::reduce($this->env, Twig\Extension\CoreExtension::map($this->env, CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "reviews", [], "any", false, false, false, 2685), function ($__r__) use ($context, $macros) { $context["r"] = $__r__; return CoreExtension::getAttribute($this->env, $this->source, ($context["r"] ?? null), "rating", [], "any", false, false, false, 2685); }), function ($__a__, $__b__) use ($context, $macros) { $context["a"] = $__a__; $context["b"] = $__b__; return (($context["a"] ?? null) + ($context["b"] ?? null)); }) / Twig\Extension\CoreExtension::length($this->env->getCharset(), CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "reviews", [], "any", false, false, false, 2685)))) : (0));
// line 2686
yield "\t\t\t\t\t\t\t\t";
$context['_parent'] = $context;
$context['_seq'] = CoreExtension::ensureTraversable(range(1, 5));
foreach ($context['_seq'] as $context["_key"] => $context["i"]) {
// line 2687
yield "\t\t\t\t\t\t\t\t\t";
if (($context["i"] <= ($context["avgRating"] ?? null))) {
// line 2688
yield "\t\t\t\t\t\t\t\t\t\t★
\t\t\t\t\t\t\t\t\t";
} elseif ((( // line 2689
$context["i"] - ($context["avgRating"] ?? null)) < 1)) {
// line 2690
yield "\t\t\t\t\t\t\t\t\t\t☆
\t\t\t\t\t\t\t\t\t";
} else {
// line 2692
yield "\t\t\t\t\t\t\t\t\t\t☆
\t\t\t\t\t\t\t\t\t";
}
// line 2694
yield "\t\t\t\t\t\t\t\t";
}
$_parent = $context['_parent'];
unset($context['_seq'], $context['_key'], $context['i'], $context['_parent']);
$context = array_intersect_key($context, $_parent) + $_parent;
// line 2695
yield "\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t</div>
\t\t\t\t\t\t<div class=\"rating-summary\">
\t\t\t\t\t\t\t<p class=\"mb-1\">";
// line 2698
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(Twig\Extension\CoreExtension::length($this->env->getCharset(), CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "reviews", [], "any", false, false, false, 2698)), "html", null, true);
yield "
\t\t\t\t\t\t\t\tavis</p>
\t\t\t\t\t\t\t<p class=\"text-muted small\">Basé sur
\t\t\t\t\t\t\t\t";
// line 2701
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(Twig\Extension\CoreExtension::length($this->env->getCharset(), Twig\Extension\CoreExtension::filter($this->env, CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "reviews", [], "any", false, false, false, 2701), function ($__r__) use ($context, $macros) { $context["r"] = $__r__; return CoreExtension::getAttribute($this->env, $this->source, ($context["r"] ?? null), "isVerified", [], "any", false, false, false, 2701); })), "html", null, true);
yield "
\t\t\t\t\t\t\t\tavis vérifiés</p>
\t\t\t\t\t\t</div>
\t\t\t\t\t</div>
\t\t\t\t\t<div class=\"rating-breakdown\">
\t\t\t\t\t\t";
// line 2707
$context['_parent'] = $context;
$context['_seq'] = CoreExtension::ensureTraversable(range(5, 1));
foreach ($context['_seq'] as $context["_key"] => $context["rating"]) {
// line 2708
yield "\t\t\t\t\t\t\t";
$context["count"] = Twig\Extension\CoreExtension::length($this->env->getCharset(), Twig\Extension\CoreExtension::filter($this->env, CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "reviews", [], "any", false, false, false, 2708), function ($__r__) use ($context, $macros) { $context["r"] = $__r__; return (CoreExtension::getAttribute($this->env, $this->source, ($context["r"] ?? null), "rating", [], "any", false, false, false, 2708) == $context["rating"]); }));
// line 2709
yield "\t\t\t\t\t\t\t";
$context["percentage"] = (((Twig\Extension\CoreExtension::length($this->env->getCharset(), CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "reviews", [], "any", false, false, false, 2709)) > 0)) ? (((($context["count"] ?? null) / Twig\Extension\CoreExtension::length($this->env->getCharset(), CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "reviews", [], "any", false, false, false, 2709))) * 100)) : (0));
// line 2710
yield "\t\t\t\t\t\t\t<div class=\"rating-bar\">
\t\t\t\t\t\t\t\t<span class=\"rating-label\">";
// line 2711
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($context["rating"], "html", null, true);
yield "★</span>
\t\t\t\t\t\t\t\t<div class=\"rating-progress\">
\t\t\t\t\t\t\t\t\t<div class=\"rating-fill\" style=\"width: ";
// line 2713
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(($context["percentage"] ?? null), "html", null, true);
yield "%\"></div>
\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t<span class=\"rating-count\">";
// line 2715
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(($context["count"] ?? null), "html", null, true);
yield "</span>
\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t";
}
$_parent = $context['_parent'];
unset($context['_seq'], $context['_key'], $context['rating'], $context['_parent']);
$context = array_intersect_key($context, $_parent) + $_parent;
// line 2718
yield "\t\t\t\t\t</div>
\t\t\t\t</div>
\t\t\t</div>
\t\t\t<!-- Aperçu des avis -->
\t\t\t<div class=\"col-md-8\">
\t\t\t\t<div class=\"reviews-preview\">
\t\t\t\t\t";
// line 2725
if ((Twig\Extension\CoreExtension::length($this->env->getCharset(), CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "reviews", [], "any", false, false, false, 2725)) > 0)) {
// line 2726
yield "\t\t\t\t\t\t";
$context['_parent'] = $context;
$context['_seq'] = CoreExtension::ensureTraversable(Twig\Extension\CoreExtension::slice($this->env->getCharset(), CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "reviews", [], "any", false, false, false, 2726), 0, 3));
foreach ($context['_seq'] as $context["_key"] => $context["review"]) {
// line 2727
yield "\t\t\t\t\t\t\t<div class=\"review-card-preview\">
\t\t\t\t\t\t\t\t<div class=\"review-header\">
\t\t\t\t\t\t\t\t\t<div class=\"review-user\">
\t\t\t\t\t\t\t\t\t\t<div class=\"user-avatar\">
\t\t\t\t\t\t\t\t\t\t\t";
// line 2731
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(Twig\Extension\CoreExtension::default(Twig\Extension\CoreExtension::upper($this->env->getCharset(), Twig\Extension\CoreExtension::first($this->env->getCharset(), CoreExtension::getAttribute($this->env, $this->source, CoreExtension::getAttribute($this->env, $this->source, $context["review"], "user", [], "any", false, false, false, 2731), "firstName", [], "any", false, false, false, 2731))), Twig\Extension\CoreExtension::upper($this->env->getCharset(), Twig\Extension\CoreExtension::first($this->env->getCharset(), CoreExtension::getAttribute($this->env, $this->source, CoreExtension::getAttribute($this->env, $this->source, $context["review"], "user", [], "any", false, false, false, 2731), "email", [], "any", false, false, false, 2731)))), "html", null, true);
yield "
\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t\t<div class=\"user-info\">
\t\t\t\t\t\t\t\t\t\t\t<h6>";
// line 2734
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(((CoreExtension::getAttribute($this->env, $this->source, CoreExtension::getAttribute($this->env, $this->source, $context["review"], "user", [], "any", false, true, false, 2734), "firstName", [], "any", true, true, false, 2734)) ? (Twig\Extension\CoreExtension::default(CoreExtension::getAttribute($this->env, $this->source, CoreExtension::getAttribute($this->env, $this->source, $context["review"], "user", [], "any", false, false, false, 2734), "firstName", [], "any", false, false, false, 2734), "Utilisateur")) : ("Utilisateur")), "html", null, true);
yield "</h6>
\t\t\t\t\t\t\t\t\t\t\t<small>";
// line 2735
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["review"], "getTimeAgo", [], "method", false, false, false, 2735), "html", null, true);
yield "</small>
\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=\"review-rating\">
\t\t\t\t\t\t\t\t\t\t<div class=\"stars\">";
// line 2739
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["review"], "getRatingStars", [], "method", false, false, false, 2739), "html", null, true);
yield "</div>
\t\t\t\t\t\t\t\t\t\t";
// line 2740
if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, $context["review"], "isVerified", [], "any", false, false, false, 2740)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
// line 2741
yield "\t\t\t\t\t\t\t\t\t\t\t<span class=\"verified-badge\">✓</span>
\t\t\t\t\t\t\t\t\t\t";
}
// line 2743
yield "\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=\"review-content\">
\t\t\t\t\t\t\t\t\t";
// line 2746
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(Twig\Extension\CoreExtension::slice($this->env->getCharset(), CoreExtension::getAttribute($this->env, $this->source, $context["review"], "comment", [], "any", false, false, false, 2746), 0, 150), "html", null, true);
yield "
\t\t\t\t\t\t\t\t\t";
// line 2747
if ((Twig\Extension\CoreExtension::length($this->env->getCharset(), CoreExtension::getAttribute($this->env, $this->source, $context["review"], "comment", [], "any", false, false, false, 2747)) > 150)) {
yield "...
\t\t\t\t\t\t\t\t\t";
}
// line 2749
yield "\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t";
}
$_parent = $context['_parent'];
unset($context['_seq'], $context['_key'], $context['review'], $context['_parent']);
$context = array_intersect_key($context, $_parent) + $_parent;
// line 2752
yield "
\t\t\t\t\t\t<div class=\"text-center mt-3\">
\t\t\t\t\t\t\t<a href=\"";
// line 2754
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("shop_reviews_index", ["slug" => CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "slug", [], "any", false, false, false, 2754)]), "html", null, true);
yield "\" class=\"btn btn-outline-primary\">
\t\t\t\t\t\t\t\tVoir tous les avis (";
// line 2755
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(Twig\Extension\CoreExtension::length($this->env->getCharset(), CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "reviews", [], "any", false, false, false, 2755)), "html", null, true);
yield ")
\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t</div>
\t\t\t\t\t";
} else {
// line 2759
yield "\t\t\t\t\t\t<div class=\"empty-reviews\">
\t\t\t\t\t\t\t<i class=\"lnr lnr-star\"></i>
\t\t\t\t\t\t\t<h4>Aucun avis pour le moment</h4>
\t\t\t\t\t\t\t<p>Soyez le premier à laisser un avis sur cette boutique !</p>
\t\t\t\t\t\t\t";
// line 2763
if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, ($context["app"] ?? null), "user", [], "any", false, false, false, 2763)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
// line 2764
yield "\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("shop_reviews_new", ["slug" => CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "slug", [], "any", false, false, false, 2764)]), "html", null, true);
yield "\" class=\"btn btn-primary\">
\t\t\t\t\t\t\t\t\t<i class=\"lnr lnraccount_recently_viewed-star\"></i>
\t\t\t\t\t\t\t\t\tLaisser un avis
\t\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t\t";
}
// line 2769
yield "\t\t\t\t\t\t</div>
\t\t\t\t\t";
}
// line 2771
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 [];
}
// line 2778
/**
* @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 2779
yield "\t<script>
\t\tdocument.addEventListener('DOMContentLoaded', function () {
\t\t\t// Initialisation du carrousel
\t\t\tconsole.log('DOM Content Loaded - Initializing carousel...');
\t\t\tsetTimeout(function() {
initCarousel();
\t\t\t}, 100);
// Gestion des onglets eBay-style avec Bootstrap
const tabLinks = document.querySelectorAll('.shop-tab-link');
const tabContents = document.querySelectorAll('.shop-tab-content');
tabLinks.forEach(link => {
link.addEventListener('click', function (e) {
e.preventDefault();
// Retirer la classe active de tous les liens et contenus
tabLinks.forEach(l => {
l.classList.remove('active');
l.setAttribute('aria-selected', 'false');
});
tabContents.forEach(c => c.classList.remove('active'));
// Ajouter la classe active au lien cliqué
this.classList.add('active');
this.setAttribute('aria-selected', 'true');
// Afficher le contenu correspondant
const targetTab = this.dataset.tab;
const targetContent = document.getElementById (`shop-\${targetTab}`);
if (targetContent) {
targetContent.classList.add('active');
}
});
});
// Gestion du système de follow
const followButton = document.getElementById('follow-button');
if (followButton) {
followButton.addEventListener('click', function () {
const shopId = this.dataset.shopId;
const isFollowing = this.dataset.following === 'true';
// Désactiver le bouton pendant la requête
this.disabled = true;
const originalText = this.innerHTML;
this.innerHTML = '<i class=\"lnr lnr-spinner\"></i> Loading...';
// Envoyer la requête
fetch(\"";
// line 2829
yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("ui_api_shop_toggle_follow", ["id" => "__SHOP_ID__"]);
yield "\".replace('__SHOP_ID__', shopId), {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-Requested-With': 'XMLHttpRequest'
}
}).then(response => response.json()).then(data => {
if (data.success) { // Mettre à jour l'interface
this.dataset.following = data.isFollowing;
if (data.isFollowing) {
this.classList.add('following');
this.innerHTML = '<i class=\"lnr lnr-checkmark\"></i> Suivi';
} else {
this.classList.remove('following');
this.innerHTML = '<i class=\"lnr lnr-plus\"></i> Suivre';
}
// Mettre à jour le compteur de followers
if (followersCount && data.followersCount !== undefined) {
followersCount.textContent = data.followersCount.toLocaleString();
}
// Afficher un message de confirmation
showNotification(data.message, 'success');
} else {
showNotification(data.message, 'error');
}
}).catch(error => {
console.error('Erreur:', error);
showNotification('Une erreur est survenue', 'error');
}). finally(() => {
this.disabled = false;
});
});
}
// Fonction pour afficher les notifications
function showNotification(message, type = 'info') { // Créer l'élément de notification
const notification = document.createElement('div');
notification.className = `alert alert-\${
type === 'success' ? 'success' : type === 'error' ? 'danger' : 'info'
} alert-dismissible fade show position-fixed`;
notification.style.cssText = 'top: 20px; right: 20px; z-index: 9999; min-width: 300px;';
notification.innerHTML = `
\${message}
<button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"alert\"></button>
`;
document.body.appendChild(notification);
// Supprimer automatiquement après 5 secondes
setTimeout(() => {
if (notification.parentNode) {
notification.remove();
}
}, 5000);
}
// Fonctions pour les actions de boutique
window.shareShop = function () { // Vérifier si l'API Web Share est disponible et si on est sur mobile
if (navigator.share && /Android|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) {
navigator.share({title: '";
// line 2891
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "name", [], "any", false, false, false, 2891), "html", null, true);
yield "- Boutique sur MaketOu', text: 'Découvrez cette boutique et ses produits sur MaketOu', url: window.location.href}).then(() => {
console.log('Partage réussi');
showNotification('Lien partagé avec succès !', 'success');
}).catch((error) => {
console.log('Erreur lors du partage:', error);
// Fallback vers la copie
copyToClipboard();
});
} else { // Sur desktop ou si Web Share n'est pas disponible, copier directement
copyToClipboard();
}
};
// Fonction pour copier le lien dans le presse-papiers
function copyToClipboard() {
const shopUrl = window.location.href;
const shopName = '";
// line 2907
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "name", [], "any", false, false, false, 2907), "html", null, true);
yield "';
const shareText = `Découvrez la boutique \"\${shopName}\" sur MaketOu : \${shopUrl}`;
// Utiliser directement le fallback pour éviter les conflits
fallbackCopyToClipboard(shareText);
}
// Fallback pour copier le texte
function fallbackCopyToClipboard(text) {
const textArea = document.createElement('textarea');
textArea.value = text;
textArea.style.position = 'fixed';
textArea.style.left = '-999999px';
textArea.style.top = '-999999px';
document.body.appendChild(textArea);
textArea.focus();
textArea.select();
try {
document.execCommand('copy');
showNotification('Lien copié dans le presse-papiers !', 'success');
} catch (err) {
console.error('Impossible de copier:', err);
showNotification('Impossible de copier le lien', 'error');
}
document.body.removeChild(textArea);
}
window.contactShop = function () { // Ouvrir un modal de signalement
openReportModal();
};
window.saveShop = function () { // Sauvegarder la boutique dans les favoris
showNotification('Boutique sauvegardée dans vos favoris', 'success');
};
// Fonction pour ouvrir le modal de signalement
window.openReportModal = function () {
const modal = new bootstrap.Modal(document.getElementById('reportModal'));
modal.show();
};
// Fonction pour soumettre le signalement
window.submitReport = function () {
const reason = document.getElementById('reportReason').value;
const description = document.getElementById('reportDescription').value;
const email = document.getElementById('reportEmail').value;
if (! reason || ! description) {
showNotification('Veuillez remplir tous les champs obligatoires', 'error');
return;
}
// Simuler l'envoi du signalement
const reportData = {
shopId: ";
// line 2963
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "id", [], "any", false, false, false, 2963), "html", null, true);
yield ",
reason: reason,
description: description,
email: email,
reportedAt: new Date().toISOString()
};
console.log('Signalement envoyé:', reportData);
// Fermer le modal
const modal = bootstrap.Modal.getInstance(document.getElementById('reportModal'));
modal.hide();
// Réinitialiser le formulaire
document.getElementById('reportForm').reset();
// Afficher la confirmation
showNotification('Signalement envoyé avec succès. Nous examinerons votre demande.', 'success');
};
// Gestion du carrousel eBay-style - Variables globales
let currentSlide = 0;
let carouselInterval = null;
let isPaused = false;
let slides = [];
let indicators = [];
let carouselInitialized = false;
let autoSlideDelay = 5000; // Délai par défaut : 5 secondes
let userInteractionTimeout = null; // Timeout pour reprendre après interaction utilisateur
let isUserInteracting = false; // Flag pour savoir si l'utilisateur interagit
let pageVisibilityHidden = false; // Flag pour savoir si la page est cachée
// Définir les fonctions globales immédiatement pour qu'elles soient disponibles pour onclick
window.nextSlide = function() {
if (slides.length === 0) {
console.warn('nextSlide: No slides available, initializing...');
initCarousel();
return;
}
// Marquer comme interaction utilisateur
handleUserInteraction();
currentSlide = (currentSlide + 1) % slides.length;
console.log('nextSlide: Moving to slide', currentSlide);
updateCarousel();
};
window.previousSlide = function() {
if (slides.length === 0) {
console.warn('previousSlide: No slides available, initializing...');
initCarousel();
return;
}
// Marquer comme interaction utilisateur
handleUserInteraction();
currentSlide = (currentSlide - 1 + slides.length) % slides.length;
console.log('previousSlide: Moving to slide', currentSlide);
updateCarousel();
};
window.goToSlide = function(index) {
if (slides.length === 0) {
console.warn('goToSlide: No slides available, initializing...');
initCarousel();
// Attendre que l'initialisation soit terminée
setTimeout(() => {
if (index >= 0 && index < slides.length) {
currentSlide = index;
updateCarousel();
// Réinitialiser le carrousel automatique
handleUserInteraction();
}
}, 150);
return;
}
if (index < 0 || index >= slides.length) {
console.warn('goToSlide: Invalid index', index, '. Valid range: 0 to', slides.length - 1);
return;
}
// Marquer comme interaction utilisateur
handleUserInteraction();
currentSlide = index;
console.log('goToSlide: Moving to slide', currentSlide, 'of', slides.length);
updateCarousel();
};
window.toggleCarousel = function() {
if (slides.length === 0) {
console.warn('toggleCarousel: No slides available, initializing...');
initCarousel();
return;
}
if (isPaused) {
resumeCarousel();
} else {
pauseCarousel();
}
};
function initCarousel() {
if (carouselInitialized) {
console.log('Carousel already initialized');
return;
}
// Réinitialiser les variables
currentSlide = 0;
isPaused = false;
// Récupérer les slides et indicateurs à nouveau
const carouselContainer = document.querySelector('.shop-carousel-ebay');
if (!carouselContainer) {
console.log('Carousel container not found');
return;
}
const allSlides = carouselContainer.querySelectorAll('.carousel-slide');
const allIndicators = carouselContainer.querySelectorAll('.carousel-indicator-ebay');
if (allSlides.length === 0) {
// Masquer les contrôles si aucune image
const controls = carouselContainer.querySelector('.carousel-controls-ebay');
const indicatorsContainer = carouselContainer.querySelector('.carousel-indicators-ebay');
if (controls) controls.style.display = 'none';
if (indicatorsContainer) indicatorsContainer.style.display = 'none';
return;
}
// Si une seule image, masquer les contrôles
if (allSlides.length <= 1) {
const controls = carouselContainer.querySelector('.carousel-controls-ebay');
const indicatorsContainer = carouselContainer.querySelector('.carousel-indicators-ebay');
if (controls) controls.style.display = 'none';
if (indicatorsContainer) indicatorsContainer.style.display = 'none';
// S'assurer que la slide unique est active
allSlides[0].classList.add('active');
return;
}
// Afficher les contrôles si plusieurs images
const controls = carouselContainer.querySelector('.carousel-controls-ebay');
const indicatorsContainer = carouselContainer.querySelector('.carousel-indicators-ebay');
if (controls) controls.style.display = 'flex';
if (indicatorsContainer) indicatorsContainer.style.display = 'flex';
// Mettre à jour les références globales - convertir NodeList en Array
slides = Array.from(allSlides);
indicators = Array.from(allIndicators);
console.log('initCarousel: Found', slides.length, 'slides and', indicators.length, 'indicators');
// S'assurer que la première slide est active immédiatement
currentSlide = 0;
slides.forEach((slide, index) => {
if (index === 0) {
slide.classList.add('active');
slide.style.opacity = '1';
slide.style.zIndex = '2';
} else {
slide.classList.remove('active');
slide.style.opacity = '0';
slide.style.zIndex = '1';
}
});
if (indicators.length > 0) {
indicators.forEach((indicator, index) => {
if (index === 0) {
indicator.classList.add('active');
} else {
indicator.classList.remove('active');
}
});
}
// Démarrer le carrousel automatique immédiatement
console.log('Initializing carousel - starting automatic rotation...');
isPaused = false; // S'assurer que le carrousel n'est pas en pause
startCarousel();
// Gérer les événements de survol (une seule fois)
carouselContainer.addEventListener('mouseenter', function() {
if (!isPaused) {
pauseCarousel();
}
});
carouselContainer.addEventListener('mouseleave', function() {
// Ne reprendre que si l'utilisateur n'a pas mis en pause manuellement
if (!isPaused && !isUserInteracting && !pageVisibilityHidden) {
startCarousel();
}
});
// Gérer la visibilité de la page (pause quand la page est cachée)
document.addEventListener('visibilitychange', function() {
if (document.hidden) {
pageVisibilityHidden = true;
if (!isPaused) {
pauseCarousel();
}
} else {
pageVisibilityHidden = false;
// Reprendre seulement si l'utilisateur n'a pas mis en pause manuellement
if (!isPaused && !isUserInteracting) {
startCarousel();
}
}
});
carouselInitialized = true;
console.log('Carousel initialized with', slides.length, 'slides');
}
function startCarousel() {
// Nettoyer l'intervalle existant
clearInterval(carouselInterval);
// Ne pas démarrer si la page est cachée ou si l'utilisateur interagit
if (pageVisibilityHidden || isUserInteracting) {
return;
}
if (slides.length <= 1) {
console.log('Not enough slides to start carousel');
return;
}
// S'assurer que isPaused est false pour démarrer
isPaused = false;
const pauseBtn = document.getElementById('pauseBtn');
const pauseIcon = document.getElementById('pauseIcon');
if (pauseBtn) {
pauseBtn.classList.remove('playing');
if (pauseIcon) {
pauseIcon.textContent = '⏸';
pauseIcon.className = 'pause-icon-content';
pauseIcon.style.display = 'inline-block';
pauseIcon.style.color = 'white';
pauseIcon.style.fontSize = '22px';
pauseIcon.style.visibility = 'visible';
pauseIcon.style.opacity = '1';
}
}
console.log('Starting carousel automatically...');
carouselInterval = setInterval(() => {
// Vérifier les conditions avant de changer de slide
if (!isPaused && !isUserInteracting && !pageVisibilityHidden && slides.length > 0) {
// Utiliser la fonction interne nextSlide pour éviter de déclencher handleUserInteraction
currentSlide = (currentSlide + 1) % slides.length;
console.log('Auto slide:', currentSlide);
updateCarousel();
}
}, autoSlideDelay);
}
// Fonction pour gérer les interactions utilisateur
function handleUserInteraction() {
isUserInteracting = true;
// Nettoyer le timeout précédent s'il existe
if (userInteractionTimeout) {
clearTimeout(userInteractionTimeout);
}
// Reprendre le carrousel automatique après 3 secondes d'inactivité
userInteractionTimeout = setTimeout(() => {
isUserInteracting = false;
// Reprendre seulement si l'utilisateur n'a pas mis en pause manuellement
if (!isPaused && !pageVisibilityHidden) {
startCarousel();
}
}, 3000);
}
function pauseCarousel() {
isPaused = true;
clearInterval(carouselInterval);
// Nettoyer le timeout d'interaction utilisateur
if (userInteractionTimeout) {
clearTimeout(userInteractionTimeout);
userInteractionTimeout = null;
}
const pauseBtn = document.getElementById('pauseBtn');
const pauseIcon = document.getElementById('pauseIcon');
if (pauseBtn) {
pauseBtn.classList.add('playing');
if (pauseIcon) {
pauseIcon.textContent = '▶';
pauseIcon.className = 'pause-icon-content';
pauseIcon.style.display = 'inline-block';
pauseIcon.style.color = 'white';
pauseIcon.style.fontSize = '22px';
pauseIcon.style.visibility = 'visible';
pauseIcon.style.opacity = '1';
}
}
}
function resumeCarousel() {
isPaused = false;
isUserInteracting = false; // Réinitialiser le flag d'interaction
// Nettoyer le timeout d'interaction utilisateur
if (userInteractionTimeout) {
clearTimeout(userInteractionTimeout);
userInteractionTimeout = null;
}
const pauseBtn = document.getElementById('pauseBtn');
const pauseIcon = document.getElementById('pauseIcon');
if (pauseBtn) {
pauseBtn.classList.remove('playing');
if (pauseIcon) {
pauseIcon.textContent = '⏸';
pauseIcon.className = 'pause-icon-content';
pauseIcon.style.display = 'inline-block';
pauseIcon.style.color = 'white';
pauseIcon.style.fontSize = '22px';
pauseIcon.style.visibility = 'visible';
pauseIcon.style.opacity = '1';
}
}
// Ne reprendre que si la page est visible
if (!pageVisibilityHidden) {
startCarousel();
}
}
function toggleCarousel() {
const pauseBtn = document.getElementById('pauseBtn');
const pauseIcon = document.getElementById('pauseIcon');
if (isPaused) {
resumeCarousel();
} else {
pauseCarousel();
}
}
function nextSlide() {
if (slides.length === 0) {
console.warn('No slides available');
return;
}
currentSlide = (currentSlide + 1) % slides.length;
console.log('Next slide:', currentSlide);
updateCarousel();
}
function previousSlide() {
if (slides.length === 0) {
console.warn('No slides available');
return;
}
currentSlide = (currentSlide - 1 + slides.length) % slides.length;
console.log('Previous slide:', currentSlide);
updateCarousel();
}
// Fonction interne goToSlide (utilisée par window.goToSlide)
function goToSlide(index) {
if (slides.length === 0) {
console.warn('goToSlide: No slides available');
return;
}
if (index < 0 || index >= slides.length) {
console.warn('goToSlide: Invalid index', index, '. Valid range: 0 to', slides.length - 1);
return;
}
// Marquer comme interaction utilisateur
handleUserInteraction();
currentSlide = index;
console.log('goToSlide: Moving to slide', currentSlide, 'of', slides.length);
updateCarousel();
}
function updateCarousel() {
if (slides.length === 0) {
console.warn('No slides to update');
return;
}
console.log('updateCarousel: Updating to slide', currentSlide, 'of', slides.length, 'slides');
console.log('updateCarousel: Total indicators:', indicators.length);
// Masquer toutes les slides et réinitialiser leurs styles
slides.forEach((slide, index) => {
slide.classList.remove('active');
if (index === currentSlide) {
slide.classList.add('active');
slide.style.opacity = '1';
slide.style.zIndex = '2';
} else {
slide.style.opacity = '0';
slide.style.zIndex = '1';
}
});
// Mettre à jour tous les indicateurs - FORCER la mise à jour en deux passes distinctes
if (indicators.length > 0) {
console.log('updateCarousel: Updating', indicators.length, 'indicators, currentSlide:', currentSlide);
// Première passe : retirer active de TOUS les indicateurs
indicators.forEach((indicator) => {
indicator.classList.remove('active');
});
// Deuxième passe : ajouter active à l'indicateur correspondant à currentSlide
if (currentSlide >= 0 && currentSlide < indicators.length && indicators[currentSlide]) {
const activeIndicator = indicators[currentSlide];
activeIndicator.classList.add('active');
console.log('updateCarousel: Activated indicator', currentSlide);
// Vérification et forcer si nécessaire
if (!activeIndicator.classList.contains('active')) {
console.warn('updateCarousel: Class not added, forcing with setAttribute');
activeIndicator.setAttribute('class', activeIndicator.className + ' active');
}
} else {
console.error('updateCarousel: Invalid currentSlide', currentSlide, 'or indicator not found. Total indicators:', indicators.length);
}
} else {
console.warn('updateCarousel: No indicators available');
}
// Afficher la slide active
if (slides[currentSlide]) {
slides[currentSlide].classList.add('active');
slides[currentSlide].style.opacity = '1';
slides[currentSlide].style.zIndex = '2';
console.log('updateCarousel: Showing slide', currentSlide);
} else {
console.error('updateCarousel: Slide', currentSlide, 'not found. Total slides:', slides.length);
}
}
// Les fonctions globales sont définies au début du script
// Gestion du tri des produits via API Symfony
console.log('=== INITIALIZING PRODUCT SORTING ===');
console.log('Shop ID:', ";
// line 3410
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "id", [], "any", false, false, false, 3410), "html", null, true);
yield ");
// Fonction de tri via AJAX - RENDUE GLOBALE
window.sortProducts = function (sortValue) {
console.log('=== SORT PRODUCTS CALLED ===');
console.log('Sort value:', sortValue);
const productsContainer = document.getElementById('products-container');
console.log('Products container:', productsContainer);
if (! productsContainer) {
console.error('Products container not found!');
return;
}
if (! sortValue) {
console.log('Resetting to original order');
// Recharger la page pour revenir à l'ordre original
window.location.reload();
return;
}
console.log('Showing loading spinner...');
// Afficher un indicateur de chargement
productsContainer.innerHTML = '<div class=\"col-12 text-center py-5\"><div class=\"spinner-border text-primary\" role=\"status\"><span class=\"visually-hidden\">Chargement...</span></div><p class=\"mt-3\">Tri des produits en cours...</p></div>';
// Récupérer l'ID de la boutique
const shopId = ";
// line 3437
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "id", [], "any", false, false, false, 3437), "html", null, true);
yield ";
console.log('Shop ID for request:', shopId);
const url = \"";
// line 3440
yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("ui_api_shop_products_sort", ["id" => "__SHOP_ID__"]);
yield "\".replace('__SHOP_ID__', shopId);
console.log('Request URL:', url);
const requestData = {
sortBy: sortValue
};
console.log('Request data:', requestData);
// Envoyer la requête AJAX
console.log('Sending AJAX request...');
fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-Requested-With': 'XMLHttpRequest'
},
body: JSON.stringify(requestData)
}).then(response => {
console.log('Response received:', response);
console.log('Response status:', response.status);
return response.json();
}).then(data => {
console.log('Sort response data:', data);
if (data.success) {
console.log('Sort successful, updating content...');
// Mettre à jour le contenu avec le HTML retourné
productsContainer.innerHTML = data.html;
// Mettre à jour le compteur de produits
const productCount = document.querySelector('.product-count');
if (productCount) {
productCount.textContent = data.count;
}
console.log('Products sorted successfully!');
} else {
console.error('Sort failed:', data.message);
showNotification('Erreur lors du tri: ' + data.message, 'error');
// Recharger la page en cas d'erreur
window.location.reload();
}
}).catch(error => {
console.error('Sort request failed:', error);
showNotification('Erreur de connexion lors du tri', 'error');
// Recharger la page en cas d'erreur
window.location.reload();
});
};
// Attendre que le DOM soit chargé
console.log('Setting up event listeners...');
setTimeout(() => {
const sortSelect = document.getElementById('product-sort');
console.log('Sort select element:', sortSelect);
if (sortSelect) {
console.log('Adding change event listener...');
sortSelect.addEventListener('change', function () {
console.log('=== SELECT CHANGE EVENT TRIGGERED ===');
console.log('Selected value:', this.value);
console.log('Calling sortProducts...');
window.sortProducts(this.value);
});
console.log('Event listener added successfully');
} else {
console.error('Sort select element not found!');
console.log('Available elements with ID containing \"sort\":', document.querySelectorAll('[id*=\"sort\"]'));
console.log('Available elements with class containing \"form-select\":', document.querySelectorAll('.form-select'));
}
}, 100);
// Gestion du bouton \"Suivre\"
const followBtn = document.querySelector('.btn-shop');
if (followBtn) {
followBtn.addEventListener('click', function () {
if (this.innerHTML.includes('Suivre')) {
this.innerHTML = '<i class=\"lnr lnr-heart me-1\"></i> Suivi';
this.classList.remove('btn-shop');
this.classList.add('btn-success');
} else {
this.innerHTML = '<i class=\"lnr lnr-heart me-1\"></i> Suivre';
this.classList.remove('btn-success');
this.classList.add('btn-shop');
}
});
}
});
\t</script>
";
$__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
$__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
yield from [];
}
/**
* @codeCoverageIgnore
*/
public function getTemplateName(): string
{
return "home/shop.html.twig";
}
/**
* @codeCoverageIgnore
*/
public function isTraitable(): bool
{
return false;
}
/**
* @codeCoverageIgnore
*/
public function getDebugInfo(): array
{
return array ( 4101 => 3440, 4095 => 3437, 4065 => 3410, 3615 => 2963, 3556 => 2907, 3537 => 2891, 3472 => 2829, 3420 => 2779, 3407 => 2778, 3391 => 2771, 3387 => 2769, 3378 => 2764, 3376 => 2763, 3370 => 2759, 3363 => 2755, 3359 => 2754, 3355 => 2752, 3347 => 2749, 3342 => 2747, 3338 => 2746, 3333 => 2743, 3329 => 2741, 3327 => 2740, 3323 => 2739, 3316 => 2735, 3312 => 2734, 3306 => 2731, 3300 => 2727, 3295 => 2726, 3293 => 2725, 3284 => 2718, 3275 => 2715, 3270 => 2713, 3265 => 2711, 3262 => 2710, 3259 => 2709, 3256 => 2708, 3252 => 2707, 3243 => 2701, 3237 => 2698, 3232 => 2695, 3226 => 2694, 3222 => 2692, 3218 => 2690, 3216 => 2689, 3213 => 2688, 3210 => 2687, 3205 => 2686, 3203 => 2685, 3198 => 2683, 3122 => 2610, 3111 => 2601, 3103 => 2595, 3095 => 2590, 3090 => 2587, 3084 => 2586, 3080 => 2584, 3074 => 2581, 3071 => 2580, 3069 => 2579, 3064 => 2576, 3057 => 2571, 3055 => 2570, 3051 => 2569, 3045 => 2565, 3033 => 2563, 3029 => 2562, 3024 => 2560, 3015 => 2553, 3012 => 2552, 3008 => 2551, 3005 => 2550, 3003 => 2549, 2990 => 2539, 2981 => 2533, 2973 => 2527, 2961 => 2525, 2957 => 2524, 2952 => 2522, 2928 => 2501, 2919 => 2495, 2903 => 2481, 2898 => 2479, 2893 => 2476, 2891 => 2475, 2888 => 2474, 2883 => 2472, 2878 => 2469, 2876 => 2468, 2873 => 2467, 2869 => 2465, 2863 => 2463, 2861 => 2462, 2854 => 2458, 2830 => 2436, 2822 => 2430, 2818 => 2428, 2805 => 2421, 2802 => 2420, 2798 => 2418, 2786 => 2416, 2782 => 2415, 2779 => 2414, 2777 => 2413, 2770 => 2409, 2764 => 2406, 2760 => 2405, 2749 => 2401, 2745 => 2400, 2733 => 2398, 2729 => 2397, 2726 => 2396, 2724 => 2395, 2705 => 2379, 2699 => 2376, 2685 => 2365, 2656 => 2338, 2648 => 2334, 2646 => 2333, 2631 => 2320, 2623 => 2316, 2618 => 2313, 2614 => 2311, 2610 => 2309, 2608 => 2308, 2596 => 2306, 2594 => 2305, 2580 => 2294, 2576 => 2292, 2566 => 2289, 2562 => 2287, 2559 => 2286, 2553 => 2283, 2549 => 2281, 2547 => 2280, 2540 => 2275, 2533 => 2271, 2530 => 2270, 2528 => 2269, 2525 => 2268, 2518 => 2264, 2515 => 2263, 2513 => 2262, 2510 => 2261, 2503 => 2257, 2500 => 2256, 2498 => 2255, 2490 => 2249, 2484 => 2247, 2481 => 2246, 2475 => 2242, 2473 => 2241, 2468 => 2239, 2458 => 2231, 2452 => 2227, 2449 => 2226, 2443 => 2222, 2435 => 2220, 2433 => 2219, 2423 => 2211, 2419 => 2209, 2394 => 2207, 2377 => 2206, 2361 => 2192, 2358 => 2191, 2356 => 2190, 2351 => 2187, 2344 => 2182, 2341 => 2181, 2318 => 2177, 2300 => 2176, 2297 => 2175, 2295 => 2174, 2286 => 2167, 2273 => 2166, 107 => 9, 94 => 8, 79 => 4, 66 => 3, 43 => 1,);
}
public function getSourceContext(): Source
{
return new Source("{% extends 'base_home.html.twig' %}
{% block title %}
\t{{ shop.name }}
\t| MaketOu
{% endblock %}
{% block stylesheets %}
\t<style>
\t\t/* Style pour la description formatée de la boutique */
\t\t.shop-description-content {
\t\t\tline-height: 1.6;
\t\t\tcolor: #333;
\t\t}
\t\t
\t\t.shop-description-content h1,
\t\t.shop-description-content h2,
\t\t.shop-description-content h3 {
\t\t\tcolor: #ffa200;
\t\t\tmargin-top: 1.5rem;
\t\t\tmargin-bottom: 1rem;
\t\t}
\t\t
\t\t.shop-description-content h1 { font-size: 1.75rem; }
\t\t.shop-description-content h2 { font-size: 1.5rem; }
\t\t.shop-description-content h3 { font-size: 1.25rem; }
\t\t
\t\t.shop-description-content ul,
\t\t.shop-description-content ol {
\t\t\tmargin-left: 1.5rem;
\t\t\tmargin-bottom: 1rem;
\t\t}
\t\t
\t\t.shop-description-content li {
\t\t\tmargin-bottom: 0.5rem;
\t\t}
\t\t
\t\t.shop-description-content p {
\t\t\tmargin-bottom: 1rem;
\t\t}
\t\t
\t\t.shop-description-content a {
\t\t\tcolor: #ffa200;
\t\t\ttext-decoration: underline;
\t\t}
\t\t
\t\t.shop-description-content a:hover {
\t\t\tcolor: #e8910a;
\t\t}
\t\t
\t\t.shop-description-content img {
\t\t\tmax-width: 100%;
\t\t\theight: auto;
\t\t\tborder-radius: 8px;
\t\t\tmargin: 1rem 0;
\t\t}
\t\t
\t\t.shop-description-content blockquote {
\t\t\tborder-left: 4px solid #ffa200;
\t\t\tpadding-left: 1rem;
\t\t\tmargin: 1rem 0;
\t\t\tfont-style: italic;
\t\t\tcolor: #666;
\t\t}
\t\t
\t\t.shop-description-content table {
\t\t\twidth: 100%;
\t\t\tborder-collapse: collapse;
\t\t\tmargin: 1rem 0;
\t\t}
\t\t
\t\t.shop-description-content table th,
\t\t.shop-description-content table td {
\t\t\tborder: 1px solid #ddd;
\t\t\tpadding: 0.5rem;
\t\t}
\t\t
\t\t.shop-description-content table th {
\t\t\tbackground-color: #f8f9fa;
\t\t\tfont-weight: bold;
\t\t}
\t\t
\t\t/* Design eBay-like intégré avec Karma - Pleine largeur */
\t\t.shop-header {
\t\t\tbackground: #f7f7f7;
\t\t\tborder-bottom: 1px solid #e1e1e1;
\t\t\tpadding: 0;
\t\t\tmargin-bottom: 0;
\t\t\twidth: 100%;
\t\t\tposition: relative;
\t\t}
\t\t.shop-banner {
\t\t\twidth: 100%;
\t\t\theight: 350px;
\t\t\tbackground-size: cover;
\t\t\tbackground-position: center;
\t\t\tbackground-repeat: no-repeat;
\t\t\tposition: relative;
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tjustify-content: center;
\t\t}
\t\t/* Carrousel eBay-style amélioré */
\t\t.shop-carousel-ebay {
\t\t\twidth: 100%;
\t\t\theight: 450px;
\t\t\tposition: relative;
\t\t\toverflow: hidden;
\t\t\tbackground: #f8f9fa;
\t\t\tborder-radius: 8px;
\t\t\tbox-sizing: border-box;
\t\t\tmargin-bottom: 0;
\t\t\ttransition: height 0.3s ease;
\t\t}
\t\t.carousel-container {
\t\t\tposition: relative;
\t\t\twidth: 100%;
\t\t\theight: 100%;
\t\t}
\t\t.carousel-slide {
\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\tbackground-repeat: no-repeat;
\t\t\topacity: 0;
\t\t\ttransition: opacity 0.6s ease-in-out;
\t\t}
\t\t
\t\t/* Amélioration responsive pour les images */
\t\t@media (max-width: 768px) {
\t\t\t.carousel-slide {
\t\t\t\tbackground-size: cover;
\t\t\t\tbackground-position: center center;
\t\t\t}
\t\t}
\t\t.carousel-slide.active {
\t\t\topacity: 1;
\t\t}
\t\t.carousel-controls {
\t\t\tposition: absolute;
\t\t\tbottom: 20px;
\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.carousel-btn {
\t\t\twidth: 40px;
\t\t\theight: 40px;
\t\t\tborder: none;
\t\t\tborder-radius: 50%;
\t\t\tbackground: rgba(255, 255, 255, 0.9);
\t\t\tcolor: #333;
\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 ease;
\t\t\tbox-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
\t\t}
\t\t.carousel-btn:hover {
\t\t\tbackground: white;
\t\t\ttransform: scale(1.1);
\t\t}
\t\t.carousel-btn:disabled {
\t\t\topacity: 0.5;
\t\t\tcursor: not-allowed;
\t\t\ttransform: none;
\t\t}
\t\t.carousel-pause {
\t\t\tbackground: #dc3545;
\t\t\tcolor: white;
\t\t}
\t\t.carousel-pause:hover {
\t\t\tbackground: #c82333;
\t\t}
\t\t.carousel-indicators {
\t\t\tposition: absolute;
\t\t\tbottom: 70px;
\t\t\tleft: 50%;
\t\t\ttransform: translateX(-50%);
\t\t\tdisplay: flex;
\t\t\tgap: 8px;
\t\t\tz-index: 10;
\t\t}
\t\t.carousel-indicator {
\t\t\twidth: 12px;
\t\t\theight: 12px;
\t\t\tborder-radius: 50%;
\t\t\tbackground: rgba(255, 255, 255, 0.5);
\t\t\tborder: none;
\t\t\tcursor: pointer;
\t\t\ttransition: all 0.3s ease;
\t\t}
\t\t.carousel-indicator.active {
\t\t\tbackground: white;
\t\t\ttransform: scale(1.2);
\t\t}
\t\t/* Contrôles eBay-style améliorés - Positionnés en bas à droite */
\t\t.carousel-controls-ebay {
\t\t\tposition: absolute;
\t\t\tbottom: 20px;
\t\t\tright: 20px;
\t\t\tdisplay: flex;
\t\t\tgap: 12px;
\t\t\talign-items: center;
\t\t\tz-index: 10;
\t\t\tpointer-events: none;
\t\t}
\t\t.carousel-btn-ebay {
\t\t\twidth: 52px;
\t\t\theight: 52px;
\t\t\tborder: none;
\t\t\tborder-radius: 50% !important;
\t\t\tbackground: linear-gradient(135deg, rgba(255, 255, 255, 0.95) 0%, rgba(255, 255, 255, 0.9) 100%);
\t\t\tcolor: #333;
\t\t\tfont-size: 22px;
\t\t\tcursor: pointer;
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tjustify-content: center;
\t\t\ttransition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
\t\t\tpointer-events: all;
\t\t\tbox-shadow: 0 4px 15px rgba(0, 0, 0, 0.25), 0 2px 8px rgba(0, 0, 0, 0.15);
\t\t\tbackdrop-filter: blur(10px);
\t\t\tposition: relative;
\t\t\toverflow: visible;
\t\t}
\t\t.carousel-btn-ebay::before {
\t\t\tcontent: '';
\t\t\tposition: absolute;
\t\t\ttop: 50%;
\t\t\tleft: 50%;
\t\t\twidth: 0;
\t\t\theight: 0;
\t\t\tborder-radius: 50%;
\t\t\tbackground: rgba(255, 255, 255, 0.3);
\t\t\ttransform: translate(-50%, -50%);
\t\t\ttransition: width 0.6s ease, height 0.6s ease;
\t\t}
\t\t.carousel-btn-ebay:hover::before {
\t\t\twidth: 100%;
\t\t\theight: 100%;
\t\t}
\t\t.carousel-btn-ebay:hover {
\t\t\ttransform: translateY(-3px) scale(1.1);
\t\t\tbox-shadow: 0 8px 25px rgba(0, 0, 0, 0.35), 0 4px 12px rgba(0, 0, 0, 0.2);
\t\t}
\t\t
\t\t/* Désactiver les effets hover sur mobile pour éviter les problèmes tactiles */
\t\t@media (hover: none) and (pointer: coarse) {
\t\t\t.carousel-btn-ebay:hover {
\t\t\t\ttransform: none;
\t\t\t}
\t\t\t
\t\t\t.carousel-btn-ebay:active {
\t\t\t\ttransform: scale(0.95);
\t\t\t}
\t\t\t
\t\t\t.carousel-indicator-ebay:hover {
\t\t\t\ttransform: none;
\t\t\t}
\t\t}
\t\t.carousel-btn-ebay:active {
\t\t\ttransform: translateY(-1px) scale(1.05);
\t\t\tbox-shadow: 0 4px 15px rgba(0, 0, 0, 0.3);
\t\t}
\t\t
\t\t/* Désactiver les effets hover sur mobile pour éviter les problèmes tactiles */
\t\t@media (hover: none) and (pointer: coarse) {
\t\t\t.carousel-btn-ebay:hover {
\t\t\t\ttransform: none;
\t\t\t}
\t\t\t
\t\t\t.carousel-btn-ebay:active {
\t\t\t\ttransform: scale(0.95);
\t\t\t}
\t\t\t
\t\t\t.carousel-indicator-ebay:hover {
\t\t\t\ttransform: none;
\t\t\t}
\t\t}
\t\t.carousel-btn-ebay:disabled {
\t\t\topacity: 0.4;
\t\t\tcursor: not-allowed;
\t\t\ttransform: none;
\t\t}
\t\t.carousel-btn-ebay i {
\t\t\tposition: relative;
\t\t\tz-index: 10;
\t\t\ttransition: transform 0.3s ease;
\t\t\tdisplay: inline-block;
\t\t\tline-height: 1;
\t\t}
\t\t.carousel-btn-ebay:hover i {
\t\t\ttransform: scale(1.15);
\t\t}
\t\t
\t\t.carousel-btn-ebay.pause-btn i,
\t\t.carousel-btn-ebay.pause-btn #pauseIcon {
\t\t\tz-index: 10 !important;
\t\t\tcolor: white !important;
\t\t\tdisplay: inline-block !important;
\t\t\tvisibility: visible !important;
\t\t\topacity: 1 !important;
\t\t}
\t\t.carousel-btn-ebay.prev-btn,
\t\t.carousel-btn-ebay.next-btn {
\t\t\tbackground: linear-gradient(135deg, rgba(255, 255, 255, 0.98) 0%, rgba(255, 255, 255, 0.92) 100%);
\t\t\tcolor: #333;
\t\t}
\t\t.carousel-btn-ebay.prev-btn:hover,
\t\t.carousel-btn-ebay.next-btn:hover {
\t\t\tbackground: linear-gradient(135deg, #ffa200 0%, #ff6b00 100%);
\t\t\tcolor: white;
\t\t}
\t\t.carousel-btn-ebay.pause-btn {
\t\t\tbackground: linear-gradient(135deg, rgba(220, 53, 69, 0.95) 0%, rgba(200, 35, 51, 0.95) 100%);
\t\t\tcolor: white !important;
\t\t}
\t\t.carousel-btn-ebay.pause-btn:hover {
\t\t\tbackground: linear-gradient(135deg, #dc3545 0%, #c82333 100%);
\t\t\tcolor: white !important;
\t\t}
\t\t.carousel-btn-ebay.pause-btn.playing {
\t\t\tbackground: linear-gradient(135deg, rgba(40, 167, 69, 0.95) 0%, rgba(33, 136, 56, 0.95) 100%);
\t\t\tcolor: white !important;
\t\t}
\t\t.carousel-btn-ebay.pause-btn.playing:hover {
\t\t\tbackground: linear-gradient(135deg, #28a745 0%, #218838 100%);
\t\t\tcolor: white !important;
\t\t}
\t\t/* Style spécifique pour l'icône du bouton pause - Utilisation directe d'Unicode */
\t\t.carousel-btn-ebay.pause-btn {
\t\t\ttext-align: center;
\t\t\tposition: relative;
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tjustify-content: center;
\t\t}
\t\t
\t\t.carousel-btn-ebay.pause-btn #pauseIcon,
\t\t.carousel-btn-ebay.pause-btn .pause-icon-content {
\t\t\tdisplay: block !important;
\t\t\tcolor: white !important;
\t\t\tfont-size: 24px !important;
\t\t\tline-height: 1 !important;
\t\t\twidth: auto !important;
\t\t\theight: auto !important;
\t\t\tposition: static !important;
\t\t\ttext-align: center !important;
\t\t\tz-index: 10 !important;
\t\t\tvisibility: visible !important;
\t\t\topacity: 1 !important;
\t\t\tpointer-events: none !important;
\t\t\tfont-family: Arial, \"Segoe UI\", sans-serif !important;
\t\t\tfont-weight: normal !important;
\t\t\tmargin: 0 !important;
\t\t\tpadding: 0 !important;
\t\t}
\t\t/* Indicateurs eBay-style améliorés - Positionnés en bas à gauche */
\t\t.carousel-indicators-ebay {
\t\t\tposition: absolute;
\t\t\tbottom: 20px;
\t\t\tleft: 50%;
\t\t\ttransform: translateX(-50%);
\t\t\tdisplay: flex;
\t\t\tgap: 10px;
\t\t\tz-index: 10;
\t\t\tbackground: rgba(0, 0, 0, 0.4);
\t\t\tpadding: 8px 14px;
\t\t\tborder-radius: 25px;
\t\t\tbackdrop-filter: blur(8px);
\t\t\tbox-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);
\t\t}
\t\t.carousel-indicator-ebay {
\t\t\twidth: 10px;
\t\t\theight: 10px;
\t\t\tborder-radius: 50%;
\t\t\tbackground: rgba(255, 255, 255, 0.5);
\t\t\tborder: 2px solid rgba(255, 255, 255, 0.8);
\t\t\tcursor: pointer;
\t\t\ttransition: all 0.3s ease;
\t\t}
\t\t.carousel-indicator-ebay.active {
\t\t\tbackground: white !important;
\t\t\tborder-color: #ffa200 !important;
\t\t\ttransform: scale(1.3) !important;
\t\t\tbox-shadow: 0 0 8px rgba(255, 162, 0, 0.6) !important;
\t\t}
\t\t.carousel-indicator-ebay:hover {
\t\t\tbackground: rgba(255, 255, 255, 0.8);
\t\t\ttransform: scale(1.1);
\t\t}
\t\t/* Styles eBay-style pour les détails de boutique */
\t\t.shop-avatar-container-ebay {
\t\t\tposition: relative;
\t\t\tmargin-right: 20px;
\t\t}
\t\t.shop-avatar-ebay {
\t\t\twidth: 100px;
\t\t\theight: 100px;
\t\t\tborder-radius: 12px;
\t\t\tobject-fit: cover;
\t\t\tborder: 3px solid white;
\t\t\tbox-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
\t\t\ttransition: transform 0.3s ease;
\t\t}
\t\t.shop-avatar-ebay:hover {
\t\t\ttransform: scale(1.05);
\t\t}
\t\t.shop-avatar-placeholder {
\t\t\tbackground: linear-gradient(135deg, #f0f0f0 0%, #e0e0e0 100%);
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tjustify-content: center;
\t\t\tfont-size: 2.5rem;
\t\t\tcolor: #999;
\t\t}
\t\t.verified-badge-ebay {
\t\t\tposition: absolute;
\t\t\tbottom: -5px;
\t\t\tright: -5px;
\t\t\tbackground: #28a745;
\t\t\tcolor: white;
\t\t\twidth: 24px;
\t\t\theight: 24px;
\t\t\tborder-radius: 50%;
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tjustify-content: center;
\t\t\tfont-size: 12px;
\t\t\tborder: 2px solid white;
\t\t}
\t\t.shop-info-ebay {
\t\t\tpadding: 0;
\t\t}
\t\t.shop-name-section {
\t\t\tmargin-bottom: 12px;
\t\t}
\t\t.shop-name-ebay {
\t\t\tfont-size: 2.2rem;
\t\t\tfont-weight: 800;
\t\t\tbackground: linear-gradient(135deg, #333 0%, #555 100%);
\t\t\t-webkit-background-clip: text;
\t\t\t-webkit-text-fill-color: transparent;
\t\t\tbackground-clip: text;
\t\t\tmargin: 0;
\t\t\tline-height: 1.2;
\t\t\tword-wrap: break-word;
\t\t\toverflow-wrap: break-word;
\t\t\thyphens: auto;
\t\t\tletter-spacing: -0.5px;
\t\t}
\t\t.verified-text {
\t\t\tbackground: linear-gradient(135deg, #28a745 0%, #20c997 100%);
\t\t\t-webkit-background-clip: text;
\t\t\t-webkit-text-fill-color: transparent;
\t\t\tbackground-clip: text;
\t\t\tfont-size: 0.9rem;
\t\t\tfont-weight: 600;
\t\t\tdisplay: inline-flex;
\t\t\talign-items: center;
\t\t\tgap: 4px;
\t\t\tword-wrap: break-word;
\t\t\toverflow-wrap: break-word;
\t\t\tline-height: 1.4;
\t\t\twhite-space: normal;
\t\t\tflex-wrap: wrap;
\t\t\tmax-width: 100%;
\t\t}
\t\t.verified-text i {
\t\t\t-webkit-text-fill-color: #28a745;
\t\t\tcolor: #28a745;
\t\t\tflex-shrink: 0;
\t\t}
\t\t.shop-category-ebay {
\t\t\tbackground: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%);
\t\t\tcolor: #666;
\t\t\tpadding: 6px 14px;
\t\t\tborder-radius: 20px;
\t\t\tfont-size: 0.875rem;
\t\t\tfont-weight: 500;
\t\t\tdisplay: inline-block;
\t\t\tborder: 1px solid #dee2e6;
\t\t\tword-wrap: break-word;
\t\t\toverflow-wrap: break-word;
\t\t\tmax-width: 100%;
\t\t\tline-height: 1.4;
\t\t\twhite-space: normal;
\t\t}
\t\t.shop-stats-ebay {
\t\t\tmargin-top: 16px;
\t\t}
\t\t.stat-row {
\t\t\tdisplay: flex;
\t\t\tgap: 32px;
\t\t\tmargin-bottom: 12px;
\t\t\tflex-wrap: wrap;
\t\t}
\t\t.stat-item-ebay {
\t\t\tdisplay: flex;
\t\t\tflex-direction: column;
\t\t\talign-items: flex-start;
\t\t\tmin-width: 100px;
\t\t}
\t\t.stat-percentage {
\t\t\tfont-size: 1.4rem;
\t\t\tfont-weight: 800;
\t\t\tbackground: linear-gradient(135deg, #28a745 0%, #20c997 100%);
\t\t\t-webkit-background-clip: text;
\t\t\t-webkit-text-fill-color: transparent;
\t\t\tbackground-clip: text;
\t\t\tline-height: 1.1;
\t\t\tmargin-bottom: 4px;
\t\t\tword-wrap: break-word;
\t\t\toverflow-wrap: break-word;
\t\t}
\t\t.stat-number-ebay {
\t\t\tfont-size: 1.4rem;
\t\t\tfont-weight: 800;
\t\t\tbackground: linear-gradient(135deg, #333 0%, #555 100%);
\t\t\t-webkit-background-clip: text;
\t\t\t-webkit-text-fill-color: transparent;
\t\t\tbackground-clip: text;
\t\t\tline-height: 1.1;
\t\t\tmargin-bottom: 4px;
\t\t\tword-wrap: break-word;
\t\t\toverflow-wrap: break-word;
\t\t}
\t\t.stat-label-ebay {
\t\t\tfont-size: 0.75rem;
\t\t\tcolor: #6c757d;
\t\t\ttext-transform: uppercase;
\t\t\tletter-spacing: 0.8px;
\t\t\tfont-weight: 600;
\t\t\tmargin-top: 0;
\t\t\tline-height: 1.3;
\t\t\tword-wrap: break-word;
\t\t\toverflow-wrap: break-word;
\t\t\ttext-align: left;
\t\t\thyphens: auto;
\t\t\tmax-width: 100%;
\t\t}
\t\t.shop-additional-info {
\t\t\tdisplay: flex;
\t\t\tflex-wrap: wrap;
\t\t\tgap: 12px 20px;
\t\t\tfont-size: 0.875rem;
\t\t\tcolor: #495057;
\t\t\tmargin-top: 12px;
\t\t\tpadding-top: 16px;
\t\t\tborder-top: 1px solid #e9ecef;
\t\t\tline-height: 1.5;
\t\t\tword-wrap: break-word;
\t\t\toverflow-wrap: break-word;
\t\t}
\t\t.member-since {
\t\t\tfont-weight: 500;
\t\t\tdisplay: inline-flex;
\t\t\talign-items: center;
\t\t\twhite-space: normal;
\t\t\tpadding: 6px 12px;
\t\t\tbackground: #f8f9fa;
\t\t\tborder-radius: 8px;
\t\t\ttransition: all 0.3s ease;
\t\t\tborder: 1px solid transparent;
\t\t\tword-wrap: break-word;
\t\t\toverflow-wrap: break-word;
\t\t\tline-height: 1.4;
\t\t\tmax-width: 100%;
\t\t\tflex-wrap: wrap;
\t\t\ttext-align: center;
\t\t}
\t\t.member-since:hover {
\t\t\tbackground: #e9ecef;
\t\t\tborder-color: #dee2e6;
\t\t\ttransform: translateY(-1px);
\t\t}
\t\t.member-since i {
\t\t\tcolor: #ffa200;
\t\t\tmargin-right: 6px;
\t\t\tfont-size: 0.95rem;
\t\t\ttransition: transform 0.3s ease;
\t\t\tflex-shrink: 0;
\t\t}
\t\t.member-since:hover i {
\t\t\ttransform: scale(1.2);
\t\t}
\t\t.location {
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t}
\t\t.shop-actions-ebay {
\t\t\tdisplay: flex;
\t\t\tflex-direction: column;
\t\t\tgap: 10px;
\t\t\tmin-width: 160px;
\t\t}
\t\t.btn-ebay {
\t\t\tpadding: 10px 18px;
\t\t\tfont-size: 0.9rem;
\t\t\tfont-weight: 500;
\t\t\tborder-radius: 6px;
\t\t\ttext-align: center;
\t\t\ttransition: all 0.3s ease;
\t\t\tborder-width: 1px;
\t\t\twhite-space: normal;
\t\t\tword-wrap: break-word;
\t\t\toverflow-wrap: break-word;
\t\t\tline-height: 1.4;
\t\t}
\t\t.btn-ebay:hover {
\t\t\ttransform: translateY(-2px);
\t\t\tbox-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
\t\t}
\t\t.btn-ebay i {
\t\t\tvertical-align: middle;
\t\t}
\t\t.btn-ebay.following {
\t\t\tbackground: #28a745;
\t\t\tborder-color: #28a745;
\t\t\tcolor: white;
\t\t}
\t\t/* Styles pour les avis */
\t\t.review-stats {
\t\t\tbackground: white;
\t\t\tborder-radius: 12px;
\t\t\tpadding: 20px;
\t\t\tbox-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
\t\t\tmargin-bottom: 20px;
\t\t}
\t\t.stat-card {
\t\t\tpadding: 15px;
\t\t}
\t\t.stat-number {
\t\t\tfont-size: 2.5rem;
\t\t\tfont-weight: 700;
\t\t\tcolor: #333;
\t\t\tmargin: 0;
\t\t}
\t\t.stat-label {
\t\t\tcolor: #666;
\t\t\tfont-size: 0.9rem;
\t\t\tmargin: 5px 0 0;
\t\t}
\t\t.rating-stars {
\t\t\tcolor: #ffc107;
\t\t\tfont-size: 1.2rem;
\t\t\tmargin: 10px 0;
\t\t}
\t\t.reviews-preview {
\t\t\tbackground: white;
\t\t\tborder-radius: 12px;
\t\t\tpadding: 20px;
\t\t\tbox-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
\t\t}
\t\t.review-item {
\t\t\tborder-bottom: 1px solid #f0f0f0;
\t\t\tpadding: 15px 0;
\t\t}
\t\t.review-item:last-child {
\t\t\tborder-bottom: none;
\t\t}
\t\t.review-header {
\t\t\tdisplay: flex;
\t\t\tjustify-content: space-between;
\t\t\talign-items: flex-start;
\t\t\tmargin-bottom: 10px;
\t\t}
\t\t.reviewer-info {
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tgap: 10px;
\t\t}
\t\t.reviewer-avatar {
\t\t\twidth: 40px;
\t\t\theight: 40px;
\t\t\tborder-radius: 50%;
\t\t\tbackground: #f8f9fa;
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tjustify-content: center;
\t\t\tcolor: #666;
\t\t}
\t\t.reviewer-name {
\t\t\tmargin: 0;
\t\t\tfont-size: 1rem;
\t\t\tfont-weight: 600;
\t\t}
\t\t.review-rating {
\t\t\tcolor: #ffc107;
\t\t\tfont-size: 0.9rem;
\t\t}
\t\t.review-meta {
\t\t\ttext-align: right;
\t\t}
\t\t.review-date {
\t\t\tcolor: #666;
\t\t\tfont-size: 0.8rem;
\t\t}
\t\t.verified-badge {
\t\t\tdisplay: inline-block;
\t\t\tbackground: #28a745;
\t\t\tcolor: white;
\t\t\tpadding: 2px 8px;
\t\t\tborder-radius: 12px;
\t\t\tfont-size: 0.7rem;
\t\t\tmargin-left: 10px;
\t\t}
\t\t.review-comment {
\t\t\tmargin: 10px 0 0;
\t\t\tline-height: 1.5;
\t\t\tcolor: #333;
\t\t}
\t\t.review-actions-card {
\t\t\tbackground: white;
\t\t\tborder-radius: 12px;
\t\t\tpadding: 20px;
\t\t\tbox-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
\t\t\ttext-align: center;
\t\t}
\t\t.shop-banner-overlay {
\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.3);
\t\t\tz-index: 1;
\t\t}
\t\t.shop-header-content {
\t\t\tbackground: white;
\t\t\tborder: 1px solid #e1e1e1;
\t\t\tborder-radius: 4px;
\t\t\tpadding: 20px;
\t\t\tmargin: 0 20px 20px;
\t\t\tbox-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
\t\t\tposition: relative;
\t\t\tz-index: 2;
\t\t}
\t\t.shop-avatar {
\t\t\twidth: 80px;
\t\t\theight: 80px;
\t\t\tborder-radius: 4px;
\t\t\tborder: 1px solid #e1e1e1;
\t\t\tobject-fit: cover;
\t\t\tposition: relative;
\t\t\tz-index: 3;
\t\t}
\t\t.shop-title {
\t\t\tfont-size: 1.5rem;
\t\t\tfont-weight: 600;
\t\t\tcolor: #333;
\t\t\tmargin-bottom: 8px;
\t\t}
\t\t.shop-subtitle {
\t\t\tcolor: #666;
\t\t\tfont-size: 0.9rem;
\t\t\tmargin-bottom: 15px;
\t\t}
\t\t.shop-stats-row {
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tgap: 20px;
\t\t\tflex-wrap: wrap;
\t\t\tmargin-bottom: 15px;
\t\t}
\t\t.shop-stat-item {
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tgap: 5px;
\t\t\tfont-size: 0.9rem;
\t\t}
\t\t.positive-feedback {
\t\t\tcolor: #007bff;
\t\t\tfont-weight: 600;
\t\t}
\t\t.items-sold {
\t\t\tcolor: #666;
\t\t}
\t\t.followers-count {
\t\t\tcolor: #666;
\t\t}
\t\t.shop-badges {
\t\t\tdisplay: flex;
\t\t\tgap: 10px;
\t\t\tmargin-bottom: 15px;
\t\t}
\t\t.shop-badge {
\t\t\tbackground: #f0f0f0;
\t\t\tcolor: #333;
\t\t\tpadding: 4px 8px;
\t\t\tborder-radius: 3px;
\t\t\tfont-size: 0.8rem;
\t\t\tfont-weight: 500;
\t\t}
\t\t.shop-badge.verified {
\t\t\tbackground: #d4edda;
\t\t\tcolor: #155724;
\t\t}
\t\t.shop-badge.premium {
\t\t\tbackground: #fff3cd;
\t\t\tcolor: #856404;
\t\t}
\t\t.shop-actions-row {
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tgap: 15px;
\t\t\tflex-wrap: wrap;
\t\t}
\t\t.shop-action-btn {
\t\t\tbackground: #007bff;
\t\t\tcolor: white;
\t\t\tborder: none;
\t\t\tpadding: 8px 16px;
\t\t\tborder-radius: 3px;
\t\t\tfont-size: 0.9rem;
\t\t\tfont-weight: 500;
\t\t\tcursor: pointer;
\t\t\ttransition: background-color 0.2s;
\t\t\ttext-decoration: none;
\t\t\tdisplay: inline-flex;
\t\t\talign-items: center;
\t\t\tgap: 5px;
\t\t}
\t\t.shop-action-btn:hover {
\t\t\tbackground: #0056b3;
\t\t\tcolor: white;
\t\t}
\t\t.shop-action-btn.following {
\t\t\tbackground: #28a745;
\t\t}
\t\t.shop-action-btn.following:hover {
\t\t\tbackground: #1e7e34;
\t\t}
\t\t.shop-action-btn.secondary {
\t\t\tbackground: #6c757d;
\t\t}
\t\t.shop-action-btn.secondary:hover {
\t\t\tbackground: #545b62;
\t\t}
\t\t/* Onglets eBay-style avec classes Karma */
\t\t.shop-tabs {
\t\t\tbackground: white;
\t\t\tborder: 1px solid #e1e1e1;
\t\t\tborder-top: none;
\t\t\tborder-radius: 0 0 4px 4px;
\t\t\tmargin-top: 0;
\t\t}
\t\t.shop-tabs-nav {
\t\t\tdisplay: flex;
\t\t\tborder-bottom: 1px solid #e1e1e1;
\t\t\tmargin: 0;
\t\t\tpadding: 0;
\t\t\tlist-style: none;
\t\t\tbackground: #f8f9fa;
\t\t}
\t\t.shop-tab {
\t\t\tmargin: 0;
\t\t}
\t\t.shop-tab-link {
\t\t\tdisplay: block;
\t\t\tpadding: 12px 20px;
\t\t\tcolor: #000000;
\t\t\ttext-decoration: none;
\t\t\tborder-bottom: 2px solid transparent;
\t\t\ttransition: all 0.2s;
\t\t\tfont-weight: 500;
\t\t\tfont-size: 1rem;
\t\t}
\t\t.shop-tab-link:hover,
\t\t.shop-tab-link.active {
\t\t\tcolor: #095ad3;
\t\t\tborder-bottom-color: #095ad3;
\t\t\tbackground: #ffa200;
\t\t}
\t\t.shop-tab-content {
\t\t\tpadding: 30px;
\t\t\tmin-height: 400px;
\t\t}
\t\t.shop-tab-content:not(.active) {
\t\t\tdisplay: none;
\t\t}
\t\t.shop-tab-content.active {
\t\t\tdisplay: block;
\t\t}
\t\t/* Cards d'information avec style Karma */
\t\t.shop-info-card {
\t\t\tbackground: #f8f9fa;
\t\t\tborder: 1px solid #e1e1e1;
\t\t\tborder-radius: 4px;
\t\t\tpadding: 20px;
\t\t\tmargin-bottom: 20px;
\t\t}
\t\t.shop-info-card h6 {
\t\t\tcolor: #333;
\t\t\tfont-weight: 600;
\t\t\tmargin-bottom: 15px;
\t\t\tfont-size: 1.1rem;
\t\t}
\t\t.shop-info-card p {
\t\t\tcolor: #666;
\t\t\tfont-size: 0.9rem;
\t\t\tmargin: 0;
\t\t\tline-height: 1.5;
\t\t}
\t\t.shop-contact-info {
\t\t\tdisplay: flex;
\t\t\tflex-direction: column;
\t\t\tgap: 10px;
\t\t}
\t\t.shop-contact-item {
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tgap: 10px;
\t\t\tfont-size: 0.9rem;
\t\t\tcolor: #666;
\t\t\tpadding: 5px 0;
\t\t}
\t\t.shop-contact-item i {
\t\t\twidth: 16px;
\t\t\tcolor: #007bff;
\t\t\ttext-align: center;
\t\t}
\t\t.shop-social-links {
\t\t\tdisplay: flex;
\t\t\tgap: 10px;
\t\t\tmargin-top: 15px;
\t\t\tflex-wrap: wrap;
\t\t}
\t\t.shop-social-link {
\t\t\tdisplay: inline-flex;
\t\t\talign-items: center;
\t\t\tjustify-content: center;
\t\t\twidth: 36px;
\t\t\theight: 36px;
\t\t\tbackground: #f0f0f0;
\t\t\tcolor: #666;
\t\t\tborder-radius: 4px;
\t\t\ttext-decoration: none;
\t\t\ttransition: all 0.2s;
\t\t\tfont-size: 1.1rem;
\t\t}
\t\t.shop-social-link:hover {
\t\t\tbackground: #007bff;
\t\t\tcolor: white;
\t\t\ttransform: translateY(-2px);
\t\t}
\t\t/* Produits avec style Karma */
\t\t.product-card {
\t\t\tbackground: white;
\t\t\tborder: 1px solid #e1e1e1;
\t\t\tborder-radius: 4px;
\t\t\toverflow: hidden;
\t\t\ttransition: all 0.3s ease;
\t\t\tmargin-bottom: 20px;
\t\t}
\t\t.product-card:hover {
\t\t\ttransform: translateY(-2px);
\t\t\tbox-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
\t\t}
\t\t/* Animation de tri des produits */
\t\t.product-item {
\t\t\ttransition: all 0.3s ease;
\t\t}
\t\t.product-item.sorting {
\t\t\topacity: 0;
\t\t\ttransform: translateY(20px);
\t\t}
\t\t.product-item.sorted {
\t\t\topacity: 1;
\t\t\ttransform: translateY(0);
\t\t}
\t\t.product-image {
\t\t\theight: 200px;
\t\t\tbackground-size: cover;
\t\t\tbackground-position: center;
\t\t\tposition: relative;
\t\t\toverflow: hidden;
\t\t}
\t\t.product-info {
\t\t\tpadding: 15px;
\t\t}
\t\t.product-title {
\t\t\tfont-size: 1rem;
\t\t\tfont-weight: 600;
\t\t\tmargin-bottom: 8px;
\t\t\tcolor: #333;
\t\t\tline-height: 1.3;
\t\t}
\t\t.product-title a {
\t\t\tcolor: #333;
\t\t\ttext-decoration: none;
\t\t}
\t\t.product-title a:hover {
\t\t\tcolor: #007bff;
\t\t}
\t\t.product-price {
\t\t\tfont-size: 1.2rem;
\t\t\tfont-weight: bold;
\t\t\tcolor: #ff6b35;
\t\t\tmargin-bottom: 10px;
\t\t}
\t\t.product-meta {
\t\t\tdisplay: flex;
\t\t\tjustify-content: space-between;
\t\t\talign-items: center;
\t\t\tfont-size: 0.85rem;
\t\t\tcolor: #666;
\t\t}
\t\t.rating {
\t\t\tcolor: #ffc107;
\t\t}
\t\t/* Responsive avec classes Karma */
\t\t/* Responsive amélioré pour la page shop */
\t\t/* Tablettes et écrans moyens */
\t\t@media(max-width: 1200px) {
\t\t\t.shop-carousel-ebay {
\t\t\t\theight: 400px;
\t\t\t}
\t\t\t
\t\t\t.carousel-controls-ebay {
\t\t\t\tbottom: 18px;
\t\t\t\tright: 18px;
\t\t\t\tgap: 11px;
\t\t\t}
\t\t\t
\t\t\t.carousel-btn-ebay {
\t\t\t\twidth: 48px;
\t\t\t\theight: 48px;
\t\t\t\tfont-size: 21px;
\t\t\t}
\t\t\t
\t\t\t.carousel-indicators-ebay {
\t\t\t\tbottom: 18px;
\t\t\t\tpadding: 7px 13px;
\t\t\t}
\t\t\t
\t\t\t.carousel-indicator-ebay {
\t\t\t\twidth: 9px;
\t\t\t\theight: 9px;
\t\t\t}
\t\t}
\t\t
\t\t@media(max-width: 991.98px) {
\t\t\t.shop-carousel-ebay {
\t\t\t\tmargin: 0 10px;
\t\t\t\theight: 380px;
\t\t\t}
\t\t\t
\t\t\t.carousel-controls-ebay {
\t\t\t\tbottom: 16px;
\t\t\t\tright: 16px;
\t\t\t\tgap: 10px;
\t\t\t}
\t\t\t
\t\t\t.carousel-btn-ebay {
\t\t\t\twidth: 46px;
\t\t\t\theight: 46px;
\t\t\t\tfont-size: 20px;
\t\t\t}
\t\t\t
\t\t\t.carousel-indicators-ebay {
\t\t\t\tbottom: 16px;
\t\t\t\tleft: 50%;
\t\t\t\ttransform: translateX(-50%);
\t\t\t\tpadding: 6px 12px;
\t\t\t}
\t\t\t
\t\t\t.carousel-indicator-ebay {
\t\t\t\twidth: 9px;
\t\t\t\theight: 9px;
\t\t\t}
\t\t\t
\t\t\t.shop-header-content {
\t\t\t\tpadding: 20px;
\t\t\t\tmargin: 0 10px 20px;
\t\t\t}
\t\t\t
\t\t\t.shop-header-content .row {
\t\t\t\tflex-wrap: wrap;
\t\t\t}
\t\t\t
\t\t\t.shop-info-ebay {
\t\t\t\tmargin-top: 0;
\t\t\t\ttext-align: center;
\t\t\t}
\t\t\t.shop-name-ebay {
\t\t\t\tfont-size: 1.75rem;
\t\t\t\tline-height: 1.3;
\t\t\t}
\t\t\t.verified-text {
\t\t\t\tfont-size: 0.85rem;
\t\t\t}
\t\t\t.shop-category-ebay {
\t\t\t\tfont-size: 0.8rem;
\t\t\t\tpadding: 5px 12px;
\t\t\t}
\t\t\t.stat-row {
\t\t\t\tjustify-content: center;
\t\t\t\tgap: 20px;
\t\t\t}
\t\t\t.stat-item-ebay {
\t\t\t\talign-items: center;
\t\t\t\tmin-width: 90px;
\t\t\t}
\t\t\t.stat-percentage,
\t\t\t.stat-number-ebay {
\t\t\t\tfont-size: 1.15rem;
\t\t\t}
\t\t\t.stat-label-ebay {
\t\t\t\tfont-size: 0.75rem;
\t\t\t\ttext-align: center;
\t\t\t}
\t\t\t.shop-additional-info {
\t\t\t\tjustify-content: center;
\t\t\t\tgap: 12px 18px;
\t\t\t\tfont-size: 0.8rem;
\t\t\t}
\t\t\t.member-since {
\t\t\t\tfont-size: 0.8rem;
\t\t\t}
\t\t\t.shop-actions-ebay {
\t\t\t\tmin-width: auto;
\t\t\t}
\t\t}
\t\t
\t\t@media(max-width: 768px) {
\t\t\t.shop-banner,
\t\t\t.shop-carousel-ebay {
\t\t\t\theight: 300px;
\t\t\t\tmargin: 0;
\t\t\t\tborder-radius: 0;
\t\t\t}
\t\t\t
\t\t\t.shop-carousel-ebay .carousel-container {
\t\t\t\tborder-radius: 0;
\t\t\t}
\t\t\t.carousel-controls-ebay {
\t\t\t\tbottom: 12px;
\t\t\t\tright: 12px;
\t\t\t\tgap: 8px;
\t\t\t}
\t\t\t.carousel-btn-ebay {
\t\t\t\twidth: 40px;
\t\t\t\theight: 40px;
\t\t\t\tfont-size: 16px;
\t\t\t}
\t\t\t
\t\t\t.carousel-btn-ebay #pauseIcon,
\t\t\t.carousel-btn-ebay .pause-icon-content {
\t\t\t\tfont-size: 18px !important;
\t\t\t}
\t\t\t.carousel-indicators-ebay {
\t\t\t\tbottom: 12px;
\t\t\t\tleft: 50%;
\t\t\t\ttransform: translateX(-50%);
\t\t\t\tgap: 6px;
\t\t\t\tpadding: 5px 10px;
\t\t\t}
\t\t\t
\t\t\t.carousel-indicator-ebay {
\t\t\t\twidth: 8px;
\t\t\t\theight: 8px;
\t\t\t}
\t\t\t.shop-header-content {
\t\t\t\tpadding: 20px 16px;
\t\t\t\tmargin: 0;
\t\t\t\tborder-radius: 0;
\t\t\t}
\t\t\t.shop-header-content .row {
\t\t\t\tflex-direction: column;
\t\t\t\ttext-align: center;
\t\t\t}
\t\t\t.shop-avatar-container-ebay {
\t\t\t\tmargin: 0 auto 16px;
\t\t\t}
\t\t\t.shop-avatar-ebay {
\t\t\t\twidth: 90px;
\t\t\t\theight: 90px;
\t\t\t}
\t\t\t.shop-name-ebay {
\t\t\t\tfont-size: 1.5rem;
\t\t\t\tmargin-bottom: 8px;
\t\t\t\tline-height: 1.3;
\t\t\t\tword-break: break-word;
\t\t\t\thyphens: auto;
\t\t\t\tmax-width: 100%;
\t\t\t}
\t\t\t.shop-name-section {
\t\t\t\tmargin-bottom: 10px;
\t\t\t}
\t\t\t.verified-text {
\t\t\t\tfont-size: 0.8rem;
\t\t\t\twhite-space: normal;
\t\t\t\tjustify-content: center;
\t\t\t\tflex-wrap: wrap;
\t\t\t\tline-height: 1.4;
\t\t\t}
\t\t\t.verified-text i {
\t\t\t\tfont-size: 0.85rem;
\t\t\t}
\t\t\t.shop-category-ebay {
\t\t\t\tfont-size: 0.75rem;
\t\t\t\tpadding: 5px 10px;
\t\t\t\tmax-width: 100%;
\t\t\t\tline-height: 1.3;
\t\t\t\tword-break: break-word;
\t\t\t}
\t\t\t.shop-info-ebay {
\t\t\t\ttext-align: center;
\t\t\t}
\t\t\t.stat-row {
\t\t\t\tjustify-content: center;
\t\t\t\tgap: 10px;
\t\t\t\tflex-wrap: wrap;
\t\t\t}
\t\t\t
\t\t\t.stat-item-ebay {
\t\t\t\talign-items: center;
\t\t\t\tmin-width: 75px;
\t\t\t\tflex: 0 1 auto;
\t\t\t\tpadding: 10px 8px;
\t\t\t}
\t\t\t.stat-percentage,
\t\t\t.stat-number-ebay {
\t\t\t\tfont-size: 1rem;
\t\t\t\tline-height: 1.1;
\t\t\t\tword-break: break-word;
\t\t\t}
\t\t\t.stat-label-ebay {
\t\t\t\tfont-size: 0.65rem;
\t\t\t\ttext-align: center;
\t\t\t\tline-height: 1.2;
\t\t\t\tletter-spacing: 0.3px;
\t\t\t\tword-break: break-word;
\t\t\t\thyphens: auto;
\t\t\t}
\t\t\t.shop-additional-info {
\t\t\t\tjustify-content: center;
\t\t\t\tflex-wrap: wrap;
\t\t\t\tgap: 8px 10px;
\t\t\t\tfont-size: 0.75rem;
\t\t\t\tline-height: 1.4;
\t\t\t}
\t\t\t.member-since {
\t\t\t\tflex-direction: row;
\t\t\t\ttext-align: center;
\t\t\t\tgap: 4px;
\t\t\t\twhite-space: normal;
\t\t\t\tfont-size: 0.75rem;
\t\t\t\tline-height: 1.4;
\t\t\t\tpadding: 5px 8px;
\t\t\t\tword-break: break-word;
\t\t\t}
\t\t\t.member-since i {
\t\t\t\tmargin-right: 4px;
\t\t\t\tfont-size: 0.85rem;
\t\t\t\tflex-shrink: 0;
\t\t\t}
\t\t\t.shop-actions-ebay {
\t\t\t\tflex-direction: column;
\t\t\t\tjustify-content: center;
\t\t\t\tmin-width: auto;
\t\t\t\tmargin-top: 20px;
\t\t\t\twidth: 100%;
\t\t\t}
\t\t\t.btn-ebay {
\t\t\t\twidth: 100%;
\t\t\t\tmin-width: auto;
\t\t\t}
\t\t\t.shop-actions-ebay .d-flex {
\t\t\t\twidth: 100%;
\t\t\t}
\t\t\t.btn-shop,
\t\t\t.shop-action-btn {
\t\t\t\twidth: 100%;
\t\t\t\tmin-width: auto;
\t\t\t\theight: 45px;
\t\t\t\tfont-size: 0.9rem;
\t\t\t\tpadding: 12px 20px;
\t\t\t}
\t\t\t.shop-tabs-nav {
\t\t\t\tflex-wrap: wrap;
\t\t\t\tjustify-content: center;
\t\t\t}
\t\t\t
\t\t\t.shop-tab-link {
\t\t\t\tfont-size: 0.85rem;
\t\t\t\tpadding: 0.5rem 0.75rem;
\t\t\t\tflex: 1;
\t\t\t\tmin-width: auto;
\t\t\t}
\t\t\t
\t\t\t/* Produits responsive */
\t\t\t#products-container .product-item {
\t\t\t\tmargin-bottom: 20px;
\t\t\t}
\t\t\t
\t\t\t.product-card {
\t\t\t\tpadding: 15px;
\t\t\t}
\t\t\t
\t\t\t.product-title {
\t\t\t\tfont-size: 0.95rem;
\t\t\t}
\t\t\t
\t\t\t.product-price {
\t\t\t\tfont-size: 1.1rem;
\t\t\t}
\t\t\t
\t\t\t/* Détails de la boutique responsive */
\t\t\t.shop-info-ebay {
\t\t\t\ttext-align: center;
\t\t\t}
\t\t}
\t\t
\t\t@media(max-width: 575.98px) {
\t\t\t.shop-banner,
\t\t\t.shop-carousel-ebay {
\t\t\t\theight: 280px;
\t\t\t\tmargin: 0;
\t\t\t}
\t\t\t
\t\t\t.carousel-controls-ebay {
\t\t\t\tbottom: 10px;
\t\t\t\tright: 10px;
\t\t\t\tgap: 6px;
\t\t\t}
\t\t\t
\t\t\t.carousel-btn-ebay {
\t\t\t\twidth: 36px;
\t\t\t\theight: 36px;
\t\t\t\tfont-size: 14px;
\t\t\t}
\t\t\t
\t\t\t.carousel-btn-ebay #pauseIcon,
\t\t\t.carousel-btn-ebay .pause-icon-content {
\t\t\t\tfont-size: 16px !important;
\t\t\t}
\t\t\t
\t\t\t.carousel-indicators-ebay {
\t\t\t\tbottom: 10px;
\t\t\t\tleft: 50%;
\t\t\t\ttransform: translateX(-50%);
\t\t\t\tpadding: 4px 8px;
\t\t\t\tgap: 5px;
\t\t\t}
\t\t\t
\t\t\t.carousel-indicator-ebay {
\t\t\t\twidth: 7px;
\t\t\t\theight: 7px;
\t\t\t}
\t\t\t
\t\t\t.shop-header-content {
\t\t\t\tmargin: 0;
\t\t\t\tpadding: 16px 12px;
\t\t\t}
\t\t\t
\t\t\t.shop-avatar-ebay {
\t\t\t\twidth: 80px;
\t\t\t\theight: 80px;
\t\t\t}
\t\t\t
\t\t\t.shop-name-ebay {
\t\t\t\tfont-size: 1.3rem;
\t\t\t\tline-height: 1.3;
\t\t\t\tword-break: break-word;
\t\t\t\tletter-spacing: -0.1px;
\t\t\t\thyphens: auto;
\t\t\t\tmax-width: 100%;
\t\t\t}
\t\t\t.shop-name-section {
\t\t\t\tmargin-bottom: 8px;
\t\t\t}
\t\t\t.verified-text {
\t\t\t\tfont-size: 0.7rem;
\t\t\t\twhite-space: normal;
\t\t\t\tline-height: 1.4;
\t\t\t\tflex-wrap: wrap;
\t\t\t\tjustify-content: center;
\t\t\t\tword-break: break-word;
\t\t\t}
\t\t\t.verified-text i {
\t\t\t\tfont-size: 0.75rem;
\t\t\t\tflex-shrink: 0;
\t\t\t}
\t\t\t.shop-category-ebay {
\t\t\t\tfont-size: 0.65rem;
\t\t\t\tpadding: 4px 8px;
\t\t\t\tmax-width: 100%;
\t\t\t\tline-height: 1.3;
\t\t\t\tword-break: break-word;
\t\t\t}
\t\t\t
\t\t\t.stat-row {
\t\t\t\tgap: 6px;
\t\t\t\tflex-direction: row;
\t\t\t\tjustify-content: space-around;
\t\t\t}
\t\t\t
\t\t\t.stat-item-ebay {
\t\t\t\tflex: 1;
\t\t\t\tmin-width: 0;
\t\t\t\talign-items: center;
\t\t\t\tpadding: 8px 4px;
\t\t\t}
\t\t\t.stat-percentage,
\t\t\t.stat-number-ebay {
\t\t\t\tfont-size: 0.95rem;
\t\t\t\tline-height: 1.1;
\t\t\t\tword-break: break-word;
\t\t\t}
\t\t\t.stat-label-ebay {
\t\t\t\tfont-size: 0.6rem;
\t\t\t\ttext-align: center;
\t\t\t\tline-height: 1.2;
\t\t\t\tletter-spacing: 0.2px;
\t\t\t\tpadding: 0 2px;
\t\t\t\tword-break: break-word;
\t\t\t\thyphens: auto;
\t\t\t}
\t\t\t.shop-additional-info {
\t\t\t\tflex-direction: column;
\t\t\t\tgap: 8px;
\t\t\t\tfont-size: 0.7rem;
\t\t\t\talign-items: center;
\t\t\t\tline-height: 1.5;
\t\t\t}
\t\t\t.member-since {
\t\t\t\tfont-size: 0.7rem;
\t\t\t\tpadding: 4px 8px;
\t\t\t\tline-height: 1.4;
\t\t\t\tword-break: break-word;
\t\t\t\ttext-align: center;
\t\t\t\twidth: 100%;
\t\t\t\tmax-width: 100%;
\t\t\t\tjustify-content: center;
\t\t\t\twhite-space: normal;
\t\t\t}
\t\t\t.member-since i {
\t\t\t\tfont-size: 0.8rem;
\t\t\t\tmargin-right: 3px;
\t\t\t\tflex-shrink: 0;
\t\t\t}
\t\t\t.btn-ebay {
\t\t\t\tfont-size: 0.8rem;
\t\t\t\tpadding: 10px 14px;
\t\t\t\tline-height: 1.3;
\t\t\t}
\t\t\t.member-since i {
\t\t\t\tmargin-right: 4px;
\t\t\t\tfont-size: 0.8rem;
\t\t\t}
\t\t\t
\t\t\t.btn-ebay {
\t\t\t\tfont-size: 0.85rem;
\t\t\t\tpadding: 10px 16px;
\t\t\t}
\t\t\t
\t\t\t.member-since {
\t\t\t\tfont-size: 0.75rem;
\t\t\t}
\t\t\t
\t\t\t.shop-tab-content {
\t\t\t\tpadding: 15px 10px;
\t\t\t}
\t\t\t.shop-stats-row {
\t\t\t\tflex-direction: column;
\t\t\t\tgap: 10px;
\t\t\t\talign-items: flex-start;
\t\t\t}
\t\t}
\t\t.follow-button {
\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: 600;
\t\t\ttransition: all 0.3s ease;
\t\t\tcursor: pointer;
\t\t\tdisplay: inline-flex;
\t\t\talign-items: center;
\t\t\tgap: 8px;
\t\t}
\t\t.follow-button: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.follow-button.following {
\t\t\tbackground: #28a745;
\t\t}
\t\t.follow-button.following:hover {
\t\t\tbackground: #218838;
\t\t}
\t\t.follow-button:disabled {
\t\t\topacity: 0.6;
\t\t\tcursor: not-allowed;
\t\t\ttransform: none;
\t\t}
\t\t.follow-stats {
\t\t\tdisplay: flex;
\t\t\tgap: 30px;
\t\t\tmargin-top: 20px;
\t\t\tflex-wrap: wrap;
\t\t}
\t\t.follow-stat {
\t\t\ttext-align: center;
\t\t\tpadding: 15px;
\t\t\tbackground: #f8f9fa;
\t\t\tborder-radius: 10px;
\t\t\tmin-width: 120px;
\t\t}
\t\t.follow-stat-number {
\t\t\tfont-size: 1.8rem;
\t\t\tfont-weight: bold;
\t\t\tcolor: #ffa200;
\t\t\tdisplay: block;
\t\t}
\t\t.follow-stat-label {
\t\t\tcolor: #666;
\t\t\tfont-size: 0.9rem;
\t\t\ttext-transform: uppercase;
\t\t\tletter-spacing: 0.5px;
\t\t}
\t\t.shop-actions {
\t\t\tdisplay: flex;
\t\t\tgap: 15px;
\t\t\talign-items: center;
\t\t\tflex-wrap: wrap;
\t\t\tmargin-top: 20px;
\t\t}
\t\t.action-button {
\t\t\tbackground: white;
\t\t\tborder: 2px solid #ffa200;
\t\t\tcolor: #ffa200;
\t\t\tpadding: 10px 20px;
\t\t\tborder-radius: 20px;
\t\t\ttext-decoration: none;
\t\t\tfont-weight: 500;
\t\t\ttransition: all 0.3s ease;
\t\t\tdisplay: inline-flex;
\t\t\talign-items: center;
\t\t\tgap: 8px;
\t\t}
\t\t.action-button:hover {
\t\t\tbackground: #ffa200;
\t\t\tcolor: white;
\t\t\ttransform: translateY(-2px);
\t\t\tbox-shadow: 0 5px 15px rgba(255, 162, 0, 0.3);
\t\t}
\t\t.positive-feedback {
\t\t\tcolor: #28a745;
\t\t\tfont-weight: bold;
\t\t}
\t\t.items-sold {
\t\t\tcolor: #666;
\t\t\tfont-size: 0.9rem;
\t\t}
\t\t.followers-count {
\t\t\tcolor: #666;
\t\t\tfont-size: 0.9rem;
\t\t}
\t\t.shop-avatar {
\t\t\twidth: 120px;
\t\t\theight: 120px;
\t\t\tborder-radius: 50%;
\t\t\tborder: 4px solid white;
\t\t\tobject-fit: cover;
\t\t\tmargin-bottom: 20px;
\t\t}
\t\t.shop-stats {
\t\t\tbackground: white;
\t\t\tborder-radius: 10px;
\t\t\tpadding: 30px;
\t\t\tbox-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
\t\t\tmargin-top: -50px;
\t\t\tposition: relative;
\t\t\tz-index: 10;
\t\t}
\t\t.stat-item {
\t\t\ttext-align: center;
\t\t\tpadding: 20px;
\t\t}
\t\t.stat-number {
\t\t\tfont-size: 2.5rem;
\t\t\tfont-weight: bold;
\t\t\tcolor: #ffa200;
\t\t\tdisplay: block;
\t\t}
\t\t.stat-label {
\t\t\tcolor: #666;
\t\t\tfont-size: 0.9rem;
\t\t\ttext-transform: uppercase;
\t\t\tletter-spacing: 1px;
\t\t}
\t\t.shop-description {
\t\t\tbackground: #f8f9fa;
\t\t\tpadding: 30px;
\t\t\tborder-radius: 10px;
\t\t\tmargin-bottom: 40px;
\t\t}
\t\t.shop-contact {
\t\t\tbackground: white;
\t\t\tborder: 1px solid #e9ecef;
\t\t\tborder-radius: 10px;
\t\t\tpadding: 25px;
\t\t\tmargin-bottom: 40px;
\t\t}
\t\t.contact-item {
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tmargin-bottom: 15px;
\t\t}
\t\t.contact-item i {
\t\t\tcolor: #ffa200;
\t\t\tmargin-right: 15px;
\t\t\twidth: 20px;
\t\t}
\t\t.product-card {
\t\t\tbackground: white;
\t\t\tborder-radius: 10px;
\t\t\toverflow: hidden;
\t\t\tbox-shadow: 0 3px 10px rgba(0, 0, 0, 0.1);
\t\t\ttransition: transform 0.3s ease, box-shadow 0.3s ease;
\t\t\tmargin-bottom: 30px;
\t\t}
\t\t.product-card:hover {
\t\t\ttransform: translateY(-5px);
\t\t\tbox-shadow: 0 8px 25px rgba(0, 0, 0, 0.15);
\t\t}
\t\t.product-image {
\t\t\theight: 200px;
\t\t\tbackground-size: cover;
\t\t\tbackground-position: center;
\t\t\tposition: relative;
\t\t}
\t\t.product-info {
\t\t\tpadding: 20px;
\t\t}
\t\t.product-title {
\t\t\tfont-size: 1.1rem;
\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.3rem;
\t\t\tfont-weight: bold;
\t\t\tcolor: #ffa200;
\t\t\tmargin-bottom: 15px;
\t\t}
\t\t.product-meta {
\t\t\tdisplay: flex;
\t\t\tjustify-content: space-between;
\t\t\talign-items: center;
\t\t\tfont-size: 0.9rem;
\t\t\tcolor: #666;
\t\t}
\t\t.rating {
\t\t\tcolor: #ffa200;
\t\t}
\t\t/* Boutons d'action uniformes */
\t\t.btn-shop,
\t\t.shop-action-btn {
\t\t\tbackground: #ffa200;
\t\t\tborder: 1px solid #ffa200;
\t\t\tcolor: white;
\t\t\tpadding: 12px 24px;
\t\t\tborder-radius: 6px;
\t\t\tfont-weight: 500;
\t\t\tfont-size: 0.9rem;
\t\t\ttransition: all 0.3s ease;
\t\t\ttext-decoration: none;
\t\t\tdisplay: inline-flex;
\t\t\talign-items: center;
\t\t\tjustify-content: center;
\t\t\tgap: 8px;
\t\t\tmin-width: 120px;
\t\t\theight: 44px;
\t\t\twhite-space: nowrap;
\t\t}
\t\t.btn-shop:hover,
\t\t.shop-action-btn:hover {
\t\t\tbackground: #e8910a;
\t\t\tborder-color: #e8910a;
\t\t\tcolor: white;
\t\t\ttransform: translateY(-1px);
\t\t\tbox-shadow: 0 4px 12px rgba(255, 162, 0, 0.3);
\t\t}
\t\t/* Boutons secondaires */
\t\t.shop-action-btn.secondary {
\t\t\tbackground: transparent;
\t\t\tborder: 1px solid #6c757d;
\t\t\tcolor: #6c757d;
\t\t}
\t\t.shop-action-btn.secondary:hover {
\t\t\tbackground: #6c757d;
\t\t\tborder-color: #6c757d;
\t\t\tcolor: white;
\t\t\ttransform: translateY(-1px);
\t\t\tbox-shadow: 0 4px 12px rgba(108, 117, 125, 0.3);
\t\t}
\t\t/* Responsive */
\t\t@media(max-width: 768px) {
\t\t\t.shop-header {
\t\t\t\tpadding: 100px 0 40px;
\t\t\t}
\t\t\t.shop-avatar {
\t\t\t\twidth: 80px;
\t\t\t\theight: 80px;
\t\t\t}
\t\t\t.shop-stats {
\t\t\t\tmargin-top: -30px;
\t\t\t\tpadding: 20px;
\t\t\t}
\t\t\t.stat-number {
\t\t\t\tfont-size: 2rem;
\t\t\t}
\t\t}
\t\t/* Très petits écrans */
\t\t@media(max-width: 480px) {
\t\t\t.btn-shop,
\t\t\t.shop-action-btn {
\t\t\t\tmin-width: 90px;
\t\t\t\theight: 38px;
\t\t\t\tfont-size: 0.8rem;
\t\t\t\tpadding: 8px 16px;
\t\t\t}
\t\t\t.shop-actions-row {
\t\t\t\tgap: 8px;
\t\t\t}
\t\t}
\t\t/* Styles pour la section des avis */
\t\t.review-stats-card {
\t\t\tbackground: white;
\t\t\tborder-radius: 10px;
\t\t\tpadding: 20px;
\t\t\tbox-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
\t\t\tmargin-bottom: 20px;
\t\t}
\t\t.stats-header {
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tmargin-bottom: 20px;
\t\t}
\t\t.overall-rating {
\t\t\ttext-align: center;
\t\t\tmargin-right: 20px;
\t\t}
\t\t.rating-number {
\t\t\tfont-size: 36px;
\t\t\tfont-weight: bold;
\t\t\tcolor: #333;
\t\t\tdisplay: block;
\t\t}
\t\t.stars {
\t\t\tcolor: #ffc107;
\t\t\tfont-size: 18px;
\t\t\tmargin-top: 5px;
\t\t}
\t\t.rating-summary p {
\t\t\tmargin: 0;
\t\t\tcolor: #666;
\t\t}
\t\t.rating-breakdown {
\t\t\tmargin-top: 15px;
\t\t}
\t\t.rating-bar {
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tmargin-bottom: 8px;
\t\t}
\t\t.rating-label {
\t\t\twidth: 40px;
\t\t\tfont-size: 14px;
\t\t\tcolor: #666;
\t\t}
\t\t.rating-progress {
\t\t\tflex: 1;
\t\t\theight: 6px;
\t\t\tbackground: #e9ecef;
\t\t\tborder-radius: 3px;
\t\t\tmargin: 0 10px;
\t\t\toverflow: hidden;
\t\t}
\t\t.rating-fill {
\t\t\theight: 100%;
\t\t\tbackground: linear-gradient(45deg, #ffc107, #ff8c00);
\t\t\ttransition: width 0.3s ease;
\t\t}
\t\t.rating-count {
\t\t\twidth: 30px;
\t\t\ttext-align: right;
\t\t\tfont-size: 14px;
\t\t\tcolor: #666;
\t\t}
\t\t.reviews-preview {
\t\t\tbackground: white;
\t\t\tborder-radius: 10px;
\t\t\tpadding: 20px;
\t\t\tbox-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
\t\t}
\t\t.review-card-preview {
\t\t\tborder-bottom: 1px solid #f0f0f0;
\t\t\tpadding-bottom: 15px;
\t\t\tmargin-bottom: 15px;
\t\t}
\t\t.review-card-preview:last-child {
\t\t\tborder-bottom: none;
\t\t\tmargin-bottom: 0;
\t\t}
\t\t.review-header {
\t\t\tdisplay: flex;
\t\t\tjustify-content: space-between;
\t\t\talign-items: center;
\t\t\tmargin-bottom: 10px;
\t\t}
\t\t.review-user {
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t}
\t\t.user-avatar {
\t\t\twidth: 35px;
\t\t\theight: 35px;
\t\t\tborder-radius: 50%;
\t\t\tbackground: linear-gradient(45deg, #667eea, #764ba2);
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tjustify-content: center;
\t\t\tcolor: white;
\t\t\tfont-weight: bold;
\t\t\tmargin-right: 10px;
\t\t}
\t\t.user-info h6 {
\t\t\tmargin: 0;
\t\t\tfont-size: 14px;
\t\t\tfont-weight: 600;
\t\t\tcolor: #333;
\t\t}
\t\t.user-info small {
\t\t\tcolor: #666;
\t\t\tfont-size: 12px;
\t\t}
\t\t.review-rating {
\t\t\tdisplay: flex;
\t\t\talign-items: center;
\t\t\tgap: 5px;
\t\t}
\t\t.verified-badge {
\t\t\tbackground: #28a745;
\t\t\tcolor: white;
\t\t\tpadding: 2px 4px;
\t\t\tborder-radius: 3px;
\t\t\tfont-size: 10px;
\t\t\tfont-weight: bold;
\t\t}
\t\t.review-content {
\t\t\tcolor: #666;
\t\t\tfont-size: 14px;
\t\t\tline-height: 1.5;
\t\t}
\t\t.empty-reviews {
\t\t\ttext-align: center;
\t\t\tpadding: 40px 20px;
\t\t\tcolor: #666;
\t\t}
\t\t.empty-reviews i {
\t\t\tfont-size: 48px;
\t\t\tcolor: #ddd;
\t\t\tmargin-bottom: 15px;
\t\t}
\t\t.empty-reviews h4 {
\t\t\tcolor: #333;
\t\t\tmargin-bottom: 10px;
\t\t}
\t\t.section-title h2 {
\t\t\tcolor: #333;
\t\t\tmargin-bottom: 10px;
\t\t}
\t\t.section-title p {
\t\t\tcolor: #666;
\t\t\tmargin-bottom: 30px;
\t\t}
\t\t@media(max-width: 768px) {
\t\t\t.stats-header {
\t\t\t\tflex-direction: column;
\t\t\t\ttext-align: center;
\t\t\t}
\t\t\t.overall-rating {
\t\t\t\tmargin-right: 0;
\t\t\t\tmargin-bottom: 15px;
\t\t\t}
\t\t\t.review-header {
\t\t\t\tflex-direction: column;
\t\t\t\talign-items: flex-start;
\t\t\t}
\t\t\t.review-rating {
\t\t\t\tmargin-top: 5px;
\t\t\t}
\t\t}
\t</style>
{% endblock %}
{% block body %}
\t<!-- Shop Header eBay-style avec Karma - Pleine largeur -->
\t<section
\t\tclass=\"shop-header\">
\t\t<!-- Carrousel eBay-style -->
\t\t<div class=\"shop-carousel-ebay\">
\t\t\t<div class=\"carousel-container\">
\t\t\t\t{% set allBannerImages = shop.getAllBannerImages() %}
\t\t\t\t{% if allBannerImages|length > 0 %}
\t\t\t\t\t{% for image in allBannerImages %}
\t\t\t\t\t\t<div class=\"carousel-slide {% if loop.first %}active{% endif %}\" style=\"background-image: url('{{ asset(image) }}')\">
\t\t\t\t\t\t\t<div class=\"shop-banner-overlay\"></div>
\t\t\t\t\t\t</div>
\t\t\t\t\t{% endfor %}
\t\t\t\t{% else %}
\t\t\t\t\t<!-- Slide par défaut avec dégradé si aucune image de bannière -->
\t\t\t\t\t<div class=\"carousel-slide active\" style=\"background: linear-gradient(135deg, #667eea 0%, #764ba2 50%, #f093fb 100%);\">
\t\t\t\t\t\t<div class=\"shop-banner-overlay\"></div>
\t\t\t\t\t</div>
\t\t\t\t{% endif %}
\t\t\t</div>
\t\t\t<!-- Contrôles eBay-style améliorés - toujours affichés si plusieurs images -->
\t\t\t{% set totalBannerImages = allBannerImages|length %}
\t\t\t{% if totalBannerImages > 1 %}
\t\t\t\t<div class=\"carousel-controls-ebay\">
\t\t\t\t\t<button class=\"carousel-btn-ebay prev-btn\" onclick=\"previousSlide()\" id=\"prevBtn\" title=\"Image précédente\" aria-label=\"Image précédente\">
\t\t\t\t\t\t<i class=\"lnr lnr-chevron-left\"></i>
\t\t\t\t\t</button>
\t\t\t\t\t<button class=\"carousel-btn-ebay pause-btn\" onclick=\"toggleCarousel()\" id=\"pauseBtn\" title=\"Pause/Reprendre\" aria-label=\"Pause/Reprendre\">
\t\t\t\t\t\t<span id=\"pauseIcon\" class=\"pause-icon-content\">⏸</span>
\t\t\t\t\t</button>
\t\t\t\t\t<button class=\"carousel-btn-ebay next-btn\" onclick=\"nextSlide()\" id=\"nextBtn\" title=\"Image suivante\" aria-label=\"Image suivante\">
\t\t\t\t\t\t<i class=\"lnr lnr-chevron-right\"></i>
\t\t\t\t\t</button>
\t\t\t\t</div>
\t\t\t\t<!-- Indicateurs eBay-style améliorés -->
\t\t\t\t<div class=\"carousel-indicators-ebay\">
\t\t\t\t\t{% for image in allBannerImages %}
\t\t\t\t\t\t<button class=\"carousel-indicator-ebay {% if loop.first %}active{% endif %}\" onclick=\"goToSlide({{ loop.index0 }})\" title=\"Image {{ loop.index }}\" aria-label=\"Aller à l'image {{ loop.index }}\"></button>
\t\t\t\t\t{% endfor %}
\t\t\t\t</div>
\t\t\t{% endif %}
\t\t</div>
\t\t<!-- Contenu de la boutique eBay-style -->
\t\t<div class=\"shop-header-content\">
\t\t\t<div class=\"row g-3 g-md-4 align-items-start align-items-md-center\">
\t\t\t\t<!-- Logo de la boutique -->
\t\t\t\t<div class=\"col-12 col-md-auto text-center text-md-start\">
\t\t\t\t\t<div class=\"shop-avatar-container-ebay\">
\t\t\t\t\t\t{% if shop.logo %}
\t\t\t\t\t\t\t<img src=\"{{ asset(shop.logo) }}\" alt=\"{{ shop.name }}\" class=\"shop-avatar-ebay\">
\t\t\t\t\t\t{% else %}
\t\t\t\t\t\t\t<div class=\"shop-avatar-ebay shop-avatar-placeholder\">
\t\t\t\t\t\t\t\t<i class=\"lnr lnr-store\"></i>
\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t{% endif %}
\t\t\t\t\t\t{% if shop.isVerified %}
\t\t\t\t\t\t\t<div class=\"verified-badge-ebay\">
\t\t\t\t\t\t\t\t<i class=\"lnr lnr-checkmark-circle\"></i>
\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t{% endif %}
\t\t\t\t\t</div>
\t\t\t\t</div>
\t\t\t\t<!-- Informations principales -->
\t\t\t\t<div class=\"col-12 col-md\">
\t\t\t\t\t<div class=\"shop-info-ebay\">
\t\t\t\t\t\t<!-- Nom de la boutique -->
\t\t\t\t\t\t<div class=\"shop-name-section mb-2\">
\t\t\t\t\t\t\t<h1 class=\"shop-name-ebay mb-1\">{{ shop.name }}</h1>
\t\t\t\t\t\t\t<div class=\"d-flex flex-wrap align-items-center gap-2\">
\t\t\t\t\t\t\t{% if shop.isVerified %}
\t\t\t\t\t\t\t\t<span class=\"verified-text\">
\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-checkmark-circle me-1\"></i>Vendeur vérifié
\t\t\t\t\t\t\t\t</span>
\t\t\t\t\t\t\t{% endif %}
\t\t\t\t\t\t{% if shop.shopCategory %}
\t\t\t\t\t\t\t\t<span class=\"shop-category-ebay\">{{ shop.shopCategory.name }}</span>
\t\t\t\t\t\t{% endif %}
\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t</div>
\t\t\t\t\t\t<!-- Statistiques principales -->
\t\t\t\t\t\t<div class=\"shop-stats-ebay\">
\t\t\t\t\t\t\t<div class=\"stat-row mb-2\">
\t\t\t\t\t\t\t\t{% if shop.averageRating > 0 %}
\t\t\t\t\t\t\t\t\t<div class=\"stat-item-ebay\">
\t\t\t\t\t\t\t\t\t\t<span class=\"stat-percentage\">{{ shop.averageRating|number_format(1) }}%</span>
\t\t\t\t\t\t\t\t\t\t<span class=\"stat-label-ebay\">Évaluations positives</span>
\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t{% endif %}
\t\t\t\t\t\t\t\t{% if stats.totalProductSales > 0 %}
\t\t\t\t\t\t\t\t\t<div class=\"stat-item-ebay\">
\t\t\t\t\t\t\t\t\t\t<span class=\"stat-number-ebay\">{{ stats.totalProductSales|number_format }}</span>
\t\t\t\t\t\t\t\t\t\t<span class=\"stat-label-ebay\">Articles vendus</span>
\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t{% endif %}
\t\t\t\t\t\t\t\t{% if followStats.active_follows > 0 %}
\t\t\t\t\t\t\t\t\t<div class=\"stat-item-ebay\">
\t\t\t\t\t\t\t\t\t\t<span class=\"stat-number-ebay\">{{ followStats.active_follows|number_format }}</span>
\t\t\t\t\t\t\t\t\t\t<span class=\"stat-label-ebay\">Suiveurs</span>
\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t{% endif %}
\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t<!-- Informations supplémentaires -->
\t\t\t\t\t\t\t<div class=\"shop-additional-info\">
\t\t\t\t\t\t\t\t<div class=\"d-flex flex-wrap gap-3 gap-md-4\">
\t\t\t\t\t\t\t\t\t{% if shop.averageRating > 0 %}
\t\t\t\t\t\t\t\t\t\t<span class=\"member-since\">
\t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-thumbs-up me-1\"></i>
\t\t\t\t\t\t\t\t\t\t\t{{ shop.averageRating|number_format(1) }}% positive feedback
\t\t\t\t\t\t\t\t\t\t</span>
\t\t\t\t\t\t\t\t\t{% endif %}
\t\t\t\t\t\t\t\t\t{% if stats.totalProductSales > 0 %}
\t\t\t\t\t\t\t\t\t\t<span class=\"member-since\">
\t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-cart me-1\"></i>
\t\t\t\t\t\t\t\t\t\t\t{{ stats.totalProductSales|number_format }} produit{{ stats.totalProductSales > 1 ? 's' : '' }} vendu{{ stats.totalProductSales > 1 ? 's' : '' }}
\t\t\t\t\t\t\t\t\t\t</span>
\t\t\t\t\t\t\t\t\t{% endif %}
\t\t\t\t\t\t\t\t\t<span class=\"member-since\">
\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-history me-1\"></i>
\t\t\t\t\t\t\t\t\t\tCréé depuis {{ shop.createdAt|date('M Y') }}
\t\t\t\t\t\t\t\t\t</span>
\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</div>
\t\t\t\t</div>
\t\t\t\t<!-- Actions eBay-style -->
\t\t\t\t<div class=\"col-12 col-md-auto\">
\t\t\t\t\t<div class=\"shop-actions-ebay\">
\t\t\t\t\t\t{% if app.user %}
\t\t\t\t\t\t\t<button id=\"follow-button\" class=\"btn btn-primary btn-ebay w-100 {% if isFollowing %}following{% endif %}\" data-shop-id=\"{{ shop.id }}\" data-following=\"{{ isFollowing ? 'true' : 'false' }}\">
\t\t\t\t\t\t\t\t<span id=\"follow-text\">
\t\t\t\t\t\t\t\t\t{% if isFollowing %}
\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-checkmark-circle me-1\"></i> Suivi
\t\t\t\t\t\t\t\t\t{% else %}
\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-plus me-1\"></i> Suivre
\t\t\t\t\t\t\t\t\t{% endif %}
\t\t\t\t\t\t\t\t</span>
\t\t\t\t\t\t\t</button>
\t\t\t\t\t\t{% else %}
\t\t\t\t\t\t\t<a href=\"{{ path('ui_app_login') }}\" class=\"btn btn-primary btn-ebay w-100\">
\t\t\t\t\t\t\t\t<i class=\"lnr lnr-user me-1\"></i> Se connecter pour suivre
\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t{% endif %}
\t\t\t\t\t\t<div class=\"d-flex gap-2 mt-2\">
\t\t\t\t\t\t\t<button class=\"btn btn-outline-secondary btn-ebay flex-fill\" onclick=\"shareShop()\" title=\"Partager\">
\t\t\t\t\t\t\t\t<i class=\"lnr lnr-bubble\"></i>
\t\t\t\t\t\t\t\t<span class=\"d-none d-md-inline ms-1\">Partager</span>
\t\t\t\t\t\t</button>
\t\t\t\t\t\t\t<button class=\"btn btn-outline-danger btn-ebay flex-fill\" onclick=\"reportShop()\" title=\"Signaler\">
\t\t\t\t\t\t\t\t<i class=\"lnr lnr-flag\"></i>
\t\t\t\t\t\t\t\t<span class=\"d-none d-md-inline ms-1\">Signaler</span>
\t\t\t\t\t\t</button>
\t\t\t\t\t\t</div>
\t\t\t\t\t\t{% if canEdit %}
\t\t\t\t\t\t\t<a href=\"{{ path('seller_shop_edit', {slug: shop.slug}) }}\" class=\"btn btn-outline-primary btn-ebay w-100 mt-2\">
\t\t\t\t\t\t\t\t<i class=\"lnr lnr-pencil me-1\"></i> Modifier la boutique
\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t{% endif %}
\t\t\t\t\t</div>
\t\t\t\t</div>
\t\t\t</div>
\t\t</div>
\t</section>
\t<!-- Shop Tabs eBay-style avec Karma -->
\t<section class=\"container\">
\t\t<div class=\"shop-tabs\">
\t\t\t<ul class=\"nav nav-tabs shop-tabs-nav\" role=\"tablist\">
\t\t\t\t<li class=\"nav-item shop-tab\">
\t\t\t\t\t<a href=\"#shop-items\" class=\"nav-link shop-tab-link active\" data-tab=\"items\" role=\"tab\">
\t\t\t\t\t\tBoutique
\t\t\t\t\t</a>
\t\t\t\t</li>
\t\t\t\t<li class=\"nav-item shop-tab\">
\t\t\t\t\t<a href=\"#shop-sale\" class=\"nav-link shop-tab-link\" data-tab=\"sale\" role=\"tab\">
\t\t\t\t\t\tPromotions
\t\t\t\t\t</a>
\t\t\t\t</li>
\t\t\t\t<li class=\"nav-item shop-tab\">
\t\t\t\t\t<a href=\"#shop-about\" class=\"nav-link shop-tab-link\" data-tab=\"about\" role=\"tab\">
\t\t\t\t\t\tÀ propos
\t\t\t\t\t</a>
\t\t\t\t</li>
\t\t\t\t<li class=\"nav-item shop-tab\">
\t\t\t\t\t<a href=\"#shop-feedback\" class=\"nav-link shop-tab-link\" data-tab=\"feedback\" role=\"tab\">
\t\t\t\t\t\tAvis ({{ shop.getVisibleReviewsCount() }})
\t\t\t\t\t</a>
\t\t\t\t</li>
\t\t\t</ul>
\t\t\t<!-- Tab Content: Shop Items avec Karma -->
\t\t\t<div id=\"shop-items\" class=\"tab-content shop-tab-content active\">
\t\t\t\t<div class=\"row\">
\t\t\t\t\t<div class=\"col-lg-12\">
\t\t\t\t\t\t<div class=\"d-flex justify-content-between align-items-center mb-4\">
\t\t\t\t\t\t\t<h4 class=\"mb-0\">Produits de
\t\t\t\t\t\t\t\t{{ shop.name }}</h4>
\t\t\t\t\t\t\t<div class=\"d-flex align-items-center gap-3\">
\t\t\t\t\t\t\t\t<span style=\"font-size: 2rem; font-weight: 600; min-width: 100px; display: inline-block; text-align: center;\">
\t\t\t\t\t\t\t\t\t<span class=\"product-count\">{{ products|length|number_format }}</span>
\t\t\t\t\t\t\t\t\t<span style=\"font-size: 1rem; font-weight: 400;\">produits</span>
\t\t\t\t\t\t\t\t</span>
\t\t\t\t\t\t\t\t<select class=\"form-select\" id=\"product-sort\" style=\"width: auto;\" onchange=\"if(window.sortProducts) window.sortProducts(this.value);\">
\t\t\t\t\t\t\t\t\t<option value=\"\">Trier par</option>
\t\t\t\t\t\t\t\t\t<option value=\"price_asc\">Prix : Croissant</option>
\t\t\t\t\t\t\t\t\t<option value=\"price_desc\">Prix : Décroissant</option>
\t\t\t\t\t\t\t\t\t<option value=\"newest\">Plus récents</option>
\t\t\t\t\t\t\t\t\t<option value=\"popular\">Plus populaires</option>
\t\t\t\t\t\t\t\t\t<option value=\"name_asc\">Nom : A-Z</option>
\t\t\t\t\t\t\t\t\t<option value=\"name_desc\">Nom : Z-A</option>
\t\t\t\t\t\t\t\t</select>
\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t</div>
\t\t\t\t\t\t{% if products|length > 0 %}
\t\t\t\t\t\t\t<div class=\"row\" id=\"products-container\">
\t\t\t\t\t\t\t\t{% for product in products %}
\t\t\t\t\t\t\t\t\t<div class=\"col-lg-3 col-md-4 col-sm-6 mb-4 product-item\" data-price=\"{{ product.price }}\" data-name=\"{{ product.name|lower }}\" data-views=\"{{ product.viewCount ?? 0 }}\" data-created=\"{{ product.publishedAt|date('Y-m-d') }}\">
\t\t\t\t\t\t\t\t\t\t<div class=\"product-card\">
\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<div class=\"product-image\" style=\"background-image: url('{% if product.images is defined and product.images|length > 0 %}{{ asset(product.images[0]) }}{% else %}{{ asset('ui/img/product/p1.jpg') }}{% endif %}')\"></div>
\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=\"product-info\">
\t\t\t\t\t\t\t\t\t\t\t\t<h6 class=\"product-title\">
\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"{{ path('ui_product_show', { slug: product.slug }) }}\" class=\"text-decoration-none\">
\t\t\t\t\t\t\t\t\t\t\t\t\t\t{{ product.name }}
\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</h6>
\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"product-price\">{{ product.price|number_format(2, '.', ' ') }}
\t\t\t\t\t\t\t\t\t\t\t\t\tHTG</div>
\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"product-meta\">
\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\t\t{% if product.averageRating %}
\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"rating\">
\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{% for i in 1..5 %}
\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"fa fa-star{% if i <= product.averageRating %}{% else %}-o{% endif %}\"></i>
\t\t\t\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\t\t\t</div>
\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</span>
\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"text-muted\">{{ product.viewCount ?? 0 }}
\t\t\t\t\t\t\t\t\t\t\t\t\t\tvues</span>
\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{% endfor %}
\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 py-5\">
\t\t\t\t\t\t\t\t<i class=\"lnr lnr-package\" style=\"font-size: 4rem; color: #ccc;\"></i>
\t\t\t\t\t\t\t\t<h4 class=\"mt-3\">Aucun produit disponible</h4>
\t\t\t\t\t\t\t\t<p class=\"text-muted\">Cette boutique n'a pas encore de produits en vente.</p>
\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t{% endif %}
\t\t\t\t\t</div>
\t\t\t\t</div>
\t\t\t</div>
\t\t\t<!-- Tab Content: Sale avec Karma -->
\t\t\t<div id=\"shop-sale\" class=\"tab-content shop-tab-content\">
\t\t\t\t<div class=\"text-center py-5\">
\t\t\t\t\t<i class=\"lnr lnr-tag\" style=\"font-size: 4rem; color: #ccc;\"></i>
\t\t\t\t\t<h4 class=\"mt-3\">Aucune promotion actuellement</h4>
\t\t\t\t\t<p class=\"text-muted\">Cette boutique n'a pas de promotions actives pour le moment.</p>
\t\t\t\t</div>
\t\t\t</div>
\t\t\t<!-- Tab Content: About avec Karma -->
\t\t\t<div id=\"shop-about\" class=\"tab-content shop-tab-content\">
\t\t\t\t<div class=\"row\">
\t\t\t\t\t<div class=\"col-lg-8\">
\t\t\t\t\t\t<div class=\"card\">
\t\t\t\t\t\t\t<div class=\"card-header\">
\t\t\t\t\t\t\t\t<h5 class=\"mb-0\">
\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-user me-2\"></i>À propos de
\t\t\t\t\t\t\t\t\t{{ shop.name }}
\t\t\t\t\t\t\t\t</h5>
\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t<div class=\"card-body\">
\t\t\t\t\t\t\t\t{% if shop.description %}
\t\t\t\t\t\t\t\t\t<div class=\"card-text shop-description-content\">{{ shop.description|raw }}</div>
\t\t\t\t\t\t\t\t{% else %}
\t\t\t\t\t\t\t\t\t<p class=\"text-muted\">Aucune description disponible.</p>
\t\t\t\t\t\t\t\t{% endif %}
\t\t\t\t\t\t\t\t{% if shop.businessHours %}
\t\t\t\t\t\t\t\t\t<h6 class=\"mt-4\">
\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-clock me-2\"></i>Heures d'ouverture
\t\t\t\t\t\t\t\t\t</h6>
\t\t\t\t\t\t\t\t\t<p>{{ shop.businessHours }}</p>
\t\t\t\t\t\t\t\t{% endif %}
\t\t\t\t\t\t\t\t{% if shop.returnPolicy %}
\t\t\t\t\t\t\t\t\t<h6 class=\"mt-4\">
\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-undo me-2\"></i>Politique de retour
\t\t\t\t\t\t\t\t\t</h6>
\t\t\t\t\t\t\t\t\t<p>{{ shop.returnPolicy }}</p>
\t\t\t\t\t\t\t\t{% endif %}
\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-4\">
\t\t\t\t\t\t<div class=\"card shop-info-card\">
\t\t\t\t\t\t\t<div class=\"card-header\">
\t\t\t\t\t\t\t\t<h6 class=\"mb-0\">
\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-chart me-2\"></i>Statistiques de la boutique
\t\t\t\t\t\t\t\t</h6>
\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t<div class=\"card-body\">
\t\t\t\t\t\t\t\t<div class=\"row text-center\">
\t\t\t\t\t\t\t\t\t<div class=\"col-6\">
\t\t\t\t\t\t\t\t\t\t<div class=\"shop-stat-item\">
\t\t\t\t\t\t\t\t\t\t\t<span class=\"stat-number h4 text-primary\">{{ stats.activeProducts }}</span>
\t\t\t\t\t\t\t\t\t\t\t<span class=\"stat-label d-block\">Produits actifs</span>
\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-6\">
\t\t\t\t\t\t\t\t\t\t<div class=\"shop-stat-item\">
\t\t\t\t\t\t\t\t\t\t\t<span class=\"stat-number h4 text-info\">{{ stats.shopViews }}</span>
\t\t\t\t\t\t\t\t\t\t\t<span class=\"stat-label d-block\">Vues boutique</span>
\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</div>
\t\t\t\t</div>
\t\t\t</div>
\t\t\t<!-- Tab Content: Feedback avec Karma -->
\t\t\t<div id=\"shop-feedback\" class=\"tab-content shop-tab-content\">
\t\t\t\t<div class=\"row\">
\t\t\t\t\t<div
\t\t\t\t\t\tclass=\"col-lg-8\">
\t\t\t\t\t\t<!-- Statistiques des avis -->
\t\t\t\t\t\t<div class=\"review-stats mb-4\">
\t\t\t\t\t\t\t<div class=\"row\">
\t\t\t\t\t\t\t\t<div class=\"col-md-4\">
\t\t\t\t\t\t\t\t\t<div class=\"stat-card text-center\">
\t\t\t\t\t\t\t\t\t\t<h3 class=\"stat-number\">{{ shop.getAverageRating() }}</h3>
\t\t\t\t\t\t\t\t\t\t<div class=\"rating-stars\">
\t\t\t\t\t\t\t\t\t\t\t{% for i in 1..5 %}
\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-star{% if i <= shop.getAverageRating() %}{% else %}-empty{% endif %}\"></i>
\t\t\t\t\t\t\t\t\t\t\t{% endfor %}
\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t\t<p class=\"stat-label\">Note moyenne</p>
\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=\"col-md-4\">
\t\t\t\t\t\t\t\t\t<div class=\"stat-card text-center\">
\t\t\t\t\t\t\t\t\t\t<h3 class=\"stat-number\">{{ shop.getVisibleReviewsCount() }}</h3>
\t\t\t\t\t\t\t\t\t\t<p class=\"stat-label\">Avis clients</p>
\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=\"col-md-4\">
\t\t\t\t\t\t\t\t\t<div class=\"stat-card text-center\">
\t\t\t\t\t\t\t\t\t\t<h3 class=\"stat-number\">{{ ((shop.getVisibleReviewsCount() / 100) * 100)|round }}%</h3>
\t\t\t\t\t\t\t\t\t\t<p class=\"stat-label\">Satisfaction</p>
\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\t<!-- Liste des avis récents -->
\t\t\t\t\t\t<div class=\"reviews-preview\">
\t\t\t\t\t\t\t<h5 class=\"mb-3\">Avis récents</h5>
\t\t\t\t\t\t\t{% if shop.reviews|length > 0 %}
\t\t\t\t\t\t\t\t<div class=\"reviews-list\">
\t\t\t\t\t\t\t\t\t{% for review in shop.reviews|slice(0, 5) %}
\t\t\t\t\t\t\t\t\t\t{% if review.isVisible %}
\t\t\t\t\t\t\t\t\t\t\t<div class=\"review-item\">
\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"review-header\">
\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"reviewer-info\">
\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"reviewer-avatar\">
\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-user\"></i>
\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"reviewer-details\">
\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<h6 class=\"reviewer-name\">{{ review.user.userIdentifier }}</h6>
\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"review-rating\">
\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{% for i in 1..5 %}
\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-star{% if i <= review.rating %}{% else %}-empty{% endif %}\"></i>
\t\t\t\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\t\t\t</div>
\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"review-meta\">
\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"review-date\">{{ review.createdAt|date('d/m/Y') }}</span>
\t\t\t\t\t\t\t\t\t\t\t\t\t\t{% if review.isVerified %}
\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"verified-badge\">
\t\t\t\t\t\t\t\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\t\t\t\t\t\t\tVérifié
\t\t\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\t\t{% endif %}
\t\t\t\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t\t\t\t{% if review.comment %}
\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"review-comment\">
\t\t\t\t\t\t\t\t\t\t\t\t\t\t<p>{{ review.comment|length > 150 ? review.comment|slice(0, 150) ~ '...' : review.comment }}</p>
\t\t\t\t\t\t\t\t\t\t\t\t\t</div>
\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{% endif %}
\t\t\t\t\t\t\t\t\t{% endfor %}
\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t<div class=\"text-center mt-4\">
\t\t\t\t\t\t\t\t\t<a href=\"{{ path('shop_reviews_index', {'slug': shop.slug}) }}\" class=\"btn btn-primary\">
\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-star me-1\"></i>Voir tous les avis
\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{% else %}
\t\t\t\t\t\t\t\t<div class=\"text-center py-4\">
\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-star\" style=\"font-size: 3rem; color: #ccc;\"></i>
\t\t\t\t\t\t\t\t\t<h5 class=\"mt-3\">Aucun avis pour le moment</h5>
\t\t\t\t\t\t\t\t\t<p class=\"text-muted\">Cette boutique n'a pas encore reçu d'avis clients.</p>
\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t{% endif %}
\t\t\t\t\t\t</div>
\t\t\t\t\t</div>
\t\t\t\t\t<div
\t\t\t\t\t\tclass=\"col-lg-4\">
\t\t\t\t\t\t<!-- Lien vers la page complète des avis -->
\t\t\t\t\t\t<div class=\"review-actions-card\">
\t\t\t\t\t\t\t<h5>Évaluer cette boutique</h5>
\t\t\t\t\t\t\t<p class=\"text-muted\">Partagez votre expérience avec cette boutique.</p>
\t\t\t\t\t\t\t<a href=\"{{ path('shop_reviews_new', {'slug': shop.slug}) }}\" class=\"btn btn-primary w-100\">
\t\t\t\t\t\t\t\t<i class=\"lnr lnr-star me-1\"></i>Laisser un avis
\t\t\t\t\t\t\t</a>
\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<!-- Modal de signalement -->
\t<div class=\"modal fade\" id=\"reportModal\" tabindex=\"-1\" aria-labelledby=\"reportModalLabel\" aria-hidden=\"true\">
\t\t<div class=\"modal-dialog\">
\t\t\t<div class=\"modal-content\">
\t\t\t\t<div class=\"modal-header\">
\t\t\t\t\t<h5 class=\"modal-title\" id=\"reportModalLabel\">
\t\t\t\t\t\t<i class=\"lnr lnr-flag me-2\"></i> Signaler cette boutique
\t\t\t\t\t</h5>
\t\t\t\t\t<button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>
\t\t\t\t</div>
\t\t\t\t<div class=\"modal-body\">
\t\t\t\t\t<form id=\"reportForm\">
\t\t\t\t\t\t<div class=\"mb-3\">
\t\t\t\t\t\t\t<label for=\"reportReason\" class=\"form-label\">Motif du signalement *</label>
\t\t\t\t\t\t\t<select class=\"form-select\" id=\"reportReason\" required>
\t\t\t\t\t\t\t\t<option value=\"\">Sélectionnez un motif</option>
\t\t\t\t\t\t\t\t<option value=\"fake_products\">Produits contrefaits</option>
\t\t\t\t\t\t\t\t<option value=\"inappropriate_content\">Contenu inapproprié</option>
\t\t\t\t\t\t\t\t<option value=\"spam\">Spam ou publicité abusive</option>
\t\t\t\t\t\t\t\t<option value=\"fraud\">Fraude ou escroquerie</option>
\t\t\t\t\t\t\t\t<option value=\"harassment\">Harcèlement</option>
\t\t\t\t\t\t\t\t<option value=\"other\">Autre</option>
\t\t\t\t\t\t\t</select>
\t\t\t\t\t\t</div>
\t\t\t\t\t\t<div class=\"mb-3\">
\t\t\t\t\t\t\t<label for=\"reportDescription\" class=\"form-label\">Description détaillée *</label>
\t\t\t\t\t\t\t<textarea class=\"form-control\" id=\"reportDescription\" rows=\"4\" placeholder=\"Décrivez le problème rencontré...\" required></textarea>
\t\t\t\t\t\t</div>
\t\t\t\t\t\t<div class=\"mb-3\">
\t\t\t\t\t\t\t<label for=\"reportEmail\" class=\"form-label\">Votre email (optionnel)</label>
\t\t\t\t\t\t\t<input type=\"email\" class=\"form-control\" id=\"reportEmail\" placeholder=\"votre@email.com\">
\t\t\t\t\t\t\t<div class=\"form-text\">Nous pourrons vous contacter pour plus d'informations</div>
\t\t\t\t\t\t</div>
\t\t\t\t\t</form>
\t\t\t\t</div>
\t\t\t\t<div class=\"modal-footer\">
\t\t\t\t\t<button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Annuler</button>
\t\t\t\t\t<button type=\"button\" class=\"btn btn-danger\" onclick=\"submitReport()\">
\t\t\t\t\t\t<i class=\"lnr lnr-flag me-2\"></i>Envoyer le signalement
\t\t\t\t\t</button>
\t\t\t\t</div>
\t\t\t</div>
\t\t</div>
\t</div>
\t<!-- Section des avis -->
\t<div class=\"container my-5\">
\t\t<div class=\"row\">
\t\t\t<div class=\"col-12\">
\t\t\t\t<div class=\"section-title text-center\">
\t\t\t\t\t<h2>Avis clients</h2>
\t\t\t\t\t<p>Découvrez ce que pensent nos clients de cette boutique</p>
\t\t\t\t</div>
\t\t\t</div>
\t\t</div>
\t\t<div
\t\t\tclass=\"row\">
\t\t\t<!-- Statistiques des avis -->
\t\t\t<div class=\"col-md-4\">
\t\t\t\t<div class=\"review-stats-card\">
\t\t\t\t\t<div class=\"stats-header\">
\t\t\t\t\t\t<div class=\"overall-rating\">
\t\t\t\t\t\t\t<span class=\"rating-number\">{{ shop.reviews|length > 0 ? (shop.reviews|map(r => r.rating)|reduce((a, b) => a + b) / shop.reviews|length)|number_format(1) : '0.0' }}</span>
\t\t\t\t\t\t\t<div class=\"stars\">
\t\t\t\t\t\t\t\t{% set avgRating = shop.reviews|length > 0 ? (shop.reviews|map(r => r.rating)|reduce((a, b) => a + b) / shop.reviews|length) : 0 %}
\t\t\t\t\t\t\t\t{% for i in 1..5 %}
\t\t\t\t\t\t\t\t\t{% if i <= avgRating %}
\t\t\t\t\t\t\t\t\t\t★
\t\t\t\t\t\t\t\t\t{% elseif i - avgRating < 1 %}
\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\t\t\t\t\t\t{% endif %}
\t\t\t\t\t\t\t\t{% endfor %}
\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t</div>
\t\t\t\t\t\t<div class=\"rating-summary\">
\t\t\t\t\t\t\t<p class=\"mb-1\">{{ shop.reviews|length }}
\t\t\t\t\t\t\t\tavis</p>
\t\t\t\t\t\t\t<p class=\"text-muted small\">Basé sur
\t\t\t\t\t\t\t\t{{ shop.reviews|filter(r => r.isVerified)|length }}
\t\t\t\t\t\t\t\tavis vérifiés</p>
\t\t\t\t\t\t</div>
\t\t\t\t\t</div>
\t\t\t\t\t<div class=\"rating-breakdown\">
\t\t\t\t\t\t{% for rating in 5..1 %}
\t\t\t\t\t\t\t{% set count = shop.reviews|filter(r => r.rating == rating)|length %}
\t\t\t\t\t\t\t{% set percentage = shop.reviews|length > 0 ? (count / shop.reviews|length * 100) : 0 %}
\t\t\t\t\t\t\t<div class=\"rating-bar\">
\t\t\t\t\t\t\t\t<span class=\"rating-label\">{{ rating }}★</span>
\t\t\t\t\t\t\t\t<div class=\"rating-progress\">
\t\t\t\t\t\t\t\t\t<div class=\"rating-fill\" style=\"width: {{ percentage }}%\"></div>
\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t<span class=\"rating-count\">{{ count }}</span>
\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t{% endfor %}
\t\t\t\t\t</div>
\t\t\t\t</div>
\t\t\t</div>
\t\t\t<!-- Aperçu des avis -->
\t\t\t<div class=\"col-md-8\">
\t\t\t\t<div class=\"reviews-preview\">
\t\t\t\t\t{% if shop.reviews|length > 0 %}
\t\t\t\t\t\t{% for review in shop.reviews|slice(0, 3) %}
\t\t\t\t\t\t\t<div class=\"review-card-preview\">
\t\t\t\t\t\t\t\t<div class=\"review-header\">
\t\t\t\t\t\t\t\t\t<div class=\"review-user\">
\t\t\t\t\t\t\t\t\t\t<div class=\"user-avatar\">
\t\t\t\t\t\t\t\t\t\t\t{{ review.user.firstName|first|upper|default(review.user.email|first|upper) }}
\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t\t<div class=\"user-info\">
\t\t\t\t\t\t\t\t\t\t\t<h6>{{ review.user.firstName|default('Utilisateur') }}</h6>
\t\t\t\t\t\t\t\t\t\t\t<small>{{ review.getTimeAgo() }}</small>
\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=\"review-rating\">
\t\t\t\t\t\t\t\t\t\t<div class=\"stars\">{{ review.getRatingStars() }}</div>
\t\t\t\t\t\t\t\t\t\t{% if review.isVerified %}
\t\t\t\t\t\t\t\t\t\t\t<span class=\"verified-badge\">✓</span>
\t\t\t\t\t\t\t\t\t\t{% endif %}
\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=\"review-content\">
\t\t\t\t\t\t\t\t\t{{ review.comment|slice(0, 150) }}
\t\t\t\t\t\t\t\t\t{% if review.comment|length > 150 %}...
\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</div>
\t\t\t\t\t\t{% endfor %}
\t\t\t\t\t\t<div class=\"text-center mt-3\">
\t\t\t\t\t\t\t<a href=\"{{ path('shop_reviews_index', {'slug': shop.slug}) }}\" class=\"btn btn-outline-primary\">
\t\t\t\t\t\t\t\tVoir tous les avis ({{ shop.reviews|length }})
\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t</div>
\t\t\t\t\t{% else %}
\t\t\t\t\t\t<div class=\"empty-reviews\">
\t\t\t\t\t\t\t<i class=\"lnr lnr-star\"></i>
\t\t\t\t\t\t\t<h4>Aucun avis pour le moment</h4>
\t\t\t\t\t\t\t<p>Soyez le premier à laisser un avis sur cette boutique !</p>
\t\t\t\t\t\t\t{% if app.user %}
\t\t\t\t\t\t\t\t<a href=\"{{ path('shop_reviews_new', {'slug': shop.slug}) }}\" class=\"btn btn-primary\">
\t\t\t\t\t\t\t\t\t<i class=\"lnr lnraccount_recently_viewed-star\"></i>
\t\t\t\t\t\t\t\t\tLaisser un avis
\t\t\t\t\t\t\t\t</a>
\t\t\t\t\t\t\t{% endif %}
\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 %}
{% block javascripts %}
\t<script>
\t\tdocument.addEventListener('DOMContentLoaded', function () {
\t\t\t// Initialisation du carrousel
\t\t\tconsole.log('DOM Content Loaded - Initializing carousel...');
\t\t\tsetTimeout(function() {
initCarousel();
\t\t\t}, 100);
// Gestion des onglets eBay-style avec Bootstrap
const tabLinks = document.querySelectorAll('.shop-tab-link');
const tabContents = document.querySelectorAll('.shop-tab-content');
tabLinks.forEach(link => {
link.addEventListener('click', function (e) {
e.preventDefault();
// Retirer la classe active de tous les liens et contenus
tabLinks.forEach(l => {
l.classList.remove('active');
l.setAttribute('aria-selected', 'false');
});
tabContents.forEach(c => c.classList.remove('active'));
// Ajouter la classe active au lien cliqué
this.classList.add('active');
this.setAttribute('aria-selected', 'true');
// Afficher le contenu correspondant
const targetTab = this.dataset.tab;
const targetContent = document.getElementById (`shop-\${targetTab}`);
if (targetContent) {
targetContent.classList.add('active');
}
});
});
// Gestion du système de follow
const followButton = document.getElementById('follow-button');
if (followButton) {
followButton.addEventListener('click', function () {
const shopId = this.dataset.shopId;
const isFollowing = this.dataset.following === 'true';
// Désactiver le bouton pendant la requête
this.disabled = true;
const originalText = this.innerHTML;
this.innerHTML = '<i class=\"lnr lnr-spinner\"></i> Loading...';
// Envoyer la requête
fetch(\"{{ path('ui_api_shop_toggle_follow', {id: '__SHOP_ID__'}) }}\".replace('__SHOP_ID__', shopId), {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-Requested-With': 'XMLHttpRequest'
}
}).then(response => response.json()).then(data => {
if (data.success) { // Mettre à jour l'interface
this.dataset.following = data.isFollowing;
if (data.isFollowing) {
this.classList.add('following');
this.innerHTML = '<i class=\"lnr lnr-checkmark\"></i> Suivi';
} else {
this.classList.remove('following');
this.innerHTML = '<i class=\"lnr lnr-plus\"></i> Suivre';
}
// Mettre à jour le compteur de followers
if (followersCount && data.followersCount !== undefined) {
followersCount.textContent = data.followersCount.toLocaleString();
}
// Afficher un message de confirmation
showNotification(data.message, 'success');
} else {
showNotification(data.message, 'error');
}
}).catch(error => {
console.error('Erreur:', error);
showNotification('Une erreur est survenue', 'error');
}). finally(() => {
this.disabled = false;
});
});
}
// Fonction pour afficher les notifications
function showNotification(message, type = 'info') { // Créer l'élément de notification
const notification = document.createElement('div');
notification.className = `alert alert-\${
type === 'success' ? 'success' : type === 'error' ? 'danger' : 'info'
} alert-dismissible fade show position-fixed`;
notification.style.cssText = 'top: 20px; right: 20px; z-index: 9999; min-width: 300px;';
notification.innerHTML = `
\${message}
<button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"alert\"></button>
`;
document.body.appendChild(notification);
// Supprimer automatiquement après 5 secondes
setTimeout(() => {
if (notification.parentNode) {
notification.remove();
}
}, 5000);
}
// Fonctions pour les actions de boutique
window.shareShop = function () { // Vérifier si l'API Web Share est disponible et si on est sur mobile
if (navigator.share && /Android|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) {
navigator.share({title: '{{ shop.name }}- Boutique sur MaketOu', text: 'Découvrez cette boutique et ses produits sur MaketOu', url: window.location.href}).then(() => {
console.log('Partage réussi');
showNotification('Lien partagé avec succès !', 'success');
}).catch((error) => {
console.log('Erreur lors du partage:', error);
// Fallback vers la copie
copyToClipboard();
});
} else { // Sur desktop ou si Web Share n'est pas disponible, copier directement
copyToClipboard();
}
};
// Fonction pour copier le lien dans le presse-papiers
function copyToClipboard() {
const shopUrl = window.location.href;
const shopName = '{{ shop.name }}';
const shareText = `Découvrez la boutique \"\${shopName}\" sur MaketOu : \${shopUrl}`;
// Utiliser directement le fallback pour éviter les conflits
fallbackCopyToClipboard(shareText);
}
// Fallback pour copier le texte
function fallbackCopyToClipboard(text) {
const textArea = document.createElement('textarea');
textArea.value = text;
textArea.style.position = 'fixed';
textArea.style.left = '-999999px';
textArea.style.top = '-999999px';
document.body.appendChild(textArea);
textArea.focus();
textArea.select();
try {
document.execCommand('copy');
showNotification('Lien copié dans le presse-papiers !', 'success');
} catch (err) {
console.error('Impossible de copier:', err);
showNotification('Impossible de copier le lien', 'error');
}
document.body.removeChild(textArea);
}
window.contactShop = function () { // Ouvrir un modal de signalement
openReportModal();
};
window.saveShop = function () { // Sauvegarder la boutique dans les favoris
showNotification('Boutique sauvegardée dans vos favoris', 'success');
};
// Fonction pour ouvrir le modal de signalement
window.openReportModal = function () {
const modal = new bootstrap.Modal(document.getElementById('reportModal'));
modal.show();
};
// Fonction pour soumettre le signalement
window.submitReport = function () {
const reason = document.getElementById('reportReason').value;
const description = document.getElementById('reportDescription').value;
const email = document.getElementById('reportEmail').value;
if (! reason || ! description) {
showNotification('Veuillez remplir tous les champs obligatoires', 'error');
return;
}
// Simuler l'envoi du signalement
const reportData = {
shopId: {{ shop.id }},
reason: reason,
description: description,
email: email,
reportedAt: new Date().toISOString()
};
console.log('Signalement envoyé:', reportData);
// Fermer le modal
const modal = bootstrap.Modal.getInstance(document.getElementById('reportModal'));
modal.hide();
// Réinitialiser le formulaire
document.getElementById('reportForm').reset();
// Afficher la confirmation
showNotification('Signalement envoyé avec succès. Nous examinerons votre demande.', 'success');
};
// Gestion du carrousel eBay-style - Variables globales
let currentSlide = 0;
let carouselInterval = null;
let isPaused = false;
let slides = [];
let indicators = [];
let carouselInitialized = false;
let autoSlideDelay = 5000; // Délai par défaut : 5 secondes
let userInteractionTimeout = null; // Timeout pour reprendre après interaction utilisateur
let isUserInteracting = false; // Flag pour savoir si l'utilisateur interagit
let pageVisibilityHidden = false; // Flag pour savoir si la page est cachée
// Définir les fonctions globales immédiatement pour qu'elles soient disponibles pour onclick
window.nextSlide = function() {
if (slides.length === 0) {
console.warn('nextSlide: No slides available, initializing...');
initCarousel();
return;
}
// Marquer comme interaction utilisateur
handleUserInteraction();
currentSlide = (currentSlide + 1) % slides.length;
console.log('nextSlide: Moving to slide', currentSlide);
updateCarousel();
};
window.previousSlide = function() {
if (slides.length === 0) {
console.warn('previousSlide: No slides available, initializing...');
initCarousel();
return;
}
// Marquer comme interaction utilisateur
handleUserInteraction();
currentSlide = (currentSlide - 1 + slides.length) % slides.length;
console.log('previousSlide: Moving to slide', currentSlide);
updateCarousel();
};
window.goToSlide = function(index) {
if (slides.length === 0) {
console.warn('goToSlide: No slides available, initializing...');
initCarousel();
// Attendre que l'initialisation soit terminée
setTimeout(() => {
if (index >= 0 && index < slides.length) {
currentSlide = index;
updateCarousel();
// Réinitialiser le carrousel automatique
handleUserInteraction();
}
}, 150);
return;
}
if (index < 0 || index >= slides.length) {
console.warn('goToSlide: Invalid index', index, '. Valid range: 0 to', slides.length - 1);
return;
}
// Marquer comme interaction utilisateur
handleUserInteraction();
currentSlide = index;
console.log('goToSlide: Moving to slide', currentSlide, 'of', slides.length);
updateCarousel();
};
window.toggleCarousel = function() {
if (slides.length === 0) {
console.warn('toggleCarousel: No slides available, initializing...');
initCarousel();
return;
}
if (isPaused) {
resumeCarousel();
} else {
pauseCarousel();
}
};
function initCarousel() {
if (carouselInitialized) {
console.log('Carousel already initialized');
return;
}
// Réinitialiser les variables
currentSlide = 0;
isPaused = false;
// Récupérer les slides et indicateurs à nouveau
const carouselContainer = document.querySelector('.shop-carousel-ebay');
if (!carouselContainer) {
console.log('Carousel container not found');
return;
}
const allSlides = carouselContainer.querySelectorAll('.carousel-slide');
const allIndicators = carouselContainer.querySelectorAll('.carousel-indicator-ebay');
if (allSlides.length === 0) {
// Masquer les contrôles si aucune image
const controls = carouselContainer.querySelector('.carousel-controls-ebay');
const indicatorsContainer = carouselContainer.querySelector('.carousel-indicators-ebay');
if (controls) controls.style.display = 'none';
if (indicatorsContainer) indicatorsContainer.style.display = 'none';
return;
}
// Si une seule image, masquer les contrôles
if (allSlides.length <= 1) {
const controls = carouselContainer.querySelector('.carousel-controls-ebay');
const indicatorsContainer = carouselContainer.querySelector('.carousel-indicators-ebay');
if (controls) controls.style.display = 'none';
if (indicatorsContainer) indicatorsContainer.style.display = 'none';
// S'assurer que la slide unique est active
allSlides[0].classList.add('active');
return;
}
// Afficher les contrôles si plusieurs images
const controls = carouselContainer.querySelector('.carousel-controls-ebay');
const indicatorsContainer = carouselContainer.querySelector('.carousel-indicators-ebay');
if (controls) controls.style.display = 'flex';
if (indicatorsContainer) indicatorsContainer.style.display = 'flex';
// Mettre à jour les références globales - convertir NodeList en Array
slides = Array.from(allSlides);
indicators = Array.from(allIndicators);
console.log('initCarousel: Found', slides.length, 'slides and', indicators.length, 'indicators');
// S'assurer que la première slide est active immédiatement
currentSlide = 0;
slides.forEach((slide, index) => {
if (index === 0) {
slide.classList.add('active');
slide.style.opacity = '1';
slide.style.zIndex = '2';
} else {
slide.classList.remove('active');
slide.style.opacity = '0';
slide.style.zIndex = '1';
}
});
if (indicators.length > 0) {
indicators.forEach((indicator, index) => {
if (index === 0) {
indicator.classList.add('active');
} else {
indicator.classList.remove('active');
}
});
}
// Démarrer le carrousel automatique immédiatement
console.log('Initializing carousel - starting automatic rotation...');
isPaused = false; // S'assurer que le carrousel n'est pas en pause
startCarousel();
// Gérer les événements de survol (une seule fois)
carouselContainer.addEventListener('mouseenter', function() {
if (!isPaused) {
pauseCarousel();
}
});
carouselContainer.addEventListener('mouseleave', function() {
// Ne reprendre que si l'utilisateur n'a pas mis en pause manuellement
if (!isPaused && !isUserInteracting && !pageVisibilityHidden) {
startCarousel();
}
});
// Gérer la visibilité de la page (pause quand la page est cachée)
document.addEventListener('visibilitychange', function() {
if (document.hidden) {
pageVisibilityHidden = true;
if (!isPaused) {
pauseCarousel();
}
} else {
pageVisibilityHidden = false;
// Reprendre seulement si l'utilisateur n'a pas mis en pause manuellement
if (!isPaused && !isUserInteracting) {
startCarousel();
}
}
});
carouselInitialized = true;
console.log('Carousel initialized with', slides.length, 'slides');
}
function startCarousel() {
// Nettoyer l'intervalle existant
clearInterval(carouselInterval);
// Ne pas démarrer si la page est cachée ou si l'utilisateur interagit
if (pageVisibilityHidden || isUserInteracting) {
return;
}
if (slides.length <= 1) {
console.log('Not enough slides to start carousel');
return;
}
// S'assurer que isPaused est false pour démarrer
isPaused = false;
const pauseBtn = document.getElementById('pauseBtn');
const pauseIcon = document.getElementById('pauseIcon');
if (pauseBtn) {
pauseBtn.classList.remove('playing');
if (pauseIcon) {
pauseIcon.textContent = '⏸';
pauseIcon.className = 'pause-icon-content';
pauseIcon.style.display = 'inline-block';
pauseIcon.style.color = 'white';
pauseIcon.style.fontSize = '22px';
pauseIcon.style.visibility = 'visible';
pauseIcon.style.opacity = '1';
}
}
console.log('Starting carousel automatically...');
carouselInterval = setInterval(() => {
// Vérifier les conditions avant de changer de slide
if (!isPaused && !isUserInteracting && !pageVisibilityHidden && slides.length > 0) {
// Utiliser la fonction interne nextSlide pour éviter de déclencher handleUserInteraction
currentSlide = (currentSlide + 1) % slides.length;
console.log('Auto slide:', currentSlide);
updateCarousel();
}
}, autoSlideDelay);
}
// Fonction pour gérer les interactions utilisateur
function handleUserInteraction() {
isUserInteracting = true;
// Nettoyer le timeout précédent s'il existe
if (userInteractionTimeout) {
clearTimeout(userInteractionTimeout);
}
// Reprendre le carrousel automatique après 3 secondes d'inactivité
userInteractionTimeout = setTimeout(() => {
isUserInteracting = false;
// Reprendre seulement si l'utilisateur n'a pas mis en pause manuellement
if (!isPaused && !pageVisibilityHidden) {
startCarousel();
}
}, 3000);
}
function pauseCarousel() {
isPaused = true;
clearInterval(carouselInterval);
// Nettoyer le timeout d'interaction utilisateur
if (userInteractionTimeout) {
clearTimeout(userInteractionTimeout);
userInteractionTimeout = null;
}
const pauseBtn = document.getElementById('pauseBtn');
const pauseIcon = document.getElementById('pauseIcon');
if (pauseBtn) {
pauseBtn.classList.add('playing');
if (pauseIcon) {
pauseIcon.textContent = '▶';
pauseIcon.className = 'pause-icon-content';
pauseIcon.style.display = 'inline-block';
pauseIcon.style.color = 'white';
pauseIcon.style.fontSize = '22px';
pauseIcon.style.visibility = 'visible';
pauseIcon.style.opacity = '1';
}
}
}
function resumeCarousel() {
isPaused = false;
isUserInteracting = false; // Réinitialiser le flag d'interaction
// Nettoyer le timeout d'interaction utilisateur
if (userInteractionTimeout) {
clearTimeout(userInteractionTimeout);
userInteractionTimeout = null;
}
const pauseBtn = document.getElementById('pauseBtn');
const pauseIcon = document.getElementById('pauseIcon');
if (pauseBtn) {
pauseBtn.classList.remove('playing');
if (pauseIcon) {
pauseIcon.textContent = '⏸';
pauseIcon.className = 'pause-icon-content';
pauseIcon.style.display = 'inline-block';
pauseIcon.style.color = 'white';
pauseIcon.style.fontSize = '22px';
pauseIcon.style.visibility = 'visible';
pauseIcon.style.opacity = '1';
}
}
// Ne reprendre que si la page est visible
if (!pageVisibilityHidden) {
startCarousel();
}
}
function toggleCarousel() {
const pauseBtn = document.getElementById('pauseBtn');
const pauseIcon = document.getElementById('pauseIcon');
if (isPaused) {
resumeCarousel();
} else {
pauseCarousel();
}
}
function nextSlide() {
if (slides.length === 0) {
console.warn('No slides available');
return;
}
currentSlide = (currentSlide + 1) % slides.length;
console.log('Next slide:', currentSlide);
updateCarousel();
}
function previousSlide() {
if (slides.length === 0) {
console.warn('No slides available');
return;
}
currentSlide = (currentSlide - 1 + slides.length) % slides.length;
console.log('Previous slide:', currentSlide);
updateCarousel();
}
// Fonction interne goToSlide (utilisée par window.goToSlide)
function goToSlide(index) {
if (slides.length === 0) {
console.warn('goToSlide: No slides available');
return;
}
if (index < 0 || index >= slides.length) {
console.warn('goToSlide: Invalid index', index, '. Valid range: 0 to', slides.length - 1);
return;
}
// Marquer comme interaction utilisateur
handleUserInteraction();
currentSlide = index;
console.log('goToSlide: Moving to slide', currentSlide, 'of', slides.length);
updateCarousel();
}
function updateCarousel() {
if (slides.length === 0) {
console.warn('No slides to update');
return;
}
console.log('updateCarousel: Updating to slide', currentSlide, 'of', slides.length, 'slides');
console.log('updateCarousel: Total indicators:', indicators.length);
// Masquer toutes les slides et réinitialiser leurs styles
slides.forEach((slide, index) => {
slide.classList.remove('active');
if (index === currentSlide) {
slide.classList.add('active');
slide.style.opacity = '1';
slide.style.zIndex = '2';
} else {
slide.style.opacity = '0';
slide.style.zIndex = '1';
}
});
// Mettre à jour tous les indicateurs - FORCER la mise à jour en deux passes distinctes
if (indicators.length > 0) {
console.log('updateCarousel: Updating', indicators.length, 'indicators, currentSlide:', currentSlide);
// Première passe : retirer active de TOUS les indicateurs
indicators.forEach((indicator) => {
indicator.classList.remove('active');
});
// Deuxième passe : ajouter active à l'indicateur correspondant à currentSlide
if (currentSlide >= 0 && currentSlide < indicators.length && indicators[currentSlide]) {
const activeIndicator = indicators[currentSlide];
activeIndicator.classList.add('active');
console.log('updateCarousel: Activated indicator', currentSlide);
// Vérification et forcer si nécessaire
if (!activeIndicator.classList.contains('active')) {
console.warn('updateCarousel: Class not added, forcing with setAttribute');
activeIndicator.setAttribute('class', activeIndicator.className + ' active');
}
} else {
console.error('updateCarousel: Invalid currentSlide', currentSlide, 'or indicator not found. Total indicators:', indicators.length);
}
} else {
console.warn('updateCarousel: No indicators available');
}
// Afficher la slide active
if (slides[currentSlide]) {
slides[currentSlide].classList.add('active');
slides[currentSlide].style.opacity = '1';
slides[currentSlide].style.zIndex = '2';
console.log('updateCarousel: Showing slide', currentSlide);
} else {
console.error('updateCarousel: Slide', currentSlide, 'not found. Total slides:', slides.length);
}
}
// Les fonctions globales sont définies au début du script
// Gestion du tri des produits via API Symfony
console.log('=== INITIALIZING PRODUCT SORTING ===');
console.log('Shop ID:', {{ shop.id }});
// Fonction de tri via AJAX - RENDUE GLOBALE
window.sortProducts = function (sortValue) {
console.log('=== SORT PRODUCTS CALLED ===');
console.log('Sort value:', sortValue);
const productsContainer = document.getElementById('products-container');
console.log('Products container:', productsContainer);
if (! productsContainer) {
console.error('Products container not found!');
return;
}
if (! sortValue) {
console.log('Resetting to original order');
// Recharger la page pour revenir à l'ordre original
window.location.reload();
return;
}
console.log('Showing loading spinner...');
// Afficher un indicateur de chargement
productsContainer.innerHTML = '<div class=\"col-12 text-center py-5\"><div class=\"spinner-border text-primary\" role=\"status\"><span class=\"visually-hidden\">Chargement...</span></div><p class=\"mt-3\">Tri des produits en cours...</p></div>';
// Récupérer l'ID de la boutique
const shopId = {{ shop.id }};
console.log('Shop ID for request:', shopId);
const url = \"{{ path('ui_api_shop_products_sort', {id: '__SHOP_ID__'}) }}\".replace('__SHOP_ID__', shopId);
console.log('Request URL:', url);
const requestData = {
sortBy: sortValue
};
console.log('Request data:', requestData);
// Envoyer la requête AJAX
console.log('Sending AJAX request...');
fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-Requested-With': 'XMLHttpRequest'
},
body: JSON.stringify(requestData)
}).then(response => {
console.log('Response received:', response);
console.log('Response status:', response.status);
return response.json();
}).then(data => {
console.log('Sort response data:', data);
if (data.success) {
console.log('Sort successful, updating content...');
// Mettre à jour le contenu avec le HTML retourné
productsContainer.innerHTML = data.html;
// Mettre à jour le compteur de produits
const productCount = document.querySelector('.product-count');
if (productCount) {
productCount.textContent = data.count;
}
console.log('Products sorted successfully!');
} else {
console.error('Sort failed:', data.message);
showNotification('Erreur lors du tri: ' + data.message, 'error');
// Recharger la page en cas d'erreur
window.location.reload();
}
}).catch(error => {
console.error('Sort request failed:', error);
showNotification('Erreur de connexion lors du tri', 'error');
// Recharger la page en cas d'erreur
window.location.reload();
});
};
// Attendre que le DOM soit chargé
console.log('Setting up event listeners...');
setTimeout(() => {
const sortSelect = document.getElementById('product-sort');
console.log('Sort select element:', sortSelect);
if (sortSelect) {
console.log('Adding change event listener...');
sortSelect.addEventListener('change', function () {
console.log('=== SELECT CHANGE EVENT TRIGGERED ===');
console.log('Selected value:', this.value);
console.log('Calling sortProducts...');
window.sortProducts(this.value);
});
console.log('Event listener added successfully');
} else {
console.error('Sort select element not found!');
console.log('Available elements with ID containing \"sort\":', document.querySelectorAll('[id*=\"sort\"]'));
console.log('Available elements with class containing \"form-select\":', document.querySelectorAll('.form-select'));
}
}, 100);
// Gestion du bouton \"Suivre\"
const followBtn = document.querySelector('.btn-shop');
if (followBtn) {
followBtn.addEventListener('click', function () {
if (this.innerHTML.includes('Suivre')) {
this.innerHTML = '<i class=\"lnr lnr-heart me-1\"></i> Suivi';
this.classList.remove('btn-shop');
this.classList.add('btn-success');
} else {
this.innerHTML = '<i class=\"lnr lnr-heart me-1\"></i> Suivre';
this.classList.remove('btn-success');
this.classList.add('btn-shop');
}
});
}
});
\t</script>
{% endblock %}
", "home/shop.html.twig", "/home/u540977899/domains/maketou-ht.com/public_html/templates/home/shop.html.twig");
}
}