/* ===========================================================================
   refonte.css — RÉCEPTACLE du CSS de la refonte Top Siège
   ---------------------------------------------------------------------------
   Fichier volontairement VIDE pour l'instant (cf. brief B.3 : on prépare
   seulement le contenant).

   • Chargé par functions.php APRÈS le style enfant ET après `elementor-frontend`
     → permet de surcharger proprement les styles Elementor.
   • Charte cible : Montserrat ; couleurs principales #044BAA / #006DFF ;
     textes majoritairement noirs.
   • À privilégier ici : des sélecteurs STABLES (classes de widgets Elementor
     type .elementor-widget-…, classes WooCommerce, classes utilitaires
     dédiées) plutôt que les ID auto-générés .elementor-element-XXXX.
   • Compatibilité cache : après toute modification, purger LiteSpeed
     (page + CSS/JS + UCSS) puis Cloudflare. Sur staging, cache déjà désactivé.
   =========================================================================== */

/* ===========================================================================
   ÉTAPE 3 — Fondations du design system
   =========================================================================== */

/* Largeur commune de la « coquille » du site : bulle header + contenu accueil.
   Adaptative : occupe l'écran (moins les marges) et se borne à 1880 px sur
   les très grands écrans. Décision Ivane 16/07 (écran 27"). */
:root { --ts-shell-max: 1880px; }

/* ---------------------------------------------------------------------------
   Grand titre de section — DÉGRADÉ bleu (#044BAA → #006DFF)
   ---------------------------------------------------------------------------
   Usage SOBRE : réservé aux grands titres de section uniquement.
   S'ajoute via le champ « Classes CSS » du widget Titre Elementor :
   classe « ts-title-gradient » (la classe se pose sur le wrapper du widget,
   le texte étant dans .elementor-heading-title).

   • Fallback couleur pleine #044BAA pour les navigateurs sans background-clip:text
     et pour l'accessibilité (le texte reste lisible même sans dégradé).
   • UCSS LiteSpeed (prod) : ajouter « ts-title-gradient » (et
     « elementor-heading-title ») à la liste blanche UCSS pour éviter la
     suppression comme « CSS inutilisé ». Sur staging, l'optimisation est OFF.
   --------------------------------------------------------------------------- */
.ts-title-gradient,
.ts-title-gradient .elementor-heading-title {
	background-image: linear-gradient(95deg, #044BAA 0%, #006DFF 100%);
	-webkit-background-clip: text;
	background-clip: text;
	-webkit-text-fill-color: transparent;
	color: #044BAA; /* fallback couleur pleine */
}

/* Fallback explicite si background-clip:text n'est pas supporté */
@supports not ((-webkit-background-clip: text) or (background-clip: text)) {
	.ts-title-gradient,
	.ts-title-gradient .elementor-heading-title {
		background: none;
		-webkit-text-fill-color: #044BAA;
		color: #044BAA;
	}
}



/* ===========================================================================
   ÉTAPE 4 (v2) — HEADER REFONDU (template 10805) — maquette validée par Ivane
   ---------------------------------------------------------------------------
   Ligne 1 : logo · recherche adaptative · capsule téléphone · Espace client · panier
   Ligne 2 : méga-menu (gauche) · switch TTC/HT (droite)
   Classes créées : préfixe « ts-header- » + .ts-mega-feat
   (+ .ts-header--scrolled, .ts-search-open, .ts-lock posées par refonte.js)
   → Liste blanche UCSS prod : ts-header-*, ts-mega-* , ts-search-open, ts-lock,
     elementor-location-header, e-search-*, wdevs-tax-switch*, elementor-menu-cart*
   Palette : texte #0A2540 · secondaire #4A5A70 · marque #044BAA · accent #006DFF
   =========================================================================== */

/* ---------- 1. Enveloppe sticky + bulle flottante ---------- */
.elementor-location-header {
	position: sticky;
	top: 0;
	z-index: 990;
	padding: 14px clamp(12px, 3vw, 28px) 10px;
	pointer-events: none; /* la zone transparente laisse passer les clics */
}
/* connecté à l'admin WP : rester sous la barre d'admin */
.admin-bar .elementor-location-header { top: 32px; }
@media (max-width: 782px) {
	.admin-bar .elementor-location-header { top: 46px; }
}
.elementor-location-header .ts-header-bubble {
	pointer-events: auto;
	position: relative;
	max-width: min(var(--ts-shell-max, 1880px), 100%); /* suit la largeur de page (v3) */
	margin: 0 auto;
	border-radius: 16px;
	border: 1px solid rgba(10, 37, 64, 0.07);
	box-shadow: 0 10px 34px rgba(10, 37, 64, 0.10), 0 2px 8px rgba(10, 37, 64, 0.05);
}

/* ---------- 2. LIGNE 1 : logo · recherche · téléphone · compte · panier ---------- */
.elementor-location-header .ts-header-mainbar { transition: padding .3s ease; }

/* Logo : jamais écrasé (largeurs Elementor : 240 / 185 / 148) */
.elementor-location-header .ts-header-logo {
	flex-shrink: 0;
	transition: width .3s ease;
}
.elementor-location-header .ts-header-logo img { display: block; width: 100%; height: auto; }
/* centrage vertical exact : le lien autour du logo génère sinon un espace
   de ligne fantôme (~8 px) sous l'image qui « surélève » le logo */
.elementor-location-header .ts-header-logo .elementor-widget-container {
	display: flex;
	align-items: center;
	line-height: 0;
}
.elementor-location-header .ts-header-logo a { display: block; }

/* Recherche : largeur adaptative (grandit avec l'écran, bornée) */
.elementor-location-header .ts-header-search-wrap {
	flex: 1 1 auto;
	min-width: 220px;
	max-width: 640px;
	width: auto;
	--width: auto;
}

/* Grands écrans (v3) : la bulle suit la page → l'espace suppl. se répartit
   entre les widgets (gaps fluides), la recherche respire, tailles à peine
   augmentées. Tablette/mobile (≤1105 px) strictement inchangés. */
@media (min-width: 1440px) {
	.elementor-location-header .ts-header-mainbar { gap: clamp(14px, 1.4vw, 30px) !important; }
	.elementor-location-header .ts-header-search-wrap { max-width: clamp(640px, 40vw, 800px); }
	.ts-header-nav .elementor-nav-menu--main .elementor-nav-menu { gap: clamp(2px, 0.6vw, 14px); }
}
@media (min-width: 1700px) {
	.ts-header-nav .elementor-nav-menu--main .elementor-item { font-size: 15.5px; padding: 9px 16px !important; }
	.ts-header-phone a { font-size: 14.5px; }
	.ts-header-switch .wdevs-tax-switch-label-text { font-size: 13.5px; }
}
.ts-header-search-wrap .elementor-widget-search { width: 100%; }
.ts-header-search .e-search-input {
	background: #F4F6F9 !important;
	border: none !important;
	border-radius: 12px !important;
	padding: 13px 16px !important;
	font-size: 15px !important;
	color: #0A2540 !important;
}
.ts-header-search .e-search-input:focus { background: #EDF2F9 !important; }
.ts-header-search .e-search-submit {
	border-radius: 12px !important;
	background: #044BAA !important;
	padding: 13px 18px !important;
	transition: background-color .2s ease;
}
.ts-header-search .e-search-submit:hover { background: #006DFF !important; }

/* Capsule téléphone (drapeau + numéro) — pousse le groupe de droite */
.elementor-location-header .ts-header-phone-pill {
	margin-left: auto;
	width: auto;
	--width: auto;
	flex-shrink: 0;
	background: #F2F6FB;
	border-radius: 999px;
	padding: 9px 18px;
}
.ts-header-flag { width: auto; }
.ts-header-flag img { display: block; width: 20px; height: auto; border-radius: 3px; }
/* même espace de ligne fantôme que le logo (image dans un lien) → centrage exact */
.ts-header-flag .elementor-widget-container {
	display: flex;
	align-items: center;
	line-height: 0;
}
.ts-header-flag a { display: block; }
.ts-header-phone { width: auto; }
.ts-header-phone a {
	font-size: 14px;
	font-weight: 600;
	color: #0A2540 !important;
	text-decoration: none;
	white-space: nowrap;
	transition: color .2s ease;
}
.ts-header-phone a:hover { color: #044BAA !important; }

/* Espace client : fond marqué, marge interne généreuse */
.ts-header-account { width: auto; flex-shrink: 0; }
.ts-header-account .elementor-button {
	background: #044BAA;
	color: #FFFFFF;
	border-radius: 12px;
	padding: 14px 22px;
	font-size: 14px;
	font-weight: 600;
	transition: background-color .2s ease;
}
.ts-header-account .elementor-button:hover { background: #006DFF; color: #FFFFFF; }

/* Panier : fond distinct, padding généreux, arrondi raisonnable */
.ts-header-cart { width: auto !important; flex-shrink: 0; }
.ts-header-cart .elementor-menu-cart__toggle_button {
	border-radius: 12px !important;
	padding: 12px 20px !important;
	background: #F2F6FB !important;
	border: 1px solid rgba(10, 37, 64, 0.08) !important;
	transition: background-color .2s ease, border-color .2s ease;
}
.ts-header-cart .elementor-menu-cart__toggle_button:hover {
	background: #EDF3FA !important;
	border-color: rgba(0, 109, 255, 0.35) !important;
}

/* ---------- 3. LIGNE 2 : menu à gauche · switch TTC/HT à droite ---------- */
.elementor-location-header .ts-header-navbar {
	border-top: 1px solid rgba(10, 37, 64, 0.07);
	transition: padding .3s ease;
}
.elementor-location-header .ts-header-nav { width: auto; min-width: 0; }
.ts-header-nav .elementor-nav-menu--main .elementor-nav-menu {
	display: flex;
	align-items: center;
	justify-content: flex-start;
	flex-wrap: nowrap;
	gap: 2px;
}
.ts-header-nav .elementor-nav-menu--main .elementor-item {
	font-size: 15px;
	font-weight: 600;
	color: #0A2540 !important;
	padding: 9px 14px !important;
	border-radius: 999px;
	transition: color .2s ease, background-color .2s ease;
}
.ts-header-nav .elementor-nav-menu--main .elementor-item:hover,
.ts-header-nav .elementor-nav-menu--main .elementor-item:focus,
.ts-header-nav .elementor-nav-menu--main li.highlighted > .elementor-item,
.ts-header-nav .elementor-nav-menu--main li.ts-mega-open > .elementor-item,
.ts-header-nav .elementor-nav-menu--main .elementor-item.elementor-item-active {
	color: #044BAA !important;
	background: rgba(0, 109, 255, 0.07);
}
.ts-header-nav .elementor-nav-menu--main .sub-arrow {
	margin-left: 4px;
	font-size: 10px;
	opacity: .55;
}
@media (min-width: 1106px) and (max-width: 1320px) {
	.ts-header-nav .elementor-nav-menu--main .elementor-item { font-size: 14px; padding: 8px 10px !important; }
}

/* PROMO & PRIX BLOQUÉ — comme sur le site actuel :
   texte coloré au repos → fond coloré au survol */
.ts-header-nav .elementor-nav-menu--main .menu-item-470 > .elementor-item {
	color: #FF0000 !important;
	font-weight: 700;
}
.ts-header-nav .elementor-nav-menu--main .menu-item-470 > .elementor-item:hover,
.ts-header-nav .elementor-nav-menu--main .menu-item-470 > .elementor-item:focus,
.ts-header-nav .elementor-nav-menu--main li.highlighted.menu-item-470 > .elementor-item,
.ts-header-nav .elementor-nav-menu--main li.ts-mega-open.menu-item-470 > .elementor-item {
	background: #FF0000;
	color: #FFFFFF !important;
}
.ts-header-nav .elementor-nav-menu--main .menu-item-12151 > .elementor-item {
	color: #1A1A1A !important;
	font-weight: 700;
}
.ts-header-nav .elementor-nav-menu--main .menu-item-12151 > .elementor-item:hover,
.ts-header-nav .elementor-nav-menu--main .menu-item-12151 > .elementor-item:focus,
.ts-header-nav .elementor-nav-menu--main li.highlighted.menu-item-12151 > .elementor-item,
.ts-header-nav .elementor-nav-menu--main li.ts-mega-open.menu-item-12151 > .elementor-item {
	background: #FFD200;
	color: #1A1A1A !important;
}

/* Switch TTC/HT : redimensionné pour s'harmoniser */
.ts-header-switch { width: auto !important; flex-shrink: 0; }
.ts-header-switch .wdevs-tax-switch { display: flex; align-items: center; gap: 6px; }
.ts-header-switch .wdevs-tax-switch-label { transform: scale(0.82); transform-origin: center; }
.ts-header-switch .wdevs-tax-switch-label-text {
	font-size: 13px;
	font-weight: 600;
	color: #0A2540;
}

/* État compact au défilement (classe posée par refonte.js) */
.ts-header--scrolled .ts-header-mainbar {
	padding-top: 8px !important;
	padding-bottom: 6px !important;
}
.ts-header--scrolled .ts-header-navbar { padding-bottom: 4px !important; }
@media (min-width: 1106px) {
	.ts-header--scrolled .ts-header-logo { width: 195px !important; }
}

/* Ligne 2 escamotable (v3) : on défile vers le BAS → le menu + switch se
   replient dans la bulle (header compact) ; vers le HAUT → ils reviennent.
   Classe .ts-header--menu-hidden posée par refonte.js. Desktop uniquement :
   la pilule tablette/mobile (≤1105 px) est strictement inchangée. */

/* Le repli change la hauteur du header → sans ceci, Chrome « compense » en
   réajustant le scroll (scroll anchoring), ce que le détecteur de direction
   reprendrait pour un défilement → oscillation. Toutes les images du site
   ayant des dimensions explicites (zéro CLS), l'anchoring n'apporte rien ici. */
html { overflow-anchor: none; }

@media (min-width: 1106px) {
	.elementor-location-header .ts-header-navbar {
		max-height: 90px; /* état déplié (hauteur réelle ~52 px, marge de sûreté) */
		transition: max-height .28s ease, opacity .2s ease, transform .25s ease, padding .3s ease;
	}
	.ts-header--menu-hidden .ts-header-navbar {
		max-height: 0;
		opacity: 0;
		transform: translateY(-8px);
		overflow: hidden; /* uniquement à l'état replié : ne clippe jamais les méga-menus */
		pointer-events: none;
		border-top-color: transparent;
		padding-top: 0 !important;
		padding-bottom: 0 !important;
	}
}
@media (prefers-reduced-motion: reduce) {
	.elementor-location-header .ts-header-navbar { transition: none; }
}

/* ---------- 4. Méga-menus (desktop ≥1106 px) ---------- */
@media (min-width: 1106px) {
	.ts-header-nav .elementor-nav-menu--main .menu-item { position: static; }
	/* les panneaux se positionnent par rapport à la BULLE (pas au widget menu) */
	.elementor-location-header .ts-header-nav.elementor-widget { position: static; }
	.elementor-location-header .ts-header-navbar { position: static; }
	.ts-header-nav .elementor-nav-menu--main ul.elementor-nav-menu { position: static; }

	/* Panneau déroulant générique (Rangement, Pack) */
	.ts-header-nav .elementor-nav-menu--main .elementor-nav-menu > .menu-item > .sub-menu {
		position: absolute !important;
		top: calc(100% + 8px) !important;
		left: auto !important;
		width: max-content !important;
		min-width: 240px !important;
		max-width: none !important;
		margin: 0 !important;
		display: block !important;
		background: #FFFFFF;
		border: 1px solid rgba(10, 37, 64, 0.08);
		border-radius: 16px;
		box-shadow: 0 24px 60px rgba(10, 37, 64, 0.16), 0 4px 14px rgba(10, 37, 64, 0.06);
		padding: 14px;
		opacity: 0;
		visibility: hidden;
		transform: translateY(10px);
		pointer-events: none;
		/* le timing d'ouverture/fermeture est piloté par refonte.js (.ts-mega-open) */
		transition: opacity .18s ease, transform .18s ease, visibility 0s linear .18s;
		z-index: 1050;
	}
	/* pont invisible : évite que le panneau se referme entre le lien et lui */
	.ts-header-nav .elementor-nav-menu--main .elementor-nav-menu > .menu-item > .sub-menu::before {
		content: "";
		position: absolute;
		left: 0; right: 0; top: -12px; height: 12px;
	}
	.ts-header-nav .elementor-nav-menu--main .elementor-nav-menu > .menu-item.ts-mega-open > .sub-menu,
	.ts-header-nav .elementor-nav-menu--main .elementor-nav-menu > .menu-item:focus-within > .sub-menu {
		opacity: 1;
		visibility: visible;
		transform: translateY(0);
		pointer-events: auto;
		transition-delay: 0s;
	}

	/* pas de chevron dans les panneaux (résidu du widget) */
	.ts-header-nav .elementor-nav-menu--main .sub-menu .sub-arrow { display: none; }

	/* Liens des panneaux */
	.ts-header-nav .elementor-nav-menu--main .sub-menu a.elementor-sub-item {
		display: block;
		padding: 9px 12px !important;
		border-radius: 10px;
		font-size: 14px;
		font-weight: 500;
		color: #0A2540 !important;
		background: transparent !important;
		transition: color .2s ease, background-color .2s ease;
	}
	.ts-header-nav .elementor-nav-menu--main .sub-menu a.elementor-sub-item:hover,
	.ts-header-nav .elementor-nav-menu--main .sub-menu a.elementor-sub-item:focus {
		color: #044BAA !important;
		background: rgba(0, 109, 255, 0.06) !important;
	}

	/* — MÉGA-PANNEAU « Siège » : 2 colonnes de liens + carte vedette — */
	.ts-header-nav .elementor-nav-menu--main .elementor-nav-menu > .menu-item-381 > .sub-menu {
		display: grid !important;
		grid-template-columns: 230px 230px 300px;
		grid-template-rows: repeat(3, auto) 1fr;
		gap: 4px 18px;
		padding: 22px;
		left: 14px !important; /* aligné sur le début du menu */
	}
	.ts-header-nav .elementor-nav-menu--main .menu-item-381 > .sub-menu > li:nth-child(1) { grid-area: 1 / 1; }
	.ts-header-nav .elementor-nav-menu--main .menu-item-381 > .sub-menu > li:nth-child(2) { grid-area: 2 / 1; }
	.ts-header-nav .elementor-nav-menu--main .menu-item-381 > .sub-menu > li:nth-child(3) { grid-area: 3 / 1; }
	.ts-header-nav .elementor-nav-menu--main .menu-item-381 > .sub-menu > li:nth-child(4) { grid-area: 1 / 2; }
	.ts-header-nav .elementor-nav-menu--main .menu-item-381 > .sub-menu > li:nth-child(5) { grid-area: 2 / 2; }
	.ts-header-nav .elementor-nav-menu--main .menu-item-381 > .sub-menu > li:nth-child(6) { grid-area: 3 / 2; }
	.ts-header-nav .elementor-nav-menu--main .menu-item-381 > .sub-menu > .ts-mega-feat {
		grid-column: 3;
		grid-row: 1 / -1;
	}

	/* — MÉGA-PANNEAU « Accessoires » : liens + colonne Pièces détachées + vedette — */
	.ts-header-nav .elementor-nav-menu--main .elementor-nav-menu > .menu-item-365 > .sub-menu {
		display: grid !important;
		grid-template-columns: 250px 260px 300px;
		grid-template-rows: repeat(5, auto) 1fr;
		gap: 4px 18px;
		padding: 22px;
		left: 14px !important; /* aligné sur le début du menu */
	}
	.ts-header-nav .elementor-nav-menu--main .menu-item-365 > .sub-menu > li { grid-column: 1; }
	.ts-header-nav .elementor-nav-menu--main .menu-item-365 > .sub-menu > li.menu-item-367 {
		grid-column: 2;
		grid-row: 1 / -1;
	}
	.ts-header-nav .elementor-nav-menu--main .menu-item-365 > .sub-menu > li.ts-mega-feat {
		grid-column: 3;
		grid-row: 1 / -1;
	}

	/* « Pièces détachées » = intitulé de colonne + liste toujours dépliée */
	.ts-header-nav .elementor-nav-menu--main .menu-item-367 > a.elementor-sub-item {
		font-size: 12px !important;
		font-weight: 700;
		letter-spacing: .06em;
		text-transform: uppercase;
		color: #4A5A70 !important;
		padding: 9px 12px 4px !important;
	}
	.ts-header-nav .elementor-nav-menu--main .menu-item-367 > a.elementor-sub-item:hover {
		color: #044BAA !important;
		background: transparent !important;
	}
	.ts-header-nav .elementor-nav-menu--main .sub-menu .sub-menu {
		position: static !important;
		display: block !important;
		/* PAS de visibility/opacity/pointer-events forcés ici : la liste
		   hérite de l'état de son panneau parent (sinon elle reste une
		   couche invisible mais cliquable au-dessus des autres panneaux) */
		transform: none !important;
		background: transparent;
		border: 0;
		box-shadow: none;
		padding: 0;
		margin: 0 !important;
		width: auto !important;
		min-width: 0 !important;
	}
}

/* ---------- 5. Carte vedette des méga-menus (injectée par refonte.js) ---------- */
.ts-mega-feat { list-style: none; }
.ts-mega-feat > a {
	display: flex;
	flex-direction: column;
	height: 100%;
	background: linear-gradient(160deg, #F2F6FB, #E9F1FA);
	border-radius: 14px;
	padding: 16px;
	text-decoration: none;
	transition: box-shadow .2s ease, transform .2s ease;
}
.ts-mega-feat > a:hover {
	box-shadow: 0 10px 26px rgba(4, 75, 170, 0.16);
	transform: translateY(-2px);
}
.ts-mega-feat-img {
	display: flex;
	align-items: center;
	justify-content: center;
	height: 150px;
}
.ts-mega-feat-img img {
	max-height: 100%;
	max-width: 100%;
	object-fit: contain;
	border-radius: 10px;
}
.ts-mega-feat-kicker {
	margin-top: 12px;
	font-size: 11px;
	font-weight: 600;
	letter-spacing: .08em;
	text-transform: uppercase;
	color: #4A5A70;
}
.ts-mega-feat-title {
	margin-top: 2px;
	font-size: 16px;
	font-weight: 700;
	color: #0A2540;
}
.ts-mega-feat-cta {
	margin-top: 10px;
	align-self: flex-start;
	font-size: 13px;
	font-weight: 600;
	color: #FFFFFF;
	background: linear-gradient(90deg, #044BAA, #006DFF);
	padding: 7px 14px;
	border-radius: 999px;
}
/* jamais de carte vedette dans le menu déroulant burger
   (nav.…--dropdown = le burger ; les ul.sub-menu portent aussi cette classe) */
nav.elementor-nav-menu--dropdown .ts-mega-feat { display: none; }

/* ---------- 6. Overlay recherche plein écran (réservé au menu mobile, phase 3) ---------- */
.ts-search-open .ts-header-search-wrap {
	--display: flex;
	display: flex !important;
	position: fixed;
	inset: 0;
	z-index: 1200;
	max-width: none;
	background: rgba(247, 250, 253, 0.97);
	flex-direction: column;
	align-items: center;
	justify-content: flex-start;
	padding: 16vh 20px 40px;
	pointer-events: auto;
}
@supports (backdrop-filter: blur(1px)) {
	.ts-search-open .ts-header-search-wrap {
		background: rgba(247, 250, 253, 0.88);
		backdrop-filter: blur(14px) saturate(1.1);
		-webkit-backdrop-filter: blur(14px) saturate(1.1);
	}
}
.ts-search-open .ts-header-search-wrap .elementor-widget-search {
	width: min(720px, 94vw);
	animation: tsFadeUp .28s ease;
}
.ts-header-search-close { display: none; }
.ts-search-open .ts-header-search-close {
	display: flex;
	position: absolute;
	top: 26px;
	right: 28px;
	width: 44px;
	height: 44px;
	align-items: center;
	justify-content: center;
	border-radius: 999px;
	border: 1px solid rgba(10, 37, 64, 0.12);
	background: #FFFFFF;
	color: #0A2540;
	font-size: 22px;
	line-height: 1;
	cursor: pointer;
	transition: color .2s ease, border-color .2s ease;
}
.ts-search-open .ts-header-search-close:hover { color: #044BAA; border-color: rgba(0, 109, 255, 0.3); }
html.ts-lock, body.ts-lock { overflow: hidden !important; }
@keyframes tsFadeUp {
	from { opacity: 0; transform: translateY(14px); }
	to   { opacity: 1; transform: translateY(0); }
}

/* ---------- 7. Tablette & mobile : pilule UNE ligne ---------- */
@media (max-width: 1105.98px) {
	.elementor-location-header { padding: 10px 12px 8px; }
	/* la bulle devient une pilule : les 2 étages fusionnent en 1 ligne */
	.elementor-location-header .ts-header-bubble {
		border-radius: 999px;
		flex-direction: row;
		align-items: center;
		padding: 6px 14px;
		gap: 12px;
	}
	/* de l'air entre le hamburger et le logo */
	.elementor-location-header .ts-header-navbar { margin-right: 10px; }
	/* l'étage menu (burger) passe devant, à gauche */
	.elementor-location-header .ts-header-navbar {
		order: -1;
		width: auto;
		--width: auto;
		flex-shrink: 0;
		border-top: 0;
		padding: 0 !important;
	}
	.elementor-location-header .ts-header-mainbar {
		flex: 1 1 auto;
		width: auto;
		--width: auto;
		min-width: 0;
		padding: 0 !important;
	}
	/* téléphone, Espace client et switch TTC/HT sont DÉPLACÉS par refonte.js
	   dans le menu plein écran ; dans la bulle, on les masque */
	.ts-header-bubble .ts-header-phone-pill,
	.ts-header-bubble .ts-header-account,
	.ts-header-bubble .ts-header-switch { display: none; }

	.ts-header-nav .elementor-menu-toggle {
		width: 44px;
		height: 44px;
		border-radius: 999px;
		border: 1px solid rgba(10, 37, 64, 0.12);
		background: transparent;
		color: #0A2540;
		justify-content: center;
		margin: 0;
	}
	/* menu déroulant natif Elementor : simple secours si JS absent */
	.ts-header-nav nav.elementor-nav-menu--dropdown {
		border-radius: 16px;
		box-shadow: 0 24px 60px rgba(10, 37, 64, 0.16);
		margin-top: 10px;
	}
	html.ts-mmenu-ready .ts-header-nav nav.elementor-nav-menu--dropdown { display: none !important; }

	/* recherche au centre, bornée : libère de l'espace entre les éléments */
	.elementor-location-header .ts-header-mainbar { justify-content: space-between; }
	.elementor-location-header .ts-header-search-wrap {
		flex: 0 1 auto;
		width: 44%;
		min-width: 200px;
		max-width: 460px;
	}
	.ts-header-search .e-search-input { padding: 11px 14px !important; font-size: 14px !important; }
	.ts-header-search .e-search-submit { padding: 11px 14px !important; }

	/* panier compact mais lisible */
	.ts-header-cart .elementor-menu-cart__toggle_button { padding: 10px 16px !important; }
}
@media (max-width: 768px) {
	/* burger à gauche · logo centré · panier à droite ;
	   la recherche vit dans le menu plein écran */
	.elementor-location-header .ts-header-search-wrap { display: none; }
	.ts-header-logo { margin-inline: auto; }
}

/* ---------- 7ter. Correctifs mobile (21/07/2026) ----------------------------
   Constat mesuré : la pilule exigeait 331,5 px de contenu (burger 44 + marge 10
   + gap 12 + logo 148 FIGÉ par Elementor + gap 14 + panier 105,5) pour une place
   disponible de « largeur écran − 54 px ». En dessous de ~386 px de large, les
   conteneurs Elementor (flex-wrap: wrap par défaut) renvoyaient le burger à la
   ligne : pilule sur 2 lignes (375 px) voire 3 (320 px). Les iPhone 390 px ne
   tenaient qu'à 2,5 px près — un panier à 5 chiffres les cassait aussi.
   --------------------------------------------------------------------------- */

/* A. La pilule ne se casse JAMAIS en plusieurs lignes */
@media (max-width: 1105.98px) {
	.elementor-location-header .ts-header-bubble { flex-wrap: nowrap; }
	.elementor-location-header .ts-header-mainbar { flex-wrap: nowrap; min-width: 0; }
	/* la transition de largeur ne sert qu'au compactage desktop ; sur mobile elle
	   ferait « rétrécir » le logo en animation au chargement */
	.elementor-location-header .ts-header-logo { transition: none; }
}

/* B. Mobile : logo fluide (34 % de la largeur d'écran, borné 100 → 148 px)
      + espacements resserrés. !important : le widget Elementor impose width:148px. */
@media (max-width: 768px) {
	.elementor-location-header .ts-header-bubble { gap: 10px; }
	.elementor-location-header .ts-header-navbar { margin-right: 6px; }
	.elementor-location-header .ts-header-mainbar { gap: 10px; }
	.elementor-location-header .ts-header-logo {
		width: clamp(100px, 34vw, 148px) !important;
		max-width: 100%;
	}
	.ts-header-cart { min-width: 0; }
}

/* C. Très petits écrans (≤ 360 px : iPhone SE 1re gén., Android compacts) */
@media (max-width: 360px) {
	.elementor-location-header { padding: 10px 8px 8px; }
	.elementor-location-header .ts-header-bubble { padding: 6px 10px; gap: 8px; }
	.elementor-location-header .ts-header-navbar { margin-right: 4px; }
	.ts-header-nav .elementor-menu-toggle { width: 40px; height: 40px; }
	.ts-header-cart .elementor-menu-cart__toggle_button { padding: 9px 10px !important; }
}

/* D. Overlay recherche : toujours 100 % de la largeur.
      Sans ceci, l'overlay héritait du dimensionnement de la barre de recherche
      tablette (width:44% / min-width:200px / max-width:460px, § 7 ci-dessus, qui
      gagne car écrit APRÈS le § 6) → fenêtre de 200 px collée à gauche. */
.ts-search-open .ts-header-search-wrap {
	width: 100% !important;
	min-width: 0 !important;
	max-width: none !important;
}

/* ---------- 7bis. Menu plein écran (tablette + mobile) — construit par refonte.js ---------- */
.ts-header-mmenu {
	position: fixed;
	inset: 0;
	z-index: 1300;
	background: #FFFFFF;
	display: none;
	flex-direction: column;
	pointer-events: auto;
	overscroll-behavior: contain;
}
html.ts-mmenu-open .ts-header-mmenu { display: flex; animation: tsFadeIn .22s ease; }
@keyframes tsFadeIn { from { opacity: 0; } to { opacity: 1; } }

.ts-header-mmenu-bar {
	display: flex;
	align-items: center;
	justify-content: space-between;
	padding: 12px 18px;
	border-bottom: 1px solid rgba(10, 37, 64, 0.07);
	flex-shrink: 0;
}
.ts-header-mmenu-bar img { display: block; width: 150px; height: auto; }
.ts-header-mmenu-close {
	width: 44px;
	height: 44px;
	display: flex;
	align-items: center;
	justify-content: center;
	border-radius: 999px;
	border: 1px solid rgba(10, 37, 64, 0.12);
	background: #FFFFFF;
	color: #0A2540;
	font-size: 20px;
	line-height: 1;
	cursor: pointer;
}
.ts-header-mmenu-viewport { position: relative; flex: 1; overflow: hidden; }
.ts-header-mmenu-panel {
	position: absolute;
	inset: 0;
	overflow-y: auto;
	-webkit-overflow-scrolling: touch;
	padding: 10px 18px 30px;
	background: #FFFFFF;
	transform: translateX(102%);
	transition: transform .28s cubic-bezier(.4, 0, .2, 1);
}
.ts-header-mmenu-panel.is-active { transform: translateX(0); }
.ts-header-mmenu-panel.is-left { transform: translateX(-24%); }
.ts-header-mmenu-panel ul { list-style: none; margin: 0; padding: 0; }
.ts-header-mmenu-item {
	display: flex;
	align-items: center;
	justify-content: space-between;
	width: 100%;
	padding: 15px 10px;
	border: 0;
	background: none;
	cursor: pointer;
	font-family: inherit;
	font-size: 17px;
	font-weight: 600;
	color: #0A2540;
	text-decoration: none;
	border-bottom: 1px solid rgba(10, 37, 64, 0.06);
	text-align: left;
}
.ts-header-mmenu-item:active { background: rgba(0, 109, 255, 0.05); }
.ts-header-mmenu-item .ts-chevron { color: #4A5A70; font-size: 15px; line-height: 1; }
/* les liens du menu gardent le bleu-nuit charte (le Kit colore les <a> en bleu) */
.ts-header-mmenu a.ts-header-mmenu-item { color: #0A2540; }
.ts-header-mmenu a.ts-header-mmenu-item--promo { color: #FF0000; }
.ts-header-mmenu a.ts-header-mmenu-item--pb { color: #1A1A1A; }
.ts-header-mmenu a.ts-header-mmenu-all { color: #044BAA; }
.ts-header-mmenu-back {
	display: flex;
	align-items: center;
	gap: 8px;
	border: 0;
	background: none;
	cursor: pointer;
	font-family: inherit;
	padding: 12px 6px;
	font-size: 14px;
	font-weight: 600;
	color: #044BAA;
}
.ts-header-mmenu-heading {
	font-size: 22px;
	font-weight: 700;
	color: #0A2540;
	margin: 2px 10px 10px;
}
.ts-header-mmenu-utils {
	margin-top: 24px;
	display: flex;
	flex-direction: column;
	gap: 12px;
	padding: 0 4px;
}
.ts-header-mmenu-utils .ts-header-account { width: 100%; }
.ts-header-mmenu-utils .ts-header-account .elementor-button {
	display: flex;
	justify-content: center;
	width: 100%;
	padding: 15px;
	font-size: 15px;
}
.ts-header-mmenu-utils .ts-header-phone-pill {
	display: flex;
	flex-direction: row; /* hors contexte Elementor, l'e-con retombe en colonne */
	align-items: center;
	justify-content: center;
	gap: 8px;
	background: #F2F6FB;
	border-radius: 12px;
	padding: 13px;
	margin: 0;
}
.ts-header-mmenu-search,
.ts-header-mmenu-contact {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: 8px;
	width: 100%;
	padding: 14px;
	border-radius: 12px;
	border: 1px solid rgba(10, 37, 64, 0.12);
	background: #FFFFFF;
	font-family: inherit;
	font-size: 15px;
	font-weight: 600;
	color: #0A2540;
	text-decoration: none;
	cursor: pointer;
}
/* sur tablette la recherche est déjà dans la pilule */
@media (min-width: 769px) { .ts-header-mmenu-search { display: none; } }
.ts-header-mmenu-switchrow {
	display: flex;
	align-items: center;
	justify-content: space-between;
	padding: 8px 6px 0;
	font-size: 14px;
	font-weight: 600;
	color: #4A5A70;
}
.ts-header-mmenu-switchrow .ts-header-switch { width: auto !important; }
@media (min-width: 1106px) { .ts-header-mmenu { display: none !important; } }
@media (prefers-reduced-motion: reduce) { .ts-header-mmenu-panel { transition: none; } }

/* ---------- 8. Accessibilité : animations réduites ---------- */
@media (prefers-reduced-motion: reduce) {
	.elementor-location-header,
	.elementor-location-header *,
	.ts-header-search-wrap,
	.ts-mega-feat > a {
		transition: none !important;
		animation: none !important;
	}
}

/* ===========================================================================
   ÉTAPE 5 — FOOTER REFONDU (template 10930)
   ---------------------------------------------------------------------------
   Bande réassurance claire → carte newsletter en dégradé (badge −5 % animé,
   à cheval sur la transition clair/nuit) → bleu nuit #0A2540 pleine largeur
   (logo blanc, colonnes, carte contact « verre », réseaux, paiements en
   pastilles, barre légale).
   Classes créées : préfixe « ts-footer- » (liste blanche UCSS prod).
   =========================================================================== */

/* ---------- 1. Bande réassurance (fond clair) ---------- */
.ts-footer-trust { padding-top: 34px; padding-bottom: 34px; }
.ts-footer-trust > .e-con {
	background: #FFFFFF;
	border: 1px solid rgba(10, 37, 64, 0.06);
	border-radius: 16px;
	box-shadow: 0 6px 18px rgba(10, 37, 64, 0.05);
	padding: 20px 12px;
	transition: transform .25s ease, box-shadow .25s ease;
}
.ts-footer-trust > .e-con:hover {
	transform: translateY(-3px);
	box-shadow: 0 14px 30px rgba(10, 37, 64, 0.10);
}
.ts-footer-trust .elementor-icon {
	background: linear-gradient(135deg, #044BAA, #006DFF);
	border-radius: 14px;
	padding: 13px;
	color: #FFFFFF !important;
	fill: #FFFFFF;
	font-size: 20px;
	transition: none;
}
.ts-footer-trust .elementor-heading-title {
	font-size: 15px !important;
	font-weight: 700;
	color: #0A2540 !important;
}
.ts-footer-trust .elementor-widget-text-editor { color: #4A5A70; font-size: 13px; }

/* ---------- 2. Carte newsletter (dégradé + badge −5 % animé) ---------- */
.ts-footer-news { padding-top: 26px; padding-bottom: 30px; }
.elementor-location-footer .ts-footer-news-card {
	max-width: 1160px;
	margin: 0 auto;
	border-radius: 22px;
	box-shadow: 0 26px 60px rgba(4, 75, 170, 0.35);
	padding: 34px 38px !important;
	position: relative;
	overflow: visible;
}
/* badge « −5 % » : pastille jaune qui flotte doucement (élément injecté
   par refonte.js — un ::before entrerait en collision avec le calque
   overlay natif des conteneurs Elementor) */
.ts-footer-badge {
	position: absolute;
	top: -20px;
	right: 30px;
	z-index: 2;
	background: #FFD200;
	color: #0A2540;
	font-weight: 800;
	font-size: 16px;
	letter-spacing: .02em;
	padding: 11px 18px;
	border-radius: 999px;
	box-shadow: 0 10px 24px rgba(10, 37, 64, 0.28);
	transform: rotate(6deg);
	animation: tsBadgeFloat 3.2s ease-in-out infinite;
	pointer-events: none;
}
@keyframes tsBadgeFloat {
	0%, 100% { transform: rotate(6deg) translateY(0); }
	50%      { transform: rotate(2deg) translateY(-7px); }
}
.ts-footer-news-card .elementor-heading-title { color: #FFFFFF !important; }
.ts-footer-news-card .elementor-widget-text-editor,
.ts-footer-news-card .elementor-widget-text-editor p { color: rgba(255, 255, 255, 0.88); }
.ts-footer-news-card .elementor-widget-text-editor strong { color: #FFD200; }

/* Formulaire : champ blanc + bouton contrasté */
.ts-footer-form .elementor-field-textual {
	background: #FFFFFF !important;
	border: none !important;
	border-radius: 12px !important;
	padding: 14px 16px;
	color: #0A2540 !important;
}
.ts-footer-form .elementor-field-textual::placeholder { color: #6B7C93; }
.ts-footer-form .e-form__buttons .elementor-button {
	background: #0A2540 !important;
	color: #FFFFFF !important;
	border-radius: 12px !important;
	padding: 14px 20px !important;
	font-weight: 600;
	transition: background-color .2s ease, transform .2s ease;
}
.ts-footer-form .e-form__buttons .elementor-button:hover {
	background: #081D33 !important;
	transform: translateY(-1px);
}
/* messages de confirmation/erreur lisibles sur le dégradé */
.ts-footer-form .elementor-message { color: #FFFFFF !important; }

/* Tablette : le formulaire prend toute la largeur de la carte
   (champ 66 % + bouton 33 % restent sur une seule ligne) */
@media (max-width: 1105.98px) {
	.ts-footer-news-card .ts-footer-form { width: 100% !important; max-width: none; }
}
/* Mobile : carte empilée, champ et bouton pleine largeur */
@media (max-width: 768px) {
	.elementor-location-footer .ts-footer-news-card {
		padding: 28px 20px 30px !important;
		flex-direction: column !important; /* la règle responsive Elementor est plus spécifique */
		height: auto !important;
		min-height: 0 !important; /* la carte grandit avec son contenu */
	}
	/* column+wrap avec hauteur contrainte = le formulaire partait dans une
	   2e colonne hors de la carte → on interdit le wrap et on laisse grandir */
	.ts-footer-news-card > .e-con-inner {
		flex-wrap: nowrap !important;
		height: auto !important;
		min-height: 0 !important;
		/* le gap Elementor est en % (10%) : circulaire en hauteur auto,
		   les enfants débordaient de la carte → gap fixe */
		gap: 16px !important;
	}
	.ts-footer-news-card .ts-footer-form { margin-top: 14px; }
	.ts-footer-news-card > .e-con, .ts-footer-news-card .e-con-inner > .e-con { width: 100% !important; --width: 100%; }
	.ts-footer-form .elementor-field-group { width: 100% !important; margin-bottom: 10px; }
	.ts-footer-form .e-form__buttons .elementor-button { width: 100%; justify-content: center; }
	.ts-footer-badge { top: -16px; right: 16px; font-size: 14px; padding: 9px 15px; }
}

/* ---------- 3. Colonnes sur bleu nuit ---------- */
.ts-footer-cols { padding-top: 52px; padding-bottom: 28px; }
/* (section logo supprimée à la demande d'Ivane — validation du 15/07) */
.ts-footer-cols .elementor-widget-heading .elementor-heading-title {
	font-size: 13px !important;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: .1em;
	color: #8FA3BC !important;
}
/* liens : gris bleuté → blanc + petit glissement */
.ts-footer-cols .elementor-widget-button:not(.ts-footer-phone) .elementor-button {
	background: transparent !important;
	color: #C7D5E8 !important;
	font-size: 14px !important;
	line-height: 1.7 !important;
	padding: 4px 0 !important;
	border-radius: 0;
	transition: color .2s ease, transform .2s ease;
}
.ts-footer-cols .elementor-widget-button:not(.ts-footer-phone) .elementor-button:hover {
	color: #FFFFFF !important;
	transform: translateX(4px);
}
.ts-footer-cols .elementor-animation-shrink:hover,
.ts-footer-cols .elementor-animation-shrink:focus { transform: translateX(4px); }

/* Carte contact « verre » */
.elementor-location-footer .ts-footer-contact {
	background: rgba(255, 255, 255, 0.06) !important;
	border: 1px solid rgba(255, 255, 255, 0.14);
	border-radius: 18px;
	padding: 26px 22px;
}
.ts-footer-contact .ts-footer-phone .elementor-button {
	background: transparent !important;
	color: #FFFFFF !important;
	font-size: 21px !important;
	font-weight: 700 !important;
	padding: 0 !important;
	transition: color .2s ease;
}
.ts-footer-contact .ts-footer-phone .elementor-button:hover { color: #FFD200 !important; }
.ts-footer-contact .elementor-widget-text-editor,
.ts-footer-contact .elementor-widget-text-editor p { color: #B8C7DA; font-size: 13px; }
.ts-footer-contact .elementor-widget-text-editor a { color: #FFFFFF; }
.ts-footer-contact .elementor-divider-separator { border-color: rgba(255, 255, 255, 0.15) !important; }

/* ---------- 4. Réseaux sociaux + paiements ---------- */
.ts-footer-social { padding-bottom: 26px; }
.ts-footer-social .elementor-divider-separator { border-color: rgba(255, 255, 255, 0.10) !important; }
.ts-footer-social .elementor-widget-heading .elementor-heading-title {
	color: #FFFFFF !important;
	font-size: 16px !important;
	font-weight: 700;
}
.ts-footer-sn a.elementor-social-icon {
	background: transparent !important;
	border: 1px solid rgba(255, 255, 255, 0.28) !important;
	border-radius: 12px !important;
	width: 44px !important;
	height: 44px !important;
	display: inline-flex !important;
	align-items: center;
	justify-content: center;
	font-size: 17px !important;
	transition: background .25s ease, border-color .25s ease, transform .25s ease;
}
.ts-footer-sn a.elementor-social-icon:hover {
	background: linear-gradient(135deg, #044BAA, #006DFF) !important;
	border-color: transparent !important;
	transform: translateY(-2px);
}
/* les couleurs par item du widget sont inline → !important nécessaire */
.ts-footer-sn a.elementor-social-icon i { color: #FFFFFF !important; }
.ts-footer-sn a.elementor-social-icon svg { fill: #FFFFFF !important; }

/* Paiements : pastilles blanches uniformes (les visuels bruts deviennent des puces) */
.ts-footer-pay .elementor-gallery__container {
	display: flex !important;
	flex-wrap: wrap;
	gap: 10px;
	justify-content: flex-end;
	height: auto !important;
}
.ts-footer-pay .e-gallery-item {
	width: 92px;
	flex: 0 0 auto;
	position: static !important; /* neutralise le placement absolu du widget galerie */
}
@media (max-width: 768px) {
	.ts-footer-pay .elementor-gallery__container { justify-content: center; }
}
.ts-footer-pay .e-gallery-item {
	background: #FFFFFF;
	border-radius: 10px;
	overflow: hidden;
	box-shadow: 0 3px 10px rgba(0, 0, 0, 0.22);
	transition: transform .2s ease;
	padding: 4px 8px; /* la marge interne se met sur l'item : le ratio du
	                     widget galerie vit dans le padding-bottom de l'image */
}
.ts-footer-pay .e-gallery-item:hover { transform: translateY(-2px); }
.ts-footer-pay .e-gallery-image {
	background-size: contain !important;
	background-color: #FFFFFF;
}

/* ---------- 5. Bouton « remonter » + barre légale ---------- */
.ts-footer-totop .elementor-button {
	background: rgba(255, 255, 255, 0.08) !important;
	border: 1px solid rgba(255, 255, 255, 0.28);
	border-radius: 999px !important;
	box-shadow: none !important;
	transition: background .25s ease, border-color .25s ease;
}
.ts-footer-totop .elementor-button:hover {
	background: linear-gradient(135deg, #044BAA, #006DFF) !important;
	border-color: transparent;
	box-shadow: 0 8px 20px rgba(0, 109, 255, 0.35) !important;
}
.elementor-location-footer .ts-footer-bottom {
	border-top: 1px solid rgba(255, 255, 255, 0.08);
	padding-top: 18px;
	padding-bottom: 20px;
}
.ts-footer-bottom .elementor-widget-text-editor,
.ts-footer-bottom .elementor-widget-text-editor p {
	color: #8FA3BC;
	font-size: 13px;
	text-align: center;
}

/* ---------- 6. Animations réduites ---------- */
@media (prefers-reduced-motion: reduce) {
	.ts-footer-badge,
	.ts-footer-trust > .e-con,
	.ts-footer-sn a.elementor-social-icon,
	.ts-footer-pay .e-gallery-item {
		animation: none !important;
		transition: none !important;
	}
}


/* ===========================================================================
   ÉTAPE 6 — ACCUEIL REFONDU (page 83)
   ---------------------------------------------------------------------------
   10 sections : hero carrousel · réassurance · sélection à onglets · double
   porte · quiz · bento catégories · marques défilantes · pourquoi/climat ·
   avis · blog. Markup dans des widgets HTML Elementor, comportements dans
   refonte.js (module ACCUEIL), moteur Woo intact (cartes produit natives).

   Classes créées (liste blanche UCSS prod) :
   ts-home-sec, ts-home-sec--tight, ts-home-sec--band, ts-home-title,
   ts-eyebrow, ts-btn, ts-btn-ghost, ts-sr-only,
   ts-hero*, ts-trust*, ts-tabs*, ts-tab*, ts-shop*, ts-doors*, ts-door*,
   ts-quiz*, ts-bento*, ts-marquee*, ts-why*, ts-faq*, ts-climate*,
   ts-reviews*, ts-review*, ts-blog-head
   Palette : texte #0A2540 · marque #044BAA · accent #006DFF · sec. #4A5A70
   Codes existants conservés : jaune #FFD200 (prix bloqué) · rouge #FF0000 (promo)
   =========================================================================== */

/* ---------- 0. Socle commun des sections ---------- */

/* Chaque section top-level est full-width ; le contenu est ramené à 1400 px
   (aligné sur la bulle du header), les fonds de bande restent pleine largeur */
.e-con.ts-home-sec {
	padding-block: clamp(44px, 6vw, 88px); /* respiration généreuse entre sections */
	padding-inline: clamp(12px, 3vw, 28px); /* identique à l'enveloppe de la bulle header → grille 1400 alignée */
}
.ts-home-sec > .elementor-element {
	width: 100%;
	/* même largeur que la bulle header ; !important : Elementor pose sinon
	   un max-width:100% plus fort sur les enfants de conteneur */
	max-width: min(var(--ts-shell-max, 1880px), 100%) !important;
	margin-inline: auto;
}
.e-con.ts-home-sec--tight { padding-block: clamp(16px, 2.5vw, 30px); }
.e-con.ts-home-sec--band  { background: linear-gradient(180deg, #F6FAFF 0%, #EEF5FE 100%); }

/* Rendu asynchrone : les sections sous la ligne de flottaison ne sont
   calculées/peintes par le navigateur qu'à l'approche du viewport
   (contenu toujours présent dans le HTML → SEO intact) */
.ts-home-doors-sec,
.ts-home-bento-sec,
.ts-home-brands,
.ts-home-why-sec,
.ts-home-reviews-sec,
.ts-home-blog-sec {
	content-visibility: auto;
	contain-intrinsic-size: auto 700px;
}

/* Filet de sécurité charte : aucun survol de lien ne doit sortir des bleus.
   ⚠️ Les boutons d'achat des cartes produit en sont EXCLUS : ce sont des liens
   `a.button` dont le fond est déjà bleu. Les repeindre en bleu au survol
   faisait littéralement disparaître leur texte (bleu sur bleu). */
.ts-home-sec a:hover { color: #006DFF; }
.ts-shop-panel li.product a:not(.button):hover,
.ts-shop-panel li.product a:not(.button):hover h2,
.ts-shop-panel li.product a:not(.button):hover .woocommerce-loop-product__title { color: #006DFF !important; }

/* le libellé du bouton d'achat reste blanc dans TOUS les états */
.ts-shop-panel li.product a.button,
.ts-shop-panel li.product a.button:hover,
.ts-shop-panel li.product a.button:focus,
.ts-shop-panel li.product a.button:active,
.ts-shop-panel li.product a.button:visited { color: #FFFFFF !important; }

/* Titre de section (widget Titre Elementor, classe ts-home-title) */
.ts-home-title .elementor-heading-title {
	font-family: "Montserrat", sans-serif !important;
	font-size: clamp(24px, 3vw, 36px) !important;
	font-weight: 800 !important;
	letter-spacing: -0.5px;
	line-height: 1.15;
	text-align: center;
	color: #0A2540;
}
.ts-home-title { text-align: center; }

/* Petit sur-titre capsule */
.ts-eyebrow {
	display: inline-flex;
	align-items: center;
	gap: 7px;
	background: rgba(4, 75, 170, 0.08);
	color: #044BAA;
	font-size: 12.5px;
	font-weight: 700;
	letter-spacing: 0.6px;
	text-transform: uppercase;
	border-radius: 999px;
	padding: 6px 14px;
	margin: 0 0 14px;
}

/* Boutons génériques de la refonte */
.ts-btn,
.ts-btn-ghost {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 8px;
	font-family: "Montserrat", sans-serif;
	font-size: 15px;
	font-weight: 700;
	line-height: 1;
	border-radius: 999px;
	padding: 14px 28px;
	text-decoration: none !important;
	transition: transform .2s ease, box-shadow .2s ease, background-color .2s ease, color .2s ease;
}
.ts-btn {
	background: linear-gradient(95deg, #044BAA, #006DFF);
	color: #FFFFFF !important;
	box-shadow: 0 8px 20px rgba(4, 75, 170, 0.25);
}
.ts-btn:hover { transform: translateY(-2px); box-shadow: 0 12px 26px rgba(0, 109, 255, 0.32); color: #FFFFFF !important; }
.ts-btn-ghost {
	background: #FFFFFF;
	color: #044BAA !important;
	border: 1.5px solid rgba(4, 75, 170, 0.25);
}
.ts-btn-ghost:hover { border-color: #006DFF; color: #006DFF !important; transform: translateY(-2px); box-shadow: 0 10px 22px rgba(10, 37, 64, 0.10); }

/* Texte accessible aux lecteurs d'écran uniquement */
.ts-sr-only {
	position: absolute;
	width: 1px; height: 1px;
	margin: -1px; padding: 0;
	overflow: hidden;
	clip: rect(0 0 0 0);
	white-space: nowrap;
	border: 0;
}

/* ---------- 1. HERO — carrousel de bannières ---------- */

.ts-hero { position: relative; }
.ts-hero-track {
	display: flex;
	overflow-x: auto;
	scroll-snap-type: x mandatory;
	overscroll-behavior-x: contain;
	border-radius: clamp(14px, 2vw, 22px);
	scrollbar-width: none;
	box-shadow: 0 14px 38px rgba(10, 37, 64, 0.12);
}
.ts-hero-track::-webkit-scrollbar { display: none; }
.ts-hero-slide {
	flex: 0 0 100%;
	min-width: 100%;
	scroll-snap-align: start;
	scroll-snap-stop: always;
	display: block;
	line-height: 0; /* pas d'espace fantôme sous l'image */
}
.ts-hero-slide img {
	display: block;
	width: 100%;
	height: auto;
	aspect-ratio: 2.8 / 1; /* zéro CLS : le ratio est réservé avant chargement */
	object-fit: cover;
}
@media (max-width: 768px) {
	.ts-hero-slide img { aspect-ratio: 1 / 1; } /* visuel carré dédié mobile */
}

/* Navigation : points-progression au centre, flèches à droite (style sobre) */
.ts-hero-nav {
	position: absolute;
	inset-inline: 0;
	bottom: clamp(10px, 2vw, 18px);
	display: flex;
	align-items: center;
	justify-content: center;
	pointer-events: none; /* seuls les contrôles sont cliquables */
	padding-inline: clamp(10px, 2vw, 18px);
}
.ts-hero-dots {
	display: flex;
	align-items: center;
	gap: 8px;
	pointer-events: auto;
	background: rgba(10, 37, 64, 0.38);
	border-radius: 999px;
	padding: 7px 10px;
}
.ts-hero-dot {
	position: relative;
	width: 9px; height: 9px;
	border-radius: 999px;
	background: rgba(255, 255, 255, 0.55) !important; /* !important : blinde contre tout style bouton global */
	border: 0;
	padding: 0;
	cursor: pointer;
	overflow: hidden;
	transition: width .35s ease, background-color .25s ease;
}
.ts-hero-dot:hover { background: rgba(255, 255, 255, 0.85) !important; }
/* Le point actif s'allonge en pilule, la barre de progression se remplit dedans */
.ts-hero-dot.is-active { width: 44px; background: rgba(255, 255, 255, 0.35) !important; }
.ts-hero-dot-fill {
	position: absolute;
	inset: 0;
	border-radius: 999px;
	background: #FFFFFF;
	transform: scaleX(0);
	transform-origin: left center;
	visibility: hidden;
}
.ts-hero-dot.is-active .ts-hero-dot-fill { visibility: visible; }
.ts-hero-arrows {
	position: absolute;
	right: clamp(10px, 2vw, 18px);
	bottom: 0;
	display: flex;
	gap: 8px;
	pointer-events: auto;
}
.ts-hero-arrow {
	width: 36px; height: 36px;
	border-radius: 999px;
	border: 0 !important;
	background: rgba(255, 255, 255, 0.92) !important; /* !important : blinde contre tout style bouton global */
	color: #0A2540 !important;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	cursor: pointer;
	padding: 0 !important;
	transition: background-color .2s ease, transform .2s ease, opacity .2s ease;
}
.ts-hero-arrow svg {
	width: 17px; height: 17px;
	display: block;
	fill: currentColor !important;  /* chevrons pleins : visibles quoi qu'il arrive */
	stroke: none !important;
}
.ts-hero-arrow:hover { background: #FFFFFF !important; color: #044BAA !important; transform: translateY(-1px); }
.ts-hero-arrow:disabled { opacity: 0.4; cursor: default; transform: none; }
.ts-hero-dot:focus-visible,
.ts-hero-arrow:focus-visible { outline: 2px solid #FFD200; outline-offset: 2px; }
@media (max-width: 768px) {
	.ts-hero-arrows { display: none; } /* au doigt : swipe naturel */
}

/* ---------- 2. Bande réassurance (rappel compact) ---------- */

.ts-trust {
	display: grid;
	grid-template-columns: repeat(4, 1fr);
	gap: 12px;
}
.ts-trust-item {
	display: flex;
	align-items: center;
	gap: 12px;
	background: #FFFFFF;
	border: 1px solid rgba(10, 37, 64, 0.06);
	border-radius: 14px;
	padding: 14px 16px;
	box-shadow: 0 4px 14px rgba(10, 37, 64, 0.04);
	transition: transform .25s ease, box-shadow .25s ease;
}
.ts-trust-item:hover { transform: translateY(-3px); box-shadow: 0 12px 26px rgba(10, 37, 64, 0.09); }
.ts-trust-ico {
	flex-shrink: 0;
	width: 40px; height: 40px;
	border-radius: 12px;
	background: linear-gradient(135deg, #044BAA, #006DFF);
	color: #FFFFFF;
	display: inline-flex;
	align-items: center;
	justify-content: center;
}
.ts-trust-ico svg { width: 20px; height: 20px; }
.ts-trust-txt { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.ts-trust-txt strong { font-size: 14px; font-weight: 700; color: #0A2540; line-height: 1.25; }
.ts-trust-txt em { font-style: normal; font-size: 12.5px; color: #4A5A70; line-height: 1.3; }
@media (max-width: 1024px) {
	.ts-trust { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 520px) {
	.ts-trust { gap: 8px; }
	.ts-trust-item { flex-direction: column; text-align: center; padding: 12px 8px; gap: 8px; }
	.ts-trust-txt { align-items: center; }
}

/* ---------- 3. Notre sélection — onglets + carrousel produits ---------- */

.ts-tabs-bar {
	display: flex;
	align-items: center;
	justify-content: center; /* regroupé au centre, plus d'éléments éclatés aux extrémités */
	gap: 14px;
	flex-wrap: wrap;
	margin-top: 4px;
}
.ts-tabs {
	display: inline-flex;
	gap: 4px;
	background: #E9F0F9;
	border-radius: 999px;
	padding: 5px;
}
.ts-tab {
	display: inline-flex;
	align-items: center;
	gap: 7px;
	border: 0 !important;
	background: transparent !important; /* !important : blinde contre tout style bouton global */
	color: #4A5A70 !important;
	font-family: "Montserrat", sans-serif;
	font-size: 14px;
	font-weight: 700;
	border-radius: 999px;
	padding: 10px 18px;
	cursor: pointer;
	transition: background-color .2s ease, color .2s ease, box-shadow .2s ease;
	white-space: nowrap;
}
.ts-tab:hover { color: #044BAA !important; }
.ts-tab.is-active {
	background: #FFFFFF !important;
	color: #044BAA !important;
	box-shadow: 0 3px 10px rgba(10, 37, 64, 0.10);
}
.ts-tab:focus-visible { outline: 2px solid #006DFF; outline-offset: 2px; }
/* pastilles des codes couleur existants : rouge = promo, jaune = prix bloqué */
.ts-tab-dot { width: 8px; height: 8px; border-radius: 999px; flex-shrink: 0; }
.ts-tab-dot--promo  { background: #FF0000; }
.ts-tab-dot--bloque { background: #FFD200; }

/* Flèches produits : en surimpression sur les bords du carrousel
   (widget HTML dédié .ts-shop-arrows-wrap posé DANS le panneau produits) */
.ts-shop-arrows-wrap {
	position: absolute !important;
	top: 0;
	bottom: 26px; /* recentre les flèches sur les cartes (zone d'ombre en bas) */
	left: 0;
	right: 0;
	max-width: none !important;
	margin: 0 !important;
	pointer-events: none;
	z-index: 5;
}
.ts-shop-arrows-wrap .elementor-widget-container,
.ts-shop-arrows { height: 100%; }
.ts-shop-arrows {
	display: flex;
	align-items: center;
	justify-content: space-between;
	pointer-events: none;
}
.ts-shop-arrow {
	pointer-events: auto;
	width: 42px; height: 42px;
	margin-inline: -8px; /* mord légèrement sur le bord des cartes */
	border-radius: 999px;
	border: 1px solid rgba(10, 37, 64, 0.10) !important;
	background: #FFFFFF !important; /* !important : blinde contre tout style bouton global */
	color: #044BAA !important;
	box-shadow: 0 6px 18px rgba(10, 37, 64, 0.14);
	display: inline-flex;
	align-items: center;
	justify-content: center;
	cursor: pointer;
	padding: 0 !important;
	transition: color .2s ease, box-shadow .2s ease, opacity .2s ease;
}
.ts-shop-arrow svg {
	width: 17px; height: 17px;
	display: block;
	fill: currentColor !important; /* chevrons pleins : visibles quoi qu'il arrive */
	stroke: none !important;
}
.ts-shop-arrow:hover { color: #006DFF !important; box-shadow: 0 10px 24px rgba(10, 37, 64, 0.20); }
.ts-shop-arrow:disabled { opacity: 0.3; cursor: default; }
.ts-shop-arrow:focus-visible { outline: 2px solid #006DFF; outline-offset: 2px; }
.ts-shop-arrows[hidden] { display: none; }
@media (max-width: 768px) {
	.ts-shop-arrows-wrap { display: none; } /* au doigt : swipe naturel */
}

/* Le widget produits Woo natif devient un carrousel horizontal fluide.
   (spécificité Elementor (0,3,0) + styles inline Woo → !important nécessaires) */
.ts-shop-panel { position: relative; transition: opacity .2s ease; }
.ts-shop-panel ul.products {
	display: flex !important;
	flex-wrap: nowrap !important;
	gap: 18px;
	overflow-x: auto;
	scroll-snap-type: x proximity;
	overscroll-behavior-x: contain;
	/* les pistes défilantes rognent les débordements verticaux : on donne de
	   l'air aux ombres DANS la piste et on compense en bas par une marge
	   négative. Latéralement la piste reste DANS la grille 1400 : les cartes
	   qui défilent se coupent au bord de la grille, jamais au bord de l'écran */
	padding: 16px 6px 46px !important;
	margin: 0 0 -26px !important;
	scrollbar-width: none;
}
.ts-shop-panel ul.products::-webkit-scrollbar { display: none; }
.ts-shop-panel ul.products li.product {
	width: auto !important;
	flex: 0 0 calc((100% - 3 * 18px) / 4) !important;
	margin: 0 !important;
	scroll-snap-align: start;
	background: #FFFFFF;
	border: 1px solid rgba(10, 37, 64, 0.07);
	border-radius: 16px;
	padding: 16px !important;
	transition: transform .25s ease, box-shadow .25s ease;
	display: flex;
	flex-direction: column;
}
.ts-shop-panel ul.products li.product:hover {
	transform: translateY(-4px);
	box-shadow: 0 14px 30px rgba(10, 37, 64, 0.10);
}
.ts-shop-panel ul.products li.product img {
	border-radius: 12px;
	width: 100%;
	height: auto;
}
@media (max-width: 1024px) {
	.ts-shop-panel ul.products li.product { flex-basis: calc((100% - 18px) / 2.4) !important; }
}
@media (max-width: 768px) {
	.ts-shop-panel ul.products { gap: 12px; }
	.ts-shop-panel ul.products li.product { flex-basis: 64% !important; }
	.ts-tabs-bar { justify-content: center; }
	.ts-shop-arrows { display: none; }
	/* onglets compacts : « Tops ventes · Promo · Prix bloqué » tiennent
	   entiers, même sur téléphone étroit (rien de tronqué) */
	.ts-tabs { max-width: 100%; overflow-x: auto; scrollbar-width: none; }
	.ts-tab { font-size: 13px; padding: 9px 12px; gap: 5px; }
	.ts-tab-dot { width: 7px; height: 7px; }
}
@media (max-width: 480px) {
	.ts-tabs { gap: 2px; padding: 4px; }
	.ts-tab { font-size: 12px; padding: 8px 9px; gap: 4px; letter-spacing: -0.1px; }
}
/* état de chargement AJAX (onglets 2 et 3) */
.ts-shop-panel.is-loading ul.products { opacity: 0.35; pointer-events: none; }
.ts-tabs-spin {
	width: 18px; height: 18px;
	border-radius: 999px;
	border: 2.5px solid rgba(4, 75, 170, 0.2);
	border-top-color: #044BAA;
	animation: ts-spin .7s linear infinite;
}
.ts-tabs-spin[hidden] { display: none; }
@keyframes ts-spin { to { transform: rotate(360deg); } }
.ts-shop-more { text-align: center; margin: 4px 0 0; }

/* ---------- 4. Double porte — particulier / professionnel ---------- */

.ts-doors {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: clamp(14px, 2vw, 24px);
}
.ts-door {
	display: flex;
	flex-direction: column;
	gap: 16px;
	border-radius: 20px;
	padding: clamp(24px, 3vw, 38px);
	text-decoration: none !important;
	transition: transform .25s ease, box-shadow .25s ease;
}
.ts-door:hover { transform: translateY(-4px); }
.ts-door--home {
	background: #FFFFFF;
	border: 1px solid rgba(10, 37, 64, 0.08);
	box-shadow: 0 8px 24px rgba(10, 37, 64, 0.06);
}
.ts-door--home:hover { box-shadow: 0 18px 40px rgba(10, 37, 64, 0.12); }
.ts-door--pro {
	background: linear-gradient(150deg, #0A2540 0%, #0D3A6E 60%, #044BAA 100%);
	box-shadow: 0 8px 24px rgba(10, 37, 64, 0.20);
}
.ts-door--pro:hover { box-shadow: 0 18px 44px rgba(10, 37, 64, 0.30); }
.ts-door-ico {
	width: 52px; height: 52px;
	border-radius: 15px;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	flex-shrink: 0;
}
.ts-door-ico svg { width: 26px; height: 26px; }
.ts-door--home .ts-door-ico { background: linear-gradient(135deg, #044BAA, #006DFF); color: #FFFFFF; }
.ts-door--pro .ts-door-ico { background: rgba(255, 255, 255, 0.14); color: #FFD200; }
.ts-door-head { display: flex; flex-direction: column; gap: 3px; }
.ts-door-head strong { font-size: clamp(19px, 2vw, 24px); font-weight: 800; letter-spacing: -0.3px; }
.ts-door-head em { font-style: normal; font-size: 14px; }
.ts-door--home .ts-door-head strong { color: #0A2540; }
.ts-door--home .ts-door-head em { color: #4A5A70; }
.ts-door--pro .ts-door-head strong { color: #FFFFFF; }
.ts-door--pro .ts-door-head em { color: rgba(255, 255, 255, 0.75); }
.ts-door ul {
	list-style: none;
	margin: 0;
	padding: 0;
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: 10px 14px;
}
.ts-door ul li {
	position: relative;
	padding-left: 26px;
	font-size: 14px;
	font-weight: 600;
	line-height: 1.35;
}
.ts-door--home ul li { color: #0A2540; }
.ts-door--pro ul li { color: rgba(255, 255, 255, 0.92); }
.ts-door ul li::before {
	content: "";
	position: absolute;
	left: 0; top: 1px;
	width: 17px; height: 17px;
	border-radius: 999px;
	background-color: currentColor;
	-webkit-mask: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="black" d="M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20Zm-1.2 13.6-3.6-3.6 1.4-1.4 2.2 2.2 4.6-4.6 1.4 1.4-6 6Z"/></svg>') center / contain no-repeat;
	mask: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="black" d="M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20Zm-1.2 13.6-3.6-3.6 1.4-1.4 2.2 2.2 4.6-4.6 1.4 1.4-6 6Z"/></svg>') center / contain no-repeat;
}
.ts-door--home ul li::before { color: #006DFF; }
.ts-door--pro ul li::before { color: #FFD200; }
.ts-door-cta { margin-top: auto; align-self: flex-start; }
.ts-door--pro .ts-door-cta.ts-btn {
	background: #FFFFFF;
	color: #0A2540 !important;
	box-shadow: 0 8px 20px rgba(0, 0, 0, 0.25);
}
.ts-door--pro .ts-door-cta.ts-btn:hover { box-shadow: 0 12px 26px rgba(0, 0, 0, 0.35); }
@media (max-width: 900px) {
	.ts-doors { grid-template-columns: 1fr; }
	.ts-door ul { grid-template-columns: 1fr 1fr; }
}
@media (max-width: 520px) {
	.ts-door ul { grid-template-columns: 1fr; }
}

/* ---------- 5. Quiz wizard — mise en scène ---------- */

/* l'ancre tient compte du header sticky */
#ts-quiz { scroll-margin-top: 130px; }
.ts-quiz-head { text-align: center; max-width: 760px; margin: 0 auto 8px; }
.ts-quiz-title {
	font-family: "Montserrat", sans-serif;
	font-size: clamp(26px, 3.4vw, 40px);
	font-weight: 800;
	letter-spacing: -0.6px;
	line-height: 1.12;
	color: #0A2540;
	margin: 0 0 12px;
}
.ts-quiz-title span {
	background-image: linear-gradient(95deg, #044BAA 0%, #006DFF 100%);
	-webkit-background-clip: text;
	background-clip: text;
	-webkit-text-fill-color: transparent;
	color: #044BAA;
}
@supports not ((-webkit-background-clip: text) or (background-clip: text)) {
	.ts-quiz-title span { background: none; -webkit-text-fill-color: #044BAA; color: #044BAA; }
}
.ts-quiz-sub { font-size: 15.5px; color: #4A5A70; line-height: 1.55; margin: 0 0 18px; }
.ts-quiz-chips {
	list-style: none;
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: 8px;
	margin: 0;
	padding: 0;
}
.ts-quiz-chips li {
	display: inline-flex;
	align-items: center;
	gap: 7px;
	background: #FFFFFF;
	border: 1px solid rgba(4, 75, 170, 0.14);
	color: #044BAA;
	font-size: 13px;
	font-weight: 700;
	border-radius: 999px;
	padding: 8px 15px;
	box-shadow: 0 3px 10px rgba(10, 37, 64, 0.05);
}
.ts-quiz-chips li svg { width: 15px; height: 15px; flex-shrink: 0; }

/* ============================================================
   Quizz — cartes de résultats
   Composant : cible .wordpress-form-wizard-posts-post-* (AUCUN id de page).
   Rendu identique sur l'accueil (page 83) et le guide d'achat (page 328).
   L'ancien CSS « cartes » (page-scopé, tout en !important) a été retiré des
   2 widgets Elementor ; la grille (3 col. desktop / 2 col. mobile) et le
   bouton « Charger plus » restent gérés par le CSS structurel du widget.
   Ces classes sont ajoutées à la liste blanche UCSS de LiteSpeed (résultats
   injectés en AJAX → absents du HTML initial, donc sinon purgés).
   ------------------------------------------------------------
   A. Prix unifié : tout en bleu de marque, ancien prix gris barré, suffixe
      TTC/HT petit en capitales atténué (rendu cohérent par refonte.js).
   B. Hauteurs réservées (titre + prix) → titres, prix et boutons alignés.
   C. Image : aspect-ratio + object-fit cover (fini la zone morte, sans
      déformation). Le réglage plugin « Equal image size » (220 px fixe) est
      désactivé côté réglages pour laisser le ratio respirer.
   ============================================================ */

/* ---- La carte ---- */
.wordpress-form-wizard-posts-post-container {
	display: flex;
	flex-direction: column;
	width: 100%;
	height: 100%;
	background: #FFFFFF;
	border: 1px solid #E0E6ED;
	border-radius: 14px;
	overflow: hidden;
	transition: transform .28s ease, box-shadow .28s ease, border-color .28s ease;
}
.wordpress-form-wizard-posts-post-container:hover {
	transform: translateY(-4px);
	box-shadow: 0 10px 28px rgba(4, 75, 170, 0.12);
	border-color: #C0D0E8;
}

/* ---- C. Image : ratio homogène + cover (plus de zone morte) ---- */
.wordpress-form-wizard-posts-post-image-container {
	position: relative;           /* ancre le badge promo */
	background: #FFFFFF;           /* fond blanc = les visuels produit (sur blanc) sont sans couture */
	overflow: hidden;
	border-bottom: 1px solid #EEF2F7;
}
.wordpress-form-wizard-posts-post-im {
	/* Hauteur DÉFINIE (fluide) et non `aspect-ratio` : une <img> est un élément
	   remplacé, et `height:100%`/`object-fit` ne se résolvent PAS contre une
	   hauteur dérivée d'`aspect-ratio` → l'image reprenait sa taille naturelle
	   (carré) et était rognée en bas. Une hauteur explicite règle le problème et
	   garde des cadres identiques (images alignées). */
	height: clamp(160px, 17vw, 210px);
}
.wordpress-form-wizard-posts-post-im > a {
	display: block;
	width: 100%;
	height: 100%;                 /* se résout : le cadre a une hauteur définie */
}
/* Sélecteur à 2 classes (0,2,0) pour battre la règle du plugin
   `.wordpress-form-wizard-posts-post-image-container img { height:auto }` (0,1,1)
   qui, sinon, laisse l'image à sa hauteur naturelle (carrée) → débordement/rognage. */
.wordpress-form-wizard-posts-post-im .wordpress-form-wizard-responsive-image {
	display: block;
	width: 100%;
	height: 100%;
	box-sizing: border-box;
	padding: 10px;                /* un peu d'air ; sur fond blanc, invisible */
	object-fit: contain;          /* AUCUN rognage : le fauteuil entier est toujours visible */
	object-position: center;
	transition: transform .45s ease;
}
.wordpress-form-wizard-posts-post-container:hover .wordpress-form-wizard-responsive-image {
	transform: scale(1.05);
}

/* ---- Bloc infos : colonne, pour pousser le bouton en bas ---- */
.wordpress-form-wizard-posts-post-info-container {
	display: flex;
	flex-direction: column;
	flex-grow: 1;
	gap: 6px;
	padding: 14px 16px 18px;
	text-align: center;
}

/* ---- Titre : TRONQUÉ à 2 lignes + hauteur réservée → alignement garanti ---- */
.wordpress-form-wizard-posts-post-ti {
	margin: 0;
	font-size: 14px;
	font-weight: 600;
	line-height: 1.4;
	color: #044BAA;
	min-height: 40px;             /* réserve 2 lignes */
	display: -webkit-box;
	-webkit-line-clamp: 2;        /* jamais plus de 2 lignes → titres/prix/boutons alignés */
	-webkit-box-orient: vertical;
	overflow: hidden;
}
.wordpress-form-wizard-posts-post-ti a { color: inherit; text-decoration: none; }
.wordpress-form-wizard-posts-post-ti a:hover { color: #006DFF; }

/* ---- Stock (rare : uniquement stock géré faible) : discret ---- */
.wordpress-form-wizard-posts-post-st {
	font-size: 12px;
	font-weight: 600;
	color: #4A5A70;
	margin: 0;
}

/* ---- B. Prix : hauteur réservée constante + A. traitement unifié ---- */
.wordpress-form-wizard-posts-post-pr {
	display: flex;
	flex-wrap: wrap;
	align-items: baseline;
	align-content: center;
	justify-content: center;
	gap: 2px 8px;
	min-height: 46px;             /* réserve le cas promo 2 lignes → boutons alignés */
	margin: 0;
	font-size: 17px;
	font-weight: 700;
	line-height: 1.3;
	color: #044BAA;
}
/* « À partir de » (tarif dégressif) : plus petit mais MÊME bleu (aucun gris) */
.wordpress-form-wizard-posts-post-pr .tiered-pricing-dynamic-price-wrapper {
	font-size: 13px;
	font-weight: 600;
	color: #044BAA;
}
/* Prix courant ET prix promo : même bleu de marque, même graisse */
.wordpress-form-wizard-posts-post-pr .woocommerce-Price-amount {
	font-size: 17px;
	font-weight: 700;
	color: #044BAA;
}
.wordpress-form-wizard-posts-post-pr ins {
	text-decoration: none;        /* enlève le soulignement natif de <ins> */
	background: none;
}
/* Ancien prix : plus petit + barré, mais MÊME bleu (tout le bloc prix est bleu) */
.wordpress-form-wizard-posts-post-pr del,
.wordpress-form-wizard-posts-post-pr del .woocommerce-Price-amount {
	font-size: 13px;
	font-weight: 500;
	color: #044BAA;
	opacity: 1;                   /* annule l'atténuation native de <del> */
	text-decoration: line-through;
}
/* Suffixe TTC / HT : petit, capitales, MÊME bleu (le plugin tax-switch force
   déjà ce bleu en inline ; on ne fait que reprendre taille/casse). */
.wordpress-form-wizard-posts-post-pr .wts-vat-text {
	font-size: 11px;
	font-weight: 700;
	letter-spacing: .04em;
	text-transform: uppercase;
	color: #044BAA;
}
/* le prix inactif (HT quand on est en TTC, et inversement) reste masqué :
   le mode est piloté par le switch TTC/HT du header */
.wordpress-form-wizard-posts-post-pr .wts-inactive { display: none; }
/* texte lecteur d'écran WooCommerce : reste invisible (pas de doublon visible) */
.wordpress-form-wizard-posts-post-pr .screen-reader-text {
	position: absolute;
	width: 1px; height: 1px;
	padding: 0; margin: -1px;
	overflow: hidden; clip: rect(0, 0, 0, 0);
	white-space: nowrap; border: 0;
}

/* ---- Bouton « Consulter le produit » : collé en bas → boutons alignés ---- */
.wordpress-form-wizard-posts-post-lm {
	margin-top: auto;
	padding-top: 12px;
	text-align: center;
}
.wordpress-form-wizard-posts-post-lm a,
.wordpress-form-wizard-read-more {
	display: block;
	width: 100%;
	box-sizing: border-box;
	padding: 10px 16px;
	border: none;
	border-radius: 8px;
	background: #044BAA;
	color: #FFFFFF;
	font-size: 13px;
	font-weight: 600;
	text-align: center;
	text-decoration: none;
	transition: background-color .25s ease, transform .2s ease, box-shadow .25s ease;
}
.wordpress-form-wizard-posts-post-lm a:hover,
.wordpress-form-wizard-read-more:hover {
	background: #006DFF;
	color: #FFFFFF;
	transform: translateY(-1px);
	box-shadow: 0 6px 16px rgba(0, 109, 255, 0.28);
}

/* ---- A. Badge promo « −X % » (injecté par refonte.js sur les cartes soldées) ----
   Le rouge est le seul accent chaud, concentré ici : les prix restent bleus. */
.ts-quiz-promo-badge {
	position: absolute;
	top: 10px;
	left: 10px;
	z-index: 2;
	padding: 5px 9px;
	border-radius: 999px;
	background: #E4002B;
	color: #FFFFFF;
	font-size: 12px;
	font-weight: 700;
	line-height: 1;
	letter-spacing: .01em;
	box-shadow: 0 3px 10px rgba(228, 0, 43, 0.28);
	pointer-events: none;
}

/* ---- Ajustements mobile (≤ 768 px : grille 2 colonnes du widget) ----
   Objectif : cartes compactes, tout aligné, CTA discret. */
@media (max-width: 768px) {
	.wordpress-form-wizard-posts-post-im { height: 135px; }
	.wordpress-form-wizard-posts-post-info-container { padding: 10px 8px 12px; gap: 4px; }
	.wordpress-form-wizard-posts-post-ti { font-size: 12px; min-height: 32px; }
	.wordpress-form-wizard-posts-post-pr { font-size: 14px; min-height: 42px; gap: 1px 6px; }
	.wordpress-form-wizard-posts-post-pr .woocommerce-Price-amount { font-size: 14px; }
	.wordpress-form-wizard-posts-post-pr .tiered-pricing-dynamic-price-wrapper { font-size: 11px; }
	.wordpress-form-wizard-posts-post-pr del,
	.wordpress-form-wizard-posts-post-pr del .woocommerce-Price-amount { font-size: 11.5px; }
	.wordpress-form-wizard-posts-post-pr .wts-vat-text { font-size: 9.5px; }
	.wordpress-form-wizard-posts-post-lm { padding-top: 8px; }
	.wordpress-form-wizard-posts-post-lm a,
	.wordpress-form-wizard-read-more {
		font-size: 10px;             /* CTA compact : garanti sur UNE seule ligne */
		font-weight: 600;
		padding: 8px 4px;
		border-radius: 7px;
		line-height: 1.2;
		letter-spacing: -0.1px;
		white-space: nowrap;
	}
	.wordpress-form-wizard-posts-post-im .wordpress-form-wizard-responsive-image { padding: 7px; }
	.ts-quiz-promo-badge { top: 7px; left: 7px; padding: 3px 7px; font-size: 10px; }
}

/* ---------- 6. Bento catégories phares ---------- */

.ts-bento {
	display: grid;
	grid-template-columns: repeat(4, 1fr);
	grid-template-areas:
		"siege siege ergo   dir"
		"siege siege rang   acc"
		"pack  pack  gaming gaming";
	grid-auto-rows: clamp(150px, 15vw, 210px);
	gap: clamp(10px, 1.5vw, 18px);
	margin-top: 10px;
}
.ts-bento--siege  { grid-area: siege; }
.ts-bento--ergo   { grid-area: ergo; }
.ts-bento--dir    { grid-area: dir; }
.ts-bento--rang   { grid-area: rang; }
.ts-bento--acc    { grid-area: acc; }
.ts-bento--pack   { grid-area: pack; }
.ts-bento--gaming { grid-area: gaming; }
.ts-bento-cell {
	position: relative;
	display: block;
	border-radius: 18px;
	overflow: hidden;
	line-height: 0;
	background: #EFF4FA;
	box-shadow: 0 6px 18px rgba(10, 37, 64, 0.07);
}
.ts-bento-cell img {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	object-fit: cover;
	transition: transform .45s ease;
}
.ts-bento-cell:hover img { transform: scale(1.045); }
.ts-bento-label {
	position: absolute;
	left: 12px; bottom: 12px;
	display: inline-flex;
	align-items: center;
	gap: 8px;
	background: rgba(255, 255, 255, 0.93);
	color: #0A2540;
	font-size: 14px;
	font-weight: 700;
	line-height: 1.2;
	border-radius: 999px;
	padding: 9px 16px;
	box-shadow: 0 4px 14px rgba(10, 37, 64, 0.14);
	transition: background-color .25s ease, color .25s ease;
}
.ts-bento-label svg { width: 13px; height: 13px; flex-shrink: 0; transition: transform .25s ease; }
.ts-bento-cell:hover .ts-bento-label { background: #044BAA; color: #FFFFFF; }
.ts-bento-cell:hover .ts-bento-label svg { transform: translateX(3px); }
.ts-bento-cell:focus-visible { outline: 3px solid #006DFF; outline-offset: 2px; }
@media (max-width: 1024px) {
	.ts-bento {
		grid-template-columns: 1fr 1fr;
		grid-template-areas:
			"siege siege"
			"ergo  dir"
			"rang  acc"
			"pack  gaming";
		grid-auto-rows: clamp(140px, 22vw, 200px);
	}
}
@media (max-width: 600px) {
	.ts-bento {
		grid-template-columns: 1fr 1fr;
		grid-template-areas:
			"siege  siege"
			"ergo   dir"
			"rang   acc"
			"pack   pack"
			"gaming gaming";
		grid-auto-rows: minmax(120px, 26vw);
	}
	.ts-bento-label { font-size: 12.5px; padding: 7px 12px; left: 8px; bottom: 8px; }
}

/* ---------- 7. Marques défilantes (marquee CSS pur) ---------- */

.ts-marquee {
	overflow: hidden;
	-webkit-mask-image: linear-gradient(90deg, transparent, #000 7%, #000 93%, transparent);
	mask-image: linear-gradient(90deg, transparent, #000 7%, #000 93%, transparent);
	padding-block: 8px;
}
.ts-marquee-track {
	display: flex;
	width: max-content;
	animation: ts-marquee 48s linear infinite;
	will-change: transform;
}
.ts-marquee:hover .ts-marquee-track { animation-play-state: paused; }
.ts-marquee-set { display: flex; gap: clamp(18px, 3vw, 42px); padding-right: clamp(18px, 3vw, 42px); }
.ts-marquee-set a {
	display: flex;
	align-items: center;
	justify-content: center;
	width: clamp(110px, 12vw, 150px);
	height: 78px;
	background: #FFFFFF;
	border: 1px solid rgba(10, 37, 64, 0.07);
	border-radius: 14px;
	line-height: 0; /* pas d'espace fantôme sous l'image */
	flex-shrink: 0;
	transition: border-color .25s ease, box-shadow .25s ease;
}
.ts-marquee-set a:hover { border-color: rgba(0, 109, 255, 0.35); box-shadow: 0 8px 20px rgba(10, 37, 64, 0.08); }
.ts-marquee-set img {
	max-width: 74%;
	max-height: 58px;
	width: auto;
	height: auto;
	object-fit: contain; /* logos en couleur : la section vit, le survol ajoute juste le relief */
}
@keyframes ts-marquee { to { transform: translateX(-50%); } }

/* ---------- 8. Pourquoi Top Siège — FAQ + engagement climat ---------- */

.ts-why {
	display: grid;
	grid-template-columns: 1.25fr 1fr;
	gap: clamp(18px, 2.5vw, 34px);
	align-items: start;
}
.ts-why-faq h2 {
	font-family: "Montserrat", sans-serif;
	font-size: clamp(22px, 2.6vw, 32px);
	font-weight: 800;
	letter-spacing: -0.5px;
	color: #0A2540;
	line-height: 1.15;
	margin: 0 0 18px;
}
.ts-faq {
	background: #FFFFFF;
	border: 1px solid rgba(10, 37, 64, 0.08);
	border-radius: 14px;
	margin-bottom: 10px;
	overflow: hidden;
}
.ts-faq summary {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 14px;
	list-style: none;
	cursor: pointer;
	padding: 16px 18px;
	font-size: 15px;
	font-weight: 700;
	color: #0A2540;
	transition: color .2s ease;
}
.ts-faq summary::-webkit-details-marker { display: none; }
.ts-faq summary:hover { color: #044BAA; }
.ts-faq summary:focus-visible { outline: 2px solid #006DFF; outline-offset: -2px; border-radius: 14px; }
.ts-faq-chev {
	flex-shrink: 0;
	width: 26px; height: 26px;
	border-radius: 999px;
	background: rgba(4, 75, 170, 0.08);
	color: #044BAA;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	transition: transform .25s ease;
}
.ts-faq-chev svg { width: 13px; height: 13px; }
.ts-faq[open] .ts-faq-chev { transform: rotate(180deg); }
.ts-faq-body { padding: 0 18px 18px; font-size: 14.5px; line-height: 1.65; color: #4A5A70; }
.ts-faq-body a { color: #044BAA; font-weight: 600; text-decoration: underline; }
.ts-faq-body a:hover { color: #006DFF; }

/* Carte climat : bleu nuit + scène SVG animée (transform/opacity uniquement) */
.ts-climate {
	position: relative;
	background: linear-gradient(160deg, #0A2540 0%, #0D3A6E 70%, #044BAA 100%);
	border-radius: 20px;
	padding: clamp(24px, 3vw, 34px);
	color: #FFFFFF;
	overflow: hidden;
	box-shadow: 0 14px 34px rgba(10, 37, 64, 0.25);
}
.ts-climate-scene { text-align: center; margin-bottom: 10px; line-height: 0; }
.ts-climate-scene svg { width: min(190px, 50%); height: auto; }
.ts-climate-leaf { animation: ts-leaf 5s ease-in-out infinite; transform-origin: center; opacity: 0.9; }
.ts-climate-leaf--2 { animation-delay: 1.6s; }
.ts-climate-leaf--3 { animation-delay: 3.2s; }
@keyframes ts-leaf {
	0%, 100% { transform: translateY(0) rotate(0deg); opacity: 0.9; }
	50%      { transform: translateY(-9px) rotate(7deg); opacity: 1; }
}
.ts-climate-globe { animation: ts-breathe 7s ease-in-out infinite; transform-origin: center; }
@keyframes ts-breathe {
	0%, 100% { transform: scale(1); }
	50%      { transform: scale(1.035); }
}
.ts-climate-kicker {
	font-size: 12px;
	font-weight: 700;
	letter-spacing: 1.2px;
	text-transform: uppercase;
	color: #9BE8C2;
	margin: 0 0 8px;
}
.ts-climate-big {
	font-size: clamp(19px, 2vw, 23px);
	font-weight: 800;
	line-height: 1.3;
	letter-spacing: -0.3px;
	margin: 0 0 10px;
	color: #FFFFFF;
}
.ts-climate-big strong { color: #9BE8C2; font-size: 1.35em; font-weight: 800; }
.ts-climate-txt { font-size: 14px; line-height: 1.6; color: rgba(255, 255, 255, 0.82); margin: 0 0 18px; }
.ts-climate-txt a { color: #9BE8C2; font-weight: 700; text-decoration: underline; }
/* Carte « on décroche » : sous la FAQ (ton chaleureux, pas une 3e répétition) */
.ts-faq-phone {
	display: flex;
	align-items: center;
	gap: 14px;
	background: #FFFFFF;
	border: 1px solid rgba(4, 75, 170, 0.14);
	border-radius: 14px;
	padding: 16px 18px;
	margin-top: 16px;
	box-shadow: 0 6px 16px rgba(10, 37, 64, 0.05);
}
.ts-faq-phone-ico {
	flex-shrink: 0;
	width: 42px; height: 42px;
	border-radius: 12px;
	background: linear-gradient(135deg, #044BAA, #006DFF);
	color: #FFFFFF;
	display: inline-flex;
	align-items: center;
	justify-content: center;
}
.ts-faq-phone-ico svg { width: 20px; height: 20px; }
.ts-faq-phone p { margin: 0; font-size: 14px; line-height: 1.45; color: #4A5A70; }
.ts-faq-phone a { color: #044BAA; font-size: 17px; font-weight: 800; text-decoration: none; white-space: nowrap; }
.ts-faq-phone a:hover { color: #006DFF; }
@media (max-width: 900px) {
	.ts-why { grid-template-columns: 1fr; }
}

/* ---------- 9. Avis clients ---------- */

.ts-reviews-note {
	display: flex;
	align-items: center;
	justify-content: center;
	flex-wrap: wrap;
	gap: 10px;
	margin: 4px 0 20px;
	font-size: 14.5px;
	color: #4A5A70;
}
.ts-reviews-note strong { color: #0A2540; font-size: 17px; font-weight: 800; }
.ts-stars {
	display: inline-flex;
	gap: 3px;
	font-size: 15px;
	line-height: 1;
	color: #04B47C; /* vert Trustpilot déjà utilisé sur le site */
	letter-spacing: 1px;
}
/* Défilement lent continu PILOTÉ PAR JS (refonte.js) et non par animation CSS :
   la bande fait ~5400 px de large et dépasse la taille maximale de calque
   d'iOS Safari (rendu BLANC sur iPhone avec un transform animé). Le JS fait
   avancer scrollLeft à vitesse constante ; le doigt/la molette restent natifs
   (pause auto pendant l'interaction). */
.ts-reviews-marquee {
	overflow-x: auto;
	scrollbar-width: none;
	-webkit-mask-image: linear-gradient(90deg, transparent, #000 6%, #000 94%, transparent);
	mask-image: linear-gradient(90deg, transparent, #000 6%, #000 94%, transparent);
	/* air pour les ombres des cartes d'avis + compensation */
	padding-block: 10px 32px;
	margin-bottom: -22px;
}
.ts-reviews-marquee::-webkit-scrollbar { display: none; }
.ts-reviews-track {
	display: flex;
	width: max-content;
}
.ts-reviews-set {
	display: flex;
	align-items: stretch;
	gap: 16px;
	padding-right: 16px;
}
.ts-review {
	flex: 0 0 320px;
	background: #FFFFFF;
	border: 1px solid rgba(10, 37, 64, 0.07);
	border-radius: 16px;
	padding: 20px;
	box-shadow: 0 6px 16px rgba(10, 37, 64, 0.05);
	display: flex;
	flex-direction: column;
	gap: 10px;
}
.ts-review-head { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.ts-review-name { font-size: 14px; font-weight: 700; color: #0A2540; }
.ts-review p {
	margin: 0;
	font-size: 13.5px;
	line-height: 1.6;
	color: #4A5A70;
	display: -webkit-box;
	-webkit-line-clamp: 6;
	-webkit-box-orient: vertical;
	overflow: hidden;
}
.ts-reviews-more { text-align: center; margin: 10px 0 0; }
@media (max-width: 768px) {
	.ts-review { flex-basis: 270px; }
	.ts-reviews-track { animation-duration: 70s; }
}

/* ---------- 10. Blog (v5) — cartes maison [ts_home_blog] ---------- */
/* Rendu serveur (functions.php) : image 16:9, date + temps de lecture RÉEL,
   titre h3, extrait, carrousel scroll-snap + flèches overlay (style produits) */
.ts-blog { position: relative; }
.ts-blog-track {
	display: flex;
	gap: 18px;
	overflow-x: auto;
	scroll-snap-type: x proximity;
	overscroll-behavior-x: contain;
	/* air pour les ombres (rognées sinon par la piste) + compensation en bas.
	   Latéralement : piste bornée à la grille 1400 → marge nette entre les
	   cartes et les bords de l'écran, sur tous les form factors */
	padding: 14px 6px 52px;
	margin: 0 0 -32px;
	scrollbar-width: none;
}
.ts-blog-track::-webkit-scrollbar { display: none; }
.ts-blog-card {
	flex: 0 0 calc((100% - 2 * 18px) / 3);
	scroll-snap-align: start;
	display: flex;
	flex-direction: column;
	background: #FFFFFF;
	border: 1px solid rgba(10, 37, 64, 0.07);
	border-radius: 18px;
	overflow: hidden;
	text-decoration: none !important;
	box-shadow: 0 6px 16px rgba(10, 37, 64, 0.05);
	transition: transform .25s ease, box-shadow .25s ease;
}
.ts-blog-card:hover { transform: translateY(-4px); box-shadow: 0 16px 34px rgba(10, 37, 64, 0.12); }
.ts-blog-imgwrap { display: block; line-height: 0; overflow: hidden; background: #EFF4FA; }
.ts-blog-imgwrap img {
	width: 100%;
	height: auto;
	aspect-ratio: 16 / 9;
	object-fit: cover;
	transition: transform .45s ease;
}
.ts-blog-card:hover .ts-blog-imgwrap img { transform: scale(1.045); }
.ts-blog-body { display: flex; flex-direction: column; gap: 10px; padding: 18px 20px 20px; flex: 1; }
.ts-blog-meta {
	display: flex;
	align-items: center;
	flex-wrap: wrap;
	gap: 6px;
	font-size: 12.5px;
	font-weight: 600;
	color: #4A5A70;
}
.ts-blog-meta svg { width: 14px; height: 14px; flex-shrink: 0; color: #044BAA; }
.ts-blog-meta i { width: 4px; height: 4px; border-radius: 999px; background: rgba(10, 37, 64, 0.25); margin-inline: 4px; }
.ts-blog-body h3 {
	margin: 0;
	font-family: "Montserrat", sans-serif;
	font-size: 17px;
	font-weight: 700;
	line-height: 1.35;
	letter-spacing: -0.2px;
	color: #0A2540;
	display: -webkit-box;
	-webkit-line-clamp: 2;
	-webkit-box-orient: vertical;
	overflow: hidden;
	transition: color .2s ease;
}
.ts-blog-card:hover h3 { color: #044BAA; }
.ts-blog-excerpt {
	font-size: 13.5px;
	line-height: 1.6;
	color: #4A5A70;
	display: -webkit-box;
	-webkit-line-clamp: 3;
	-webkit-box-orient: vertical;
	overflow: hidden;
}
.ts-blog-read {
	margin-top: auto;
	padding-top: 4px;
	display: inline-flex;
	align-items: center;
	gap: 7px;
	color: #044BAA;
	font-size: 14px;
	font-weight: 700;
}
.ts-blog-read svg { width: 15px; height: 15px; transition: transform .25s ease; }
.ts-blog-card:hover .ts-blog-read { color: #006DFF; }
.ts-blog-card:hover .ts-blog-read svg { transform: translateX(3px); }
/* flèches : mêmes boutons que les produits (.ts-shop-arrow), overlay dédié */
.ts-blog-arrows {
	position: absolute;
	top: 14px;
	bottom: 80px; /* centre sur les cartes (CTA + zone d'ombre exclus) */
	left: -8px;
	right: -8px;
	display: flex;
	align-items: center;
	justify-content: space-between;
	pointer-events: none;
	z-index: 5;
}
.ts-blog-arrows[hidden] { display: none; }
@media (max-width: 1024px) {
	.ts-blog-card { flex-basis: calc((100% - 18px) / 2.15); }
}
@media (max-width: 768px) {
	.ts-blog-track { gap: 12px; }
	.ts-blog-card { flex-basis: 80%; }
	.ts-blog-arrows { display: none; } /* au doigt : swipe naturel */
}

/* ---------- 11. Accessibilité : animations réduites ---------- */
@media (prefers-reduced-motion: reduce) {
	.ts-marquee-track { animation: none; }
	.ts-marquee { overflow-x: auto; mask-image: none; -webkit-mask-image: none; }
	.ts-reviews-marquee { mask-image: none; -webkit-mask-image: none; } /* défilement JS coupé, lecture manuelle */
	.ts-climate-leaf, .ts-climate-globe { animation: none; }
	.ts-hero-track { scroll-behavior: auto; }
	.ts-hero-dot-fill { visibility: hidden !important; }
	.ts-trust-item, .ts-door, .ts-bento-cell img, .ts-bento-label,
	.ts-shop-panel ul.products li.product, .ts-btn, .ts-btn-ghost {
		transition: none !important;
	}
	.ts-tabs-spin { animation: none; }
}

/* ---------- 12. (v3) Jonction accueil ↔ footer : même grille ---------- */
/* Les bandes claires du footer (réassurance + newsletter) s'alignent au
   pixel sur la grille commune (bulle header = contenu accueil = 1880 max).
   Le bloc nuit garde sa composition centrée validée (1140 px). */
.elementor-location-footer .ts-footer-trust,
.elementor-location-footer .ts-footer-news {
	padding-inline: clamp(12px, 3vw, 28px) !important;
	--content-width: min(var(--ts-shell-max, 1880px), 100%) !important;
}

/* ---------- 13. (v4) Voile de détachement du header ---------- */
/* Un dégradé blanc s'étend sous la bulle : le contenu qui défile derrière
   s'estompe progressivement au lieu de « cogner » contre le header.
   Tous formats (desktop / tablette / mobile). Le wrapper reste
   pointer-events:none → aucun impact sur les clics. Coût nul (statique). */
.elementor-location-header {
	background: linear-gradient(
		180deg,
		rgba(255, 255, 255, 0.97) 0%,
		rgba(255, 255, 255, 0.9) 58%,
		rgba(255, 255, 255, 0.55) 82%,
		rgba(255, 255, 255, 0) 100%
	);
}

/* ===========================================================================
   14. (30/07) PANIER — cartes des suggestions produits
   ---------------------------------------------------------------------------
   Page « Panier » (id 6) : les deux widgets Elementor « woocommerce-products »
   (#d7cfc40 desktop + tablette, #b6c4bc0 mobile) affichent les ventes croisées
   « Vous pourriez être intéressé par… ». Elles étaient rendues « à nu » (pas de
   carte, pas de survol) alors que les ventes incitatives de la FICHE PRODUIT
   sont déjà habillées.

   Ce bloc reprend donc EXACTEMENT le vocabulaire de la fiche produit
   (refonte-produit.css § « ÉTAPE 7.5 — ventes incitatives ») : carte blanche,
   filet fin, rayon 16, décollage au survol, image arrondie, titre sur deux
   lignes maxi, bouton centré aligné en bas de carte.

   • Portée : `body.woocommerce-cart` → uniquement la page Panier. Les autres
     widgets « produits » du site (accueil, .ts-shop-panel…) ne sont pas touchés.
   • Sélecteurs par CLASSE DE WIDGET, jamais par identifiant auto-généré :
     rien à remapper si les widgets sont recréés.
   • UCSS : `/cart` est déjà dans les exclusions UCSS **et** dans les exclusions
     de cache de LiteSpeed → aucune classe à ajouter à la liste blanche.
   =========================================================================== */

/* ---------- la carte ---------- */
body.woocommerce-cart .elementor-widget-woocommerce-products ul.products li.product {
	width: auto !important;
	margin: 0 !important;
	padding: 16px !important;
	background: #FFFFFF;
	border: 1px solid rgba(10, 37, 64, 0.09);
	border-radius: 16px;
	display: flex;
	flex-direction: column;
	transition: transform .25s ease, box-shadow .25s ease;
}
body.woocommerce-cart .elementor-widget-woocommerce-products ul.products li.product:hover {
	transform: translateY(-4px);
	box-shadow: 0 14px 30px rgba(10, 37, 64, 0.10);
}

/* ---------- visuel ---------- */
body.woocommerce-cart .elementor-widget-woocommerce-products ul.products li.product img {
	border-radius: 12px;
	width: 100%;
	height: auto;
}
/* badge promo YITH : présent mais discret, il ne doit pas crier */
body.woocommerce-cart .elementor-widget-woocommerce-products .yith-wcbm-badge {
	opacity: .92;
}

/* ---------- titre : deux lignes maxi, plus de mots coupés en plein milieu ----------
   ⚠️ `overflow: hidden` rogne au bord de la boîte de PADDING, pas du texte : avec
   le `padding: 7,5px 0` que pose le thème, la 3e ligne dépassait et laissait un
   liseré de lettres visible sous les deux premières. Le padding est donc
   converti en marge (même espacement à l'œil, aucune zone de fuite). */
body.woocommerce-cart .elementor-widget-woocommerce-products .woocommerce-loop-product__title {
	display: -webkit-box;
	-webkit-line-clamp: 2;
	-webkit-box-orient: vertical;
	overflow: hidden;
	min-height: 2.7em;
	font-size: 14px !important;
	line-height: 1.35;
	hyphens: none;
	padding: 0 !important;
	margin: 8px 0 !important;
}

/* ---------- prix : même graisse / même taille que sur la fiche produit ----------
   `margin-top: auto` (le lien devient une colonne flex juste en dessous) cale
   TOUS les prix sur la même ligne, que la fiche porte une note en étoiles ou
   non — sans ça, une carte notée décalait son prix d'une quarantaine de pixels
   par rapport à ses voisines. */
body.woocommerce-cart .elementor-widget-woocommerce-products ul.products li.product > a.woocommerce-loop-product__link {
	display: flex;
	flex-direction: column;
	flex: 1 1 auto;
}
body.woocommerce-cart .elementor-widget-woocommerce-products ul.products li.product .price {
	font-size: 13px;
	margin: auto 0 6px;
}

/* ---------- note en étoiles : elle ne doit pas décaler la carte ---------- */
body.woocommerce-cart .elementor-widget-woocommerce-products ul.products li.product .star-rating {
	margin-inline: auto;
}

/* ---------- bouton : centré, largeur naturelle, collé au bas de la carte ----------
   `margin-top: auto` aligne tous les boutons d'une même rangée, que la fiche ait
   des étoiles, un prix barré ou non. Spécificité (0,5,2) : elle passe devant les
   réglages du widget écrits par Elementor en (0,4,0). */
body.woocommerce-cart .elementor-widget-woocommerce-products ul.products li.product > a.button,
body.woocommerce-cart .elementor-widget-woocommerce-products ul.products li.product .woocommerce-loop-product__buttons {
	margin: auto auto 0 !important;
	align-self: center;
	width: auto;
	display: inline-block;
	font-size: 14px;
}

/* ---------- tablette / mobile : mêmes réglages que la fiche produit ---------- */
@media (max-width: 767px) {
	body.woocommerce-cart .elementor-widget-woocommerce-products ul.products li.product {
		padding: 11px !important;
	}
}

/* ---------- accessibilité : animations réduites ---------- */
@media (prefers-reduced-motion: reduce) {
	body.woocommerce-cart .elementor-widget-woocommerce-products ul.products li.product {
		transition: none;
	}
	body.woocommerce-cart .elementor-widget-woocommerce-products ul.products li.product:hover {
		transform: none;
	}
}
