/*
 * Carte produit — composant partagé entre la grille du catalogue et les blocs
 * « produits liés » / « ventes incitatives » de la fiche produit.
 *
 * Avant la fusion, ces deux contextes portaient deux copies divergentes du même
 * composant : le catalogue avec des valeurs réglables, la fiche produit avec des
 * valeurs codées en dur. Les écarts légitimes (arrondi, marge intérieure, ombre,
 * graisse du prix) passent désormais par des variables, que chaque module
 * renseigne dans son bloc :root.
 *
 * Les bascules oui/non sont portées par des classes sur <body>, posées en PHP :
 * le fichier reste statique, donc mis en cache par le navigateur.
 */

/* ---------- Fil d'Ariane ---------- */

/*
 * Dans shared.css et non dans catalog.css ou product.css : le fil d'Ariane
 * apparaît aussi bien en boutique que sur une fiche, et la règle serait sinon
 * écrite deux fois.
 *
 * WooCommerce le rend comme du texte plat : des <a> séparés par des nœuds
 * texte, sans conteneur par niveau. Le séparateur n'est donc pas stylable ;
 * seuls la taille, la couleur et les liens le sont.
 */
.woocommerce-breadcrumb {
	margin: 0 0 18px;
	padding: 0;
	font-size: 12px;
	line-height: 1.6;
	color: var(--wcdc-muted);
}

.woocommerce-breadcrumb a {
	color: var(--wcdc-primary);
	text-decoration: none;
}

.woocommerce-breadcrumb a:hover {
	text-decoration: underline;
}

/* ---------- Grille ---------- */

/*
 * flex-wrap + largeurs en calc(), exactement comme les extensions d'origine.
 *
 * Une version de ce plugin a tenté display:grid : arithmétiquement équivalent,
 * mais la mise en page était cassée sous Divi. Retour à la disposition éprouvée.
 * Voir CHANGELOG.md.
 *
 * align-items: stretch donne des cartes de hauteur égale sur une même ligne ;
 * combiné au margin-top:auto du bouton, les bas de carte s'alignent.
 */
.woocommerce ul.products {
	display: flex !important;
	flex-wrap: wrap !important;
	align-items: stretch !important;
	/*
	 * La gouttière est portée par le CONTENEUR, pas par les cartes.
	 *
	 * Les extensions d'origine posaient un margin-right sur chaque carte, puis
	 * le retiraient à la dernière de chaque ligne avec :nth-child(Nn) — N étant
	 * gravé dans le sélecteur par PHP. En passant à des feuilles statiques, ce
	 * N ne pouvait plus l'être, et la règle dépendait d'une classe posée sur
	 * <body>. Une classe manquante — cache de page servant un HTML antérieur,
	 * contexte non reconnu — et la dernière carte gardait sa gouttière : trois
	 * cartes plus trois gouttières dépassent 100 %, la troisième passait à la
	 * ligne.
	 *
	 * Avec gap, les cartes n'ont plus aucune marge : il n'y a plus de dernière
	 * carte à traiter, donc plus de N, donc plus de classe.
	 */
	gap: var(--wcdc-gap, 30px);
	/*
	 * Indispensable, et pas seulement décoratif : WooCommerce fait flotter le
	 * compteur de résultats à gauche et le formulaire de tri à droite, sans
	 * conteneur autour. Un conteneur flex établit un contexte de formatage de
	 * bloc, dont la boîte se rétrécit pour ne pas chevaucher un flottant — la
	 * grille entière se retrouve alors comprimée entre les deux.
	 *
	 * woocommerce-layout.css pose déjà ce clear, mais ce fichier n'est pas
	 * toujours chargé sous Divi : on ne s'en remet pas à lui.
	 */
	clear: both;
	padding: 0;
	list-style: none;
}

/*
 * WooCommerce comme Divi posent un clearfix ::before / ::after sur le <ul>,
 * hérité de l'époque où la grille était en float. Dans un conteneur flex, ces
 * pseudo-éléments deviennent des éléments flex à part entière : leur largeur,
 * même minime, suffit à faire passer la dernière carte d'une ligne à la ligne
 * suivante.
 */
.woocommerce ul.products::before,
.woocommerce ul.products::after {
	display: none !important;
}

/* ---------- Carte ---------- */

/*
 * Apparence seulement. Les largeurs et les gouttières sont posées par
 * catalog.css et product.css : elles dépendent du nombre de colonnes, qui n'est
 * pas le même dans les deux contextes.
 */
.woocommerce ul.products li.product {
	/*
	 * Les largeurs en calc() posées par catalog.css et product.css supposent
	 * que la marge intérieure et la bordure sont COMPRISES dans la largeur.
	 * Divi pose bien « * { box-sizing: border-box } », et les extensions
	 * d'origine s'en remettaient à lui ; on le déclare explicitement pour ne
	 * pas dépendre du thème sur un point aussi structurant — sans ça, les
	 * 2 x (15px + 1px) de la carte s'ajoutent à sa largeur et la dernière
	 * colonne passe à la ligne.
	 */
	box-sizing: border-box;

	position: relative;
	display: flex !important;
	flex-direction: column !important;
	background: var(--wcdc-card-bg);
	border: 1px solid var(--wcdc-border);
	border-radius: var(--wcdc-card-radius, 8px);
	padding: var(--wcdc-card-padding, 15px);
	box-shadow: var(--wcdc-card-shadow, 0 2px 8px rgba(0, 0, 0, .06));
	transition: box-shadow .15s ease, transform .15s ease;
}

.woocommerce ul.products li.product:hover {
	box-shadow: 0 4px 14px rgba(0, 0, 0, .08);
	transform: translateY(-2px);
}

.woocommerce ul.products li.product .woocommerce-loop-product__title {
	color: var(--wcdc-text);
}

/* ---------- Prix ---------- */

/*
 * Sélecteur doublé (.woocommerce.woocommerce) : augmente la spécificité pour
 * gagner face aux styles du thème / de Divi qui utilisent le même sélecteur
 * accompagné de !important. À spécificité égale, en CSS c'est l'ordre de
 * chargement qui décide, ce qui n'est pas fiable.
 */
.woocommerce.woocommerce ul.products li.product .price {
	color: var(--wcdc-primary) !important;
	font-weight: var(--wcdc-price-weight, 400) !important;
	font-size: var(--wcdc-price-size, inherit) !important;
}

/* En promo : seul le nouveau prix (dans <ins>) passe en gras, l'ancien prix barré reste normal. */
.woocommerce.woocommerce ul.products li.product .price ins {
	font-weight: 700 !important;
	text-decoration: none;
}

/* ---------- Bouton ---------- */

body.wcdc-btn-full .woocommerce ul.products li.product .button {
	display: block !important;
	text-align: center;
	margin-top: auto;
}

body.wcdc-btn-colored .woocommerce ul.products li.product .button {
	background: var(--wcdc-primary) !important;
	border-color: var(--wcdc-primary) !important;
	color: #fff !important;
	border-radius: 6px;
}

body.wcdc-btn-colored .woocommerce ul.products li.product .button:hover {
	filter: brightness(.92);
}

/*
 * Divi injecte une flèche en ::after sur ses boutons WooCommerce, révélée au
 * survol, et compense par un rembourrage supplémentaire. Nos boutons ont leur
 * propre rembourrage et leur propre alignement : le glyphe se pose alors sur
 * le libellé au lieu de se glisser à côté.
 *
 * On le retire partout où nous réhabillons un bouton. Les boutons que nous ne
 * touchons pas gardent le comportement de Divi.
 */
.woocommerce ul.products li.product .button::after,
.woocommerce ul.products li.product .button::before {
	content: none;
}

/* ---------- Badge promo ---------- */

/*
 * Sélecteur doublé, même raison que pour le prix : la règle Divi
 * (.woocommerce span.onsale, .woocommerce-page span.onsale) écraserait sinon
 * notre fond et notre arrondi même avec !important.
 *
 * z-index élevé : passe au-dessus de l'overlay de survol (comparateur, aperçu
 * rapide...) qui, sinon, délave visuellement le badge en passant par-dessus.
 *
 * Le fond retombe sur la couleur principale quand aucune couleur de badge
 * n'est renseignée.
 */
body.wcdc-badge-colored .woocommerce.woocommerce span.onsale,
body.wcdc-badge-colored .woocommerce-page.woocommerce-page span.onsale {
	background: var(--wcdc-badge-bg, var(--wcdc-primary)) !important;
	color: #fff !important;
	font-weight: 600;
	border-radius: var(--wcdc-badge-radius, 4px) !important;
	z-index: 20;
}

/* Solution de secours si l'overlay de survol reste malgré tout au-dessus du badge. */
body.wcdc-badge-hide-hover .woocommerce ul.products li.product:hover span.onsale {
	opacity: 0;
	visibility: hidden;
}

/* ---------- Spinner d'ajout au panier (AJAX) ---------- */

/*
 * Nécessite que « Activer les boutons AJAX d'ajout au panier sur les pages
 * d'archive » soit coché dans WooCommerce > Réglages > Produits > Général,
 * sinon WooCommerce garde le rechargement classique.
 */
body.wcdc-ajax-spinner .woocommerce ul.products li.product .button.loading {
	opacity: .7;
	pointer-events: none;
	position: relative;
	color: transparent !important;
}

body.wcdc-ajax-spinner .woocommerce ul.products li.product .button.loading::after {
	content: '';
	position: absolute;
	left: 50%;
	top: 50%;
	width: 14px;
	height: 14px;
	margin: -7px 0 0 -7px;
	border: 2px solid rgba(255, 255, 255, .5);
	border-top-color: #fff;
	border-radius: 50%;
	animation: wcdc-spin .6s linear infinite;
}

@keyframes wcdc-spin {
	to { transform: rotate(360deg); }
}

@media (prefers-reduced-motion: reduce) {
	.woocommerce ul.products li.product,
	.woocommerce ul.products li.product .button.loading::after {
		transition: none;
		animation: none;
	}
	.woocommerce ul.products li.product:hover {
		transform: none;
	}
}
