<?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_c912687df9963faf4cc570ddc8831a9d 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/* 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 - même largeur que shop-header-content */
\t\t.shop-carousel-ebay {
\t\t\twidth: 100%;
\t\t\theight: 400px;
\t\t\tposition: relative;
\t\t\toverflow: hidden;
\t\t\tbackground: #f8f9fa;
\t\t\tmargin: 0 20px 0 20px;
\t\t\tborder-radius: 8px;
\t\t\tbox-sizing: border-box;
\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.5s ease-in-out;
\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 intégrés */
\t\t.carousel-controls-ebay {
\t\t\tposition: absolute;
\t\t\ttop: 50%;
\t\t\tleft: 0;
\t\t\tright: 0;
\t\t\ttransform: translateY(-50%);
\t\t\tdisplay: flex;
\t\t\tjustify-content: space-between;
\t\t\tpadding: 0 20px;
\t\t\tz-index: 10;
\t\t}
\t\t.carousel-btn-ebay {
\t\t\twidth: 50px;
\t\t\theight: 50px;
\t\t\tborder: none;
\t\t\tborder-radius: 50%;
\t\t\tbackground: rgba(0, 0, 0, 0.7);
\t\t\tcolor: white;
\t\t\tfont-size: 18px;
\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\topacity: 0;
\t\t}
\t\t.shop-carousel-ebay:hover .carousel-btn-ebay {
\t\t\topacity: 1;
\t\t}
\t\t.carousel-btn-ebay:hover {
\t\t\tbackground: rgba(0, 0, 0, 0.9);
\t\t\ttransform: scale(1.1);
\t\t}
\t\t.carousel-btn-ebay:disabled {
\t\t\topacity: 0.3;
\t\t\tcursor: not-allowed;
\t\t\ttransform: none;
\t\t}
\t\t.carousel-btn-ebay.pause-btn {
\t\t\tbackground: rgba(220, 53, 69, 0.8);
\t\t}
\t\t.carousel-btn-ebay.pause-btn:hover {
\t\t\tbackground: rgba(220, 53, 69, 1);
\t\t}
\t\t/* Indicateurs eBay-style */
\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: 8px;
\t\t\tz-index: 10;
\t\t}
\t\t.carousel-indicator-ebay {
\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: 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;
\t\t\tborder-color: white;
\t\t\ttransform: scale(1.2);
\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: 80px;
\t\t\theight: 80px;
\t\t\tborder-radius: 8px;
\t\t\tobject-fit: cover;
\t\t\tborder: 3px solid white;
\t\t\tbox-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
\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: 10px 0;
\t\t}
\t\t.shop-name-section {
\t\t\tmargin-bottom: 8px;
\t\t}
\t\t.shop-name-ebay {
\t\t\tfont-size: 1.8rem;
\t\t\tfont-weight: 600;
\t\t\tcolor: #333;
\t\t\tmargin: 0 15px 0 0;
\t\t\tdisplay: inline-block;
\t\t}
\t\t.verified-text {
\t\t\tcolor: #28a745;
\t\t\tfont-size: 0.9rem;
\t\t\tfont-weight: 500;
\t\t}
\t\t.shop-category-section {
\t\t\tmargin-bottom: 12px;
\t\t}
\t\t.shop-category-ebay {
\t\t\tbackground: #f8f9fa;
\t\t\tcolor: #666;
\t\t\tpadding: 4px 12px;
\t\t\tborder-radius: 16px;
\t\t\tfont-size: 0.85rem;
\t\t\tfont-weight: 500;
\t\t}
\t\t.shop-stats-ebay {
\t\t\tmargin-top: 15px;
\t\t}
\t\t.stat-row {
\t\t\tdisplay: flex;
\t\t\tgap: 30px;
\t\t\tmargin-bottom: 10px;
\t\t}
\t\t.stat-item-ebay {
\t\t\tdisplay: flex;
\t\t\tflex-direction: column;
\t\t\talign-items: flex-start;
\t\t}
\t\t.stat-percentage {
\t\t\tfont-size: 1.2rem;
\t\t\tfont-weight: 700;
\t\t\tcolor: #28a745;
\t\t\tline-height: 1;
\t\t}
\t\t.stat-number-ebay {
\t\t\tfont-size: 1.2rem;
\t\t\tfont-weight: 700;
\t\t\tcolor: #333;
\t\t\tline-height: 1;
\t\t}
\t\t.stat-label-ebay {
\t\t\tfont-size: 0.8rem;
\t\t\tcolor: #666;
\t\t\ttext-transform: uppercase;
\t\t\tletter-spacing: 0.5px;
\t\t\tmargin-top: 2px;
\t\t}
\t\t.shop-additional-info {
\t\t\tdisplay: flex;
\t\t\tgap: 20px;
\t\t\tfont-size: 0.85rem;
\t\t\tcolor: #666;
\t\t}
\t\t.member-since {
\t\t\tfont-weight: 400;
\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: 140px;
\t\t}
\t\t.btn-ebay {
\t\t\tpadding: 8px 16px;
\t\t\tfont-size: 0.9rem;
\t\t\tfont-weight: 500;
\t\t\tborder-radius: 4px;
\t\t\ttext-align: center;
\t\t\ttransition: all 0.3s ease;
\t\t\tborder-width: 1px;
\t\t}
\t\t.btn-ebay:hover {
\t\t\ttransform: translateY(-1px);
\t\t\tbox-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
\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@media(max-width: 991.98px) {
\t\t\t.shop-carousel-ebay {
\t\t\t\tmargin: 0 10px;
\t\t\t\theight: 300px;
\t\t\t}
\t\t\t
\t\t\t.shop-header-content {
\t\t\t\tpadding: 15px;
\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: 15px;
\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: 250px;
\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\tpadding: 0 10px;
\t\t\t\tbottom: 15px;
\t\t\t}
\t\t\t.carousel-btn-ebay {
\t\t\t\twidth: 35px;
\t\t\t\theight: 35px;
\t\t\t\tfont-size: 14px;
\t\t\t}
\t\t\t.carousel-indicators-ebay {
\t\t\t\tbottom: 10px;
\t\t\t\tgap: 6px;
\t\t\t}
\t\t\t
\t\t\t.carousel-indicator-ebay {
\t\t\t\twidth: 10px;
\t\t\t\theight: 10px;
\t\t\t}
\t\t\t.shop-header-content {
\t\t\t\tpadding: 15px;
\t\t\t\tmargin: 0;
\t\t\t}
\t\t\t
\t\t\t.shop-header-content .container {
\t\t\t\tpadding-left: 15px;
\t\t\t\tpadding-right: 15px;
\t\t\t}
\t\t\t.shop-avatar {
\t\t\t\twidth: 60px;
\t\t\t\theight: 60px;
\t\t\t}
\t\t\t.shop-title {
\t\t\t\tfont-size: 1.2rem;
\t\t\t}
\t\t\t.shop-actions-row {
\t\t\t\tflex-direction: column;
\t\t\t\tgap: 10px;
\t\t\t}
\t\t\t/* Styles eBay-style responsive */
\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-right: 0;
\t\t\t\tmargin-bottom: 15px;
\t\t\t\talign-self: center;
\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.shop-name-ebay {
\t\t\t\tfont-size: 1.5rem;
\t\t\t\tmargin-right: 0;
\t\t\t\tmargin-bottom: 10px;
\t\t\t}
\t\t\t.stat-row {
\t\t\t\tjustify-content: center;
\t\t\t\tgap: 15px;
\t\t\t\tflex-wrap: wrap;
\t\t\t}
\t\t\t
\t\t\t.stat-item-ebay {
\t\t\t\tfont-size: 0.9rem;
\t\t\t\tmin-width: 100px;
\t\t\t}
\t\t\t.shop-additional-info {
\t\t\t\tjustify-content: center;
\t\t\t\tflex-wrap: wrap;
\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: 15px;
\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\tmargin-bottom: 10px;
\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: 200px;
\t\t\t\tmargin: 0;
\t\t\t}
\t\t\t
\t\t\t.shop-header-content {
\t\t\t\tmargin: 0;
\t\t\t\tpadding: 15px;
\t\t\t}
\t\t\t
\t\t\t.shop-name-ebay {
\t\t\t\tfont-size: 1.3rem;
\t\t\t}
\t\t\t
\t\t\t.stat-row {
\t\t\t\tgap: 10px;
\t\t\t\tflex-direction: column;
\t\t\t}
\t\t\t
\t\t\t.stat-item-ebay {
\t\t\t\tfont-size: 0.85rem;
\t\t\t\twidth: 100%;
\t\t\t}
\t\t\t
\t\t\t.carousel-btn-ebay {
\t\t\t\twidth: 25px;
\t\t\t\theight: 25px;
\t\t\t\tfont-size: 10px;
\t\t\t}
\t\t\t
\t\t\t.carousel-indicators-ebay {
\t\t\t\tbottom: 8px;
\t\t\t}
\t\t\t
\t\t\t.carousel-indicator-ebay {
\t\t\t\twidth: 6px;
\t\t\t\theight: 6px;
\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 1563
/**
* @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 1564
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 1571
$context["allBannerImages"] = CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "getAllBannerImages", [], "method", false, false, false, 1571);
// line 1572
yield "\t\t\t\t";
if ((Twig\Extension\CoreExtension::length($this->env->getCharset(), ($context["allBannerImages"] ?? null)) > 0)) {
// line 1573
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 1574
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, 1574)) && $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 1578
yield "\t\t\t\t";
} else {
// line 1579
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 1584
yield "\t\t\t</div>
\t\t\t<!-- Contrôles eBay-style intégrés - uniquement si plusieurs images de bannière -->
\t\t\t";
// line 1587
$context["totalBannerImages"] = Twig\Extension\CoreExtension::length($this->env->getCharset(), ($context["allBannerImages"] ?? null));
// line 1588
yield "\t\t\t";
if ((($context["totalBannerImages"] ?? null) > 1)) {
// line 1589
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\">
\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\">
\t\t\t\t\t\t<i class=\"lnr lnr-pause\" id=\"pauseIcon\"></i>
\t\t\t\t\t</button>
\t\t\t\t\t<button class=\"carousel-btn-ebay next-btn\" onclick=\"nextSlide()\" id=\"nextBtn\">
\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 - uniquement pour les images de bannière -->
\t\t\t\t<div class=\"carousel-indicators-ebay\">
\t\t\t\t\t";
// line 1603
$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 1604
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, 1604)) && $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, 1604), "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 1606
yield "\t\t\t\t</div>
\t\t\t";
}
// line 1608
yield "\t\t</div>
\t\t<!-- Contenu de la boutique eBay-style -->
\t\t<div class=\"shop-header-content\">
\t\t\t<div
\t\t\t\tclass=\"row align-items-center\">
\t\t\t\t<!-- Logo de la boutique -->
\t\t\t\t<div class=\"col-auto\">
\t\t\t\t\t<div class=\"shop-avatar-container-ebay\">
\t\t\t\t\t\t";
// line 1617
if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "logo", [], "any", false, false, false, 1617)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
// line 1618
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, 1618)), "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, 1618), "html", null, true);
yield "\" class=\"shop-avatar-ebay\">
\t\t\t\t\t\t";
} else {
// line 1620
yield "\t\t\t\t\t\t\t<div class=\"shop-avatar-ebay\" style=\"background: #f0f0f0; display: flex; align-items: center; justify-content: center; font-size: 2rem; color: #666;\">
\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 1624
yield "\t\t\t\t\t\t";
if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "isVerified", [], "any", false, false, false, 1624)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
// line 1625
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 1629
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\">
\t\t\t\t\t<div
\t\t\t\t\t\tclass=\"shop-info-ebay\">
\t\t\t\t\t\t<!-- Nom de la boutique -->
\t\t\t\t\t\t<div class=\"shop-name-section\">
\t\t\t\t\t\t\t<h1 class=\"shop-name-ebay\">";
// line 1638
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "name", [], "any", false, false, false, 1638), "html", null, true);
yield "</h1>
\t\t\t\t\t\t\t";
// line 1639
if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "isVerified", [], "any", false, false, false, 1639)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
// line 1640
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 1644
yield "\t\t\t\t\t\t</div>
\t\t\t\t\t\t<!-- Catégorie -->
\t\t\t\t\t\t";
// line 1647
if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "shopCategory", [], "any", false, false, false, 1647)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
// line 1648
yield "\t\t\t\t\t\t\t<div class=\"shop-category-section\">
\t\t\t\t\t\t\t\t<span class=\"shop-category-ebay\">";
// line 1649
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, 1649), "name", [], "any", false, false, false, 1649), "html", null, true);
yield "</span>
\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t";
}
// line 1652
yield "
\t\t\t\t\t\t<!-- Statistiques eBay-style -->
\t\t\t\t\t\t<div class=\"shop-stats-ebay\">
\t\t\t\t\t\t\t<div class=\"stat-row\">
\t\t\t\t\t\t\t\t";
// line 1656
if ((CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "averageRating", [], "any", false, false, false, 1656) > 0)) {
// line 1657
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 1658
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, 1658), 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 1662
yield "
\t\t\t\t\t\t\t\t";
// line 1663
if ((CoreExtension::getAttribute($this->env, $this->source, ($context["stats"] ?? null), "totalProductSales", [], "any", false, false, false, 1663) > 0)) {
// line 1664
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 1665
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, 1665)), "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 1669
yield "
\t\t\t\t\t\t\t\t";
// line 1670
if ((CoreExtension::getAttribute($this->env, $this->source, ($context["followStats"] ?? null), "active_follows", [], "any", false, false, false, 1670) > 0)) {
// line 1671
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 1672
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, 1672)), "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 1676
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=\"row\">
\t\t\t\t\t\t\t\t\t<div class=\"col-12\">
\t\t\t\t\t\t\t\t\t\t<span class=\"member-since col-md-3 col-sm-6 w-100\">
\t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-thumbs-up\"></i>
\t\t\t\t\t\t\t\t\t\t\t7% positive feedback</span>
\t\t\t\t\t\t\t\t\t\t<span class=\"member-since col-md-3 col-sm-6 w-100\">
\t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-cart\"></i>
\t\t\t\t\t\t\t\t\t\t\t29 produits vendus</span>
\t\t\t\t\t\t\t\t\t\t<span class=\"member-since col-md-3 col-sm-6 w-100\">
\t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-star\"></i>
\t\t\t\t\t\t\t\t\t\t\t150 followers</span>
\t\t\t\t\t\t\t\t\t\t<span class=\"member-since col-md-3 w-100\">
\t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-history\"></i>
\t\t\t\t\t\t\t\t\t\t\tCréé depuis
\t\t\t\t\t\t\t\t\t\t\t";
// line 1694
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, 1694), "M Y"), "html", null, true);
yield "</span>
\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t</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-auto\">
\t\t\t\t\t<div class=\"shop-actions-ebay\">
\t\t\t\t\t\t";
// line 1705
if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, ($context["app"] ?? null), "user", [], "any", false, false, false, 1705)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
// line 1706
yield "\t\t\t\t\t\t\t<button id=\"follow-button\" class=\"btn btn-primary btn-ebay ";
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, 1706), "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 1708
if ((($tmp = ($context["isFollowing"] ?? null)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
// line 1709
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 1711
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 1713
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 1716
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\">
\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 1720
yield "
\t\t\t\t\t\t<button class=\"btn btn-outline-secondary btn-ebay\" onclick=\"shareShop()\">
\t\t\t\t\t\t\t<i class=\"lnr lnr-bubble me-1\"></i> Partager
\t\t\t\t\t\t</button>
\t\t\t\t\t\t<button class=\"btn btn-outline-danger btn-ebay\" onclick=\"reportShop()\">
\t\t\t\t\t\t\t<i class=\"lnr lnr-flag me-1\"></i> Signaler
\t\t\t\t\t\t</button>
\t\t\t\t\t\t";
// line 1729
if ((($tmp = ($context["canEdit"] ?? null)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
// line 1730
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, 1730)]), "html", null, true);
yield "\" class=\"btn btn-outline-primary btn-ebay\">
\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 1734
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 1761
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "getVisibleReviewsCount", [], "method", false, false, false, 1761), "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 1772
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "name", [], "any", false, false, false, 1772), "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 1775
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 1791
if ((Twig\Extension\CoreExtension::length($this->env->getCharset(), ($context["products"] ?? null)) > 0)) {
// line 1792
yield "\t\t\t\t\t\t\t<div class=\"row\" id=\"products-container\">
\t\t\t\t\t\t\t\t";
// line 1793
$context['_parent'] = $context;
$context['_seq'] = CoreExtension::ensureTraversable(($context["products"] ?? null));
$context['loop'] = [
'parent' => $context['_parent'],
'index0' => 0,
'index' => 1,
'first' => true,
];
if (is_array($context['_seq']) || (is_object($context['_seq']) && $context['_seq'] instanceof \Countable)) {
$length = count($context['_seq']);
$context['loop']['revindex0'] = $length - 1;
$context['loop']['revindex'] = $length;
$context['loop']['length'] = $length;
$context['loop']['last'] = 1 === $length;
}
foreach ($context['_seq'] as $context["_key"] => $context["product"]) {
// line 1794
yield "\t\t\t\t\t\t\t\t\t<div class=\"col-xl-3 col-lg-4 col-md-6 col-sm-6 mb-4 d-flex align-items-stretch 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, 1794), "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, 1794)), "html", null, true);
yield "\" data-views=\"";
yield (((CoreExtension::getAttribute($this->env, $this->source, $context["product"], "viewCount", [], "any", true, true, false, 1794) && !(null === CoreExtension::getAttribute($this->env, $this->source, $context["product"], "viewCount", [], "any", false, false, false, 1794)))) ? ($this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["product"], "viewCount", [], "any", false, false, false, 1794), "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, 1794), "Y-m-d"), "html", null, true);
yield "\">
\t\t\t\t\t\t\t\t\t\t";
// line 1795
yield from $this->load("home/_single_product_card.html.twig", 1795)->unwrap()->yield(CoreExtension::merge($context, ["product" => $context["product"]]));
// line 1796
yield "\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t";
++$context['loop']['index0'];
++$context['loop']['index'];
$context['loop']['first'] = false;
if (isset($context['loop']['revindex0'], $context['loop']['revindex'])) {
--$context['loop']['revindex0'];
--$context['loop']['revindex'];
$context['loop']['last'] = 0 === $context['loop']['revindex0'];
}
}
$_parent = $context['_parent'];
unset($context['_seq'], $context['_key'], $context['product'], $context['_parent'], $context['loop']);
$context = array_intersect_key($context, $_parent) + $_parent;
// line 1798
yield "\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t";
} else {
// line 1800
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 1806
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 1828
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "name", [], "any", false, false, false, 1828), "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 1832
if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "description", [], "any", false, false, false, 1832)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
// line 1833
yield "\t\t\t\t\t\t\t\t\t<p class=\"card-text\">";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "description", [], "any", false, false, false, 1833), "html", null, true);
yield "</p>
\t\t\t\t\t\t\t\t";
} else {
// line 1835
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 1837
yield "
\t\t\t\t\t\t\t\t";
// line 1838
if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "businessHours", [], "any", false, false, false, 1838)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
// line 1839
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 1842
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "businessHours", [], "any", false, false, false, 1842), "html", null, true);
yield "</p>
\t\t\t\t\t\t\t\t";
}
// line 1844
yield "
\t\t\t\t\t\t\t\t";
// line 1845
if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "returnPolicy", [], "any", false, false, false, 1845)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
// line 1846
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 1849
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "returnPolicy", [], "any", false, false, false, 1849), "html", null, true);
yield "</p>
\t\t\t\t\t\t\t\t";
}
// line 1851
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 1865
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, ($context["stats"] ?? null), "activeProducts", [], "any", false, false, false, 1865), "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 1871
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, ($context["stats"] ?? null), "shopViews", [], "any", false, false, false, 1871), "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 1892
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "getAverageRating", [], "method", false, false, false, 1892), "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 1894
$context['_parent'] = $context;
$context['_seq'] = CoreExtension::ensureTraversable(range(1, 5));
foreach ($context['_seq'] as $context["_key"] => $context["i"]) {
// line 1895
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, 1895))) {
} 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 1897
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 1903
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "getVisibleReviewsCount", [], "method", false, false, false, 1903), "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 1909
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, 1909) / 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 1919
if ((Twig\Extension\CoreExtension::length($this->env->getCharset(), CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "reviews", [], "any", false, false, false, 1919)) > 0)) {
// line 1920
yield "\t\t\t\t\t\t\t\t<div class=\"reviews-list\">
\t\t\t\t\t\t\t\t\t";
// line 1921
$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, 1921), 0, 5));
foreach ($context['_seq'] as $context["_key"] => $context["review"]) {
// line 1922
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, 1922)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
// line 1923
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 1930
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, 1930), "userIdentifier", [], "any", false, false, false, 1930), "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 1932
$context['_parent'] = $context;
$context['_seq'] = CoreExtension::ensureTraversable(range(1, 5));
foreach ($context['_seq'] as $context["_key"] => $context["i"]) {
// line 1933
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, 1933))) {
} 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 1935
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 1939
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, 1939), "d/m/Y"), "html", null, true);
yield "</span>
\t\t\t\t\t\t\t\t\t\t\t\t\t\t";
// line 1940
if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, $context["review"], "isVerified", [], "any", false, false, false, 1940)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
// line 1941
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 1946
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 1949
if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, $context["review"], "comment", [], "any", false, false, false, 1949)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
// line 1950
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 1951
yield (((Twig\Extension\CoreExtension::length($this->env->getCharset(), CoreExtension::getAttribute($this->env, $this->source, $context["review"], "comment", [], "any", false, false, false, 1951)) > 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, 1951), 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, 1951), "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 1954
yield "\t\t\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t\t\t";
}
// line 1956
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 1957
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 1960
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, 1960)]), "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 1965
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 1971
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 1980
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, 1980)]), "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 2053
yield (((Twig\Extension\CoreExtension::length($this->env->getCharset(), CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "reviews", [], "any", false, false, false, 2053)) > 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, 2053), function ($__r__) use ($context, $macros) { $context["r"] = $__r__; return CoreExtension::getAttribute($this->env, $this->source, ($context["r"] ?? null), "rating", [], "any", false, false, false, 2053); }), 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, 2053))), 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 2055
$context["avgRating"] = (((Twig\Extension\CoreExtension::length($this->env->getCharset(), CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "reviews", [], "any", false, false, false, 2055)) > 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, 2055), function ($__r__) use ($context, $macros) { $context["r"] = $__r__; return CoreExtension::getAttribute($this->env, $this->source, ($context["r"] ?? null), "rating", [], "any", false, false, false, 2055); }), 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, 2055)))) : (0));
// line 2056
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 2057
yield "\t\t\t\t\t\t\t\t\t";
if (($context["i"] <= ($context["avgRating"] ?? null))) {
// line 2058
yield "\t\t\t\t\t\t\t\t\t\t★
\t\t\t\t\t\t\t\t\t";
} elseif ((( // line 2059
$context["i"] - ($context["avgRating"] ?? null)) < 1)) {
// line 2060
yield "\t\t\t\t\t\t\t\t\t\t☆
\t\t\t\t\t\t\t\t\t";
} else {
// line 2062
yield "\t\t\t\t\t\t\t\t\t\t☆
\t\t\t\t\t\t\t\t\t";
}
// line 2064
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 2065
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 2068
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, 2068)), "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 2071
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, 2071), function ($__r__) use ($context, $macros) { $context["r"] = $__r__; return CoreExtension::getAttribute($this->env, $this->source, ($context["r"] ?? null), "isVerified", [], "any", false, false, false, 2071); })), "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 2077
$context['_parent'] = $context;
$context['_seq'] = CoreExtension::ensureTraversable(range(5, 1));
foreach ($context['_seq'] as $context["_key"] => $context["rating"]) {
// line 2078
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, 2078), function ($__r__) use ($context, $macros) { $context["r"] = $__r__; return (CoreExtension::getAttribute($this->env, $this->source, ($context["r"] ?? null), "rating", [], "any", false, false, false, 2078) == $context["rating"]); }));
// line 2079
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, 2079)) > 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, 2079))) * 100)) : (0));
// line 2080
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 2081
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 2083
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 2085
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 2088
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 2095
if ((Twig\Extension\CoreExtension::length($this->env->getCharset(), CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "reviews", [], "any", false, false, false, 2095)) > 0)) {
// line 2096
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, 2096), 0, 3));
foreach ($context['_seq'] as $context["_key"] => $context["review"]) {
// line 2097
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 2101
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, 2101), "firstName", [], "any", false, false, false, 2101))), 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, 2101), "email", [], "any", false, false, false, 2101)))), "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 2104
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, 2104), "firstName", [], "any", true, true, false, 2104)) ? (Twig\Extension\CoreExtension::default(CoreExtension::getAttribute($this->env, $this->source, CoreExtension::getAttribute($this->env, $this->source, $context["review"], "user", [], "any", false, false, false, 2104), "firstName", [], "any", false, false, false, 2104), "Utilisateur")) : ("Utilisateur")), "html", null, true);
yield "</h6>
\t\t\t\t\t\t\t\t\t\t\t<small>";
// line 2105
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["review"], "getTimeAgo", [], "method", false, false, false, 2105), "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 2109
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["review"], "getRatingStars", [], "method", false, false, false, 2109), "html", null, true);
yield "</div>
\t\t\t\t\t\t\t\t\t\t";
// line 2110
if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, $context["review"], "isVerified", [], "any", false, false, false, 2110)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
// line 2111
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 2113
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 2116
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, 2116), 0, 150), "html", null, true);
yield "
\t\t\t\t\t\t\t\t\t";
// line 2117
if ((Twig\Extension\CoreExtension::length($this->env->getCharset(), CoreExtension::getAttribute($this->env, $this->source, $context["review"], "comment", [], "any", false, false, false, 2117)) > 150)) {
yield "...
\t\t\t\t\t\t\t\t\t";
}
// line 2119
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 2122
yield "
\t\t\t\t\t\t<div class=\"text-center mt-3\">
\t\t\t\t\t\t\t<a href=\"";
// line 2124
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, 2124)]), "html", null, true);
yield "\" class=\"btn btn-outline-primary\">
\t\t\t\t\t\t\t\tVoir tous les avis (";
// line 2125
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, 2125)), "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 2129
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 2133
if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, ($context["app"] ?? null), "user", [], "any", false, false, false, 2133)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
// line 2134
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, 2134)]), "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 2139
yield "\t\t\t\t\t\t</div>
\t\t\t\t\t";
}
// line 2141
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 2148
/**
* @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 2149
yield "\t<script>
\t\tdocument.addEventListener('DOMContentLoaded', function () { // Initialisation du carrousel
initCarousel();
// 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 2195
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 2257
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "name", [], "any", false, false, false, 2257), "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 2273
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "name", [], "any", false, false, false, 2273), "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 2329
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "id", [], "any", false, false, false, 2329), "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
let currentSlide = 0;
let carouselInterval;
let isPaused = false;
let slides = [];
let indicators = [];
function initCarousel() {
// 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 indicators = carouselContainer.querySelector('.carousel-indicators-ebay');
if (controls) controls.style.display = 'none';
if (indicators) indicators.style.display = 'none';
return;
}
// Si une seule image, masquer les contrôles
if (allSlides.length <= 1) {
const controls = carouselContainer.querySelector('.carousel-controls-ebay');
const indicators = carouselContainer.querySelector('.carousel-indicators-ebay');
if (controls) controls.style.display = 'none';
if (indicators) indicators.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 indicators = carouselContainer.querySelector('.carousel-indicators-ebay');
if (controls) controls.style.display = 'flex';
if (indicators) indicators.style.display = 'flex';
// Mettre à jour les références globales
slides = allSlides;
indicators = allIndicators;
// S'assurer que la première slide est active
updateCarousel();
// Démarrer le carrousel automatique
startCarousel();
// Gérer les événements de survol
carouselContainer.addEventListener('mouseenter', pauseCarousel);
carouselContainer.addEventListener('mouseleave', () => {
if (!isPaused) startCarousel();
});
}
function startCarousel() {
// Nettoyer l'intervalle existant
clearInterval(carouselInterval);
if (slides.length <= 1) return;
carouselInterval = setInterval(() => {
if (!isPaused && slides.length > 0) {
nextSlide();
}
}, 4000); // Change toutes les 4 secondes
}
function pauseCarousel() {
isPaused = true;
clearInterval(carouselInterval);
const pauseIcon = document.getElementById('pauseIcon');
if (pauseIcon) {
pauseIcon.className = 'lnr lnr-play';
}
}
function resumeCarousel() {
isPaused = false;
const pauseIcon = document.getElementById('pauseIcon');
if (pauseIcon) {
pauseIcon.className = 'lnr lnr-pause';
}
startCarousel();
}
function toggleCarousel() {
if (isPaused) {
resumeCarousel();
} else {
pauseCarousel();
}
}
function nextSlide() {
if (slides.length === 0) return;
currentSlide = (currentSlide + 1) % slides.length;
updateCarousel();
}
function previousSlide() {
if (slides.length === 0) return;
currentSlide = (currentSlide - 1 + slides.length) % slides.length;
updateCarousel();
}
function goToSlide(index) {
if (slides.length === 0) return;
if (index < 0 || index >= slides.length) return;
currentSlide = index;
updateCarousel();
}
function updateCarousel() {
if (slides.length === 0 || indicators.length === 0) return;
// Masquer toutes les slides
slides.forEach(slide => slide.classList.remove('active'));
indicators.forEach(indicator => indicator.classList.remove('active'));
// Afficher la slide active
if (slides[currentSlide]) {
slides[currentSlide].classList.add('active');
}
if (indicators[currentSlide]) {
indicators[currentSlide].classList.add('active');
}
}
// Fonctions globales pour les boutons
window.nextSlide = nextSlide;
window.previousSlide = previousSlide;
window.goToSlide = goToSlide;
window.toggleCarousel = toggleCarousel;
// Gestion du tri des produits via API Symfony
console.log('=== INITIALIZING PRODUCT SORTING ===');
console.log('Shop ID:', ";
// line 2501
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "id", [], "any", false, false, false, 2501), "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 2528
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, ($context["shop"] ?? null), "id", [], "any", false, false, false, 2528), "html", null, true);
yield ";
console.log('Shop ID for request:', shopId);
const url = \"";
// line 2531
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...');
// Ecouter l'événement change avec jQuery (nécessaire à cause de nice-select)
if (typeof \$ !== 'undefined') {
\$('#product-sort').on('change', function() {
console.log('=== SELECT CHANGE EVENT TRIGGERED (jQuery) ===');
if(window.sortProducts) window.sortProducts(this.value);
});
}
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 ( 3153 => 2531, 3147 => 2528, 3117 => 2501, 2942 => 2329, 2883 => 2273, 2864 => 2257, 2799 => 2195, 2751 => 2149, 2738 => 2148, 2722 => 2141, 2718 => 2139, 2709 => 2134, 2707 => 2133, 2701 => 2129, 2694 => 2125, 2690 => 2124, 2686 => 2122, 2678 => 2119, 2673 => 2117, 2669 => 2116, 2664 => 2113, 2660 => 2111, 2658 => 2110, 2654 => 2109, 2647 => 2105, 2643 => 2104, 2637 => 2101, 2631 => 2097, 2626 => 2096, 2624 => 2095, 2615 => 2088, 2606 => 2085, 2601 => 2083, 2596 => 2081, 2593 => 2080, 2590 => 2079, 2587 => 2078, 2583 => 2077, 2574 => 2071, 2568 => 2068, 2563 => 2065, 2557 => 2064, 2553 => 2062, 2549 => 2060, 2547 => 2059, 2544 => 2058, 2541 => 2057, 2536 => 2056, 2534 => 2055, 2529 => 2053, 2453 => 1980, 2442 => 1971, 2434 => 1965, 2426 => 1960, 2421 => 1957, 2415 => 1956, 2411 => 1954, 2405 => 1951, 2402 => 1950, 2400 => 1949, 2395 => 1946, 2388 => 1941, 2386 => 1940, 2382 => 1939, 2376 => 1935, 2364 => 1933, 2360 => 1932, 2355 => 1930, 2346 => 1923, 2343 => 1922, 2339 => 1921, 2336 => 1920, 2334 => 1919, 2321 => 1909, 2312 => 1903, 2304 => 1897, 2292 => 1895, 2288 => 1894, 2283 => 1892, 2259 => 1871, 2250 => 1865, 2234 => 1851, 2229 => 1849, 2224 => 1846, 2222 => 1845, 2219 => 1844, 2214 => 1842, 2209 => 1839, 2207 => 1838, 2204 => 1837, 2200 => 1835, 2194 => 1833, 2192 => 1832, 2185 => 1828, 2161 => 1806, 2153 => 1800, 2149 => 1798, 2134 => 1796, 2132 => 1795, 2121 => 1794, 2104 => 1793, 2101 => 1792, 2099 => 1791, 2080 => 1775, 2074 => 1772, 2060 => 1761, 2031 => 1734, 2023 => 1730, 2021 => 1729, 2010 => 1720, 2002 => 1716, 1997 => 1713, 1993 => 1711, 1989 => 1709, 1987 => 1708, 1975 => 1706, 1973 => 1705, 1959 => 1694, 1939 => 1676, 1932 => 1672, 1929 => 1671, 1927 => 1670, 1924 => 1669, 1917 => 1665, 1914 => 1664, 1912 => 1663, 1909 => 1662, 1902 => 1658, 1899 => 1657, 1897 => 1656, 1891 => 1652, 1885 => 1649, 1882 => 1648, 1880 => 1647, 1875 => 1644, 1869 => 1640, 1867 => 1639, 1863 => 1638, 1852 => 1629, 1846 => 1625, 1843 => 1624, 1837 => 1620, 1829 => 1618, 1827 => 1617, 1816 => 1608, 1812 => 1606, 1791 => 1604, 1774 => 1603, 1758 => 1589, 1755 => 1588, 1753 => 1587, 1748 => 1584, 1741 => 1579, 1738 => 1578, 1715 => 1574, 1697 => 1573, 1694 => 1572, 1692 => 1571, 1683 => 1564, 1670 => 1563, 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/* 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 - même largeur que shop-header-content */
\t\t.shop-carousel-ebay {
\t\t\twidth: 100%;
\t\t\theight: 400px;
\t\t\tposition: relative;
\t\t\toverflow: hidden;
\t\t\tbackground: #f8f9fa;
\t\t\tmargin: 0 20px 0 20px;
\t\t\tborder-radius: 8px;
\t\t\tbox-sizing: border-box;
\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.5s ease-in-out;
\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 intégrés */
\t\t.carousel-controls-ebay {
\t\t\tposition: absolute;
\t\t\ttop: 50%;
\t\t\tleft: 0;
\t\t\tright: 0;
\t\t\ttransform: translateY(-50%);
\t\t\tdisplay: flex;
\t\t\tjustify-content: space-between;
\t\t\tpadding: 0 20px;
\t\t\tz-index: 10;
\t\t}
\t\t.carousel-btn-ebay {
\t\t\twidth: 50px;
\t\t\theight: 50px;
\t\t\tborder: none;
\t\t\tborder-radius: 50%;
\t\t\tbackground: rgba(0, 0, 0, 0.7);
\t\t\tcolor: white;
\t\t\tfont-size: 18px;
\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\topacity: 0;
\t\t}
\t\t.shop-carousel-ebay:hover .carousel-btn-ebay {
\t\t\topacity: 1;
\t\t}
\t\t.carousel-btn-ebay:hover {
\t\t\tbackground: rgba(0, 0, 0, 0.9);
\t\t\ttransform: scale(1.1);
\t\t}
\t\t.carousel-btn-ebay:disabled {
\t\t\topacity: 0.3;
\t\t\tcursor: not-allowed;
\t\t\ttransform: none;
\t\t}
\t\t.carousel-btn-ebay.pause-btn {
\t\t\tbackground: rgba(220, 53, 69, 0.8);
\t\t}
\t\t.carousel-btn-ebay.pause-btn:hover {
\t\t\tbackground: rgba(220, 53, 69, 1);
\t\t}
\t\t/* Indicateurs eBay-style */
\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: 8px;
\t\t\tz-index: 10;
\t\t}
\t\t.carousel-indicator-ebay {
\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: 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;
\t\t\tborder-color: white;
\t\t\ttransform: scale(1.2);
\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: 80px;
\t\t\theight: 80px;
\t\t\tborder-radius: 8px;
\t\t\tobject-fit: cover;
\t\t\tborder: 3px solid white;
\t\t\tbox-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
\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: 10px 0;
\t\t}
\t\t.shop-name-section {
\t\t\tmargin-bottom: 8px;
\t\t}
\t\t.shop-name-ebay {
\t\t\tfont-size: 1.8rem;
\t\t\tfont-weight: 600;
\t\t\tcolor: #333;
\t\t\tmargin: 0 15px 0 0;
\t\t\tdisplay: inline-block;
\t\t}
\t\t.verified-text {
\t\t\tcolor: #28a745;
\t\t\tfont-size: 0.9rem;
\t\t\tfont-weight: 500;
\t\t}
\t\t.shop-category-section {
\t\t\tmargin-bottom: 12px;
\t\t}
\t\t.shop-category-ebay {
\t\t\tbackground: #f8f9fa;
\t\t\tcolor: #666;
\t\t\tpadding: 4px 12px;
\t\t\tborder-radius: 16px;
\t\t\tfont-size: 0.85rem;
\t\t\tfont-weight: 500;
\t\t}
\t\t.shop-stats-ebay {
\t\t\tmargin-top: 15px;
\t\t}
\t\t.stat-row {
\t\t\tdisplay: flex;
\t\t\tgap: 30px;
\t\t\tmargin-bottom: 10px;
\t\t}
\t\t.stat-item-ebay {
\t\t\tdisplay: flex;
\t\t\tflex-direction: column;
\t\t\talign-items: flex-start;
\t\t}
\t\t.stat-percentage {
\t\t\tfont-size: 1.2rem;
\t\t\tfont-weight: 700;
\t\t\tcolor: #28a745;
\t\t\tline-height: 1;
\t\t}
\t\t.stat-number-ebay {
\t\t\tfont-size: 1.2rem;
\t\t\tfont-weight: 700;
\t\t\tcolor: #333;
\t\t\tline-height: 1;
\t\t}
\t\t.stat-label-ebay {
\t\t\tfont-size: 0.8rem;
\t\t\tcolor: #666;
\t\t\ttext-transform: uppercase;
\t\t\tletter-spacing: 0.5px;
\t\t\tmargin-top: 2px;
\t\t}
\t\t.shop-additional-info {
\t\t\tdisplay: flex;
\t\t\tgap: 20px;
\t\t\tfont-size: 0.85rem;
\t\t\tcolor: #666;
\t\t}
\t\t.member-since {
\t\t\tfont-weight: 400;
\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: 140px;
\t\t}
\t\t.btn-ebay {
\t\t\tpadding: 8px 16px;
\t\t\tfont-size: 0.9rem;
\t\t\tfont-weight: 500;
\t\t\tborder-radius: 4px;
\t\t\ttext-align: center;
\t\t\ttransition: all 0.3s ease;
\t\t\tborder-width: 1px;
\t\t}
\t\t.btn-ebay:hover {
\t\t\ttransform: translateY(-1px);
\t\t\tbox-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
\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@media(max-width: 991.98px) {
\t\t\t.shop-carousel-ebay {
\t\t\t\tmargin: 0 10px;
\t\t\t\theight: 300px;
\t\t\t}
\t\t\t
\t\t\t.shop-header-content {
\t\t\t\tpadding: 15px;
\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: 15px;
\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: 250px;
\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\tpadding: 0 10px;
\t\t\t\tbottom: 15px;
\t\t\t}
\t\t\t.carousel-btn-ebay {
\t\t\t\twidth: 35px;
\t\t\t\theight: 35px;
\t\t\t\tfont-size: 14px;
\t\t\t}
\t\t\t.carousel-indicators-ebay {
\t\t\t\tbottom: 10px;
\t\t\t\tgap: 6px;
\t\t\t}
\t\t\t
\t\t\t.carousel-indicator-ebay {
\t\t\t\twidth: 10px;
\t\t\t\theight: 10px;
\t\t\t}
\t\t\t.shop-header-content {
\t\t\t\tpadding: 15px;
\t\t\t\tmargin: 0;
\t\t\t}
\t\t\t
\t\t\t.shop-header-content .container {
\t\t\t\tpadding-left: 15px;
\t\t\t\tpadding-right: 15px;
\t\t\t}
\t\t\t.shop-avatar {
\t\t\t\twidth: 60px;
\t\t\t\theight: 60px;
\t\t\t}
\t\t\t.shop-title {
\t\t\t\tfont-size: 1.2rem;
\t\t\t}
\t\t\t.shop-actions-row {
\t\t\t\tflex-direction: column;
\t\t\t\tgap: 10px;
\t\t\t}
\t\t\t/* Styles eBay-style responsive */
\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-right: 0;
\t\t\t\tmargin-bottom: 15px;
\t\t\t\talign-self: center;
\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.shop-name-ebay {
\t\t\t\tfont-size: 1.5rem;
\t\t\t\tmargin-right: 0;
\t\t\t\tmargin-bottom: 10px;
\t\t\t}
\t\t\t.stat-row {
\t\t\t\tjustify-content: center;
\t\t\t\tgap: 15px;
\t\t\t\tflex-wrap: wrap;
\t\t\t}
\t\t\t
\t\t\t.stat-item-ebay {
\t\t\t\tfont-size: 0.9rem;
\t\t\t\tmin-width: 100px;
\t\t\t}
\t\t\t.shop-additional-info {
\t\t\t\tjustify-content: center;
\t\t\t\tflex-wrap: wrap;
\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: 15px;
\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\tmargin-bottom: 10px;
\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: 200px;
\t\t\t\tmargin: 0;
\t\t\t}
\t\t\t
\t\t\t.shop-header-content {
\t\t\t\tmargin: 0;
\t\t\t\tpadding: 15px;
\t\t\t}
\t\t\t
\t\t\t.shop-name-ebay {
\t\t\t\tfont-size: 1.3rem;
\t\t\t}
\t\t\t
\t\t\t.stat-row {
\t\t\t\tgap: 10px;
\t\t\t\tflex-direction: column;
\t\t\t}
\t\t\t
\t\t\t.stat-item-ebay {
\t\t\t\tfont-size: 0.85rem;
\t\t\t\twidth: 100%;
\t\t\t}
\t\t\t
\t\t\t.carousel-btn-ebay {
\t\t\t\twidth: 25px;
\t\t\t\theight: 25px;
\t\t\t\tfont-size: 10px;
\t\t\t}
\t\t\t
\t\t\t.carousel-indicators-ebay {
\t\t\t\tbottom: 8px;
\t\t\t}
\t\t\t
\t\t\t.carousel-indicator-ebay {
\t\t\t\twidth: 6px;
\t\t\t\theight: 6px;
\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 intégrés - uniquement si plusieurs images de bannière -->
\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\">
\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\">
\t\t\t\t\t\t<i class=\"lnr lnr-pause\" id=\"pauseIcon\"></i>
\t\t\t\t\t</button>
\t\t\t\t\t<button class=\"carousel-btn-ebay next-btn\" onclick=\"nextSlide()\" id=\"nextBtn\">
\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 - uniquement pour les images de bannière -->
\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 }})\"></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
\t\t\t\tclass=\"row align-items-center\">
\t\t\t\t<!-- Logo de la boutique -->
\t\t\t\t<div class=\"col-auto\">
\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\" style=\"background: #f0f0f0; display: flex; align-items: center; justify-content: center; font-size: 2rem; color: #666;\">
\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\">
\t\t\t\t\t<div
\t\t\t\t\t\tclass=\"shop-info-ebay\">
\t\t\t\t\t\t<!-- Nom de la boutique -->
\t\t\t\t\t\t<div class=\"shop-name-section\">
\t\t\t\t\t\t\t<h1 class=\"shop-name-ebay\">{{ shop.name }}</h1>
\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</div>
\t\t\t\t\t\t<!-- Catégorie -->
\t\t\t\t\t\t{% if shop.shopCategory %}
\t\t\t\t\t\t\t<div class=\"shop-category-section\">
\t\t\t\t\t\t\t\t<span class=\"shop-category-ebay\">{{ shop.shopCategory.name }}</span>
\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t{% endif %}
\t\t\t\t\t\t<!-- Statistiques eBay-style -->
\t\t\t\t\t\t<div class=\"shop-stats-ebay\">
\t\t\t\t\t\t\t<div class=\"stat-row\">
\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=\"row\">
\t\t\t\t\t\t\t\t\t<div class=\"col-12\">
\t\t\t\t\t\t\t\t\t\t<span class=\"member-since col-md-3 col-sm-6 w-100\">
\t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-thumbs-up\"></i>
\t\t\t\t\t\t\t\t\t\t\t7% positive feedback</span>
\t\t\t\t\t\t\t\t\t\t<span class=\"member-since col-md-3 col-sm-6 w-100\">
\t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-cart\"></i>
\t\t\t\t\t\t\t\t\t\t\t29 produits vendus</span>
\t\t\t\t\t\t\t\t\t\t<span class=\"member-since col-md-3 col-sm-6 w-100\">
\t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-star\"></i>
\t\t\t\t\t\t\t\t\t\t\t150 followers</span>
\t\t\t\t\t\t\t\t\t\t<span class=\"member-since col-md-3 w-100\">
\t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-history\"></i>
\t\t\t\t\t\t\t\t\t\t\tCréé depuis
\t\t\t\t\t\t\t\t\t\t\t{{ shop.createdAt|date('M Y') }}</span>
\t\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t\t</div>
\t\t\t\t\t\t\t</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-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 {% 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\">
\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<button class=\"btn btn-outline-secondary btn-ebay\" onclick=\"shareShop()\">
\t\t\t\t\t\t\t<i class=\"lnr lnr-bubble me-1\"></i> Partager
\t\t\t\t\t\t</button>
\t\t\t\t\t\t<button class=\"btn btn-outline-danger btn-ebay\" onclick=\"reportShop()\">
\t\t\t\t\t\t\t<i class=\"lnr lnr-flag me-1\"></i> Signaler
\t\t\t\t\t\t</button>
\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\">
\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-xl-3 col-lg-4 col-md-6 col-sm-6 mb-4 d-flex align-items-stretch 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{% include 'home/_single_product_card.html.twig' with {'product': product} %}
\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<p class=\"card-text\">{{ shop.description }}</p>
\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 () { // Initialisation du carrousel
initCarousel();
// 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
let currentSlide = 0;
let carouselInterval;
let isPaused = false;
let slides = [];
let indicators = [];
function initCarousel() {
// 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 indicators = carouselContainer.querySelector('.carousel-indicators-ebay');
if (controls) controls.style.display = 'none';
if (indicators) indicators.style.display = 'none';
return;
}
// Si une seule image, masquer les contrôles
if (allSlides.length <= 1) {
const controls = carouselContainer.querySelector('.carousel-controls-ebay');
const indicators = carouselContainer.querySelector('.carousel-indicators-ebay');
if (controls) controls.style.display = 'none';
if (indicators) indicators.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 indicators = carouselContainer.querySelector('.carousel-indicators-ebay');
if (controls) controls.style.display = 'flex';
if (indicators) indicators.style.display = 'flex';
// Mettre à jour les références globales
slides = allSlides;
indicators = allIndicators;
// S'assurer que la première slide est active
updateCarousel();
// Démarrer le carrousel automatique
startCarousel();
// Gérer les événements de survol
carouselContainer.addEventListener('mouseenter', pauseCarousel);
carouselContainer.addEventListener('mouseleave', () => {
if (!isPaused) startCarousel();
});
}
function startCarousel() {
// Nettoyer l'intervalle existant
clearInterval(carouselInterval);
if (slides.length <= 1) return;
carouselInterval = setInterval(() => {
if (!isPaused && slides.length > 0) {
nextSlide();
}
}, 4000); // Change toutes les 4 secondes
}
function pauseCarousel() {
isPaused = true;
clearInterval(carouselInterval);
const pauseIcon = document.getElementById('pauseIcon');
if (pauseIcon) {
pauseIcon.className = 'lnr lnr-play';
}
}
function resumeCarousel() {
isPaused = false;
const pauseIcon = document.getElementById('pauseIcon');
if (pauseIcon) {
pauseIcon.className = 'lnr lnr-pause';
}
startCarousel();
}
function toggleCarousel() {
if (isPaused) {
resumeCarousel();
} else {
pauseCarousel();
}
}
function nextSlide() {
if (slides.length === 0) return;
currentSlide = (currentSlide + 1) % slides.length;
updateCarousel();
}
function previousSlide() {
if (slides.length === 0) return;
currentSlide = (currentSlide - 1 + slides.length) % slides.length;
updateCarousel();
}
function goToSlide(index) {
if (slides.length === 0) return;
if (index < 0 || index >= slides.length) return;
currentSlide = index;
updateCarousel();
}
function updateCarousel() {
if (slides.length === 0 || indicators.length === 0) return;
// Masquer toutes les slides
slides.forEach(slide => slide.classList.remove('active'));
indicators.forEach(indicator => indicator.classList.remove('active'));
// Afficher la slide active
if (slides[currentSlide]) {
slides[currentSlide].classList.add('active');
}
if (indicators[currentSlide]) {
indicators[currentSlide].classList.add('active');
}
}
// Fonctions globales pour les boutons
window.nextSlide = nextSlide;
window.previousSlide = previousSlide;
window.goToSlide = goToSlide;
window.toggleCarousel = toggleCarousel;
// 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...');
// Ecouter l'événement change avec jQuery (nécessaire à cause de nice-select)
if (typeof \$ !== 'undefined') {
\$('#product-sort').on('change', function() {
console.log('=== SELECT CHANGE EVENT TRIGGERED (jQuery) ===');
if(window.sortProducts) window.sortProducts(this.value);
});
}
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");
}
}