var/cache/dev/twig/da/daff4eb8b16e38bc70dc63bd1e391365.php line 56

Open in your IDE?
  1. <?php
  2. use Twig\Environment;
  3. use Twig\Error\LoaderError;
  4. use Twig\Error\RuntimeError;
  5. use Twig\Extension\CoreExtension;
  6. use Twig\Extension\SandboxExtension;
  7. use Twig\Markup;
  8. use Twig\Sandbox\SecurityError;
  9. use Twig\Sandbox\SecurityNotAllowedTagError;
  10. use Twig\Sandbox\SecurityNotAllowedFilterError;
  11. use Twig\Sandbox\SecurityNotAllowedFunctionError;
  12. use Twig\Source;
  13. use Twig\Template;
  14. use Twig\TemplateWrapper;
  15. /* home/shop.html.twig */
  16. class __TwigTemplate_c912687df9963faf4cc570ddc8831a9d extends Template
  17. {
  18.     private Source $source;
  19.     /**
  20.      * @var array<string, Template>
  21.      */
  22.     private array $macros = [];
  23.     public function __construct(Environment $env)
  24.     {
  25.         parent::__construct($env);
  26.         $this->source $this->getSourceContext();
  27.         $this->blocks = [
  28.             'title' => [$this'block_title'],
  29.             'stylesheets' => [$this'block_stylesheets'],
  30.             'body' => [$this'block_body'],
  31.             'javascripts' => [$this'block_javascripts'],
  32.         ];
  33.     }
  34.     protected function doGetParent(array $context): bool|string|Template|TemplateWrapper
  35.     {
  36.         // line 1
  37.         return "base_home.html.twig";
  38.     }
  39.     protected function doDisplay(array $context, array $blocks = []): iterable
  40.     {
  41.         $macros $this->macros;
  42.         $__internal_5a27a8ba21ca79b61932376b2fa922d2 $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  43.         $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "template""home/shop.html.twig"));
  44.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  45.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "template""home/shop.html.twig"));
  46.         $this->parent $this->load("base_home.html.twig"1);
  47.         yield from $this->parent->unwrap()->yield($contextarray_merge($this->blocks$blocks));
  48.         
  49.         $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  50.         
  51.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  52.     }
  53.     // line 3
  54.     /**
  55.      * @return iterable<null|scalar|\Stringable>
  56.      */
  57.     public function block_title(array $context, array $blocks = []): iterable
  58.     {
  59.         $macros $this->macros;
  60.         $__internal_5a27a8ba21ca79b61932376b2fa922d2 $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  61.         $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block""title"));
  62.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  63.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block""title"));
  64.         // line 4
  65.         yield "\t";
  66.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source, ($context["shop"] ?? null), "name", [], "any"falsefalsefalse4), "html"nulltrue);
  67.         yield "
  68. \t| MaketOu
  69. ";
  70.         
  71.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  72.         
  73.         $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  74.         yield from [];
  75.     }
  76.     // line 8
  77.     /**
  78.      * @return iterable<null|scalar|\Stringable>
  79.      */
  80.     public function block_stylesheets(array $context, array $blocks = []): iterable
  81.     {
  82.         $macros $this->macros;
  83.         $__internal_5a27a8ba21ca79b61932376b2fa922d2 $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  84.         $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block""stylesheets"));
  85.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  86.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block""stylesheets"));
  87.         // line 9
  88.         yield "\t<style>
  89. \t\t/* Design eBay-like intégré avec Karma - Pleine largeur */
  90. \t\t.shop-header {
  91. \t\t\tbackground: #f7f7f7;
  92. \t\t\tborder-bottom: 1px solid #e1e1e1;
  93. \t\t\tpadding: 0;
  94. \t\t\tmargin-bottom: 0;
  95. \t\t\twidth: 100%;
  96. \t\t\tposition: relative;
  97. \t\t}
  98. \t\t.shop-banner {
  99. \t\t\twidth: 100%;
  100. \t\t\theight: 350px;
  101. \t\t\tbackground-size: cover;
  102. \t\t\tbackground-position: center;
  103. \t\t\tbackground-repeat: no-repeat;
  104. \t\t\tposition: relative;
  105. \t\t\tdisplay: flex;
  106. \t\t\talign-items: center;
  107. \t\t\tjustify-content: center;
  108. \t\t}
  109. \t\t/* Carrousel eBay-style - même largeur que shop-header-content */
  110. \t\t.shop-carousel-ebay {
  111. \t\t\twidth: 100%;
  112. \t\t\theight: 400px;
  113. \t\t\tposition: relative;
  114. \t\t\toverflow: hidden;
  115. \t\t\tbackground: #f8f9fa;
  116. \t\t\tmargin: 0 20px 0 20px;
  117. \t\t\tborder-radius: 8px;
  118. \t\t\tbox-sizing: border-box;
  119. \t\t}
  120. \t\t.carousel-container {
  121. \t\t\tposition: relative;
  122. \t\t\twidth: 100%;
  123. \t\t\theight: 100%;
  124. \t\t}
  125. \t\t.carousel-slide {
  126. \t\t\tposition: absolute;
  127. \t\t\ttop: 0;
  128. \t\t\tleft: 0;
  129. \t\t\twidth: 100%;
  130. \t\t\theight: 100%;
  131. \t\t\tbackground-size: cover;
  132. \t\t\tbackground-position: center;
  133. \t\t\tbackground-repeat: no-repeat;
  134. \t\t\topacity: 0;
  135. \t\t\ttransition: opacity 0.5s ease-in-out;
  136. \t\t}
  137. \t\t.carousel-slide.active {
  138. \t\t\topacity: 1;
  139. \t\t}
  140. \t\t.carousel-controls {
  141. \t\t\tposition: absolute;
  142. \t\t\tbottom: 20px;
  143. \t\t\tleft: 50%;
  144. \t\t\ttransform: translateX(-50%);
  145. \t\t\tdisplay: flex;
  146. \t\t\tgap: 10px;
  147. \t\t\tz-index: 10;
  148. \t\t}
  149. \t\t.carousel-btn {
  150. \t\t\twidth: 40px;
  151. \t\t\theight: 40px;
  152. \t\t\tborder: none;
  153. \t\t\tborder-radius: 50%;
  154. \t\t\tbackground: rgba(255, 255, 255, 0.9);
  155. \t\t\tcolor: #333;
  156. \t\t\tfont-size: 16px;
  157. \t\t\tcursor: pointer;
  158. \t\t\tdisplay: flex;
  159. \t\t\talign-items: center;
  160. \t\t\tjustify-content: center;
  161. \t\t\ttransition: all 0.3s ease;
  162. \t\t\tbox-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
  163. \t\t}
  164. \t\t.carousel-btn:hover {
  165. \t\t\tbackground: white;
  166. \t\t\ttransform: scale(1.1);
  167. \t\t}
  168. \t\t.carousel-btn:disabled {
  169. \t\t\topacity: 0.5;
  170. \t\t\tcursor: not-allowed;
  171. \t\t\ttransform: none;
  172. \t\t}
  173. \t\t.carousel-pause {
  174. \t\t\tbackground: #dc3545;
  175. \t\t\tcolor: white;
  176. \t\t}
  177. \t\t.carousel-pause:hover {
  178. \t\t\tbackground: #c82333;
  179. \t\t}
  180. \t\t.carousel-indicators {
  181. \t\t\tposition: absolute;
  182. \t\t\tbottom: 70px;
  183. \t\t\tleft: 50%;
  184. \t\t\ttransform: translateX(-50%);
  185. \t\t\tdisplay: flex;
  186. \t\t\tgap: 8px;
  187. \t\t\tz-index: 10;
  188. \t\t}
  189. \t\t.carousel-indicator {
  190. \t\t\twidth: 12px;
  191. \t\t\theight: 12px;
  192. \t\t\tborder-radius: 50%;
  193. \t\t\tbackground: rgba(255, 255, 255, 0.5);
  194. \t\t\tborder: none;
  195. \t\t\tcursor: pointer;
  196. \t\t\ttransition: all 0.3s ease;
  197. \t\t}
  198. \t\t.carousel-indicator.active {
  199. \t\t\tbackground: white;
  200. \t\t\ttransform: scale(1.2);
  201. \t\t}
  202. \t\t/* Contrôles eBay-style intégrés */
  203. \t\t.carousel-controls-ebay {
  204. \t\t\tposition: absolute;
  205. \t\t\ttop: 50%;
  206. \t\t\tleft: 0;
  207. \t\t\tright: 0;
  208. \t\t\ttransform: translateY(-50%);
  209. \t\t\tdisplay: flex;
  210. \t\t\tjustify-content: space-between;
  211. \t\t\tpadding: 0 20px;
  212. \t\t\tz-index: 10;
  213. \t\t}
  214. \t\t.carousel-btn-ebay {
  215. \t\t\twidth: 50px;
  216. \t\t\theight: 50px;
  217. \t\t\tborder: none;
  218. \t\t\tborder-radius: 50%;
  219. \t\t\tbackground: rgba(0, 0, 0, 0.7);
  220. \t\t\tcolor: white;
  221. \t\t\tfont-size: 18px;
  222. \t\t\tcursor: pointer;
  223. \t\t\tdisplay: flex;
  224. \t\t\talign-items: center;
  225. \t\t\tjustify-content: center;
  226. \t\t\ttransition: all 0.3s ease;
  227. \t\t\topacity: 0;
  228. \t\t}
  229. \t\t.shop-carousel-ebay:hover .carousel-btn-ebay {
  230. \t\t\topacity: 1;
  231. \t\t}
  232. \t\t.carousel-btn-ebay:hover {
  233. \t\t\tbackground: rgba(0, 0, 0, 0.9);
  234. \t\t\ttransform: scale(1.1);
  235. \t\t}
  236. \t\t.carousel-btn-ebay:disabled {
  237. \t\t\topacity: 0.3;
  238. \t\t\tcursor: not-allowed;
  239. \t\t\ttransform: none;
  240. \t\t}
  241. \t\t.carousel-btn-ebay.pause-btn {
  242. \t\t\tbackground: rgba(220, 53, 69, 0.8);
  243. \t\t}
  244. \t\t.carousel-btn-ebay.pause-btn:hover {
  245. \t\t\tbackground: rgba(220, 53, 69, 1);
  246. \t\t}
  247. \t\t/* Indicateurs eBay-style */
  248. \t\t.carousel-indicators-ebay {
  249. \t\t\tposition: absolute;
  250. \t\t\tbottom: 20px;
  251. \t\t\tleft: 50%;
  252. \t\t\ttransform: translateX(-50%);
  253. \t\t\tdisplay: flex;
  254. \t\t\tgap: 8px;
  255. \t\t\tz-index: 10;
  256. \t\t}
  257. \t\t.carousel-indicator-ebay {
  258. \t\t\twidth: 12px;
  259. \t\t\theight: 12px;
  260. \t\t\tborder-radius: 50%;
  261. \t\t\tbackground: rgba(255, 255, 255, 0.5);
  262. \t\t\tborder: 2px solid rgba(255, 255, 255, 0.8);
  263. \t\t\tcursor: pointer;
  264. \t\t\ttransition: all 0.3s ease;
  265. \t\t}
  266. \t\t.carousel-indicator-ebay.active {
  267. \t\t\tbackground: white;
  268. \t\t\tborder-color: white;
  269. \t\t\ttransform: scale(1.2);
  270. \t\t}
  271. \t\t.carousel-indicator-ebay:hover {
  272. \t\t\tbackground: rgba(255, 255, 255, 0.8);
  273. \t\t\ttransform: scale(1.1);
  274. \t\t}
  275. \t\t/* Styles eBay-style pour les détails de boutique */
  276. \t\t.shop-avatar-container-ebay {
  277. \t\t\tposition: relative;
  278. \t\t\tmargin-right: 20px;
  279. \t\t}
  280. \t\t.shop-avatar-ebay {
  281. \t\t\twidth: 80px;
  282. \t\t\theight: 80px;
  283. \t\t\tborder-radius: 8px;
  284. \t\t\tobject-fit: cover;
  285. \t\t\tborder: 3px solid white;
  286. \t\t\tbox-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
  287. \t\t}
  288. \t\t.verified-badge-ebay {
  289. \t\t\tposition: absolute;
  290. \t\t\tbottom: -5px;
  291. \t\t\tright: -5px;
  292. \t\t\tbackground: #28a745;
  293. \t\t\tcolor: white;
  294. \t\t\twidth: 24px;
  295. \t\t\theight: 24px;
  296. \t\t\tborder-radius: 50%;
  297. \t\t\tdisplay: flex;
  298. \t\t\talign-items: center;
  299. \t\t\tjustify-content: center;
  300. \t\t\tfont-size: 12px;
  301. \t\t\tborder: 2px solid white;
  302. \t\t}
  303. \t\t.shop-info-ebay {
  304. \t\t\tpadding: 10px 0;
  305. \t\t}
  306. \t\t.shop-name-section {
  307. \t\t\tmargin-bottom: 8px;
  308. \t\t}
  309. \t\t.shop-name-ebay {
  310. \t\t\tfont-size: 1.8rem;
  311. \t\t\tfont-weight: 600;
  312. \t\t\tcolor: #333;
  313. \t\t\tmargin: 0 15px 0 0;
  314. \t\t\tdisplay: inline-block;
  315. \t\t}
  316. \t\t.verified-text {
  317. \t\t\tcolor: #28a745;
  318. \t\t\tfont-size: 0.9rem;
  319. \t\t\tfont-weight: 500;
  320. \t\t}
  321. \t\t.shop-category-section {
  322. \t\t\tmargin-bottom: 12px;
  323. \t\t}
  324. \t\t.shop-category-ebay {
  325. \t\t\tbackground: #f8f9fa;
  326. \t\t\tcolor: #666;
  327. \t\t\tpadding: 4px 12px;
  328. \t\t\tborder-radius: 16px;
  329. \t\t\tfont-size: 0.85rem;
  330. \t\t\tfont-weight: 500;
  331. \t\t}
  332. \t\t.shop-stats-ebay {
  333. \t\t\tmargin-top: 15px;
  334. \t\t}
  335. \t\t.stat-row {
  336. \t\t\tdisplay: flex;
  337. \t\t\tgap: 30px;
  338. \t\t\tmargin-bottom: 10px;
  339. \t\t}
  340. \t\t.stat-item-ebay {
  341. \t\t\tdisplay: flex;
  342. \t\t\tflex-direction: column;
  343. \t\t\talign-items: flex-start;
  344. \t\t}
  345. \t\t.stat-percentage {
  346. \t\t\tfont-size: 1.2rem;
  347. \t\t\tfont-weight: 700;
  348. \t\t\tcolor: #28a745;
  349. \t\t\tline-height: 1;
  350. \t\t}
  351. \t\t.stat-number-ebay {
  352. \t\t\tfont-size: 1.2rem;
  353. \t\t\tfont-weight: 700;
  354. \t\t\tcolor: #333;
  355. \t\t\tline-height: 1;
  356. \t\t}
  357. \t\t.stat-label-ebay {
  358. \t\t\tfont-size: 0.8rem;
  359. \t\t\tcolor: #666;
  360. \t\t\ttext-transform: uppercase;
  361. \t\t\tletter-spacing: 0.5px;
  362. \t\t\tmargin-top: 2px;
  363. \t\t}
  364. \t\t.shop-additional-info {
  365. \t\t\tdisplay: flex;
  366. \t\t\tgap: 20px;
  367. \t\t\tfont-size: 0.85rem;
  368. \t\t\tcolor: #666;
  369. \t\t}
  370. \t\t.member-since {
  371. \t\t\tfont-weight: 400;
  372. \t\t}
  373. \t\t.location {
  374. \t\t\tdisplay: flex;
  375. \t\t\talign-items: center;
  376. \t\t}
  377. \t\t.shop-actions-ebay {
  378. \t\t\tdisplay: flex;
  379. \t\t\tflex-direction: column;
  380. \t\t\tgap: 10px;
  381. \t\t\tmin-width: 140px;
  382. \t\t}
  383. \t\t.btn-ebay {
  384. \t\t\tpadding: 8px 16px;
  385. \t\t\tfont-size: 0.9rem;
  386. \t\t\tfont-weight: 500;
  387. \t\t\tborder-radius: 4px;
  388. \t\t\ttext-align: center;
  389. \t\t\ttransition: all 0.3s ease;
  390. \t\t\tborder-width: 1px;
  391. \t\t}
  392. \t\t.btn-ebay:hover {
  393. \t\t\ttransform: translateY(-1px);
  394. \t\t\tbox-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
  395. \t\t}
  396. \t\t.btn-ebay.following {
  397. \t\t\tbackground: #28a745;
  398. \t\t\tborder-color: #28a745;
  399. \t\t\tcolor: white;
  400. \t\t}
  401. \t\t/* Styles pour les avis */
  402. \t\t.review-stats {
  403. \t\t\tbackground: white;
  404. \t\t\tborder-radius: 12px;
  405. \t\t\tpadding: 20px;
  406. \t\t\tbox-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
  407. \t\t\tmargin-bottom: 20px;
  408. \t\t}
  409. \t\t.stat-card {
  410. \t\t\tpadding: 15px;
  411. \t\t}
  412. \t\t.stat-number {
  413. \t\t\tfont-size: 2.5rem;
  414. \t\t\tfont-weight: 700;
  415. \t\t\tcolor: #333;
  416. \t\t\tmargin: 0;
  417. \t\t}
  418. \t\t.stat-label {
  419. \t\t\tcolor: #666;
  420. \t\t\tfont-size: 0.9rem;
  421. \t\t\tmargin: 5px 0 0;
  422. \t\t}
  423. \t\t.rating-stars {
  424. \t\t\tcolor: #ffc107;
  425. \t\t\tfont-size: 1.2rem;
  426. \t\t\tmargin: 10px 0;
  427. \t\t}
  428. \t\t.reviews-preview {
  429. \t\t\tbackground: white;
  430. \t\t\tborder-radius: 12px;
  431. \t\t\tpadding: 20px;
  432. \t\t\tbox-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
  433. \t\t}
  434. \t\t.review-item {
  435. \t\t\tborder-bottom: 1px solid #f0f0f0;
  436. \t\t\tpadding: 15px 0;
  437. \t\t}
  438. \t\t.review-item:last-child {
  439. \t\t\tborder-bottom: none;
  440. \t\t}
  441. \t\t.review-header {
  442. \t\t\tdisplay: flex;
  443. \t\t\tjustify-content: space-between;
  444. \t\t\talign-items: flex-start;
  445. \t\t\tmargin-bottom: 10px;
  446. \t\t}
  447. \t\t.reviewer-info {
  448. \t\t\tdisplay: flex;
  449. \t\t\talign-items: center;
  450. \t\t\tgap: 10px;
  451. \t\t}
  452. \t\t.reviewer-avatar {
  453. \t\t\twidth: 40px;
  454. \t\t\theight: 40px;
  455. \t\t\tborder-radius: 50%;
  456. \t\t\tbackground: #f8f9fa;
  457. \t\t\tdisplay: flex;
  458. \t\t\talign-items: center;
  459. \t\t\tjustify-content: center;
  460. \t\t\tcolor: #666;
  461. \t\t}
  462. \t\t.reviewer-name {
  463. \t\t\tmargin: 0;
  464. \t\t\tfont-size: 1rem;
  465. \t\t\tfont-weight: 600;
  466. \t\t}
  467. \t\t.review-rating {
  468. \t\t\tcolor: #ffc107;
  469. \t\t\tfont-size: 0.9rem;
  470. \t\t}
  471. \t\t.review-meta {
  472. \t\t\ttext-align: right;
  473. \t\t}
  474. \t\t.review-date {
  475. \t\t\tcolor: #666;
  476. \t\t\tfont-size: 0.8rem;
  477. \t\t}
  478. \t\t.verified-badge {
  479. \t\t\tdisplay: inline-block;
  480. \t\t\tbackground: #28a745;
  481. \t\t\tcolor: white;
  482. \t\t\tpadding: 2px 8px;
  483. \t\t\tborder-radius: 12px;
  484. \t\t\tfont-size: 0.7rem;
  485. \t\t\tmargin-left: 10px;
  486. \t\t}
  487. \t\t.review-comment {
  488. \t\t\tmargin: 10px 0 0;
  489. \t\t\tline-height: 1.5;
  490. \t\t\tcolor: #333;
  491. \t\t}
  492. \t\t.review-actions-card {
  493. \t\t\tbackground: white;
  494. \t\t\tborder-radius: 12px;
  495. \t\t\tpadding: 20px;
  496. \t\t\tbox-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
  497. \t\t\ttext-align: center;
  498. \t\t}
  499. \t\t.shop-banner-overlay {
  500. \t\t\tposition: absolute;
  501. \t\t\ttop: 0;
  502. \t\t\tleft: 0;
  503. \t\t\tright: 0;
  504. \t\t\tbottom: 0;
  505. \t\t\tbackground: rgba(0, 0, 0, 0.3);
  506. \t\t\tz-index: 1;
  507. \t\t}
  508. \t\t.shop-header-content {
  509. \t\t\tbackground: white;
  510. \t\t\tborder: 1px solid #e1e1e1;
  511. \t\t\tborder-radius: 4px;
  512. \t\t\tpadding: 20px;
  513. \t\t\tmargin: 0 20px 20px;
  514. \t\t\tbox-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
  515. \t\t\tposition: relative;
  516. \t\t\tz-index: 2;
  517. \t\t}
  518. \t\t.shop-avatar {
  519. \t\t\twidth: 80px;
  520. \t\t\theight: 80px;
  521. \t\t\tborder-radius: 4px;
  522. \t\t\tborder: 1px solid #e1e1e1;
  523. \t\t\tobject-fit: cover;
  524. \t\t\tposition: relative;
  525. \t\t\tz-index: 3;
  526. \t\t}
  527. \t\t.shop-title {
  528. \t\t\tfont-size: 1.5rem;
  529. \t\t\tfont-weight: 600;
  530. \t\t\tcolor: #333;
  531. \t\t\tmargin-bottom: 8px;
  532. \t\t}
  533. \t\t.shop-subtitle {
  534. \t\t\tcolor: #666;
  535. \t\t\tfont-size: 0.9rem;
  536. \t\t\tmargin-bottom: 15px;
  537. \t\t}
  538. \t\t.shop-stats-row {
  539. \t\t\tdisplay: flex;
  540. \t\t\talign-items: center;
  541. \t\t\tgap: 20px;
  542. \t\t\tflex-wrap: wrap;
  543. \t\t\tmargin-bottom: 15px;
  544. \t\t}
  545. \t\t.shop-stat-item {
  546. \t\t\tdisplay: flex;
  547. \t\t\talign-items: center;
  548. \t\t\tgap: 5px;
  549. \t\t\tfont-size: 0.9rem;
  550. \t\t}
  551. \t\t.positive-feedback {
  552. \t\t\tcolor: #007bff;
  553. \t\t\tfont-weight: 600;
  554. \t\t}
  555. \t\t.items-sold {
  556. \t\t\tcolor: #666;
  557. \t\t}
  558. \t\t.followers-count {
  559. \t\t\tcolor: #666;
  560. \t\t}
  561. \t\t.shop-badges {
  562. \t\t\tdisplay: flex;
  563. \t\t\tgap: 10px;
  564. \t\t\tmargin-bottom: 15px;
  565. \t\t}
  566. \t\t.shop-badge {
  567. \t\t\tbackground: #f0f0f0;
  568. \t\t\tcolor: #333;
  569. \t\t\tpadding: 4px 8px;
  570. \t\t\tborder-radius: 3px;
  571. \t\t\tfont-size: 0.8rem;
  572. \t\t\tfont-weight: 500;
  573. \t\t}
  574. \t\t.shop-badge.verified {
  575. \t\t\tbackground: #d4edda;
  576. \t\t\tcolor: #155724;
  577. \t\t}
  578. \t\t.shop-badge.premium {
  579. \t\t\tbackground: #fff3cd;
  580. \t\t\tcolor: #856404;
  581. \t\t}
  582. \t\t.shop-actions-row {
  583. \t\t\tdisplay: flex;
  584. \t\t\talign-items: center;
  585. \t\t\tgap: 15px;
  586. \t\t\tflex-wrap: wrap;
  587. \t\t}
  588. \t\t.shop-action-btn {
  589. \t\t\tbackground: #007bff;
  590. \t\t\tcolor: white;
  591. \t\t\tborder: none;
  592. \t\t\tpadding: 8px 16px;
  593. \t\t\tborder-radius: 3px;
  594. \t\t\tfont-size: 0.9rem;
  595. \t\t\tfont-weight: 500;
  596. \t\t\tcursor: pointer;
  597. \t\t\ttransition: background-color 0.2s;
  598. \t\t\ttext-decoration: none;
  599. \t\t\tdisplay: inline-flex;
  600. \t\t\talign-items: center;
  601. \t\t\tgap: 5px;
  602. \t\t}
  603. \t\t.shop-action-btn:hover {
  604. \t\t\tbackground: #0056b3;
  605. \t\t\tcolor: white;
  606. \t\t}
  607. \t\t.shop-action-btn.following {
  608. \t\t\tbackground: #28a745;
  609. \t\t}
  610. \t\t.shop-action-btn.following:hover {
  611. \t\t\tbackground: #1e7e34;
  612. \t\t}
  613. \t\t.shop-action-btn.secondary {
  614. \t\t\tbackground: #6c757d;
  615. \t\t}
  616. \t\t.shop-action-btn.secondary:hover {
  617. \t\t\tbackground: #545b62;
  618. \t\t}
  619. \t\t/* Onglets eBay-style avec classes Karma */
  620. \t\t.shop-tabs {
  621. \t\t\tbackground: white;
  622. \t\t\tborder: 1px solid #e1e1e1;
  623. \t\t\tborder-top: none;
  624. \t\t\tborder-radius: 0 0 4px 4px;
  625. \t\t\tmargin-top: 0;
  626. \t\t}
  627. \t\t.shop-tabs-nav {
  628. \t\t\tdisplay: flex;
  629. \t\t\tborder-bottom: 1px solid #e1e1e1;
  630. \t\t\tmargin: 0;
  631. \t\t\tpadding: 0;
  632. \t\t\tlist-style: none;
  633. \t\t\tbackground: #f8f9fa;
  634. \t\t}
  635. \t\t.shop-tab {
  636. \t\t\tmargin: 0;
  637. \t\t}
  638. \t\t.shop-tab-link {
  639. \t\t\tdisplay: block;
  640. \t\t\tpadding: 12px 20px;
  641. \t\t\tcolor: #000000;
  642. \t\t\ttext-decoration: none;
  643. \t\t\tborder-bottom: 2px solid transparent;
  644. \t\t\ttransition: all 0.2s;
  645. \t\t\tfont-weight: 500;
  646. \t\t\tfont-size: 1rem;
  647. \t\t}
  648. \t\t.shop-tab-link:hover,
  649. \t\t.shop-tab-link.active {
  650. \t\t\tcolor: #095ad3;
  651. \t\t\tborder-bottom-color: #095ad3;
  652. \t\t\tbackground: #ffa200;
  653. \t\t}
  654. \t\t.shop-tab-content {
  655. \t\t\tpadding: 30px;
  656. \t\t\tmin-height: 400px;
  657. \t\t}
  658. \t\t.shop-tab-content:not(.active) {
  659. \t\t\tdisplay: none;
  660. \t\t}
  661. \t\t.shop-tab-content.active {
  662. \t\t\tdisplay: block;
  663. \t\t}
  664. \t\t/* Cards d'information avec style Karma */
  665. \t\t.shop-info-card {
  666. \t\t\tbackground: #f8f9fa;
  667. \t\t\tborder: 1px solid #e1e1e1;
  668. \t\t\tborder-radius: 4px;
  669. \t\t\tpadding: 20px;
  670. \t\t\tmargin-bottom: 20px;
  671. \t\t}
  672. \t\t.shop-info-card h6 {
  673. \t\t\tcolor: #333;
  674. \t\t\tfont-weight: 600;
  675. \t\t\tmargin-bottom: 15px;
  676. \t\t\tfont-size: 1.1rem;
  677. \t\t}
  678. \t\t.shop-info-card p {
  679. \t\t\tcolor: #666;
  680. \t\t\tfont-size: 0.9rem;
  681. \t\t\tmargin: 0;
  682. \t\t\tline-height: 1.5;
  683. \t\t}
  684. \t\t.shop-contact-info {
  685. \t\t\tdisplay: flex;
  686. \t\t\tflex-direction: column;
  687. \t\t\tgap: 10px;
  688. \t\t}
  689. \t\t.shop-contact-item {
  690. \t\t\tdisplay: flex;
  691. \t\t\talign-items: center;
  692. \t\t\tgap: 10px;
  693. \t\t\tfont-size: 0.9rem;
  694. \t\t\tcolor: #666;
  695. \t\t\tpadding: 5px 0;
  696. \t\t}
  697. \t\t.shop-contact-item i {
  698. \t\t\twidth: 16px;
  699. \t\t\tcolor: #007bff;
  700. \t\t\ttext-align: center;
  701. \t\t}
  702. \t\t.shop-social-links {
  703. \t\t\tdisplay: flex;
  704. \t\t\tgap: 10px;
  705. \t\t\tmargin-top: 15px;
  706. \t\t\tflex-wrap: wrap;
  707. \t\t}
  708. \t\t.shop-social-link {
  709. \t\t\tdisplay: inline-flex;
  710. \t\t\talign-items: center;
  711. \t\t\tjustify-content: center;
  712. \t\t\twidth: 36px;
  713. \t\t\theight: 36px;
  714. \t\t\tbackground: #f0f0f0;
  715. \t\t\tcolor: #666;
  716. \t\t\tborder-radius: 4px;
  717. \t\t\ttext-decoration: none;
  718. \t\t\ttransition: all 0.2s;
  719. \t\t\tfont-size: 1.1rem;
  720. \t\t}
  721. \t\t.shop-social-link:hover {
  722. \t\t\tbackground: #007bff;
  723. \t\t\tcolor: white;
  724. \t\t\ttransform: translateY(-2px);
  725. \t\t}
  726. \t\t/* Produits avec style Karma */
  727. \t\t.product-card {
  728. \t\t\tbackground: white;
  729. \t\t\tborder: 1px solid #e1e1e1;
  730. \t\t\tborder-radius: 4px;
  731. \t\t\toverflow: hidden;
  732. \t\t\ttransition: all 0.3s ease;
  733. \t\t\tmargin-bottom: 20px;
  734. \t\t}
  735. \t\t.product-card:hover {
  736. \t\t\ttransform: translateY(-2px);
  737. \t\t\tbox-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
  738. \t\t}
  739. \t\t/* Animation de tri des produits */
  740. \t\t.product-item {
  741. \t\t\ttransition: all 0.3s ease;
  742. \t\t}
  743. \t\t.product-item.sorting {
  744. \t\t\topacity: 0;
  745. \t\t\ttransform: translateY(20px);
  746. \t\t}
  747. \t\t.product-item.sorted {
  748. \t\t\topacity: 1;
  749. \t\t\ttransform: translateY(0);
  750. \t\t}
  751. \t\t.product-image {
  752. \t\t\theight: 200px;
  753. \t\t\tbackground-size: cover;
  754. \t\t\tbackground-position: center;
  755. \t\t\tposition: relative;
  756. \t\t\toverflow: hidden;
  757. \t\t}
  758. \t\t.product-info {
  759. \t\t\tpadding: 15px;
  760. \t\t}
  761. \t\t.product-title {
  762. \t\t\tfont-size: 1rem;
  763. \t\t\tfont-weight: 600;
  764. \t\t\tmargin-bottom: 8px;
  765. \t\t\tcolor: #333;
  766. \t\t\tline-height: 1.3;
  767. \t\t}
  768. \t\t.product-title a {
  769. \t\t\tcolor: #333;
  770. \t\t\ttext-decoration: none;
  771. \t\t}
  772. \t\t.product-title a:hover {
  773. \t\t\tcolor: #007bff;
  774. \t\t}
  775. \t\t.product-price {
  776. \t\t\tfont-size: 1.2rem;
  777. \t\t\tfont-weight: bold;
  778. \t\t\tcolor: #ff6b35;
  779. \t\t\tmargin-bottom: 10px;
  780. \t\t}
  781. \t\t.product-meta {
  782. \t\t\tdisplay: flex;
  783. \t\t\tjustify-content: space-between;
  784. \t\t\talign-items: center;
  785. \t\t\tfont-size: 0.85rem;
  786. \t\t\tcolor: #666;
  787. \t\t}
  788. \t\t.rating {
  789. \t\t\tcolor: #ffc107;
  790. \t\t}
  791. \t\t/* Responsive avec classes Karma */
  792. \t\t/* Responsive amélioré pour la page shop */
  793. \t\t@media(max-width: 991.98px) {
  794. \t\t\t.shop-carousel-ebay {
  795. \t\t\t\tmargin: 0 10px;
  796. \t\t\t\theight: 300px;
  797. \t\t\t}
  798. \t\t\t
  799. \t\t\t.shop-header-content {
  800. \t\t\t\tpadding: 15px;
  801. \t\t\t\tmargin: 0 10px 20px;
  802. \t\t\t}
  803. \t\t\t
  804. \t\t\t.shop-header-content .row {
  805. \t\t\t\tflex-wrap: wrap;
  806. \t\t\t}
  807. \t\t\t
  808. \t\t\t.shop-info-ebay {
  809. \t\t\t\tmargin-top: 15px;
  810. \t\t\t}
  811. \t\t}
  812. \t\t
  813. \t\t@media(max-width: 768px) {
  814. \t\t\t.shop-banner,
  815. \t\t\t.shop-carousel-ebay {
  816. \t\t\t\theight: 250px;
  817. \t\t\t\tmargin: 0;
  818. \t\t\t\tborder-radius: 0;
  819. \t\t\t}
  820. \t\t\t
  821. \t\t\t.shop-carousel-ebay .carousel-container {
  822. \t\t\t\tborder-radius: 0;
  823. \t\t\t}
  824. \t\t\t.carousel-controls-ebay {
  825. \t\t\t\tpadding: 0 10px;
  826. \t\t\t\tbottom: 15px;
  827. \t\t\t}
  828. \t\t\t.carousel-btn-ebay {
  829. \t\t\t\twidth: 35px;
  830. \t\t\t\theight: 35px;
  831. \t\t\t\tfont-size: 14px;
  832. \t\t\t}
  833. \t\t\t.carousel-indicators-ebay {
  834. \t\t\t\tbottom: 10px;
  835. \t\t\t\tgap: 6px;
  836. \t\t\t}
  837. \t\t\t
  838. \t\t\t.carousel-indicator-ebay {
  839. \t\t\t\twidth: 10px;
  840. \t\t\t\theight: 10px;
  841. \t\t\t}
  842. \t\t\t.shop-header-content {
  843. \t\t\t\tpadding: 15px;
  844. \t\t\t\tmargin: 0;
  845. \t\t\t}
  846. \t\t\t
  847. \t\t\t.shop-header-content .container {
  848. \t\t\t\tpadding-left: 15px;
  849. \t\t\t\tpadding-right: 15px;
  850. \t\t\t}
  851. \t\t\t.shop-avatar {
  852. \t\t\t\twidth: 60px;
  853. \t\t\t\theight: 60px;
  854. \t\t\t}
  855. \t\t\t.shop-title {
  856. \t\t\t\tfont-size: 1.2rem;
  857. \t\t\t}
  858. \t\t\t.shop-actions-row {
  859. \t\t\t\tflex-direction: column;
  860. \t\t\t\tgap: 10px;
  861. \t\t\t}
  862. \t\t\t/* Styles eBay-style responsive */
  863. \t\t\t.shop-header-content .row {
  864. \t\t\t\tflex-direction: column;
  865. \t\t\t\ttext-align: center;
  866. \t\t\t}
  867. \t\t\t.shop-avatar-container-ebay {
  868. \t\t\t\tmargin-right: 0;
  869. \t\t\t\tmargin-bottom: 15px;
  870. \t\t\t\talign-self: center;
  871. \t\t\t}
  872. \t\t\t.shop-avatar-ebay {
  873. \t\t\t\twidth: 80px;
  874. \t\t\t\theight: 80px;
  875. \t\t\t}
  876. \t\t\t.shop-name-ebay {
  877. \t\t\t\tfont-size: 1.5rem;
  878. \t\t\t\tmargin-right: 0;
  879. \t\t\t\tmargin-bottom: 10px;
  880. \t\t\t}
  881. \t\t\t.stat-row {
  882. \t\t\t\tjustify-content: center;
  883. \t\t\t\tgap: 15px;
  884. \t\t\t\tflex-wrap: wrap;
  885. \t\t\t}
  886. \t\t\t
  887. \t\t\t.stat-item-ebay {
  888. \t\t\t\tfont-size: 0.9rem;
  889. \t\t\t\tmin-width: 100px;
  890. \t\t\t}
  891. \t\t\t.shop-additional-info {
  892. \t\t\t\tjustify-content: center;
  893. \t\t\t\tflex-wrap: wrap;
  894. \t\t\t}
  895. \t\t\t.shop-actions-ebay {
  896. \t\t\t\tflex-direction: column;
  897. \t\t\t\tjustify-content: center;
  898. \t\t\t\tmin-width: auto;
  899. \t\t\t\tmargin-top: 15px;
  900. \t\t\t\twidth: 100%;
  901. \t\t\t}
  902. \t\t\t.btn-ebay {
  903. \t\t\t\twidth: 100%;
  904. \t\t\t\tmin-width: auto;
  905. \t\t\t\tmargin-bottom: 10px;
  906. \t\t\t}
  907. \t\t\t.btn-shop,
  908. \t\t\t.shop-action-btn {
  909. \t\t\t\twidth: 100%;
  910. \t\t\t\tmin-width: auto;
  911. \t\t\t\theight: 45px;
  912. \t\t\t\tfont-size: 0.9rem;
  913. \t\t\t\tpadding: 12px 20px;
  914. \t\t\t}
  915. \t\t\t.shop-tabs-nav {
  916. \t\t\t\tflex-wrap: wrap;
  917. \t\t\t\tjustify-content: center;
  918. \t\t\t}
  919. \t\t\t
  920. \t\t\t.shop-tab-link {
  921. \t\t\t\tfont-size: 0.85rem;
  922. \t\t\t\tpadding: 0.5rem 0.75rem;
  923. \t\t\t\tflex: 1;
  924. \t\t\t\tmin-width: auto;
  925. \t\t\t}
  926. \t\t\t
  927. \t\t\t/* Produits responsive */
  928. \t\t\t#products-container .product-item {
  929. \t\t\t\tmargin-bottom: 20px;
  930. \t\t\t}
  931. \t\t\t
  932. \t\t\t.product-card {
  933. \t\t\t\tpadding: 15px;
  934. \t\t\t}
  935. \t\t\t
  936. \t\t\t.product-title {
  937. \t\t\t\tfont-size: 0.95rem;
  938. \t\t\t}
  939. \t\t\t
  940. \t\t\t.product-price {
  941. \t\t\t\tfont-size: 1.1rem;
  942. \t\t\t}
  943. \t\t\t
  944. \t\t\t/* Détails de la boutique responsive */
  945. \t\t\t.shop-info-ebay {
  946. \t\t\t\ttext-align: center;
  947. \t\t\t}
  948. \t\t}
  949. \t\t
  950. \t\t@media(max-width: 575.98px) {
  951. \t\t\t.shop-banner,
  952. \t\t\t.shop-carousel-ebay {
  953. \t\t\t\theight: 200px;
  954. \t\t\t\tmargin: 0;
  955. \t\t\t}
  956. \t\t\t
  957. \t\t\t.shop-header-content {
  958. \t\t\t\tmargin: 0;
  959. \t\t\t\tpadding: 15px;
  960. \t\t\t}
  961. \t\t\t
  962. \t\t\t.shop-name-ebay {
  963. \t\t\t\tfont-size: 1.3rem;
  964. \t\t\t}
  965. \t\t\t
  966. \t\t\t.stat-row {
  967. \t\t\t\tgap: 10px;
  968. \t\t\t\tflex-direction: column;
  969. \t\t\t}
  970. \t\t\t
  971. \t\t\t.stat-item-ebay {
  972. \t\t\t\tfont-size: 0.85rem;
  973. \t\t\t\twidth: 100%;
  974. \t\t\t}
  975. \t\t\t
  976. \t\t\t.carousel-btn-ebay {
  977. \t\t\t\twidth: 25px;
  978. \t\t\t\theight: 25px;
  979. \t\t\t\tfont-size: 10px;
  980. \t\t\t}
  981. \t\t\t
  982. \t\t\t.carousel-indicators-ebay {
  983. \t\t\t\tbottom: 8px;
  984. \t\t\t}
  985. \t\t\t
  986. \t\t\t.carousel-indicator-ebay {
  987. \t\t\t\twidth: 6px;
  988. \t\t\t\theight: 6px;
  989. \t\t\t}
  990. \t\t\t
  991. \t\t\t.shop-tab-content {
  992. \t\t\t\tpadding: 15px 10px;
  993. \t\t\t}
  994. \t\t\t.shop-stats-row {
  995. \t\t\t\tflex-direction: column;
  996. \t\t\t\tgap: 10px;
  997. \t\t\t\talign-items: flex-start;
  998. \t\t\t}
  999. \t\t}
  1000. \t\t.follow-button {
  1001. \t\t\tbackground: #ffa200;
  1002. \t\t\tborder: none;
  1003. \t\t\tcolor: white;
  1004. \t\t\tpadding: 12px 30px;
  1005. \t\t\tborder-radius: 25px;
  1006. \t\t\tfont-weight: 600;
  1007. \t\t\ttransition: all 0.3s ease;
  1008. \t\t\tcursor: pointer;
  1009. \t\t\tdisplay: inline-flex;
  1010. \t\t\talign-items: center;
  1011. \t\t\tgap: 8px;
  1012. \t\t}
  1013. \t\t.follow-button:hover {
  1014. \t\t\tbackground: #e8910a;
  1015. \t\t\ttransform: translateY(-2px);
  1016. \t\t\tbox-shadow: 0 5px 15px rgba(255, 162, 0, 0.3);
  1017. \t\t}
  1018. \t\t.follow-button.following {
  1019. \t\t\tbackground: #28a745;
  1020. \t\t}
  1021. \t\t.follow-button.following:hover {
  1022. \t\t\tbackground: #218838;
  1023. \t\t}
  1024. \t\t.follow-button:disabled {
  1025. \t\t\topacity: 0.6;
  1026. \t\t\tcursor: not-allowed;
  1027. \t\t\ttransform: none;
  1028. \t\t}
  1029. \t\t.follow-stats {
  1030. \t\t\tdisplay: flex;
  1031. \t\t\tgap: 30px;
  1032. \t\t\tmargin-top: 20px;
  1033. \t\t\tflex-wrap: wrap;
  1034. \t\t}
  1035. \t\t.follow-stat {
  1036. \t\t\ttext-align: center;
  1037. \t\t\tpadding: 15px;
  1038. \t\t\tbackground: #f8f9fa;
  1039. \t\t\tborder-radius: 10px;
  1040. \t\t\tmin-width: 120px;
  1041. \t\t}
  1042. \t\t.follow-stat-number {
  1043. \t\t\tfont-size: 1.8rem;
  1044. \t\t\tfont-weight: bold;
  1045. \t\t\tcolor: #ffa200;
  1046. \t\t\tdisplay: block;
  1047. \t\t}
  1048. \t\t.follow-stat-label {
  1049. \t\t\tcolor: #666;
  1050. \t\t\tfont-size: 0.9rem;
  1051. \t\t\ttext-transform: uppercase;
  1052. \t\t\tletter-spacing: 0.5px;
  1053. \t\t}
  1054. \t\t.shop-actions {
  1055. \t\t\tdisplay: flex;
  1056. \t\t\tgap: 15px;
  1057. \t\t\talign-items: center;
  1058. \t\t\tflex-wrap: wrap;
  1059. \t\t\tmargin-top: 20px;
  1060. \t\t}
  1061. \t\t.action-button {
  1062. \t\t\tbackground: white;
  1063. \t\t\tborder: 2px solid #ffa200;
  1064. \t\t\tcolor: #ffa200;
  1065. \t\t\tpadding: 10px 20px;
  1066. \t\t\tborder-radius: 20px;
  1067. \t\t\ttext-decoration: none;
  1068. \t\t\tfont-weight: 500;
  1069. \t\t\ttransition: all 0.3s ease;
  1070. \t\t\tdisplay: inline-flex;
  1071. \t\t\talign-items: center;
  1072. \t\t\tgap: 8px;
  1073. \t\t}
  1074. \t\t.action-button:hover {
  1075. \t\t\tbackground: #ffa200;
  1076. \t\t\tcolor: white;
  1077. \t\t\ttransform: translateY(-2px);
  1078. \t\t\tbox-shadow: 0 5px 15px rgba(255, 162, 0, 0.3);
  1079. \t\t}
  1080. \t\t.positive-feedback {
  1081. \t\t\tcolor: #28a745;
  1082. \t\t\tfont-weight: bold;
  1083. \t\t}
  1084. \t\t.items-sold {
  1085. \t\t\tcolor: #666;
  1086. \t\t\tfont-size: 0.9rem;
  1087. \t\t}
  1088. \t\t.followers-count {
  1089. \t\t\tcolor: #666;
  1090. \t\t\tfont-size: 0.9rem;
  1091. \t\t}
  1092. \t\t.shop-avatar {
  1093. \t\t\twidth: 120px;
  1094. \t\t\theight: 120px;
  1095. \t\t\tborder-radius: 50%;
  1096. \t\t\tborder: 4px solid white;
  1097. \t\t\tobject-fit: cover;
  1098. \t\t\tmargin-bottom: 20px;
  1099. \t\t}
  1100. \t\t.shop-stats {
  1101. \t\t\tbackground: white;
  1102. \t\t\tborder-radius: 10px;
  1103. \t\t\tpadding: 30px;
  1104. \t\t\tbox-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
  1105. \t\t\tmargin-top: -50px;
  1106. \t\t\tposition: relative;
  1107. \t\t\tz-index: 10;
  1108. \t\t}
  1109. \t\t.stat-item {
  1110. \t\t\ttext-align: center;
  1111. \t\t\tpadding: 20px;
  1112. \t\t}
  1113. \t\t.stat-number {
  1114. \t\t\tfont-size: 2.5rem;
  1115. \t\t\tfont-weight: bold;
  1116. \t\t\tcolor: #ffa200;
  1117. \t\t\tdisplay: block;
  1118. \t\t}
  1119. \t\t.stat-label {
  1120. \t\t\tcolor: #666;
  1121. \t\t\tfont-size: 0.9rem;
  1122. \t\t\ttext-transform: uppercase;
  1123. \t\t\tletter-spacing: 1px;
  1124. \t\t}
  1125. \t\t.shop-description {
  1126. \t\t\tbackground: #f8f9fa;
  1127. \t\t\tpadding: 30px;
  1128. \t\t\tborder-radius: 10px;
  1129. \t\t\tmargin-bottom: 40px;
  1130. \t\t}
  1131. \t\t.shop-contact {
  1132. \t\t\tbackground: white;
  1133. \t\t\tborder: 1px solid #e9ecef;
  1134. \t\t\tborder-radius: 10px;
  1135. \t\t\tpadding: 25px;
  1136. \t\t\tmargin-bottom: 40px;
  1137. \t\t}
  1138. \t\t.contact-item {
  1139. \t\t\tdisplay: flex;
  1140. \t\t\talign-items: center;
  1141. \t\t\tmargin-bottom: 15px;
  1142. \t\t}
  1143. \t\t.contact-item i {
  1144. \t\t\tcolor: #ffa200;
  1145. \t\t\tmargin-right: 15px;
  1146. \t\t\twidth: 20px;
  1147. \t\t}
  1148. \t\t.product-card {
  1149. \t\t\tbackground: white;
  1150. \t\t\tborder-radius: 10px;
  1151. \t\t\toverflow: hidden;
  1152. \t\t\tbox-shadow: 0 3px 10px rgba(0, 0, 0, 0.1);
  1153. \t\t\ttransition: transform 0.3s ease, box-shadow 0.3s ease;
  1154. \t\t\tmargin-bottom: 30px;
  1155. \t\t}
  1156. \t\t.product-card:hover {
  1157. \t\t\ttransform: translateY(-5px);
  1158. \t\t\tbox-shadow: 0 8px 25px rgba(0, 0, 0, 0.15);
  1159. \t\t}
  1160. \t\t.product-image {
  1161. \t\t\theight: 200px;
  1162. \t\t\tbackground-size: cover;
  1163. \t\t\tbackground-position: center;
  1164. \t\t\tposition: relative;
  1165. \t\t}
  1166. \t\t.product-info {
  1167. \t\t\tpadding: 20px;
  1168. \t\t}
  1169. \t\t.product-title {
  1170. \t\t\tfont-size: 1.1rem;
  1171. \t\t\tfont-weight: 600;
  1172. \t\t\tmargin-bottom: 10px;
  1173. \t\t\tcolor: #333;
  1174. \t\t}
  1175. \t\t.product-price {
  1176. \t\t\tfont-size: 1.3rem;
  1177. \t\t\tfont-weight: bold;
  1178. \t\t\tcolor: #ffa200;
  1179. \t\t\tmargin-bottom: 15px;
  1180. \t\t}
  1181. \t\t.product-meta {
  1182. \t\t\tdisplay: flex;
  1183. \t\t\tjustify-content: space-between;
  1184. \t\t\talign-items: center;
  1185. \t\t\tfont-size: 0.9rem;
  1186. \t\t\tcolor: #666;
  1187. \t\t}
  1188. \t\t.rating {
  1189. \t\t\tcolor: #ffa200;
  1190. \t\t}
  1191. \t\t/* Boutons d'action uniformes */
  1192. \t\t.btn-shop,
  1193. \t\t.shop-action-btn {
  1194. \t\t\tbackground: #ffa200;
  1195. \t\t\tborder: 1px solid #ffa200;
  1196. \t\t\tcolor: white;
  1197. \t\t\tpadding: 12px 24px;
  1198. \t\t\tborder-radius: 6px;
  1199. \t\t\tfont-weight: 500;
  1200. \t\t\tfont-size: 0.9rem;
  1201. \t\t\ttransition: all 0.3s ease;
  1202. \t\t\ttext-decoration: none;
  1203. \t\t\tdisplay: inline-flex;
  1204. \t\t\talign-items: center;
  1205. \t\t\tjustify-content: center;
  1206. \t\t\tgap: 8px;
  1207. \t\t\tmin-width: 120px;
  1208. \t\t\theight: 44px;
  1209. \t\t\twhite-space: nowrap;
  1210. \t\t}
  1211. \t\t.btn-shop:hover,
  1212. \t\t.shop-action-btn:hover {
  1213. \t\t\tbackground: #e8910a;
  1214. \t\t\tborder-color: #e8910a;
  1215. \t\t\tcolor: white;
  1216. \t\t\ttransform: translateY(-1px);
  1217. \t\t\tbox-shadow: 0 4px 12px rgba(255, 162, 0, 0.3);
  1218. \t\t}
  1219. \t\t/* Boutons secondaires */
  1220. \t\t.shop-action-btn.secondary {
  1221. \t\t\tbackground: transparent;
  1222. \t\t\tborder: 1px solid #6c757d;
  1223. \t\t\tcolor: #6c757d;
  1224. \t\t}
  1225. \t\t.shop-action-btn.secondary:hover {
  1226. \t\t\tbackground: #6c757d;
  1227. \t\t\tborder-color: #6c757d;
  1228. \t\t\tcolor: white;
  1229. \t\t\ttransform: translateY(-1px);
  1230. \t\t\tbox-shadow: 0 4px 12px rgba(108, 117, 125, 0.3);
  1231. \t\t}
  1232. \t\t/* Responsive */
  1233. \t\t@media(max-width: 768px) {
  1234. \t\t\t.shop-header {
  1235. \t\t\t\tpadding: 100px 0 40px;
  1236. \t\t\t}
  1237. \t\t\t.shop-avatar {
  1238. \t\t\t\twidth: 80px;
  1239. \t\t\t\theight: 80px;
  1240. \t\t\t}
  1241. \t\t\t.shop-stats {
  1242. \t\t\t\tmargin-top: -30px;
  1243. \t\t\t\tpadding: 20px;
  1244. \t\t\t}
  1245. \t\t\t.stat-number {
  1246. \t\t\t\tfont-size: 2rem;
  1247. \t\t\t}
  1248. \t\t}
  1249. \t\t/* Très petits écrans */
  1250. \t\t@media(max-width: 480px) {
  1251. \t\t\t.btn-shop,
  1252. \t\t\t.shop-action-btn {
  1253. \t\t\t\tmin-width: 90px;
  1254. \t\t\t\theight: 38px;
  1255. \t\t\t\tfont-size: 0.8rem;
  1256. \t\t\t\tpadding: 8px 16px;
  1257. \t\t\t}
  1258. \t\t\t.shop-actions-row {
  1259. \t\t\t\tgap: 8px;
  1260. \t\t\t}
  1261. \t\t}
  1262. \t\t/* Styles pour la section des avis */
  1263. \t\t.review-stats-card {
  1264. \t\t\tbackground: white;
  1265. \t\t\tborder-radius: 10px;
  1266. \t\t\tpadding: 20px;
  1267. \t\t\tbox-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
  1268. \t\t\tmargin-bottom: 20px;
  1269. \t\t}
  1270. \t\t.stats-header {
  1271. \t\t\tdisplay: flex;
  1272. \t\t\talign-items: center;
  1273. \t\t\tmargin-bottom: 20px;
  1274. \t\t}
  1275. \t\t.overall-rating {
  1276. \t\t\ttext-align: center;
  1277. \t\t\tmargin-right: 20px;
  1278. \t\t}
  1279. \t\t.rating-number {
  1280. \t\t\tfont-size: 36px;
  1281. \t\t\tfont-weight: bold;
  1282. \t\t\tcolor: #333;
  1283. \t\t\tdisplay: block;
  1284. \t\t}
  1285. \t\t.stars {
  1286. \t\t\tcolor: #ffc107;
  1287. \t\t\tfont-size: 18px;
  1288. \t\t\tmargin-top: 5px;
  1289. \t\t}
  1290. \t\t.rating-summary p {
  1291. \t\t\tmargin: 0;
  1292. \t\t\tcolor: #666;
  1293. \t\t}
  1294. \t\t.rating-breakdown {
  1295. \t\t\tmargin-top: 15px;
  1296. \t\t}
  1297. \t\t.rating-bar {
  1298. \t\t\tdisplay: flex;
  1299. \t\t\talign-items: center;
  1300. \t\t\tmargin-bottom: 8px;
  1301. \t\t}
  1302. \t\t.rating-label {
  1303. \t\t\twidth: 40px;
  1304. \t\t\tfont-size: 14px;
  1305. \t\t\tcolor: #666;
  1306. \t\t}
  1307. \t\t.rating-progress {
  1308. \t\t\tflex: 1;
  1309. \t\t\theight: 6px;
  1310. \t\t\tbackground: #e9ecef;
  1311. \t\t\tborder-radius: 3px;
  1312. \t\t\tmargin: 0 10px;
  1313. \t\t\toverflow: hidden;
  1314. \t\t}
  1315. \t\t.rating-fill {
  1316. \t\t\theight: 100%;
  1317. \t\t\tbackground: linear-gradient(45deg, #ffc107, #ff8c00);
  1318. \t\t\ttransition: width 0.3s ease;
  1319. \t\t}
  1320. \t\t.rating-count {
  1321. \t\t\twidth: 30px;
  1322. \t\t\ttext-align: right;
  1323. \t\t\tfont-size: 14px;
  1324. \t\t\tcolor: #666;
  1325. \t\t}
  1326. \t\t.reviews-preview {
  1327. \t\t\tbackground: white;
  1328. \t\t\tborder-radius: 10px;
  1329. \t\t\tpadding: 20px;
  1330. \t\t\tbox-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
  1331. \t\t}
  1332. \t\t.review-card-preview {
  1333. \t\t\tborder-bottom: 1px solid #f0f0f0;
  1334. \t\t\tpadding-bottom: 15px;
  1335. \t\t\tmargin-bottom: 15px;
  1336. \t\t}
  1337. \t\t.review-card-preview:last-child {
  1338. \t\t\tborder-bottom: none;
  1339. \t\t\tmargin-bottom: 0;
  1340. \t\t}
  1341. \t\t.review-header {
  1342. \t\t\tdisplay: flex;
  1343. \t\t\tjustify-content: space-between;
  1344. \t\t\talign-items: center;
  1345. \t\t\tmargin-bottom: 10px;
  1346. \t\t}
  1347. \t\t.review-user {
  1348. \t\t\tdisplay: flex;
  1349. \t\t\talign-items: center;
  1350. \t\t}
  1351. \t\t.user-avatar {
  1352. \t\t\twidth: 35px;
  1353. \t\t\theight: 35px;
  1354. \t\t\tborder-radius: 50%;
  1355. \t\t\tbackground: linear-gradient(45deg, #667eea, #764ba2);
  1356. \t\t\tdisplay: flex;
  1357. \t\t\talign-items: center;
  1358. \t\t\tjustify-content: center;
  1359. \t\t\tcolor: white;
  1360. \t\t\tfont-weight: bold;
  1361. \t\t\tmargin-right: 10px;
  1362. \t\t}
  1363. \t\t.user-info h6 {
  1364. \t\t\tmargin: 0;
  1365. \t\t\tfont-size: 14px;
  1366. \t\t\tfont-weight: 600;
  1367. \t\t\tcolor: #333;
  1368. \t\t}
  1369. \t\t.user-info small {
  1370. \t\t\tcolor: #666;
  1371. \t\t\tfont-size: 12px;
  1372. \t\t}
  1373. \t\t.review-rating {
  1374. \t\t\tdisplay: flex;
  1375. \t\t\talign-items: center;
  1376. \t\t\tgap: 5px;
  1377. \t\t}
  1378. \t\t.verified-badge {
  1379. \t\t\tbackground: #28a745;
  1380. \t\t\tcolor: white;
  1381. \t\t\tpadding: 2px 4px;
  1382. \t\t\tborder-radius: 3px;
  1383. \t\t\tfont-size: 10px;
  1384. \t\t\tfont-weight: bold;
  1385. \t\t}
  1386. \t\t.review-content {
  1387. \t\t\tcolor: #666;
  1388. \t\t\tfont-size: 14px;
  1389. \t\t\tline-height: 1.5;
  1390. \t\t}
  1391. \t\t.empty-reviews {
  1392. \t\t\ttext-align: center;
  1393. \t\t\tpadding: 40px 20px;
  1394. \t\t\tcolor: #666;
  1395. \t\t}
  1396. \t\t.empty-reviews i {
  1397. \t\t\tfont-size: 48px;
  1398. \t\t\tcolor: #ddd;
  1399. \t\t\tmargin-bottom: 15px;
  1400. \t\t}
  1401. \t\t.empty-reviews h4 {
  1402. \t\t\tcolor: #333;
  1403. \t\t\tmargin-bottom: 10px;
  1404. \t\t}
  1405. \t\t.section-title h2 {
  1406. \t\t\tcolor: #333;
  1407. \t\t\tmargin-bottom: 10px;
  1408. \t\t}
  1409. \t\t.section-title p {
  1410. \t\t\tcolor: #666;
  1411. \t\t\tmargin-bottom: 30px;
  1412. \t\t}
  1413. \t\t@media(max-width: 768px) {
  1414. \t\t\t.stats-header {
  1415. \t\t\t\tflex-direction: column;
  1416. \t\t\t\ttext-align: center;
  1417. \t\t\t}
  1418. \t\t\t.overall-rating {
  1419. \t\t\t\tmargin-right: 0;
  1420. \t\t\t\tmargin-bottom: 15px;
  1421. \t\t\t}
  1422. \t\t\t.review-header {
  1423. \t\t\t\tflex-direction: column;
  1424. \t\t\t\talign-items: flex-start;
  1425. \t\t\t}
  1426. \t\t\t.review-rating {
  1427. \t\t\t\tmargin-top: 5px;
  1428. \t\t\t}
  1429. \t\t}
  1430. \t</style>
  1431. ";
  1432.         
  1433.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  1434.         
  1435.         $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  1436.         yield from [];
  1437.     }
  1438.     // line 1563
  1439.     /**
  1440.      * @return iterable<null|scalar|\Stringable>
  1441.      */
  1442.     public function block_body(array $context, array $blocks = []): iterable
  1443.     {
  1444.         $macros $this->macros;
  1445.         $__internal_5a27a8ba21ca79b61932376b2fa922d2 $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  1446.         $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block""body"));
  1447.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  1448.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block""body"));
  1449.         // line 1564
  1450.         yield "
  1451. \t<!-- Shop Header eBay-style avec Karma - Pleine largeur -->
  1452. \t<section
  1453. \t\tclass=\"shop-header\">
  1454. \t\t<!-- Carrousel eBay-style -->
  1455. \t\t<div class=\"shop-carousel-ebay\">
  1456. \t\t\t<div class=\"carousel-container\">
  1457. \t\t\t\t";
  1458.         // line 1571
  1459.         $context["allBannerImages"] = CoreExtension::getAttribute($this->env$this->source, ($context["shop"] ?? null), "getAllBannerImages", [], "method"falsefalsefalse1571);
  1460.         // line 1572
  1461.         yield "\t\t\t\t";
  1462.         if ((Twig\Extension\CoreExtension::length($this->env->getCharset(), ($context["allBannerImages"] ?? null)) > 0)) {
  1463.             // line 1573
  1464.             yield "\t\t\t\t\t";
  1465.             $context['_parent'] = $context;
  1466.             $context['_seq'] = CoreExtension::ensureTraversable(($context["allBannerImages"] ?? null));
  1467.             $context['loop'] = [
  1468.               'parent' => $context['_parent'],
  1469.               'index0' => 0,
  1470.               'index'  => 1,
  1471.               'first'  => true,
  1472.             ];
  1473.             if (is_array($context['_seq']) || (is_object($context['_seq']) && $context['_seq'] instanceof \Countable)) {
  1474.                 $length count($context['_seq']);
  1475.                 $context['loop']['revindex0'] = $length 1;
  1476.                 $context['loop']['revindex'] = $length;
  1477.                 $context['loop']['length'] = $length;
  1478.                 $context['loop']['last'] = === $length;
  1479.             }
  1480.             foreach ($context['_seq'] as $context["_key"] => $context["image"]) {
  1481.                 // line 1574
  1482.                 yield "\t\t\t\t\t\t<div class=\"carousel-slide ";
  1483.                 if ((($tmp CoreExtension::getAttribute($this->env$this->source$context["loop"], "first", [], "any"falsefalsefalse1574)) && $tmp instanceof Markup ? (string) $tmp $tmp)) {
  1484.                     yield "active";
  1485.                 }
  1486.                 yield "\" style=\"background-image: url('";
  1487.                 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl($context["image"]), "html"nulltrue);
  1488.                 yield "')\">
  1489. \t\t\t\t\t\t\t<div class=\"shop-banner-overlay\"></div>
  1490. \t\t\t\t\t\t</div>
  1491. \t\t\t\t\t";
  1492.                 ++$context['loop']['index0'];
  1493.                 ++$context['loop']['index'];
  1494.                 $context['loop']['first'] = false;
  1495.                 if (isset($context['loop']['revindex0'], $context['loop']['revindex'])) {
  1496.                     --$context['loop']['revindex0'];
  1497.                     --$context['loop']['revindex'];
  1498.                     $context['loop']['last'] = === $context['loop']['revindex0'];
  1499.                 }
  1500.             }
  1501.             $_parent $context['_parent'];
  1502.             unset($context['_seq'], $context['_key'], $context['image'], $context['_parent'], $context['loop']);
  1503.             $context array_intersect_key($context$_parent) + $_parent;
  1504.             // line 1578
  1505.             yield "\t\t\t\t";
  1506.         } else {
  1507.             // line 1579
  1508.             yield "\t\t\t\t\t<!-- Slide par défaut avec dégradé si aucune image de bannière -->
  1509. \t\t\t\t\t<div class=\"carousel-slide active\" style=\"background: linear-gradient(135deg, #667eea 0%, #764ba2 50%, #f093fb 100%);\">
  1510. \t\t\t\t\t\t<div class=\"shop-banner-overlay\"></div>
  1511. \t\t\t\t\t</div>
  1512. \t\t\t\t";
  1513.         }
  1514.         // line 1584
  1515.         yield "\t\t\t</div>
  1516. \t\t\t<!-- Contrôles eBay-style intégrés - uniquement si plusieurs images de bannière -->
  1517. \t\t\t";
  1518.         // line 1587
  1519.         $context["totalBannerImages"] = Twig\Extension\CoreExtension::length($this->env->getCharset(), ($context["allBannerImages"] ?? null));
  1520.         // line 1588
  1521.         yield "\t\t\t";
  1522.         if ((($context["totalBannerImages"] ?? null) > 1)) {
  1523.             // line 1589
  1524.             yield "\t\t\t\t<div class=\"carousel-controls-ebay\">
  1525. \t\t\t\t\t<button class=\"carousel-btn-ebay prev-btn\" onclick=\"previousSlide()\" id=\"prevBtn\">
  1526. \t\t\t\t\t\t<i class=\"lnr lnr-chevron-left\"></i>
  1527. \t\t\t\t\t</button>
  1528. \t\t\t\t\t<button class=\"carousel-btn-ebay pause-btn\" onclick=\"toggleCarousel()\" id=\"pauseBtn\">
  1529. \t\t\t\t\t\t<i class=\"lnr lnr-pause\" id=\"pauseIcon\"></i>
  1530. \t\t\t\t\t</button>
  1531. \t\t\t\t\t<button class=\"carousel-btn-ebay next-btn\" onclick=\"nextSlide()\" id=\"nextBtn\">
  1532. \t\t\t\t\t\t<i class=\"lnr lnr-chevron-right\"></i>
  1533. \t\t\t\t\t</button>
  1534. \t\t\t\t</div>
  1535. \t\t\t\t<!-- Indicateurs eBay-style - uniquement pour les images de bannière -->
  1536. \t\t\t\t<div class=\"carousel-indicators-ebay\">
  1537. \t\t\t\t\t";
  1538.             // line 1603
  1539.             $context['_parent'] = $context;
  1540.             $context['_seq'] = CoreExtension::ensureTraversable(($context["allBannerImages"] ?? null));
  1541.             $context['loop'] = [
  1542.               'parent' => $context['_parent'],
  1543.               'index0' => 0,
  1544.               'index'  => 1,
  1545.               'first'  => true,
  1546.             ];
  1547.             if (is_array($context['_seq']) || (is_object($context['_seq']) && $context['_seq'] instanceof \Countable)) {
  1548.                 $length count($context['_seq']);
  1549.                 $context['loop']['revindex0'] = $length 1;
  1550.                 $context['loop']['revindex'] = $length;
  1551.                 $context['loop']['length'] = $length;
  1552.                 $context['loop']['last'] = === $length;
  1553.             }
  1554.             foreach ($context['_seq'] as $context["_key"] => $context["image"]) {
  1555.                 // line 1604
  1556.                 yield "\t\t\t\t\t\t<button class=\"carousel-indicator-ebay ";
  1557.                 if ((($tmp CoreExtension::getAttribute($this->env$this->source$context["loop"], "first", [], "any"falsefalsefalse1604)) && $tmp instanceof Markup ? (string) $tmp $tmp)) {
  1558.                     yield "active";
  1559.                 }
  1560.                 yield "\" onclick=\"goToSlide(";
  1561.                 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source$context["loop"], "index0", [], "any"falsefalsefalse1604), "html"nulltrue);
  1562.                 yield ")\"></button>
  1563. \t\t\t\t\t";
  1564.                 ++$context['loop']['index0'];
  1565.                 ++$context['loop']['index'];
  1566.                 $context['loop']['first'] = false;
  1567.                 if (isset($context['loop']['revindex0'], $context['loop']['revindex'])) {
  1568.                     --$context['loop']['revindex0'];
  1569.                     --$context['loop']['revindex'];
  1570.                     $context['loop']['last'] = === $context['loop']['revindex0'];
  1571.                 }
  1572.             }
  1573.             $_parent $context['_parent'];
  1574.             unset($context['_seq'], $context['_key'], $context['image'], $context['_parent'], $context['loop']);
  1575.             $context array_intersect_key($context$_parent) + $_parent;
  1576.             // line 1606
  1577.             yield "\t\t\t\t</div>
  1578. \t\t\t";
  1579.         }
  1580.         // line 1608
  1581.         yield "\t\t</div>
  1582. \t\t<!-- Contenu de la boutique eBay-style -->
  1583. \t\t<div class=\"shop-header-content\">
  1584. \t\t\t<div
  1585. \t\t\t\tclass=\"row align-items-center\">
  1586. \t\t\t\t<!-- Logo de la boutique -->
  1587. \t\t\t\t<div class=\"col-auto\">
  1588. \t\t\t\t\t<div class=\"shop-avatar-container-ebay\">
  1589. \t\t\t\t\t\t";
  1590.         // line 1617
  1591.         if ((($tmp CoreExtension::getAttribute($this->env$this->source, ($context["shop"] ?? null), "logo", [], "any"falsefalsefalse1617)) && $tmp instanceof Markup ? (string) $tmp $tmp)) {
  1592.             // line 1618
  1593.             yield "\t\t\t\t\t\t\t<img src=\"";
  1594.             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"falsefalsefalse1618)), "html"nulltrue);
  1595.             yield "\" alt=\"";
  1596.             yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source, ($context["shop"] ?? null), "name", [], "any"falsefalsefalse1618), "html"nulltrue);
  1597.             yield "\" class=\"shop-avatar-ebay\">
  1598. \t\t\t\t\t\t";
  1599.         } else {
  1600.             // line 1620
  1601.             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;\">
  1602. \t\t\t\t\t\t\t\t<i class=\"lnr lnr-store\"></i>
  1603. \t\t\t\t\t\t\t</div>
  1604. \t\t\t\t\t\t";
  1605.         }
  1606.         // line 1624
  1607.         yield "\t\t\t\t\t\t";
  1608.         if ((($tmp CoreExtension::getAttribute($this->env$this->source, ($context["shop"] ?? null), "isVerified", [], "any"falsefalsefalse1624)) && $tmp instanceof Markup ? (string) $tmp $tmp)) {
  1609.             // line 1625
  1610.             yield "\t\t\t\t\t\t\t<div class=\"verified-badge-ebay\">
  1611. \t\t\t\t\t\t\t\t<i class=\"lnr lnr-checkmark-circle\"></i>
  1612. \t\t\t\t\t\t\t</div>
  1613. \t\t\t\t\t\t";
  1614.         }
  1615.         // line 1629
  1616.         yield "\t\t\t\t\t</div>
  1617. \t\t\t\t</div>
  1618. \t\t\t\t<!-- Informations principales -->
  1619. \t\t\t\t<div class=\"col\">
  1620. \t\t\t\t\t<div
  1621. \t\t\t\t\t\tclass=\"shop-info-ebay\">
  1622. \t\t\t\t\t\t<!-- Nom de la boutique -->
  1623. \t\t\t\t\t\t<div class=\"shop-name-section\">
  1624. \t\t\t\t\t\t\t<h1 class=\"shop-name-ebay\">";
  1625.         // line 1638
  1626.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source, ($context["shop"] ?? null), "name", [], "any"falsefalsefalse1638), "html"nulltrue);
  1627.         yield "</h1>
  1628. \t\t\t\t\t\t\t";
  1629.         // line 1639
  1630.         if ((($tmp CoreExtension::getAttribute($this->env$this->source, ($context["shop"] ?? null), "isVerified", [], "any"falsefalsefalse1639)) && $tmp instanceof Markup ? (string) $tmp $tmp)) {
  1631.             // line 1640
  1632.             yield "\t\t\t\t\t\t\t\t<span class=\"verified-text\">
  1633. \t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-checkmark-circle me-1\"></i>Vendeur vérifié
  1634. \t\t\t\t\t\t\t\t</span>
  1635. \t\t\t\t\t\t\t";
  1636.         }
  1637.         // line 1644
  1638.         yield "\t\t\t\t\t\t</div>
  1639. \t\t\t\t\t\t<!-- Catégorie -->
  1640. \t\t\t\t\t\t";
  1641.         // line 1647
  1642.         if ((($tmp CoreExtension::getAttribute($this->env$this->source, ($context["shop"] ?? null), "shopCategory", [], "any"falsefalsefalse1647)) && $tmp instanceof Markup ? (string) $tmp $tmp)) {
  1643.             // line 1648
  1644.             yield "\t\t\t\t\t\t\t<div class=\"shop-category-section\">
  1645. \t\t\t\t\t\t\t\t<span class=\"shop-category-ebay\">";
  1646.             // line 1649
  1647.             yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->sourceCoreExtension::getAttribute($this->env$this->source, ($context["shop"] ?? null), "shopCategory", [], "any"falsefalsefalse1649), "name", [], "any"falsefalsefalse1649), "html"nulltrue);
  1648.             yield "</span>
  1649. \t\t\t\t\t\t\t</div>
  1650. \t\t\t\t\t\t";
  1651.         }
  1652.         // line 1652
  1653.         yield "
  1654. \t\t\t\t\t\t<!-- Statistiques eBay-style -->
  1655. \t\t\t\t\t\t<div class=\"shop-stats-ebay\">
  1656. \t\t\t\t\t\t\t<div class=\"stat-row\">
  1657. \t\t\t\t\t\t\t\t";
  1658.         // line 1656
  1659.         if ((CoreExtension::getAttribute($this->env$this->source, ($context["shop"] ?? null), "averageRating", [], "any"falsefalsefalse1656) > 0)) {
  1660.             // line 1657
  1661.             yield "\t\t\t\t\t\t\t\t\t<div class=\"stat-item-ebay\">
  1662. \t\t\t\t\t\t\t\t\t\t<span class=\"stat-percentage\">";
  1663.             // line 1658
  1664.             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"falsefalsefalse1658), 1), "html"nulltrue);
  1665.             yield "%</span>
  1666. \t\t\t\t\t\t\t\t\t\t<span class=\"stat-label-ebay\">Évaluations positives</span>
  1667. \t\t\t\t\t\t\t\t\t</div>
  1668. \t\t\t\t\t\t\t\t";
  1669.         }
  1670.         // line 1662
  1671.         yield "
  1672. \t\t\t\t\t\t\t\t";
  1673.         // line 1663
  1674.         if ((CoreExtension::getAttribute($this->env$this->source, ($context["stats"] ?? null), "totalProductSales", [], "any"falsefalsefalse1663) > 0)) {
  1675.             // line 1664
  1676.             yield "\t\t\t\t\t\t\t\t\t<div class=\"stat-item-ebay\">
  1677. \t\t\t\t\t\t\t\t\t\t<span class=\"stat-number-ebay\">";
  1678.             // line 1665
  1679.             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"falsefalsefalse1665)), "html"nulltrue);
  1680.             yield "</span>
  1681. \t\t\t\t\t\t\t\t\t\t<span class=\"stat-label-ebay\">Articles vendus</span>
  1682. \t\t\t\t\t\t\t\t\t</div>
  1683. \t\t\t\t\t\t\t\t";
  1684.         }
  1685.         // line 1669
  1686.         yield "
  1687. \t\t\t\t\t\t\t\t";
  1688.         // line 1670
  1689.         if ((CoreExtension::getAttribute($this->env$this->source, ($context["followStats"] ?? null), "active_follows", [], "any"falsefalsefalse1670) > 0)) {
  1690.             // line 1671
  1691.             yield "\t\t\t\t\t\t\t\t\t<div class=\"stat-item-ebay\">
  1692. \t\t\t\t\t\t\t\t\t\t<span class=\"stat-number-ebay\">";
  1693.             // line 1672
  1694.             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"falsefalsefalse1672)), "html"nulltrue);
  1695.             yield "</span>
  1696. \t\t\t\t\t\t\t\t\t\t<span class=\"stat-label-ebay\">Suiveurs</span>
  1697. \t\t\t\t\t\t\t\t\t</div>
  1698. \t\t\t\t\t\t\t\t";
  1699.         }
  1700.         // line 1676
  1701.         yield "\t\t\t\t\t\t\t</div>
  1702. \t\t\t\t\t\t\t<!-- Informations supplémentaires -->
  1703. \t\t\t\t\t\t\t<div class=\"shop-additional-info\">
  1704. \t\t\t\t\t\t\t\t<div class=\"row\">
  1705. \t\t\t\t\t\t\t\t\t<div class=\"col-12\">
  1706. \t\t\t\t\t\t\t\t\t\t<span class=\"member-since col-md-3 col-sm-6 w-100\">
  1707. \t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-thumbs-up\"></i>
  1708. \t\t\t\t\t\t\t\t\t\t\t7% positive feedback</span>
  1709. \t\t\t\t\t\t\t\t\t\t<span class=\"member-since col-md-3 col-sm-6 w-100\">
  1710. \t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-cart\"></i>
  1711. \t\t\t\t\t\t\t\t\t\t\t29 produits vendus</span>
  1712. \t\t\t\t\t\t\t\t\t\t<span class=\"member-since col-md-3 col-sm-6 w-100\">
  1713. \t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-star\"></i>
  1714. \t\t\t\t\t\t\t\t\t\t\t150 followers</span>
  1715. \t\t\t\t\t\t\t\t\t\t<span class=\"member-since col-md-3 w-100\">
  1716. \t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-history\"></i>
  1717. \t\t\t\t\t\t\t\t\t\t\tCréé depuis
  1718. \t\t\t\t\t\t\t\t\t\t\t";
  1719.         // line 1694
  1720.         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"falsefalsefalse1694), "M Y"), "html"nulltrue);
  1721.         yield "</span>
  1722. \t\t\t\t\t\t\t\t\t</div>
  1723. \t\t\t\t\t\t\t\t</div>
  1724. \t\t\t\t\t\t\t</div>
  1725. \t\t\t\t\t\t</div>
  1726. \t\t\t\t\t</div>
  1727. \t\t\t\t</div>
  1728. \t\t\t\t<!-- Actions eBay-style -->
  1729. \t\t\t\t<div class=\"col-auto\">
  1730. \t\t\t\t\t<div class=\"shop-actions-ebay\">
  1731. \t\t\t\t\t\t";
  1732.         // line 1705
  1733.         if ((($tmp CoreExtension::getAttribute($this->env$this->source, ($context["app"] ?? null), "user", [], "any"falsefalsefalse1705)) && $tmp instanceof Markup ? (string) $tmp $tmp)) {
  1734.             // line 1706
  1735.             yield "\t\t\t\t\t\t\t<button id=\"follow-button\" class=\"btn btn-primary btn-ebay ";
  1736.             if ((($tmp = ($context["isFollowing"] ?? null)) && $tmp instanceof Markup ? (string) $tmp $tmp)) {
  1737.                 yield "following";
  1738.             }
  1739.             yield "\" data-shop-id=\"";
  1740.             yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source, ($context["shop"] ?? null), "id", [], "any"falsefalsefalse1706), "html"nulltrue);
  1741.             yield "\" data-following=\"";
  1742.             yield (((($tmp = ($context["isFollowing"] ?? null)) && $tmp instanceof Markup ? (string) $tmp $tmp)) ? ("true") : ("false"));
  1743.             yield "\">
  1744. \t\t\t\t\t\t\t\t<span id=\"follow-text\">
  1745. \t\t\t\t\t\t\t\t\t";
  1746.             // line 1708
  1747.             if ((($tmp = ($context["isFollowing"] ?? null)) && $tmp instanceof Markup ? (string) $tmp $tmp)) {
  1748.                 // line 1709
  1749.                 yield "\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-checkmark-circle me-1\"></i> Suivi
  1750. \t\t\t\t\t\t\t\t\t";
  1751.             } else {
  1752.                 // line 1711
  1753.                 yield "\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-plus me-1\"></i> Suivre
  1754. \t\t\t\t\t\t\t\t\t";
  1755.             }
  1756.             // line 1713
  1757.             yield "\t\t\t\t\t\t\t\t</span>
  1758. \t\t\t\t\t\t\t</button>
  1759. \t\t\t\t\t\t";
  1760.         } else {
  1761.             // line 1716
  1762.             yield "\t\t\t\t\t\t\t<a href=\"";
  1763.             yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("ui_app_login");
  1764.             yield "\" class=\"btn btn-primary btn-ebay\">
  1765. \t\t\t\t\t\t\t\t<i class=\"lnr lnr-user me-1\"></i> Se connecter pour suivre
  1766. \t\t\t\t\t\t\t</a>
  1767. \t\t\t\t\t\t";
  1768.         }
  1769.         // line 1720
  1770.         yield "
  1771. \t\t\t\t\t\t<button class=\"btn btn-outline-secondary btn-ebay\" onclick=\"shareShop()\">
  1772. \t\t\t\t\t\t\t<i class=\"lnr lnr-bubble me-1\"></i> Partager
  1773. \t\t\t\t\t\t</button>
  1774. \t\t\t\t\t\t<button class=\"btn btn-outline-danger btn-ebay\" onclick=\"reportShop()\">
  1775. \t\t\t\t\t\t\t<i class=\"lnr lnr-flag me-1\"></i> Signaler
  1776. \t\t\t\t\t\t</button>
  1777. \t\t\t\t\t\t";
  1778.         // line 1729
  1779.         if ((($tmp = ($context["canEdit"] ?? null)) && $tmp instanceof Markup ? (string) $tmp $tmp)) {
  1780.             // line 1730
  1781.             yield "\t\t\t\t\t\t\t<a href=\"";
  1782.             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"falsefalsefalse1730)]), "html"nulltrue);
  1783.             yield "\" class=\"btn btn-outline-primary btn-ebay\">
  1784. \t\t\t\t\t\t\t\t<i class=\"lnr lnr-pencil me-1\"></i> Modifier la boutique
  1785. \t\t\t\t\t\t\t</a>
  1786. \t\t\t\t\t\t";
  1787.         }
  1788.         // line 1734
  1789.         yield "\t\t\t\t\t</div>
  1790. \t\t\t\t</div>
  1791. \t\t\t</div>
  1792. \t\t</div>
  1793. \t</section>
  1794. \t<!-- Shop Tabs eBay-style avec Karma -->
  1795. \t<section class=\"container\">
  1796. \t\t<div class=\"shop-tabs\">
  1797. \t\t\t<ul class=\"nav nav-tabs shop-tabs-nav\" role=\"tablist\">
  1798. \t\t\t\t<li class=\"nav-item shop-tab\">
  1799. \t\t\t\t\t<a href=\"#shop-items\" class=\"nav-link shop-tab-link active\" data-tab=\"items\" role=\"tab\">
  1800. \t\t\t\t\t\tBoutique
  1801. \t\t\t\t\t</a>
  1802. \t\t\t\t</li>
  1803. \t\t\t\t<li class=\"nav-item shop-tab\">
  1804. \t\t\t\t\t<a href=\"#shop-sale\" class=\"nav-link shop-tab-link\" data-tab=\"sale\" role=\"tab\">
  1805. \t\t\t\t\t\tPromotions
  1806. \t\t\t\t\t</a>
  1807. \t\t\t\t</li>
  1808. \t\t\t\t<li class=\"nav-item shop-tab\">
  1809. \t\t\t\t\t<a href=\"#shop-about\" class=\"nav-link shop-tab-link\" data-tab=\"about\" role=\"tab\">
  1810. \t\t\t\t\t\tÀ propos
  1811. \t\t\t\t\t</a>
  1812. \t\t\t\t</li>
  1813. \t\t\t\t<li class=\"nav-item shop-tab\">
  1814. \t\t\t\t\t<a href=\"#shop-feedback\" class=\"nav-link shop-tab-link\" data-tab=\"feedback\" role=\"tab\">
  1815. \t\t\t\t\t\tAvis (";
  1816.         // line 1761
  1817.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source, ($context["shop"] ?? null), "getVisibleReviewsCount", [], "method"falsefalsefalse1761), "html"nulltrue);
  1818.         yield ")
  1819. \t\t\t\t\t</a>
  1820. \t\t\t\t</li>
  1821. \t\t\t</ul>
  1822. \t\t\t<!-- Tab Content: Shop Items avec Karma -->
  1823. \t\t\t<div id=\"shop-items\" class=\"tab-content shop-tab-content active\">
  1824. \t\t\t\t<div class=\"row\">
  1825. \t\t\t\t\t<div class=\"col-lg-12\">
  1826. \t\t\t\t\t\t<div class=\"d-flex justify-content-between align-items-center mb-4\">
  1827. \t\t\t\t\t\t\t<h4 class=\"mb-0\">Produits de
  1828. \t\t\t\t\t\t\t\t";
  1829.         // line 1772
  1830.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source, ($context["shop"] ?? null), "name", [], "any"falsefalsefalse1772), "html"nulltrue);
  1831.         yield "</h4>
  1832. \t\t\t\t\t\t\t<div class=\"d-flex align-items-center gap-3\">
  1833. \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;\">
  1834. \t\t\t\t\t\t\t\t\t<span class=\"product-count\">";
  1835.         // line 1775
  1836.         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"nulltrue);
  1837.         yield "</span>
  1838. \t\t\t\t\t\t\t\t\t<span style=\"font-size: 1rem; font-weight: 400;\">produits</span>
  1839. \t\t\t\t\t\t\t\t</span>
  1840. \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);\">
  1841. \t\t\t\t\t\t\t\t\t<option value=\"\">Trier par</option>
  1842. \t\t\t\t\t\t\t\t\t<option value=\"price_asc\">Prix : Croissant</option>
  1843. \t\t\t\t\t\t\t\t\t<option value=\"price_desc\">Prix : Décroissant</option>
  1844. \t\t\t\t\t\t\t\t\t<option value=\"newest\">Plus récents</option>
  1845. \t\t\t\t\t\t\t\t\t<option value=\"popular\">Plus populaires</option>
  1846. \t\t\t\t\t\t\t\t\t<option value=\"name_asc\">Nom : A-Z</option>
  1847. \t\t\t\t\t\t\t\t\t<option value=\"name_desc\">Nom : Z-A</option>
  1848. \t\t\t\t\t\t\t\t</select>
  1849. \t\t\t\t\t\t\t</div>
  1850. \t\t\t\t\t\t</div>
  1851. \t\t\t\t\t\t";
  1852.         // line 1791
  1853.         if ((Twig\Extension\CoreExtension::length($this->env->getCharset(), ($context["products"] ?? null)) > 0)) {
  1854.             // line 1792
  1855.             yield "\t\t\t\t\t\t\t<div class=\"row\" id=\"products-container\">
  1856. \t\t\t\t\t\t\t\t";
  1857.             // line 1793
  1858.             $context['_parent'] = $context;
  1859.             $context['_seq'] = CoreExtension::ensureTraversable(($context["products"] ?? null));
  1860.             $context['loop'] = [
  1861.               'parent' => $context['_parent'],
  1862.               'index0' => 0,
  1863.               'index'  => 1,
  1864.               'first'  => true,
  1865.             ];
  1866.             if (is_array($context['_seq']) || (is_object($context['_seq']) && $context['_seq'] instanceof \Countable)) {
  1867.                 $length count($context['_seq']);
  1868.                 $context['loop']['revindex0'] = $length 1;
  1869.                 $context['loop']['revindex'] = $length;
  1870.                 $context['loop']['length'] = $length;
  1871.                 $context['loop']['last'] = === $length;
  1872.             }
  1873.             foreach ($context['_seq'] as $context["_key"] => $context["product"]) {
  1874.                 // line 1794
  1875.                 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=\"";
  1876.                 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source$context["product"], "price", [], "any"falsefalsefalse1794), "html"nulltrue);
  1877.                 yield "\" data-name=\"";
  1878.                 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"falsefalsefalse1794)), "html"nulltrue);
  1879.                 yield "\" data-views=\"";
  1880.                 yield (((CoreExtension::getAttribute($this->env$this->source$context["product"], "viewCount", [], "any"truetruefalse1794) &&  !(null === CoreExtension::getAttribute($this->env$this->source$context["product"], "viewCount", [], "any"falsefalsefalse1794)))) ? ($this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source$context["product"], "viewCount", [], "any"falsefalsefalse1794), "html"nulltrue)) : (0));
  1881.                 yield "\" data-created=\"";
  1882.                 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Twig\Extension\CoreExtension']->formatDate(CoreExtension::getAttribute($this->env$this->source$context["product"], "publishedAt", [], "any"falsefalsefalse1794), "Y-m-d"), "html"nulltrue);
  1883.                 yield "\">
  1884. \t\t\t\t\t\t\t\t\t\t";
  1885.                 // line 1795
  1886.                 yield from $this->load("home/_single_product_card.html.twig"1795)->unwrap()->yield(CoreExtension::merge($context, ["product" => $context["product"]]));
  1887.                 // line 1796
  1888.                 yield "\t\t\t\t\t\t\t\t\t</div>
  1889. \t\t\t\t\t\t\t\t";
  1890.                 ++$context['loop']['index0'];
  1891.                 ++$context['loop']['index'];
  1892.                 $context['loop']['first'] = false;
  1893.                 if (isset($context['loop']['revindex0'], $context['loop']['revindex'])) {
  1894.                     --$context['loop']['revindex0'];
  1895.                     --$context['loop']['revindex'];
  1896.                     $context['loop']['last'] = === $context['loop']['revindex0'];
  1897.                 }
  1898.             }
  1899.             $_parent $context['_parent'];
  1900.             unset($context['_seq'], $context['_key'], $context['product'], $context['_parent'], $context['loop']);
  1901.             $context array_intersect_key($context$_parent) + $_parent;
  1902.             // line 1798
  1903.             yield "\t\t\t\t\t\t\t</div>
  1904. \t\t\t\t\t\t";
  1905.         } else {
  1906.             // line 1800
  1907.             yield "\t\t\t\t\t\t\t<div class=\"text-center py-5\">
  1908. \t\t\t\t\t\t\t\t<i class=\"lnr lnr-package\" style=\"font-size: 4rem; color: #ccc;\"></i>
  1909. \t\t\t\t\t\t\t\t<h4 class=\"mt-3\">Aucun produit disponible</h4>
  1910. \t\t\t\t\t\t\t\t<p class=\"text-muted\">Cette boutique n'a pas encore de produits en vente.</p>
  1911. \t\t\t\t\t\t\t</div>
  1912. \t\t\t\t\t\t";
  1913.         }
  1914.         // line 1806
  1915.         yield "\t\t\t\t\t</div>
  1916. \t\t\t\t</div>
  1917. \t\t\t</div>
  1918. \t\t\t<!-- Tab Content: Sale avec Karma -->
  1919. \t\t\t<div id=\"shop-sale\" class=\"tab-content shop-tab-content\">
  1920. \t\t\t\t<div class=\"text-center py-5\">
  1921. \t\t\t\t\t<i class=\"lnr lnr-tag\" style=\"font-size: 4rem; color: #ccc;\"></i>
  1922. \t\t\t\t\t<h4 class=\"mt-3\">Aucune promotion actuellement</h4>
  1923. \t\t\t\t\t<p class=\"text-muted\">Cette boutique n'a pas de promotions actives pour le moment.</p>
  1924. \t\t\t\t</div>
  1925. \t\t\t</div>
  1926. \t\t\t<!-- Tab Content: About avec Karma -->
  1927. \t\t\t<div id=\"shop-about\" class=\"tab-content shop-tab-content\">
  1928. \t\t\t\t<div class=\"row\">
  1929. \t\t\t\t\t<div class=\"col-lg-8\">
  1930. \t\t\t\t\t\t<div class=\"card\">
  1931. \t\t\t\t\t\t\t<div class=\"card-header\">
  1932. \t\t\t\t\t\t\t\t<h5 class=\"mb-0\">
  1933. \t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-user me-2\"></i>À propos de
  1934. \t\t\t\t\t\t\t\t\t";
  1935.         // line 1828
  1936.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source, ($context["shop"] ?? null), "name", [], "any"falsefalsefalse1828), "html"nulltrue);
  1937.         yield "
  1938. \t\t\t\t\t\t\t\t</h5>
  1939. \t\t\t\t\t\t\t</div>
  1940. \t\t\t\t\t\t\t<div class=\"card-body\">
  1941. \t\t\t\t\t\t\t\t";
  1942.         // line 1832
  1943.         if ((($tmp CoreExtension::getAttribute($this->env$this->source, ($context["shop"] ?? null), "description", [], "any"falsefalsefalse1832)) && $tmp instanceof Markup ? (string) $tmp $tmp)) {
  1944.             // line 1833
  1945.             yield "\t\t\t\t\t\t\t\t\t<p class=\"card-text\">";
  1946.             yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source, ($context["shop"] ?? null), "description", [], "any"falsefalsefalse1833), "html"nulltrue);
  1947.             yield "</p>
  1948. \t\t\t\t\t\t\t\t";
  1949.         } else {
  1950.             // line 1835
  1951.             yield "\t\t\t\t\t\t\t\t\t<p class=\"text-muted\">Aucune description disponible.</p>
  1952. \t\t\t\t\t\t\t\t";
  1953.         }
  1954.         // line 1837
  1955.         yield "
  1956. \t\t\t\t\t\t\t\t";
  1957.         // line 1838
  1958.         if ((($tmp CoreExtension::getAttribute($this->env$this->source, ($context["shop"] ?? null), "businessHours", [], "any"falsefalsefalse1838)) && $tmp instanceof Markup ? (string) $tmp $tmp)) {
  1959.             // line 1839
  1960.             yield "\t\t\t\t\t\t\t\t\t<h6 class=\"mt-4\">
  1961. \t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-clock me-2\"></i>Heures d'ouverture
  1962. \t\t\t\t\t\t\t\t\t</h6>
  1963. \t\t\t\t\t\t\t\t\t<p>";
  1964.             // line 1842
  1965.             yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source, ($context["shop"] ?? null), "businessHours", [], "any"falsefalsefalse1842), "html"nulltrue);
  1966.             yield "</p>
  1967. \t\t\t\t\t\t\t\t";
  1968.         }
  1969.         // line 1844
  1970.         yield "
  1971. \t\t\t\t\t\t\t\t";
  1972.         // line 1845
  1973.         if ((($tmp CoreExtension::getAttribute($this->env$this->source, ($context["shop"] ?? null), "returnPolicy", [], "any"falsefalsefalse1845)) && $tmp instanceof Markup ? (string) $tmp $tmp)) {
  1974.             // line 1846
  1975.             yield "\t\t\t\t\t\t\t\t\t<h6 class=\"mt-4\">
  1976. \t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-undo me-2\"></i>Politique de retour
  1977. \t\t\t\t\t\t\t\t\t</h6>
  1978. \t\t\t\t\t\t\t\t\t<p>";
  1979.             // line 1849
  1980.             yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source, ($context["shop"] ?? null), "returnPolicy", [], "any"falsefalsefalse1849), "html"nulltrue);
  1981.             yield "</p>
  1982. \t\t\t\t\t\t\t\t";
  1983.         }
  1984.         // line 1851
  1985.         yield "\t\t\t\t\t\t\t</div>
  1986. \t\t\t\t\t\t</div>
  1987. \t\t\t\t\t</div>
  1988. \t\t\t\t\t<div class=\"col-lg-4\">
  1989. \t\t\t\t\t\t<div class=\"card shop-info-card\">
  1990. \t\t\t\t\t\t\t<div class=\"card-header\">
  1991. \t\t\t\t\t\t\t\t<h6 class=\"mb-0\">
  1992. \t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-chart me-2\"></i>Statistiques de la boutique
  1993. \t\t\t\t\t\t\t\t</h6>
  1994. \t\t\t\t\t\t\t</div>
  1995. \t\t\t\t\t\t\t<div class=\"card-body\">
  1996. \t\t\t\t\t\t\t\t<div class=\"row text-center\">
  1997. \t\t\t\t\t\t\t\t\t<div class=\"col-6\">
  1998. \t\t\t\t\t\t\t\t\t\t<div class=\"shop-stat-item\">
  1999. \t\t\t\t\t\t\t\t\t\t\t<span class=\"stat-number h4 text-primary\">";
  2000.         // line 1865
  2001.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source, ($context["stats"] ?? null), "activeProducts", [], "any"falsefalsefalse1865), "html"nulltrue);
  2002.         yield "</span>
  2003. \t\t\t\t\t\t\t\t\t\t\t<span class=\"stat-label d-block\">Produits actifs</span>
  2004. \t\t\t\t\t\t\t\t\t\t</div>
  2005. \t\t\t\t\t\t\t\t\t</div>
  2006. \t\t\t\t\t\t\t\t\t<div class=\"col-6\">
  2007. \t\t\t\t\t\t\t\t\t\t<div class=\"shop-stat-item\">
  2008. \t\t\t\t\t\t\t\t\t\t\t<span class=\"stat-number h4 text-info\">";
  2009.         // line 1871
  2010.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source, ($context["stats"] ?? null), "shopViews", [], "any"falsefalsefalse1871), "html"nulltrue);
  2011.         yield "</span>
  2012. \t\t\t\t\t\t\t\t\t\t\t<span class=\"stat-label d-block\">Vues boutique</span>
  2013. \t\t\t\t\t\t\t\t\t\t</div>
  2014. \t\t\t\t\t\t\t\t\t</div>
  2015. \t\t\t\t\t\t\t\t</div>
  2016. \t\t\t\t\t\t\t</div>
  2017. \t\t\t\t\t\t</div>
  2018. \t\t\t\t\t</div>
  2019. \t\t\t\t</div>
  2020. \t\t\t</div>
  2021. \t\t\t<!-- Tab Content: Feedback avec Karma -->
  2022. \t\t\t<div id=\"shop-feedback\" class=\"tab-content shop-tab-content\">
  2023. \t\t\t\t<div class=\"row\">
  2024. \t\t\t\t\t<div
  2025. \t\t\t\t\t\tclass=\"col-lg-8\">
  2026. \t\t\t\t\t\t<!-- Statistiques des avis -->
  2027. \t\t\t\t\t\t<div class=\"review-stats mb-4\">
  2028. \t\t\t\t\t\t\t<div class=\"row\">
  2029. \t\t\t\t\t\t\t\t<div class=\"col-md-4\">
  2030. \t\t\t\t\t\t\t\t\t<div class=\"stat-card text-center\">
  2031. \t\t\t\t\t\t\t\t\t\t<h3 class=\"stat-number\">";
  2032.         // line 1892
  2033.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source, ($context["shop"] ?? null), "getAverageRating", [], "method"falsefalsefalse1892), "html"nulltrue);
  2034.         yield "</h3>
  2035. \t\t\t\t\t\t\t\t\t\t<div class=\"rating-stars\">
  2036. \t\t\t\t\t\t\t\t\t\t\t";
  2037.         // line 1894
  2038.         $context['_parent'] = $context;
  2039.         $context['_seq'] = CoreExtension::ensureTraversable(range(15));
  2040.         foreach ($context['_seq'] as $context["_key"] => $context["i"]) {
  2041.             // line 1895
  2042.             yield "\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-star";
  2043.             if (($context["i"] <= CoreExtension::getAttribute($this->env$this->source, ($context["shop"] ?? null), "getAverageRating", [], "method"falsefalsefalse1895))) {
  2044.             } else {
  2045.                 yield "-empty";
  2046.             }
  2047.             yield "\"></i>
  2048. \t\t\t\t\t\t\t\t\t\t\t";
  2049.         }
  2050.         $_parent $context['_parent'];
  2051.         unset($context['_seq'], $context['_key'], $context['i'], $context['_parent']);
  2052.         $context array_intersect_key($context$_parent) + $_parent;
  2053.         // line 1897
  2054.         yield "\t\t\t\t\t\t\t\t\t\t</div>
  2055. \t\t\t\t\t\t\t\t\t\t<p class=\"stat-label\">Note moyenne</p>
  2056. \t\t\t\t\t\t\t\t\t</div>
  2057. \t\t\t\t\t\t\t\t</div>
  2058. \t\t\t\t\t\t\t\t<div class=\"col-md-4\">
  2059. \t\t\t\t\t\t\t\t\t<div class=\"stat-card text-center\">
  2060. \t\t\t\t\t\t\t\t\t\t<h3 class=\"stat-number\">";
  2061.         // line 1903
  2062.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source, ($context["shop"] ?? null), "getVisibleReviewsCount", [], "method"falsefalsefalse1903), "html"nulltrue);
  2063.         yield "</h3>
  2064. \t\t\t\t\t\t\t\t\t\t<p class=\"stat-label\">Avis clients</p>
  2065. \t\t\t\t\t\t\t\t\t</div>
  2066. \t\t\t\t\t\t\t\t</div>
  2067. \t\t\t\t\t\t\t\t<div class=\"col-md-4\">
  2068. \t\t\t\t\t\t\t\t\t<div class=\"stat-card text-center\">
  2069. \t\t\t\t\t\t\t\t\t\t<h3 class=\"stat-number\">";
  2070.         // line 1909
  2071.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(Twig\Extension\CoreExtension::round(((CoreExtension::getAttribute($this->env$this->source, ($context["shop"] ?? null), "getVisibleReviewsCount", [], "method"falsefalsefalse1909) / 100) * 100)), "html"nulltrue);
  2072.         yield "%</h3>
  2073. \t\t\t\t\t\t\t\t\t\t<p class=\"stat-label\">Satisfaction</p>
  2074. \t\t\t\t\t\t\t\t\t</div>
  2075. \t\t\t\t\t\t\t\t</div>
  2076. \t\t\t\t\t\t\t</div>
  2077. \t\t\t\t\t\t</div>
  2078. \t\t\t\t\t\t<!-- Liste des avis récents -->
  2079. \t\t\t\t\t\t<div class=\"reviews-preview\">
  2080. \t\t\t\t\t\t\t<h5 class=\"mb-3\">Avis récents</h5>
  2081. \t\t\t\t\t\t\t";
  2082.         // line 1919
  2083.         if ((Twig\Extension\CoreExtension::length($this->env->getCharset(), CoreExtension::getAttribute($this->env$this->source, ($context["shop"] ?? null), "reviews", [], "any"falsefalsefalse1919)) > 0)) {
  2084.             // line 1920
  2085.             yield "\t\t\t\t\t\t\t\t<div class=\"reviews-list\">
  2086. \t\t\t\t\t\t\t\t\t";
  2087.             // line 1921
  2088.             $context['_parent'] = $context;
  2089.             $context['_seq'] = CoreExtension::ensureTraversable(Twig\Extension\CoreExtension::slice($this->env->getCharset(), CoreExtension::getAttribute($this->env$this->source, ($context["shop"] ?? null), "reviews", [], "any"falsefalsefalse1921), 05));
  2090.             foreach ($context['_seq'] as $context["_key"] => $context["review"]) {
  2091.                 // line 1922
  2092.                 yield "\t\t\t\t\t\t\t\t\t\t";
  2093.                 if ((($tmp CoreExtension::getAttribute($this->env$this->source$context["review"], "isVisible", [], "any"falsefalsefalse1922)) && $tmp instanceof Markup ? (string) $tmp $tmp)) {
  2094.                     // line 1923
  2095.                     yield "\t\t\t\t\t\t\t\t\t\t\t<div class=\"review-item\">
  2096. \t\t\t\t\t\t\t\t\t\t\t\t<div class=\"review-header\">
  2097. \t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"reviewer-info\">
  2098. \t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"reviewer-avatar\">
  2099. \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-user\"></i>
  2100. \t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>
  2101. \t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"reviewer-details\">
  2102. \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<h6 class=\"reviewer-name\">";
  2103.                     // line 1930
  2104.                     yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->sourceCoreExtension::getAttribute($this->env$this->source$context["review"], "user", [], "any"falsefalsefalse1930), "userIdentifier", [], "any"falsefalsefalse1930), "html"nulltrue);
  2105.                     yield "</h6>
  2106. \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"review-rating\">
  2107. \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t";
  2108.                     // line 1932
  2109.                     $context['_parent'] = $context;
  2110.                     $context['_seq'] = CoreExtension::ensureTraversable(range(15));
  2111.                     foreach ($context['_seq'] as $context["_key"] => $context["i"]) {
  2112.                         // line 1933
  2113.                         yield "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-star";
  2114.                         if (($context["i"] <= CoreExtension::getAttribute($this->env$this->source$context["review"], "rating", [], "any"falsefalsefalse1933))) {
  2115.                         } else {
  2116.                             yield "-empty";
  2117.                         }
  2118.                         yield "\"></i>
  2119. \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t";
  2120.                     }
  2121.                     $_parent $context['_parent'];
  2122.                     unset($context['_seq'], $context['_key'], $context['i'], $context['_parent']);
  2123.                     $context array_intersect_key($context$_parent) + $_parent;
  2124.                     // line 1935
  2125.                     yield "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>
  2126. \t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>
  2127. \t\t\t\t\t\t\t\t\t\t\t\t\t</div>
  2128. \t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"review-meta\">
  2129. \t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"review-date\">";
  2130.                     // line 1939
  2131.                     yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Twig\Extension\CoreExtension']->formatDate(CoreExtension::getAttribute($this->env$this->source$context["review"], "createdAt", [], "any"falsefalsefalse1939), "d/m/Y"), "html"nulltrue);
  2132.                     yield "</span>
  2133. \t\t\t\t\t\t\t\t\t\t\t\t\t\t";
  2134.                     // line 1940
  2135.                     if ((($tmp CoreExtension::getAttribute($this->env$this->source$context["review"], "isVerified", [], "any"falsefalsefalse1940)) && $tmp instanceof Markup ? (string) $tmp $tmp)) {
  2136.                         // line 1941
  2137.                         yield "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"verified-badge\">
  2138. \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-checkmark-circle\"></i>
  2139. \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tVérifié
  2140. \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>
  2141. \t\t\t\t\t\t\t\t\t\t\t\t\t\t";
  2142.                     }
  2143.                     // line 1946
  2144.                     yield "\t\t\t\t\t\t\t\t\t\t\t\t\t</div>
  2145. \t\t\t\t\t\t\t\t\t\t\t\t</div>
  2146. \t\t\t\t\t\t\t\t\t\t\t\t";
  2147.                     // line 1949
  2148.                     if ((($tmp CoreExtension::getAttribute($this->env$this->source$context["review"], "comment", [], "any"falsefalsefalse1949)) && $tmp instanceof Markup ? (string) $tmp $tmp)) {
  2149.                         // line 1950
  2150.                         yield "\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"review-comment\">
  2151. \t\t\t\t\t\t\t\t\t\t\t\t\t\t<p>";
  2152.                         // line 1951
  2153.                         yield (((Twig\Extension\CoreExtension::length($this->env->getCharset(), CoreExtension::getAttribute($this->env$this->source$context["review"], "comment", [], "any"falsefalsefalse1951)) > 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"falsefalsefalse1951), 0150) . "..."), "html"nulltrue)) : ($this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source$context["review"], "comment", [], "any"falsefalsefalse1951), "html"nulltrue)));
  2154.                         yield "</p>
  2155. \t\t\t\t\t\t\t\t\t\t\t\t\t</div>
  2156. \t\t\t\t\t\t\t\t\t\t\t\t";
  2157.                     }
  2158.                     // line 1954
  2159.                     yield "\t\t\t\t\t\t\t\t\t\t\t</div>
  2160. \t\t\t\t\t\t\t\t\t\t";
  2161.                 }
  2162.                 // line 1956
  2163.                 yield "\t\t\t\t\t\t\t\t\t";
  2164.             }
  2165.             $_parent $context['_parent'];
  2166.             unset($context['_seq'], $context['_key'], $context['review'], $context['_parent']);
  2167.             $context array_intersect_key($context$_parent) + $_parent;
  2168.             // line 1957
  2169.             yield "\t\t\t\t\t\t\t\t</div>
  2170. \t\t\t\t\t\t\t\t<div class=\"text-center mt-4\">
  2171. \t\t\t\t\t\t\t\t\t<a href=\"";
  2172.             // line 1960
  2173.             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"falsefalsefalse1960)]), "html"nulltrue);
  2174.             yield "\" class=\"btn btn-primary\">
  2175. \t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-star me-1\"></i>Voir tous les avis
  2176. \t\t\t\t\t\t\t\t\t</a>
  2177. \t\t\t\t\t\t\t\t</div>
  2178. \t\t\t\t\t\t\t";
  2179.         } else {
  2180.             // line 1965
  2181.             yield "\t\t\t\t\t\t\t\t<div class=\"text-center py-4\">
  2182. \t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-star\" style=\"font-size: 3rem; color: #ccc;\"></i>
  2183. \t\t\t\t\t\t\t\t\t<h5 class=\"mt-3\">Aucun avis pour le moment</h5>
  2184. \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>
  2185. \t\t\t\t\t\t\t\t</div>
  2186. \t\t\t\t\t\t\t";
  2187.         }
  2188.         // line 1971
  2189.         yield "\t\t\t\t\t\t</div>
  2190. \t\t\t\t\t</div>
  2191. \t\t\t\t\t<div
  2192. \t\t\t\t\t\tclass=\"col-lg-4\">
  2193. \t\t\t\t\t\t<!-- Lien vers la page complète des avis -->
  2194. \t\t\t\t\t\t<div class=\"review-actions-card\">
  2195. \t\t\t\t\t\t\t<h5>Évaluer cette boutique</h5>
  2196. \t\t\t\t\t\t\t<p class=\"text-muted\">Partagez votre expérience avec cette boutique.</p>
  2197. \t\t\t\t\t\t\t<a href=\"";
  2198.         // line 1980
  2199.         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"falsefalsefalse1980)]), "html"nulltrue);
  2200.         yield "\" class=\"btn btn-primary w-100\">
  2201. \t\t\t\t\t\t\t\t<i class=\"lnr lnr-star me-1\"></i>Laisser un avis
  2202. \t\t\t\t\t\t\t</a>
  2203. \t\t\t\t\t\t</div>
  2204. \t\t\t\t\t</div>
  2205. \t\t\t\t</div>
  2206. \t\t\t</div>
  2207. \t\t</div>
  2208. \t</section>
  2209. \t<!-- Modal de signalement -->
  2210. \t<div class=\"modal fade\" id=\"reportModal\" tabindex=\"-1\" aria-labelledby=\"reportModalLabel\" aria-hidden=\"true\">
  2211. \t\t<div class=\"modal-dialog\">
  2212. \t\t\t<div class=\"modal-content\">
  2213. \t\t\t\t<div class=\"modal-header\">
  2214. \t\t\t\t\t<h5 class=\"modal-title\" id=\"reportModalLabel\">
  2215. \t\t\t\t\t\t<i class=\"lnr lnr-flag me-2\"></i>&nbsp;Signaler cette boutique
  2216. \t\t\t\t\t</h5>
  2217. \t\t\t\t\t<button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>
  2218. \t\t\t\t</div>
  2219. \t\t\t\t<div class=\"modal-body\">
  2220. \t\t\t\t\t<form id=\"reportForm\">
  2221. \t\t\t\t\t\t<div class=\"mb-3\">
  2222. \t\t\t\t\t\t\t<label for=\"reportReason\" class=\"form-label\">Motif du signalement *</label>
  2223. \t\t\t\t\t\t\t<select class=\"form-select\" id=\"reportReason\" required>
  2224. \t\t\t\t\t\t\t\t<option value=\"\">Sélectionnez un motif</option>
  2225. \t\t\t\t\t\t\t\t<option value=\"fake_products\">Produits contrefaits</option>
  2226. \t\t\t\t\t\t\t\t<option value=\"inappropriate_content\">Contenu inapproprié</option>
  2227. \t\t\t\t\t\t\t\t<option value=\"spam\">Spam ou publicité abusive</option>
  2228. \t\t\t\t\t\t\t\t<option value=\"fraud\">Fraude ou escroquerie</option>
  2229. \t\t\t\t\t\t\t\t<option value=\"harassment\">Harcèlement</option>
  2230. \t\t\t\t\t\t\t\t<option value=\"other\">Autre</option>
  2231. \t\t\t\t\t\t\t</select>
  2232. \t\t\t\t\t\t</div>
  2233. \t\t\t\t\t\t<div class=\"mb-3\">
  2234. \t\t\t\t\t\t\t<label for=\"reportDescription\" class=\"form-label\">Description détaillée *</label>
  2235. \t\t\t\t\t\t\t<textarea class=\"form-control\" id=\"reportDescription\" rows=\"4\" placeholder=\"Décrivez le problème rencontré...\" required></textarea>
  2236. \t\t\t\t\t\t</div>
  2237. \t\t\t\t\t\t<div class=\"mb-3\">
  2238. \t\t\t\t\t\t\t<label for=\"reportEmail\" class=\"form-label\">Votre email (optionnel)</label>
  2239. \t\t\t\t\t\t\t<input type=\"email\" class=\"form-control\" id=\"reportEmail\" placeholder=\"votre@email.com\">
  2240. \t\t\t\t\t\t\t<div class=\"form-text\">Nous pourrons vous contacter pour plus d'informations</div>
  2241. \t\t\t\t\t\t</div>
  2242. \t\t\t\t\t</form>
  2243. \t\t\t\t</div>
  2244. \t\t\t\t<div class=\"modal-footer\">
  2245. \t\t\t\t\t<button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Annuler</button>
  2246. \t\t\t\t\t<button type=\"button\" class=\"btn btn-danger\" onclick=\"submitReport()\">
  2247. \t\t\t\t\t\t<i class=\"lnr lnr-flag  me-2\"></i>Envoyer le signalement
  2248. \t\t\t\t\t</button>
  2249. \t\t\t\t</div>
  2250. \t\t\t</div>
  2251. \t\t</div>
  2252. \t</div>
  2253. \t<!-- Section des avis -->
  2254. \t<div class=\"container my-5\">
  2255. \t\t<div class=\"row\">
  2256. \t\t\t<div class=\"col-12\">
  2257. \t\t\t\t<div class=\"section-title text-center\">
  2258. \t\t\t\t\t<h2>Avis clients</h2>
  2259. \t\t\t\t\t<p>Découvrez ce que pensent nos clients de cette boutique</p>
  2260. \t\t\t\t</div>
  2261. \t\t\t</div>
  2262. \t\t</div>
  2263. \t\t<div
  2264. \t\t\tclass=\"row\">
  2265. \t\t\t<!-- Statistiques des avis -->
  2266. \t\t\t<div class=\"col-md-4\">
  2267. \t\t\t\t<div class=\"review-stats-card\">
  2268. \t\t\t\t\t<div class=\"stats-header\">
  2269. \t\t\t\t\t\t<div class=\"overall-rating\">
  2270. \t\t\t\t\t\t\t<span class=\"rating-number\">";
  2271.         // line 2053
  2272.         yield (((Twig\Extension\CoreExtension::length($this->env->getCharset(), CoreExtension::getAttribute($this->env$this->source, ($context["shop"] ?? null), "reviews", [], "any"falsefalsefalse2053)) > 0)) ? ($this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Twig\Extension\CoreExtension']->formatNumber((Twig\Extension\CoreExtension::reduce($this->envTwig\Extension\CoreExtension::map($this->envCoreExtension::getAttribute($this->env$this->source, ($context["shop"] ?? null), "reviews", [], "any"falsefalsefalse2053), function ($__r__) use ($context$macros) { $context["r"] = $__r__; return CoreExtension::getAttribute($this->env$this->source, ($context["r"] ?? null), "rating", [], "any"falsefalsefalse2053); }), 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"falsefalsefalse2053))), 1), "html"nulltrue)) : ("0.0"));
  2273.         yield "</span>
  2274. \t\t\t\t\t\t\t<div class=\"stars\">
  2275. \t\t\t\t\t\t\t\t";
  2276.         // line 2055
  2277.         $context["avgRating"] = (((Twig\Extension\CoreExtension::length($this->env->getCharset(), CoreExtension::getAttribute($this->env$this->source, ($context["shop"] ?? null), "reviews", [], "any"falsefalsefalse2055)) > 0)) ? ((Twig\Extension\CoreExtension::reduce($this->envTwig\Extension\CoreExtension::map($this->envCoreExtension::getAttribute($this->env$this->source, ($context["shop"] ?? null), "reviews", [], "any"falsefalsefalse2055), function ($__r__) use ($context$macros) { $context["r"] = $__r__; return CoreExtension::getAttribute($this->env$this->source, ($context["r"] ?? null), "rating", [], "any"falsefalsefalse2055); }), 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"falsefalsefalse2055)))) : (0));
  2278.         // line 2056
  2279.         yield "\t\t\t\t\t\t\t\t";
  2280.         $context['_parent'] = $context;
  2281.         $context['_seq'] = CoreExtension::ensureTraversable(range(15));
  2282.         foreach ($context['_seq'] as $context["_key"] => $context["i"]) {
  2283.             // line 2057
  2284.             yield "\t\t\t\t\t\t\t\t\t";
  2285.             if (($context["i"] <= ($context["avgRating"] ?? null))) {
  2286.                 // line 2058
  2287.                 yield "\t\t\t\t\t\t\t\t\t\t★
  2288. \t\t\t\t\t\t\t\t\t";
  2289.             } elseif (((            // line 2059
  2290. $context["i"] - ($context["avgRating"] ?? null)) < 1)) {
  2291.                 // line 2060
  2292.                 yield "\t\t\t\t\t\t\t\t\t\t☆
  2293. \t\t\t\t\t\t\t\t\t";
  2294.             } else {
  2295.                 // line 2062
  2296.                 yield "\t\t\t\t\t\t\t\t\t\t☆
  2297. \t\t\t\t\t\t\t\t\t";
  2298.             }
  2299.             // line 2064
  2300.             yield "\t\t\t\t\t\t\t\t";
  2301.         }
  2302.         $_parent $context['_parent'];
  2303.         unset($context['_seq'], $context['_key'], $context['i'], $context['_parent']);
  2304.         $context array_intersect_key($context$_parent) + $_parent;
  2305.         // line 2065
  2306.         yield "\t\t\t\t\t\t\t</div>
  2307. \t\t\t\t\t\t</div>
  2308. \t\t\t\t\t\t<div class=\"rating-summary\">
  2309. \t\t\t\t\t\t\t<p class=\"mb-1\">";
  2310.         // line 2068
  2311.         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"falsefalsefalse2068)), "html"nulltrue);
  2312.         yield "
  2313. \t\t\t\t\t\t\t\tavis</p>
  2314. \t\t\t\t\t\t\t<p class=\"text-muted small\">Basé sur
  2315. \t\t\t\t\t\t\t\t";
  2316.         // line 2071
  2317.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(Twig\Extension\CoreExtension::length($this->env->getCharset(), Twig\Extension\CoreExtension::filter($this->envCoreExtension::getAttribute($this->env$this->source, ($context["shop"] ?? null), "reviews", [], "any"falsefalsefalse2071), function ($__r__) use ($context$macros) { $context["r"] = $__r__; return CoreExtension::getAttribute($this->env$this->source, ($context["r"] ?? null), "isVerified", [], "any"falsefalsefalse2071); })), "html"nulltrue);
  2318.         yield "
  2319. \t\t\t\t\t\t\t\tavis vérifiés</p>
  2320. \t\t\t\t\t\t</div>
  2321. \t\t\t\t\t</div>
  2322. \t\t\t\t\t<div class=\"rating-breakdown\">
  2323. \t\t\t\t\t\t";
  2324.         // line 2077
  2325.         $context['_parent'] = $context;
  2326.         $context['_seq'] = CoreExtension::ensureTraversable(range(51));
  2327.         foreach ($context['_seq'] as $context["_key"] => $context["rating"]) {
  2328.             // line 2078
  2329.             yield "\t\t\t\t\t\t\t";
  2330.             $context["count"] = Twig\Extension\CoreExtension::length($this->env->getCharset(), Twig\Extension\CoreExtension::filter($this->envCoreExtension::getAttribute($this->env$this->source, ($context["shop"] ?? null), "reviews", [], "any"falsefalsefalse2078), function ($__r__) use ($context$macros) { $context["r"] = $__r__; return (CoreExtension::getAttribute($this->env$this->source, ($context["r"] ?? null), "rating", [], "any"falsefalsefalse2078) == $context["rating"]); }));
  2331.             // line 2079
  2332.             yield "\t\t\t\t\t\t\t";
  2333.             $context["percentage"] = (((Twig\Extension\CoreExtension::length($this->env->getCharset(), CoreExtension::getAttribute($this->env$this->source, ($context["shop"] ?? null), "reviews", [], "any"falsefalsefalse2079)) > 0)) ? (((($context["count"] ?? null) / Twig\Extension\CoreExtension::length($this->env->getCharset(), CoreExtension::getAttribute($this->env$this->source, ($context["shop"] ?? null), "reviews", [], "any"falsefalsefalse2079))) * 100)) : (0));
  2334.             // line 2080
  2335.             yield "\t\t\t\t\t\t\t<div class=\"rating-bar\">
  2336. \t\t\t\t\t\t\t\t<span class=\"rating-label\">";
  2337.             // line 2081
  2338.             yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($context["rating"], "html"nulltrue);
  2339.             yield "★</span>
  2340. \t\t\t\t\t\t\t\t<div class=\"rating-progress\">
  2341. \t\t\t\t\t\t\t\t\t<div class=\"rating-fill\" style=\"width: ";
  2342.             // line 2083
  2343.             yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(($context["percentage"] ?? null), "html"nulltrue);
  2344.             yield "%\"></div>
  2345. \t\t\t\t\t\t\t\t</div>
  2346. \t\t\t\t\t\t\t\t<span class=\"rating-count\">";
  2347.             // line 2085
  2348.             yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(($context["count"] ?? null), "html"nulltrue);
  2349.             yield "</span>
  2350. \t\t\t\t\t\t\t</div>
  2351. \t\t\t\t\t\t";
  2352.         }
  2353.         $_parent $context['_parent'];
  2354.         unset($context['_seq'], $context['_key'], $context['rating'], $context['_parent']);
  2355.         $context array_intersect_key($context$_parent) + $_parent;
  2356.         // line 2088
  2357.         yield "\t\t\t\t\t</div>
  2358. \t\t\t\t</div>
  2359. \t\t\t</div>
  2360. \t\t\t<!-- Aperçu des avis -->
  2361. \t\t\t<div class=\"col-md-8\">
  2362. \t\t\t\t<div class=\"reviews-preview\">
  2363. \t\t\t\t\t";
  2364.         // line 2095
  2365.         if ((Twig\Extension\CoreExtension::length($this->env->getCharset(), CoreExtension::getAttribute($this->env$this->source, ($context["shop"] ?? null), "reviews", [], "any"falsefalsefalse2095)) > 0)) {
  2366.             // line 2096
  2367.             yield "\t\t\t\t\t\t";
  2368.             $context['_parent'] = $context;
  2369.             $context['_seq'] = CoreExtension::ensureTraversable(Twig\Extension\CoreExtension::slice($this->env->getCharset(), CoreExtension::getAttribute($this->env$this->source, ($context["shop"] ?? null), "reviews", [], "any"falsefalsefalse2096), 03));
  2370.             foreach ($context['_seq'] as $context["_key"] => $context["review"]) {
  2371.                 // line 2097
  2372.                 yield "\t\t\t\t\t\t\t<div class=\"review-card-preview\">
  2373. \t\t\t\t\t\t\t\t<div class=\"review-header\">
  2374. \t\t\t\t\t\t\t\t\t<div class=\"review-user\">
  2375. \t\t\t\t\t\t\t\t\t\t<div class=\"user-avatar\">
  2376. \t\t\t\t\t\t\t\t\t\t\t";
  2377.                 // line 2101
  2378.                 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->sourceCoreExtension::getAttribute($this->env$this->source$context["review"], "user", [], "any"falsefalsefalse2101), "firstName", [], "any"falsefalsefalse2101))), Twig\Extension\CoreExtension::upper($this->env->getCharset(), Twig\Extension\CoreExtension::first($this->env->getCharset(), CoreExtension::getAttribute($this->env$this->sourceCoreExtension::getAttribute($this->env$this->source$context["review"], "user", [], "any"falsefalsefalse2101), "email", [], "any"falsefalsefalse2101)))), "html"nulltrue);
  2379.                 yield "
  2380. \t\t\t\t\t\t\t\t\t\t</div>
  2381. \t\t\t\t\t\t\t\t\t\t<div class=\"user-info\">
  2382. \t\t\t\t\t\t\t\t\t\t\t<h6>";
  2383.                 // line 2104
  2384.                 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(((CoreExtension::getAttribute($this->env$this->sourceCoreExtension::getAttribute($this->env$this->source$context["review"], "user", [], "any"falsetruefalse2104), "firstName", [], "any"truetruefalse2104)) ? (Twig\Extension\CoreExtension::default(CoreExtension::getAttribute($this->env$this->sourceCoreExtension::getAttribute($this->env$this->source$context["review"], "user", [], "any"falsefalsefalse2104), "firstName", [], "any"falsefalsefalse2104), "Utilisateur")) : ("Utilisateur")), "html"nulltrue);
  2385.                 yield "</h6>
  2386. \t\t\t\t\t\t\t\t\t\t\t<small>";
  2387.                 // line 2105
  2388.                 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source$context["review"], "getTimeAgo", [], "method"falsefalsefalse2105), "html"nulltrue);
  2389.                 yield "</small>
  2390. \t\t\t\t\t\t\t\t\t\t</div>
  2391. \t\t\t\t\t\t\t\t\t</div>
  2392. \t\t\t\t\t\t\t\t\t<div class=\"review-rating\">
  2393. \t\t\t\t\t\t\t\t\t\t<div class=\"stars\">";
  2394.                 // line 2109
  2395.                 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source$context["review"], "getRatingStars", [], "method"falsefalsefalse2109), "html"nulltrue);
  2396.                 yield "</div>
  2397. \t\t\t\t\t\t\t\t\t\t";
  2398.                 // line 2110
  2399.                 if ((($tmp CoreExtension::getAttribute($this->env$this->source$context["review"], "isVerified", [], "any"falsefalsefalse2110)) && $tmp instanceof Markup ? (string) $tmp $tmp)) {
  2400.                     // line 2111
  2401.                     yield "\t\t\t\t\t\t\t\t\t\t\t<span class=\"verified-badge\">✓</span>
  2402. \t\t\t\t\t\t\t\t\t\t";
  2403.                 }
  2404.                 // line 2113
  2405.                 yield "\t\t\t\t\t\t\t\t\t</div>
  2406. \t\t\t\t\t\t\t\t</div>
  2407. \t\t\t\t\t\t\t\t<div class=\"review-content\">
  2408. \t\t\t\t\t\t\t\t\t";
  2409.                 // line 2116
  2410.                 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"falsefalsefalse2116), 0150), "html"nulltrue);
  2411.                 yield "
  2412. \t\t\t\t\t\t\t\t\t";
  2413.                 // line 2117
  2414.                 if ((Twig\Extension\CoreExtension::length($this->env->getCharset(), CoreExtension::getAttribute($this->env$this->source$context["review"], "comment", [], "any"falsefalsefalse2117)) > 150)) {
  2415.                     yield "...
  2416. \t\t\t\t\t\t\t\t\t";
  2417.                 }
  2418.                 // line 2119
  2419.                 yield "\t\t\t\t\t\t\t\t</div>
  2420. \t\t\t\t\t\t\t</div>
  2421. \t\t\t\t\t\t";
  2422.             }
  2423.             $_parent $context['_parent'];
  2424.             unset($context['_seq'], $context['_key'], $context['review'], $context['_parent']);
  2425.             $context array_intersect_key($context$_parent) + $_parent;
  2426.             // line 2122
  2427.             yield "
  2428. \t\t\t\t\t\t<div class=\"text-center mt-3\">
  2429. \t\t\t\t\t\t\t<a href=\"";
  2430.             // line 2124
  2431.             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"falsefalsefalse2124)]), "html"nulltrue);
  2432.             yield "\" class=\"btn btn-outline-primary\">
  2433. \t\t\t\t\t\t\t\tVoir tous les avis (";
  2434.             // line 2125
  2435.             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"falsefalsefalse2125)), "html"nulltrue);
  2436.             yield ")
  2437. \t\t\t\t\t\t\t</a>
  2438. \t\t\t\t\t\t</div>
  2439. \t\t\t\t\t";
  2440.         } else {
  2441.             // line 2129
  2442.             yield "\t\t\t\t\t\t<div class=\"empty-reviews\">
  2443. \t\t\t\t\t\t\t<i class=\"lnr lnr-star\"></i>
  2444. \t\t\t\t\t\t\t<h4>Aucun avis pour le moment</h4>
  2445. \t\t\t\t\t\t\t<p>Soyez le premier à laisser un avis sur cette boutique !</p>
  2446. \t\t\t\t\t\t\t";
  2447.             // line 2133
  2448.             if ((($tmp CoreExtension::getAttribute($this->env$this->source, ($context["app"] ?? null), "user", [], "any"falsefalsefalse2133)) && $tmp instanceof Markup ? (string) $tmp $tmp)) {
  2449.                 // line 2134
  2450.                 yield "\t\t\t\t\t\t\t\t<a href=\"";
  2451.                 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"falsefalsefalse2134)]), "html"nulltrue);
  2452.                 yield "\" class=\"btn btn-primary\">
  2453. \t\t\t\t\t\t\t\t\t<i class=\"lnr lnraccount_recently_viewed-star\"></i>
  2454. \t\t\t\t\t\t\t\t\tLaisser un avis
  2455. \t\t\t\t\t\t\t\t</a>
  2456. \t\t\t\t\t\t\t";
  2457.             }
  2458.             // line 2139
  2459.             yield "\t\t\t\t\t\t</div>
  2460. \t\t\t\t\t";
  2461.         }
  2462.         // line 2141
  2463.         yield "\t\t\t\t</div>
  2464. \t\t\t</div>
  2465. \t\t</div>
  2466. \t</div>
  2467. ";
  2468.         
  2469.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  2470.         
  2471.         $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  2472.         yield from [];
  2473.     }
  2474.     // line 2148
  2475.     /**
  2476.      * @return iterable<null|scalar|\Stringable>
  2477.      */
  2478.     public function block_javascripts(array $context, array $blocks = []): iterable
  2479.     {
  2480.         $macros $this->macros;
  2481.         $__internal_5a27a8ba21ca79b61932376b2fa922d2 $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  2482.         $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block""javascripts"));
  2483.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  2484.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block""javascripts"));
  2485.         // line 2149
  2486.         yield "\t<script>
  2487. \t\tdocument.addEventListener('DOMContentLoaded', function () { // Initialisation du carrousel
  2488. initCarousel();
  2489. // Gestion des onglets eBay-style avec Bootstrap
  2490. const tabLinks = document.querySelectorAll('.shop-tab-link');
  2491. const tabContents = document.querySelectorAll('.shop-tab-content');
  2492. tabLinks.forEach(link => {
  2493. link.addEventListener('click', function (e) {
  2494. e.preventDefault();
  2495. // Retirer la classe active de tous les liens et contenus
  2496. tabLinks.forEach(l => {
  2497. l.classList.remove('active');
  2498. l.setAttribute('aria-selected', 'false');
  2499. });
  2500. tabContents.forEach(c => c.classList.remove('active'));
  2501. // Ajouter la classe active au lien cliqué
  2502. this.classList.add('active');
  2503. this.setAttribute('aria-selected', 'true');
  2504. // Afficher le contenu correspondant
  2505. const targetTab = this.dataset.tab;
  2506. const targetContent = document.getElementById (`shop-\${targetTab}`);
  2507. if (targetContent) {
  2508. targetContent.classList.add('active');
  2509. }
  2510. });
  2511. });
  2512. // Gestion du système de follow
  2513. const followButton = document.getElementById('follow-button');
  2514. if (followButton) {
  2515. followButton.addEventListener('click', function () {
  2516. const shopId = this.dataset.shopId;
  2517. const isFollowing = this.dataset.following === 'true';
  2518. // Désactiver le bouton pendant la requête
  2519. this.disabled = true;
  2520. const originalText = this.innerHTML;
  2521. this.innerHTML = '<i class=\"lnr lnr-spinner\"></i> Loading...';
  2522. // Envoyer la requête
  2523. fetch(\"";
  2524.         // line 2195
  2525.         yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("ui_api_shop_toggle_follow", ["id" => "__SHOP_ID__"]);
  2526.         yield "\".replace('__SHOP_ID__', shopId), {
  2527. method: 'POST',
  2528. headers: {
  2529. 'Content-Type': 'application/json',
  2530. 'X-Requested-With': 'XMLHttpRequest'
  2531. }
  2532. }).then(response => response.json()).then(data => {
  2533. if (data.success) { // Mettre à jour l'interface
  2534. this.dataset.following = data.isFollowing;
  2535. if (data.isFollowing) {
  2536. this.classList.add('following');
  2537. this.innerHTML = '<i class=\"lnr lnr-checkmark\"></i> Suivi';
  2538. } else {
  2539. this.classList.remove('following');
  2540. this.innerHTML = '<i class=\"lnr lnr-plus\"></i> Suivre';
  2541. }
  2542. // Mettre à jour le compteur de followers
  2543. if (followersCount && data.followersCount !== undefined) {
  2544. followersCount.textContent = data.followersCount.toLocaleString();
  2545. }
  2546. // Afficher un message de confirmation
  2547. showNotification(data.message, 'success');
  2548. } else {
  2549. showNotification(data.message, 'error');
  2550. }
  2551. }).catch(error => {
  2552. console.error('Erreur:', error);
  2553. showNotification('Une erreur est survenue', 'error');
  2554. }). finally(() => {
  2555. this.disabled = false;
  2556. });
  2557. });
  2558. }
  2559. // Fonction pour afficher les notifications
  2560. function showNotification(message, type = 'info') { // Créer l'élément de notification
  2561. const notification = document.createElement('div');
  2562. notification.className = `alert alert-\${
  2563. type === 'success' ? 'success' : type === 'error' ? 'danger' : 'info'
  2564. } alert-dismissible fade show position-fixed`;
  2565. notification.style.cssText = 'top: 20px; right: 20px; z-index: 9999; min-width: 300px;';
  2566. notification.innerHTML = `
  2567.             \${message}
  2568.             <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"alert\"></button>
  2569.         `;
  2570. document.body.appendChild(notification);
  2571. // Supprimer automatiquement après 5 secondes
  2572. setTimeout(() => {
  2573. if (notification.parentNode) {
  2574. notification.remove();
  2575. }
  2576. }, 5000);
  2577. }
  2578. // Fonctions pour les actions de boutique
  2579. window.shareShop = function () { // Vérifier si l'API Web Share est disponible et si on est sur mobile
  2580. if (navigator.share && /Android|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) {
  2581. navigator.share({title: '";
  2582.         // line 2257
  2583.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source, ($context["shop"] ?? null), "name", [], "any"falsefalsefalse2257), "html"nulltrue);
  2584.         yield "- Boutique sur MaketOu', text: 'Découvrez cette boutique et ses produits sur MaketOu', url: window.location.href}).then(() => {
  2585. console.log('Partage réussi');
  2586. showNotification('Lien partagé avec succès !', 'success');
  2587. }).catch((error) => {
  2588. console.log('Erreur lors du partage:', error);
  2589. // Fallback vers la copie
  2590. copyToClipboard();
  2591. });
  2592. } else { // Sur desktop ou si Web Share n'est pas disponible, copier directement
  2593. copyToClipboard();
  2594. }
  2595. };
  2596. // Fonction pour copier le lien dans le presse-papiers
  2597. function copyToClipboard() {
  2598. const shopUrl = window.location.href;
  2599. const shopName = '";
  2600.         // line 2273
  2601.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source, ($context["shop"] ?? null), "name", [], "any"falsefalsefalse2273), "html"nulltrue);
  2602.         yield "';
  2603. const shareText = `Découvrez la boutique \"\${shopName}\" sur MaketOu : \${shopUrl}`;
  2604. // Utiliser directement le fallback pour éviter les conflits
  2605. fallbackCopyToClipboard(shareText);
  2606. }
  2607. // Fallback pour copier le texte
  2608. function fallbackCopyToClipboard(text) {
  2609. const textArea = document.createElement('textarea');
  2610. textArea.value = text;
  2611. textArea.style.position = 'fixed';
  2612. textArea.style.left = '-999999px';
  2613. textArea.style.top = '-999999px';
  2614. document.body.appendChild(textArea);
  2615. textArea.focus();
  2616. textArea.select();
  2617. try {
  2618. document.execCommand('copy');
  2619. showNotification('Lien copié dans le presse-papiers !', 'success');
  2620. } catch (err) {
  2621. console.error('Impossible de copier:', err);
  2622. showNotification('Impossible de copier le lien', 'error');
  2623. }
  2624. document.body.removeChild(textArea);
  2625. }
  2626. window.contactShop = function () { // Ouvrir un modal de signalement
  2627. openReportModal();
  2628. };
  2629. window.saveShop = function () { // Sauvegarder la boutique dans les favoris
  2630. showNotification('Boutique sauvegardée dans vos favoris', 'success');
  2631. };
  2632. // Fonction pour ouvrir le modal de signalement
  2633. window.openReportModal = function () {
  2634. const modal = new bootstrap.Modal(document.getElementById('reportModal'));
  2635. modal.show();
  2636. };
  2637. // Fonction pour soumettre le signalement
  2638. window.submitReport = function () {
  2639. const reason = document.getElementById('reportReason').value;
  2640. const description = document.getElementById('reportDescription').value;
  2641. const email = document.getElementById('reportEmail').value;
  2642. if (! reason || ! description) {
  2643. showNotification('Veuillez remplir tous les champs obligatoires', 'error');
  2644. return;
  2645. }
  2646. // Simuler l'envoi du signalement
  2647. const reportData = {
  2648. shopId: ";
  2649.         // line 2329
  2650.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source, ($context["shop"] ?? null), "id", [], "any"falsefalsefalse2329), "html"nulltrue);
  2651.         yield ",
  2652. reason: reason,
  2653. description: description,
  2654. email: email,
  2655. reportedAt: new Date().toISOString()
  2656. };
  2657. console.log('Signalement envoyé:', reportData);
  2658. // Fermer le modal
  2659. const modal = bootstrap.Modal.getInstance(document.getElementById('reportModal'));
  2660. modal.hide();
  2661. // Réinitialiser le formulaire
  2662. document.getElementById('reportForm').reset();
  2663. // Afficher la confirmation
  2664. showNotification('Signalement envoyé avec succès. Nous examinerons votre demande.', 'success');
  2665. };
  2666. // Gestion du carrousel eBay-style
  2667. let currentSlide = 0;
  2668. let carouselInterval;
  2669. let isPaused = false;
  2670. let slides = [];
  2671. let indicators = [];
  2672. function initCarousel() {
  2673.     // Réinitialiser les variables
  2674.     currentSlide = 0;
  2675.     isPaused = false;
  2676.     
  2677.     // Récupérer les slides et indicateurs à nouveau
  2678.     const carouselContainer = document.querySelector('.shop-carousel-ebay');
  2679.     if (!carouselContainer) {
  2680.         console.log('Carousel container not found');
  2681.         return;
  2682.     }
  2683.     
  2684.     const allSlides = carouselContainer.querySelectorAll('.carousel-slide');
  2685.     const allIndicators = carouselContainer.querySelectorAll('.carousel-indicator-ebay');
  2686.     
  2687.     if (allSlides.length === 0) {
  2688.         // Masquer les contrôles si aucune image
  2689.         const controls = carouselContainer.querySelector('.carousel-controls-ebay');
  2690.         const indicators = carouselContainer.querySelector('.carousel-indicators-ebay');
  2691.         if (controls) controls.style.display = 'none';
  2692.         if (indicators) indicators.style.display = 'none';
  2693.         return;
  2694.     }
  2695.     
  2696.     // Si une seule image, masquer les contrôles
  2697.     if (allSlides.length <= 1) {
  2698.         const controls = carouselContainer.querySelector('.carousel-controls-ebay');
  2699.         const indicators = carouselContainer.querySelector('.carousel-indicators-ebay');
  2700.         if (controls) controls.style.display = 'none';
  2701.         if (indicators) indicators.style.display = 'none';
  2702.         // S'assurer que la slide unique est active
  2703.         allSlides[0].classList.add('active');
  2704.         return;
  2705.     }
  2706.     
  2707.     // Afficher les contrôles si plusieurs images
  2708.     const controls = carouselContainer.querySelector('.carousel-controls-ebay');
  2709.     const indicators = carouselContainer.querySelector('.carousel-indicators-ebay');
  2710.     if (controls) controls.style.display = 'flex';
  2711.     if (indicators) indicators.style.display = 'flex';
  2712.     
  2713.     // Mettre à jour les références globales
  2714.     slides = allSlides;
  2715.     indicators = allIndicators;
  2716.     
  2717.     // S'assurer que la première slide est active
  2718.     updateCarousel();
  2719.     
  2720.     // Démarrer le carrousel automatique
  2721.     startCarousel();
  2722.     
  2723.     // Gérer les événements de survol
  2724.     carouselContainer.addEventListener('mouseenter', pauseCarousel);
  2725.     carouselContainer.addEventListener('mouseleave', () => {
  2726.             if (!isPaused) startCarousel();
  2727.         });
  2728. }
  2729. function startCarousel() {
  2730.     // Nettoyer l'intervalle existant
  2731.     clearInterval(carouselInterval);
  2732.     
  2733.     if (slides.length <= 1) return;
  2734.     
  2735.     carouselInterval = setInterval(() => {
  2736.         if (!isPaused && slides.length > 0) {
  2737.             nextSlide();
  2738.         }
  2739.     }, 4000); // Change toutes les 4 secondes
  2740. }
  2741. function pauseCarousel() {
  2742. isPaused = true;
  2743. clearInterval(carouselInterval);
  2744. const pauseIcon = document.getElementById('pauseIcon');
  2745. if (pauseIcon) {
  2746.     pauseIcon.className = 'lnr lnr-play';
  2747. }
  2748. }
  2749. function resumeCarousel() {
  2750. isPaused = false;
  2751. const pauseIcon = document.getElementById('pauseIcon');
  2752. if (pauseIcon) {
  2753.     pauseIcon.className = 'lnr lnr-pause';
  2754. }
  2755. startCarousel();
  2756. }
  2757. function toggleCarousel() {
  2758. if (isPaused) {
  2759. resumeCarousel();
  2760. } else {
  2761. pauseCarousel();
  2762. }
  2763. }
  2764. function nextSlide() {
  2765. if (slides.length === 0) return;
  2766. currentSlide = (currentSlide + 1) % slides.length;
  2767. updateCarousel();
  2768. }
  2769. function previousSlide() {
  2770. if (slides.length === 0) return;
  2771. currentSlide = (currentSlide - 1 + slides.length) % slides.length;
  2772. updateCarousel();
  2773. }
  2774. function goToSlide(index) {
  2775. if (slides.length === 0) return;
  2776. if (index < 0 || index >= slides.length) return;
  2777. currentSlide = index;
  2778. updateCarousel();
  2779. }
  2780. function updateCarousel() {
  2781.     if (slides.length === 0 || indicators.length === 0) return;
  2782.     
  2783.     // Masquer toutes les slides
  2784.     slides.forEach(slide => slide.classList.remove('active'));
  2785.     indicators.forEach(indicator => indicator.classList.remove('active'));
  2786.     
  2787.     // Afficher la slide active
  2788.     if (slides[currentSlide]) {
  2789.         slides[currentSlide].classList.add('active');
  2790.     }
  2791.     if (indicators[currentSlide]) {
  2792.         indicators[currentSlide].classList.add('active');
  2793.     }
  2794. }
  2795. // Fonctions globales pour les boutons
  2796. window.nextSlide = nextSlide;
  2797. window.previousSlide = previousSlide;
  2798. window.goToSlide = goToSlide;
  2799. window.toggleCarousel = toggleCarousel;
  2800. // Gestion du tri des produits via API Symfony
  2801. console.log('=== INITIALIZING PRODUCT SORTING ===');
  2802. console.log('Shop ID:', ";
  2803.         // line 2501
  2804.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source, ($context["shop"] ?? null), "id", [], "any"falsefalsefalse2501), "html"nulltrue);
  2805.         yield ");
  2806. // Fonction de tri via AJAX - RENDUE GLOBALE
  2807. window.sortProducts = function (sortValue) {
  2808. console.log('=== SORT PRODUCTS CALLED ===');
  2809. console.log('Sort value:', sortValue);
  2810. const productsContainer = document.getElementById('products-container');
  2811. console.log('Products container:', productsContainer);
  2812. if (! productsContainer) {
  2813. console.error('Products container not found!');
  2814. return;
  2815. }
  2816. if (! sortValue) {
  2817. console.log('Resetting to original order');
  2818. // Recharger la page pour revenir à l'ordre original
  2819. window.location.reload();
  2820. return;
  2821. }
  2822. console.log('Showing loading spinner...');
  2823. // Afficher un indicateur de chargement
  2824. 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>';
  2825. // Récupérer l'ID de la boutique
  2826. const shopId = ";
  2827.         // line 2528
  2828.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source, ($context["shop"] ?? null), "id", [], "any"falsefalsefalse2528), "html"nulltrue);
  2829.         yield ";
  2830. console.log('Shop ID for request:', shopId);
  2831. const url = \"";
  2832.         // line 2531
  2833.         yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("ui_api_shop_products_sort", ["id" => "__SHOP_ID__"]);
  2834.         yield "\".replace('__SHOP_ID__', shopId);
  2835. console.log('Request URL:', url);
  2836. const requestData = {
  2837. sortBy: sortValue
  2838. };
  2839. console.log('Request data:', requestData);
  2840. // Envoyer la requête AJAX
  2841. console.log('Sending AJAX request...');
  2842. fetch(url, {
  2843. method: 'POST',
  2844. headers: {
  2845. 'Content-Type': 'application/json',
  2846. 'X-Requested-With': 'XMLHttpRequest'
  2847. },
  2848. body: JSON.stringify(requestData)
  2849. }).then(response => {
  2850. console.log('Response received:', response);
  2851. console.log('Response status:', response.status);
  2852. return response.json();
  2853. }).then(data => {
  2854. console.log('Sort response data:', data);
  2855. if (data.success) {
  2856. console.log('Sort successful, updating content...');
  2857. // Mettre à jour le contenu avec le HTML retourné
  2858. productsContainer.innerHTML = data.html;
  2859. // Mettre à jour le compteur de produits
  2860. const productCount = document.querySelector('.product-count');
  2861. if (productCount) {
  2862. productCount.textContent = data.count;
  2863. }
  2864. console.log('Products sorted successfully!');
  2865. } else {
  2866. console.error('Sort failed:', data.message);
  2867. showNotification('Erreur lors du tri: ' + data.message, 'error');
  2868. // Recharger la page en cas d'erreur
  2869. window.location.reload();
  2870. }
  2871. }).catch(error => {
  2872. console.error('Sort request failed:', error);
  2873. showNotification('Erreur de connexion lors du tri', 'error');
  2874. // Recharger la page en cas d'erreur
  2875. window.location.reload();
  2876. });
  2877. };
  2878. // Attendre que le DOM soit chargé
  2879. console.log('Setting up event listeners...');
  2880. setTimeout(() => {
  2881. const sortSelect = document.getElementById('product-sort');
  2882. console.log('Sort select element:', sortSelect);
  2883. if (sortSelect) {
  2884. console.log('Adding change event listener...');
  2885. // Ecouter l'événement change avec jQuery (nécessaire à cause de nice-select)
  2886. if (typeof \$ !== 'undefined') {
  2887.     \$('#product-sort').on('change', function() {
  2888.         console.log('=== SELECT CHANGE EVENT TRIGGERED (jQuery) ===');
  2889.         if(window.sortProducts) window.sortProducts(this.value);
  2890.     });
  2891. }
  2892. sortSelect.addEventListener('change', function () {
  2893. console.log('=== SELECT CHANGE EVENT TRIGGERED ===');
  2894. console.log('Selected value:', this.value);
  2895. console.log('Calling sortProducts...');
  2896. window.sortProducts(this.value);
  2897. });
  2898. console.log('Event listener added successfully');
  2899. } else {
  2900. console.error('Sort select element not found!');
  2901. console.log('Available elements with ID containing \"sort\":', document.querySelectorAll('[id*=\"sort\"]'));
  2902. console.log('Available elements with class containing \"form-select\":', document.querySelectorAll('.form-select'));
  2903. }
  2904. }, 100);
  2905. // Gestion du bouton \"Suivre\"
  2906. const followBtn = document.querySelector('.btn-shop');
  2907. if (followBtn) {
  2908. followBtn.addEventListener('click', function () {
  2909. if (this.innerHTML.includes('Suivre')) {
  2910. this.innerHTML = '<i class=\"lnr lnr-heart me-1\"></i> Suivi';
  2911. this.classList.remove('btn-shop');
  2912. this.classList.add('btn-success');
  2913. } else {
  2914. this.innerHTML = '<i class=\"lnr lnr-heart me-1\"></i> Suivre';
  2915. this.classList.remove('btn-success');
  2916. this.classList.add('btn-shop');
  2917. }
  2918. });
  2919. }
  2920. });
  2921. \t</script>
  2922. ";
  2923.         
  2924.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  2925.         
  2926.         $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  2927.         yield from [];
  2928.     }
  2929.     /**
  2930.      * @codeCoverageIgnore
  2931.      */
  2932.     public function getTemplateName(): string
  2933.     {
  2934.         return "home/shop.html.twig";
  2935.     }
  2936.     /**
  2937.      * @codeCoverageIgnore
  2938.      */
  2939.     public function isTraitable(): bool
  2940.     {
  2941.         return false;
  2942.     }
  2943.     /**
  2944.      * @codeCoverageIgnore
  2945.      */
  2946.     public function getDebugInfo(): array
  2947.     {
  2948.         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,);
  2949.     }
  2950.     public function getSourceContext(): Source
  2951.     {
  2952.         return new Source("{% extends 'base_home.html.twig' %}
  2953. {% block title %}
  2954. \t{{ shop.name }}
  2955. \t| MaketOu
  2956. {% endblock %}
  2957. {% block stylesheets %}
  2958. \t<style>
  2959. \t\t/* Design eBay-like intégré avec Karma - Pleine largeur */
  2960. \t\t.shop-header {
  2961. \t\t\tbackground: #f7f7f7;
  2962. \t\t\tborder-bottom: 1px solid #e1e1e1;
  2963. \t\t\tpadding: 0;
  2964. \t\t\tmargin-bottom: 0;
  2965. \t\t\twidth: 100%;
  2966. \t\t\tposition: relative;
  2967. \t\t}
  2968. \t\t.shop-banner {
  2969. \t\t\twidth: 100%;
  2970. \t\t\theight: 350px;
  2971. \t\t\tbackground-size: cover;
  2972. \t\t\tbackground-position: center;
  2973. \t\t\tbackground-repeat: no-repeat;
  2974. \t\t\tposition: relative;
  2975. \t\t\tdisplay: flex;
  2976. \t\t\talign-items: center;
  2977. \t\t\tjustify-content: center;
  2978. \t\t}
  2979. \t\t/* Carrousel eBay-style - même largeur que shop-header-content */
  2980. \t\t.shop-carousel-ebay {
  2981. \t\t\twidth: 100%;
  2982. \t\t\theight: 400px;
  2983. \t\t\tposition: relative;
  2984. \t\t\toverflow: hidden;
  2985. \t\t\tbackground: #f8f9fa;
  2986. \t\t\tmargin: 0 20px 0 20px;
  2987. \t\t\tborder-radius: 8px;
  2988. \t\t\tbox-sizing: border-box;
  2989. \t\t}
  2990. \t\t.carousel-container {
  2991. \t\t\tposition: relative;
  2992. \t\t\twidth: 100%;
  2993. \t\t\theight: 100%;
  2994. \t\t}
  2995. \t\t.carousel-slide {
  2996. \t\t\tposition: absolute;
  2997. \t\t\ttop: 0;
  2998. \t\t\tleft: 0;
  2999. \t\t\twidth: 100%;
  3000. \t\t\theight: 100%;
  3001. \t\t\tbackground-size: cover;
  3002. \t\t\tbackground-position: center;
  3003. \t\t\tbackground-repeat: no-repeat;
  3004. \t\t\topacity: 0;
  3005. \t\t\ttransition: opacity 0.5s ease-in-out;
  3006. \t\t}
  3007. \t\t.carousel-slide.active {
  3008. \t\t\topacity: 1;
  3009. \t\t}
  3010. \t\t.carousel-controls {
  3011. \t\t\tposition: absolute;
  3012. \t\t\tbottom: 20px;
  3013. \t\t\tleft: 50%;
  3014. \t\t\ttransform: translateX(-50%);
  3015. \t\t\tdisplay: flex;
  3016. \t\t\tgap: 10px;
  3017. \t\t\tz-index: 10;
  3018. \t\t}
  3019. \t\t.carousel-btn {
  3020. \t\t\twidth: 40px;
  3021. \t\t\theight: 40px;
  3022. \t\t\tborder: none;
  3023. \t\t\tborder-radius: 50%;
  3024. \t\t\tbackground: rgba(255, 255, 255, 0.9);
  3025. \t\t\tcolor: #333;
  3026. \t\t\tfont-size: 16px;
  3027. \t\t\tcursor: pointer;
  3028. \t\t\tdisplay: flex;
  3029. \t\t\talign-items: center;
  3030. \t\t\tjustify-content: center;
  3031. \t\t\ttransition: all 0.3s ease;
  3032. \t\t\tbox-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
  3033. \t\t}
  3034. \t\t.carousel-btn:hover {
  3035. \t\t\tbackground: white;
  3036. \t\t\ttransform: scale(1.1);
  3037. \t\t}
  3038. \t\t.carousel-btn:disabled {
  3039. \t\t\topacity: 0.5;
  3040. \t\t\tcursor: not-allowed;
  3041. \t\t\ttransform: none;
  3042. \t\t}
  3043. \t\t.carousel-pause {
  3044. \t\t\tbackground: #dc3545;
  3045. \t\t\tcolor: white;
  3046. \t\t}
  3047. \t\t.carousel-pause:hover {
  3048. \t\t\tbackground: #c82333;
  3049. \t\t}
  3050. \t\t.carousel-indicators {
  3051. \t\t\tposition: absolute;
  3052. \t\t\tbottom: 70px;
  3053. \t\t\tleft: 50%;
  3054. \t\t\ttransform: translateX(-50%);
  3055. \t\t\tdisplay: flex;
  3056. \t\t\tgap: 8px;
  3057. \t\t\tz-index: 10;
  3058. \t\t}
  3059. \t\t.carousel-indicator {
  3060. \t\t\twidth: 12px;
  3061. \t\t\theight: 12px;
  3062. \t\t\tborder-radius: 50%;
  3063. \t\t\tbackground: rgba(255, 255, 255, 0.5);
  3064. \t\t\tborder: none;
  3065. \t\t\tcursor: pointer;
  3066. \t\t\ttransition: all 0.3s ease;
  3067. \t\t}
  3068. \t\t.carousel-indicator.active {
  3069. \t\t\tbackground: white;
  3070. \t\t\ttransform: scale(1.2);
  3071. \t\t}
  3072. \t\t/* Contrôles eBay-style intégrés */
  3073. \t\t.carousel-controls-ebay {
  3074. \t\t\tposition: absolute;
  3075. \t\t\ttop: 50%;
  3076. \t\t\tleft: 0;
  3077. \t\t\tright: 0;
  3078. \t\t\ttransform: translateY(-50%);
  3079. \t\t\tdisplay: flex;
  3080. \t\t\tjustify-content: space-between;
  3081. \t\t\tpadding: 0 20px;
  3082. \t\t\tz-index: 10;
  3083. \t\t}
  3084. \t\t.carousel-btn-ebay {
  3085. \t\t\twidth: 50px;
  3086. \t\t\theight: 50px;
  3087. \t\t\tborder: none;
  3088. \t\t\tborder-radius: 50%;
  3089. \t\t\tbackground: rgba(0, 0, 0, 0.7);
  3090. \t\t\tcolor: white;
  3091. \t\t\tfont-size: 18px;
  3092. \t\t\tcursor: pointer;
  3093. \t\t\tdisplay: flex;
  3094. \t\t\talign-items: center;
  3095. \t\t\tjustify-content: center;
  3096. \t\t\ttransition: all 0.3s ease;
  3097. \t\t\topacity: 0;
  3098. \t\t}
  3099. \t\t.shop-carousel-ebay:hover .carousel-btn-ebay {
  3100. \t\t\topacity: 1;
  3101. \t\t}
  3102. \t\t.carousel-btn-ebay:hover {
  3103. \t\t\tbackground: rgba(0, 0, 0, 0.9);
  3104. \t\t\ttransform: scale(1.1);
  3105. \t\t}
  3106. \t\t.carousel-btn-ebay:disabled {
  3107. \t\t\topacity: 0.3;
  3108. \t\t\tcursor: not-allowed;
  3109. \t\t\ttransform: none;
  3110. \t\t}
  3111. \t\t.carousel-btn-ebay.pause-btn {
  3112. \t\t\tbackground: rgba(220, 53, 69, 0.8);
  3113. \t\t}
  3114. \t\t.carousel-btn-ebay.pause-btn:hover {
  3115. \t\t\tbackground: rgba(220, 53, 69, 1);
  3116. \t\t}
  3117. \t\t/* Indicateurs eBay-style */
  3118. \t\t.carousel-indicators-ebay {
  3119. \t\t\tposition: absolute;
  3120. \t\t\tbottom: 20px;
  3121. \t\t\tleft: 50%;
  3122. \t\t\ttransform: translateX(-50%);
  3123. \t\t\tdisplay: flex;
  3124. \t\t\tgap: 8px;
  3125. \t\t\tz-index: 10;
  3126. \t\t}
  3127. \t\t.carousel-indicator-ebay {
  3128. \t\t\twidth: 12px;
  3129. \t\t\theight: 12px;
  3130. \t\t\tborder-radius: 50%;
  3131. \t\t\tbackground: rgba(255, 255, 255, 0.5);
  3132. \t\t\tborder: 2px solid rgba(255, 255, 255, 0.8);
  3133. \t\t\tcursor: pointer;
  3134. \t\t\ttransition: all 0.3s ease;
  3135. \t\t}
  3136. \t\t.carousel-indicator-ebay.active {
  3137. \t\t\tbackground: white;
  3138. \t\t\tborder-color: white;
  3139. \t\t\ttransform: scale(1.2);
  3140. \t\t}
  3141. \t\t.carousel-indicator-ebay:hover {
  3142. \t\t\tbackground: rgba(255, 255, 255, 0.8);
  3143. \t\t\ttransform: scale(1.1);
  3144. \t\t}
  3145. \t\t/* Styles eBay-style pour les détails de boutique */
  3146. \t\t.shop-avatar-container-ebay {
  3147. \t\t\tposition: relative;
  3148. \t\t\tmargin-right: 20px;
  3149. \t\t}
  3150. \t\t.shop-avatar-ebay {
  3151. \t\t\twidth: 80px;
  3152. \t\t\theight: 80px;
  3153. \t\t\tborder-radius: 8px;
  3154. \t\t\tobject-fit: cover;
  3155. \t\t\tborder: 3px solid white;
  3156. \t\t\tbox-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
  3157. \t\t}
  3158. \t\t.verified-badge-ebay {
  3159. \t\t\tposition: absolute;
  3160. \t\t\tbottom: -5px;
  3161. \t\t\tright: -5px;
  3162. \t\t\tbackground: #28a745;
  3163. \t\t\tcolor: white;
  3164. \t\t\twidth: 24px;
  3165. \t\t\theight: 24px;
  3166. \t\t\tborder-radius: 50%;
  3167. \t\t\tdisplay: flex;
  3168. \t\t\talign-items: center;
  3169. \t\t\tjustify-content: center;
  3170. \t\t\tfont-size: 12px;
  3171. \t\t\tborder: 2px solid white;
  3172. \t\t}
  3173. \t\t.shop-info-ebay {
  3174. \t\t\tpadding: 10px 0;
  3175. \t\t}
  3176. \t\t.shop-name-section {
  3177. \t\t\tmargin-bottom: 8px;
  3178. \t\t}
  3179. \t\t.shop-name-ebay {
  3180. \t\t\tfont-size: 1.8rem;
  3181. \t\t\tfont-weight: 600;
  3182. \t\t\tcolor: #333;
  3183. \t\t\tmargin: 0 15px 0 0;
  3184. \t\t\tdisplay: inline-block;
  3185. \t\t}
  3186. \t\t.verified-text {
  3187. \t\t\tcolor: #28a745;
  3188. \t\t\tfont-size: 0.9rem;
  3189. \t\t\tfont-weight: 500;
  3190. \t\t}
  3191. \t\t.shop-category-section {
  3192. \t\t\tmargin-bottom: 12px;
  3193. \t\t}
  3194. \t\t.shop-category-ebay {
  3195. \t\t\tbackground: #f8f9fa;
  3196. \t\t\tcolor: #666;
  3197. \t\t\tpadding: 4px 12px;
  3198. \t\t\tborder-radius: 16px;
  3199. \t\t\tfont-size: 0.85rem;
  3200. \t\t\tfont-weight: 500;
  3201. \t\t}
  3202. \t\t.shop-stats-ebay {
  3203. \t\t\tmargin-top: 15px;
  3204. \t\t}
  3205. \t\t.stat-row {
  3206. \t\t\tdisplay: flex;
  3207. \t\t\tgap: 30px;
  3208. \t\t\tmargin-bottom: 10px;
  3209. \t\t}
  3210. \t\t.stat-item-ebay {
  3211. \t\t\tdisplay: flex;
  3212. \t\t\tflex-direction: column;
  3213. \t\t\talign-items: flex-start;
  3214. \t\t}
  3215. \t\t.stat-percentage {
  3216. \t\t\tfont-size: 1.2rem;
  3217. \t\t\tfont-weight: 700;
  3218. \t\t\tcolor: #28a745;
  3219. \t\t\tline-height: 1;
  3220. \t\t}
  3221. \t\t.stat-number-ebay {
  3222. \t\t\tfont-size: 1.2rem;
  3223. \t\t\tfont-weight: 700;
  3224. \t\t\tcolor: #333;
  3225. \t\t\tline-height: 1;
  3226. \t\t}
  3227. \t\t.stat-label-ebay {
  3228. \t\t\tfont-size: 0.8rem;
  3229. \t\t\tcolor: #666;
  3230. \t\t\ttext-transform: uppercase;
  3231. \t\t\tletter-spacing: 0.5px;
  3232. \t\t\tmargin-top: 2px;
  3233. \t\t}
  3234. \t\t.shop-additional-info {
  3235. \t\t\tdisplay: flex;
  3236. \t\t\tgap: 20px;
  3237. \t\t\tfont-size: 0.85rem;
  3238. \t\t\tcolor: #666;
  3239. \t\t}
  3240. \t\t.member-since {
  3241. \t\t\tfont-weight: 400;
  3242. \t\t}
  3243. \t\t.location {
  3244. \t\t\tdisplay: flex;
  3245. \t\t\talign-items: center;
  3246. \t\t}
  3247. \t\t.shop-actions-ebay {
  3248. \t\t\tdisplay: flex;
  3249. \t\t\tflex-direction: column;
  3250. \t\t\tgap: 10px;
  3251. \t\t\tmin-width: 140px;
  3252. \t\t}
  3253. \t\t.btn-ebay {
  3254. \t\t\tpadding: 8px 16px;
  3255. \t\t\tfont-size: 0.9rem;
  3256. \t\t\tfont-weight: 500;
  3257. \t\t\tborder-radius: 4px;
  3258. \t\t\ttext-align: center;
  3259. \t\t\ttransition: all 0.3s ease;
  3260. \t\t\tborder-width: 1px;
  3261. \t\t}
  3262. \t\t.btn-ebay:hover {
  3263. \t\t\ttransform: translateY(-1px);
  3264. \t\t\tbox-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
  3265. \t\t}
  3266. \t\t.btn-ebay.following {
  3267. \t\t\tbackground: #28a745;
  3268. \t\t\tborder-color: #28a745;
  3269. \t\t\tcolor: white;
  3270. \t\t}
  3271. \t\t/* Styles pour les avis */
  3272. \t\t.review-stats {
  3273. \t\t\tbackground: white;
  3274. \t\t\tborder-radius: 12px;
  3275. \t\t\tpadding: 20px;
  3276. \t\t\tbox-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
  3277. \t\t\tmargin-bottom: 20px;
  3278. \t\t}
  3279. \t\t.stat-card {
  3280. \t\t\tpadding: 15px;
  3281. \t\t}
  3282. \t\t.stat-number {
  3283. \t\t\tfont-size: 2.5rem;
  3284. \t\t\tfont-weight: 700;
  3285. \t\t\tcolor: #333;
  3286. \t\t\tmargin: 0;
  3287. \t\t}
  3288. \t\t.stat-label {
  3289. \t\t\tcolor: #666;
  3290. \t\t\tfont-size: 0.9rem;
  3291. \t\t\tmargin: 5px 0 0;
  3292. \t\t}
  3293. \t\t.rating-stars {
  3294. \t\t\tcolor: #ffc107;
  3295. \t\t\tfont-size: 1.2rem;
  3296. \t\t\tmargin: 10px 0;
  3297. \t\t}
  3298. \t\t.reviews-preview {
  3299. \t\t\tbackground: white;
  3300. \t\t\tborder-radius: 12px;
  3301. \t\t\tpadding: 20px;
  3302. \t\t\tbox-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
  3303. \t\t}
  3304. \t\t.review-item {
  3305. \t\t\tborder-bottom: 1px solid #f0f0f0;
  3306. \t\t\tpadding: 15px 0;
  3307. \t\t}
  3308. \t\t.review-item:last-child {
  3309. \t\t\tborder-bottom: none;
  3310. \t\t}
  3311. \t\t.review-header {
  3312. \t\t\tdisplay: flex;
  3313. \t\t\tjustify-content: space-between;
  3314. \t\t\talign-items: flex-start;
  3315. \t\t\tmargin-bottom: 10px;
  3316. \t\t}
  3317. \t\t.reviewer-info {
  3318. \t\t\tdisplay: flex;
  3319. \t\t\talign-items: center;
  3320. \t\t\tgap: 10px;
  3321. \t\t}
  3322. \t\t.reviewer-avatar {
  3323. \t\t\twidth: 40px;
  3324. \t\t\theight: 40px;
  3325. \t\t\tborder-radius: 50%;
  3326. \t\t\tbackground: #f8f9fa;
  3327. \t\t\tdisplay: flex;
  3328. \t\t\talign-items: center;
  3329. \t\t\tjustify-content: center;
  3330. \t\t\tcolor: #666;
  3331. \t\t}
  3332. \t\t.reviewer-name {
  3333. \t\t\tmargin: 0;
  3334. \t\t\tfont-size: 1rem;
  3335. \t\t\tfont-weight: 600;
  3336. \t\t}
  3337. \t\t.review-rating {
  3338. \t\t\tcolor: #ffc107;
  3339. \t\t\tfont-size: 0.9rem;
  3340. \t\t}
  3341. \t\t.review-meta {
  3342. \t\t\ttext-align: right;
  3343. \t\t}
  3344. \t\t.review-date {
  3345. \t\t\tcolor: #666;
  3346. \t\t\tfont-size: 0.8rem;
  3347. \t\t}
  3348. \t\t.verified-badge {
  3349. \t\t\tdisplay: inline-block;
  3350. \t\t\tbackground: #28a745;
  3351. \t\t\tcolor: white;
  3352. \t\t\tpadding: 2px 8px;
  3353. \t\t\tborder-radius: 12px;
  3354. \t\t\tfont-size: 0.7rem;
  3355. \t\t\tmargin-left: 10px;
  3356. \t\t}
  3357. \t\t.review-comment {
  3358. \t\t\tmargin: 10px 0 0;
  3359. \t\t\tline-height: 1.5;
  3360. \t\t\tcolor: #333;
  3361. \t\t}
  3362. \t\t.review-actions-card {
  3363. \t\t\tbackground: white;
  3364. \t\t\tborder-radius: 12px;
  3365. \t\t\tpadding: 20px;
  3366. \t\t\tbox-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
  3367. \t\t\ttext-align: center;
  3368. \t\t}
  3369. \t\t.shop-banner-overlay {
  3370. \t\t\tposition: absolute;
  3371. \t\t\ttop: 0;
  3372. \t\t\tleft: 0;
  3373. \t\t\tright: 0;
  3374. \t\t\tbottom: 0;
  3375. \t\t\tbackground: rgba(0, 0, 0, 0.3);
  3376. \t\t\tz-index: 1;
  3377. \t\t}
  3378. \t\t.shop-header-content {
  3379. \t\t\tbackground: white;
  3380. \t\t\tborder: 1px solid #e1e1e1;
  3381. \t\t\tborder-radius: 4px;
  3382. \t\t\tpadding: 20px;
  3383. \t\t\tmargin: 0 20px 20px;
  3384. \t\t\tbox-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
  3385. \t\t\tposition: relative;
  3386. \t\t\tz-index: 2;
  3387. \t\t}
  3388. \t\t.shop-avatar {
  3389. \t\t\twidth: 80px;
  3390. \t\t\theight: 80px;
  3391. \t\t\tborder-radius: 4px;
  3392. \t\t\tborder: 1px solid #e1e1e1;
  3393. \t\t\tobject-fit: cover;
  3394. \t\t\tposition: relative;
  3395. \t\t\tz-index: 3;
  3396. \t\t}
  3397. \t\t.shop-title {
  3398. \t\t\tfont-size: 1.5rem;
  3399. \t\t\tfont-weight: 600;
  3400. \t\t\tcolor: #333;
  3401. \t\t\tmargin-bottom: 8px;
  3402. \t\t}
  3403. \t\t.shop-subtitle {
  3404. \t\t\tcolor: #666;
  3405. \t\t\tfont-size: 0.9rem;
  3406. \t\t\tmargin-bottom: 15px;
  3407. \t\t}
  3408. \t\t.shop-stats-row {
  3409. \t\t\tdisplay: flex;
  3410. \t\t\talign-items: center;
  3411. \t\t\tgap: 20px;
  3412. \t\t\tflex-wrap: wrap;
  3413. \t\t\tmargin-bottom: 15px;
  3414. \t\t}
  3415. \t\t.shop-stat-item {
  3416. \t\t\tdisplay: flex;
  3417. \t\t\talign-items: center;
  3418. \t\t\tgap: 5px;
  3419. \t\t\tfont-size: 0.9rem;
  3420. \t\t}
  3421. \t\t.positive-feedback {
  3422. \t\t\tcolor: #007bff;
  3423. \t\t\tfont-weight: 600;
  3424. \t\t}
  3425. \t\t.items-sold {
  3426. \t\t\tcolor: #666;
  3427. \t\t}
  3428. \t\t.followers-count {
  3429. \t\t\tcolor: #666;
  3430. \t\t}
  3431. \t\t.shop-badges {
  3432. \t\t\tdisplay: flex;
  3433. \t\t\tgap: 10px;
  3434. \t\t\tmargin-bottom: 15px;
  3435. \t\t}
  3436. \t\t.shop-badge {
  3437. \t\t\tbackground: #f0f0f0;
  3438. \t\t\tcolor: #333;
  3439. \t\t\tpadding: 4px 8px;
  3440. \t\t\tborder-radius: 3px;
  3441. \t\t\tfont-size: 0.8rem;
  3442. \t\t\tfont-weight: 500;
  3443. \t\t}
  3444. \t\t.shop-badge.verified {
  3445. \t\t\tbackground: #d4edda;
  3446. \t\t\tcolor: #155724;
  3447. \t\t}
  3448. \t\t.shop-badge.premium {
  3449. \t\t\tbackground: #fff3cd;
  3450. \t\t\tcolor: #856404;
  3451. \t\t}
  3452. \t\t.shop-actions-row {
  3453. \t\t\tdisplay: flex;
  3454. \t\t\talign-items: center;
  3455. \t\t\tgap: 15px;
  3456. \t\t\tflex-wrap: wrap;
  3457. \t\t}
  3458. \t\t.shop-action-btn {
  3459. \t\t\tbackground: #007bff;
  3460. \t\t\tcolor: white;
  3461. \t\t\tborder: none;
  3462. \t\t\tpadding: 8px 16px;
  3463. \t\t\tborder-radius: 3px;
  3464. \t\t\tfont-size: 0.9rem;
  3465. \t\t\tfont-weight: 500;
  3466. \t\t\tcursor: pointer;
  3467. \t\t\ttransition: background-color 0.2s;
  3468. \t\t\ttext-decoration: none;
  3469. \t\t\tdisplay: inline-flex;
  3470. \t\t\talign-items: center;
  3471. \t\t\tgap: 5px;
  3472. \t\t}
  3473. \t\t.shop-action-btn:hover {
  3474. \t\t\tbackground: #0056b3;
  3475. \t\t\tcolor: white;
  3476. \t\t}
  3477. \t\t.shop-action-btn.following {
  3478. \t\t\tbackground: #28a745;
  3479. \t\t}
  3480. \t\t.shop-action-btn.following:hover {
  3481. \t\t\tbackground: #1e7e34;
  3482. \t\t}
  3483. \t\t.shop-action-btn.secondary {
  3484. \t\t\tbackground: #6c757d;
  3485. \t\t}
  3486. \t\t.shop-action-btn.secondary:hover {
  3487. \t\t\tbackground: #545b62;
  3488. \t\t}
  3489. \t\t/* Onglets eBay-style avec classes Karma */
  3490. \t\t.shop-tabs {
  3491. \t\t\tbackground: white;
  3492. \t\t\tborder: 1px solid #e1e1e1;
  3493. \t\t\tborder-top: none;
  3494. \t\t\tborder-radius: 0 0 4px 4px;
  3495. \t\t\tmargin-top: 0;
  3496. \t\t}
  3497. \t\t.shop-tabs-nav {
  3498. \t\t\tdisplay: flex;
  3499. \t\t\tborder-bottom: 1px solid #e1e1e1;
  3500. \t\t\tmargin: 0;
  3501. \t\t\tpadding: 0;
  3502. \t\t\tlist-style: none;
  3503. \t\t\tbackground: #f8f9fa;
  3504. \t\t}
  3505. \t\t.shop-tab {
  3506. \t\t\tmargin: 0;
  3507. \t\t}
  3508. \t\t.shop-tab-link {
  3509. \t\t\tdisplay: block;
  3510. \t\t\tpadding: 12px 20px;
  3511. \t\t\tcolor: #000000;
  3512. \t\t\ttext-decoration: none;
  3513. \t\t\tborder-bottom: 2px solid transparent;
  3514. \t\t\ttransition: all 0.2s;
  3515. \t\t\tfont-weight: 500;
  3516. \t\t\tfont-size: 1rem;
  3517. \t\t}
  3518. \t\t.shop-tab-link:hover,
  3519. \t\t.shop-tab-link.active {
  3520. \t\t\tcolor: #095ad3;
  3521. \t\t\tborder-bottom-color: #095ad3;
  3522. \t\t\tbackground: #ffa200;
  3523. \t\t}
  3524. \t\t.shop-tab-content {
  3525. \t\t\tpadding: 30px;
  3526. \t\t\tmin-height: 400px;
  3527. \t\t}
  3528. \t\t.shop-tab-content:not(.active) {
  3529. \t\t\tdisplay: none;
  3530. \t\t}
  3531. \t\t.shop-tab-content.active {
  3532. \t\t\tdisplay: block;
  3533. \t\t}
  3534. \t\t/* Cards d'information avec style Karma */
  3535. \t\t.shop-info-card {
  3536. \t\t\tbackground: #f8f9fa;
  3537. \t\t\tborder: 1px solid #e1e1e1;
  3538. \t\t\tborder-radius: 4px;
  3539. \t\t\tpadding: 20px;
  3540. \t\t\tmargin-bottom: 20px;
  3541. \t\t}
  3542. \t\t.shop-info-card h6 {
  3543. \t\t\tcolor: #333;
  3544. \t\t\tfont-weight: 600;
  3545. \t\t\tmargin-bottom: 15px;
  3546. \t\t\tfont-size: 1.1rem;
  3547. \t\t}
  3548. \t\t.shop-info-card p {
  3549. \t\t\tcolor: #666;
  3550. \t\t\tfont-size: 0.9rem;
  3551. \t\t\tmargin: 0;
  3552. \t\t\tline-height: 1.5;
  3553. \t\t}
  3554. \t\t.shop-contact-info {
  3555. \t\t\tdisplay: flex;
  3556. \t\t\tflex-direction: column;
  3557. \t\t\tgap: 10px;
  3558. \t\t}
  3559. \t\t.shop-contact-item {
  3560. \t\t\tdisplay: flex;
  3561. \t\t\talign-items: center;
  3562. \t\t\tgap: 10px;
  3563. \t\t\tfont-size: 0.9rem;
  3564. \t\t\tcolor: #666;
  3565. \t\t\tpadding: 5px 0;
  3566. \t\t}
  3567. \t\t.shop-contact-item i {
  3568. \t\t\twidth: 16px;
  3569. \t\t\tcolor: #007bff;
  3570. \t\t\ttext-align: center;
  3571. \t\t}
  3572. \t\t.shop-social-links {
  3573. \t\t\tdisplay: flex;
  3574. \t\t\tgap: 10px;
  3575. \t\t\tmargin-top: 15px;
  3576. \t\t\tflex-wrap: wrap;
  3577. \t\t}
  3578. \t\t.shop-social-link {
  3579. \t\t\tdisplay: inline-flex;
  3580. \t\t\talign-items: center;
  3581. \t\t\tjustify-content: center;
  3582. \t\t\twidth: 36px;
  3583. \t\t\theight: 36px;
  3584. \t\t\tbackground: #f0f0f0;
  3585. \t\t\tcolor: #666;
  3586. \t\t\tborder-radius: 4px;
  3587. \t\t\ttext-decoration: none;
  3588. \t\t\ttransition: all 0.2s;
  3589. \t\t\tfont-size: 1.1rem;
  3590. \t\t}
  3591. \t\t.shop-social-link:hover {
  3592. \t\t\tbackground: #007bff;
  3593. \t\t\tcolor: white;
  3594. \t\t\ttransform: translateY(-2px);
  3595. \t\t}
  3596. \t\t/* Produits avec style Karma */
  3597. \t\t.product-card {
  3598. \t\t\tbackground: white;
  3599. \t\t\tborder: 1px solid #e1e1e1;
  3600. \t\t\tborder-radius: 4px;
  3601. \t\t\toverflow: hidden;
  3602. \t\t\ttransition: all 0.3s ease;
  3603. \t\t\tmargin-bottom: 20px;
  3604. \t\t}
  3605. \t\t.product-card:hover {
  3606. \t\t\ttransform: translateY(-2px);
  3607. \t\t\tbox-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
  3608. \t\t}
  3609. \t\t/* Animation de tri des produits */
  3610. \t\t.product-item {
  3611. \t\t\ttransition: all 0.3s ease;
  3612. \t\t}
  3613. \t\t.product-item.sorting {
  3614. \t\t\topacity: 0;
  3615. \t\t\ttransform: translateY(20px);
  3616. \t\t}
  3617. \t\t.product-item.sorted {
  3618. \t\t\topacity: 1;
  3619. \t\t\ttransform: translateY(0);
  3620. \t\t}
  3621. \t\t.product-image {
  3622. \t\t\theight: 200px;
  3623. \t\t\tbackground-size: cover;
  3624. \t\t\tbackground-position: center;
  3625. \t\t\tposition: relative;
  3626. \t\t\toverflow: hidden;
  3627. \t\t}
  3628. \t\t.product-info {
  3629. \t\t\tpadding: 15px;
  3630. \t\t}
  3631. \t\t.product-title {
  3632. \t\t\tfont-size: 1rem;
  3633. \t\t\tfont-weight: 600;
  3634. \t\t\tmargin-bottom: 8px;
  3635. \t\t\tcolor: #333;
  3636. \t\t\tline-height: 1.3;
  3637. \t\t}
  3638. \t\t.product-title a {
  3639. \t\t\tcolor: #333;
  3640. \t\t\ttext-decoration: none;
  3641. \t\t}
  3642. \t\t.product-title a:hover {
  3643. \t\t\tcolor: #007bff;
  3644. \t\t}
  3645. \t\t.product-price {
  3646. \t\t\tfont-size: 1.2rem;
  3647. \t\t\tfont-weight: bold;
  3648. \t\t\tcolor: #ff6b35;
  3649. \t\t\tmargin-bottom: 10px;
  3650. \t\t}
  3651. \t\t.product-meta {
  3652. \t\t\tdisplay: flex;
  3653. \t\t\tjustify-content: space-between;
  3654. \t\t\talign-items: center;
  3655. \t\t\tfont-size: 0.85rem;
  3656. \t\t\tcolor: #666;
  3657. \t\t}
  3658. \t\t.rating {
  3659. \t\t\tcolor: #ffc107;
  3660. \t\t}
  3661. \t\t/* Responsive avec classes Karma */
  3662. \t\t/* Responsive amélioré pour la page shop */
  3663. \t\t@media(max-width: 991.98px) {
  3664. \t\t\t.shop-carousel-ebay {
  3665. \t\t\t\tmargin: 0 10px;
  3666. \t\t\t\theight: 300px;
  3667. \t\t\t}
  3668. \t\t\t
  3669. \t\t\t.shop-header-content {
  3670. \t\t\t\tpadding: 15px;
  3671. \t\t\t\tmargin: 0 10px 20px;
  3672. \t\t\t}
  3673. \t\t\t
  3674. \t\t\t.shop-header-content .row {
  3675. \t\t\t\tflex-wrap: wrap;
  3676. \t\t\t}
  3677. \t\t\t
  3678. \t\t\t.shop-info-ebay {
  3679. \t\t\t\tmargin-top: 15px;
  3680. \t\t\t}
  3681. \t\t}
  3682. \t\t
  3683. \t\t@media(max-width: 768px) {
  3684. \t\t\t.shop-banner,
  3685. \t\t\t.shop-carousel-ebay {
  3686. \t\t\t\theight: 250px;
  3687. \t\t\t\tmargin: 0;
  3688. \t\t\t\tborder-radius: 0;
  3689. \t\t\t}
  3690. \t\t\t
  3691. \t\t\t.shop-carousel-ebay .carousel-container {
  3692. \t\t\t\tborder-radius: 0;
  3693. \t\t\t}
  3694. \t\t\t.carousel-controls-ebay {
  3695. \t\t\t\tpadding: 0 10px;
  3696. \t\t\t\tbottom: 15px;
  3697. \t\t\t}
  3698. \t\t\t.carousel-btn-ebay {
  3699. \t\t\t\twidth: 35px;
  3700. \t\t\t\theight: 35px;
  3701. \t\t\t\tfont-size: 14px;
  3702. \t\t\t}
  3703. \t\t\t.carousel-indicators-ebay {
  3704. \t\t\t\tbottom: 10px;
  3705. \t\t\t\tgap: 6px;
  3706. \t\t\t}
  3707. \t\t\t
  3708. \t\t\t.carousel-indicator-ebay {
  3709. \t\t\t\twidth: 10px;
  3710. \t\t\t\theight: 10px;
  3711. \t\t\t}
  3712. \t\t\t.shop-header-content {
  3713. \t\t\t\tpadding: 15px;
  3714. \t\t\t\tmargin: 0;
  3715. \t\t\t}
  3716. \t\t\t
  3717. \t\t\t.shop-header-content .container {
  3718. \t\t\t\tpadding-left: 15px;
  3719. \t\t\t\tpadding-right: 15px;
  3720. \t\t\t}
  3721. \t\t\t.shop-avatar {
  3722. \t\t\t\twidth: 60px;
  3723. \t\t\t\theight: 60px;
  3724. \t\t\t}
  3725. \t\t\t.shop-title {
  3726. \t\t\t\tfont-size: 1.2rem;
  3727. \t\t\t}
  3728. \t\t\t.shop-actions-row {
  3729. \t\t\t\tflex-direction: column;
  3730. \t\t\t\tgap: 10px;
  3731. \t\t\t}
  3732. \t\t\t/* Styles eBay-style responsive */
  3733. \t\t\t.shop-header-content .row {
  3734. \t\t\t\tflex-direction: column;
  3735. \t\t\t\ttext-align: center;
  3736. \t\t\t}
  3737. \t\t\t.shop-avatar-container-ebay {
  3738. \t\t\t\tmargin-right: 0;
  3739. \t\t\t\tmargin-bottom: 15px;
  3740. \t\t\t\talign-self: center;
  3741. \t\t\t}
  3742. \t\t\t.shop-avatar-ebay {
  3743. \t\t\t\twidth: 80px;
  3744. \t\t\t\theight: 80px;
  3745. \t\t\t}
  3746. \t\t\t.shop-name-ebay {
  3747. \t\t\t\tfont-size: 1.5rem;
  3748. \t\t\t\tmargin-right: 0;
  3749. \t\t\t\tmargin-bottom: 10px;
  3750. \t\t\t}
  3751. \t\t\t.stat-row {
  3752. \t\t\t\tjustify-content: center;
  3753. \t\t\t\tgap: 15px;
  3754. \t\t\t\tflex-wrap: wrap;
  3755. \t\t\t}
  3756. \t\t\t
  3757. \t\t\t.stat-item-ebay {
  3758. \t\t\t\tfont-size: 0.9rem;
  3759. \t\t\t\tmin-width: 100px;
  3760. \t\t\t}
  3761. \t\t\t.shop-additional-info {
  3762. \t\t\t\tjustify-content: center;
  3763. \t\t\t\tflex-wrap: wrap;
  3764. \t\t\t}
  3765. \t\t\t.shop-actions-ebay {
  3766. \t\t\t\tflex-direction: column;
  3767. \t\t\t\tjustify-content: center;
  3768. \t\t\t\tmin-width: auto;
  3769. \t\t\t\tmargin-top: 15px;
  3770. \t\t\t\twidth: 100%;
  3771. \t\t\t}
  3772. \t\t\t.btn-ebay {
  3773. \t\t\t\twidth: 100%;
  3774. \t\t\t\tmin-width: auto;
  3775. \t\t\t\tmargin-bottom: 10px;
  3776. \t\t\t}
  3777. \t\t\t.btn-shop,
  3778. \t\t\t.shop-action-btn {
  3779. \t\t\t\twidth: 100%;
  3780. \t\t\t\tmin-width: auto;
  3781. \t\t\t\theight: 45px;
  3782. \t\t\t\tfont-size: 0.9rem;
  3783. \t\t\t\tpadding: 12px 20px;
  3784. \t\t\t}
  3785. \t\t\t.shop-tabs-nav {
  3786. \t\t\t\tflex-wrap: wrap;
  3787. \t\t\t\tjustify-content: center;
  3788. \t\t\t}
  3789. \t\t\t
  3790. \t\t\t.shop-tab-link {
  3791. \t\t\t\tfont-size: 0.85rem;
  3792. \t\t\t\tpadding: 0.5rem 0.75rem;
  3793. \t\t\t\tflex: 1;
  3794. \t\t\t\tmin-width: auto;
  3795. \t\t\t}
  3796. \t\t\t
  3797. \t\t\t/* Produits responsive */
  3798. \t\t\t#products-container .product-item {
  3799. \t\t\t\tmargin-bottom: 20px;
  3800. \t\t\t}
  3801. \t\t\t
  3802. \t\t\t.product-card {
  3803. \t\t\t\tpadding: 15px;
  3804. \t\t\t}
  3805. \t\t\t
  3806. \t\t\t.product-title {
  3807. \t\t\t\tfont-size: 0.95rem;
  3808. \t\t\t}
  3809. \t\t\t
  3810. \t\t\t.product-price {
  3811. \t\t\t\tfont-size: 1.1rem;
  3812. \t\t\t}
  3813. \t\t\t
  3814. \t\t\t/* Détails de la boutique responsive */
  3815. \t\t\t.shop-info-ebay {
  3816. \t\t\t\ttext-align: center;
  3817. \t\t\t}
  3818. \t\t}
  3819. \t\t
  3820. \t\t@media(max-width: 575.98px) {
  3821. \t\t\t.shop-banner,
  3822. \t\t\t.shop-carousel-ebay {
  3823. \t\t\t\theight: 200px;
  3824. \t\t\t\tmargin: 0;
  3825. \t\t\t}
  3826. \t\t\t
  3827. \t\t\t.shop-header-content {
  3828. \t\t\t\tmargin: 0;
  3829. \t\t\t\tpadding: 15px;
  3830. \t\t\t}
  3831. \t\t\t
  3832. \t\t\t.shop-name-ebay {
  3833. \t\t\t\tfont-size: 1.3rem;
  3834. \t\t\t}
  3835. \t\t\t
  3836. \t\t\t.stat-row {
  3837. \t\t\t\tgap: 10px;
  3838. \t\t\t\tflex-direction: column;
  3839. \t\t\t}
  3840. \t\t\t
  3841. \t\t\t.stat-item-ebay {
  3842. \t\t\t\tfont-size: 0.85rem;
  3843. \t\t\t\twidth: 100%;
  3844. \t\t\t}
  3845. \t\t\t
  3846. \t\t\t.carousel-btn-ebay {
  3847. \t\t\t\twidth: 25px;
  3848. \t\t\t\theight: 25px;
  3849. \t\t\t\tfont-size: 10px;
  3850. \t\t\t}
  3851. \t\t\t
  3852. \t\t\t.carousel-indicators-ebay {
  3853. \t\t\t\tbottom: 8px;
  3854. \t\t\t}
  3855. \t\t\t
  3856. \t\t\t.carousel-indicator-ebay {
  3857. \t\t\t\twidth: 6px;
  3858. \t\t\t\theight: 6px;
  3859. \t\t\t}
  3860. \t\t\t
  3861. \t\t\t.shop-tab-content {
  3862. \t\t\t\tpadding: 15px 10px;
  3863. \t\t\t}
  3864. \t\t\t.shop-stats-row {
  3865. \t\t\t\tflex-direction: column;
  3866. \t\t\t\tgap: 10px;
  3867. \t\t\t\talign-items: flex-start;
  3868. \t\t\t}
  3869. \t\t}
  3870. \t\t.follow-button {
  3871. \t\t\tbackground: #ffa200;
  3872. \t\t\tborder: none;
  3873. \t\t\tcolor: white;
  3874. \t\t\tpadding: 12px 30px;
  3875. \t\t\tborder-radius: 25px;
  3876. \t\t\tfont-weight: 600;
  3877. \t\t\ttransition: all 0.3s ease;
  3878. \t\t\tcursor: pointer;
  3879. \t\t\tdisplay: inline-flex;
  3880. \t\t\talign-items: center;
  3881. \t\t\tgap: 8px;
  3882. \t\t}
  3883. \t\t.follow-button:hover {
  3884. \t\t\tbackground: #e8910a;
  3885. \t\t\ttransform: translateY(-2px);
  3886. \t\t\tbox-shadow: 0 5px 15px rgba(255, 162, 0, 0.3);
  3887. \t\t}
  3888. \t\t.follow-button.following {
  3889. \t\t\tbackground: #28a745;
  3890. \t\t}
  3891. \t\t.follow-button.following:hover {
  3892. \t\t\tbackground: #218838;
  3893. \t\t}
  3894. \t\t.follow-button:disabled {
  3895. \t\t\topacity: 0.6;
  3896. \t\t\tcursor: not-allowed;
  3897. \t\t\ttransform: none;
  3898. \t\t}
  3899. \t\t.follow-stats {
  3900. \t\t\tdisplay: flex;
  3901. \t\t\tgap: 30px;
  3902. \t\t\tmargin-top: 20px;
  3903. \t\t\tflex-wrap: wrap;
  3904. \t\t}
  3905. \t\t.follow-stat {
  3906. \t\t\ttext-align: center;
  3907. \t\t\tpadding: 15px;
  3908. \t\t\tbackground: #f8f9fa;
  3909. \t\t\tborder-radius: 10px;
  3910. \t\t\tmin-width: 120px;
  3911. \t\t}
  3912. \t\t.follow-stat-number {
  3913. \t\t\tfont-size: 1.8rem;
  3914. \t\t\tfont-weight: bold;
  3915. \t\t\tcolor: #ffa200;
  3916. \t\t\tdisplay: block;
  3917. \t\t}
  3918. \t\t.follow-stat-label {
  3919. \t\t\tcolor: #666;
  3920. \t\t\tfont-size: 0.9rem;
  3921. \t\t\ttext-transform: uppercase;
  3922. \t\t\tletter-spacing: 0.5px;
  3923. \t\t}
  3924. \t\t.shop-actions {
  3925. \t\t\tdisplay: flex;
  3926. \t\t\tgap: 15px;
  3927. \t\t\talign-items: center;
  3928. \t\t\tflex-wrap: wrap;
  3929. \t\t\tmargin-top: 20px;
  3930. \t\t}
  3931. \t\t.action-button {
  3932. \t\t\tbackground: white;
  3933. \t\t\tborder: 2px solid #ffa200;
  3934. \t\t\tcolor: #ffa200;
  3935. \t\t\tpadding: 10px 20px;
  3936. \t\t\tborder-radius: 20px;
  3937. \t\t\ttext-decoration: none;
  3938. \t\t\tfont-weight: 500;
  3939. \t\t\ttransition: all 0.3s ease;
  3940. \t\t\tdisplay: inline-flex;
  3941. \t\t\talign-items: center;
  3942. \t\t\tgap: 8px;
  3943. \t\t}
  3944. \t\t.action-button:hover {
  3945. \t\t\tbackground: #ffa200;
  3946. \t\t\tcolor: white;
  3947. \t\t\ttransform: translateY(-2px);
  3948. \t\t\tbox-shadow: 0 5px 15px rgba(255, 162, 0, 0.3);
  3949. \t\t}
  3950. \t\t.positive-feedback {
  3951. \t\t\tcolor: #28a745;
  3952. \t\t\tfont-weight: bold;
  3953. \t\t}
  3954. \t\t.items-sold {
  3955. \t\t\tcolor: #666;
  3956. \t\t\tfont-size: 0.9rem;
  3957. \t\t}
  3958. \t\t.followers-count {
  3959. \t\t\tcolor: #666;
  3960. \t\t\tfont-size: 0.9rem;
  3961. \t\t}
  3962. \t\t.shop-avatar {
  3963. \t\t\twidth: 120px;
  3964. \t\t\theight: 120px;
  3965. \t\t\tborder-radius: 50%;
  3966. \t\t\tborder: 4px solid white;
  3967. \t\t\tobject-fit: cover;
  3968. \t\t\tmargin-bottom: 20px;
  3969. \t\t}
  3970. \t\t.shop-stats {
  3971. \t\t\tbackground: white;
  3972. \t\t\tborder-radius: 10px;
  3973. \t\t\tpadding: 30px;
  3974. \t\t\tbox-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
  3975. \t\t\tmargin-top: -50px;
  3976. \t\t\tposition: relative;
  3977. \t\t\tz-index: 10;
  3978. \t\t}
  3979. \t\t.stat-item {
  3980. \t\t\ttext-align: center;
  3981. \t\t\tpadding: 20px;
  3982. \t\t}
  3983. \t\t.stat-number {
  3984. \t\t\tfont-size: 2.5rem;
  3985. \t\t\tfont-weight: bold;
  3986. \t\t\tcolor: #ffa200;
  3987. \t\t\tdisplay: block;
  3988. \t\t}
  3989. \t\t.stat-label {
  3990. \t\t\tcolor: #666;
  3991. \t\t\tfont-size: 0.9rem;
  3992. \t\t\ttext-transform: uppercase;
  3993. \t\t\tletter-spacing: 1px;
  3994. \t\t}
  3995. \t\t.shop-description {
  3996. \t\t\tbackground: #f8f9fa;
  3997. \t\t\tpadding: 30px;
  3998. \t\t\tborder-radius: 10px;
  3999. \t\t\tmargin-bottom: 40px;
  4000. \t\t}
  4001. \t\t.shop-contact {
  4002. \t\t\tbackground: white;
  4003. \t\t\tborder: 1px solid #e9ecef;
  4004. \t\t\tborder-radius: 10px;
  4005. \t\t\tpadding: 25px;
  4006. \t\t\tmargin-bottom: 40px;
  4007. \t\t}
  4008. \t\t.contact-item {
  4009. \t\t\tdisplay: flex;
  4010. \t\t\talign-items: center;
  4011. \t\t\tmargin-bottom: 15px;
  4012. \t\t}
  4013. \t\t.contact-item i {
  4014. \t\t\tcolor: #ffa200;
  4015. \t\t\tmargin-right: 15px;
  4016. \t\t\twidth: 20px;
  4017. \t\t}
  4018. \t\t.product-card {
  4019. \t\t\tbackground: white;
  4020. \t\t\tborder-radius: 10px;
  4021. \t\t\toverflow: hidden;
  4022. \t\t\tbox-shadow: 0 3px 10px rgba(0, 0, 0, 0.1);
  4023. \t\t\ttransition: transform 0.3s ease, box-shadow 0.3s ease;
  4024. \t\t\tmargin-bottom: 30px;
  4025. \t\t}
  4026. \t\t.product-card:hover {
  4027. \t\t\ttransform: translateY(-5px);
  4028. \t\t\tbox-shadow: 0 8px 25px rgba(0, 0, 0, 0.15);
  4029. \t\t}
  4030. \t\t.product-image {
  4031. \t\t\theight: 200px;
  4032. \t\t\tbackground-size: cover;
  4033. \t\t\tbackground-position: center;
  4034. \t\t\tposition: relative;
  4035. \t\t}
  4036. \t\t.product-info {
  4037. \t\t\tpadding: 20px;
  4038. \t\t}
  4039. \t\t.product-title {
  4040. \t\t\tfont-size: 1.1rem;
  4041. \t\t\tfont-weight: 600;
  4042. \t\t\tmargin-bottom: 10px;
  4043. \t\t\tcolor: #333;
  4044. \t\t}
  4045. \t\t.product-price {
  4046. \t\t\tfont-size: 1.3rem;
  4047. \t\t\tfont-weight: bold;
  4048. \t\t\tcolor: #ffa200;
  4049. \t\t\tmargin-bottom: 15px;
  4050. \t\t}
  4051. \t\t.product-meta {
  4052. \t\t\tdisplay: flex;
  4053. \t\t\tjustify-content: space-between;
  4054. \t\t\talign-items: center;
  4055. \t\t\tfont-size: 0.9rem;
  4056. \t\t\tcolor: #666;
  4057. \t\t}
  4058. \t\t.rating {
  4059. \t\t\tcolor: #ffa200;
  4060. \t\t}
  4061. \t\t/* Boutons d'action uniformes */
  4062. \t\t.btn-shop,
  4063. \t\t.shop-action-btn {
  4064. \t\t\tbackground: #ffa200;
  4065. \t\t\tborder: 1px solid #ffa200;
  4066. \t\t\tcolor: white;
  4067. \t\t\tpadding: 12px 24px;
  4068. \t\t\tborder-radius: 6px;
  4069. \t\t\tfont-weight: 500;
  4070. \t\t\tfont-size: 0.9rem;
  4071. \t\t\ttransition: all 0.3s ease;
  4072. \t\t\ttext-decoration: none;
  4073. \t\t\tdisplay: inline-flex;
  4074. \t\t\talign-items: center;
  4075. \t\t\tjustify-content: center;
  4076. \t\t\tgap: 8px;
  4077. \t\t\tmin-width: 120px;
  4078. \t\t\theight: 44px;
  4079. \t\t\twhite-space: nowrap;
  4080. \t\t}
  4081. \t\t.btn-shop:hover,
  4082. \t\t.shop-action-btn:hover {
  4083. \t\t\tbackground: #e8910a;
  4084. \t\t\tborder-color: #e8910a;
  4085. \t\t\tcolor: white;
  4086. \t\t\ttransform: translateY(-1px);
  4087. \t\t\tbox-shadow: 0 4px 12px rgba(255, 162, 0, 0.3);
  4088. \t\t}
  4089. \t\t/* Boutons secondaires */
  4090. \t\t.shop-action-btn.secondary {
  4091. \t\t\tbackground: transparent;
  4092. \t\t\tborder: 1px solid #6c757d;
  4093. \t\t\tcolor: #6c757d;
  4094. \t\t}
  4095. \t\t.shop-action-btn.secondary:hover {
  4096. \t\t\tbackground: #6c757d;
  4097. \t\t\tborder-color: #6c757d;
  4098. \t\t\tcolor: white;
  4099. \t\t\ttransform: translateY(-1px);
  4100. \t\t\tbox-shadow: 0 4px 12px rgba(108, 117, 125, 0.3);
  4101. \t\t}
  4102. \t\t/* Responsive */
  4103. \t\t@media(max-width: 768px) {
  4104. \t\t\t.shop-header {
  4105. \t\t\t\tpadding: 100px 0 40px;
  4106. \t\t\t}
  4107. \t\t\t.shop-avatar {
  4108. \t\t\t\twidth: 80px;
  4109. \t\t\t\theight: 80px;
  4110. \t\t\t}
  4111. \t\t\t.shop-stats {
  4112. \t\t\t\tmargin-top: -30px;
  4113. \t\t\t\tpadding: 20px;
  4114. \t\t\t}
  4115. \t\t\t.stat-number {
  4116. \t\t\t\tfont-size: 2rem;
  4117. \t\t\t}
  4118. \t\t}
  4119. \t\t/* Très petits écrans */
  4120. \t\t@media(max-width: 480px) {
  4121. \t\t\t.btn-shop,
  4122. \t\t\t.shop-action-btn {
  4123. \t\t\t\tmin-width: 90px;
  4124. \t\t\t\theight: 38px;
  4125. \t\t\t\tfont-size: 0.8rem;
  4126. \t\t\t\tpadding: 8px 16px;
  4127. \t\t\t}
  4128. \t\t\t.shop-actions-row {
  4129. \t\t\t\tgap: 8px;
  4130. \t\t\t}
  4131. \t\t}
  4132. \t\t/* Styles pour la section des avis */
  4133. \t\t.review-stats-card {
  4134. \t\t\tbackground: white;
  4135. \t\t\tborder-radius: 10px;
  4136. \t\t\tpadding: 20px;
  4137. \t\t\tbox-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
  4138. \t\t\tmargin-bottom: 20px;
  4139. \t\t}
  4140. \t\t.stats-header {
  4141. \t\t\tdisplay: flex;
  4142. \t\t\talign-items: center;
  4143. \t\t\tmargin-bottom: 20px;
  4144. \t\t}
  4145. \t\t.overall-rating {
  4146. \t\t\ttext-align: center;
  4147. \t\t\tmargin-right: 20px;
  4148. \t\t}
  4149. \t\t.rating-number {
  4150. \t\t\tfont-size: 36px;
  4151. \t\t\tfont-weight: bold;
  4152. \t\t\tcolor: #333;
  4153. \t\t\tdisplay: block;
  4154. \t\t}
  4155. \t\t.stars {
  4156. \t\t\tcolor: #ffc107;
  4157. \t\t\tfont-size: 18px;
  4158. \t\t\tmargin-top: 5px;
  4159. \t\t}
  4160. \t\t.rating-summary p {
  4161. \t\t\tmargin: 0;
  4162. \t\t\tcolor: #666;
  4163. \t\t}
  4164. \t\t.rating-breakdown {
  4165. \t\t\tmargin-top: 15px;
  4166. \t\t}
  4167. \t\t.rating-bar {
  4168. \t\t\tdisplay: flex;
  4169. \t\t\talign-items: center;
  4170. \t\t\tmargin-bottom: 8px;
  4171. \t\t}
  4172. \t\t.rating-label {
  4173. \t\t\twidth: 40px;
  4174. \t\t\tfont-size: 14px;
  4175. \t\t\tcolor: #666;
  4176. \t\t}
  4177. \t\t.rating-progress {
  4178. \t\t\tflex: 1;
  4179. \t\t\theight: 6px;
  4180. \t\t\tbackground: #e9ecef;
  4181. \t\t\tborder-radius: 3px;
  4182. \t\t\tmargin: 0 10px;
  4183. \t\t\toverflow: hidden;
  4184. \t\t}
  4185. \t\t.rating-fill {
  4186. \t\t\theight: 100%;
  4187. \t\t\tbackground: linear-gradient(45deg, #ffc107, #ff8c00);
  4188. \t\t\ttransition: width 0.3s ease;
  4189. \t\t}
  4190. \t\t.rating-count {
  4191. \t\t\twidth: 30px;
  4192. \t\t\ttext-align: right;
  4193. \t\t\tfont-size: 14px;
  4194. \t\t\tcolor: #666;
  4195. \t\t}
  4196. \t\t.reviews-preview {
  4197. \t\t\tbackground: white;
  4198. \t\t\tborder-radius: 10px;
  4199. \t\t\tpadding: 20px;
  4200. \t\t\tbox-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
  4201. \t\t}
  4202. \t\t.review-card-preview {
  4203. \t\t\tborder-bottom: 1px solid #f0f0f0;
  4204. \t\t\tpadding-bottom: 15px;
  4205. \t\t\tmargin-bottom: 15px;
  4206. \t\t}
  4207. \t\t.review-card-preview:last-child {
  4208. \t\t\tborder-bottom: none;
  4209. \t\t\tmargin-bottom: 0;
  4210. \t\t}
  4211. \t\t.review-header {
  4212. \t\t\tdisplay: flex;
  4213. \t\t\tjustify-content: space-between;
  4214. \t\t\talign-items: center;
  4215. \t\t\tmargin-bottom: 10px;
  4216. \t\t}
  4217. \t\t.review-user {
  4218. \t\t\tdisplay: flex;
  4219. \t\t\talign-items: center;
  4220. \t\t}
  4221. \t\t.user-avatar {
  4222. \t\t\twidth: 35px;
  4223. \t\t\theight: 35px;
  4224. \t\t\tborder-radius: 50%;
  4225. \t\t\tbackground: linear-gradient(45deg, #667eea, #764ba2);
  4226. \t\t\tdisplay: flex;
  4227. \t\t\talign-items: center;
  4228. \t\t\tjustify-content: center;
  4229. \t\t\tcolor: white;
  4230. \t\t\tfont-weight: bold;
  4231. \t\t\tmargin-right: 10px;
  4232. \t\t}
  4233. \t\t.user-info h6 {
  4234. \t\t\tmargin: 0;
  4235. \t\t\tfont-size: 14px;
  4236. \t\t\tfont-weight: 600;
  4237. \t\t\tcolor: #333;
  4238. \t\t}
  4239. \t\t.user-info small {
  4240. \t\t\tcolor: #666;
  4241. \t\t\tfont-size: 12px;
  4242. \t\t}
  4243. \t\t.review-rating {
  4244. \t\t\tdisplay: flex;
  4245. \t\t\talign-items: center;
  4246. \t\t\tgap: 5px;
  4247. \t\t}
  4248. \t\t.verified-badge {
  4249. \t\t\tbackground: #28a745;
  4250. \t\t\tcolor: white;
  4251. \t\t\tpadding: 2px 4px;
  4252. \t\t\tborder-radius: 3px;
  4253. \t\t\tfont-size: 10px;
  4254. \t\t\tfont-weight: bold;
  4255. \t\t}
  4256. \t\t.review-content {
  4257. \t\t\tcolor: #666;
  4258. \t\t\tfont-size: 14px;
  4259. \t\t\tline-height: 1.5;
  4260. \t\t}
  4261. \t\t.empty-reviews {
  4262. \t\t\ttext-align: center;
  4263. \t\t\tpadding: 40px 20px;
  4264. \t\t\tcolor: #666;
  4265. \t\t}
  4266. \t\t.empty-reviews i {
  4267. \t\t\tfont-size: 48px;
  4268. \t\t\tcolor: #ddd;
  4269. \t\t\tmargin-bottom: 15px;
  4270. \t\t}
  4271. \t\t.empty-reviews h4 {
  4272. \t\t\tcolor: #333;
  4273. \t\t\tmargin-bottom: 10px;
  4274. \t\t}
  4275. \t\t.section-title h2 {
  4276. \t\t\tcolor: #333;
  4277. \t\t\tmargin-bottom: 10px;
  4278. \t\t}
  4279. \t\t.section-title p {
  4280. \t\t\tcolor: #666;
  4281. \t\t\tmargin-bottom: 30px;
  4282. \t\t}
  4283. \t\t@media(max-width: 768px) {
  4284. \t\t\t.stats-header {
  4285. \t\t\t\tflex-direction: column;
  4286. \t\t\t\ttext-align: center;
  4287. \t\t\t}
  4288. \t\t\t.overall-rating {
  4289. \t\t\t\tmargin-right: 0;
  4290. \t\t\t\tmargin-bottom: 15px;
  4291. \t\t\t}
  4292. \t\t\t.review-header {
  4293. \t\t\t\tflex-direction: column;
  4294. \t\t\t\talign-items: flex-start;
  4295. \t\t\t}
  4296. \t\t\t.review-rating {
  4297. \t\t\t\tmargin-top: 5px;
  4298. \t\t\t}
  4299. \t\t}
  4300. \t</style>
  4301. {% endblock %}
  4302. {% block body %}
  4303. \t<!-- Shop Header eBay-style avec Karma - Pleine largeur -->
  4304. \t<section
  4305. \t\tclass=\"shop-header\">
  4306. \t\t<!-- Carrousel eBay-style -->
  4307. \t\t<div class=\"shop-carousel-ebay\">
  4308. \t\t\t<div class=\"carousel-container\">
  4309. \t\t\t\t{% set allBannerImages = shop.getAllBannerImages() %}
  4310. \t\t\t\t{% if allBannerImages|length > 0 %}
  4311. \t\t\t\t\t{% for image in allBannerImages %}
  4312. \t\t\t\t\t\t<div class=\"carousel-slide {% if loop.first %}active{% endif %}\" style=\"background-image: url('{{ asset(image) }}')\">
  4313. \t\t\t\t\t\t\t<div class=\"shop-banner-overlay\"></div>
  4314. \t\t\t\t\t\t</div>
  4315. \t\t\t\t\t{% endfor %}
  4316. \t\t\t\t{% else %}
  4317. \t\t\t\t\t<!-- Slide par défaut avec dégradé si aucune image de bannière -->
  4318. \t\t\t\t\t<div class=\"carousel-slide active\" style=\"background: linear-gradient(135deg, #667eea 0%, #764ba2 50%, #f093fb 100%);\">
  4319. \t\t\t\t\t\t<div class=\"shop-banner-overlay\"></div>
  4320. \t\t\t\t\t</div>
  4321. \t\t\t\t{% endif %}
  4322. \t\t\t</div>
  4323. \t\t\t<!-- Contrôles eBay-style intégrés - uniquement si plusieurs images de bannière -->
  4324. \t\t\t{% set totalBannerImages = allBannerImages|length %}
  4325. \t\t\t{% if totalBannerImages > 1 %}
  4326. \t\t\t\t<div class=\"carousel-controls-ebay\">
  4327. \t\t\t\t\t<button class=\"carousel-btn-ebay prev-btn\" onclick=\"previousSlide()\" id=\"prevBtn\">
  4328. \t\t\t\t\t\t<i class=\"lnr lnr-chevron-left\"></i>
  4329. \t\t\t\t\t</button>
  4330. \t\t\t\t\t<button class=\"carousel-btn-ebay pause-btn\" onclick=\"toggleCarousel()\" id=\"pauseBtn\">
  4331. \t\t\t\t\t\t<i class=\"lnr lnr-pause\" id=\"pauseIcon\"></i>
  4332. \t\t\t\t\t</button>
  4333. \t\t\t\t\t<button class=\"carousel-btn-ebay next-btn\" onclick=\"nextSlide()\" id=\"nextBtn\">
  4334. \t\t\t\t\t\t<i class=\"lnr lnr-chevron-right\"></i>
  4335. \t\t\t\t\t</button>
  4336. \t\t\t\t</div>
  4337. \t\t\t\t<!-- Indicateurs eBay-style - uniquement pour les images de bannière -->
  4338. \t\t\t\t<div class=\"carousel-indicators-ebay\">
  4339. \t\t\t\t\t{% for image in allBannerImages %}
  4340. \t\t\t\t\t\t<button class=\"carousel-indicator-ebay {% if loop.first %}active{% endif %}\" onclick=\"goToSlide({{ loop.index0 }})\"></button>
  4341. \t\t\t\t\t{% endfor %}
  4342. \t\t\t\t</div>
  4343. \t\t\t{% endif %}
  4344. \t\t</div>
  4345. \t\t<!-- Contenu de la boutique eBay-style -->
  4346. \t\t<div class=\"shop-header-content\">
  4347. \t\t\t<div
  4348. \t\t\t\tclass=\"row align-items-center\">
  4349. \t\t\t\t<!-- Logo de la boutique -->
  4350. \t\t\t\t<div class=\"col-auto\">
  4351. \t\t\t\t\t<div class=\"shop-avatar-container-ebay\">
  4352. \t\t\t\t\t\t{% if shop.logo %}
  4353. \t\t\t\t\t\t\t<img src=\"{{ asset(shop.logo) }}\" alt=\"{{ shop.name }}\" class=\"shop-avatar-ebay\">
  4354. \t\t\t\t\t\t{% else %}
  4355. \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;\">
  4356. \t\t\t\t\t\t\t\t<i class=\"lnr lnr-store\"></i>
  4357. \t\t\t\t\t\t\t</div>
  4358. \t\t\t\t\t\t{% endif %}
  4359. \t\t\t\t\t\t{% if shop.isVerified %}
  4360. \t\t\t\t\t\t\t<div class=\"verified-badge-ebay\">
  4361. \t\t\t\t\t\t\t\t<i class=\"lnr lnr-checkmark-circle\"></i>
  4362. \t\t\t\t\t\t\t</div>
  4363. \t\t\t\t\t\t{% endif %}
  4364. \t\t\t\t\t</div>
  4365. \t\t\t\t</div>
  4366. \t\t\t\t<!-- Informations principales -->
  4367. \t\t\t\t<div class=\"col\">
  4368. \t\t\t\t\t<div
  4369. \t\t\t\t\t\tclass=\"shop-info-ebay\">
  4370. \t\t\t\t\t\t<!-- Nom de la boutique -->
  4371. \t\t\t\t\t\t<div class=\"shop-name-section\">
  4372. \t\t\t\t\t\t\t<h1 class=\"shop-name-ebay\">{{ shop.name }}</h1>
  4373. \t\t\t\t\t\t\t{% if shop.isVerified %}
  4374. \t\t\t\t\t\t\t\t<span class=\"verified-text\">
  4375. \t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-checkmark-circle me-1\"></i>Vendeur vérifié
  4376. \t\t\t\t\t\t\t\t</span>
  4377. \t\t\t\t\t\t\t{% endif %}
  4378. \t\t\t\t\t\t</div>
  4379. \t\t\t\t\t\t<!-- Catégorie -->
  4380. \t\t\t\t\t\t{% if shop.shopCategory %}
  4381. \t\t\t\t\t\t\t<div class=\"shop-category-section\">
  4382. \t\t\t\t\t\t\t\t<span class=\"shop-category-ebay\">{{ shop.shopCategory.name }}</span>
  4383. \t\t\t\t\t\t\t</div>
  4384. \t\t\t\t\t\t{% endif %}
  4385. \t\t\t\t\t\t<!-- Statistiques eBay-style -->
  4386. \t\t\t\t\t\t<div class=\"shop-stats-ebay\">
  4387. \t\t\t\t\t\t\t<div class=\"stat-row\">
  4388. \t\t\t\t\t\t\t\t{% if shop.averageRating > 0 %}
  4389. \t\t\t\t\t\t\t\t\t<div class=\"stat-item-ebay\">
  4390. \t\t\t\t\t\t\t\t\t\t<span class=\"stat-percentage\">{{ shop.averageRating|number_format(1) }}%</span>
  4391. \t\t\t\t\t\t\t\t\t\t<span class=\"stat-label-ebay\">Évaluations positives</span>
  4392. \t\t\t\t\t\t\t\t\t</div>
  4393. \t\t\t\t\t\t\t\t{% endif %}
  4394. \t\t\t\t\t\t\t\t{% if stats.totalProductSales > 0 %}
  4395. \t\t\t\t\t\t\t\t\t<div class=\"stat-item-ebay\">
  4396. \t\t\t\t\t\t\t\t\t\t<span class=\"stat-number-ebay\">{{ stats.totalProductSales|number_format }}</span>
  4397. \t\t\t\t\t\t\t\t\t\t<span class=\"stat-label-ebay\">Articles vendus</span>
  4398. \t\t\t\t\t\t\t\t\t</div>
  4399. \t\t\t\t\t\t\t\t{% endif %}
  4400. \t\t\t\t\t\t\t\t{% if followStats.active_follows > 0 %}
  4401. \t\t\t\t\t\t\t\t\t<div class=\"stat-item-ebay\">
  4402. \t\t\t\t\t\t\t\t\t\t<span class=\"stat-number-ebay\">{{ followStats.active_follows|number_format }}</span>
  4403. \t\t\t\t\t\t\t\t\t\t<span class=\"stat-label-ebay\">Suiveurs</span>
  4404. \t\t\t\t\t\t\t\t\t</div>
  4405. \t\t\t\t\t\t\t\t{% endif %}
  4406. \t\t\t\t\t\t\t</div>
  4407. \t\t\t\t\t\t\t<!-- Informations supplémentaires -->
  4408. \t\t\t\t\t\t\t<div class=\"shop-additional-info\">
  4409. \t\t\t\t\t\t\t\t<div class=\"row\">
  4410. \t\t\t\t\t\t\t\t\t<div class=\"col-12\">
  4411. \t\t\t\t\t\t\t\t\t\t<span class=\"member-since col-md-3 col-sm-6 w-100\">
  4412. \t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-thumbs-up\"></i>
  4413. \t\t\t\t\t\t\t\t\t\t\t7% positive feedback</span>
  4414. \t\t\t\t\t\t\t\t\t\t<span class=\"member-since col-md-3 col-sm-6 w-100\">
  4415. \t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-cart\"></i>
  4416. \t\t\t\t\t\t\t\t\t\t\t29 produits vendus</span>
  4417. \t\t\t\t\t\t\t\t\t\t<span class=\"member-since col-md-3 col-sm-6 w-100\">
  4418. \t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-star\"></i>
  4419. \t\t\t\t\t\t\t\t\t\t\t150 followers</span>
  4420. \t\t\t\t\t\t\t\t\t\t<span class=\"member-since col-md-3 w-100\">
  4421. \t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-history\"></i>
  4422. \t\t\t\t\t\t\t\t\t\t\tCréé depuis
  4423. \t\t\t\t\t\t\t\t\t\t\t{{ shop.createdAt|date('M Y') }}</span>
  4424. \t\t\t\t\t\t\t\t\t</div>
  4425. \t\t\t\t\t\t\t\t</div>
  4426. \t\t\t\t\t\t\t</div>
  4427. \t\t\t\t\t\t</div>
  4428. \t\t\t\t\t</div>
  4429. \t\t\t\t</div>
  4430. \t\t\t\t<!-- Actions eBay-style -->
  4431. \t\t\t\t<div class=\"col-auto\">
  4432. \t\t\t\t\t<div class=\"shop-actions-ebay\">
  4433. \t\t\t\t\t\t{% if app.user %}
  4434. \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' }}\">
  4435. \t\t\t\t\t\t\t\t<span id=\"follow-text\">
  4436. \t\t\t\t\t\t\t\t\t{% if isFollowing %}
  4437. \t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-checkmark-circle me-1\"></i> Suivi
  4438. \t\t\t\t\t\t\t\t\t{% else %}
  4439. \t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-plus me-1\"></i> Suivre
  4440. \t\t\t\t\t\t\t\t\t{% endif %}
  4441. \t\t\t\t\t\t\t\t</span>
  4442. \t\t\t\t\t\t\t</button>
  4443. \t\t\t\t\t\t{% else %}
  4444. \t\t\t\t\t\t\t<a href=\"{{ path('ui_app_login') }}\" class=\"btn btn-primary btn-ebay\">
  4445. \t\t\t\t\t\t\t\t<i class=\"lnr lnr-user me-1\"></i> Se connecter pour suivre
  4446. \t\t\t\t\t\t\t</a>
  4447. \t\t\t\t\t\t{% endif %}
  4448. \t\t\t\t\t\t<button class=\"btn btn-outline-secondary btn-ebay\" onclick=\"shareShop()\">
  4449. \t\t\t\t\t\t\t<i class=\"lnr lnr-bubble me-1\"></i> Partager
  4450. \t\t\t\t\t\t</button>
  4451. \t\t\t\t\t\t<button class=\"btn btn-outline-danger btn-ebay\" onclick=\"reportShop()\">
  4452. \t\t\t\t\t\t\t<i class=\"lnr lnr-flag me-1\"></i> Signaler
  4453. \t\t\t\t\t\t</button>
  4454. \t\t\t\t\t\t{% if canEdit %}
  4455. \t\t\t\t\t\t\t<a href=\"{{ path('seller_shop_edit', {slug: shop.slug}) }}\" class=\"btn btn-outline-primary btn-ebay\">
  4456. \t\t\t\t\t\t\t\t<i class=\"lnr lnr-pencil me-1\"></i> Modifier la boutique
  4457. \t\t\t\t\t\t\t</a>
  4458. \t\t\t\t\t\t{% endif %}
  4459. \t\t\t\t\t</div>
  4460. \t\t\t\t</div>
  4461. \t\t\t</div>
  4462. \t\t</div>
  4463. \t</section>
  4464. \t<!-- Shop Tabs eBay-style avec Karma -->
  4465. \t<section class=\"container\">
  4466. \t\t<div class=\"shop-tabs\">
  4467. \t\t\t<ul class=\"nav nav-tabs shop-tabs-nav\" role=\"tablist\">
  4468. \t\t\t\t<li class=\"nav-item shop-tab\">
  4469. \t\t\t\t\t<a href=\"#shop-items\" class=\"nav-link shop-tab-link active\" data-tab=\"items\" role=\"tab\">
  4470. \t\t\t\t\t\tBoutique
  4471. \t\t\t\t\t</a>
  4472. \t\t\t\t</li>
  4473. \t\t\t\t<li class=\"nav-item shop-tab\">
  4474. \t\t\t\t\t<a href=\"#shop-sale\" class=\"nav-link shop-tab-link\" data-tab=\"sale\" role=\"tab\">
  4475. \t\t\t\t\t\tPromotions
  4476. \t\t\t\t\t</a>
  4477. \t\t\t\t</li>
  4478. \t\t\t\t<li class=\"nav-item shop-tab\">
  4479. \t\t\t\t\t<a href=\"#shop-about\" class=\"nav-link shop-tab-link\" data-tab=\"about\" role=\"tab\">
  4480. \t\t\t\t\t\tÀ propos
  4481. \t\t\t\t\t</a>
  4482. \t\t\t\t</li>
  4483. \t\t\t\t<li class=\"nav-item shop-tab\">
  4484. \t\t\t\t\t<a href=\"#shop-feedback\" class=\"nav-link shop-tab-link\" data-tab=\"feedback\" role=\"tab\">
  4485. \t\t\t\t\t\tAvis ({{ shop.getVisibleReviewsCount() }})
  4486. \t\t\t\t\t</a>
  4487. \t\t\t\t</li>
  4488. \t\t\t</ul>
  4489. \t\t\t<!-- Tab Content: Shop Items avec Karma -->
  4490. \t\t\t<div id=\"shop-items\" class=\"tab-content shop-tab-content active\">
  4491. \t\t\t\t<div class=\"row\">
  4492. \t\t\t\t\t<div class=\"col-lg-12\">
  4493. \t\t\t\t\t\t<div class=\"d-flex justify-content-between align-items-center mb-4\">
  4494. \t\t\t\t\t\t\t<h4 class=\"mb-0\">Produits de
  4495. \t\t\t\t\t\t\t\t{{ shop.name }}</h4>
  4496. \t\t\t\t\t\t\t<div class=\"d-flex align-items-center gap-3\">
  4497. \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;\">
  4498. \t\t\t\t\t\t\t\t\t<span class=\"product-count\">{{ products|length|number_format }}</span>
  4499. \t\t\t\t\t\t\t\t\t<span style=\"font-size: 1rem; font-weight: 400;\">produits</span>
  4500. \t\t\t\t\t\t\t\t</span>
  4501. \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);\">
  4502. \t\t\t\t\t\t\t\t\t<option value=\"\">Trier par</option>
  4503. \t\t\t\t\t\t\t\t\t<option value=\"price_asc\">Prix : Croissant</option>
  4504. \t\t\t\t\t\t\t\t\t<option value=\"price_desc\">Prix : Décroissant</option>
  4505. \t\t\t\t\t\t\t\t\t<option value=\"newest\">Plus récents</option>
  4506. \t\t\t\t\t\t\t\t\t<option value=\"popular\">Plus populaires</option>
  4507. \t\t\t\t\t\t\t\t\t<option value=\"name_asc\">Nom : A-Z</option>
  4508. \t\t\t\t\t\t\t\t\t<option value=\"name_desc\">Nom : Z-A</option>
  4509. \t\t\t\t\t\t\t\t</select>
  4510. \t\t\t\t\t\t\t</div>
  4511. \t\t\t\t\t\t</div>
  4512. \t\t\t\t\t\t{% if products|length > 0 %}
  4513. \t\t\t\t\t\t\t<div class=\"row\" id=\"products-container\">
  4514. \t\t\t\t\t\t\t\t{% for product in products %}
  4515. \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') }}\">
  4516. \t\t\t\t\t\t\t\t\t\t{% include 'home/_single_product_card.html.twig' with {'product': product} %}
  4517. \t\t\t\t\t\t\t\t\t</div>
  4518. \t\t\t\t\t\t\t\t{% endfor %}
  4519. \t\t\t\t\t\t\t</div>
  4520. \t\t\t\t\t\t{% else %}
  4521. \t\t\t\t\t\t\t<div class=\"text-center py-5\">
  4522. \t\t\t\t\t\t\t\t<i class=\"lnr lnr-package\" style=\"font-size: 4rem; color: #ccc;\"></i>
  4523. \t\t\t\t\t\t\t\t<h4 class=\"mt-3\">Aucun produit disponible</h4>
  4524. \t\t\t\t\t\t\t\t<p class=\"text-muted\">Cette boutique n'a pas encore de produits en vente.</p>
  4525. \t\t\t\t\t\t\t</div>
  4526. \t\t\t\t\t\t{% endif %}
  4527. \t\t\t\t\t</div>
  4528. \t\t\t\t</div>
  4529. \t\t\t</div>
  4530. \t\t\t<!-- Tab Content: Sale avec Karma -->
  4531. \t\t\t<div id=\"shop-sale\" class=\"tab-content shop-tab-content\">
  4532. \t\t\t\t<div class=\"text-center py-5\">
  4533. \t\t\t\t\t<i class=\"lnr lnr-tag\" style=\"font-size: 4rem; color: #ccc;\"></i>
  4534. \t\t\t\t\t<h4 class=\"mt-3\">Aucune promotion actuellement</h4>
  4535. \t\t\t\t\t<p class=\"text-muted\">Cette boutique n'a pas de promotions actives pour le moment.</p>
  4536. \t\t\t\t</div>
  4537. \t\t\t</div>
  4538. \t\t\t<!-- Tab Content: About avec Karma -->
  4539. \t\t\t<div id=\"shop-about\" class=\"tab-content shop-tab-content\">
  4540. \t\t\t\t<div class=\"row\">
  4541. \t\t\t\t\t<div class=\"col-lg-8\">
  4542. \t\t\t\t\t\t<div class=\"card\">
  4543. \t\t\t\t\t\t\t<div class=\"card-header\">
  4544. \t\t\t\t\t\t\t\t<h5 class=\"mb-0\">
  4545. \t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-user me-2\"></i>À propos de
  4546. \t\t\t\t\t\t\t\t\t{{ shop.name }}
  4547. \t\t\t\t\t\t\t\t</h5>
  4548. \t\t\t\t\t\t\t</div>
  4549. \t\t\t\t\t\t\t<div class=\"card-body\">
  4550. \t\t\t\t\t\t\t\t{% if shop.description %}
  4551. \t\t\t\t\t\t\t\t\t<p class=\"card-text\">{{ shop.description }}</p>
  4552. \t\t\t\t\t\t\t\t{% else %}
  4553. \t\t\t\t\t\t\t\t\t<p class=\"text-muted\">Aucune description disponible.</p>
  4554. \t\t\t\t\t\t\t\t{% endif %}
  4555. \t\t\t\t\t\t\t\t{% if shop.businessHours %}
  4556. \t\t\t\t\t\t\t\t\t<h6 class=\"mt-4\">
  4557. \t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-clock me-2\"></i>Heures d'ouverture
  4558. \t\t\t\t\t\t\t\t\t</h6>
  4559. \t\t\t\t\t\t\t\t\t<p>{{ shop.businessHours }}</p>
  4560. \t\t\t\t\t\t\t\t{% endif %}
  4561. \t\t\t\t\t\t\t\t{% if shop.returnPolicy %}
  4562. \t\t\t\t\t\t\t\t\t<h6 class=\"mt-4\">
  4563. \t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-undo me-2\"></i>Politique de retour
  4564. \t\t\t\t\t\t\t\t\t</h6>
  4565. \t\t\t\t\t\t\t\t\t<p>{{ shop.returnPolicy }}</p>
  4566. \t\t\t\t\t\t\t\t{% endif %}
  4567. \t\t\t\t\t\t\t</div>
  4568. \t\t\t\t\t\t</div>
  4569. \t\t\t\t\t</div>
  4570. \t\t\t\t\t<div class=\"col-lg-4\">
  4571. \t\t\t\t\t\t<div class=\"card shop-info-card\">
  4572. \t\t\t\t\t\t\t<div class=\"card-header\">
  4573. \t\t\t\t\t\t\t\t<h6 class=\"mb-0\">
  4574. \t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-chart me-2\"></i>Statistiques de la boutique
  4575. \t\t\t\t\t\t\t\t</h6>
  4576. \t\t\t\t\t\t\t</div>
  4577. \t\t\t\t\t\t\t<div class=\"card-body\">
  4578. \t\t\t\t\t\t\t\t<div class=\"row text-center\">
  4579. \t\t\t\t\t\t\t\t\t<div class=\"col-6\">
  4580. \t\t\t\t\t\t\t\t\t\t<div class=\"shop-stat-item\">
  4581. \t\t\t\t\t\t\t\t\t\t\t<span class=\"stat-number h4 text-primary\">{{ stats.activeProducts }}</span>
  4582. \t\t\t\t\t\t\t\t\t\t\t<span class=\"stat-label d-block\">Produits actifs</span>
  4583. \t\t\t\t\t\t\t\t\t\t</div>
  4584. \t\t\t\t\t\t\t\t\t</div>
  4585. \t\t\t\t\t\t\t\t\t<div class=\"col-6\">
  4586. \t\t\t\t\t\t\t\t\t\t<div class=\"shop-stat-item\">
  4587. \t\t\t\t\t\t\t\t\t\t\t<span class=\"stat-number h4 text-info\">{{ stats.shopViews }}</span>
  4588. \t\t\t\t\t\t\t\t\t\t\t<span class=\"stat-label d-block\">Vues boutique</span>
  4589. \t\t\t\t\t\t\t\t\t\t</div>
  4590. \t\t\t\t\t\t\t\t\t</div>
  4591. \t\t\t\t\t\t\t\t</div>
  4592. \t\t\t\t\t\t\t</div>
  4593. \t\t\t\t\t\t</div>
  4594. \t\t\t\t\t</div>
  4595. \t\t\t\t</div>
  4596. \t\t\t</div>
  4597. \t\t\t<!-- Tab Content: Feedback avec Karma -->
  4598. \t\t\t<div id=\"shop-feedback\" class=\"tab-content shop-tab-content\">
  4599. \t\t\t\t<div class=\"row\">
  4600. \t\t\t\t\t<div
  4601. \t\t\t\t\t\tclass=\"col-lg-8\">
  4602. \t\t\t\t\t\t<!-- Statistiques des avis -->
  4603. \t\t\t\t\t\t<div class=\"review-stats mb-4\">
  4604. \t\t\t\t\t\t\t<div class=\"row\">
  4605. \t\t\t\t\t\t\t\t<div class=\"col-md-4\">
  4606. \t\t\t\t\t\t\t\t\t<div class=\"stat-card text-center\">
  4607. \t\t\t\t\t\t\t\t\t\t<h3 class=\"stat-number\">{{ shop.getAverageRating() }}</h3>
  4608. \t\t\t\t\t\t\t\t\t\t<div class=\"rating-stars\">
  4609. \t\t\t\t\t\t\t\t\t\t\t{% for i in 1..5 %}
  4610. \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>
  4611. \t\t\t\t\t\t\t\t\t\t\t{% endfor %}
  4612. \t\t\t\t\t\t\t\t\t\t</div>
  4613. \t\t\t\t\t\t\t\t\t\t<p class=\"stat-label\">Note moyenne</p>
  4614. \t\t\t\t\t\t\t\t\t</div>
  4615. \t\t\t\t\t\t\t\t</div>
  4616. \t\t\t\t\t\t\t\t<div class=\"col-md-4\">
  4617. \t\t\t\t\t\t\t\t\t<div class=\"stat-card text-center\">
  4618. \t\t\t\t\t\t\t\t\t\t<h3 class=\"stat-number\">{{ shop.getVisibleReviewsCount() }}</h3>
  4619. \t\t\t\t\t\t\t\t\t\t<p class=\"stat-label\">Avis clients</p>
  4620. \t\t\t\t\t\t\t\t\t</div>
  4621. \t\t\t\t\t\t\t\t</div>
  4622. \t\t\t\t\t\t\t\t<div class=\"col-md-4\">
  4623. \t\t\t\t\t\t\t\t\t<div class=\"stat-card text-center\">
  4624. \t\t\t\t\t\t\t\t\t\t<h3 class=\"stat-number\">{{ ((shop.getVisibleReviewsCount() / 100) * 100)|round }}%</h3>
  4625. \t\t\t\t\t\t\t\t\t\t<p class=\"stat-label\">Satisfaction</p>
  4626. \t\t\t\t\t\t\t\t\t</div>
  4627. \t\t\t\t\t\t\t\t</div>
  4628. \t\t\t\t\t\t\t</div>
  4629. \t\t\t\t\t\t</div>
  4630. \t\t\t\t\t\t<!-- Liste des avis récents -->
  4631. \t\t\t\t\t\t<div class=\"reviews-preview\">
  4632. \t\t\t\t\t\t\t<h5 class=\"mb-3\">Avis récents</h5>
  4633. \t\t\t\t\t\t\t{% if shop.reviews|length > 0 %}
  4634. \t\t\t\t\t\t\t\t<div class=\"reviews-list\">
  4635. \t\t\t\t\t\t\t\t\t{% for review in shop.reviews|slice(0, 5) %}
  4636. \t\t\t\t\t\t\t\t\t\t{% if review.isVisible %}
  4637. \t\t\t\t\t\t\t\t\t\t\t<div class=\"review-item\">
  4638. \t\t\t\t\t\t\t\t\t\t\t\t<div class=\"review-header\">
  4639. \t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"reviewer-info\">
  4640. \t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"reviewer-avatar\">
  4641. \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-user\"></i>
  4642. \t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>
  4643. \t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"reviewer-details\">
  4644. \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<h6 class=\"reviewer-name\">{{ review.user.userIdentifier }}</h6>
  4645. \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"review-rating\">
  4646. \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{% for i in 1..5 %}
  4647. \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>
  4648. \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{% endfor %}
  4649. \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>
  4650. \t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>
  4651. \t\t\t\t\t\t\t\t\t\t\t\t\t</div>
  4652. \t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"review-meta\">
  4653. \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>
  4654. \t\t\t\t\t\t\t\t\t\t\t\t\t\t{% if review.isVerified %}
  4655. \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"verified-badge\">
  4656. \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-checkmark-circle\"></i>
  4657. \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tVérifié
  4658. \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>
  4659. \t\t\t\t\t\t\t\t\t\t\t\t\t\t{% endif %}
  4660. \t\t\t\t\t\t\t\t\t\t\t\t\t</div>
  4661. \t\t\t\t\t\t\t\t\t\t\t\t</div>
  4662. \t\t\t\t\t\t\t\t\t\t\t\t{% if review.comment %}
  4663. \t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"review-comment\">
  4664. \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>
  4665. \t\t\t\t\t\t\t\t\t\t\t\t\t</div>
  4666. \t\t\t\t\t\t\t\t\t\t\t\t{% endif %}
  4667. \t\t\t\t\t\t\t\t\t\t\t</div>
  4668. \t\t\t\t\t\t\t\t\t\t{% endif %}
  4669. \t\t\t\t\t\t\t\t\t{% endfor %}
  4670. \t\t\t\t\t\t\t\t</div>
  4671. \t\t\t\t\t\t\t\t<div class=\"text-center mt-4\">
  4672. \t\t\t\t\t\t\t\t\t<a href=\"{{ path('shop_reviews_index', {'slug': shop.slug}) }}\" class=\"btn btn-primary\">
  4673. \t\t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-star me-1\"></i>Voir tous les avis
  4674. \t\t\t\t\t\t\t\t\t</a>
  4675. \t\t\t\t\t\t\t\t</div>
  4676. \t\t\t\t\t\t\t{% else %}
  4677. \t\t\t\t\t\t\t\t<div class=\"text-center py-4\">
  4678. \t\t\t\t\t\t\t\t\t<i class=\"lnr lnr-star\" style=\"font-size: 3rem; color: #ccc;\"></i>
  4679. \t\t\t\t\t\t\t\t\t<h5 class=\"mt-3\">Aucun avis pour le moment</h5>
  4680. \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>
  4681. \t\t\t\t\t\t\t\t</div>
  4682. \t\t\t\t\t\t\t{% endif %}
  4683. \t\t\t\t\t\t</div>
  4684. \t\t\t\t\t</div>
  4685. \t\t\t\t\t<div
  4686. \t\t\t\t\t\tclass=\"col-lg-4\">
  4687. \t\t\t\t\t\t<!-- Lien vers la page complète des avis -->
  4688. \t\t\t\t\t\t<div class=\"review-actions-card\">
  4689. \t\t\t\t\t\t\t<h5>Évaluer cette boutique</h5>
  4690. \t\t\t\t\t\t\t<p class=\"text-muted\">Partagez votre expérience avec cette boutique.</p>
  4691. \t\t\t\t\t\t\t<a href=\"{{ path('shop_reviews_new', {'slug': shop.slug}) }}\" class=\"btn btn-primary w-100\">
  4692. \t\t\t\t\t\t\t\t<i class=\"lnr lnr-star me-1\"></i>Laisser un avis
  4693. \t\t\t\t\t\t\t</a>
  4694. \t\t\t\t\t\t</div>
  4695. \t\t\t\t\t</div>
  4696. \t\t\t\t</div>
  4697. \t\t\t</div>
  4698. \t\t</div>
  4699. \t</section>
  4700. \t<!-- Modal de signalement -->
  4701. \t<div class=\"modal fade\" id=\"reportModal\" tabindex=\"-1\" aria-labelledby=\"reportModalLabel\" aria-hidden=\"true\">
  4702. \t\t<div class=\"modal-dialog\">
  4703. \t\t\t<div class=\"modal-content\">
  4704. \t\t\t\t<div class=\"modal-header\">
  4705. \t\t\t\t\t<h5 class=\"modal-title\" id=\"reportModalLabel\">
  4706. \t\t\t\t\t\t<i class=\"lnr lnr-flag me-2\"></i>&nbsp;Signaler cette boutique
  4707. \t\t\t\t\t</h5>
  4708. \t\t\t\t\t<button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>
  4709. \t\t\t\t</div>
  4710. \t\t\t\t<div class=\"modal-body\">
  4711. \t\t\t\t\t<form id=\"reportForm\">
  4712. \t\t\t\t\t\t<div class=\"mb-3\">
  4713. \t\t\t\t\t\t\t<label for=\"reportReason\" class=\"form-label\">Motif du signalement *</label>
  4714. \t\t\t\t\t\t\t<select class=\"form-select\" id=\"reportReason\" required>
  4715. \t\t\t\t\t\t\t\t<option value=\"\">Sélectionnez un motif</option>
  4716. \t\t\t\t\t\t\t\t<option value=\"fake_products\">Produits contrefaits</option>
  4717. \t\t\t\t\t\t\t\t<option value=\"inappropriate_content\">Contenu inapproprié</option>
  4718. \t\t\t\t\t\t\t\t<option value=\"spam\">Spam ou publicité abusive</option>
  4719. \t\t\t\t\t\t\t\t<option value=\"fraud\">Fraude ou escroquerie</option>
  4720. \t\t\t\t\t\t\t\t<option value=\"harassment\">Harcèlement</option>
  4721. \t\t\t\t\t\t\t\t<option value=\"other\">Autre</option>
  4722. \t\t\t\t\t\t\t</select>
  4723. \t\t\t\t\t\t</div>
  4724. \t\t\t\t\t\t<div class=\"mb-3\">
  4725. \t\t\t\t\t\t\t<label for=\"reportDescription\" class=\"form-label\">Description détaillée *</label>
  4726. \t\t\t\t\t\t\t<textarea class=\"form-control\" id=\"reportDescription\" rows=\"4\" placeholder=\"Décrivez le problème rencontré...\" required></textarea>
  4727. \t\t\t\t\t\t</div>
  4728. \t\t\t\t\t\t<div class=\"mb-3\">
  4729. \t\t\t\t\t\t\t<label for=\"reportEmail\" class=\"form-label\">Votre email (optionnel)</label>
  4730. \t\t\t\t\t\t\t<input type=\"email\" class=\"form-control\" id=\"reportEmail\" placeholder=\"votre@email.com\">
  4731. \t\t\t\t\t\t\t<div class=\"form-text\">Nous pourrons vous contacter pour plus d'informations</div>
  4732. \t\t\t\t\t\t</div>
  4733. \t\t\t\t\t</form>
  4734. \t\t\t\t</div>
  4735. \t\t\t\t<div class=\"modal-footer\">
  4736. \t\t\t\t\t<button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Annuler</button>
  4737. \t\t\t\t\t<button type=\"button\" class=\"btn btn-danger\" onclick=\"submitReport()\">
  4738. \t\t\t\t\t\t<i class=\"lnr lnr-flag  me-2\"></i>Envoyer le signalement
  4739. \t\t\t\t\t</button>
  4740. \t\t\t\t</div>
  4741. \t\t\t</div>
  4742. \t\t</div>
  4743. \t</div>
  4744. \t<!-- Section des avis -->
  4745. \t<div class=\"container my-5\">
  4746. \t\t<div class=\"row\">
  4747. \t\t\t<div class=\"col-12\">
  4748. \t\t\t\t<div class=\"section-title text-center\">
  4749. \t\t\t\t\t<h2>Avis clients</h2>
  4750. \t\t\t\t\t<p>Découvrez ce que pensent nos clients de cette boutique</p>
  4751. \t\t\t\t</div>
  4752. \t\t\t</div>
  4753. \t\t</div>
  4754. \t\t<div
  4755. \t\t\tclass=\"row\">
  4756. \t\t\t<!-- Statistiques des avis -->
  4757. \t\t\t<div class=\"col-md-4\">
  4758. \t\t\t\t<div class=\"review-stats-card\">
  4759. \t\t\t\t\t<div class=\"stats-header\">
  4760. \t\t\t\t\t\t<div class=\"overall-rating\">
  4761. \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>
  4762. \t\t\t\t\t\t\t<div class=\"stars\">
  4763. \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 %}
  4764. \t\t\t\t\t\t\t\t{% for i in 1..5 %}
  4765. \t\t\t\t\t\t\t\t\t{% if i <= avgRating %}
  4766. \t\t\t\t\t\t\t\t\t\t★
  4767. \t\t\t\t\t\t\t\t\t{% elseif i - avgRating < 1 %}
  4768. \t\t\t\t\t\t\t\t\t\t☆
  4769. \t\t\t\t\t\t\t\t\t{% else %}
  4770. \t\t\t\t\t\t\t\t\t\t☆
  4771. \t\t\t\t\t\t\t\t\t{% endif %}
  4772. \t\t\t\t\t\t\t\t{% endfor %}
  4773. \t\t\t\t\t\t\t</div>
  4774. \t\t\t\t\t\t</div>
  4775. \t\t\t\t\t\t<div class=\"rating-summary\">
  4776. \t\t\t\t\t\t\t<p class=\"mb-1\">{{ shop.reviews|length }}
  4777. \t\t\t\t\t\t\t\tavis</p>
  4778. \t\t\t\t\t\t\t<p class=\"text-muted small\">Basé sur
  4779. \t\t\t\t\t\t\t\t{{ shop.reviews|filter(r => r.isVerified)|length }}
  4780. \t\t\t\t\t\t\t\tavis vérifiés</p>
  4781. \t\t\t\t\t\t</div>
  4782. \t\t\t\t\t</div>
  4783. \t\t\t\t\t<div class=\"rating-breakdown\">
  4784. \t\t\t\t\t\t{% for rating in 5..1 %}
  4785. \t\t\t\t\t\t\t{% set count = shop.reviews|filter(r => r.rating == rating)|length %}
  4786. \t\t\t\t\t\t\t{% set percentage = shop.reviews|length > 0 ? (count / shop.reviews|length * 100) : 0 %}
  4787. \t\t\t\t\t\t\t<div class=\"rating-bar\">
  4788. \t\t\t\t\t\t\t\t<span class=\"rating-label\">{{ rating }}★</span>
  4789. \t\t\t\t\t\t\t\t<div class=\"rating-progress\">
  4790. \t\t\t\t\t\t\t\t\t<div class=\"rating-fill\" style=\"width: {{ percentage }}%\"></div>
  4791. \t\t\t\t\t\t\t\t</div>
  4792. \t\t\t\t\t\t\t\t<span class=\"rating-count\">{{ count }}</span>
  4793. \t\t\t\t\t\t\t</div>
  4794. \t\t\t\t\t\t{% endfor %}
  4795. \t\t\t\t\t</div>
  4796. \t\t\t\t</div>
  4797. \t\t\t</div>
  4798. \t\t\t<!-- Aperçu des avis -->
  4799. \t\t\t<div class=\"col-md-8\">
  4800. \t\t\t\t<div class=\"reviews-preview\">
  4801. \t\t\t\t\t{% if shop.reviews|length > 0 %}
  4802. \t\t\t\t\t\t{% for review in shop.reviews|slice(0, 3) %}
  4803. \t\t\t\t\t\t\t<div class=\"review-card-preview\">
  4804. \t\t\t\t\t\t\t\t<div class=\"review-header\">
  4805. \t\t\t\t\t\t\t\t\t<div class=\"review-user\">
  4806. \t\t\t\t\t\t\t\t\t\t<div class=\"user-avatar\">
  4807. \t\t\t\t\t\t\t\t\t\t\t{{ review.user.firstName|first|upper|default(review.user.email|first|upper) }}
  4808. \t\t\t\t\t\t\t\t\t\t</div>
  4809. \t\t\t\t\t\t\t\t\t\t<div class=\"user-info\">
  4810. \t\t\t\t\t\t\t\t\t\t\t<h6>{{ review.user.firstName|default('Utilisateur') }}</h6>
  4811. \t\t\t\t\t\t\t\t\t\t\t<small>{{ review.getTimeAgo() }}</small>
  4812. \t\t\t\t\t\t\t\t\t\t</div>
  4813. \t\t\t\t\t\t\t\t\t</div>
  4814. \t\t\t\t\t\t\t\t\t<div class=\"review-rating\">
  4815. \t\t\t\t\t\t\t\t\t\t<div class=\"stars\">{{ review.getRatingStars() }}</div>
  4816. \t\t\t\t\t\t\t\t\t\t{% if review.isVerified %}
  4817. \t\t\t\t\t\t\t\t\t\t\t<span class=\"verified-badge\">✓</span>
  4818. \t\t\t\t\t\t\t\t\t\t{% endif %}
  4819. \t\t\t\t\t\t\t\t\t</div>
  4820. \t\t\t\t\t\t\t\t</div>
  4821. \t\t\t\t\t\t\t\t<div class=\"review-content\">
  4822. \t\t\t\t\t\t\t\t\t{{ review.comment|slice(0, 150) }}
  4823. \t\t\t\t\t\t\t\t\t{% if review.comment|length > 150 %}...
  4824. \t\t\t\t\t\t\t\t\t{% endif %}
  4825. \t\t\t\t\t\t\t\t</div>
  4826. \t\t\t\t\t\t\t</div>
  4827. \t\t\t\t\t\t{% endfor %}
  4828. \t\t\t\t\t\t<div class=\"text-center mt-3\">
  4829. \t\t\t\t\t\t\t<a href=\"{{ path('shop_reviews_index', {'slug': shop.slug}) }}\" class=\"btn btn-outline-primary\">
  4830. \t\t\t\t\t\t\t\tVoir tous les avis ({{ shop.reviews|length }})
  4831. \t\t\t\t\t\t\t</a>
  4832. \t\t\t\t\t\t</div>
  4833. \t\t\t\t\t{% else %}
  4834. \t\t\t\t\t\t<div class=\"empty-reviews\">
  4835. \t\t\t\t\t\t\t<i class=\"lnr lnr-star\"></i>
  4836. \t\t\t\t\t\t\t<h4>Aucun avis pour le moment</h4>
  4837. \t\t\t\t\t\t\t<p>Soyez le premier à laisser un avis sur cette boutique !</p>
  4838. \t\t\t\t\t\t\t{% if app.user %}
  4839. \t\t\t\t\t\t\t\t<a href=\"{{ path('shop_reviews_new', {'slug': shop.slug}) }}\" class=\"btn btn-primary\">
  4840. \t\t\t\t\t\t\t\t\t<i class=\"lnr lnraccount_recently_viewed-star\"></i>
  4841. \t\t\t\t\t\t\t\t\tLaisser un avis
  4842. \t\t\t\t\t\t\t\t</a>
  4843. \t\t\t\t\t\t\t{% endif %}
  4844. \t\t\t\t\t\t</div>
  4845. \t\t\t\t\t{% endif %}
  4846. \t\t\t\t</div>
  4847. \t\t\t</div>
  4848. \t\t</div>
  4849. \t</div>
  4850. {% endblock %}
  4851. {% block javascripts %}
  4852. \t<script>
  4853. \t\tdocument.addEventListener('DOMContentLoaded', function () { // Initialisation du carrousel
  4854. initCarousel();
  4855. // Gestion des onglets eBay-style avec Bootstrap
  4856. const tabLinks = document.querySelectorAll('.shop-tab-link');
  4857. const tabContents = document.querySelectorAll('.shop-tab-content');
  4858. tabLinks.forEach(link => {
  4859. link.addEventListener('click', function (e) {
  4860. e.preventDefault();
  4861. // Retirer la classe active de tous les liens et contenus
  4862. tabLinks.forEach(l => {
  4863. l.classList.remove('active');
  4864. l.setAttribute('aria-selected', 'false');
  4865. });
  4866. tabContents.forEach(c => c.classList.remove('active'));
  4867. // Ajouter la classe active au lien cliqué
  4868. this.classList.add('active');
  4869. this.setAttribute('aria-selected', 'true');
  4870. // Afficher le contenu correspondant
  4871. const targetTab = this.dataset.tab;
  4872. const targetContent = document.getElementById (`shop-\${targetTab}`);
  4873. if (targetContent) {
  4874. targetContent.classList.add('active');
  4875. }
  4876. });
  4877. });
  4878. // Gestion du système de follow
  4879. const followButton = document.getElementById('follow-button');
  4880. if (followButton) {
  4881. followButton.addEventListener('click', function () {
  4882. const shopId = this.dataset.shopId;
  4883. const isFollowing = this.dataset.following === 'true';
  4884. // Désactiver le bouton pendant la requête
  4885. this.disabled = true;
  4886. const originalText = this.innerHTML;
  4887. this.innerHTML = '<i class=\"lnr lnr-spinner\"></i> Loading...';
  4888. // Envoyer la requête
  4889. fetch(\"{{ path('ui_api_shop_toggle_follow', {id: '__SHOP_ID__'}) }}\".replace('__SHOP_ID__', shopId), {
  4890. method: 'POST',
  4891. headers: {
  4892. 'Content-Type': 'application/json',
  4893. 'X-Requested-With': 'XMLHttpRequest'
  4894. }
  4895. }).then(response => response.json()).then(data => {
  4896. if (data.success) { // Mettre à jour l'interface
  4897. this.dataset.following = data.isFollowing;
  4898. if (data.isFollowing) {
  4899. this.classList.add('following');
  4900. this.innerHTML = '<i class=\"lnr lnr-checkmark\"></i> Suivi';
  4901. } else {
  4902. this.classList.remove('following');
  4903. this.innerHTML = '<i class=\"lnr lnr-plus\"></i> Suivre';
  4904. }
  4905. // Mettre à jour le compteur de followers
  4906. if (followersCount && data.followersCount !== undefined) {
  4907. followersCount.textContent = data.followersCount.toLocaleString();
  4908. }
  4909. // Afficher un message de confirmation
  4910. showNotification(data.message, 'success');
  4911. } else {
  4912. showNotification(data.message, 'error');
  4913. }
  4914. }).catch(error => {
  4915. console.error('Erreur:', error);
  4916. showNotification('Une erreur est survenue', 'error');
  4917. }). finally(() => {
  4918. this.disabled = false;
  4919. });
  4920. });
  4921. }
  4922. // Fonction pour afficher les notifications
  4923. function showNotification(message, type = 'info') { // Créer l'élément de notification
  4924. const notification = document.createElement('div');
  4925. notification.className = `alert alert-\${
  4926. type === 'success' ? 'success' : type === 'error' ? 'danger' : 'info'
  4927. } alert-dismissible fade show position-fixed`;
  4928. notification.style.cssText = 'top: 20px; right: 20px; z-index: 9999; min-width: 300px;';
  4929. notification.innerHTML = `
  4930.             \${message}
  4931.             <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"alert\"></button>
  4932.         `;
  4933. document.body.appendChild(notification);
  4934. // Supprimer automatiquement après 5 secondes
  4935. setTimeout(() => {
  4936. if (notification.parentNode) {
  4937. notification.remove();
  4938. }
  4939. }, 5000);
  4940. }
  4941. // Fonctions pour les actions de boutique
  4942. window.shareShop = function () { // Vérifier si l'API Web Share est disponible et si on est sur mobile
  4943. if (navigator.share && /Android|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) {
  4944. navigator.share({title: '{{ shop.name }}- Boutique sur MaketOu', text: 'Découvrez cette boutique et ses produits sur MaketOu', url: window.location.href}).then(() => {
  4945. console.log('Partage réussi');
  4946. showNotification('Lien partagé avec succès !', 'success');
  4947. }).catch((error) => {
  4948. console.log('Erreur lors du partage:', error);
  4949. // Fallback vers la copie
  4950. copyToClipboard();
  4951. });
  4952. } else { // Sur desktop ou si Web Share n'est pas disponible, copier directement
  4953. copyToClipboard();
  4954. }
  4955. };
  4956. // Fonction pour copier le lien dans le presse-papiers
  4957. function copyToClipboard() {
  4958. const shopUrl = window.location.href;
  4959. const shopName = '{{ shop.name }}';
  4960. const shareText = `Découvrez la boutique \"\${shopName}\" sur MaketOu : \${shopUrl}`;
  4961. // Utiliser directement le fallback pour éviter les conflits
  4962. fallbackCopyToClipboard(shareText);
  4963. }
  4964. // Fallback pour copier le texte
  4965. function fallbackCopyToClipboard(text) {
  4966. const textArea = document.createElement('textarea');
  4967. textArea.value = text;
  4968. textArea.style.position = 'fixed';
  4969. textArea.style.left = '-999999px';
  4970. textArea.style.top = '-999999px';
  4971. document.body.appendChild(textArea);
  4972. textArea.focus();
  4973. textArea.select();
  4974. try {
  4975. document.execCommand('copy');
  4976. showNotification('Lien copié dans le presse-papiers !', 'success');
  4977. } catch (err) {
  4978. console.error('Impossible de copier:', err);
  4979. showNotification('Impossible de copier le lien', 'error');
  4980. }
  4981. document.body.removeChild(textArea);
  4982. }
  4983. window.contactShop = function () { // Ouvrir un modal de signalement
  4984. openReportModal();
  4985. };
  4986. window.saveShop = function () { // Sauvegarder la boutique dans les favoris
  4987. showNotification('Boutique sauvegardée dans vos favoris', 'success');
  4988. };
  4989. // Fonction pour ouvrir le modal de signalement
  4990. window.openReportModal = function () {
  4991. const modal = new bootstrap.Modal(document.getElementById('reportModal'));
  4992. modal.show();
  4993. };
  4994. // Fonction pour soumettre le signalement
  4995. window.submitReport = function () {
  4996. const reason = document.getElementById('reportReason').value;
  4997. const description = document.getElementById('reportDescription').value;
  4998. const email = document.getElementById('reportEmail').value;
  4999. if (! reason || ! description) {
  5000. showNotification('Veuillez remplir tous les champs obligatoires', 'error');
  5001. return;
  5002. }
  5003. // Simuler l'envoi du signalement
  5004. const reportData = {
  5005. shopId: {{ shop.id }},
  5006. reason: reason,
  5007. description: description,
  5008. email: email,
  5009. reportedAt: new Date().toISOString()
  5010. };
  5011. console.log('Signalement envoyé:', reportData);
  5012. // Fermer le modal
  5013. const modal = bootstrap.Modal.getInstance(document.getElementById('reportModal'));
  5014. modal.hide();
  5015. // Réinitialiser le formulaire
  5016. document.getElementById('reportForm').reset();
  5017. // Afficher la confirmation
  5018. showNotification('Signalement envoyé avec succès. Nous examinerons votre demande.', 'success');
  5019. };
  5020. // Gestion du carrousel eBay-style
  5021. let currentSlide = 0;
  5022. let carouselInterval;
  5023. let isPaused = false;
  5024. let slides = [];
  5025. let indicators = [];
  5026. function initCarousel() {
  5027.     // Réinitialiser les variables
  5028.     currentSlide = 0;
  5029.     isPaused = false;
  5030.     
  5031.     // Récupérer les slides et indicateurs à nouveau
  5032.     const carouselContainer = document.querySelector('.shop-carousel-ebay');
  5033.     if (!carouselContainer) {
  5034.         console.log('Carousel container not found');
  5035.         return;
  5036.     }
  5037.     
  5038.     const allSlides = carouselContainer.querySelectorAll('.carousel-slide');
  5039.     const allIndicators = carouselContainer.querySelectorAll('.carousel-indicator-ebay');
  5040.     
  5041.     if (allSlides.length === 0) {
  5042.         // Masquer les contrôles si aucune image
  5043.         const controls = carouselContainer.querySelector('.carousel-controls-ebay');
  5044.         const indicators = carouselContainer.querySelector('.carousel-indicators-ebay');
  5045.         if (controls) controls.style.display = 'none';
  5046.         if (indicators) indicators.style.display = 'none';
  5047.         return;
  5048.     }
  5049.     
  5050.     // Si une seule image, masquer les contrôles
  5051.     if (allSlides.length <= 1) {
  5052.         const controls = carouselContainer.querySelector('.carousel-controls-ebay');
  5053.         const indicators = carouselContainer.querySelector('.carousel-indicators-ebay');
  5054.         if (controls) controls.style.display = 'none';
  5055.         if (indicators) indicators.style.display = 'none';
  5056.         // S'assurer que la slide unique est active
  5057.         allSlides[0].classList.add('active');
  5058.         return;
  5059.     }
  5060.     
  5061.     // Afficher les contrôles si plusieurs images
  5062.     const controls = carouselContainer.querySelector('.carousel-controls-ebay');
  5063.     const indicators = carouselContainer.querySelector('.carousel-indicators-ebay');
  5064.     if (controls) controls.style.display = 'flex';
  5065.     if (indicators) indicators.style.display = 'flex';
  5066.     
  5067.     // Mettre à jour les références globales
  5068.     slides = allSlides;
  5069.     indicators = allIndicators;
  5070.     
  5071.     // S'assurer que la première slide est active
  5072.     updateCarousel();
  5073.     
  5074.     // Démarrer le carrousel automatique
  5075.     startCarousel();
  5076.     
  5077.     // Gérer les événements de survol
  5078.     carouselContainer.addEventListener('mouseenter', pauseCarousel);
  5079.     carouselContainer.addEventListener('mouseleave', () => {
  5080.             if (!isPaused) startCarousel();
  5081.         });
  5082. }
  5083. function startCarousel() {
  5084.     // Nettoyer l'intervalle existant
  5085.     clearInterval(carouselInterval);
  5086.     
  5087.     if (slides.length <= 1) return;
  5088.     
  5089.     carouselInterval = setInterval(() => {
  5090.         if (!isPaused && slides.length > 0) {
  5091.             nextSlide();
  5092.         }
  5093.     }, 4000); // Change toutes les 4 secondes
  5094. }
  5095. function pauseCarousel() {
  5096. isPaused = true;
  5097. clearInterval(carouselInterval);
  5098. const pauseIcon = document.getElementById('pauseIcon');
  5099. if (pauseIcon) {
  5100.     pauseIcon.className = 'lnr lnr-play';
  5101. }
  5102. }
  5103. function resumeCarousel() {
  5104. isPaused = false;
  5105. const pauseIcon = document.getElementById('pauseIcon');
  5106. if (pauseIcon) {
  5107.     pauseIcon.className = 'lnr lnr-pause';
  5108. }
  5109. startCarousel();
  5110. }
  5111. function toggleCarousel() {
  5112. if (isPaused) {
  5113. resumeCarousel();
  5114. } else {
  5115. pauseCarousel();
  5116. }
  5117. }
  5118. function nextSlide() {
  5119. if (slides.length === 0) return;
  5120. currentSlide = (currentSlide + 1) % slides.length;
  5121. updateCarousel();
  5122. }
  5123. function previousSlide() {
  5124. if (slides.length === 0) return;
  5125. currentSlide = (currentSlide - 1 + slides.length) % slides.length;
  5126. updateCarousel();
  5127. }
  5128. function goToSlide(index) {
  5129. if (slides.length === 0) return;
  5130. if (index < 0 || index >= slides.length) return;
  5131. currentSlide = index;
  5132. updateCarousel();
  5133. }
  5134. function updateCarousel() {
  5135.     if (slides.length === 0 || indicators.length === 0) return;
  5136.     
  5137.     // Masquer toutes les slides
  5138.     slides.forEach(slide => slide.classList.remove('active'));
  5139.     indicators.forEach(indicator => indicator.classList.remove('active'));
  5140.     
  5141.     // Afficher la slide active
  5142.     if (slides[currentSlide]) {
  5143.         slides[currentSlide].classList.add('active');
  5144.     }
  5145.     if (indicators[currentSlide]) {
  5146.         indicators[currentSlide].classList.add('active');
  5147.     }
  5148. }
  5149. // Fonctions globales pour les boutons
  5150. window.nextSlide = nextSlide;
  5151. window.previousSlide = previousSlide;
  5152. window.goToSlide = goToSlide;
  5153. window.toggleCarousel = toggleCarousel;
  5154. // Gestion du tri des produits via API Symfony
  5155. console.log('=== INITIALIZING PRODUCT SORTING ===');
  5156. console.log('Shop ID:', {{ shop.id }});
  5157. // Fonction de tri via AJAX - RENDUE GLOBALE
  5158. window.sortProducts = function (sortValue) {
  5159. console.log('=== SORT PRODUCTS CALLED ===');
  5160. console.log('Sort value:', sortValue);
  5161. const productsContainer = document.getElementById('products-container');
  5162. console.log('Products container:', productsContainer);
  5163. if (! productsContainer) {
  5164. console.error('Products container not found!');
  5165. return;
  5166. }
  5167. if (! sortValue) {
  5168. console.log('Resetting to original order');
  5169. // Recharger la page pour revenir à l'ordre original
  5170. window.location.reload();
  5171. return;
  5172. }
  5173. console.log('Showing loading spinner...');
  5174. // Afficher un indicateur de chargement
  5175. 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>';
  5176. // Récupérer l'ID de la boutique
  5177. const shopId = {{ shop.id }};
  5178. console.log('Shop ID for request:', shopId);
  5179. const url = \"{{ path('ui_api_shop_products_sort', {id: '__SHOP_ID__'}) }}\".replace('__SHOP_ID__', shopId);
  5180. console.log('Request URL:', url);
  5181. const requestData = {
  5182. sortBy: sortValue
  5183. };
  5184. console.log('Request data:', requestData);
  5185. // Envoyer la requête AJAX
  5186. console.log('Sending AJAX request...');
  5187. fetch(url, {
  5188. method: 'POST',
  5189. headers: {
  5190. 'Content-Type': 'application/json',
  5191. 'X-Requested-With': 'XMLHttpRequest'
  5192. },
  5193. body: JSON.stringify(requestData)
  5194. }).then(response => {
  5195. console.log('Response received:', response);
  5196. console.log('Response status:', response.status);
  5197. return response.json();
  5198. }).then(data => {
  5199. console.log('Sort response data:', data);
  5200. if (data.success) {
  5201. console.log('Sort successful, updating content...');
  5202. // Mettre à jour le contenu avec le HTML retourné
  5203. productsContainer.innerHTML = data.html;
  5204. // Mettre à jour le compteur de produits
  5205. const productCount = document.querySelector('.product-count');
  5206. if (productCount) {
  5207. productCount.textContent = data.count;
  5208. }
  5209. console.log('Products sorted successfully!');
  5210. } else {
  5211. console.error('Sort failed:', data.message);
  5212. showNotification('Erreur lors du tri: ' + data.message, 'error');
  5213. // Recharger la page en cas d'erreur
  5214. window.location.reload();
  5215. }
  5216. }).catch(error => {
  5217. console.error('Sort request failed:', error);
  5218. showNotification('Erreur de connexion lors du tri', 'error');
  5219. // Recharger la page en cas d'erreur
  5220. window.location.reload();
  5221. });
  5222. };
  5223. // Attendre que le DOM soit chargé
  5224. console.log('Setting up event listeners...');
  5225. setTimeout(() => {
  5226. const sortSelect = document.getElementById('product-sort');
  5227. console.log('Sort select element:', sortSelect);
  5228. if (sortSelect) {
  5229. console.log('Adding change event listener...');
  5230. // Ecouter l'événement change avec jQuery (nécessaire à cause de nice-select)
  5231. if (typeof \$ !== 'undefined') {
  5232.     \$('#product-sort').on('change', function() {
  5233.         console.log('=== SELECT CHANGE EVENT TRIGGERED (jQuery) ===');
  5234.         if(window.sortProducts) window.sortProducts(this.value);
  5235.     });
  5236. }
  5237. sortSelect.addEventListener('change', function () {
  5238. console.log('=== SELECT CHANGE EVENT TRIGGERED ===');
  5239. console.log('Selected value:', this.value);
  5240. console.log('Calling sortProducts...');
  5241. window.sortProducts(this.value);
  5242. });
  5243. console.log('Event listener added successfully');
  5244. } else {
  5245. console.error('Sort select element not found!');
  5246. console.log('Available elements with ID containing \"sort\":', document.querySelectorAll('[id*=\"sort\"]'));
  5247. console.log('Available elements with class containing \"form-select\":', document.querySelectorAll('.form-select'));
  5248. }
  5249. }, 100);
  5250. // Gestion du bouton \"Suivre\"
  5251. const followBtn = document.querySelector('.btn-shop');
  5252. if (followBtn) {
  5253. followBtn.addEventListener('click', function () {
  5254. if (this.innerHTML.includes('Suivre')) {
  5255. this.innerHTML = '<i class=\"lnr lnr-heart me-1\"></i> Suivi';
  5256. this.classList.remove('btn-shop');
  5257. this.classList.add('btn-success');
  5258. } else {
  5259. this.innerHTML = '<i class=\"lnr lnr-heart me-1\"></i> Suivre';
  5260. this.classList.remove('btn-success');
  5261. this.classList.add('btn-shop');
  5262. }
  5263. });
  5264. }
  5265. });
  5266. \t</script>
  5267. {% endblock %}
  5268. ""home/shop.html.twig""/home/u540977899/domains/maketou-ht.com/public_html/templates/home/shop.html.twig");
  5269.     }
  5270. }