/* ══════════════════════════════════════════════════════════
   CATALOGUE — SheGlamour
   Fonts :
   <link href="https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,300;0,400;0,600;1,300;1,400&family=Jost:wght@300;400;500;600&display=swap" rel="stylesheet">
   ══════════════════════════════════════════════════════════ */

:root {
  --bordeaux:   #440B19;
  --bordeaux-s: #5c1022;
  --bordeaux-l: #6e1a2e;
  --bordeaux-xl:#8a2a3e;

  --bg:         #F5F1EE;
  --bg-warm:    #F5F1EE;
  --bg-deep:    #F5F1EE;

  --border:     rgba(68, 11, 25, 0.15);
  --border-s:   rgba(68, 11, 25, 0.10);

  --text:       #440B19;
  --muted:      #6e1a2e;

  --dark:       #440B19;
  --dark-80:    rgba(68, 11, 25, .80);
  --dark-60:    rgba(68, 11, 25, .60);
  --dark-40:    rgba(68, 11, 25, .40);
  --dark-20:    rgba(68, 11, 25, .20);
  --dark-12:    rgba(68, 11, 25, .12);
  --dark-06:    rgba(68, 11, 25, .06);

  --serif:      'Cormorant Garamond', Georgia, serif;
  --sans:       'Jost', system-ui, sans-serif;
  --ease:       cubic-bezier(0.25, 0.46, 0.45, 0.94);
  --ease-ovr:   cubic-bezier(.22, .68, 0, 1.2);
  --ease-back:  cubic-bezier(0.34, 1.56, 0.64, 1);
}


/* ══ RESET & BASE ═══════════════════════════════════════════ */

*, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; }

body {
  font-family: var(--sans);
  background: #F5F1EE !important;
  color: var(--text);
  line-height: 1.6;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  display: flex;
  flex-direction: column;
  min-height: 100vh;
}

img    { display: block; max-width: 100%; }
a      { text-decoration: none; color: inherit; }
button { font-family: inherit; cursor: pointer; }


/* ══ FONT AWESOME ════════════════════════════════════════════ */

.fa-solid   { font-family: "Font Awesome 6 Free"   !important; font-weight: 900 !important; }
.fa-regular { font-family: "Font Awesome 6 Free"   !important; font-weight: 400 !important; }
.fa-brands  { font-family: "Font Awesome 6 Brands" !important; }

.icons { display: flex; gap: 16px; align-items: center; }
.icons a, .icons button { display: flex; align-items: center; justify-content: center; color: var(--bordeaux); background: none; border: none; font-size: 1.05rem; transition: color 0.2s; }
.icons a:hover, .icons button:hover { color: var(--bordeaux-l); }


/* ══ HEADER ══════════════════════════════════════════════════ */

.header {
  position: fixed; top: 0; width: 100%; height: 72px; padding: 0 5%;
  background: #F5F1EE !important; backdrop-filter: none !important;
  -webkit-backdrop-filter: none !important; border-bottom: 1px solid transparent;
  z-index: 1000; transition: border-color 0.35s ease, box-shadow 0.35s ease;
}
.header.scrolled {
  background: #F5F1EE !important; border-color: var(--border-s) !important;
  box-shadow: 0 1px 0 var(--border-s), 0 4px 24px var(--dark-06);
}
.header #headerLogo, .header .logo img, .header .logo-img {
  content: url('/images/logofib.png') !important; height: 70px !important;
  width: auto !important; object-fit: contain !important;
  opacity: 1 !important; visibility: visible !important;
}
.mobile-logo img {
  height: 150px; width: auto; display: block; object-fit: contain;
  image-rendering: -webkit-optimize-contrast; image-rendering: crisp-edges;
  backface-visibility: hidden; transform: translateZ(0);
}
.header .navbar-desktop a, .header .navbar a {
  color: var(--bordeaux) !important; font-family: var(--sans);
  font-size: .72rem; font-weight: 400; letter-spacing: .18em;
  text-transform: uppercase; position: relative; transition: color 0.2s;
}
.header .navbar-desktop a::after, .header .navbar a::after {
  content: ''; position: absolute; bottom: -3px; left: 0; width: 0; height: 1px;
  background: var(--bordeaux) !important; transition: width 0.3s var(--ease);
}
.header .navbar-desktop a:hover::after, .header .navbar a:hover::after { width: 100%; }
.header .icon-btn, .header .icons a, .header .icons button, .header #openSearch { color: var(--bordeaux) !important; }
.header .icon-btn:hover, .header .icons a:hover, .header #openSearch:hover { color: var(--bordeaux-l) !important; opacity: 1 !important; }
.header .menu-toggle span { background: var(--bordeaux) !important; }
.mobile-bottom-bar { background: #F5F1EE !important; backdrop-filter: none !important; -webkit-backdrop-filter: none !important; border-top: 1px solid var(--border-s); }
.search-overlay { background: rgba(245, 241, 238, 0.97) !important; }
.search-product, .search-product img { background: var(--bg-warm) !important; }


/* ══ LAYOUT PRINCIPAL ════════════════════════════════════════ */

.page-layout {
  display: flex; align-items: flex-start;
  margin-top: 90px; flex: 1; min-height: 0;
}


/* ══ SIDEBAR FILTRES ═════════════════════════════════════════ */

.filter-sidebar {
  width: 270px; flex-shrink: 0; background: transparent;
  border-right: 1px solid var(--border-s); padding: 44px 28px 60px;
  position: sticky; top: 90px; height: calc(100vh - 90px); overflow-y: auto;
  scrollbar-width: thin; scrollbar-color: var(--border) transparent;
}
.filter-sidebar::-webkit-scrollbar { width: 3px; }
.filter-sidebar::-webkit-scrollbar-track { background: transparent; }
.filter-sidebar::-webkit-scrollbar-thumb { background: var(--border); border-radius: 0; }
.filter-sidebar > h3 {
  font-family: var(--sans); font-size: 8.5px; font-weight: 600;
  letter-spacing: 0.38em; text-transform: uppercase; color: var(--muted);
  margin-bottom: 32px; padding-bottom: 18px; border-bottom: 1px solid var(--border-s); position: relative;
}
.filter-sidebar > h3::after { content: ''; position: absolute; bottom: -1px; left: 0; width: 24px; height: 1px; background: var(--bordeaux); }
.filter-group { margin-bottom: 0; padding: 20px 0; border-bottom: 1px solid var(--border-s); }
.filter-group:last-child { border-bottom: none; }
.filter-group > label, .filter-group > span:not(.slider) {
  font-family: var(--sans); font-size: 8.5px; font-weight: 600;
  text-transform: uppercase; letter-spacing: 0.32em; color: var(--muted); display: block; margin-bottom: 12px;
}
.filter-group select {
  width: 100%; padding: 10px 32px 10px 14px; border: 1px solid var(--border-s);
  background: var(--bg-warm) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M0 0l5 6 5-6z' fill='%23440B19'/%3E%3C/svg%3E") no-repeat right 14px center;
  background-size: 7px; appearance: none; -webkit-appearance: none;
  font-family: var(--sans); font-size: 11px; font-weight: 400;
  letter-spacing: 0.06em; color: var(--bordeaux); cursor: pointer; border-radius: 0; outline: none;
  transition: border-color 0.25s var(--ease), box-shadow 0.25s var(--ease);
}
.filter-group select:hover { border-color: var(--bordeaux); }
.filter-group select:focus { border-color: var(--bordeaux); box-shadow: 0 0 0 2px rgba(68,11,25,.10); }


/* ══ TOGGLE ══════════════════════════════════════════════════ */

.toggle-group { display: flex; align-items: center; justify-content: space-between; }
.toggle-group > span { font-family: var(--sans); font-size: 8.5px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.32em; color: var(--muted); }
.switch { position: relative; display: inline-block; width: 40px; height: 20px; }
.switch input { opacity: 0; width: 0; height: 0; }
.slider {
  position: absolute; cursor: pointer; inset: 0;
  background: rgba(68, 11, 25, 0.12); border: 1px solid var(--border);
  border-radius: 0; transition: 0.35s var(--ease);
}
.slider::before {
  content: ''; position: absolute; width: 14px; height: 14px; left: 2px; bottom: 2px;
  background: var(--bordeaux-l); border-radius: 0; transition: 0.35s var(--ease-back);
}
input:checked + .slider { background: var(--bordeaux); border-color: var(--bordeaux); }
input:checked + .slider::before { transform: translateX(20px); background: #F5F1EE; }


/* ══ BEST SELLERS ════════════════════════════════════════════ */

.best-sellers { border-bottom: none !important; }
.best-sellers h4 { font-family: var(--sans); font-size: 8.5px; font-weight: 600; letter-spacing: 0.32em; text-transform: uppercase; color: var(--muted); margin-bottom: 16px; }
.best-sellers ul { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 3px; }
.best-sellers li { display: flex; align-items: center; }
.best-sellers li a { display: flex; gap: 14px; align-items: center; padding: 10px 12px; width: 100%; border: 1px solid transparent; background: var(--bg-warm); transition: all 0.28s var(--ease); }
.best-sellers li a:hover { border-color: var(--border-s); background: var(--bg-deep); box-shadow: 0 4px 16px var(--dark-12); transform: translateX(3px); }
.best-sellers li img { width: 44px; height: 44px; object-fit: cover; border: 1px solid var(--border-s); flex-shrink: 0; transition: transform 0.3s var(--ease); }
.best-sellers li a:hover img { transform: scale(1.08); }
.best-seller-info { display: flex; flex-direction: column; gap: 3px; font-family: var(--serif); }
.best-seller-info .name { font-size: 11px; font-weight: 400; font-style: italic; color: var(--bordeaux); letter-spacing: 0.03em; line-height: 1.4; }
.best-seller-info .price { font-size: 12px; font-weight: 600; font-style: normal; color: var(--bordeaux-l); letter-spacing: 0.04em; }


/* ══ SECTION PRODUITS ════════════════════════════════════════ */

.products-section { flex: 1; padding: 44px 56px 80px; min-width: 0; background: transparent; }
.products-section h1 {
  font-family: var(--serif); font-size: clamp(30px, 4vw, 46px);
  font-weight: 600; font-style: italic; letter-spacing: 0.06em;
  text-transform: uppercase; color: var(--bordeaux); margin-bottom: 8px; line-height: 1.05;
}


/* ══ BREADCRUMB ══════════════════════════════════════════════ */

.breadcrumb {
  font-family: var(--sans); font-size: 9.5px; letter-spacing: 0.2em;
  color: var(--muted); margin-bottom: 28px; text-transform: uppercase;
  display: flex; flex-wrap: wrap; gap: 8px; align-items: center;
}
.breadcrumb a { color: var(--dark-60); transition: color 0.2s; }
.breadcrumb a:hover { color: var(--bordeaux); }
.breadcrumb .separator { color: var(--dark-20); }
.breadcrumb .current { font-weight: 500; color: var(--dark-80); }


/* ══ CONTRÔLES VUE ═══════════════════════════════════════════ */

.filter-controls { display: flex; align-items: center; justify-content: flex-end; margin-bottom: 28px; flex-wrap: wrap; gap: 12px; }
.view-toggle { display: flex; align-items: center; gap: 6px; }
.view-btn {
  width: 30px; height: 30px; border: 1px solid var(--border-s); background: var(--bg-warm);
  display: flex; flex-wrap: wrap; align-content: center; justify-content: center;
  gap: 2.5px; cursor: pointer; padding: 4px; border-radius: 0;
  transition: background 0.25s var(--ease), border-color 0.25s;
}
.view-btn.active, .view-btn:hover { background: var(--bordeaux); border-color: var(--bordeaux); }
.view-btn span { display: block; background: var(--bordeaux); border-radius: 0; transition: background 0.25s var(--ease); }
.view-btn[data-view="grid"] span { width: 8px; height: 8px; }
.view-btn[data-view="list"] span { width: 16px; height: 2px; }
.view-btn.active span, .view-btn:hover span { background: #F5F1EE; }


/* ══ GRILLE ══════════════════════════════════════════════════ */

.products-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; }


/* ══ CARTE PRODUIT ═══════════════════════════════════════════ */

.product-card-link { display: block; text-decoration: none; color: inherit; }

.product-card {
  background: var(--bg-warm); border: 1px solid var(--border-s); border-radius: 0;
  padding: 18px; position: relative; text-align: center;
  transition: border-color 0.35s var(--ease), transform 0.4s var(--ease), box-shadow 0.4s var(--ease);
  overflow: hidden;
}
.product-card::after {
  content: ''; position: absolute; bottom: 0; left: 50%; transform: translateX(-50%);
  width: 0; height: 1.5px; background: var(--bordeaux); transition: width 0.4s var(--ease);
}
.product-card:hover { border-color: var(--bordeaux); transform: translateY(-6px); box-shadow: 0 20px 48px var(--dark-12), 0 4px 16px var(--dark-06); }
.product-card:hover::after { width: 60%; }

.product-image-wrapper { position: relative; overflow: hidden; }

.product-card img {
  width: 100%; height: 280px; object-fit: contain;
  border: 1px solid var(--border-s); background: var(--bg-warm);
  display: block; transition: transform 0.55s var(--ease), border-color 0.3s;
}
.product-card:hover img { transform: scale(1.05); border-color: var(--border); }


/* ══ BADGES STOCK ════════════════════════════════════════════ */

.img-out-of-stock { opacity: .45; filter: grayscale(60%); }

.badge-oos, .badge-low {
  position: absolute; top: .5rem; left: .5rem;
  font-family: var(--sans); font-size: .65rem; font-weight: 600;
  letter-spacing: .16em; text-transform: uppercase;
  padding: .25rem .6rem; color: #F5F1EE; z-index: 2;
}
.badge-oos { background: var(--bordeaux); }
.badge-low { background: var(--bordeaux-l); }


/* ══ PRODUCT INFO ════════════════════════════════════════════ */

.product-info h3 {
  font-family: var(--serif); font-size: 14px; font-weight: 400; font-style: italic;
  letter-spacing: 0.04em; color: var(--bordeaux); margin: 14px 0 8px;
  min-height: 3em; line-height: 1.5em;
  overflow: hidden; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical;
}
.price { font-family: var(--sans); font-size: 13px; font-weight: 500; color: var(--bordeaux); letter-spacing: 0.06em; }
.old-price { font-size: 12px; text-decoration: line-through; color: var(--dark-40); margin-right: 8px; }
.sale-price { color: var(--bordeaux-l); }


/* ══ BOUTONS PANIER / TEINTE ════════════════════════════════ */

.add-to-cart, .choose-shade-btn {
  background: var(--bordeaux); color: #F5F1EE;
  border: 1px solid var(--bordeaux); padding: 10px 22px;
  font-family: var(--sans); font-size: 9px; font-weight: 500;
  letter-spacing: 0.2em; text-transform: uppercase; cursor: pointer;
  margin-top: 12px; border-radius: 0;
  display: inline-flex; align-items: center; justify-content: center; gap: 6px;
  transition: background 0.3s var(--ease), color 0.3s var(--ease), border-color 0.3s, transform 0.15s, box-shadow 0.3s var(--ease);
}
.add-to-cart:hover:not(:disabled), .choose-shade-btn:hover:not(:disabled) { background: var(--bordeaux-l); color: #F5F1EE; box-shadow: 0 6px 20px var(--dark-20); }
.add-to-cart:active:not(:disabled), .choose-shade-btn:active:not(:disabled) { transform: scale(.97); }
.add-to-cart:disabled, .choose-shade-btn:disabled { background: var(--bg-deep); color: var(--dark-40); border-color: var(--border-s); cursor: not-allowed; opacity: 1; box-shadow: none; }


/* ══ WISHLIST ════════════════════════════════════════════════ */

.add-to-wishlist {
  position: absolute; top: 10px; right: 10px;
  width: 28px; height: 28px; border-radius: 0;
  background: var(--bg); border: 1px solid var(--border-s);
  color: var(--dark-40); font-size: 11px;
  display: flex; align-items: center; justify-content: center;
  opacity: 0; transform: scale(.75) translateY(-4px);
  transition: opacity 0.25s var(--ease), transform 0.3s var(--ease-back), background 0.2s, color 0.2s, border-color 0.2s;
  z-index: 2; cursor: pointer;
}
.product-card:hover .add-to-wishlist { opacity: 1; transform: scale(1) translateY(0); }
.add-to-wishlist:hover { background: var(--bordeaux); color: #F5F1EE; border-color: var(--bordeaux); }


/* ══════════════════════════════════════════════════════════════
   ✦  BOUTON APERÇU RAPIDE
══════════════════════════════════════════════════════════════ */

.quick-view-btn {
  position: absolute;
  bottom: 0; left: 0; right: 0;
  width: 100%;
  background: rgba(68, 11, 25, 0.88);
  color: #F5F1EE;
  border: none;
  padding: 9px 14px;
  font-family: var(--sans);
  font-size: 8.5px;
  font-weight: 600;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 7px;
  cursor: pointer;
  opacity: 0;
  transform: translateY(4px);
  transition:
    opacity 0.28s var(--ease),
    transform 0.28s var(--ease),
    background 0.2s;
  z-index: 3;
  backdrop-filter: blur(4px);
  -webkit-backdrop-filter: blur(4px);
}

.quick-view-btn i { font-size: 10px; transition: transform 0.25s var(--ease-back); }

.product-card:hover .quick-view-btn {
  opacity: 1;
  transform: translateY(0);
}

.quick-view-btn:hover {
  background: var(--bordeaux);
}

.quick-view-btn:hover i {
  transform: scale(1.25);
}

/* Masque le bouton en vue liste (inutile horizontalement) */
.products-grid.products-list .quick-view-btn { display: none; }


/* ══════════════════════════════════════════════════════════════
   ✦  MODALE APERÇU RAPIDE
══════════════════════════════════════════════════════════════ */

/* Overlay */
.qv-overlay {
  display: none;
  position: fixed; inset: 0;
  background: rgba(44, 8, 18, 0.55);
  backdrop-filter: blur(6px);
  -webkit-backdrop-filter: blur(6px);
  z-index: 9000;
  align-items: center;
  justify-content: center;
  padding: 24px;
}
.qv-overlay.active { display: flex; }

/* Modale */
.qv-modal {
  position: relative;
  background: var(--bg-warm);
  border: 1px solid var(--border-s);
  display: flex;
  max-width: 820px;
  width: 100%;
  max-height: 90vh;
  overflow: hidden;
  box-shadow:
    0 40px 80px rgba(44, 8, 18, 0.28),
    0 8px 24px rgba(44, 8, 18, 0.12);
  animation: qvIn 0.38s var(--ease-ovr) both;
}

@keyframes qvIn {
  from { opacity: 0; transform: scale(0.94) translateY(18px); }
  to   { opacity: 1; transform: scale(1) translateY(0); }
}

/* Bouton fermer */
.qv-close {
  position: absolute; top: 16px; right: 18px;
  width: 30px; height: 30px;
  background: none; border: 1px solid var(--border-s);
  color: var(--muted); font-size: 1.1rem; line-height: 1;
  display: flex; align-items: center; justify-content: center;
  cursor: pointer; z-index: 10;
  transition: background 0.2s, color 0.2s, border-color 0.2s;
}
.qv-close:hover { background: var(--bordeaux); border-color: var(--bordeaux); color: #F5F1EE; }

/* Colonne image */
.qv-col-image {
  width: 46%;
  flex-shrink: 0;
  position: relative;
  background: #ede8e4;
  overflow: hidden;
  min-height: 360px;
}
.qv-col-image img {
  width: 100%; height: 100%;
  object-fit: cover;
  display: block;
  transition: transform 0.6s var(--ease);
}
.qv-modal:hover .qv-col-image img { transform: scale(1.04); }

/* Badge dans l'image */
.qv-badge {
  position: absolute; top: 14px; left: 14px;
  font-family: var(--sans); font-size: 7.5px; font-weight: 700;
  letter-spacing: 0.2em; text-transform: uppercase;
  padding: 4px 10px; color: #F5F1EE;
  pointer-events: none;
}
.qv-badge--oos { background: var(--bordeaux); }
.qv-badge--low { background: var(--bordeaux-l); }

/* Colonne infos */
.qv-col-info {
  flex: 1; padding: 40px 36px 36px;
  display: flex; flex-direction: column; gap: 16px;
  overflow-y: auto;
  scrollbar-width: thin;
  scrollbar-color: var(--border) transparent;
}
.qv-col-info::-webkit-scrollbar { width: 3px; }
.qv-col-info::-webkit-scrollbar-thumb { background: var(--border); }

.qv-brand {
  font-family: var(--sans); font-size: 8px; font-weight: 600;
  letter-spacing: 0.36em; text-transform: uppercase; color: var(--muted);
  display: block;
}

.qv-name {
  font-family: var(--serif); font-size: clamp(20px, 2.4vw, 28px);
  font-weight: 600; font-style: italic; letter-spacing: 0.04em;
  color: var(--bordeaux); line-height: 1.2;
  padding-right: 30px; /* évite overlap avec ×  */
}

/* Prix */
.qv-price { display: flex; align-items: baseline; gap: 12px; }
.qv-old    { font-family: var(--sans); font-size: 13px; text-decoration: line-through; color: var(--dark-40); }
.qv-current{ font-family: var(--sans); font-size: 22px; font-weight: 600; color: var(--bordeaux-l); letter-spacing: 0.04em; }
.qv-normal { font-family: var(--sans); font-size: 22px; font-weight: 600; color: var(--bordeaux); letter-spacing: 0.04em; }

/* Ligne de stock */
.qv-stock-line { display: flex; align-items: center; gap: 9px; }

.qv-stock-dot {
  width: 7px; height: 7px; border-radius: 50%; flex-shrink: 0;
  transition: background 0.3s;
}
.qv-dot--in  { background: #5a8f6b; box-shadow: 0 0 0 3px rgba(90,143,107,.18); }
.qv-dot--low { background: #c87941; box-shadow: 0 0 0 3px rgba(200,121,65,.18); }
.qv-dot--out { background: var(--bordeaux); box-shadow: 0 0 0 3px rgba(68,11,25,.18); }

.qv-stock-label {
  font-family: var(--sans); font-size: 10px; font-weight: 500;
  letter-spacing: 0.1em; text-transform: uppercase; color: var(--muted);
}

/* Diviseur */
.qv-divider { height: 1px; background: var(--border-s); margin: 4px 0; }

/* Actions */
.qv-actions { display: flex; flex-direction: column; gap: 12px; margin-top: auto; }

.qv-cart-btn {
  width: 100%; padding: 14px 20px;
  background: var(--bordeaux); color: #F5F1EE;
  border: 1px solid var(--bordeaux);
  font-family: var(--sans); font-size: 9.5px; font-weight: 600;
  letter-spacing: 0.22em; text-transform: uppercase;
  display: flex; align-items: center; justify-content: center; gap: 9px;
  cursor: pointer; border-radius: 0;
  transition: background 0.28s var(--ease), box-shadow 0.28s var(--ease), transform 0.15s;
}
.qv-cart-btn:hover:not(:disabled) { background: var(--bordeaux-l); box-shadow: 0 8px 28px var(--dark-20); }
.qv-cart-btn:active:not(:disabled) { transform: scale(.98); }
.qv-cart-btn:disabled { background: var(--dark-12); color: var(--dark-40); border-color: var(--border-s); cursor: not-allowed; }

.qv-detail-link {
  display: flex; align-items: center; justify-content: center; gap: 8px;
  font-family: var(--sans); font-size: 9px; font-weight: 500;
  letter-spacing: 0.18em; text-transform: uppercase; color: var(--muted);
  padding: 10px; border: 1px solid var(--border-s);
  background: transparent; text-decoration: none;
  transition: color 0.25s, border-color 0.25s, background 0.25s;
}
.qv-detail-link:hover { color: var(--bordeaux); border-color: var(--bordeaux); background: var(--dark-06); }
.qv-detail-link i { font-size: 8px; transition: transform 0.25s var(--ease-back); }
.qv-detail-link:hover i { transform: translateX(4px); }


/* ══ VUE LISTE ═══════════════════════════════════════════════ */

.products-grid.products-list { display: flex; flex-direction: column; gap: 12px; }
.products-grid.products-list .product-card-link { width: 100%; }
.products-grid.products-list .product-card { display: flex; flex-direction: row; align-items: center; gap: 24px; text-align: left; width: 100%; padding: 16px 20px; }
.products-grid.products-list .product-card img { width: 110px; height: 110px; object-fit: contain; flex-shrink: 0; }
.products-grid.products-list .product-info h3 { min-height: auto; -webkit-line-clamp: unset; }
.products-grid.products-list .product-card::after { display: none; }


/* ══ OVERLAY MOBILE ══════════════════════════════════════════ */

.filter-overlay { display: none; }


/* ══ SHARE ═══════════════════════════════════════════════════ */

.share-product { display: flex; align-items: center; justify-content: flex-end; gap: 12px; margin: 32px 0; }
.share-btn {
  width: 34px; height: 34px; border: 1px solid var(--border-s); border-radius: 0;
  background: var(--bg-warm); color: var(--bordeaux);
  display: flex; align-items: center; justify-content: center; cursor: pointer;
  transition: background 0.28s var(--ease), color 0.28s var(--ease), border-color 0.28s;
}
.share-btn:hover { background: var(--bordeaux); color: #F5F1EE; border-color: var(--bordeaux); }


/* ══ FOOTER ══════════════════════════════════════════════════ */

footer, .footer { width: 100%; margin-top: auto; flex-shrink: 0; }


/* ══ RESPONSIVE — DESKTOP ════════════════════════════════════ */

@media (min-width: 993px) {
  .filter-toggle-btn { display: none !important; }
  .filter-overlay    { display: none !important; }
}


/* ══ RESPONSIVE — TABLETTE ═══════════════════════════════════ */

@media (max-width: 992px) {
  .page-layout { display: block; margin-top: 90px; }
  .filter-sidebar {
    position: fixed; top: 90px; left: -300px;
    width: 280px; height: calc(100vh - 90px); padding: 40px 28px 80px;
    background: var(--bg-warm); overflow-y: auto; z-index: 2000;
    box-shadow: 8px 0 40px var(--dark-12);
    transition: left 0.38s cubic-bezier(0.77, 0, 0.18, 1);
    scrollbar-width: thin; scrollbar-color: var(--border) transparent;
    border-right: 1px solid var(--border-s);
  }
  .filter-sidebar.active { left: 0; }
  .filter-overlay {
    display: block; position: fixed; inset: 0;
    background: rgba(68, 11, 25, 0.35); backdrop-filter: blur(2px);
    z-index: 1500; opacity: 0; visibility: hidden;
    transition: opacity 0.3s ease, visibility 0.3s ease;
  }
  .filter-overlay.active { opacity: 1; visibility: visible; }
  .filter-toggle-btn { display: inline-flex !important; }
  .products-section { padding: 28px 24px 100px; }
  .products-grid { grid-template-columns: repeat(2, 1fr); gap: 18px; }
  .filter-controls { justify-content: flex-end; margin-bottom: 20px; padding: 0; background: transparent; border: none; position: static; }

  /* Modale plein écran sur tablette */
  .qv-modal { flex-direction: column; max-height: 85vh; overflow-y: auto; }
  .qv-col-image { width: 100%; min-height: 260px; }
  .qv-col-info { padding: 28px 24px 28px; }
}


/* ══ RESPONSIVE — MOBILE ═════════════════════════════════════ */

@media (max-width: 768px) {
  .products-section { padding: 20px 14px 100px; }
  .products-section h1 { font-size: 28px; }
  .products-grid { grid-template-columns: repeat(2, 1fr) !important; gap: 12px; }
  .product-card img { height: 200px; }
  .product-info h3 { font-size: 12px; min-height: 2.8em; }
  .add-to-cart, .choose-shade-btn { padding: 8px 14px; font-size: 8.5px; }
  .products-grid.products-list .product-card { flex-direction: row; align-items: center; gap: 12px; }
  .products-grid.products-list .product-card img { width: 80px; height: 80px; }
  .share-product { justify-content: center; }

  /* Aperçu rapide mobile : toujours visible (pas besoin de hover) */
  .quick-view-btn { opacity: 1; transform: translateY(0); font-size: 7.5px; padding: 7px 10px; }

  /* Modale mobile */
  .qv-overlay { padding: 0; align-items: flex-end; }
  .qv-modal { border-radius: 0; max-height: 92vh; animation: qvUp 0.36s var(--ease-ovr) both; }
  @keyframes qvUp {
    from { opacity: 0; transform: translateY(40px); }
    to   { opacity: 1; transform: translateY(0); }
  }
  .qv-col-image { min-height: 220px; }
  .qv-col-info { padding: 22px 20px 24px; gap: 12px; }
  .qv-name { font-size: 20px; }
  .qv-current, .qv-normal { font-size: 18px; }
}


/* ══ BOUTON FILTRES FLOTTANT ══════════════════════════════════ */

.filter-toggle-btn { display: none; }

@media (max-width: 992px) {
  .filter-toggle-btn {
    display: inline-flex; align-items: center; gap: 8px;
    position: fixed; bottom: 82px; left: 50%; transform: translateX(-50%);
    z-index: 1400; padding: 12px 28px;
    background: var(--bordeaux); color: #F5F1EE;
    border: none; border-radius: 999px;
    font-family: var(--sans); font-size: 11px; font-weight: 500;
    letter-spacing: 0.18em; text-transform: uppercase;
    box-shadow: 0 8px 28px var(--dark-40); cursor: pointer;
    transition: background 0.25s var(--ease), transform 0.25s var(--ease), box-shadow 0.25s var(--ease);
  }
  .filter-toggle-btn:hover { background: var(--bordeaux-s); transform: translateX(-50%) translateY(-2px); box-shadow: 0 12px 36px var(--dark-40); }
  .filter-toggle-btn:active { transform: translateX(-50%) scale(0.97); }
}

@media (max-width: 768px) {
  .filter-toggle-btn { bottom: 76px; padding: 11px 24px; font-size: 10px; }
}
/* ══ SWATCHES SUR LA CARTE ═══════════════════════════════════ */

.card-shades {
  display: flex;
  align-items: center;
  gap: 5px;
  margin: 8px 0 4px;
  flex-wrap: wrap;
  justify-content: center;
}

.card-shade-dot {
  display: inline-block;
  width: 14px;
  height: 14px;
  border-radius: 50%;
  border: 1.5px solid rgba(68, 11, 25, 0.18);
  cursor: default;
  transition: transform 0.2s var(--ease), border-color 0.2s;
  flex-shrink: 0;
}
.card-shade-dot:hover {
  transform: scale(1.35);
  border-color: var(--bordeaux);
}

.card-shade-more {
  font-family: var(--sans);
  font-size: 9px;
  font-weight: 600;
  letter-spacing: 0.06em;
  color: var(--muted);
}


/* ══ DESCRIPTION + TEINTES DANS LA MODALE ═══════════════════ */

.qv-description {
  font-family: var(--sans);
  font-size: 12px;
  line-height: 1.7;
  color: var(--dark-80);
  letter-spacing: 0.02em;
  max-height: 80px;
  overflow-y: auto;
  scrollbar-width: thin;
  scrollbar-color: var(--border) transparent;
  padding-right: 4px;
}
.qv-description:empty { display: none; }

.qv-shades-block { display: flex; flex-direction: column; gap: 10px; }

.qv-shades-title {
  font-family: var(--sans);
  font-size: 8px;
  font-weight: 600;
  letter-spacing: 0.34em;
  text-transform: uppercase;
  color: var(--muted);
}

.qv-shades-row {
  display: flex;
  flex-wrap: wrap;
  gap: 7px;
}

.qv-shade-dot {
  width: 22px;
  height: 22px;
  border-radius: 50%;
  border: 2px solid rgba(68, 11, 25, 0.15);
  cursor: pointer;
  transition: transform 0.22s var(--ease-back), border-color 0.2s, box-shadow 0.2s;
  position: relative;
  flex-shrink: 0;
}
.qv-shade-dot:hover {
  transform: scale(1.25);
  border-color: var(--bordeaux);
}
.qv-shade-dot.active {
  border-color: var(--bordeaux);
  box-shadow: 0 0 0 3px rgba(68, 11, 25, 0.18);
  transform: scale(1.18);
}

/* Tooltip natif via title — on ajoute un pseudo-label au survol */
.qv-shade-dot::after {
  content: attr(title);
  position: absolute;
  bottom: calc(100% + 6px);
  left: 50%;
  transform: translateX(-50%) translateY(4px);
  background: var(--bordeaux);
  color: #F5F1EE;
  font-family: var(--sans);
  font-size: 8px;
  letter-spacing: 0.1em;
  white-space: nowrap;
  padding: 3px 8px;
  pointer-events: none;
  opacity: 0;
  transition: opacity 0.18s, transform 0.18s;
}
.qv-shade-dot:hover::after {
  opacity: 1;
  transform: translateX(-50%) translateY(0);
}
/* ══════════════════════════════════════════════════════════════
   AJOUTS / CORRECTIONS — SheGlamour catalogue
   À ajouter à la fin de categorie.css
   ══════════════════════════════════════════════════════════════ */


/* ══ ALIGNEMENT UNIFORME DES CARTES ════════════════════════════
   Toutes les cartes ont la même hauteur de zone .product-info
   qu'elles aient des teintes ou non.
   ══════════════════════════════════════════════════════════════ */

.product-card {
  display: flex;
  flex-direction: column;
}

.product-image-wrapper {
  flex-shrink: 0;
}

.product-info {
  display: flex;
  flex-direction: column;
  flex: 1;
  /* Réserve toujours la même hauteur pour les swatches */
}

/* Réserve l'espace du swatch même si la carte n'en a pas */
.product-info h3 {
  flex-shrink: 0;
}

.product-info .price {
  flex-shrink: 0;
}

/* Placeholder invisible quand pas de swatches → même hauteur que les cartes avec swatches */
.product-info .card-shades-placeholder {
  height: 30px; /* = hauteur approximative de .card-shades */
  display: block;
}

/* Boutons toujours en bas de la carte */
.product-info .add-to-cart,
.product-info .choose-shade-btn {
  margin-top: auto;
}

/* Hauteur réservée pour la ligne de teintes (même si vide) */
.card-shades {
  min-height: 30px;
  margin: 8px 0 4px;
}


/* ══ INLINE SHADE PICKER (carte catalogue) ══════════════════════
   Remplace le bouton "Choisir une teinte" par un sélecteur rapide
   directement sur la carte, sans modale.
   ══════════════════════════════════════════════════════════════ */

.inline-shade-picker {
  display: flex;
  flex-direction: column;
  gap: 8px;
  margin-top: 10px;
  animation: ispIn 0.22s var(--ease) both;
}

@keyframes ispIn {
  from { opacity: 0; transform: translateY(4px); }
  to   { opacity: 1; transform: translateY(0);   }
}

.isp-label {
  font-family: var(--sans);
  font-size: 8px;
  font-weight: 600;
  letter-spacing: 0.32em;
  text-transform: uppercase;
  color: var(--muted);
}

.isp-dots {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  min-height: 24px;
  align-items: center;
}

.isp-dot {
  width: 20px;
  height: 20px;
  border-radius: 50%;
  border: 2px solid rgba(68, 11, 25, 0.15);
  cursor: pointer;
  flex-shrink: 0;
  transition:
    transform 0.2s var(--ease-back),
    border-color 0.2s,
    box-shadow 0.2s;
}
.isp-dot:hover {
  transform: scale(1.28);
  border-color: var(--bordeaux);
}
.isp-dot.active {
  border-color: var(--bordeaux);
  box-shadow: 0 0 0 3px rgba(68, 11, 25, 0.18);
  transform: scale(1.18);
}

.isp-loading {
  font-family: var(--sans);
  font-size: 10px;
  color: var(--muted);
  letter-spacing: 0.06em;
}

.isp-selected-name {
  font-family: var(--sans);
  font-size: 9.5px;
  font-weight: 500;
  letter-spacing: 0.1em;
  color: var(--bordeaux);
  min-height: 14px; /* évite le saut de layout quand le texte apparaît */
  transition: opacity 0.2s;
}

.isp-actions {
  display: flex;
  align-items: center;
  gap: 6px;
}

.isp-add-btn {
  flex: 1;
  background: var(--bordeaux);
  color: #F5F1EE;
  border: 1px solid var(--bordeaux);
  padding: 9px 14px;
  font-family: var(--sans);
  font-size: 8.5px;
  font-weight: 600;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  cursor: pointer;
  border-radius: 0;
  transition:
    background 0.25s var(--ease),
    color 0.25s var(--ease),
    border-color 0.25s,
    box-shadow 0.25s var(--ease),
    transform 0.12s;
}
.isp-add-btn:hover:not(:disabled) {
  background: var(--bordeaux-l);
  box-shadow: 0 6px 20px var(--dark-20);
}
.isp-add-btn:active:not(:disabled) { transform: scale(.97); }
.isp-add-btn:disabled {
  background: var(--bg-deep);
  color: var(--dark-40);
  border-color: var(--border-s);
  cursor: not-allowed;
  box-shadow: none;
}

.isp-cancel {
  width: 30px;
  height: 30px;
  flex-shrink: 0;
  background: none;
  border: 1px solid var(--border-s);
  color: var(--muted);
  font-size: 12px;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  border-radius: 0;
  transition: background 0.2s, color 0.2s, border-color 0.2s;
  align-self: stretch;
}
.isp-cancel:hover {
  background: var(--bordeaux);
  color: #F5F1EE;
  border-color: var(--bordeaux);
}


/* ══ VUE RAPIDE — ÉTATS DU BOUTON PANIER ═══════════════════════
   Le bouton reflète l'état : "Sélectionnez une teinte" si aucune
   teinte n'est encore choisie, "Ajouter au panier" sinon.
   ══════════════════════════════════════════════════════════════ */

/* Bouton désactivé en attente de teinte → couleur neutre, pas "rup" */
.qv-cart-btn:disabled:not([data-oos="true"]) {
  background: var(--dark-12);
  color: var(--dark-60);
  border-color: var(--border-s);
  cursor: default;
}

/* Nom de la teinte sélectionnée dans la vue rapide */
.qv-selected-shade-name {
  display: block;
  font-family: var(--sans);
  font-size: 9.5px;
  font-weight: 500;
  letter-spacing: 0.1em;
  color: var(--bordeaux);
  min-height: 14px;
  margin-top: 4px;
  transition: opacity 0.2s;
}

/* Animation "shake" quand on clique "Ajouter" sans avoir choisi de teinte */
@keyframes qvShake {
  0%, 100% { transform: translateX(0); }
  20%       { transform: translateX(-5px); }
  40%       { transform: translateX(5px); }
  60%       { transform: translateX(-4px); }
  80%       { transform: translateX(4px); }
}
.qv-shake {
  animation: qvShake 0.45s var(--ease) both;
}


/* ══ VUE RAPIDE — TEINTES : label affiché sous les swatches ════ */

.qv-shades-block {
  gap: 8px;
}

/* S'assure que le label de teinte sélectionnée apparaît sous les dots */
#qvSelectedShadeName {
  order: 3;
}


/* ══ CORRECTIONS LISTE ══════════════════════════════════════════
   En vue liste, le picker inline reste lisible.
   ══════════════════════════════════════════════════════════════ */

.products-grid.products-list .inline-shade-picker {
  margin-top: 8px;
}

.products-grid.products-list .isp-dots {
  flex-wrap: wrap;
  max-width: 200px;
}
/* ══ FIX : SWATCHES IMAGE (boule blanche) ═══════════════════════
   Sans background-size/position, l'image de fond ne s'affiche pas.
   ══════════════════════════════════════════════════════════════ */

.card-shade-dot--img {
  background-size: cover !important;
  background-position: center !important;
  background-repeat: no-repeat !important;
  /* Supprime le fond blanc par défaut */
  background-color: transparent !important;
}

/* Idem pour les dots de la modale aperçu rapide */
.qv-shade-dot {
  background-size: cover;
  background-position: center;
  background-repeat: no-repeat;
}


/* ══ FIX : ALIGNEMENT DES CARTES AVEC BADGE SOLDE ══════════════
   Le badge .badge-sale est en position:absolute → ne décale pas
   le flux. Le problème vient du fait que .product-image-wrapper
   n'a pas de hauteur fixe, ce qui crée des hauteurs variables.
   On fixe une hauteur uniforme sur le wrapper image.
   ══════════════════════════════════════════════════════════════ */

.product-image-wrapper {
  position: relative;
  /* Hauteur fixe identique pour toutes les cartes */
  height: 280px;
  overflow: hidden;
  flex-shrink: 0;
}

.product-card img {
  width: 100%;
  height: 100%;
  object-fit: contain;
}

/* Badge solde : positionné en absolu, ne perturbe pas le flux */
.badge-sale {
  position: absolute;
  top: .5rem;
  right: .5rem;
  font-family: var(--sans);
  font-size: .65rem;
  font-weight: 600;
  letter-spacing: .16em;
  text-transform: uppercase;
  padding: .25rem .6rem;
  color: #F5F1EE;
  background: var(--bordeaux-l);
  z-index: 2;
  pointer-events: none;
}

/* Sur mobile : hauteur réduite */
@media (max-width: 768px) {
  .product-image-wrapper {
    height: 200px;
  }
}

/* En vue liste : hauteur auto */
.products-grid.products-list .product-image-wrapper {
  height: 110px;
  width: 110px;
  flex-shrink: 0;
}

.products-grid.products-list .product-card img {
  height: 100%;
  width: 100%;
}
/* ══ SWATCH RUPTURE — barre en croix ════════════════════════ */

.card-shade-dot.shade-oos {
  opacity: 0.45;
  position: relative;
  cursor: not-allowed;
}

.card-shade-dot.shade-oos::before,
.card-shade-dot.shade-oos::after {
  content: '';
  position: absolute;
  top: 50%;
  left: 50%;
  width: 130%;
  height: 1.5px;
  background: rgba(68, 11, 25, 0.7);
  border-radius: 0;
  transform-origin: center;
}

.card-shade-dot.shade-oos::before {
  transform: translate(-50%, -50%) rotate(45deg);
}

.card-shade-dot.shade-oos::after {
  transform: translate(-50%, -50%) rotate(-45deg);
}
/* ══ QV MODAL — MOBILE ══════════════════════════════════ */
@media (max-width: 600px) {

  .qv-overlay {
    align-items: flex-end;
    padding: 0;
  }

  .qv-modal {
    width: 100%;
    max-width: 100%;
    max-height: 90vh;
    border-radius: 18px 18px 0 0;
    flex-direction: column;
    overflow-y: auto;
    padding: 16px 14px 28px;
    gap: 14px;
  }

  /* Image en haut, carrée et compacte */
  .qv-col-image {
    width: 100%;
    max-height: 220px;
    display: flex;
    align-items: center;
    justify-content: center;
    border-radius: 10px;
    overflow: hidden;
    flex-shrink: 0;
  }

  #qvImg {
    max-height: 200px;
    width: auto;
    max-width: 100%;
    object-fit: contain;
  }

  .qv-col-info {
    width: 100%;
  }

  .qv-name {
    font-size: 1.1rem !important;
  }

  .qv-brand {
    font-size: .7rem !important;
  }

  .qv-price {
    font-size: .95rem !important;
  }

  .qv-description {
    font-size: .82rem;
    -webkit-line-clamp: 3;
    display: -webkit-box;
    -webkit-box-orient: vertical;
    overflow: hidden;
  }

  .qv-shades-row {
    gap: 8px;
  }

  .qv-shade-dot {
    width: 30px !important;
    height: 30px !important;
  }

  .qv-cart-btn {
    width: 100%;
    padding: 13px !important;
    font-size: .75rem !important;
  }

  .qv-close {
    top: 12px !important;
    right: 14px !important;
    font-size: 22px !important;
  }
}