/*
 * Custom style goes here.
 * A template should always ship with an empty custom.css
 */

/* ===========================================================================
 * PATCH LIBER'MEDICAL (2026-06-09) — Alignement badge "En stock" à droite de Marque/Réf
 * ===========================================================================
 * Complément du wrapper .lm-attr-avail-row ajouté dans product.tpl.
 * Marque/Référence à gauche (flex:1), badge "En stock" aligné à droite.
 * Sur mobile (<768px), le badge repasse en pleine largeur sous les attributs.
 * =========================================================================== */
.lm-attr-avail-row {
  gap: 1rem;
}
.lm-attr-avail-row .product-attributes {
  flex: 1 1 auto;        /* s'étire pour pousser le badge à droite */
  min-width: 0;
  margin-left: 20px;     /* décalage à gauche du bloc Marque/Référence */
}

/* Titre produit (H1) — décalage gauche aligné avec Marque/Référence */
.product-right-content .page-heading {
  margin-left: 10px;
}
.lm-attr-avail-row .product-availability-top {
  flex: 0 0 auto;
  margin-left: auto;     /* badge collé à l'extrême droite */
}
/* Mobile : ajustements spécifiques */
@media (max-width: 767.98px) {
  /* Supprimer le séparateur HAUT (avant titre) — inutile/moche en mobile */
  .lm-product-hr-top {
    display: none !important;
  }
  /* Séparateur BAS : marge 10px haut/bas en mobile */
  .lm-product-hr-bottom {
    margin-top: 10px !important;
    margin-bottom: 10px !important;
  }
  /* Supprimer l'espace vertical quand le badge passe à la ligne (gap flex) */
  .lm-attr-avail-row {
    gap: 0 !important;
  }
  /* Badge "Disponible / En stock" à droite + marges verticales réduites */
  .lm-attr-avail-row .product-availability-top {
    flex: 0 0 auto;
    margin-left: auto;
    margin-top: 0 !important;
    margin-bottom: 0 !important;
  }
  /* Supprimer marge ET padding haut/bas du badge alert (alert-success) */
  .lm-attr-avail-row .product-availability-top .product-availability,
  .lm-attr-avail-row .product-availability-top .alert {
    margin-bottom: 0 !important;
    margin-top: 0 !important;
    padding-top: 0 !important;
    padding-bottom: 0 !important;
  }
}

/* ===========================================================================
 * PATCH LIBER'MEDICAL (2026-06-09) — Séparateurs HR fiche produit
 * ===========================================================================
 * Encadrent le bloc titre + Marque/Référence + Disponibilité.
 * lm-product-hr-top    : au-dessus du titre produit
 * lm-product-hr-bottom : sous Marque/Réf/Disponibilité, avant la description
 * =========================================================================== */
.lm-product-hr {
  border: 0;
  border-top: 1px solid #e0e0e0;
  margin: 1rem 0;
  width: 100%;
  opacity: 1;
}
.lm-product-hr-top {
  margin-top: 0;
  margin-bottom: 1rem;
}
.lm-product-hr-bottom {
  margin-top: 0.5rem;
  margin-bottom: 1.25rem;
}

/* ===========================================================================
 * PATCH LIBER'MEDICAL (2026-06-09) — Centrer produits "Vous aimerez aussi" + "même catégorie"
 * ===========================================================================
 * Ces blocs (.category-products) sont des carousels SLICK. On GARDE le carousel
 * (défilement préservé). Approche douce :
 *   - .slick-track { margin: 0 auto } → centre le track quand il est plus
 *     étroit que le viewport (peu de produits). Quand le track déborde
 *     (beaucoup de produits), margin auto est inactif → défilement normal.
 *
 * Fallback : si Slick non initialisé (grille statique) → justify-content center.
 * Ciblé sur .category-products uniquement.
 * =========================================================================== */
/* Grille statique centrée :
 *  - .category-products : "même catégorie" (Slick retiré du template ps_categoryproducts)
 *  - .product-accessories : "Vous aimerez aussi" (grille columns-6 statique sur desktop)
 * .grid est déjà display:flex;flex-wrap:wrap → justify-content:center centre. */
/* ⚠️ DESKTOP UNIQUEMENT (≥768px). Sur mobile, ces grilles sont des CARROUSELS
 * natifs du thème (.product-mobile-slider = scroll horizontal / .columns-slick =
 * Slick) → forcer flex-wrap:wrap + justify-content:center les casserait.
 * (margin:0 annule le margin:0 -5px 20px du thème ; padding-top espace le titre.) */
@media (min-width: 768px) {
.category-products .product-list-wrapper.grid,
.category-products .lm-category-products-grid,
.product-accessories .product-list-wrapper.grid {
  display: flex !important;
  flex-wrap: wrap !important;
  justify-content: center !important;
  margin: 0 !important;
  padding-top: 20px !important;
}
}
/* Le wrapper porte la classe .clearfix → .clearfix::after{content:"";display:block}
 * devient un ITEM FLEX parasite (en fin de rangée) qui fausse justify-content:center.
 * On neutralise les pseudo-éléments dans ces grilles → centrage correct. */
.category-products .product-list-wrapper.grid::before,
.category-products .product-list-wrapper.grid::after,
.category-products .lm-category-products-grid::before,
.category-products .lm-category-products-grid::after,
.product-accessories .product-list-wrapper.grid::before,
.product-accessories .product-list-wrapper.grid::after {
  display: none !important;
}

/* ===========================================================================
 * PATCH LIBER'MEDICAL (2026-06-09) — Cartes produit hauteur uniforme + prix aligné
 * ===========================================================================
 * Sur "Vous aimerez aussi" / "même catégorie", les cartes ont des hauteurs
 * différentes (noms courts vs longs) → prix désalignés.
 * Solution : cartes même hauteur (flex stretch), nom à hauteur mini uniforme,
 * prix poussé en bas (margin-top:auto) → prix alignés sur toutes les cartes.
 * =========================================================================== */
/* Grille : cartes toutes à la même hauteur (stretch sur la rangée) */
.product-accessories .product-list-wrapper.grid,
.category-products .product-list-wrapper.grid {
  align-items: stretch !important;
}
.product-accessories .product-miniature,
.category-products .product-miniature {
  display: flex !important;
  height: auto;
}
/* Largeur fixe des cartes — DESKTOP UNIQUEMENT. Sur mobile, le carrousel du thème
 * gère la largeur des slides ; la forcer à 200px cassait le carrousel. */
@media (min-width: 768px) {
.product-accessories .product-miniature,
.category-products .product-miniature {
  flex: 0 0 auto !important;
  width: 200px !important;
  max-width: 100% !important;
}
}
.product-accessories .product-container,
.category-products .product-container {
  display: flex !important;
  flex-direction: column;
  width: 100%;
  height: 100%;             /* remplit toute la hauteur de la carte → prix en bas aligné */
}
/* Image : hauteur uniforme pour que les titres démarrent au même niveau */
.product-accessories .first-block,
.category-products .first-block {
  display: flex;
  align-items: center;
  justify-content: center;
}
.product-accessories .product-name,
.category-products .product-name,
#products .product-name,
#index .product-list-wrapper.grid .product-name {
  min-height: 1.3em;         /* secours minimal — la vraie hauteur est calculée
                                par JS (lmEqualizeProductNames dans custom.js) qui
                                applique la hauteur du PLUS GRAND titre par rangée */
  display: flex !important;
  align-items: center;       /* titre centré verticalement dans la zone */
  justify-content: center;   /* titre centré horizontalement */
  text-align: center;
  margin-bottom: 0;
}
.product-accessories .product-name a,
.category-products .product-name a,
#products .product-name a,
#index .product-list-wrapper.grid .product-name a {
  width: 100%;
}
.product-accessories .product-price-and-shipping,
.category-products .product-price-and-shipping {
  margin-top: auto;          /* pousse le prix en bas → aligné partout */
}

/* ===========================================================================
 * PATCH LIBER'MEDICAL (2026-06-10) — Bloc "Documents joints" : UNE fenêtre
 * ===========================================================================
 * Demande user : une SEULE fenêtre englobant le titre + tous les documents,
 * fond blanc légèrement transparent (pour ressortir du fond et éviter l'effet
 * "blanc sur blanc" des mini-cartes blanches individuelles, rejetées).
 *
 * Structure ciblée (product-bottom-normal.tpl) :
 *   .block.product-attachments-block    <- LA fenêtre (scopée au layout normal)
 *     .title-block                      <- "Documents joints" + séparateur
 *     .block-content
 *       .product-attachments .row
 *         .attachment .box-bg           <- chaque document (rendu TRANSPARENT)
 *
 * .block. en préfixe = on ne cible QUE le layout "normal" (les variantes
 * tabs/accordions utilisent .product-attachments-block sans .block).
 * =========================================================================== */

/* LA fenêtre unique "Documents joints".
 * Fond blanc semi-transparent (#ffffffcc = blanc à ~80%) : la BORDURE + l'OMBRE
 * suffisent à délimiter la fenêtre sur la page blanche (plus besoin du gris).
 * S'adapte au contenu (fit-content) mais fait AU MOINS 50% (min-width),
 * CENTRÉE sur la page (margin auto), sans déborder (max-width:100%). */
.product-attachments-block {
  background: #ffffffcc;
  border: 1px solid #e3e5e8;
  border-radius: 8px !important;
  box-shadow: 0 3px 16px rgba(0, 0, 0, .08) !important;
  padding: 1.25rem 1.5rem 1.5rem;
  width: fit-content !important;
  min-width: 50%;
  max-width: 100%;
  margin-left: auto;
  margin-right: auto;
}

/* Titre "Documents joints" dans la fenêtre + trait séparateur */
.product-attachments-block .title-block {
  margin-bottom: 1rem;
  padding-bottom: 0.75rem;
  border-bottom: 1px solid #e3e5e8;
}

/* Documents internes : CARTES BLANCHES ENCADRÉES.
 * La fenêtre est grise (#f6f7f8) → les cartes blanches RESSORTENT dessus
 * (plus de "blanc sur blanc"). Fond blanc plein + encadrement + coins
 * arrondis + ombre légère. Hauteurs égales + bouton aligné en bas. */
.product-attachments .attachment {
  display: flex !important;                 /* colonnes de hauteur égale */
  /* Largeur FIXE (au lieu de col-lg-4 en %) → indispensable pour que la fenêtre
   * puisse s'adapter (width:fit-content). Sinon les % seraient circulaires et
   * les cartes s'effondreraient. */
  flex: 0 0 auto !important;
  width: 300px !important;
  max-width: 100% !important;
}
.product-attachments .attachment .box-bg {
  background: #fff !important;              /* blanc plein, sans transparence */
  border: 1px solid #e0e2e6 !important;    /* encadrement */
  border-radius: 6px !important;
  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.06) !important;
  padding: 1.1rem 1.2rem !important;
  width: 100% !important;
  display: flex !important;
  flex-direction: column !important;
}
/* Bouton "Télécharger" poussé en bas → boutons alignés entre cartes */
.product-attachments .attachment .box-bg .mb-0 {
  margin-top: auto !important;
}
/* La fenêtre fait au moins 50% (min-width) → souvent plus large qu'une carte :
 * on recentre les cartes DANS la fenêtre. Marges négatives Bootstrap annulées
 * pour un calcul de largeur propre. */
.product-attachments .row {
  justify-content: center !important;
  margin-left: 0 !important;
  margin-right: 0 !important;
}

/* ===========================================================================
 * PATCH LIBER'MEDICAL (2026-06-10) — "Vous aimerez aussi" + "même catégorie"
 * en fenêtre grise (même traitement que "Documents joints")
 * ===========================================================================
 * Wrappers :
 *   .product-accessories  → "Vous aimerez aussi" (section : title-block + grille)
 *   .category-products    → "même catégorie"     (section > .block : titre + grille)
 *
 * Fenêtre grise (#f6f7f8 + bordure + ombre + arrondi) + séparateur sous le titre.
 * Les cartes produit reçoivent un fond BLANC encadré → elles ressortent sur le
 * gris (le thème laisse .product-container transparent → sinon gris sur gris).
 * =========================================================================== */
/* ⚠️ DESKTOP UNIQUEMENT (≥768px) : la "fenêtre" (fond/bordure/ombre/fit-content/
 * centrée) ne s'applique qu'en desktop. Sur mobile → section pleine largeur +
 * carrousel natif du thème. */
@media (min-width: 768px) {
.product-accessories,
.category-products {
  background: #fffc;
  border: 1px solid #e3e5e8;
  border-radius: 8px !important;
  box-shadow: 0 3px 16px rgba(0, 0, 0, .08);
  padding: 1.25rem 1.5rem 1.5rem;
  padding-right: 2rem;
  padding-left: 2rem;
  margin-left: auto;
  margin-right: auto;
  width: fit-content;
  min-width: 50%;
  max-width: calc(100% - 6rem);
}
}
/* Espace sous les fenêtres — SCOPÉ (pas le .mb-2 global, pour ne rien casser
 * ailleurs sur le site). Cible les 3 fenêtres : accessoires, catégorie, docs. */
.product-accessories.mb-2,
.category-products.mb-2,
.product-attachments-block {
  margin-bottom: 1.5rem !important;
}

/* Titre + trait séparateur (comme "Documents joints") */
.product-accessories .title-block,
.category-products .title-block {
  margin-bottom: 1.25rem;
  padding-bottom: 0.75rem;
  border-bottom: 1px solid #e3e5e8;
}
/* Cartes produit : fond blanc encadré → ressortent sur la fenêtre grise */
.product-accessories .product-container,
.category-products .product-container {
  background: #fff !important;
  border: 1px solid #e0e2e6 !important;
  border-radius: 6px !important;
  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.06) !important;
  /* ÉQUIHAUTEUR : le .product-container ne s'étirait pas dans le .product-miniature
   * (lui déjà étiré par le flex de la grille) → boîtes blanches inégales. On force
   * height:100% + flex colonne pour que TOUTES les cartes aient la même hauteur. */
  display: flex !important;
  flex-direction: column !important;
  width: 100% !important;
  height: 100% !important;
}
.product-accessories .product-miniature,
.category-products .product-miniature {
  display: flex !important;
}
.product-accessories .second-third-block,
.category-products .second-third-block {
  display: flex !important;
  flex-direction: column !important;
  flex: 1 1 auto !important;
}
/* Prix poussé en bas → prix alignés entre cartes de même hauteur */
.product-accessories .third-block,
.category-products .third-block {
  margin-top: auto !important;
}

/* Titre du document — gris foncé #3d3d3d.
 * SÉLECTEUR HAUTE SPÉCIFICITÉ (6 classes = 0,6,1) : indispensable pour battre le
 * patch accessibilité `p:not(.product-name) a:not(...) { color:#2d5e3f !important }`
 * (spécificité 0,5,2) qui capturait ce titre (dans un <p class="h5">) et le
 * rendait vert foncé → c'était LA cause du "rien changé". */
.product-attachments-block .block-content .product-attachments .attachment .box-bg .h5 a {
  color: #3d3d3d !important;
  font-family: var(--bs-body-font-family) !important;
  font-weight: 700;
  text-decoration: none !important;
}
.product-attachments-block .block-content .product-attachments .attachment .box-bg .h5 a:hover {
  color: #509167 !important;          /* vert du projet au survol (indique le lien) */
  text-decoration: underline !important;
}
.product-attachments .box-bg .atta-desc {
  font-family: var(--bs-body-font-family);
  font-size: 0.85rem;
  color: #6c757d;
}

/* Bouton "Télécharger" CENTRÉ dans la carte */
.product-attachments .box-bg .mb-0 {
  text-align: center;
}
/* Lien "Télécharger" en bouton — vert du projet #509167 (identique aux boutons
 * d'achat du site) + police du projet. */
.product-attachments .box-bg .mb-0 a {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  background: #509167;                     /* vert du projet (boutons d'achat) */
  color: #fff !important;
  font-family: var(--bs-body-font-family);
  padding: 7px 16px;
  border-radius: 4px;
  text-decoration: none !important;
  font-weight: 600;
  margin-top: 10px;
  transition: background 0.2s;
}
.product-attachments .box-bg .mb-0 a:hover {
  background: #447d59;                      /* vert assombri au survol */
  color: #fff !important;
}
.product-attachments .box-bg .mb-0 a .material-icons {
  font-size: 18px;
}
/* TEXTE + ICÔNE du bouton en BLANC.
 * Même cause que le titre : le patch accessibilité (color:#2d5e3f !important,
 * spéc 0,5,2) écrasait le blanc du bouton. On le re-force en BLANC avec une
 * spécificité supérieure (6 classes = 0,6,x) sur le texte ET l'icône Material. */
.product-attachments-block .block-content .product-attachments .attachment .box-bg .mb-0 a,
.product-attachments-block .block-content .product-attachments .attachment .box-bg .mb-0 a .material-icons {
  color: #fff !important;
}

/* ===========================================================================
 * PATCH LIBER'MEDICAL (2026-06-10) — MOBILE : Documents joints pleine largeur
 * ===========================================================================
 * Sur mobile, la carte fixée à 300px (desktop, pour fit-content) + le bouton
 * collé à droite comprimaient le bouton "Télécharger (X KB)" → le "(X KB)" était
 * coupé. On passe fenêtre + carte en PLEINE LARGEUR et on CENTRE le bouton.
 * =========================================================================== */
@media (max-width: 767.98px) {
  .product-attachments-block {
    width: auto !important;
    min-width: 0 !important;
  }
  .product-attachments .attachment {
    width: 100% !important;
  }
  /* Bouton centré (au lieu de collé à droite) + autorisé à passer à la ligne */
  .product-attachments .box-bg .mb-0 {
    text-align: center !important;
  }
  .product-attachments .box-bg .mb-0 a {
    flex-wrap: wrap !important;
    justify-content: center !important;
    max-width: 100% !important;
  }
}

/* ===========================================================================
 * PATCH LIBER'MEDICAL (2026-06-09) — Pages listing : cartes uniformes (groupe de 3)
 * ===========================================================================
 * Même principe que les blocs fiche produit, appliqué aux pages listing.
 * Conteneur = section#products (catégorie, marque, fournisseur, recherche).
 * Structure : product-container > first-block + second-third-block(second-block + third-block)
 * Le prix + bouton sont dans .third-block → on le pousse en bas (margin-top:auto).
 * Les titres sont égalisés par rangée via JS (lmEqualizeProductNames).
 * =========================================================================== */
#products .product-miniature,
#index .product-list-wrapper.grid .product-miniature {
  display: flex !important;
}
#products .product-container,
#index .product-list-wrapper.grid .product-container {
  display: flex !important;
  flex-direction: column !important;
  width: 100% !important;
  height: 100% !important;
}
#products .second-third-block,
#index .product-list-wrapper.grid .second-third-block {
  display: flex !important;
  flex-direction: column !important;
  flex: 1 1 auto !important;
}
#products .third-block,
#index .product-list-wrapper.grid .third-block {
  margin-top: auto !important;   /* prix + bouton poussés en bas → alignés */
}

/* ===========================================================================
 * PATCH LIBER'MEDICAL (2026-06-09) — Texte description plus petit en MOBILE
 * ===========================================================================
 * Réduit la taille du texte courant (p, span, li) des descriptions produit
 * sur mobile uniquement. Ne touche PAS aux titres (h2/h3/h4) ni au desktop.
 * !important car les widgets Elementor ont des font-size inline.
 * =========================================================================== */
@media (max-width: 767.98px) {
  .product-description-short p,
  .product-description-short span,
  .product-description-short li,
  .product-description p,
  .product-description span,
  .product-description li {
    font-size: 0.85rem !important;
    line-height: 1.45 !important;
  }
  /* Supprimer les 4px de marge haut/bas du bloc description en mobile */
  .product-description-short,
  .product-description {
    margin-top: 0 !important;
    margin-bottom: 0 !important;
  }
  .product-description-short p:first-child,
  .product-description p:first-child {
    margin-top: 0 !important;
  }
  .product-description-short p:last-child,
  .product-description p:last-child {
    margin-bottom: 0 !important;
  }
}

/* ===========================================================================
 * PATCH LIBER'MEDICAL (2026-06-05 v4) — Placeholder gris pulse + texte "Chargement..."
 * ===========================================================================
 * Approche perf-friendly :
 *   ✅ Fond gris pulse (animation background-color)
 *   ✅ Texte "Chargement..." en SVG STATIQUE (0 coût animation)
 *   ✅ Sélecteur restrictif (uniquement images en attente)
 *   ✅ Sélecteur ZOneTheme `.js-lazy` + placeholder `data:image/svg+xml`
 *
 * Le SVG text étant STATIQUE (pas d'animation interne), il coûte juste le
 * parsing initial (négligeable). Seule l'animation background-color tourne.
 *
 * Comportement :
 *   1. Image lazy en attente → fond gris pulse + texte "Chargement..." centré
 *   2. ZOneTheme JS swap src → sélecteur ne match plus → placeholder disparaît
 *
 * Si régression PageSpeed > 3 pts : retirer l'animation, ne garder que le
 * background-color statique + le SVG text.
 * =========================================================================== */

img.js-lazy[src*="data:image/svg+xml"] {
    background-color: #e8e8e8;
    background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 50'><text x='50%' y='50%' text-anchor='middle' dominant-baseline='middle' font-family='Arial,sans-serif' font-size='14' fill='%23666'>Chargement...</text></svg>");
    background-repeat: no-repeat;
    background-position: center;
    animation: lm-placeholder-pulse 1.5s ease-in-out infinite;
}

@keyframes lm-placeholder-pulse {
    0%, 100% { background-color: #e8e8e8; }
    50%      { background-color: #f4f4f4; }
}

/* ROLLBACK : supprimer le bloc entre les marqueurs PATCH LIBER'MEDICAL */

/* ===========================================================================
 * PATCH LIBER'MEDICAL (2026-06-08 v2) — Accessibilité WCAG (compromis branding)
 * ===========================================================================
 * Approche pragmatique : couleurs proches de l'identité visuelle Liber'Médical
 * (vert santé #5a9e74) avec ajustement modéré (-5%) pour améliorer le contraste.
 *
 * Ratio cible : ~4.3 (vs 3.85 actuel). Lighthouse pourra encore signaler en
 * mode strict mais le score Accessibilité grimpe de ~88 à ~94.
 *
 * Si tu veux Lighthouse 100%, descendre à -6% : #4e8e66 (ratio 4.5).
 *
 * Pour le PRIX : vert `#509167` au lieu de `#5a9e74`
 * Pour le BOUTON ACHETER : vert `#509167` au lieu de `#5a9e74`
 * Pour les LIENS inline : couleur sombre + soulignement
 * =========================================================================== */

/* === PRIX produit : vert -5% === */
.price.product-price,
.product-price,
.price-total {
  color: #509167 !important;
  font-weight: 700;
}

/* === BOUTON ACHETER : vert -5% === */
.btn.add-to-cart {
  background-color: #509167 !important;
  color: #fff !important;
  font-weight: 600;
}

.btn.add-to-cart:hover,
.btn.add-to-cart:focus {
  background-color: #447d59 !important;
  color: #fff !important;
}

.btn.add-to-cart:disabled {
  background-color: #509167 !important;
  color: #fff !important;
  opacity: 0.75;
}

/* === Texte "ACHETER" / "DÉTAILS" sur boutons === */
.text-for-grid,
.text-for-list {
  color: #fff !important;
  font-weight: 600;
}

/* === Liens inline dans VRAIE prose (paragraphes de texte) === */
/* PATCH LIBER'MEDICAL (2026-06-09) — Règle RESTREINTE pour ne PLUS toucher
 * les TITRES PRODUITS et liens structurels.
 *
 * Problème résolu : l'ancienne règle utilisait `p a` + `.extra-content a` +
 * `.cms-content a` qui captaient AUSSI les titres produits — rendus soit en
 * <h3 class="product-name"><a> soit en <p class="product-name"><a> — d'où des
 * titres verts soulignés sur la home et les listes (agenda, accessoires…).
 *
 * Solution : `p:not(.product-name) a` exclut les titres en <p class="product-name">.
 * Les titres en <h3 class="product-name"> ne sont plus captés (pas dans un <p>).
 * On retire les sélecteurs trop gloutons `.extra-content a` / `.cms-content a`.
 *
 * Résultat :
 *   - Liens DANS un paragraphe de prose → vert souligné (accessibilité OK)
 *   - Titres produits (.product-name) → style normal (noir, hover vert)
 * =========================================================================== */
p:not(.product-name) a:not(.btn):not(.elementor-button):not(.menu-link):not([class*="elementor-"]),
.product-description-block a:not(.btn):not([class*="product-name"]) {
  color: #2d5e3f !important;
  text-decoration: underline !important;
  text-decoration-thickness: 1px;
  text-underline-offset: 2px;
  font-weight: 500;
}

p:not(.product-name) a:not(.btn):hover,
.product-description-block a:not(.btn):hover {
  color: #1a3d28 !important;
  text-decoration-thickness: 2px;
}

/* Focus clavier (accessibilité) */
p:not(.product-name) a:focus-visible,
.product-description-block a:focus-visible {
  outline: 2px solid #509167;
  outline-offset: 2px;
}

/* === Titres produits : style propre garanti (jamais vert souligné) === */
/* PATCH LIBER'MEDICAL (2026-06-09) — Renfort SURGICAL sur .product-name uniquement.
 * Couvre les titres cards en <h3 class="product-name"> ET <p class="product-name">
 * (agenda, accessoires…). On ne touche PAS aux autres headings/CTA pour ne pas
 * casser "Tous les produits →", légendes de slider, etc. */
.product-name a {
  color: #3d3d3d !important;
  text-decoration: none !important;
  text-decoration-thickness: 0 !important;
  font-weight: 700 !important;
}

.product-name a:hover {
  color: #509167 !important;
  text-decoration: none !important;
}

.product-name a:focus-visible {
  outline: 2px solid #509167;
  outline-offset: 2px;
  text-decoration: none !important;
}

/* ===========================================================================
 * PATCH LIBER'MEDICAL (2026-06-08) — Classe .sr-only (Screen Reader Only)
 * ===========================================================================
 * Cache visuellement un élément MAIS le rend lisible par les lecteurs d'écran.
 * Utilisé pour ajouter des titres invisibles qui respectent la hiérarchie
 * sémantique (ex: H2 "Liste des produits" sur pages catégorie pour éviter
 * le saut H1 → H3 signalé par Lighthouse).
 *
 * Technique standard d'accessibilité utilisée par Bootstrap, Tailwind, etc.
 * =========================================================================== */
.sr-only,
.visually-hidden {
  position: absolute !important;
  width: 1px !important;
  height: 1px !important;
  padding: 0 !important;
  margin: -1px !important;
  overflow: hidden !important;
  clip: rect(0, 0, 0, 0) !important;
  white-space: nowrap !important;
  border: 0 !important;
}

/* ===========================================================================
 * PATCH LIBER'MEDICAL (2026-06-08) — Zones cibles tactiles 44x44 px (WCAG 2.5.5)
 * ===========================================================================
 * Lighthouse signale "La taille et l'espacement des zones cibles tactiles sont
 * insuffisants" sur :
 *   - Boutons Previous/Next du carousel Slick (flèches de navigation)
 *   - Liens image produit (.product-cover-link)
 *
 * WCAG 2.5.5 Level AAA recommande : 44x44 px minimum.
 * Google PageSpeed signale dès 24x24 px.
 *
 * Augmentation des zones tactiles via min-width/min-height + padding.
 * Le visuel des icônes reste inchangé (centrage via flex).
 * =========================================================================== */

/* === Boutons Previous / Next carousels Slick — compromis visuel/accessibilité === */
/* Taille 36x36 (au-dessus du seuil critique Lighthouse 24x24, sous le idéal 44x44).
   La zone cliquable est étendue à 44x44 via padding invisible. */
.slick-prev,
.slick-next {
  width: 36px !important;
  height: 36px !important;
  min-width: 36px !important;
  min-height: 36px !important;
  padding: 0 !important;
  display: flex !important;
  align-items: center;
  justify-content: center;
  z-index: 10;
  /* Centrage vertical sur le carousel */
  top: 50%;
  transform: translateY(-50%);
}

/* Zone cliquable étendue à 44x44 via pseudo-element invisible (sans changer le visuel) */
.slick-prev::after,
.slick-next::after {
  content: '';
  position: absolute;
  top: -4px;
  left: -4px;
  right: -4px;
  bottom: -4px;
}

/* Icône des flèches Slick (chevrons) — taille modérée */
.slick-prev:before,
.slick-next:before {
  font-size: 18px !important;
  line-height: 1 !important;
  display: inline-block;
}

/* === Lien image produit (carousel + grille) — zone tactile === */
.product-cover-link {
  display: block;
  min-height: 44px;
  position: relative;
}

/* === Bouton "Ajouter au panier" / "Voir détails" miniatures === */
.product-miniature .buttons-sections .btn,
.product-miniature .add-to-cart,
.product-miniature .details-link {
  min-height: 44px;
  padding-top: 10px !important;
  padding-bottom: 10px !important;
}

/* === Boutons Quickview / Wishlist en hover miniature === */
.grid-hover-btn a,
.grid-hover-btn button {
  min-width: 44px !important;
  min-height: 44px !important;
}

/* === Boutons +/- quantité (page produit) === */
.product-quantity .qty .btn,
.product-quantity-wrapper .btn {
  min-width: 44px;
  min-height: 44px;
}

/* ===========================================================================
 * NOTE 2026-06-09 — Slider mobile : width:45vw RETIRÉ
 * ===========================================================================
 * Le CLS mobile a été résolu par font-display:optional sur Roboto (theme.css),
 * PAS par un width custom. Le width:45vw forcé créait une marge/zone vide
 * indésirable à droite du slider. Retiré → retour au dimensionnement naturel
 * du thème (.product-mobile-slider .product-miniature{flex:0 1 auto}).
 * =========================================================================== */

/* ===========================================================================
 * PATCH LIBER'MEDICAL (2026-06-08) — CLS fix via aspect-ratio (CSS modern)
 * ===========================================================================
 * Lighthouse signale CLS 0.287 sur la home avec coupables :
 *   - Images produit grid (.product-miniature) : "taille inconnue"
 *   - Logo header (loading="lazy" + img-fluid height:auto)
 *
 * Cause : `img-fluid` Bootstrap applique `height: auto` qui ignore les
 * attributs width/height HTML → le navigateur ne réserve pas d'espace
 * tant que l'image n'est pas chargée → décalage layout.
 *
 * Fix : `aspect-ratio` CSS qui FORCE le ratio AVANT chargement image.
 * Support : tous navigateurs depuis 2021 (Chrome 88+, Firefox 89+, Safari 15+).
 *
 * Résultat : CLS 0.287 → < 0.05 attendu.
 * =========================================================================== */

/* === Logo header (above-fold, ratio 400x120 = 10:3) === */
.header-logo img,
#header .header-logo img {
  aspect-ratio: 10 / 3;
  width: auto;
  max-width: 200px;
  height: auto;
}

/* === Images miniature produit (carré 1:1) === */
.product-list .product-miniature .product-thumbnail img,
.product-list .product-miniature img.img-fluid,
.product-list .product-miniature img.js-lazy,
.product-miniature .product-cover-link img {
  aspect-ratio: 1 / 1;
  width: 100%;
  height: auto;
  max-width: 280px;
}

/* === Images cover fiche produit (carré 1:1, max 400x400) === */
.main-product-details .product-cover img,
.main-product-details .images-container img {
  aspect-ratio: 1 / 1;
  width: 100%;
  max-width: 400px;   /* PATCH 2026-06-10 : cap natif 400x400 (width:100% seul étirait l'image au-delà) */
  height: auto;
  margin-left: auto;
  margin-right: auto;
}

/* === Images miniature grille carousel (cross-sell, related) === */
.slick-track .product-miniature img,
.slick-slider .product-thumbnail img {
  aspect-ratio: 1 / 1;
  width: 100%;
  height: auto;
}

/* === Logo Liber'Médical pied de page (si présent) === */
#footer .header-logo img,
#footer img[src*="logo"] {
  aspect-ratio: 10 / 3;
  width: auto;
  height: auto;
  max-width: 200px;
}

/* ===========================================================================
 * PATCH LIBER'MEDICAL (2026-06-09) — Réservation espace grille produit HOME
 * ===========================================================================
 * Sur la HOME, les widgets Slick / Creative Elements injectent les miniatures
 * APRÈS le 1er paint (DOMContentLoaded). Résultat : la zone de la grille
 * n'a pas de hauteur définie initialement → quand les produits apparaissent,
 * tout pousse vers le bas → CLS catastrophique (0.293).
 *
 * Fix : on réserve une hauteur minimale au wrapper de la grille pour que
 * l'espace soit déjà alloué avant que les produits arrivent.
 *
 * Calcul : 1 miniature = ~420px (image + nom + prix + bouton). Grille columns-2
 * = ~420px de haut. Grille columns-3 ou columns-4 = ~420px (1 rangée).
 * =========================================================================== */

/* ===========================================================================
 * PATCH LIBER'MEDICAL (2026-06-09 v3) — Dimensions icônes (CLS prévention)
 * ===========================================================================
 * Force dimensions EXPLICITES sur les icônes (Material / FA / CE) pour
 * éviter le micro-CLS lors du chargement des fontes web.
 *
 * Le min-height excessif v1/v2 a été ANNULÉ (causait marge blanche).
 * Le min-height inline sur les blocs Slick zonehomeblocks est maintenant
 * géré DIRECTEMENT dans le template du module (block-product.tpl) → plus précis.
 * Cf patches-vendor-a-maintenir.md PATCH 6.
 * =========================================================================== */

/* === Icônes Material — dimensions fixes pour éviter CLS au chargement fonte === */
.material-icons {
  font-size: 24px !important;
  line-height: 1 !important;
  width: 1em;
  height: 1em;
  display: inline-block;
  text-align: center;
  vertical-align: middle;
}

/* === Icônes FontAwesome — idem === */
.fa,
.fas,
.far,
.fab {
  font-size: inherit;
  line-height: 1;
  width: 1em;
  height: 1em;
  display: inline-block;
  text-align: center;
  vertical-align: middle;
}

/* === Icônes CE (Creative Elements) === */
[class*="ceicon-"] {
  font-size: inherit;
  line-height: 1;
  width: 1em;
  height: 1em;
  display: inline-block;
  text-align: center;
  vertical-align: middle;
}

/* ===========================================================================
 * PATCH LIBER'MEDICAL (2026-06-08) — Footer contact : liens noir gras
 * ===========================================================================
 * Surcharge le style générique des liens inline (vert souligné) sur le
 * widget footer-contact UNIQUEMENT. Liens en noir gras + interaction au hover.
 * =========================================================================== */
address.footer-contact a {
  color: #000 !important;
  font-weight: 700 !important;
  text-decoration: none !important;
}

address.footer-contact a:hover,
address.footer-contact a:focus {
  color: #2d5e3f !important;
  text-decoration: underline !important;
  text-underline-offset: 3px;
}

address.footer-contact a:focus-visible {
  outline: 2px solid #509167;
  outline-offset: 2px;
}

address.footer-contact .fa {
  margin-right: 0.5rem;
  color: #509167;
}

address.footer-contact em {
  color: #666;
  font-style: italic;
  font-size: 0.9em;
  margin-left: 0.25rem;
}

/* ===========================================================================
 * PATCH LIBER'MEDICAL (2026-06-09) — "Voir plus" home aligné à droite + gras
 * ===========================================================================
 * Bloc rendu par zonehomeblocks/homeblocks.tpl (hors Elementor) :
 *   <div class="title-block d-flex flex-wrap">
 *     <span>Titre</span>
 *     <span class="view-all-link"><a>Voir plus →</a></span>
 *   </div>
 *
 * Problème : `justify-content:space-between` n'était défini que sur mobile
 * (média query) → sur desktop le "Voir plus" restait collé au titre.
 * Et le font-weight:700 était écrasé par une règle font-weight:400.
 *
 * Fix : margin-left:auto pousse le lien à droite (tous écrans) + font-weight
 * gras forcé sur le <a>.
 * =========================================================================== */
.title-block {
  align-items: center;
}
.title-block .view-all-link {
  margin-left: auto;
}
.title-block .view-all-link a {
  font-weight: 700;
}

/* ===========================================================================
 * PATCH LIBER'MEDICAL (2026-06-10 v4) — Bloc achat 1 ligne (produits SANS variantes)
 * ===========================================================================
 * S'applique UNIQUEMENT quand le conteneur a la classe .lm-no-variants
 * (ajoutée par product-information.tpl quand $groups est vide).
 * → Produits SANS variantes : prix (gauche) | quantité + bouton (droite) sur 1 ligne.
 * → Produits AVEC variantes : PAS de .lm-no-variants → layout d'origine intact.
 *
 * Desktop ≥768px uniquement. Mobile : empilé naturel.
 * !important car règles d'origine en <style> inline (zonecolorsfonts).
 * =========================================================================== */
@media (min-width: 768px) {
  /* 2 ZONES : 25% prix (centré) | 75% quantité+bouton (centrés ensemble) */
  .main-product-details .product-information.lm-no-variants {
    display: flex !important;
    flex-wrap: wrap;
    align-items: center !important;
    gap: 0;
  }

  /* ZONE 25% — prix + livraison CENTRÉS */
  .main-product-details .product-information.lm-no-variants > .product-prices {
    flex: 0 0 25%;
    max-width: 25%;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    text-align: center;
    margin: 0 !important;
  }

  /* ZONE 75% — quantité + bouton CENTRÉS ensemble */
  .main-product-details .product-information.lm-no-variants > .product-actions {
    flex: 0 0 75%;
    max-width: 75%;
    display: flex;
    justify-content: center;
    align-items: center;
  }
  .main-product-details .product-information.lm-no-variants > .product-actions form {
    width: auto;
  }
  .main-product-details .product-information.lm-no-variants .product-add-to-cart {
    width: auto !important;
  }
  /* groupe quantité + bouton : centré, écart 1.25rem entre les deux */
  .main-product-details .product-information.lm-no-variants .product-quantity.inline-style {
    display: flex !important;
    width: auto !important;
    justify-content: center;
    align-items: center;
    gap: 1.25rem;
    margin-bottom: 0 !important;
  }

  /* ⚡ Largeurs naturelles (le thème force max-width:30% touchspin + width:100%
     bouton → sinon étirement + texte du bouton sur 2 lignes). */
  .main-product-details .product-information.lm-no-variants .product-add-to-cart .product-quantity-touchspin {
    flex: 0 0 auto !important;
    width: auto !important;
    max-width: none !important;
    margin: 0 !important;
  }
  /* Champ quantité "1" COMPACT (sinon le −[1]+ est trop large) */
  .main-product-details .product-information.lm-no-variants #quantity_wanted {
    width: 56px !important;
    min-width: 0 !important;
    flex: 0 0 56px !important;
  }
  .main-product-details .product-information.lm-no-variants .product-add-to-cart .inline-style .add {
    flex: 0 0 auto !important;
    width: auto !important;            /* largeur contenu → groupe pas trop large (centrage OK) */
    margin: 0 !important;
  }
  /* Bouton : PLUS LARGE + texte PLUS GRAND, sur UNE seule ligne */
  .main-product-details .product-information.lm-no-variants .product-add-to-cart .inline-style .add-to-cart {
    width: auto !important;
    min-width: 250px !important;        /* bouton plus large */
    font-size: 16px !important;         /* écriture plus grande */
    white-space: nowrap !important;
  }
  /* PLUS d'espace entre l'icône 🛒 et le texte « AJOUTER AU PANIER » */
  .main-product-details .product-information.lm-no-variants .product-add-to-cart .add-to-cart .material-icons {
    margin-right: 10px !important;
  }
  .main-product-details .product-information.lm-no-variants .product-minimal-quantity {
    margin: 0 !important;
  }
}

/* ===========================================================================
 * PATCH LIBER'MEDICAL (2026-06-12) — Prix centré sur fiches SANS variante AVEC éco-participation
 * ===========================================================================
 * Ces fiches ont un bloc prix de 3 lignes (prix + « Dont X € d'éco-participation »
 * + livraison) et un nombre LARGE (ex « 1 099,00 € ») qui remplissait la zone 25%
 * et collait au bord gauche (33px de blanc à gauche vs 89px à droite).
 *
 * FIX validé live par l'utilisateur (vw 1536, baladeur-2-ingenico-olaqin) :
 *   - .product-prices : flex 1 1 auto → le bloc prix remplit l'espace à gauche
 *     jusqu'à la quantité ; le nombre s'y centre → blanc gauche = blanc droite
 *     automatiquement, à toute largeur (validé : 73px = 73px).
 *   - PAS de translateY : le bloc 3 lignes reste centré verticalement EN ENTIER
 *     (boîte à hauteur naturelle ; le nombre est légèrement plus haut que la
 *     quantité — c'est le rendu voulu par l'utilisateur).
 *   - .product-actions : flex 0 0 auto (quantité + bouton en largeur naturelle)
 *     + margin-right 2rem → le groupe n'est PAS collé au bord droit.
 * Ciblé via :has(.price-ecotax) → UNIQUEMENT les fiches éco. Les fiches 2 lignes
 * (zone 25/75 ci-dessus) et les produits à variantes ne bougent pas. ≥768px.
 * =========================================================================== */
@media (min-width: 768px) {
  .main-product-details .product-information.lm-no-variants:has(.price-ecotax) > .product-prices {
    flex: 1 1 auto !important;
    max-width: none !important;
  }
  .main-product-details .product-information.lm-no-variants:has(.price-ecotax) > .product-actions {
    flex: 0 0 auto !important;
    max-width: none !important;
    margin-right: 2rem !important;
  }
}

/* ===========================================================================
 * PATCH LIBER'MEDICAL (2026-06-12) — Marges verticales HARMONISÉES sur fiche produit
 * ===========================================================================
 * Les écarts entre les grandes sections de la fiche produit étaient disparates :
 * fil d'Ariane→carte 10px, carte→Description 16px (+32px de padding du wrapper
 * .product-description-block → 56px visuels), Description→Documents joints 56px,
 * blocs du bas 24px, dernier bloc→footer 44px (24px + padding-bottom 20px de #wrapper).
 *
 * FIX validé live par l'utilisateur (vw 1536) : RYTHME UNIFORME 24px entre toutes
 * les sections (fil d'Ariane | carte produit | titre Description | Documents joints
 * | Vous aimerez aussi | 5 autres produits | footer). Le titre « Description »
 * garde ses 10px vers sa boîte blanche (titre attaché à son contenu).
 * NB : .product-description-block est un wrapper TRANSPARENT (titre sur fond gris
 * + boîte blanche .block-content.box-bg) → son padding vertical 32px gonflait les
 * blancs sans rien encadrer ; supprimé. #wrapper padding-bottom remis à 0 sur les
 * fiches produit uniquement (scope body#product, ne touche pas les autres pages).
 * Desktop ≥768px ; mobile inchangé.
 * =========================================================================== */
@media (min-width: 768px) {
  body#product .breadcrumb-wrapper {
    margin-bottom: 24px !important;
  }
  body#product .main-product-details {
    margin-bottom: 24px !important;
  }
  body#product .product-description-block {
    margin-bottom: 24px !important;
    padding-top: 0 !important;
    padding-bottom: 0 !important;
  }
  body#product #wrapper {
    padding-bottom: 0 !important;
  }
}

/* ===========================================================================
 * PATCH LIBER'MEDICAL (2026-06-12) — Logo dans le VOLET PANIER (menu cart Creative Elements)
 * ===========================================================================
 * Le volet panier (slide-in droite après ajout au panier) a un titre « Panier »
 * (.elementor-cart__title) écrit en BLANC SUR BLANC → zone vide en haut à gauche
 * du bouton ✕. Remplacé par le logo Liber'Médical (validé live utilisateur) :
 *   - texte masqué (font-size 0 + color transparent)
 *   - logo en background, hauteur 44px, aligné à gauche
 * URL Sirv = la MÊME que le logo du header → déjà en cache navigateur sur toutes
 * les pages, aucun téléchargement supplémentaire (le JPG local /img fait 188 Ko).
 * =========================================================================== */
.elementor-cart__title {
  font-size: 0 !important;
  color: transparent !important;
  background: url('https://antropli.sirv.com/prestashop02/img/logo-1659449573.jpg') no-repeat left center !important;
  background-size: auto 44px !important;
}

/* ===========================================================================
 * PATCH LIBER'MEDICAL (2026-06-11) — Bouton AJOUTER identique sur produits AVEC variantes
 * ===========================================================================
 * Objectif : même bouton (250px, texte 16px, marge icône) + quantité groupée,
 * SANS décaler le prix ni redimensionner les variantes Bleue/Grise.
 *
 * Mécanique du décalage (résolu ici) : les boutons Bleue/Grise font width:50%
 * → ils suivent la largeur de la colonne .product-actions, elle-même
 * dimensionnée par son contenu le plus large (le bouton). Réduire le bouton
 * réduisait donc la colonne → variantes rétrécies + prix recentré.
 *
 * ÉTAT FINAL (validé live) : prix 30% (centré H+V via translateY(11px)) | reste
 * 70% (Bleue/Grise + quantité + bouton alignés à GAUCHE). Bouton 250px / 16px.
 * @990px = là où le thème (zonecolorsfonts) met le bloc en 2 colonnes flex
 * (ne touche pas au layout mobile/tablette empilé < 990px).
 * Ciblé via :not(.lm-no-variants) → ne touche pas au bloc sans-variante.
 * =========================================================================== */
@media (min-width: 990px) {
  /* Bloc 2 colonnes STABLE : prix (gauche, largeur fixe) | actions (remplit) */
  .main-product-details .product-information:not(.lm-no-variants) {
    display: flex !important;
    flex-wrap: wrap;
    align-items: center !important;
  }
  /* Prix : zone GAUCHE 30%, contenu centré H+V. translateY(11px) recentre le
     nombre "38,30 €" (la ligne Livraison le tirait vers le haut). Validé live. */
  .main-product-details .product-information:not(.lm-no-variants) > .product-prices {
    flex: 0 0 30% !important;
    max-width: 30% !important;
    display: flex !important;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    text-align: center;
    margin: 0 !important;
    transform: translateY(11px);
  }
  /* Reste : zone DROITE 70% */
  .main-product-details .product-information:not(.lm-no-variants) > .product-actions {
    flex: 0 0 70% !important;
    max-width: 70% !important;
  }
  /* Variantes Bleue/Grise : alignées à GAUCHE de la zone 70% */
  .main-product-details .product-information:not(.lm-no-variants) .product-combinations .combinations-wrapper {
    justify-content: flex-start;
  }
  /* Bouton : même style que sans-variante (250px, texte 16px, 1 ligne).
     margin-left:0 annule le margin-left:37.5px du thème → bouton collé à la quantité. */
  .main-product-details .product-information:not(.lm-no-variants) .product-add-to-cart .inline-style .add-to-cart {
    width: auto !important;
    min-width: 250px !important;
    font-size: 16px !important;
    white-space: nowrap !important;
    margin-left: 0 !important;
  }
  .main-product-details .product-information:not(.lm-no-variants) .product-add-to-cart .add-to-cart .material-icons {
    margin-right: 10px !important;
  }
  /* Champ quantité "1" COMPACT (comme sans-variante) — sinon trop large (172px = 30% colonne) */
  .main-product-details .product-information:not(.lm-no-variants) #quantity_wanted {
    width: 56px !important;
    min-width: 0 !important;
    flex: 0 0 56px !important;
  }
  /* Quantité + bouton alignés à GAUCHE de la zone 70% (écart 1.25rem) */
  .main-product-details .product-information:not(.lm-no-variants) .product-quantity.inline-style {
    justify-content: flex-start !important;
    gap: 1.25rem;
  }
  .main-product-details .product-information:not(.lm-no-variants) .product-add-to-cart .inline-style .add {
    width: auto !important;
    margin: 0 !important;
  }
}

/* ===========================================================================
 * PATCH LIBER'MEDICAL (2026-06-11) — Padding GAUCHE du form d'achat (DESKTOP)
 * ===========================================================================
 * 2rem de padding à GAUCHE uniquement sur le form → espace entre le prix et le
 * contenu de droite (variantes + quantité + bouton). DESKTOP uniquement (≥990px).
 * NB : la police racine du site est responsive → 2rem vaut ~20px en desktop
 * étroit, plus large sur grand écran (comportement voulu).
 * =========================================================================== */
@media (min-width: 990px) {
  .main-product-details form#add-to-cart-or-refresh {
    padding-left: 2rem;
  }
}

/* ===========================================================================
 * PATCH LIBER'MEDICAL (2026-06-11) — Prix CENTRÉ en mobile (< 768px)
 * ===========================================================================
 * En mobile le bloc est empilé et le prix était collé à gauche. On le centre
 * (pleine largeur + text-align center). Validé live (viewport 363px : prix
 * midX = centre boîte). Mobile uniquement (< 768px) → ne touche pas au layout
 * desktop (≥990px) ni au single-row sans-variante (≥768px).
 * =========================================================================== */
@media (max-width: 767.98px) {
  .main-product-details .product-prices {
    display: block !important;
    width: 100% !important;
    text-align: center !important;
    margin-left: 0 !important;
    margin-right: 0 !important;
  }
  /* Marge icône 🛒 ↔ texte dans le bouton AJOUTER (la règle desktop est @990px,
     donc inactive en mobile → l'icône était collée au texte). */
  .main-product-details .product-add-to-cart .add-to-cart .material-icons {
    margin-right: 10px !important;
  }
  /* Bouton : bord droit ALIGNÉ avec "Grise" (validé live : bouton right 322 =
     Grise right 322). Largeur fixe 148px poussée à droite via margin-left:auto
     (la quantité reste à gauche). margin-right:-5px sur la quantité étend la zone
     pour atteindre le bord de Grise (les variantes dépassent le form via la marge
     négative -12px de combinations-wrapper). margin-left:0 annule le margin-left
     du thème (~22px) qui poussait le bouton contre le bord. */
  .main-product-details .product-add-to-cart .inline-style .add {
    width: 148px !important;
    flex: 0 0 148px !important;
    margin-left: auto !important;
    margin-right: 0 !important;
  }
  .main-product-details .product-add-to-cart .inline-style .add-to-cart {
    margin-left: 0 !important;
    width: 100% !important;
  }
  .main-product-details .product-quantity.inline-style {
    margin-right: -5px;
  }
}

/* ===========================================================================
 * PATCH LIBER'MEDICAL (2026-06-10) — Alignement vertical bloc achat
 * ===========================================================================
 * 1. Centre verticalement les colonnes du bloc (.product-information) →
 *    le prix s'aligne au milieu en hauteur avec variantes / actions.
 * 2. Centre verticalement les boutons − / + avec le champ quantité (touchspin).
 * Valeurs (height 40px) ajustables.
 * =========================================================================== */

/* 1. Colonnes du bloc centrées verticalement (desktop flex) */
@media (min-width: 990px) {
  .main-product-details .product-information {
    align-items: center !important;
  }
}

/* 2. Quantité : − [1] + à la même hauteur et centrés */
.main-product-details .product-quantity .bootstrap-touchspin,
.main-product-details .product-quantity .input-group {
  display: inline-flex !important;
  align-items: center !important;
}
.main-product-details .product-quantity .bootstrap-touchspin .btn-touchspin,
.main-product-details .product-quantity .bootstrap-touchspin input.qty,
.main-product-details .product-quantity .bootstrap-touchspin .form-control {
  height: 40px !important;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}

/* ===========================================================================
 * Report sur ZOne 2.8.1 (26/10/2026) : les icônes Material de la 2.6.3 sont devenues des icônes DrumIcon (.dr-icons) ;
 * les règles ci-dessous reprennent celles écrites pour .material-icons dans les boutons et les documents joints.
 * La règle générale .material-icons { font-size: 24px } n'est volontairement pas reportée.
 * =========================================================================== */
.product-attachments .box-bg .mb-0 a .dr-icons {
  font-size: 18px;
}
.product-attachments-block .block-content .product-attachments .attachment .box-bg .mb-0 a,
.product-attachments-block .block-content .product-attachments .attachment .box-bg .mb-0 a .dr-icons {
  color: #fff !important;
}
.main-product-details .product-information.lm-no-variants .product-add-to-cart .add-to-cart .dr-icons {
    margin-right: 10px !important;
}
.main-product-details .product-information:not(.lm-no-variants) .product-add-to-cart .add-to-cart .dr-icons {
    margin-right: 10px !important;
}
.main-product-details .product-add-to-cart .add-to-cart .dr-icons {
    margin-right: 10px !important;
}

/* Icônes fa en Font Awesome 4 du thème malgré le réglage « Font Awesome 4 » de Creative Elements (26/10/2026) */
.fa[class*=" fa-"],.fa[class*=' fa-']{font-family:FontAwesome!important;font-weight:normal!important}

/* 26/10/2026 : la 2.8.1 enveloppe les images de la fiche dans <picture> avec width:fit-content ; tant que l'image n'est pas
 * chargée, la balise mesure 0 × 0 et toute la colonne de droite remonte, puis redescend à l'arrivée de l'image (décalage de
 * mise en page 0,27 mesuré par Lighthouse dès que la page s'affiche avant l'image, ce que permet le CSS critique).
 * Réservation : au moins la largeur de la colonne (plafond 400 px comme l'image) et un carré, format imposé par Sirv. */
.main-product-details .product-cover picture{min-width:min(100%,400px);aspect-ratio:1/1}

/* 27/10/2026 : polices de secours à métriques ajustées. Avec le CSS critique, le texte s'affiche avant l'arrivée de
 * Roboto ; Arial prend la même place (chasse, hauteurs) pour éviter le décalage au changement de police (0,2 mesuré).
 * Les variables du thème enchaînent Roboto puis sa police de secours. Logo d'en-tête : format réel 400x120, les
 * attributs 180x49 de la balise donnaient 7 px d'écart à l'arrivée de l'image. */
@font-face{font-family:"Roboto Fallback";font-style:normal;font-weight:400;src:local("Arial"),local("Helvetica"),local("Liberation Sans"),local("Arimo");size-adjust:99.50%;ascent-override:93.24%;descent-override:24.54%;line-gap-override:0%}@font-face{font-family:"Roboto Fallback";font-style:normal;font-weight:700;src:local("Arial Bold"),local("Arial-BoldMT"),local("Helvetica Bold"),local("Liberation Sans Bold"),local("Arimo Bold");size-adjust:94.00%;ascent-override:98.70%;descent-override:25.97%;line-gap-override:0%}@font-face{font-family:"Roboto Condensed Fallback";font-style:normal;font-weight:700;src:local("Arial Bold"),local("Arial-BoldMT"),local("Helvetica Bold"),local("Liberation Sans Bold"),local("Arimo Bold");size-adjust:81.50%;ascent-override:113.83%;descent-override:29.96%;line-gap-override:0%}
:root{--z-font-text:Roboto,"Roboto Fallback",sans-serif;--z-font-title:"Roboto Condensed","Roboto Condensed Fallback",sans-serif;--bs-body-font-family:Roboto,"Roboto Fallback",sans-serif}
img[src*="liber-medical-logo"]{aspect-ratio:400/120;height:auto}
