/* ═══ NETTOYAGE WP-Z (24 septembre 2026) — CE QUI A ÉTÉ RETIRÉ, ET LA PREUVE ═══
   Ce fichier est le socle historique ; les feuilles de la refonte
   (assets/css/*.css) sont lues APRÈS lui et en réécrivent l'essentiel. 644
   règles et 58 sélecteurs de listes ne servaient plus à rien ; ils ont été
   supprimés (−33 % de texte, −32 % une fois compacté et compressé). Deux
   preuves, jamais une supposition :
     · MORTES : une classe ou un id qu'elles exigent n'existe nulle part — ni
       dans le thème, ni dans WooCommerce 9.9.3, ni dans WordPress, ni en base
       (.myscoot, .pdp-atc, .catmenu, .rep-grid, .buybar-note…) ;
     · ÉCRASÉES : désactivées toutes ensemble dans Chromium, sur 76 pages
       (69 types publics, 7 du compte connecté) et 9 largeurs et réglages
       (320 → 1 440 px, tactile, animations réduites ou non), elles ne
       changeaient AUCUNE valeur calculée d'aucun élément (point fixe
       atteint : une passe complète sans écart).
   Restent ici, par prudence : les règles d'états (:hover, :focus, [open],
   :checked…), celles qu'aucune page testée n'affiche (panneaux ouverts par
   le script, messages WooCommerce rares) et celles qu'un navigateur autre que
   Chromium pourrait lire autrement (déclarations préfixées).
   Vérifié ensuite : captures pleine page de 16 types de page à 390 et
   1 440 px, avant/après, 0 pixel de différence ; style calculé de chaque
   élément identique sur toutes les pages et largeurs.
   Si une règle d'ici semble inutile : même méthode, pas à l'œil. */
/* L'attribut hidden doit gagner : sans cette règle, « Récemment vus » restait
   affiché vide sur l'accueil et sur chaque fiche produit. */
[hidden]{display:none!important}

*{box-sizing:border-box;margin:0;padding:0}
:root{color-scheme:light;
  --sp:20px; --ink:#0f172a;--muted:#5b6b82;--bg:#fff;--surf:#f3f6fb;--surf2:#e9eef7;--line:#e4e9f2;
  --brand:#2f6fc0;--brand2:#4a90e2;--navy:#0f172a;--ok:#15803d;--ok-bg:#e8f5ec;--warn:#b45309;--warn-bg:#fbf0e2;--info-bg:#eaf1fb;
  --r-s:12px;--r:16px;--r-l:22px;--pill:980px;--sh1:0 1px 2px rgba(15,23,42,.06);--sh2:0 8px 24px -10px rgba(15,23,42,.22);
  --t:.34s cubic-bezier(.32,.72,0,1);
  /* En rem : la taille de police choisie dans le navigateur (ou dans les réglages
     d'accessibilité du téléphone) agit enfin sur le site. En px, elle était sans
     effet — un visiteur qui a besoin de plus gros ne pouvait rien y faire. */
  --f-h1:1.875rem;--f-h2:1.375rem;--f-h3:1rem;--f-lg:1.25rem;--f-md:1.0625rem;--f:0.9375rem;--f-s:0.8125rem;--f-xs:0.6875rem}
/* -webkit-text-size-adjust:100% empêchait aussi l'agrandissement demandé par le
   visiteur. On garde seulement le blocage de l'inflation automatique d'Android. */
html{text-size-adjust:none;-webkit-text-size-adjust:none;scrollbar-gutter:stable}
/* scrollbar-gutter : ouvrir Trier/Filtrer supprimait la barre de défilement, le
   viewport s'élargissait et TOUTE la colonne faisait une embardée de 5 à 17px.
   La gouttière reste réservée, plus aucun saut. */
/* LA POLICE. « Inter » était demandée en premier alors qu'aucun fichier de
   police n'est livré et qu'aucune n'est chargée (pas de Google Fonts : l'IP du
   visiteur partirait chez Google sans son accord, position CNIL). Elle ne
   s'appliquait donc que chez les rares visiteurs qui l'ont installée sur leur
   machine — deux typographies pour le même site, sans que personne l'ait voulu.

   On assume la pile SYSTÈME, et c'est le bon choix ici : le site est une app
   installable, et ces polices sont exactement celles des applications natives
   de chaque appareil. Zéro octet à télécharger, aucun saut de texte au
   chargement, et le rendu que l'utilisateur reconnaît déjà. */
body{background:#e7ebf2;
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI Variable Text","Segoe UI",system-ui,
    Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji";
  color:var(--ink);-webkit-font-smoothing:antialiased;line-height:1.5}
img{max-width:100%}
button{font:inherit;color:inherit;background:none;border:0;cursor:pointer}
a{color:inherit;text-decoration:none}
:focus-visible{outline:2.5px solid var(--brand2);outline-offset:2px}
/* Lien d'évitement : hors écran, ramené en haut à gauche dès qu'il reçoit le focus. */
.ft-skip{position:absolute;left:-9999px;top:0;z-index:200;background:var(--navy);color:#fff;
  padding:11px 16px;border-radius:0 0 10px 0;font-size:var(--f-s);font-weight:700;text-decoration:none}
.ft-skip:focus{left:0}
.app{max-width:440px;margin:0 auto;min-height:100vh;background:var(--bg);position:relative;overflow-x:clip}
/* overflow-x:hidden fabrique un conteneur de défilement, ce qui transformait
   position:sticky en position:static : l'en-tête ne collait plus (mesuré au
   navigateur). overflow-x:clip rogne le débordement horizontal SANS créer de
   conteneur de défilement — l'en-tête colle et rien ne dépasse.
   Les navigateurs trop anciens ignorent la propriété : ils retrouvent le
   défilement horizontal d'avant, jamais un en-tête cassé. */
.woocommerce table.shop_table_responsive{overflow-x:auto}
.screen{display:none;padding-bottom:calc(96px + env(safe-area-inset-bottom))} .screen.on{display:block}
@keyframes in{from{opacity:0;transform:translateX(14px)}to{opacity:1;transform:none}}
.app.back .screen.on{animation:inb var(--t)} @keyframes inb{from{opacity:0;transform:translateX(-14px)}to{opacity:1;transform:none}}
/* header */
.top{position:sticky;top:0;z-index:20;display:flex;align-items:center;gap:10px;justify-content:space-between;min-height:56px;padding:10px var(--sp);
  background:var(--bg);border-bottom:.5px solid var(--line)}
.logo .mk{width:32px;height:32px;border-radius:9px;background:var(--navy);display:flex;align-items:center;justify-content:center}
.logo .mk img{width:22px;height:22px;filter:invert(1)} 
.top h1.ttl,.top .ttl{font-weight:700;font-size:var(--f-md);letter-spacing:-.01em}
.iconbtn{width:44px;height:44px;display:flex;align-items:center;justify-content:center;border-radius:12px;transition:background .2s} .iconbtn:active{background:var(--surf)}
.iconbtn svg,.back svg{width:23px;height:23px;stroke:currentColor;fill:none;stroke-width:1.7}
.back{display:flex;align-items:center;gap:2px;min-height:44px;color:var(--brand);font-size:var(--f-md);font-weight:500} .back:active{opacity:.5}
/* marquee */
.marquee{overflow:hidden;background:var(--navy);color:#fff}
.marquee .trk{display:inline-flex;gap:16px;white-space:nowrap;padding:8px 0;font-size:var(--f-s);font-weight:600;align-items:center;animation:mq 26s linear infinite;will-change:transform}
@keyframes mq{to{transform:translateX(-50%)}}
/* hero */
.hero{padding:20px var(--sp) 4px} .hero h2{font-size:var(--f-h1);line-height:1.05;font-weight:800;letter-spacing:-.03em}
.hero .sub{margin-top:8px;color:var(--muted);font-size:var(--f-md)}
/* promo */
.promo{display:flex;align-items:center;gap:10px;margin:16px var(--sp) 2px;border-radius:var(--r-l);overflow:hidden;position:relative;box-shadow:var(--sh2);transition:transform var(--t);background:linear-gradient(135deg,#16223c,#0d1526);padding:22px 20px;min-height:148px} .promo:active{transform:scale(.985)}
.promo .txt{flex:1;z-index:2} .promo .k{font-size:var(--f-xs);font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#8fc4ff}
.promo h3{font-size:var(--f-h2);font-weight:800;letter-spacing:-.02em;margin:5px 0 4px;color:#fff} .promo .txt p{color:#b9c6dc;font-size:var(--f-s);margin-bottom:11px;line-height:1.35}
.promo .b{display:inline-flex;background:#fff;color:var(--navy);font-size:var(--f-s);font-weight:700;padding:9px 16px;border-radius:var(--pill)}
.promo .pp{width:120px;height:120px;object-fit:contain;flex:none;filter:drop-shadow(0 14px 22px rgba(0,0,0,.5))}
/* trust */
.trust{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;padding:18px var(--sp) 4px}
.trust .t{background:var(--surf);border-radius:var(--r);padding:12px 6px;text-align:center} .trust .t svg{width:22px;height:22px;stroke:var(--brand);fill:none;stroke-width:1.7;margin-bottom:5px}
.trust .t div{font-size:10.5px;font-weight:600;line-height:1.2}
/* chips */
.chips{display:flex;gap:9px;overflow-x:auto;padding:14px var(--sp) 6px;scrollbar-width:none;scroll-snap-type:x proximity;overscroll-behavior-x:contain} .chips::-webkit-scrollbar{display:none}
.chip{flex:none;min-height:38px;padding:8px 16px;border-radius:var(--pill);background:var(--surf);color:var(--ink);font-size:var(--f-s);font-weight:600;white-space:nowrap;scroll-snap-align:start;transition:transform .12s} .chip:active{transform:scale(.94)} 
/* sections + grid */
.sec{padding:24px var(--sp) 2px;display:flex;align-items:baseline;justify-content:space-between}
.sec .more{color:var(--brand);font-size:var(--f);font-weight:600;min-height:44px;display:flex;align-items:center}
.grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;padding:10px var(--sp)}
.hrow{display:flex;gap:14px;overflow-x:auto;padding:10px var(--sp) 2px;scrollbar-width:none;scroll-snap-type:x proximity;overscroll-behavior-x:contain} .hrow::-webkit-scrollbar{display:none} .hrow .card{flex:none;width:150px;scroll-snap-align:start}
.card{display:flex;flex-direction:column;transition:transform var(--t)} .card:active{transform:scale(.97)}
.card .ph{position:relative;background:var(--surf);border-radius:var(--r);aspect-ratio:1;display:flex;align-items:center;justify-content:center;padding:8px;overflow:hidden}
.card .ph::before{content:"";position:absolute;inset:0;background:linear-gradient(100deg,var(--surf),var(--surf2),var(--surf));background-size:200% 100%;animation:sh 1.4s linear infinite}
.card .ph img{position:relative;width:100%;height:100%;object-fit:contain;background:#fff;opacity:0;transition:opacity .4s} .card .ph img.ld+*{}
.card .ph img.ld~::before{display:none}
@keyframes sh{to{background-position:-200% 0}}
/* recherche */
.sbar{display:flex;gap:10px;padding:10px var(--sp) 2px}
.search{flex:1;display:flex;align-items:center;gap:8px;background:var(--surf);border-radius:12px;padding:0 13px;min-height:44px} .search svg{width:18px;height:18px;stroke:var(--muted);fill:none;stroke-width:1.8}
.search input{flex:1;border:0;background:none;font:inherit;font-size:var(--f);color:var(--ink);min-height:44px} .search input::placeholder{color:var(--muted)}
.noresult b{color:var(--ink);display:block;font-size:var(--f-md);margin-bottom:4px}
/* PDP */
.pdp{padding:20px var(--sp) 8px} .pdp .cat{color:var(--brand);font-size:var(--f-s);font-weight:700;letter-spacing:.04em;text-transform:uppercase}
.pdp h1{font-size:var(--f-h2);font-weight:800;letter-spacing:-.02em;line-height:1.18;margin:6px 0 8px}
.pdp .stock{display:inline-flex;align-items:center;gap:6px;font-size:var(--f-s);font-weight:600;margin:8px 0 4px;color:var(--ok)} .pdp .stock i{width:8px;height:8px;border-radius:50%;background:currentColor}
.pdp .price{font-size:26px;font-weight:800;margin-top:4px}
.pdp h2.st{font-size:var(--f-h3);font-weight:800;margin:24px 0 8px} .pdp p{color:var(--muted);font-size:var(--f)}
.compat span{background:var(--surf);border-radius:var(--pill);padding:7px 13px;font-size:var(--f-s);font-weight:600;color:var(--ink);text-decoration:none}
.compat a:hover{background:var(--surf2)}
/* « Voir les pneus gonflables Xiaomi — 29 pièces » : le geste suivant du client
   quand il hésite sur sa taille, et le seul lien interne que les pages
   marque × pièce ne recevaient pas. Discret : c'est une porte de sortie utile,
   pas un bouton d'achat — il ne doit pas concurrencer « Ajouter au panier ». */
.compat-tout::after{content:"›";font-weight:700}
.compat-tout:hover{text-decoration:underline}
.specs{border-top:.5px solid var(--line);margin-top:12px} .specs .r{display:flex;justify-content:space-between;padding:12px 0;border-bottom:.5px solid var(--line);font-size:var(--f)} .specs .r span{color:var(--muted)}
/* Le tableau de la fiche produit débordait. La ligne était un flex SANS écart et
   SANS repli : une valeur longue — « lendemain si commande avant 13h · 4,90 € ·
   offerte dès 79,00 € » — ne pouvait pas rétrécir (min-width vaut auto par
   défaut sur un élément flex) et venait s'écrire par-dessus son étiquette.
   L'étiquette garde sa taille, la valeur revient à la ligne, et 14 px les
   séparent toujours. */
.specs .r{gap:14px;align-items:baseline}
.specs .r span{flex:0 0 auto}
.specs .r b{min-width:0;text-align:right;font-weight:600;overflow-wrap:anywhere}
.buybar{display:none;position:fixed;left:0;right:0;bottom:calc(74px + env(safe-area-inset-bottom));max-width:440px;margin:0 auto;z-index:25;padding:12px var(--sp);gap:12px;align-items:center;
  background:var(--bg);border-top:.5px solid var(--line)}
.buybar .bp{font-weight:800;font-size:var(--f-lg);white-space:nowrap}
.cta:active{transform:scale(.97)} .cta.done{background:var(--ok)}
.pay{display:flex;gap:7px;justify-content:center;margin-top:10px} .pay span{font-size:10px;font-weight:700;color:var(--muted);background:var(--surf);border-radius:6px;padding:4px 8px}
/* cart */
/* .cart{padding:12px var(--sp)} : règle morte, aucun gabarit n'émet cette classe.
   Elle laissait la barre « livraison offerte » collée au bord alors que tout le
   reste du panier est à 20 px. */
.citem{display:flex;gap:14px;align-items:center;padding:14px 0;border-bottom:.5px solid var(--line)} .citem .cph{width:66px;height:66px;background:var(--surf);border-radius:13px;display:flex;align-items:center;justify-content:center;padding:8px;flex:none}
.citem img{max-width:100%;max-height:100%;object-fit:contain;background:#fff} 
.qty{display:flex;align-items:center;gap:10px;margin-top:6px} .qty button{width:28px;height:28px;border-radius:8px;background:var(--surf);font-size:16px;font-weight:700} .qty span{min-width:16px;text-align:center;font-weight:600}
.empty{text-align:center;padding:60px var(--sp);color:var(--muted)} .empty svg{width:52px;height:52px;stroke:var(--line);fill:none;stroke-width:1.5;margin-bottom:12px}
.sum{padding:14px 2px} .sum .r{display:flex;justify-content:space-between;padding:7px 0;color:var(--muted);font-size:var(--f)} .sum .tot{color:var(--ink);font-weight:800;font-size:var(--f-lg);padding-top:12px}
/* account + docs */
.mlist{margin-top:16px;border-radius:var(--r);overflow:hidden;background:var(--surf)} .mrow{display:flex;width:100%;align-items:center;justify-content:space-between;padding:15px 16px;border-bottom:.5px solid var(--line);font-size:var(--f-md);font-weight:500;text-align:left} .mrow:last-child{border:0} .mrow:active{background:var(--surf2)} .mrow svg{width:18px;height:18px;stroke:var(--muted);fill:none;stroke-width:2}
.doc .lead{color:var(--muted);font-size:var(--f-md);margin-bottom:18px}
.doc h2{font-size:var(--f-h2);font-weight:800;letter-spacing:-.01em;margin:24px 0 8px} 
.doc p{font-size:var(--f);line-height:1.62;margin-bottom:12px;color:var(--ink)} .doc ul{margin:0 0 14px;padding-left:2px;list-style:none} .doc li{position:relative;padding-left:22px;margin-bottom:7px;font-size:var(--f);line-height:1.5} .doc li::before{content:"";position:absolute;left:2px;top:9px;width:6px;height:6px;border-radius:50%;background:var(--brand)}
.callout{display:flex;gap:11px;background:var(--info-bg);border-radius:var(--r);padding:13px 15px;margin:6px 0 14px;font-size:var(--f-s);line-height:1.5} .callout.warn{background:var(--warn-bg)} .callout.ok{background:var(--ok-bg)} .callout span{font-size:17px;line-height:1.2}
.stats{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:14px 0} .stat{background:var(--surf);border-radius:var(--r);padding:14px} .stat b{display:block;font-size:var(--f-h2);font-weight:800} .stat span{font-size:var(--f-xs);color:var(--muted);font-weight:600}
details.acc summary::-webkit-details-marker{display:none} details.acc[open] summary svg{transform:rotate(180deg)} 
/* nav */
.nav{position:fixed;left:0;right:0;bottom:0;max-width:440px;margin:0 auto;display:flex;justify-content:space-around;z-index:30;padding:8px 8px calc(10px + env(safe-area-inset-bottom));
  background:var(--bg);border-top:.5px solid var(--line)}
.nav a{display:flex;flex-direction:column;align-items:center;gap:3px;color:var(--muted);font-size:10.5px;font-weight:600;position:relative;min-width:56px;min-height:48px;transition:transform .12s}
/* La barre porte cinq entrées depuis que « Réparer » y figure. Sur un écran de
   320 px, cinq fois 56 px de large ne tiennent plus : la largeur minimale cède,
   jamais la hauteur tactile de 48 px ni la lisibilité du libellé. */
.nav a:active{transform:scale(.9)} .nav svg{width:24px;height:24px;stroke:currentColor;fill:none;stroke-width:1.7}
/* Conteneur du fragment panier : il ne doit produire AUCUN effet de mise en page
   (pas de position, donc .cbadge reste positionné sur le bouton). */
.cbadge{position:absolute;top:-3px;right:10px;background:var(--brand);color:#fff;font-size:10px;font-weight:800;min-width:17px;height:17px;border-radius:9px;display:none;align-items:center;justify-content:center;padding:0 4px;border:1.5px solid var(--bg)}
.cbadge.on{display:flex} .cbadge.pop{animation:pop .4s cubic-bezier(.3,1.4,.5,1)} @keyframes pop{0%{transform:scale(.2)}60%{transform:scale(1.35)}to{transform:scale(1)}}
@media(prefers-reduced-motion:reduce){
  .liveres.loading::before{animation:none;background:var(--brand);background-size:100% 100%;opacity:.5}

  /* Sans cette ligne la coche verte restait invisible : le trait était
     dessiné par une animation, désactivée par la préférence. */
  .ft-toast .tk svg path{stroke-dashoffset:0!important}
*{animation:none!important;transition:none!important} .card .ph::before{display:none} 

  }
/* ---- bannière PWA ----
   Au-dessus de la barre d'action fixe de la page quand elle est là (« Contacter » d'une annonce,
   « Ajouter au panier » d'une fiche produit…) : chacune déclare sa hauteur dans --ft-barre-bas
   (layout.css §1). Sans cela, la bannière (z-index 40) recouvrait le bouton de la barre (revue
   parcours, E2E-03) ; l'atelier le faisait déjà pour la sienne (repair-hub.css). */
.pwa-banner{position:fixed;left:12px;right:12px;bottom:calc(84px + var(--ft-barre-bas,0px) + env(safe-area-inset-bottom,0px));max-width:416px;margin:0 auto;z-index:40;
  display:none;align-items:center;gap:12px;background:var(--navy);color:#fff;border-radius:18px;padding:12px 14px;
  box-shadow:0 16px 40px -10px rgba(0,0,0,.55);transform:translateY(24px);opacity:0;transition:transform .45s cubic-bezier(.32,.72,0,1),opacity .45s}
.pwa-banner.show{display:flex;transform:none;opacity:1}
.pwa-banner img{width:42px;height:42px;border-radius:11px;flex:none;background:#fff}
.pwa-banner .pt{flex:1;line-height:1.25;min-width:0}
.pwa-banner .pt b{font-size:14px;display:block} .pwa-banner .pt span{font-size:11px;opacity:.82}
.pwa-btn{flex:none;background:#fff;color:var(--navy);font-weight:700;font-size:13px;padding:10px 16px;border-radius:980px;transition:transform .12s}
.pwa-btn:active{transform:scale(.94)}
.pwa-x{flex:none;color:#fff;opacity:.55;font-size:15px;padding:6px;min-width:32px;min-height:32px}
@media(prefers-reduced-motion:reduce){.pwa-banner{transition:none}}
/* ---- boutique (archive WooCommerce) ---- */
.wc ul.products{list-style:none;margin:0;display:grid;grid-template-columns:1fr 1fr;gap:16px;padding:12px var(--sp)}
.wc ul.products li.product{margin:0;width:auto;float:none}
.wc .woocommerce-result-count{color:var(--muted);font-size:var(--f-s);padding:2px var(--sp);margin:0}
.wc .woocommerce-ordering select{font:inherit;font-size:var(--f-s);padding:9px 12px;border-radius:11px;background:var(--surf);border:0;color:var(--ink);max-width:100%}
.wc .woocommerce-products-header{padding:12px var(--sp) 0}
.wc .woocommerce-products-header__title{font-size:var(--f-h1);font-weight:800;letter-spacing:-.02em;margin:0}
.wc .woocommerce-products-header .term-description{color:var(--muted);font-size:var(--f-s);padding:0 var(--sp)}
/* 17 pastilles de 42 px = 750 px sur un écran de 440 : les flèches « précédent »
   et « suivant » sortaient de l'écran et n'étaient pas atteignables. Le filtre
   woocommerce_pagination_args (functions.php) réduit la liste, flex-wrap fait
   le reste sur les archives que WooCommerce ne pagine pas. */
.wc nav.woocommerce-pagination a,.wc nav.woocommerce-pagination span{min-width:42px;min-height:42px;display:flex;align-items:center;justify-content:center;background:var(--surf);border-radius:12px;font-weight:700;color:var(--ink)}
.wc .woocommerce-info,.wc .woocommerce-message,.wc .woocommerce-error{list-style:none;background:var(--surf);border-radius:var(--r);padding:12px 15px;margin:8px var(--sp);font-size:var(--f-s);border-left:3px solid var(--brand)}
/* la barre d'achat est prioritaire sur la fiche */
.buybar form.cart{flex:1;display:flex;gap:10px;margin:0;align-items:center}
.buybar .quantity{flex:none}
.buybar .quantity input.qty{width:54px;min-height:50px;text-align:center;background:var(--surf);border:0;border-radius:12px;font:inherit;font-weight:700;color:var(--ink);-moz-appearance:textfield}
.buybar .quantity input.qty::-webkit-outer-spin-button,.buybar .quantity input.qty::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
.buybar button.single_add_to_cart_button{flex:1;min-height:50px;background:var(--brand);color:#fff;border-radius:13px;font-size:var(--f-md);font-weight:700;border:0;cursor:pointer;transition:transform .12s}
.buybar button.single_add_to_cart_button:active{transform:scale(.97)}
.buybar .stock,.buybar .woocommerce-variation-availability{display:none}
/* ---- boutons WooCommerce → couleur de marque (l'app prime sur le violet Woo) ---- */
.woocommerce input.button,.buybar button.single_add_to_cart_button{
  background:var(--brand)!important;color:#fff!important;border:0!important;border-radius:13px!important;
  box-shadow:none!important;font-weight:700!important;font-family:inherit!important;text-transform:none!important;text-shadow:none!important}
.woocommerce a.button:active,.woocommerce button.button:active,.buybar button.single_add_to_cart_button:active{transform:scale(.97)}
.buybar button.single_add_to_cart_button{min-height:50px;font-size:var(--f-md)!important;padding:0 18px!important}
/* ---- correctifs boutique : clearfix grille + entête + tri ---- */
.wc ul.products::before,.wc ul.products::after{display:none!important;content:none!important}
.wc h1,.wc .woocommerce-products-header__title,.wc .page-title{font-size:var(--f-h1);font-weight:800;letter-spacing:-.02em;padding:14px var(--sp) 0;margin:0;line-height:1.1}
.woocommerce .woocommerce-ordering select{width:100%;font:inherit;font-size:var(--f-s);font-weight:600;padding:11px 14px;border-radius:12px;background:var(--surf);border:0;color:var(--ink)}
/* ==== WooCommerce : panier / commande / compte — habillage app ==== */
.wc{padding-bottom:calc(20px + env(safe-area-inset-bottom))}
.woocommerce-notices-wrapper:empty{display:none}
/* champs de formulaire */
.woocommerce form .form-row{padding:0;margin:0 0 14px}
.woocommerce form .form-row label,.woocommerce-account label{display:block;font-size:var(--f-s);font-weight:600;margin-bottom:6px;color:var(--ink)}
.woocommerce input.input-text,.woocommerce textarea,.woocommerce select,.woocommerce .select2-selection{
  width:100%;min-height:48px;background:var(--surf);border:1px solid var(--line);border-radius:12px;padding:12px 14px;font:inherit;font-size:var(--f);color:var(--ink)}
.woocommerce input.input-text:focus,.woocommerce textarea:focus,.woocommerce select:focus{outline:none;border-color:var(--brand2);background:var(--bg)}
.woocommerce .select2-container .select2-selection--single{height:48px;display:flex;align-items:center}
/* tableaux (panier) */
.woocommerce table.shop_table{border:0;border-radius:var(--r);background:var(--surf);border-collapse:separate;border-spacing:0;width:100%;margin:12px var(--sp);width:calc(100% - 2*var(--sp))}
.woocommerce table.shop_table th,.woocommerce table.shop_table td{border:0;border-bottom:.5px solid var(--line);padding:14px 12px;font-size:var(--f-s)}
.woocommerce table.shop_table thead th{font-weight:700;color:var(--muted);text-transform:none}
.woocommerce a.remove{color:var(--muted)!important;font-weight:700;width:34px;height:34px;line-height:1;border-radius:50%;background:var(--surf2);position:relative;display:inline-flex;align-items:center;justify-content:center;text-decoration:none}
/* 26 px était le plus petit point de contact du site, alors que le thème s'impose
   44 px partout ailleurs. La zone tactile passe à 46 px sans agrandir le rond. */
.woocommerce a.remove::after{content:"";position:absolute;inset:-6px}
.woocommerce a.remove:hover{background:var(--brand)!important;color:#fff!important}
/* totaux + actions */
.woocommerce .cart_totals h2,.woocommerce-checkout h3,.woocommerce-column__title,.woocommerce-order-details__title{font-size:var(--f-h3);font-weight:800;margin:16px 0 8px;padding:0 var(--sp)}
.woocommerce .coupon{display:flex;gap:8px;align-items:center}
/* compte : onglets */
.woocommerce-MyAccount-navigation ul{list-style:none;display:flex;gap:8px;overflow-x:auto;padding:12px var(--sp);margin:0;scrollbar-width:none}
.woocommerce-MyAccount-navigation ul::-webkit-scrollbar{display:none}
.woocommerce-MyAccount-navigation li{flex:none}
.woocommerce-MyAccount-navigation li a{display:block;padding:9px 16px;border-radius:var(--pill);background:var(--surf);font-size:var(--f-s);font-weight:600;white-space:nowrap}
.woocommerce-MyAccount-navigation li.is-active a{background:var(--navy);color:#fff}
.woocommerce-MyAccount-content{padding:8px var(--sp) 20px}
.woocommerce-MyAccount-content p,.woocommerce-account .u-columns .col{font-size:var(--f)}
/* Le menu et le contenu l'un SOUS l'autre, à toute largeur. woocommerce-
   layout.css les met côte à côte (menu flottant de 30 %, contenu de 68 %) :
   à 1 440 px, le menu ne gardait que 429 px pour sept pastilles sur une
   rangée qui défile — 5 onglets sur 7 étaient invisibles (critique Léa,
   bloquant n° 6), et la marge de 40 px ne tombait plus sur celle du titre. */
.woocommerce-account .woocommerce-MyAccount-navigation,.woocommerce-account .woocommerce-MyAccount-content{float:none;width:auto}
/* Le contenu porte déjà la gouttière (padding var(--sp)) : ses enfants qui la
   reposaient (titres de WooCommerce, « Ma trottinette », rangées) la
   doublaient — 115 px au lieu de 75 à 1 440 px, une fois le contenu en
   pleine largeur. Dedans, la gouttière vaut zéro. */
.woocommerce-account .woocommerce-MyAccount-content>*{--sp:0px}
/* Téléphone : la rangée défile ; un fondu sur le bord droit dit qu'il y a
   une suite (classes posées par le petit script de inc/shop-ui.php, qui
   amène aussi la pastille active à l'écran). */
.woocommerce-MyAccount-navigation ul.ft-deborde:not(.ft-fin){-webkit-mask-image:linear-gradient(to right,#000 calc(100% - 48px),transparent);mask-image:linear-gradient(to right,#000 calc(100% - 48px),transparent)}
.woocommerce-MyAccount-navigation li a:focus-visible{outline:2px solid var(--focus,#0b63ce);outline-offset:2px}
@media(min-width:900px){
  /* Ordinateur : toutes les pastilles visibles, repliées sur plusieurs
     rangées s'il le faut, calées sur la marge du titre (var(--sp) sur un
     bloc pleine largeur = la gouttière de la page). */
  .woocommerce-MyAccount-navigation ul{flex-wrap:wrap;overflow:visible;padding-top:4px;padding-bottom:8px}
  .woocommerce-MyAccount-navigation ul.ft-deborde{-webkit-mask-image:none;mask-image:none}
}
/* Connexion : trois titres de suite (« Connexion » en <h1>, « Content de
   vous revoir. », puis le « Connexion » de WooCommerce). Le troisième est
   caché À L'ŒIL seulement : il reste dans le HTML et pour les lecteurs
   d'écran, qui y trouvent le début du formulaire. */
.woocommerce-account h2:has(+ form.woocommerce-form-login),#customer_login .u-column1>h2:first-child{position:absolute!important;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0}
/* login/register */
.woocommerce .col2-set .col-1,.woocommerce .col2-set .col-2{width:100%;float:none;padding:0 var(--sp)}
.woocommerce form.login,.woocommerce form.register,.woocommerce form.lost_reset_password{border:1px solid var(--line);border-radius:var(--r);padding:18px;margin:8px var(--sp)}
.woocommerce-form__label-for-checkbox{display:flex!important;align-items:center;gap:8px;font-weight:500!important}
.woocommerce-form-login__rememberme{margin:4px 0 12px}
/* messages / vide */
.woocommerce .cart-empty,.woocommerce-info{font-size:var(--f)}
.woocommerce .return-to-shop a.button{display:inline-block;margin-top:12px}
.woocommerce .woocommerce-message a.button{margin-left:10px}
/* retirer les marqueurs de liste parasites sur la nav du compte */
.woocommerce-MyAccount-navigation ul,.woocommerce-MyAccount-navigation li{list-style:none!important}
.woocommerce-MyAccount-navigation li::before,.woocommerce-MyAccount-navigation li::marker{content:none!important;display:none!important}
/* ==== icônes signature ==== */
.ic{width:24px;height:24px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;flex:none;display:inline-block;vertical-align:middle}
.ic .ic-a{stroke:var(--brand2)}
/* le mark logo */
.logo .ft-mark{width:34px;height:34px;display:block}
.logo .mk{width:auto;height:auto;background:none;border-radius:0}
/* tailles contextuelles (héritent des conteneurs existants mais on cadre net) */
.top .iconbtn .ic{width:23px;height:23px;stroke-width:1.8}
.trust .t .ic{width:23px;height:23px;stroke:var(--brand);stroke-width:1.7;margin:0 auto 5px;display:block}
.more .ic{width:16px;height:16px}
/* ==== animations : révélation au scroll + entrée barre d'achat ==== */
.rv{opacity:0;transform:translateY(18px);transition:opacity .55s var(--t),transform .55s var(--t)}
@keyframes ft-buyup{from{transform:translateY(115%)}to{transform:none}}
.chip{transition:transform .12s,background .2s,color .2s}
.iconbtn:active .ic,.nav a:active .ic{transform:scale(.88);transition:transform .12s}
@media(prefers-reduced-motion:reduce){.rv{opacity:1!important;transform:none!important;transition:none} }
/* ==== page 404 ==== */
.err404{padding:48px var(--sp) 40px;text-align:center;display:flex;flex-direction:column;align-items:center}
.err404 .e-mark{width:84px;height:84px;border-radius:24px;background:var(--surf);display:flex;align-items:center;justify-content:center;margin-bottom:18px}
.err404 .e-mark .ic{width:46px;height:46px;stroke:var(--brand)}
.err404 .e-btn{display:inline-flex;align-items:center;gap:8px;background:var(--brand);color:#fff;font-weight:700;font-size:var(--f-md);padding:14px 22px;border-radius:14px;transition:transform .12s}
.err404 .e-btn:active{transform:scale(.97)} .err404 .e-btn .ic{width:20px;height:20px;stroke:#fff}
.err404 .e-home{margin-top:14px;color:var(--brand);font-weight:600;font-size:var(--f)}
.err404 .e-chips{display:flex;flex-wrap:wrap;gap:9px;justify-content:center;margin-top:30px}
/* ==== correctifs QA : safe-area, bannière, focus, débordement, formulaire variante ==== */
/* encoche haute (PWA plein écran) */
.marquee{position:relative;z-index:19}
/* focus clavier visible sur les champs WooCommerce */
.woocommerce input.input-text:focus-visible,.woocommerce textarea:focus-visible,.woocommerce select:focus-visible{outline:2.5px solid var(--brand2);outline-offset:1px}
/* coupure des noms produits très longs (tokens insécables) */
.pdp h1{overflow-wrap:anywhere}
/* CTA lien (barre d'achat produit variable) */
.buybar a.cta{display:flex;align-items:center;justify-content:center;text-decoration:none}
/* ==== galerie photo produit ==== */
#ft-main img{transition:opacity .2s}
/* ==== FAQ accueil ==== */
.faq{padding:2px var(--sp) 10px}
.faq .acc-b p{color:var(--muted);font-size:var(--f);line-height:1.62}
.faq details.acc summary .ic{width:18px;height:18px;stroke:var(--muted);flex:none;transition:transform .25s}
.faq details.acc[open] summary .ic{transform:rotate(180deg)}
/* ==== avis clients (fiche produit) ==== */
.pdp-reviews .comment_container img.avatar{width:38px;height:38px;border-radius:50%;float:left;margin-right:11px;background:var(--surf)}
.pdp-reviews textarea,.pdp-reviews input[type=text],.pdp-reviews input[type=email]{width:100%;background:var(--surf);border:1px solid var(--line);border-radius:12px;padding:12px 14px;font:inherit;margin-bottom:4px}
.pdp-reviews .form-submit input{background:var(--brand)!important;color:#fff!important;border:0!important;border-radius:12px!important;min-height:48px;padding:0 22px!important;font-weight:700!important;margin-top:8px}
.pdp-reviews .comment-form-cookies-consent{display:flex;align-items:center;gap:8px;font-size:var(--f-xs);color:var(--muted)}
/* ==== landing réparation ==== */
.rep .hero h1{font-size:var(--f-h1);line-height:1.05;font-weight:800;letter-spacing:-.03em}
.rep-cta{display:flex;align-items:center;gap:16px;padding:16px var(--sp) 4px}
.rep-cta .e-btn{display:inline-flex;align-items:center;gap:8px;background:var(--brand);color:#fff;font-weight:700;font-size:var(--f-md);padding:14px 20px;border-radius:14px;transition:transform .12s}
.rep-cta .e-btn:active{transform:scale(.97)} .rep-cta .e-btn .ic{width:20px;height:20px;stroke:#fff}
.rep-strong .ic{width:26px;height:26px;stroke:var(--brand);flex:none;margin-top:2px}
.rep-strong b{display:block;font-size:var(--f);letter-spacing:-.01em}
.rep-strong span{display:block;color:var(--muted);font-size:var(--f-s);line-height:1.45;margin-top:2px}
.rep-steps .s i{flex:none;width:30px;height:30px;border-radius:50%;background:var(--navy);color:#fff;font-style:normal;font-weight:800;font-size:14px;display:flex;align-items:center;justify-content:center;margin-top:2px}
/* scroll fluide (ancres : « Choisir les options ») */
html{scroll-behavior:smooth}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}}
/* ==== correctifs QA vague 2 ==== */
#ft-atc{scroll-margin-top:calc(66px + env(safe-area-inset-top))} 
/* cible tactile 44px (bande scrollable) */
/* ==================== correctifs relecture froide (finale) ==================== */
/* hero de l'accueil : c'est un <h1> */
.hero h1,.hero h2{font-size:var(--f-h1);line-height:1.05;font-weight:800;letter-spacing:-.03em}
/* le shimmer s'arrête vraiment quand l'image est chargée (classe .ok posée par app.js sur le parent) */
html:not(.js) .card .ph::before{content:none}
/* prix promo (del/ins) dans le markup maison */
.pdp .price del{font-size:.68em;font-weight:600;color:var(--muted);margin-right:6px;text-decoration:line-through}
.pdp .price ins{text-decoration:none}
/* barre d'achat : 320px + promo (le prix barré est déjà au-dessus) */
.buybar .bp{min-width:0}
@media(max-width:360px){.buybar .quantity input.qty{width:46px}}
/* état rupture de la barre d'achat (tokens valides dans les deux modes) */
.cta.off{background:var(--surf2);color:var(--muted);pointer-events:none;display:flex;align-items:center;justify-content:center}
/* sélecteur : les <select> peuvent rétrécir à 320px */
/* accessibilité : texte lecteur d'écran (pagination, libellés) */
.screen-reader-text{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}
/* repli pour les navigateurs sans color-mix (anciens iOS/WebView) */
@supports not (background:color-mix(in srgb,red 50%,blue)){.top,.nav,.buybar{background:var(--bg)}}
/* mode sombre : miniatures galerie, bannière PWA, étapes réparation */
/* panier / commande en BLOCS Gutenberg (si la prod n'utilise pas les shortcodes) */
.wc .wc-block-components-button,.wc .wc-block-cart__submit-button,.wc .wc-block-components-checkout-place-order-button{background:var(--brand)!important;color:#fff!important;border-radius:13px!important;font-weight:700!important;min-height:50px}
.wc .wc-block-components-product-name{font-weight:600;color:var(--ink)}
.wc .wc-block-components-totals-item,.wc .wc-block-components-totals-footer-item{font-size:var(--f)}
.wc .wc-block-components-text-input input,.wc .wc-block-components-select select{border-radius:12px;min-height:48px;background:var(--surf);border:1px solid var(--line)}
.wc .wc-block-cart-item__image img{background:#fff;border-radius:10px}
.wc .wc-block-components-sidebar{padding:0 var(--sp)}
.wc .wp-block-woocommerce-cart,.wc .wp-block-woocommerce-checkout{padding:0 var(--sp)}

/* ==================== vague 7 : pixel & conversion ==================== */
/* sensation app : pas de halo de tap, pas de délai, pas de zoom iOS sur les champs */
*{-webkit-tap-highlight-color:transparent}
a,button,.chip,.card,.nav a{touch-action:manipulation}
.app input,.app select,.app textarea{font-size:16px}
.app{min-height:100vh;min-height:100dvh}
/* transition de sortie (tap sur un lien) */
.app{transition:opacity .18s,transform .18s}
.app.leaving{opacity:.55;transform:translateX(-6px)}
/* toast */
.ft-toast{position:fixed;left:14px;right:14px;bottom:calc(84px + env(safe-area-inset-bottom));max-width:412px;margin:0 auto;z-index:45;
  display:flex;align-items:center;justify-content:space-between;gap:12px;background:var(--navy);color:#fff;border-radius:16px;padding:13px 16px;
  box-shadow:0 16px 40px -10px rgba(0,0,0,.55);transform:translateY(20px);opacity:0;pointer-events:none;transition:transform .4s cubic-bezier(.32,.72,0,1),opacity .35s;font-size:var(--f)}
.ft-toast.show{transform:none;opacity:1;pointer-events:auto}
.ft-toast b{font-weight:700} .ft-toast a{color:#8fc4ff;font-weight:700;white-space:nowrap}
/* produit qui « vole » vers le panier */
.ft-fly{position:fixed;z-index:60;object-fit:contain;border-radius:50%;background:#fff;pointer-events:none;box-shadow:0 10px 30px -8px rgba(0,0,0,.45);will-change:transform,opacity}
/* stepper de quantité */
.qstep .qs{width:40px;min-height:50px;font-size:20px;font-weight:600;color:var(--ink);display:flex;align-items:center;justify-content:center;transition:background .15s}
.qstep .qs:active{background:var(--surf2)}
.qstep input.qty{width:40px;min-height:50px;text-align:center;background:none;border:0;font-weight:700;padding:0;-moz-appearance:textfield}
/* Sur le panier, WooCommerce ajoute .quantity autour du champ : la règle
   .woocommerce .quantity .qty (0-3-1) battait .qstep input.qty (0-2-1) et
   redessinait une boîte blanche bordée au milieu du galet gris. */
.qstep input.qty::-webkit-outer-spin-button,.qstep input.qty::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
.buybar .quantity input.qty{border-radius:0} 
/* barre d'achat : prix (unitaire × qté + total) */
.buybar .bp{display:flex;flex-direction:column;line-height:1.15}
.buybar .bp small{font-size:11px;font-weight:600;color:var(--muted)}
.buybar .bp b{font-weight:800}
/* bouton d'achat : états */
.buybar button.single_add_to_cart_button.busy{opacity:.75}
.buybar button.single_add_to_cart_button.done{background:var(--ok)!important}
/* section « Pour ta {modèle} » */
.sec .more .ic{width:16px;height:16px}
@media(prefers-reduced-motion:reduce){.app,.top,.ft-toast{transition:none} .app.leaving{opacity:1;transform:none}}
/* barre d'achat : tout tient sur une ligne (prix · stepper · bouton) */
.buybar .bp{flex:none}
.buybar button.single_add_to_cart_button{white-space:nowrap;font-size:15px!important;padding:0 14px!important;min-height:48px}
@media(max-width:360px){.buybar button.single_add_to_cart_button{font-size:14px!important;padding:0 10px!important} }
/* barre d'achat : jamais de débordement, compacte sur petits écrans */
.buybar button.single_add_to_cart_button{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis}
@media(max-width:380px){
  .buybar button.single_add_to_cart_button{font-size:14px!important;padding:0 10px!important}
}
/* le formulaire peut rétrécir (sinon il pousse la barre hors écran) */
.buybar form.cart{min-width:0;flex:1 1 auto}
@media(max-width:340px){.buybar .bp{display:none} .buybar form.cart{gap:8px}}
@media(max-width:340px){.buybar button.single_add_to_cart_button{padding:0 8px!important;font-size:14px!important}}
/* ==== correctifs relecture vague 7 ==== */
/* transition de sortie : jamais de transform sur l'ancêtre des éléments fixed (nav, barre, toast) */
.app{transition:opacity .18s}
.app.leaving{opacity:.55;transform:none}
.screen{transition:transform .18s}
.app.leaving .screen{transform:translateX(-6px)}
/* le script add-to-cart de WC ne doit pas injecter « Voir le panier » dans la barre */
.buybar .added_to_cart{display:none!important}
/* toast : vraiment retiré de l'ordre de tabulation quand caché ; variante erreur */
.ft-toast{visibility:hidden;transition:transform .4s cubic-bezier(.32,.72,0,1),opacity .35s,visibility 0s .4s}
.ft-toast.show{visibility:visible;transition-delay:0s}
.ft-toast.err{background:var(--err)}
/* anti-zoom iOS : prioritaire sur les règles plus spécifiques */
.app input:not([type=checkbox]):not([type=radio]):not([type=hidden]),.app select,.app textarea{font-size:16px!important}
/* barre d'achat : prix plus compact pour laisser le libellé entier jusqu'à 390px avec un prix à 3 chiffres */
.buybar .bp b{font-size:17px}
/* barre d'achat : le formulaire n'a pas de padding (40px récupérés), input compact */
.buybar form.cart{padding:0!important;margin:0!important}
.buybar .quantity input.qty{width:40px}
@media(max-width:400px){.buybar .quantity input.qty{width:36px}}
@media(max-width:340px){.buybar .quantity input.qty{width:32px}}
/* carte promo : proportions sur petits écrans (≤360px) */
@media(max-width:360px){
  .promo{padding:18px 16px;gap:8px;min-height:0}
  .promo .pp{width:92px;height:92px}
  .promo .k{font-size:10px;white-space:nowrap}
  .promo h3{font-size:19px}
  .promo .txt p{font-size:12px}
  .promo .b{white-space:nowrap;padding:8px 13px;font-size:12px}
}
/* ==================== vague 8 : langage design unifié (critique à froid) ==================== */
/* police : pile système assumée (aucune webfont chargée) + prix tabulaires */
/* La pile de polices est déclarée une seule fois, tout en haut du fichier.
   Elle était redonnée ici, en plus court, et écrasait donc la première : deux
   listes pour une seule police, dont une qui gagnait sans qu'on le sache. */
.card .pr,.pdp .price,.buybar .bp,.pay3 b,.sum .r{font-variant-numeric:tabular-nums}
/* FIX délai fantôme : une durée explicite ne doit JAMAIS précéder var(--t) (durée+courbe) */
.rv{transition:opacity .55s var(--e),transform .55s var(--e)}
/* langage du mouvement unifié */
.chip{transition:transform var(--d-tap),background var(--d) var(--e),color var(--d) var(--e)}
.ft-toast{transition:transform var(--d-in) var(--e),opacity .3s,visibility 0s .45s;box-shadow:var(--sh3)}
.ft-toast.show{transition-delay:0s}
.pwa-banner{transform:translateY(20px);transition:transform var(--d-in) var(--e),opacity .3s;box-shadow:var(--sh3)}
.ft-fly{box-shadow:var(--sh3)}
/* icônes : retour de tap aussi fluide que l'appui, plus de double écrasement dans la nav */
.iconbtn .ic,.nav a .ic{transition:transform var(--d-tap) var(--e)}
.iconbtn:active .ic{transform:scale(.88)}
.nav a:active .ic{transform:none}
/* le bouton de conversion : couleur transitionnée + pulsation de succès */
.buybar button.single_add_to_cart_button{transition:transform var(--d-tap),background-color .3s var(--e)}
.buybar button.single_add_to_cart_button.done,.cta.done{animation:okpulse .38s var(--e-pop)}
@keyframes okpulse{50%{transform:scale(1.035)}}
/* sortie de page : courte, accélérante, même axe que l'entrée */
.app{transition:opacity .22s}
.app.leaving{opacity:.5}
.screen{transition:transform .22s cubic-bezier(.4,0,1,1)}
.app.leaving .screen{transform:translateX(-10px)}
/* FAQ : ouverture animée (natif Chrome/Edge + repli universel) */
:root{interpolate-size:allow-keywords}
details.acc::details-content{opacity:0;block-size:0;overflow:clip;transition:block-size .34s var(--e),opacity .25s,content-visibility .34s allow-discrete}
details.acc[open]::details-content{opacity:1;block-size:auto}
details.acc[open] .acc-b{animation:accIn .32s var(--e) both}
@keyframes accIn{from{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:none}}
/* détails « app chère » */
::selection{background:color-mix(in srgb,var(--brand) 24%,transparent)}
.promo ::selection,.marquee ::selection,.ft-toast ::selection{background:rgba(143,196,255,.35)}
input,textarea{caret-color:var(--brand)}
.ft-toast .tk{flex:none;width:22px;height:22px;border-radius:50%;background:var(--ok);display:flex;align-items:center;justify-content:center}
.ft-toast .tk svg{width:13px;height:13px;stroke:#fff;stroke-width:2.6;fill:none;stroke-linecap:round;stroke-linejoin:round}
.ft-toast .tx{flex:1}
.ft-toast a{color:var(--brand-soft)}
.ft-toast.err{background:var(--err)}
/* couleurs systématisées */
.promo{background:linear-gradient(135deg,var(--promo1),var(--promo2))}
.promo .k{color:var(--brand-soft)}
.wc .woocommerce-error{border-left-color:var(--err);background:var(--err-bg)}
.cta,.err404 .e-btn,.buybar button.single_add_to_cart_button,.woocommerce a.button,.woocommerce button.button,.woocommerce .button.alt,.wc .wc-block-components-button{background:var(--brand-btn)!important;color:var(--btn-ink)!important;border-radius:var(--r-btn)!important}
/* échelle typo : plus de 10/10.5px orphelins */
.trust .t div{font-size:var(--f-xs)}
.pwa-banner .pt b{font-size:var(--f-s)} .pwa-banner .pt span{font-size:var(--f-xs)}
.pdp .cat{letter-spacing:.08em}
/* fiche : le titre reprend sa vraie taille (le .wc h1 générique l'écrasait) */
.wc .pdp h1{font-size:var(--f-h2);padding:0;margin:6px 0 8px;line-height:1.18;letter-spacing:-.02em}
/* système d'icônes : un seul trait, tailles sur grille */
.top .iconbtn .ic{width:24px;height:24px;stroke-width:1.8}
.trust .t .ic{width:24px;height:24px;stroke-width:1.8}
/* alignement optique du header (la zone tactile ne compte pas comme marge) */
.iconbtn{position:relative}
/* bandeau : icônes maison blanches à accent clair + pause au toucher */
.marquee .trk span{display:inline-flex;align-items:center;gap:6px}
.marquee .ic{width:15px;height:15px;stroke:#fff;flex:none}
.marquee:active .trk{animation-play-state:paused}
/* bannière PWA : le mark signature à la place du PNG */
.pwa-banner .pwa-mk{flex:none}
.pwa-banner .pwa-mk .ft-mark{width:42px;height:42px;display:block;border-radius:11px;box-shadow:0 0 0 1px rgba(255,255,255,.16)}
/* cibles tactiles complètes */
.err404 .e-home{min-height:44px;display:inline-flex;align-items:center}
.pwa-x{min-width:44px;min-height:44px}
/* retours de tap manquants */
.sec .more:active,.err404 .e-home:active,.ft-toast a:active{opacity:.5;transition:opacity var(--d-tap)}
/* stepper : bornes annoncées au doigt */
.qstep .qs:disabled{opacity:.32;pointer-events:none}
/* recherche : croix native aux couleurs de la marque */
.search input::-webkit-search-cancel-button{-webkit-appearance:none;width:16px;height:16px;background:var(--surf2);border-radius:50%;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' stroke='%235b6b82' stroke-width='2.6' fill='none' stroke-linecap='round'%3E%3Cpath d='M7 7l10 10M17 7 7 17'/%3E%3C/svg%3E");background-size:9px;background-position:center;background-repeat:no-repeat}
.noresult .ic{width:40px;height:40px;stroke:var(--line);stroke-width:1.6;margin:0 auto 10px;display:block}
.noresult a.go{display:inline-flex;align-items:center;gap:8px;background:var(--brand-btn);color:#fff;font-weight:700;font-size:var(--f);padding:12px 20px;border-radius:var(--r-btn);margin-top:16px}
.noresult a.go:active{transform:scale(.97)}
/* desktop : scrollbar discrète sur le fond de marque */
@media(min-width:1024px){
  /* À 60-70 cm d'un écran de bureau, 10-11px c'est le plancher de l'illisible —
     et c'est la taille de « Livrée le lendemain / Retour 14j », l'argument de vente. */
  .trust .t div{font-size:12px}
}
@media(min-width:1024px){
  html{scrollbar-width:thin;scrollbar-color:rgba(255,255,255,.22) transparent}
  /* Le curseur blanc pensé pour le fond navy rendait INVISIBLES les ascenseurs
     internes de la colonne (tableaux de caractéristiques, carrousels) : la
     moitié droite d'un tableau n'avait plus aucun indice de défilement. */
  .app{scrollbar-color:rgba(15,23,42,.35) transparent}
  .app ::-webkit-scrollbar{width:8px;height:8px}
  .app ::-webkit-scrollbar-thumb{background:rgba(15,23,42,.3);border-radius:4px}
  ::-webkit-scrollbar{width:9px} ::-webkit-scrollbar-thumb{background:rgba(255,255,255,.22);border-radius:5px} ::-webkit-scrollbar-track{background:transparent}
  /* (le fond de marque est défini tout en bas du fichier, après la règle
     html,body de la vague 9 qui l'écrasait — l'ordre du fichier fait loi) */
}
@media(prefers-reduced-motion:reduce){details.acc[open] .acc-b{animation:none} .buybar button.single_add_to_cart_button.done,.cta.done{animation:none}}
/* ==================== vague 9 : filtres, zoom, page Merci, récents ==================== */
/* barre Trier / Filtrer */
.fbtn{flex:1;display:flex;align-items:center;justify-content:center;gap:7px;min-height:44px;background:var(--surf);border-radius:var(--r-btn);font-size:var(--f-s);font-weight:700;transition:transform var(--d-tap),background var(--d) var(--e)}
.fbtn:active{transform:scale(.97);background:var(--surf2)}
.fb-n{background:var(--brand2);color:#fff;font-size:11px;font-weight:800;min-width:18px;height:18px;border-radius:9px;display:inline-flex;align-items:center;justify-content:center;padding:0 5px;margin-left:2px}
/* bottom-sheet */
body.sheet-open{overflow:hidden}
.sheet-back{position:fixed;inset:0;z-index:55;background:rgba(6,10,20,.52);opacity:0;pointer-events:none;transition:opacity .28s}
.sheet-back.on{opacity:1;pointer-events:auto}
.sheet{position:fixed;left:0;right:0;bottom:0;max-width:440px;margin:0 auto;background:var(--bg);border-radius:var(--r-l) var(--r-l) 0 0;padding:10px 20px calc(22px + env(safe-area-inset-bottom));transform:translateY(100%);transition:transform var(--d-in) var(--e);box-shadow:var(--sh3)}
.sheet-back.on .sheet{transform:none}
.sheet .opts{display:flex;flex-direction:column;gap:2px}
.sheet .opts.row{flex-direction:row;flex-wrap:wrap;gap:8px}
.sheet .opt{display:flex;align-items:center;cursor:pointer}
.sheet .opt input{position:absolute;opacity:0;pointer-events:none}
.sheet .opts:not(.row) .opt span{flex:1;padding:12px 4px;font-size:var(--f);font-weight:500;border-bottom:.5px solid var(--line);display:flex;align-items:center;justify-content:space-between}
.sheet .opts:not(.row) .opt input:checked+span{color:var(--brand);font-weight:700}
.sheet .opts:not(.row) .opt input:checked+span::after{content:"✓";font-weight:800}
.sheet .opts.row .opt input:checked+span{background:var(--chip-on);color:var(--chip-on-ink)}
.sheet .opt.sw span{padding:12px 4px;font-size:var(--f);font-weight:500;flex:1;display:flex;align-items:center;justify-content:space-between}
.sheet .opt.sw input:checked+span::after{background-color:var(--brand);box-shadow:none;background-image:radial-gradient(circle 11px at 32px 50%,#fff 98%,transparent)}
.sheet-apply{width:100%;min-height:50px;margin-top:16px;background:var(--brand-btn);color:var(--btn-ink);border-radius:var(--r-btn);font-size:var(--f-md);font-weight:700;transition:transform var(--d-tap)}
.sheet-apply:active{transform:scale(.98)}
.sheet-actions{display:flex;gap:12px;align-items:center;margin-top:16px}
.sheet-actions .sheet-apply{margin-top:0;flex:1}
.sheet-reset{color:var(--muted);font-weight:600;font-size:var(--f-s);padding:12px 6px;min-height:44px;display:inline-flex;align-items:center}
/* zoom photo */
.pdp-img.zoomable::after{content:"";position:absolute;right:12px;bottom:12px;width:36px;height:36px;border-radius:50%;background:var(--bg);box-shadow:var(--sh1);background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%232f6fc0' stroke-width='1.8' stroke-linecap='round'%3E%3Ccircle cx='10.8' cy='10.8' r='6.4'/%3E%3Cpath d='M19.8 19.8 15.5 15.5M10.8 8v5.6M8 10.8h5.6'/%3E%3C/svg%3E");background-size:18px;background-position:center;background-repeat:no-repeat}
.zoom-back{position:fixed;inset:0;z-index:70;background:rgba(4,7,14,.93);display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .22s}
.zoom-back.on{opacity:1}
.zoom-back img{max-width:94%;max-height:86%;object-fit:contain;border-radius:12px;background:#fff;touch-action:pinch-zoom}
.zoom-x{position:absolute;top:calc(14px + env(safe-area-inset-top));right:14px;width:44px;height:44px;border-radius:50%;background:rgba(255,255,255,.14);color:#fff;font-size:18px}
/* page Merci (confirmation de commande) */
.ty-hero{text-align:center;padding:34px var(--sp) 8px}
.ty-check svg{width:64px;height:64px;stroke:var(--ok);fill:none;stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round}
.ty-check circle{stroke-dasharray:158;stroke-dashoffset:158;animation:tyc .7s var(--e) .1s forwards}
.ty-check path{stroke-dasharray:34;stroke-dashoffset:34;animation:tyc .45s var(--e) .65s forwards}
@keyframes tyc{to{stroke-dashoffset:0}}
.ty-hero h1{font-size:var(--f-h1);font-weight:800;letter-spacing:-.03em;margin:10px 0 4px}
.ty-hero p{color:var(--muted);font-size:var(--f-md)}
.ty-steps{display:flex;flex-direction:column;gap:10px;padding:18px var(--sp) 6px}
.ty-steps .s{display:flex;align-items:center;gap:12px;background:var(--surf);border-radius:var(--r);padding:13px 15px;font-size:var(--f);font-weight:600}
.ty-steps .s i{flex:none;width:26px;height:26px;border-radius:50%;background:var(--navy);color:#fff;font-style:normal;font-weight:800;font-size:13px;display:flex;align-items:center;justify-content:center}
.woocommerce-thankyou-order-received{display:none}
.woocommerce ul.woocommerce-order-overview{list-style:none;display:grid;grid-template-columns:1fr 1fr;gap:10px;padding:12px var(--sp);margin:0}
.woocommerce ul.woocommerce-order-overview li{background:var(--surf);border-radius:var(--r);padding:12px 14px;font-size:var(--f-xs);color:var(--muted);font-weight:600;border:0;float:none;width:auto;margin:0}
.woocommerce ul.woocommerce-order-overview li strong{display:block;font-size:var(--f);color:var(--ink);margin-top:3px}
@media(prefers-reduced-motion:reduce){.ty-check circle,.ty-check path{animation:none;stroke-dashoffset:0}}
/* correctifs relecture vague 9 */
.sheet-back{visibility:hidden;transition:opacity .28s,visibility 0s .28s}
.sheet-back.on{visibility:visible;transition:opacity .28s}
html.sheet-open{overflow:hidden}
.sheet{overscroll-behavior:contain}
/* grille boutique : les marges du CSS WooCommerce sur les <li> sont neutralisées (gap 64px → 16px) */
.wc ul.products li.product{margin:0!important;padding:0;display:block;float:none;width:auto}
/* ==================== vague 10 : meilleure app du marché ==================== */
/* chips avec icônes métier */
.chip .ic{width:16px;height:16px;flex:none}
/* logos paiement remontés (sous Alma) */
.pdp .pay{margin:10px 0 0;justify-content:flex-start;padding:0}
/* badge « ta trottinette » */
.compat-me{margin-top:8px;font-size:var(--f-s);font-weight:600;color:var(--warn)}
.compat-me.ok{color:var(--ok)}
.compat span.on,.compat a.on{background:var(--chip-on);color:var(--chip-on-ink)}
/* carte atelier accueil */
.atelier{display:flex;align-items:center;gap:13px;margin:20px var(--sp) 0;background:var(--surf);border-radius:var(--r-l);padding:16px;transition:transform var(--d-tap)}
.atelier:active{transform:scale(.985)}
.atelier .ai{width:46px;height:46px;border-radius:14px;background:var(--info-bg);display:flex;align-items:center;justify-content:center;flex:none}
.atelier .ai .ic{width:24px;height:24px;stroke:var(--brand)}
.atelier .at{flex:1}
.atelier .at b{display:block;font-size:var(--f);font-weight:700}
.atelier .at span{display:block;color:var(--muted);font-size:var(--f-s);line-height:1.4;margin-top:2px}
.atelier>.ic-chevron{width:18px;height:18px;stroke:var(--muted);flex:none}
/* motif « piste » signature */
.trail{position:relative;height:12px;margin:30px var(--sp) 0}
.trail::before{content:"";position:absolute;left:0;right:24px;top:5px;height:2px;border-radius:1px;background:repeating-linear-gradient(90deg,var(--line) 0 14px,transparent 14px 24px);-webkit-mask-image:linear-gradient(90deg,transparent,#000 45%);mask-image:linear-gradient(90deg,transparent,#000 45%)}
.trail::after{content:"";position:absolute;right:0;top:0;width:12px;height:12px;border:1.8px solid var(--brand);border-radius:50%}
/* piste discrète dans la promo */
.promo::after{content:"";position:absolute;inset:0;background:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 400 160'><g fill='none' stroke='%238fc4ff' stroke-opacity='.12' stroke-width='2' stroke-linecap='round' stroke-dasharray='2 13'><path d='M-20 150C120 122 195 62 245 -12'/><path d='M25 172C165 144 235 84 285 8'/></g></svg>") right/cover no-repeat;pointer-events:none;z-index:1}
.promo .pp{position:relative;z-index:2;will-change:transform}
/* fermeture de sheet : descente rapide couverte par le voile */
.sheet-back.on .sheet{transition:transform var(--d-in) var(--e)}
/* stagger du contenu de la sheet */
.sheet-back.on .sheet h3,.sheet-back.on .sheet h4,.sheet-back.on .opts .opt,.sheet-back.on .sheet-actions,.sheet-back.on .sheet-apply{animation:shIn .3s var(--e) both}
.sheet-back.on .opts .opt:nth-child(2){animation-delay:40ms}
.sheet-back.on .opts .opt:nth-child(3){animation-delay:80ms}
.sheet-back.on .opts .opt:nth-child(4){animation-delay:120ms}
.sheet-back.on .opts .opt:nth-child(n+5){animation-delay:150ms}
.sheet-back.on .sheet-actions,.sheet-back.on .sheet-apply{animation-delay:170ms}
@keyframes shIn{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
/* coche du toast qui se dessine (même langage que la page Merci) */
.ft-toast .tk svg path{stroke-dasharray:22;stroke-dashoffset:22}
.ft-toast.show .tk svg path{animation:tyc .35s var(--e) .15s forwards}
/* retours de tap harmonisés (fin des 340ms résiduels) */
.promo{transition:transform var(--d-tap)}
.pwa-btn,.err404 .e-btn,.noresult a.go,.sheet-apply{transition:transform var(--d-tap),background-color .3s var(--e)}
/* zoom : une vraie entrée (scale + fondu) */
.zoom-back{transition:opacity .26s var(--e)}
.zoom-back img{transform:scale(.96);transition:transform .3s var(--e)}
.zoom-back.on img{transform:scale(1)}
/* états vides animés */
.noresult .ic,.empty svg,.err404 .e-mark,.cart-zero .e-mark{animation:emIn .5s var(--e-pop) both}
.noresult b,.err404 h1,.cart-zero h1{animation:shIn .35s var(--e) .12s both}
.noresult a.go,.err404 .e-btn{animation:shIn .35s var(--e) .2s both}
@keyframes emIn{from{opacity:0;transform:scale(.75)}to{opacity:1;transform:none}}
/* trait unifié 1.8 (anciens 1.7 résiduels) */
.back svg,.trust .t svg{stroke-width:1.8}
/* galerie : fondu principal calé */
#ft-main img{transition:opacity .3s var(--e)}
@media(prefers-reduced-motion:reduce){
  .sheet-back.on .sheet h3,.sheet-back.on .sheet h4,.sheet-back.on .opts .opt,.sheet-back.on .sheet-actions,.sheet-back.on .sheet-apply,.empty svg,.cart-zero h1,.noresult a.go,.ft-toast .tk svg path{animation:none}
  .promo .pp{transform:none!important}
}
/* grilles : les items peuvent rétrécir (le texte nowrap ne déforme plus les colonnes) */
.wc ul.products li.product{min-width:0}
/* correctifs relecture vague 10 */
.sheet{max-height:min(85dvh,85vh);overflow-y:auto;-webkit-overflow-scrolling:touch}
.compat-me{min-height:22px}
/* Paiement express (Apple Pay / Google Pay via WooPayments) : sorti de la barre collante
   — qui doit rester à deux éléments — mais REMONTÉ dans le flux, juste sous le prix.
   C'est le moyen de paiement qui convertit le mieux sur mobile : on ne le cache pas. */
/* RÈGLE DE SURVIE : la barre d'achat ne contient QUE le prix et le bouton.
   Les plugins de paiement y injectent leurs boutons (WooPayments change de classe au fil
   des versions : wcpay-payment-request-wrapper, puis wcpay-express-checkout-wrapper…) et
   écrasaient le bouton « Ajouter au panier » à 28 px de large. On liste par exclusion :
   tout ce qui n'est pas à nous est sorti de la barre, quelle que soit sa classe. */
.buybar .wcpay-payment-request-wrapper,.buybar [class*="express-checkout"],
.buybar [class*="payment-request"],.buybar #wcpay-payment-request-button-separator,
.buybar .wc-block-components-express-payment{display:none!important}
/* et le formulaire prend toute la place restante */
.buybar form.cart{flex:1 1 auto;min-width:0}
.buybar .single_add_to_cart_button{flex:1 1 auto;min-width:0;white-space:nowrap}
.ft-express{margin:12px var(--sp) 2px}
.ft-express .lbl{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--muted);margin-bottom:8px}
.ft-express .lbl:before,.ft-express .lbl:after{content:"";flex:1;height:1px;background:var(--line)}
.ft-express .wcpay-payment-request-wrapper,.ft-express .wc-block-components-express-payment{display:block!important;margin:0}
.ft-express #wcpay-payment-request-button-separator{display:none!important}
/* ==================== vague 11 : le tunnel façon app ==================== */
/* checkout : sections numérotées, champs aérés, paiement en cartes */
.woocommerce-checkout #customer_details h3{font-size:var(--f-h3);font-weight:800;margin:20px 0 12px;display:flex;align-items:center;gap:10px;counter-increment:costep}
.woocommerce-checkout #customer_details h3::before{content:counter(costep);width:26px;height:26px;border-radius:50%;background:var(--navy);color:#fff;font-size:13px;display:inline-flex;align-items:center;justify-content:center;flex:none}
.woocommerce-checkout form.checkout{counter-reset:costep;padding:0 var(--sp)}
/* « Expédier à une adresse différente ? » est une case à cocher, pas une étape :
   le compteur lui donnait un numéro et la faisait passer pour obligatoire. */
.woocommerce-checkout #customer_details h3#ship-to-different-address{counter-increment:none}
.woocommerce-checkout #customer_details h3#ship-to-different-address::before{content:none}
.woocommerce-checkout .form-row label{font-size:var(--f-s);font-weight:600;color:var(--ink);letter-spacing:0}
.co-trust{display:flex;align-items:center;justify-content:center;gap:6px;flex-wrap:wrap;margin-top:12px;font-size:var(--f-xs);font-weight:600;color:var(--muted)}
.woocommerce-checkout .woocommerce-form__label-for-checkbox{text-transform:none;letter-spacing:0}
/* compte : tableau de bord app */
.mlist .mrow{text-decoration:none}
.mlist .mrow span{display:inline-flex;align-items:center;gap:12px}
.mlist .mrow span .ic{width:21px;height:21px;stroke:var(--brand)}
.mlist .mrow.out span .ic{stroke:var(--err)} .mlist .mrow.out{color:var(--err)}
/* commandes du compte : cartes sur téléphone, vrai tableau dès 900 px.
   Sur téléphone, woocommerce-smallscreen.css cachait le NUMÉRO (le <th>
   de la ligne) : trois cartes identiques « En cours · 24 septembre »
   (critique Léa). Il devient le titre de la carte, l'état une pastille à
   sa droite, puis une donnée par ligne. Les « !important » ne font que
   répondre à ceux de woocommerce-smallscreen.css. */
@media(max-width:899.98px){
  .woocommerce-MyAccount-content table.my_account_orders,.woocommerce-MyAccount-content table.my_account_orders tbody{display:block}
  /* Les cartes suffisent : plus de panneau gris autour d'elles. */
  .woocommerce-account .woocommerce-MyAccount-content table.my_account_orders{margin:0;padding:0;border:0;border-radius:0;background:none}
  .woocommerce-MyAccount-content table.my_account_orders thead{display:none}
  .woocommerce-account .woocommerce-MyAccount-content table.my_account_orders tr{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:6px 12px;background:var(--surf);border-radius:var(--r);padding:14px 16px;margin-bottom:10px}
  .woocommerce-account .woocommerce-MyAccount-content table.my_account_orders tbody th{display:block!important;grid-column:1;grid-row:1;min-width:0;padding:0;border:0;background:none;text-align:left;font-size:var(--f-md);font-weight:650}
  .woocommerce-account .woocommerce-MyAccount-content table.my_account_orders tbody th a{color:var(--ink);text-decoration:none}
  .woocommerce-account .woocommerce-MyAccount-content table.my_account_orders tbody th a::before{content:"Commande "}
  .woocommerce-account .woocommerce-MyAccount-content table.my_account_orders td{display:block;grid-column:1/-1;border:0;padding:0;background:none!important;font-size:var(--f-s);text-align:left!important;font-variant-numeric:tabular-nums}
  .woocommerce-account .woocommerce-MyAccount-content table.my_account_orders td::before{content:attr(data-title) "\00a0: ";float:none;font-weight:400;color:var(--muted);font-size:var(--f-s)}
  .woocommerce-account .woocommerce-MyAccount-content table.my_account_orders td.woocommerce-orders-table__cell-order-status{grid-column:2;grid-row:1;justify-self:end;display:inline-block;padding:3px 10px;border-radius:var(--pill,999px);background:var(--bg-page,#fff)!important;box-shadow:inset 0 0 0 1px var(--border-2,var(--line));font-weight:600;font-size:.8125rem}
  .woocommerce-account .woocommerce-MyAccount-content table.my_account_orders td.woocommerce-orders-table__cell-order-status::before{content:none}
  .woocommerce-account .woocommerce-MyAccount-content table.my_account_orders td.woocommerce-orders-table__cell-order-actions::before{content:none}
  .woocommerce-MyAccount-content table.my_account_orders td .button{display:flex;align-items:center;justify-content:center;width:100%;text-align:center;margin-top:8px}
}
/* L'état, en pastille neutre (liste et détail) : le libellé de WooCommerce,
   jamais la couleur seule. */
.woocommerce-MyAccount-content table.my_account_orders td.woocommerce-orders-table__cell-order-status,.ft-statut,.woocommerce-MyAccount-content mark.order-status{
  display:inline-block;padding:3px 10px;border-radius:var(--pill,999px);background:var(--bg-page,#fff);box-shadow:inset 0 0 0 1px var(--border-2,var(--line));color:var(--fg-1,var(--ink));font-size:.8125rem;font-weight:600;line-height:1.35;white-space:nowrap}
@media(min-width:900px){
  .woocommerce-account .woocommerce-MyAccount-content table.my_account_orders{display:table;width:100%;border-collapse:collapse;border:0;margin:8px 0 0}
  .woocommerce-account .woocommerce-MyAccount-content table.my_account_orders :is(th,td){padding:14px 12px;border:0;border-bottom:1px solid var(--line);text-align:left;vertical-align:middle;font-size:var(--f-s);font-variant-numeric:tabular-nums}
  .woocommerce-account .woocommerce-MyAccount-content table.my_account_orders thead th{font-size:var(--f-xs);font-weight:600;color:var(--muted)}
  .woocommerce-account .woocommerce-MyAccount-content table.my_account_orders tbody th{font-weight:650}
  .woocommerce-account .woocommerce-MyAccount-content table.my_account_orders td.woocommerce-orders-table__cell-order-status{display:table-cell;background:none;box-shadow:none;padding:14px 12px;border-radius:0}
  .woocommerce-account .woocommerce-MyAccount-content table.my_account_orders td.woocommerce-orders-table__cell-order-status::after{content:none}
  .woocommerce-account .woocommerce-MyAccount-content table.my_account_orders td.woocommerce-orders-table__cell-order-actions{text-align:right}
  .woocommerce-account .woocommerce-MyAccount-content table.my_account_orders td .button{display:inline-flex;align-items:center;justify-content:center;min-height:40px;padding:0 18px;margin:0;line-height:1.2}
}
/* Détail d'une commande : le surligneur jaune du navigateur (<mark>) sur
   le numéro, la date et l'état disparaît — du gras pour les deux premiers,
   la pastille neutre pour l'état. */
.woocommerce-MyAccount-content mark{background:none;color:var(--ink);font-weight:650}
.ft-cmd-etat{margin:14px 0 18px;padding:14px 16px;border-radius:var(--r);background:var(--surf)}
.ft-cmd-statut{display:flex;align-items:flex-start;gap:10px;margin:0;font-size:var(--f-s);color:var(--ink)}
.ft-cmd-statut .ic{width:20px;height:20px;flex:none;stroke:var(--brand)}
.ft-cmd-suivi{display:flex;align-items:center;gap:8px;margin:10px 0 0;font-size:var(--f-s)}
.ft-cmd-suivi .ic{width:18px;height:18px;stroke:var(--muted)}
.ft-cmd-suivi a{color:var(--brand);text-decoration:underline;text-underline-offset:2px}
.ft-cmd-rachat{margin:22px 0 0}
.ft-cmd-rachat h2,.ft-derniere h2{font-size:var(--f-h3);font-weight:650;margin:0 0 10px}
.ft-cmd-rachat ul{list-style:none;margin:0;padding:0;display:grid;gap:8px}
.ft-cmd-rachat li{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 12px 10px 16px;border:1px solid var(--line);border-radius:var(--r)}
.ft-cmd-rachat li::before{content:none}
.ft-cmd-rachat-n{min-width:0;font-size:var(--f-s);font-weight:500}
.ft-cmd-rachat .ft-btn{flex:none}
.ft-cmd-aide{margin:22px 0 0;padding:16px 0 0;border-top:1px solid var(--line)}
.ft-cmd-aide-t{margin:0 0 8px;font-weight:600}
.ft-cmd-aide ul{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:8px}
.ft-cmd-aide li::before{content:none}
.ft-cmd-aide a{display:inline-flex;align-items:center;gap:8px;min-height:44px;padding:0 16px;border-radius:var(--pill,999px);background:var(--surf);color:var(--ink);font-size:var(--f-s);font-weight:600;text-decoration:none;font-variant-numeric:tabular-nums}
.ft-cmd-aide a .ic{width:18px;height:18px;stroke:var(--brand)}
.ft-cmd-aide a:focus-visible{outline:2px solid var(--focus,#0b63ce);outline-offset:2px}
@media (hover:hover) and (pointer:fine){.ft-cmd-aide a:hover{background:var(--surf2)}}
/* Tableau de bord : la carte « Dernière commande ». */
.ft-derniere{margin:8px 0 16px;padding:16px;border:1px solid var(--line);border-radius:var(--r-l,var(--r))}
.ft-derniere-tete{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:6px 12px;margin:0}
.ft-derniere-n{font-size:var(--f-md);font-weight:650}
.ft-derniere-meta{margin:4px 0 0;color:var(--muted);font-size:var(--f-s);font-variant-numeric:tabular-nums}
.ft-derniere-piece{margin:10px 0 0;font-size:var(--f-s);font-weight:500}
.ft-derniere-piece span{color:var(--muted);font-weight:400}
.ft-derniere-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:14px}
@media(max-width:559.98px){.ft-derniere-actions .ft-btn{flex:1 1 0}}
/* connexion : carte de marque */
.login-hero{text-align:center;padding:26px var(--sp) 6px}
.login-hero .ft-mark{width:56px;height:56px;margin:0 auto 12px;display:block}
.login-hero h2{font-size:var(--f-h2);font-weight:800;letter-spacing:-.02em}
.login-hero p{color:var(--muted);font-size:var(--f-s);margin-top:4px;max-width:280px;margin-left:auto;margin-right:auto}
/* Venu du service d'annonces (fta_connexion_accroche, shop-ui.php) : une phrase qui dit où l'on
   reviendra, un peu plus longue, et « Créer mon compte », qui descend au formulaire d'inscription.
   L'ancre garde à l'écran l'intitulé « S'enregistrer », posé 36 px au-dessus du formulaire. */
.login-hero--occasion p{max-width:340px}
.login-hero .login-hero-act{max-width:none;margin-top:16px}
#ft-inscription{scroll-margin-top:40px}
.woocommerce form.login,.woocommerce form.register{background:var(--surf);border:0;border-radius:var(--r-l);padding:20px}
.woocommerce form.login .button,.woocommerce form.register .button{width:100%}
.woocommerce .lost_password{text-align:center;font-size:var(--f-s)} .woocommerce .lost_password a{color:var(--brand);font-weight:600}
/* ==================== vague 12 : poli visuel (jugement écran par écran) ==================== */
/* MODE SOMBRE : photos sur pastille blanche PARTOUT (redéclaré en fin de cascade) */
/* carrousels : la première carte respecte la gouttière de 20px */
.hrow,.chips{scroll-padding-inline:var(--sp)}
/* notices : langage carte, icône Woo supprimée (elle s'imprimait sur le texte) */
/* On supprime l'icône d'origine de WooCommerce (elle s'imprimait sur le texte)
   mais on en remet une lisible : sans repère autre que la couleur, une erreur de
   commande ressemblait trait pour trait à une confirmation. */
.wc .woocommerce-message::before,.wc .woocommerce-info::before,.wc .woocommerce-error::before,
.woocommerce-message::before,.woocommerce-info::before,.woocommerce-error::before{
  content:none!important;display:none!important}
.woocommerce-message::after,.woocommerce-info::after,.woocommerce-error::after{content:none}
.wc .woocommerce-message,.wc .woocommerce-info,.wc .woocommerce-error,.woocommerce-message,.woocommerce-info,.woocommerce-error{border:0!important;border-left:4px solid currentColor!important;box-shadow:var(--sh1);padding:12px 15px 12px 14px!important;background:var(--surf)}
.wc .woocommerce-info,.woocommerce-info{color:#1f5f9e}
.wc .woocommerce-error,.woocommerce-error{color:#a4231d}
.wc .woocommerce-error{background:var(--err-bg)}
.woocommerce-checkout .woocommerce-message{display:none} /* « ajouté au panier » n'a rien à faire au paiement */
/* Les lignes du panier sont rendues en cartes (grid) mais le <thead> de WooCommerce
   restait en display:table-header-group : au-dessus de 768 px, un en-tête
   « Produit | Prix | Quantité | Sous-total » flottait au-dessus des cartes sans
   s'aligner sur rien. Les libellés restent lisibles : WooCommerce les répète dans
   les attributs data-title de chaque cellule. */
.woocommerce-cart tr.cart_item td.product-thumbnail{display:block!important;grid-row:1/5;align-self:start;background:var(--bg);border-radius:var(--r-s);padding:6px}
.woocommerce-cart tr.cart_item td.product-remove{position:absolute;top:8px;right:8px;width:auto}
.woocommerce-cart table.shop_table td.actions{display:block;background:var(--surf);border-radius:var(--r);padding:12px!important;border:0}
.woocommerce-cart button[name="update_cart"]:disabled{display:none} /* le bouton fantôme disparaît, il revient dès qu'une quantité change */
/* Le !important d'origine écrasait DEUX choses que WooCommerce pose sans !important :
   le rouge du champ refusé et le vert du champ validé. Un client dont la commande
   était rejetée voyait 11 boîtes grises rigoureusement identiques. La règle est déjà
   la plus tardive du fichier : elle gagne sans !important. */
.woocommerce form .form-row.woocommerce-invalid input.input-text,
.woocommerce form .form-row.woocommerce-invalid select,
.woocommerce form .form-row.woocommerce-invalid textarea,
.wc .form-row.woocommerce-invalid input.input-text{
  border:1.5px solid var(--err);background:var(--err-bg)}
.woocommerce form .form-row.woocommerce-validated input.input-text,
.wc .form-row.woocommerce-validated input.input-text{border-color:var(--ok)}
/* Le rouge seul ne suffit pas : un ⚠ devant l'étiquette du champ fautif, comme le
   bandeau d'erreur du tunnel le fait déjà. */
.woocommerce .form-row.woocommerce-invalid > label::before{content:"\26A0 ";color:var(--err);font-weight:700}
/* Focus : le contour doit rester visible même sur un champ en erreur. */
.woocommerce input.input-text:focus,.woocommerce textarea:focus,.woocommerce select:focus,
.wc input:focus{outline:none;border-color:var(--brand2);
  box-shadow:0 0 0 3px color-mix(in srgb,var(--brand2) 32%,transparent)}
.wc form .form-row .required{color:var(--err);text-decoration:none}
.woocommerce-checkout #billing_country_field strong{display:flex;align-items:center;min-height:48px;background:var(--surf2);border-radius:12px;padding:0 14px;font-weight:600}
/* overlay de mise à jour Woo : voile de marque, plus de rond gris */
.woocommerce .blockUI.blockOverlay{background:color-mix(in srgb,var(--bg) 68%,transparent)!important;background-image:none!important;border-radius:var(--r)}
/* boutique : les prix s'alignent en bas de carte comme sur l'accueil */
.wc ul.products li.product{display:flex}
.wc ul.products li.product .card{width:100%;flex:1}
/* Merci : plus de trou de grille, n° de commande en tuile pleine largeur */
.woocommerce ul.woocommerce-order-overview::before,.woocommerce ul.woocommerce-order-overview::after{content:none!important;display:none!important}
.woocommerce ul.woocommerce-order-overview li:first-child{grid-column:1/-1}
/* promo : la photo assume sa pastille */
.promo .pp{background:#fff;border-radius:var(--r);padding:8px;filter:none;box-shadow:0 14px 28px -6px rgba(0,0,0,.45)}
/* bouton désactivé : état neutre, pas un bleu délavé */
.woocommerce button.button:disabled,.woocommerce button.button[disabled]{background:var(--surf2)!important;color:var(--muted)!important}
/* 320px : chips confiance sur une ligne */
@media(max-width:340px){.trust .t div{font-size:10px}}
/* ==================== vague 13 : portail final avant prod ==================== */
/* panier : la ligne s'éteint vraiment au tap */
.woocommerce-cart tr.busy,.cart_totals .shop_table.busy{opacity:.45;pointer-events:none;transition:opacity .2s}
/* sheets : focus clavier visible sur les options */
.sheet .opt input:focus-visible+span{outline:2.5px solid var(--brand2);outline-offset:2px;border-radius:8px}
/* toast d'erreur : lisible dans les deux modes (fond navy + filet erreur) */
.ft-toast.err{background:var(--navy);box-shadow:inset 3px 0 0 var(--err),var(--sh3)}
/* zoom : focus visible sur le déclencheur */
.pdp-img.zoomable:focus-visible{outline:2.5px solid var(--brand2);outline-offset:2px}
/* recherche : pagination stylée comme la boutique */
.wc .pagination{display:flex;gap:8px;justify-content:center;padding:20px 0}
/* sans JS : pas de boutons morts — tri natif de repli, sélecteur avec bouton */
html:not(.js) .fbar{display:none}
html:not(.js) .woocommerce .woocommerce-ordering{display:block;padding:4px var(--sp)}
/* marquee : pause basculable */
/* écran échec de paiement */
.ty-fail .ty-check.fail svg{stroke:var(--err)}
.ty-fail .e-btn{display:inline-flex;align-items:center;gap:8px;background:var(--brand-btn);color:#fff;font-weight:700;padding:14px 22px;border-radius:var(--r-btn);margin-top:14px}

/* ==================== vague 14 : recherche live + menu catégories (accueil) ==================== */
.finder{position:relative}
.finder .search{display:flex;align-items:center;gap:9px;background:var(--bg);border-radius:12px;box-shadow:var(--sh1);padding:0 13px;min-height:48px}
.finder .search svg{width:20px;height:20px;stroke:var(--mut,#64748b);fill:none;stroke-width:1.8;flex:none}
.finder .search input{flex:1;border:0;background:none;color:var(--ink);font:inherit;font-weight:600;min-width:0;outline:none;min-height:46px}
.finder .search:focus-within{box-shadow:0 0 0 2.5px var(--brand2),var(--sh1)}
/* Pendant l'aller-retour réseau, le panneau gardait les résultats précédents sans
   rien indiquer : le client croyait avoir raté sa frappe et retapait. */
.liveres.loading{opacity:.55}
.liveres.loading::before{content:"";position:sticky;display:block;top:0;height:2px;border-radius:2px;
  background:linear-gradient(90deg,transparent,var(--brand),transparent);
  background-size:40% 100%;background-repeat:no-repeat;animation:lrload 1.1s linear infinite}
@keyframes lrload{0%{background-position:-45% 0}100%{background-position:145% 0}}
.liveres{position:absolute;left:16px;right:16px;top:calc(100% - 10px);z-index:60;background:var(--bg);border-radius:var(--r,16px);box-shadow:var(--sh3,0 18px 40px rgba(15,23,42,.22));overflow:hidden;max-height:min(56vh,430px);overflow-y:auto;-webkit-overflow-scrolling:touch}
.liveres .lr{display:flex;align-items:center;gap:11px;padding:10px 13px;border-bottom:1px solid var(--line,#e6eaf1)}
.liveres .lr img,.liveres .lr-ph{width:44px;height:44px;border-radius:10px;object-fit:contain;background:#fff;flex:none;box-shadow:var(--sh1)}
.liveres .lr-t{display:flex;flex-direction:column;gap:2px;min-width:0}
.liveres .lr-t b{font-size:13.5px;line-height:1.25;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;color:var(--ink)}
.liveres .lr-t i{font-style:normal;font-weight:800;color:var(--brand);font-size:13.5px}
.liveres .lr-all{display:block;text-align:center;padding:13px;font-weight:700;color:var(--brand)}
.liveres .lr-none{padding:15px;text-align:center;color:var(--mut,#64748b);font-size:13.5px}

/* ==================== v0.5.0 : correctifs terrain ==================== */
/* 1) WooCommerce (woocommerce-smallscreen.css) impose width:48%+float aux <li> dès que
      la liste porte une classe columns-*. Sa spécificité battait la nôtre → les produits
      s'affichaient à 80px de large au lieu de 170. On reprend la main, définitivement. */
.wc ul.products[class*="columns-"] li.product,
.woocommerce ul.products[class*="columns-"] li.product,
.woocommerce-page ul.products[class*="columns-"] li.product,
.woocommerce ul.products li.product,
.woocommerce-page ul.products li.product{
	width:auto!important;float:none!important;clear:none!important;margin:0!important
}

/* Bandeau cookies affiché : on retire seulement le bandeau d'installation PWA
   (deux bandeaux superposés, c'est illisible). Une règle précédente cachait
   AUSSI l'en-tête, la navigation et la barre d'achat « tant que le mur
   cookies est debout ». Sauf que Complianz n'est pas un mur : c'est un
   bandeau en bas, la page reste utilisable. En ligne, un nouveau visiteur
   arrivait donc sans logo, sans panier et sans bouton « Ajouter au panier »
   jusqu'à son premier clic sur les cookies. Vu sur toutes les captures. */
html.cookiewall .pwa-banner{visibility:hidden;pointer-events:none}


/* Replié à 3 lignes : le client voit les produits tout de suite, le texte reste entier pour Google. */
.ft-cat-more{display:none;background:none;border:0;padding:4px 0 0;color:var(--brand);font:inherit;font-size:12.5px;font-weight:700;cursor:pointer;min-height:32px}

/* Recherche live dans l'en-tête : disponible sur TOUTES les pages, pas seulement l'accueil. */
.hsearch .search{flex:1;display:flex;align-items:center;gap:9px;background:var(--surf);border-radius:12px;padding:0 13px;min-height:44px}
.hsearch .search svg{width:19px;height:19px;stroke:var(--muted);fill:none;stroke-width:1.8;flex:none}
.hsearch .search input{flex:1;border:0;background:none;color:var(--ink);font:inherit;font-weight:600;min-width:0;outline:none;min-height:42px}
.hsearch .search:focus-within{box-shadow:0 0 0 2.5px var(--brand2)}
.hsearch-x{background:none;border:0;padding:6px;min-height:44px;min-width:40px;cursor:pointer}
.hsearch-x svg{width:20px;height:20px;stroke:var(--muted);fill:none;stroke-width:1.8}
.hsearch .liveres{left:var(--sp);right:var(--sp);top:calc(100% - 4px)}


/* Conteneur des pages dont le contenu est une page HTML collée : il isole leur mise en
   forme et rétablit une largeur et une respiration cohérentes avec le reste de l'app. */
.ft-embed{max-width:100%;overflow-x:hidden}
.ft-embed img{max-width:100%;height:auto}
.ft-embed table{display:block;overflow-x:auto;max-width:100%}
.ft-embed pre{white-space:pre-wrap;word-break:break-word}
/* Pas de bande blanche sur les côtés : la toile et l'app portent la même couleur. */

/* ==================== écran plus large que la colonne ====================
   Dès que la fenêtre dépasse la colonne, les côtés se voient. Avant : un gris
   pâle jusqu'à 1023px (le « flou blanc » signalé sur PC) puis un halo diffus de
   90px. Maintenant : le fond de marque s'applique dès que les côtés existent, et
   la colonne se détache par une SEULE ombre portée — ni liseré, ni halo, ni
   lueur. Rien n'est dessiné le long du contenu. */
/* 441 px, ET PAS 560. La colonne s'arrête à 440 px : les côtés existent donc
   dès 441. Le seuil était à 560, et entre les deux le visiteur voyait les
   bandes en #e7ebf2 — un gris si pâle qu'il se lit comme du blanc sur un écran
   lumineux. C'est le « blanc sur le côté » que le propriétaire a signalé une
   troisième fois : les corrections précédentes avaient enlevé le liseré et le
   halo, mais laissé cette fenêtre de 120 pixels de large.

   Le fond est posé sur html ET body : quand <html> porte un fond, celui du
   <body> ne se propage plus à la toile, et la teinte pâle de html ressortait
   au rebond de défilement et sous les pages courtes. */
@media(min-width:900px){
  /* la marque veille sur les côtés, sans crier — seulement quand elle a la place */
  body::after{content:"FAMILY TROTT · PIÈCES DE TROTTINETTE ÉLECTRIQUE · ATELIER CHÂLONS-EN-CHAMPAGNE (51)";
    position:fixed;left:22px;bottom:18px;max-width:calc(50vw - 260px);pointer-events:none;
    font-size:10px;font-weight:700;letter-spacing:.22em;line-height:2;color:rgba(255,255,255,.22)}
}
/* L'animation « ftlueur » a été retirée avec le halo qu'elle faisait respirer :
   piloter un élément qui n'existe plus ne fait rien, sinon égarer la prochaine
   personne qui lira ce fichier. */



/* Les liens rédactionnels doivent se voir : sans ça, les liens « conditions
   générales » et « politique de confidentialité » du tunnel de commande étaient
   indistinguables du texte, et personne ne pouvait les ouvrir. */
.doc .pagecontent a,
/* La description du produit n'avait aucune règle : le reset universel de la ligne 5
   met margin:0 partout, donc deux paragraphes se touchaient, un <h3> du propriétaire
   sortait PLUS GROS que les titres du thème, les puces étaient désalignées et une
   image gardait sa hauteur d'origine (img{max-width:100%} sans height:auto, ligne 14).
   Ces règles sont calquées sur celles déjà écrites pour les textes de catégorie. */
.pdp-desc{color:var(--ink);font-size:var(--f);line-height:1.62}
.pdp-desc h2,.pdp-desc h3,.pdp-desc h4{font-size:var(--f-h3);font-weight:700;color:var(--ink);margin:18px 0 6px;line-height:1.3}
.pdp-desc h2:first-child,.pdp-desc h3:first-child{margin-top:0}
.pdp-desc ul,.pdp-desc ol{padding-left:20px;margin:6px 0 12px;color:var(--muted)}
.pdp-desc li{margin:3px 0;line-height:1.55}
.pdp-desc strong,.pdp-desc b{color:var(--ink);font-weight:700}
.pdp-desc img{height:auto;border-radius:var(--r-s,10px);margin:8px 0}
.pdp-desc table{display:block;overflow-x:auto;max-width:100%;border-collapse:collapse;margin:10px 0;font-size:var(--f-s)}
.pdp-desc th,.pdp-desc td{border:1px solid var(--line);padding:7px 10px;text-align:left;white-space:nowrap}
.pdp-desc th{background:var(--surf2);color:var(--ink);font-weight:700}
.pdp-desc blockquote{border-left:3px solid var(--line);padding-left:14px;margin:10px 0;color:var(--muted)}
.pdp-desc a,
.ft-cat-text a,
.ft-cat-intro a,
.ft-embed a,
.woocommerce-privacy-policy-text a,
.woocommerce-terms-and-conditions-link{
  color:var(--brand);
  text-decoration:underline;
  text-underline-offset:2px;
}
.doc .pagecontent a:hover,.pdp-desc a:hover,.ft-embed a:hover{text-decoration-thickness:2px}

/* Les messages de WooCommerce doivent se distinguer autrement que par la couleur :
   une erreur de commande ressemblait à une confirmation pour qui ne perçoit pas
   les nuances de vert et de rouge. */
.woocommerce-message,.woocommerce-info,.woocommerce-error{
  border-left:4px solid currentColor;
  padding-left:12px;
}
.woocommerce-info{color:#1f5f9e}
.woocommerce-error{color:#a4231d}
.woocommerce-message::before{content:"\2713\00a0"; font-weight:700}
.woocommerce-info::before{content:"\2139\00a0"; font-weight:700}
.woocommerce-error::before{content:"\26A0\00a0"; font-weight:700}




/* L'onglet courant de la barre du bas ne se distinguait pas (1,07:1). */
.nav a[aria-current="page"]::after,.nav a.on::after{
  content:"";display:block;height:2px;border-radius:2px;background:var(--brand);margin-top:3px;
}



/* Mur cookies debout : plus rien derrière ne doit être atteignable au clavier,
   sinon on active un bouton qu'on ne voit pas. */


/* Sans JavaScript, « Trier » et « Filtrer » étaient des boutons morts et le tri
   natif de WooCommerce restait masqué : on rend l'inverse. */
html:not(.js) .fbtn{display:none}
html:not(.js) .woocommerce-ordering{display:block}


/* À l'impression, les barres fixes se posaient par-dessus le texte. */
@media print{
  .top,.nav,.buybar,.marquee,.fbtn,.sheet,.ft-express,.appfoot,.ft-toast,.pwa-banner,.mq-wrap{display:none!important}
  .app,.screen{position:static!important;transform:none!important;background:#fff!important}
  body{background:#fff!important;color:#000!important}
  /* Imprimer l'adresse complète de CHAQUE lien transformait un justificatif d'une
     page en deux. On ne la garde que là où elle sert : le suivi de commande. */
  .woocommerce-order-details a[href^="http"]::after,
  .woocommerce-order-overview a[href^="http"]::after{content:" (" attr(href) ")";font-size:11px;color:#555}
}


/* Badge « Promo » de la carte produit : sans style, il s'affichait comme un
   morceau de texte nu à côté de la vignette. */
.wc ul.products li.product{position:relative}
.ft-promo{
  position:absolute;top:10px;left:10px;z-index:2;
  background:var(--brand);color:#fff;font-size:11px;font-weight:800;
  letter-spacing:.02em;padding:3px 8px;border-radius:999px;pointer-events:none;
}


/* « Bientôt de retour » héritait du fond bleu du bouton d'achat via une règle
   !important : un produit en rupture s'affichait avec le même bouton qu'un
   produit achetable. */
.cta.off,.buybar .cta.off{
  background:var(--surf2)!important;
  color:var(--muted)!important;
  cursor:default;
  box-shadow:none!important;
}


/* Les marqueurs des messages, portés par le contenu et non par une icône
   d'image : ils survivent au mode contraste élevé et à l'impression. */
.woocommerce-message>:first-child::before{content:"\2713\00a0";font-weight:800}
.woocommerce-error>:first-child::before{content:"\26A0\00a0";font-weight:800}


/* Bouton de pause du bandeau : discret mais atteignable au clavier. */
.mq-pause{
  position:absolute;right:6px;top:50%;transform:translateY(-50%);z-index:3;
  background:var(--surf);border:1px solid var(--line);color:var(--muted);
  border-radius:6px;width:26px;height:22px;line-height:1;font-size:10px;
  cursor:pointer;display:flex;align-items:center;justify-content:center;
}
.mq-pause:focus-visible{outline:2px solid var(--brand);outline-offset:2px}
.marquee.mq-off .trk{animation-play-state:paused!important}
@media (prefers-reduced-motion:reduce){ .marquee .trk{animation-play-state:paused!important} }


/* Texte réservé aux lecteurs d'écran. */
.sr-only{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}
.ft-scoot-reset{background:none;border:0;padding:0;color:var(--brand);text-decoration:underline;font:inherit;cursor:pointer}
.ft-scoot-reset:focus-visible{outline:2px solid var(--brand);outline-offset:2px}

/* Choix du mode de livraison : c'était la seule commande du site laissée en radios
   brutes d'environ 26 px, empilées dans une demi-colonne de tableau, sur la page
   où le client valide sa commande. Même patron que les moyens de paiement. */
#shipping_method li:has(input:checked){border-color:var(--brand);background:var(--info-bg)}

/* Champ de recherche de la page 404 : c'est la sortie la plus utile de la page. */
.err404 .e-search{display:flex;flex-direction:column;gap:10px;margin:16px auto 4px;max-width:340px;width:100%}
.err404 .e-search .search{width:100%}

/* Bloc « Venir à l'atelier » : l'information qu'un client vient chercher quand sa
   trottinette ne roule plus. */
.rep-atelier address{font-style:normal;font-size:var(--f);line-height:1.6;color:var(--ink)}
.rep-atelier .rep-h{display:flex;align-items:center;gap:7px;margin:12px 0 14px;font-size:var(--f-s);color:var(--muted);font-weight:600}
.rep-atelier .rep-liens{display:flex;gap:10px;align-items:center;flex-wrap:wrap}

/* Accès clavier direct à la barre d'achat : invisible jusqu'au focus. */
.ft-vers-achat{position:absolute;left:-9999px}
.ft-vers-achat:focus{position:static;display:inline-block;margin:6px 0;padding:8px 12px;background:var(--navy);color:#fff;border-radius:8px;font-size:var(--f-s);font-weight:700;text-decoration:none}
/* Produit en rupture : le bloc gris reste, mais il y a une sortie à côté. */
.buybar .cta.off{flex:0 1 auto;opacity:.55;font-size:var(--f-s);padding:0 10px}


/* Barre « Commander » du panier : même patron que la barre d'achat de la fiche.
   On réserve la place en bas de page pour qu'elle ne recouvre rien. */
.woocommerce-cart .cartbar,.woocommerce-cart .cartbar-note{display:flex}
.cartbar .cta{flex:1;display:flex;align-items:center;justify-content:center}

/* Article de blog : les repères qui manquaient (date, catégorie, image, retour). */
.doc-fil a:hover{color:var(--brand)}
.doc-meta{display:flex;gap:8px;align-items:center;flex-wrap:wrap;font-size:var(--f-s);color:var(--muted);margin:6px 0 14px}
.doc-cat{background:var(--surf2);color:var(--ink);border-radius:var(--pill,999px);padding:3px 10px;font-weight:600;font-size:var(--f-xs)}
.doc-img{margin:0 0 16px;border-radius:var(--r);overflow:hidden;background:var(--surf)}
.doc-img img{width:100%;height:auto;display:block}

/* Espace « Ma trottinette » du compte client. */
.scoot-esp{padding:0 var(--sp)}
.scoot-actuel{display:flex;align-items:center;gap:12px;background:var(--info-bg);border:1px solid var(--line);
  border-radius:var(--r);padding:14px 16px;margin:0 0 14px}
.scoot-actuel svg{width:26px;height:26px;flex:none}
.scoot-actuel span{display:block;font-size:var(--f-xs);text-transform:uppercase;letter-spacing:.06em;color:var(--muted);font-weight:700}
.scoot-actuel b{font-size:var(--f-md);font-weight:800}
.scoot-vide{color:var(--muted);font-size:var(--f-s);margin:0 0 14px;line-height:1.55}
.scoot-form{display:flex;flex-direction:column;gap:9px;margin-bottom:8px}
/* Le nombre de modèles : le client voit tout de suite que sa machine a des
   chances d'y être, au lieu d'ouvrir un menu au hasard. */
.scoot-nb{font-weight:500;color:var(--muted);font-size:var(--f-xs)}
.scoot-form select{min-height:48px;border:1px solid var(--line);border-radius:12px;padding:0 12px;
  background:var(--bg);color:var(--ink);font:inherit;font-size:var(--f)}
/* Les marques servent de titres dans le menu : 115 modèles à plat sont
   illisibles, groupés le client descend à sa marque et lit dix lignes. */
.scoot-form optgroup{font-weight:700;color:var(--ink);background:var(--bg)}
.scoot-form option{font-weight:400;color:var(--ink);background:var(--bg)}
/* « Enregistrer » était un texte nu sans fond (critique Léa) : c'est le
   geste principal de la page, il prend le bouton principal du site — 48 px,
   fond d'action, toute la largeur sur téléphone. */
.scoot-form .e-btn,.scoot-suggere .e-btn{display:inline-flex;align-items:center;justify-content:center;align-self:flex-start;min-height:48px;padding:0 24px;border:0;
  background:var(--action,var(--brand));color:var(--action-ink,#fff);font:inherit;font-size:1rem;font-weight:600;cursor:pointer}
@media(max-width:559.98px){.scoot-form .e-btn,.scoot-suggere .e-btn{align-self:stretch;width:100%}}
/* La suggestion tirée de la dernière commande : une carte, un bouton. */
.scoot-suggere{display:flex;flex-direction:column;gap:12px;margin:0 0 18px;padding:14px 16px;border-radius:var(--r);background:var(--info-bg)}
.scoot-suggere p{display:flex;align-items:center;gap:10px;margin:0;font-size:var(--f-s)}
.scoot-suggere p .ic{width:24px;height:24px;flex:none;stroke:var(--brand)}
.scoot-tag{background:var(--chip-on,var(--info-bg));color:var(--chip-on-ink,var(--brand));border-radius:var(--pill,999px);
  padding:2px 9px;font-size:var(--f-xs);font-weight:700;margin-left:8px}
.scoot-vide-tag{font-style:normal;color:var(--muted);font-size:var(--f-xs);margin-left:8px}
/* Dans le groupe gris du tableau de bord (.mlist), le <span> de la ligne
   espace déjà ses enfants de 12px (gap pensé pour icône → libellé) : la marge
   de 8px s'y ajouterait et décollerait l'étiquette de « Ma trottinette ».
   -4px ramène l'écart à 8px, celui d'avant la mise en groupe (P7-bis). */
.mlist .scoot-row .scoot-tag,.mlist .scoot-row .scoot-vide-tag{margin-left:-4px}

/* Suggestion visée au clavier : un fond, pas seulement une couleur de texte. */
.liveres a.lr-on{background:var(--info-bg);outline:2px solid var(--brand);outline-offset:-2px}

/* ==================== fluidité ====================
   Une page catégorie rend 24 cartes, une fiche produit en rend 8 de plus, et
   l'accueil quatre rangées. Le navigateur calculait et peignait TOUT, y compris
   les trois quarts que personne n'a encore fait défiler.
   content-visibility:auto lui dit de sauter ce qui est hors écran ; la taille
   annoncée évite que la barre de défilement saute quand il rattrape.
   Aucun effet visuel : c'est la même page, calculée quand il faut. */
.hrow,.grid,.wc ul.products,.ft-cat-text,.faq{content-visibility:auto}
.ft-cat-text{contain-intrinsic-size:auto 1200px}
.faq{contain-intrinsic-size:auto 400px}
/* La zone au-dessus de la ligne de flottaison ne doit JAMAIS être sautée :
   ce serait échanger un peu de calcul contre un premier rendu plus lent. */
.promo,.trust{content-visibility:visible}
/* Une carte est un bloc indépendant : son calcul n'a pas à remonter dans la page. */
.citem{contain:layout paint style}

/* ═══════════════════════════════════════════════════════════════════════
   TUTORIELS DE RÉPARATION

   Un tutoriel se lit une clé à la main, souvent debout, souvent avec les
   doigts sales. D'où : de gros repères en tête, des étapes numérotées qu'on
   retrouve d'un coup d'œil, et des zones de contact généreuses.
   La couleur d'accent est l'ambre de l'atelier — elle sépare visuellement
   « réparer » de « acheter », qui reste en bleu.
   ═══════════════════════════════════════════════════════════════════════ */
:root{
  --atelier:#a8620d;          /* ambre atelier — 4,9:1 sur blanc */
  --atelier-bg:#fdf3e6;
  --atelier-fort:#7c4708;
  --facile:#2f6b47; --facile-bg:#e9f2ec;
  --moyen-n:#8c6108; --moyen-bg-n:#faf2e2;
  --expert:#a33a26; --expert-bg:#fbeeea;
}

/* ── carte de tutoriel ── */
.tuto-c{display:flex;gap:12px;align-items:center;background:var(--surf);border:1px solid var(--line);
  border-radius:var(--r);padding:10px;text-decoration:none;color:inherit;
  transition:border-color .18s var(--e),transform .18s var(--e),box-shadow .18s var(--e)}
.tuto-c:hover,.tuto-c:focus-visible{border-color:var(--atelier);transform:translateY(-2px);box-shadow:var(--sh2,0 6px 18px -8px rgba(22,32,46,.25))}
.tuto-c:active{transform:scale(.985)}
.tc-ph{width:64px;height:64px;flex:none;border-radius:12px;background:var(--atelier-bg);
  display:flex;align-items:center;justify-content:center;overflow:hidden}
.tc-ph img{width:100%;height:100%;object-fit:cover}
.tc-ph svg{width:26px;height:26px;stroke:var(--atelier)}
.tc-b{display:flex;flex-direction:column;gap:6px;min-width:0}
.tc-t{font-size:var(--f);font-weight:600;line-height:1.35}
.tc-m{display:flex;gap:6px;flex-wrap:wrap;align-items:center}
.tc-m em{font-style:normal;font-size:var(--f-xs);font-weight:700;padding:2px 8px;border-radius:var(--pill,999px);
  display:inline-flex;align-items:center;gap:4px}
.tc-m em svg{width:12px;height:12px}
.tc-d.tc-facile{background:var(--facile-bg);color:var(--facile)}
.tc-d.tc-moyen{background:var(--moyen-bg-n);color:var(--moyen-n)}
.tc-d.tc-expert{background:var(--expert-bg);color:var(--expert)}
.tc-h{background:var(--surf2);color:var(--muted)}

.tuto-row{display:flex;gap:12px;overflow-x:auto;padding:2px var(--sp) 6px;scrollbar-width:none;
  scroll-snap-type:x proximity;overscroll-behavior-x:contain}
.tuto-row::-webkit-scrollbar{display:none}
.tuto-row .tuto-c{flex:none;width:265px;scroll-snap-align:start}

/* ── index /reparer/ : la grille des pannes ── */
.panne-c{display:flex;flex-direction:column;gap:7px;align-items:flex-start;padding:15px 14px;
  background:var(--surf);border:1px solid var(--line);border-radius:var(--r);text-decoration:none;color:inherit;
  position:relative;overflow:hidden;transition:border-color .18s var(--e),transform .18s var(--e)}
.panne-c::before{content:"";position:absolute;inset:0;background:var(--atelier-bg);
  transform:translateY(101%);transition:transform .25s var(--e);z-index:0}
.panne-c:hover::before,.panne-c:focus-visible::before{transform:translateY(0)}
.panne-c > *{position:relative;z-index:1}
.panne-c:hover,.panne-c:focus-visible{border-color:var(--atelier);transform:translateY(-2px)}
.pc-i{width:38px;height:38px;border-radius:11px;background:var(--atelier-bg);display:flex;align-items:center;justify-content:center;
  transition:background .25s var(--e)}
.panne-c:hover .pc-i{background:#fff}
.tuto-vide{color:var(--muted);padding:0 var(--sp)}

/* ── page d'un tutoriel ── */
.tuto-cle .tk-facile b{color:var(--facile)} .tuto-cle .tk-expert b{color:var(--expert)}


.tuto-som li{margin:5px 0}
.tuto-som a{color:var(--ink);text-decoration:none;font-size:var(--f-s);font-weight:500;line-height:1.45}
.tuto-som a:hover,.tuto-som a:focus-visible{color:var(--atelier);text-decoration:underline}

/* Les étapes : chaque <h2> du texte reçoit son numéro, automatiquement. */
.tuto-corps{counter-reset:etape}
.tuto-corps h2{counter-increment:etape;display:flex;gap:11px;align-items:flex-start;
  font-size:var(--f-lg);font-weight:800;line-height:1.25;margin:30px 0 10px;scroll-margin-top:72px}
.tuto-corps h2::before{content:counter(etape);flex:none;width:30px;height:30px;border-radius:50%;
  background:var(--atelier);color:#fff;font-size:var(--f-s);font-weight:800;
  display:flex;align-items:center;justify-content:center;margin-top:1px}
.tuto-corps h3{font-size:var(--f-h3);font-weight:700;margin:18px 0 6px}
.tuto-corps ol{padding-left:20px;margin:6px 0 14px;color:var(--muted)}
.tuto-corps img{height:auto;border-radius:var(--r-s,10px);margin:8px 0;display:block}
.tuto-corps table{display:block;overflow-x:auto;max-width:100%;border-collapse:collapse;margin:10px 0;font-size:var(--f-s)}
.tuto-corps th,.tuto-corps td{border:1px solid var(--line);padding:7px 10px;text-align:left}
.tuto-corps th{background:var(--surf2);color:var(--ink);font-weight:700}
/* L'étape visée depuis le sommaire s'annonce une seconde, puis se tait. */
.tuto-corps h2:target::after{content:"";position:absolute;left:0;right:0;height:100%;
  background:var(--atelier-bg);border-radius:8px;z-index:-1;animation:vise 1.4s var(--e) forwards}
.tuto-corps h2{position:relative;z-index:0}
@keyframes vise{0%{opacity:.85}70%{opacity:.85}100%{opacity:0}}

.tuto-atelier .e-btn:active{transform:scale(.97)}

@media (prefers-reduced-motion:reduce){
  .panne-c::before{display:none}
  .tuto-corps h2:target::after{animation:none;opacity:0}
}

/* ═══════════════════ POINTEUR FIN (souris, pavé tactile précis) ═══════════════════
   Mesuré au navigateur : les carrousels cachaient 67 % de leur contenu sans
   aucun moyen évident de défiler à la souris (barre masquée, molette verticale
   inerte), et le parcours d'achat n'avait AUCUN état de survol — les cartes
   tuto en avaient un, la boutique non. Tout ce bloc n'existe que pour les
   pointeurs fins : rien ne change sur téléphone. */
@media (hover:hover) and (pointer:fine){
  /* 1. Les rangées défilantes montrent leur barre — fine, discrète, mais là. */
  .hrow,.chips,.tuto-row,.woocommerce-MyAccount-navigation ul{
    scrollbar-width:thin;scrollbar-color:rgba(15,23,42,.3) transparent;
    padding-bottom:8px}
  .hrow::-webkit-scrollbar,.chips::-webkit-scrollbar,.tuto-row::-webkit-scrollbar,.woocommerce-MyAccount-navigation ul::-webkit-scrollbar{
    display:block;height:6px}
  .hrow::-webkit-scrollbar-thumb,.chips::-webkit-scrollbar-thumb,.tuto-row::-webkit-scrollbar-thumb,.woocommerce-MyAccount-navigation ul::-webkit-scrollbar-thumb{
    background:rgba(15,23,42,.28);border-radius:3px}

  /* 2. Le survol répond — même langage que les :active existants. */
  .card:hover{transform:translateY(-2px)}
  .card:hover .ph{box-shadow:var(--sh2,0 6px 18px -8px rgba(22,32,46,.25))}
  .chip:hover:not(.on){background:var(--surf2)}
  .iconbtn:hover,.fbtn:hover,.mq-pause:hover{background:var(--surf2)}
  .mrow:hover{background:var(--surf2)}
  .nav a:hover{color:var(--brand)}
  .cta:hover,.buybar button.single_add_to_cart_button:hover,.e-btn:hover,.sheet-apply:hover{
    filter:brightness(1.07)}
  .promo:hover .pp{transform:scale(1.04)}
  .promo .pp{transition:transform .3s var(--e)}
  .more:hover{text-decoration:underline}
  /* 3. Les suggestions de recherche se surlignent comme partout ailleurs. */
  .liveres a:hover{background:var(--info-bg)}
}
@media (prefers-reduced-motion:reduce){
  .promo .pp{transition:none}
  .card:hover{transform:none}
}

/* Carte « Faire réparer à l'atelier » (ex-carte colis, arrêtée le 24 septembre
   2026) : la réassurance qui fait pousser la porte. */
.rep-venir{display:flex;gap:12px;align-items:center;flex-wrap:wrap;background:var(--atelier-bg);border:1px solid var(--line);border-radius:var(--r);padding:15px 16px;margin:20px var(--sp) 0}
.rep-venir div{flex:1;min-width:180px}
.rep-venir span{font-size:var(--f-s);color:var(--ink);line-height:1.5}

/* Vidéo de tutoriel : vignette 16:9, lecteur au clic. */
.tuto-video{position:relative;aspect-ratio:16/9;border-radius:var(--r);overflow:hidden;background:#000;margin:0 0 18px}
.tuto-video .tv-go{position:absolute;inset:0;width:100%;border:0;padding:0;cursor:pointer;background:#000;display:block}
.tuto-video .tv-go img{width:100%;height:100%;object-fit:cover;opacity:.85}
.tuto-video .tv-btn{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:64px;height:64px;
  border-radius:50%;background:var(--atelier);color:#fff;font-size:22px;display:flex;align-items:center;
  justify-content:center;padding-left:5px;box-shadow:0 8px 24px rgba(0,0,0,.45);transition:transform .18s var(--e)}
.tuto-video .tv-go:hover .tv-btn,.tuto-video .tv-go:focus-visible .tv-btn{transform:translate(-50%,-50%) scale(1.08)}
.tuto-video .tv-lbl{position:absolute;left:50%;transform:translateX(-50%);bottom:14px;color:#fff;
  font-size:var(--f-s);font-weight:700;text-shadow:0 1px 6px rgba(0,0,0,.7)}
.tuto-video iframe{position:absolute;inset:0;width:100%;height:100%;border:0}
@media (prefers-reduced-motion:reduce){.tuto-video .tv-btn{transition:none}}

/* ─── règles reprises du guide (cantonnées à .guide) ─── */
.guide img{max-width:100%;height:auto}
.guide .sec{padding:56px 0}
.guide .sec.alt{background:#fff}
.guide .sec.bg{background:var(--surf)}
.guide .sh-tag{display:inline-flex;align-items:center;gap:6px;background:var(--info-bg);color:var(--brand);padding:4px 11px;border-radius:100px;font-size:.7rem;font-weight:800;text-transform:uppercase;letter-spacing:.06em;margin-bottom:9px}
.guide .card:hover{border-color:var(--brand);box-shadow:0 6px 22px rgba(37,99,235,.18)}
.guide .step-n{width:28px;height:28px;min-width:28px;background:linear-gradient(135deg,var(--brand),var(--brand));color:#fff;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:.72rem;font-weight:900;flex-shrink:0;margin-top:2px}
.guide .sym{background:#fff;border:2px solid var(--line);border-left:4px solid var(--brand);border-radius:12px;padding:14px 16px;transition:.15s}
.guide .sym:hover{border-left-color:var(--brand);box-shadow:0 1px 3px rgba(0,0,0,.08),0 4px 16px rgba(0,0,0,.06)}
.guide .al-s{background:#F0FDF4;border:1.5px solid #BBF7D0}
.guide .al-s p{color:#166534}
.guide .tw{overflow-x:auto;border:2px solid var(--line);border-radius:var(--r);-webkit-overflow-scrolling:touch}
.guide tr:hover td{background:var(--surf)}
.guide .cd{display:inline-block;font-family:'Courier New',monospace;font-weight:800;font-size:.75rem;padding:2px 7px;border-radius:5px;white-space:nowrap}
.guide .cr{background:#FEF2F2;color:#DC2626;border:1px solid #FECACA}
.guide .co{background:#FFF7ED;color:#C2410C;border:1px solid #FED7AA}
.guide .cb{background:#EFF6FF;color:#2563EB;border:1px solid #BFDBFE}
.guide .diy{background:#EFF6FF;color:#2563EB;border:1px solid #BFDBFE;display:inline-block;padding:2px 6px;border-radius:4px;font-size:.68rem;font-weight:700}
.guide .pro{background:#FFF7ED;color:#C2410C;border:1px solid #FED7AA;display:inline-block;padding:2px 6px;border-radius:4px;font-size:.68rem;font-weight:700}
.guide .btn-blue:hover{box-shadow:0 8px 28px rgba(74,144,226,.35);color:#fff}
.guide .btn-ghost2:hover{background:rgba(255,255,255,.08);border-color:rgba(255,255,255,.4);color:#fff}
.guide .panne{background:#fff;border:2px solid var(--line);border-left:5px solid var(--brand);border-radius:var(--r);padding:18px 20px;margin-bottom:10px;transition:.15s}
.guide .panne:hover{box-shadow:0 1px 3px rgba(0,0,0,.08),0 4px 16px rgba(0,0,0,.06);border-left-color:var(--brand)}
.guide .panne.rd{border-left-color:#DC2626}
.guide .panne.or{border-left-color:#EA580C}
.guide .panne.gr{border-left-color:#16A34A}
.guide .panne.bl{border-left-color:#2563EB}
.guide .panne h3{font-size:.92rem;font-weight:800;color:var(--ink);margin-bottom:5px}
.guide .panne p{font-size:.82rem;color:var(--muted);line-height:1.7;margin:0}
.guide .panne p strong{color:var(--ink);font-weight:700}
.guide .panne p em{font-style:normal;color:var(--brand);font-weight:600}
.guide .dg{display:grid;grid-template-columns:repeat(5,1fr);gap:12px;margin:20px 0}
.guide .dc{background:#fff;border:2px solid var(--line);border-radius:12px;padding:14px 10px;text-align:center;transition:.2s}
.guide .dc:hover{border-color:var(--brand);box-shadow:0 6px 22px rgba(37,99,235,.18)}
.guide .dc-p{font-size:1.6rem;font-weight:900;color:var(--brand);line-height:1}
.guide .dc-l{font-size:.75rem;font-weight:700;color:var(--ink);margin:5px 0 2px}
.guide .dc-s{font-size:.68rem;color:var(--muted)}
.guide .vc:hover{border-color:var(--brand)}
.guide .lp:hover{border-color:var(--brand);background:var(--info-bg)}
.guide .cc-row:last-child{border-bottom:none;padding-bottom:0}
.guide .cc-ico{width:36px;height:36px;min-width:36px;background:var(--info-bg);border-radius:9px;display:flex;align-items:center;justify-content:center;font-size:1rem}
.guide .faq-item{border:2px solid var(--line);border-radius:11px;margin-bottom:7px;overflow:hidden}
.guide .faq-item.on{border-color:var(--brand)}
.guide .fq{padding:14px 18px;font-weight:700;font-size:.88rem;cursor:pointer;display:flex;justify-content:space-between;align-items:center;color:var(--ink);gap:10px;user-select:none}
.guide .fq:hover{background:var(--surf)}
.guide .faq-item.on .farr{transform:rotate(180deg)}
.guide .fa{display:none;padding:0 18px 14px;font-size:.84rem;color:var(--muted);line-height:1.75}
.guide .faq-item.on .fa{display:block}
.guide .fa a{color:var(--brand);font-weight:600}
.guide .intro h2{margin-bottom:10px;font-size:1.3rem}
@media(max-width:900px){
  .guide .dg{grid-template-columns:repeat(3,1fr)}
}
@media(max-width:680px){
  .guide .dg{grid-template-columns:1fr 1fr}
  .guide .btn-blue, .guide .btn-ghost2{justify-content:center}
}
@media(max-width:480px){
  .guide .dg{grid-template-columns:1fr 1fr}
}

/* Rien dans le guide ne peut dépasser la colonne : ses grilles étaient
   pensées pour 1160 px, la colonne en fait 440. */
.guide *{min-width:0;max-width:100%;box-sizing:border-box}
.guide .sec{padding:14px 0 6px}
.guide .sec.bg,.guide .sec.alt{background:transparent}
.guide .dg{display:grid;grid-template-columns:1fr;gap:10px}
.guide .tw{overflow-x:auto;-webkit-overflow-scrolling:touch;margin:8px 0 14px;border:1px solid var(--line);border-radius:var(--r);
  /* le bord droit s'estompe : un tableau de 5 colonnes défile dans une colonne
     de 440 px, et rien ne le disait — le lecteur croyait la dernière colonne
     coupée. Le fond ne défile pas avec le contenu : le voile reste au bord. */
  background:linear-gradient(90deg,#fff 88%,rgba(15,23,42,.07))}
.guide table{width:100%;border-collapse:collapse;font-size:var(--f-xs);min-width:520px;max-width:none}
.guide .tp-bloc{margin:8px 0 14px}
.guide h3.tp-title{margin-top:12px}
.guide .tp-sub{font-size:var(--f-xs);color:var(--muted);margin:0 0 8px}
.guide details.faq-item{border:1px solid var(--line);border-radius:var(--r);background:#fff;margin-bottom:8px;overflow:hidden}
.guide summary.fq{cursor:pointer;list-style:none;padding:12px 14px;font-weight:700;font-size:var(--f-s);color:var(--ink);display:flex;justify-content:space-between;gap:10px}
.guide summary.fq::-webkit-details-marker{display:none}
.guide summary.fq::after{content:"+";font-weight:800;color:var(--brand);flex:none}
.guide details[open] summary.fq::after{content:"–"}
.guide .fa{padding:0 14px 12px;font-size:var(--f-s);color:var(--muted);line-height:1.6}
.guide .btn-blue,.guide .btn-ghost2{display:inline-flex;align-items:center;gap:8px;font-weight:700;font-size:var(--f-s);padding:11px 16px;border-radius:var(--pill,999px);text-decoration:none;margin:4px 6px 4px 0}
.guide-toc ol{margin:0;padding:0;list-style:none;display:grid;grid-template-columns:1fr 1fr;gap:6px 12px}
.guide-toc a:hover{color:var(--brand)}
@media(min-width:560px){.guide .dg{grid-template-columns:1fr 1fr 1fr}}

/* ─── Codes d'erreur : une page par code, le hub par marque ─── */
.code-badge{flex:none;min-width:54px;padding:8px 12px;border-radius:12px;background:#FEF2F2;color:#B91C1C;border:1px solid #FECACA;
  font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-weight:800;font-size:var(--f-md);text-align:center;line-height:1.2}
.code-meta span.ok{background:#F0FDF4;color:#166534}
.code-meta span.warn{background:#FFFBEB;color:#92400E}
.code-liste li{margin:0;padding:0}
.code-liste a:hover{border-color:var(--brand)}
.code-liste-produit{padding:2px var(--sp) 10px}

/* ─── Pages de panne : les causes et les vérifications, numérotées ─── */
.panne-liste li::marker{color:var(--brand);font-weight:800}


/* ─── Écran d'ordinateur : la colonne s'élargit, l'app reste l'app ───
   Jusqu'ici, un écran de 1 366 px montrait une colonne de 440 px au milieu du
   vide : deux tiers de l'écran perdus, une grille de deux produits là où quatre
   tiennent, une fiche produit qui oblige à défiler pour lire le prix. Ici la
   colonne passe à 1 200 px et chaque bloc se réorganise ; rien n'est redessiné,
   tout est replacé. La barre d'onglets du bas est un geste de pouce : à la
   souris elle disparaît, l'en-tête et le pied de page prennent le relais. */
@media(min-width:1024px){

  /* Les rangées qui défilaient au doigt deviennent des grilles de quatre. */
  .hrow{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:18px;overflow:visible;scroll-snap-type:none}
  .hrow>*{min-width:0;width:auto;max-width:none;scroll-snap-align:none;flex:none}

  /* Accueil : le chercheur de pièce et le titre côte à côte, le reste en pleine largeur. */
  .home #ft-contenu{display:grid;grid-template-columns:minmax(0,5fr) minmax(0,7fr);column-gap:30px;align-items:start}
  .home #ft-contenu>*{grid-column:1/-1;min-width:0}
  .home #ft-contenu>.hero{grid-column:2;grid-row:1;padding-top:40px}
  .home #ft-contenu>.hero h1{font-size:2.3rem}
  .home .trust{grid-template-columns:repeat(4,1fr);gap:14px}
  .home .trust .t div{font-size:13px}

  /* Fiche produit : image à gauche, achat à droite, comme on lit. */
  /* Trois lignes : image, vignettes, puis une ligne élastique qui absorbe la
     hauteur de la colonne d'achat. Sans elle, la colonne d'achat (qui s'étend
     sur les lignes) répartissait sa hauteur sur les deux premières et
     repoussait les vignettes 300 px sous l'image. */
  .single-product article.product{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);grid-template-rows:auto auto minmax(0,1fr);column-gap:40px;align-items:start;padding:0 var(--sp)}
  .single-product article.product>*{grid-column:1/-1;min-width:0}
  .single-product article.product>.pdp-img{grid-column:1;grid-row:1;border-radius:var(--r-l);position:sticky;top:80px}
  .single-product article.product>.pdp{grid-column:2;grid-row:1/span 3;padding:6px 0 8px}
  .single-product article.product>.pdp-reviews{grid-row:4}
  .single-product .pdp h1{font-size:1.6rem}
  .single-product .pdp .price{font-size:1.9rem}

  /* Les pages de texte gardent une colonne de lecture : 820 px, pas 1 200. */
  .doc,.rep,.faq,.tuto,.tuto-arch,.scoot-esp,.code,.marque-hub{max-width:820px;margin-left:auto;margin-right:auto}

  /* Les panneaux glissants (tri, filtres) : centrés, pas collés au bord. */
  .fbar{justify-content:flex-start}

}
@media(min-width:1280px){
  .grid,.wc ul.products,.hrow{grid-template-columns:repeat(5,minmax(0,1fr))}
  .home .hrow{grid-template-columns:repeat(4,minmax(0,1fr))}
}

/* La borne haute n'est PAS décorative. Ces règles sont écrites après le bloc
   « ordinateur » : sur un écran de 1 400 px, les trois conditions seraient vraies
   en même temps, et à spécificité égale c'est la dernière écrite qui gagne. Sans
   « max-width:1023px », l'app serait retombée à 860 px sur les grands écrans —
   on aurait réparé les tablettes en cassant les ordinateurs. */

/* ── Croisements pièce × modèle : /pieces-trottinette/{modele}/{categorie}/ ── */
.combo-intro p{margin:0 0 8px;font-size:15px;line-height:1.6;color:var(--t2,#5b6470)}
.combo-voisins a{display:inline-flex;align-items:center;gap:6px;padding:7px 12px;border-radius:999px;
  background:var(--s2,#f2f3f5);color:var(--t1,#1c1f24);text-decoration:none;font-size:13.5px;line-height:1.2}
.combo-voisins a:hover{background:var(--s3,#e7e9ec)}
.combo-nb{display:inline-block;margin-left:2px;font-size:12px;color:var(--t3,#8a919c);font-variant-numeric:tabular-nums}
/* Les codes d'erreur sur une page de MARQUE : le contenu que le site est seul
   à avoir, relié à la pièce. Volontairement plus visible que les pastilles de
   voisinage — c'est une réponse, pas une navigation de plus. */
.combo-codes a{display:inline-block;padding:6px 11px;border-radius:999px;background:var(--s1,#fff);
  border:1px solid var(--bd,#e3e5e9);color:var(--t1,#1c1f24);text-decoration:none;font-size:13px;line-height:1.25}
.combo-codes a:hover{border-color:var(--acc,#0a7cff);color:var(--acc,#0a7cff)}
.combo-codes p a:hover{text-decoration:underline}

.combo-remonte a:hover{text-decoration:underline}

/* Les rayons proposés sur un conseil : le seul chemin d'achat de la page.
   Même traitement que sur les fiches techniques, pour que le lecteur
   reconnaisse le geste d'une page à l'autre. */
.cons-rayons-l a{display:flex;flex-direction:column;gap:2px;padding:11px 13px;border-radius:12px;
  background:var(--s2,#f2f3f5);border:1px solid var(--bd,#e3e5e9);
  color:var(--t1,#1c1f24);text-decoration:none;line-height:1.35}
.cons-rayons-l a:hover{border-color:var(--acc,#0a7cff)}

/* Les pneus proposés sur une fiche technique : le seul chemin d'achat de cette
   page, donc volontairement visible sans être criard. */
.fiche-pneus-l a{display:flex;flex-direction:column;gap:3px;padding:11px 13px;border-radius:12px;
  background:var(--s2,#f2f3f5);border:1px solid var(--bd,#e3e5e9);
  color:var(--t1,#1c1f24);text-decoration:none;line-height:1.35}
.fiche-pneus-l a:hover{border-color:var(--acc,#0a7cff)}
.fiche-pneus-rupt{font-size:12px;color:var(--t3,#8a919c)}

/* ── Tri des codes d'erreur (archive /codes-erreur/) ── */
.code-tri-champ input{flex:1;min-width:0;font:inherit;font-size:var(--f);background:none;border:0;color:var(--ink);outline:none}
.code-tri-champ input::-webkit-search-cancel-button{filter:grayscale(1);opacity:.5}

/* ── Carrefour des catégories : pannes, codes, tutoriels ── */
.cc-liste{list-style:none;margin:0;padding:0 var(--sp);display:grid;gap:9px}
@media(min-width:560px){.cc-liste{grid-template-columns:1fr 1fr}}
.cc-liste a{display:block;padding:13px 15px;border-radius:14px;background:var(--surf);
  color:var(--ink);text-decoration:none;transition:background .18s ease,transform .18s ease}
.cc-liste a:hover{background:var(--s3,#e9ebef);transform:translateY(-1px)}
.cc-liste a:active{transform:none}
.cc-liste a b{display:block;font-size:var(--f);font-weight:650;letter-spacing:-.01em}
.cc-liste a span{display:block;margin-top:3px;font-size:var(--f-s);line-height:1.45;color:var(--muted)}

/* ── Fiche technique d'un modèle ──────────────────────────────────────────
   Elle répond à la question qui amène les gens ici (« quelle taille de pneu
   pour ma M365 »). Elle doit donc se lire d'un coup d'œil, sans effort : des
   blocs séparés par thème, la valeur en gras à droite du libellé, et la source
   affichée — c'est elle qui fait qu'on y croit. */
.specs-grille{display:grid;gap:11px;padding:0 var(--sp)}
@media(min-width:560px){.specs-grille{grid-template-columns:1fr 1fr}}
@media(min-width:1024px){.specs-grille{grid-template-columns:1fr 1fr 1fr}}
.specs-r{display:flex;justify-content:space-between;align-items:baseline;gap:14px;
  padding:9px 0;border-bottom:.5px solid var(--line)}
.specs-note{margin:12px var(--sp) 0;padding:11px 14px;border-radius:13px;
  background:var(--info-bg,var(--surf));font-size:var(--f-s);line-height:1.55;color:var(--t2,#5b6470)}
.specs-src{margin:9px var(--sp) 0;font-size:12px;line-height:1.5;color:var(--muted)}
.specs-src strong{color:var(--t2,#5b6470);font-weight:650}
.specs-doute a:hover{text-decoration:underline}

/* Arrivée en douceur, une carte après l'autre. Coupée si la personne a demandé
   moins d'animations — c'est exactement ce que ce réglage doit stopper. */
@media(prefers-reduced-motion:no-preference){
  @keyframes specs-in{from{opacity:0;transform:translateY(9px)}to{opacity:1;transform:none}}
}

/* ── La bibliothèque (/bibliotheque/) ── */
.bib-compte{list-style:none;display:flex;flex-wrap:wrap;gap:8px;margin:14px 0 0;padding:0}
.bib-compte li{flex:1 1 auto;min-width:82px;background:var(--surf);border-radius:14px;padding:11px 13px}
.bib-marque{margin-top:4px}
.bib-modeles a:hover{background:var(--s3,#e9ebef);transform:translateY(-1px)}
.bib-modeles a:active{transform:none}
.bib-tags{display:flex;flex-wrap:wrap;gap:5px;margin-top:5px}
.bib-tag{font-style:normal;font-size:11.5px;font-weight:600;color:var(--muted);
  background:var(--bg);border-radius:999px;padding:2px 8px}

/* ── Diagnostic de /reparer/ ──────────────────────────────────────────────
   Le champ passe avant tout le reste : c'est la porte d'entrée de l'univers
   réparation, et la seule chose à faire quand on a une panne est de la décrire. */
.diag-champ{display:flex;align-items:center;gap:10px;background:var(--surf);border-radius:15px;
  padding:14px 15px;border:1.5px solid transparent;transition:border-color .18s ease,background .18s ease}
.diag-champ:focus-within{border-color:var(--brand);background:var(--bg)}
.diag-champ .ic{width:19px;height:19px;stroke:var(--muted);flex:none}
.diag-champ:focus-within .ic{stroke:var(--brand)}
.diag-champ input{flex:1;min-width:0;font:inherit;font-size:var(--f-md,16px);background:none;border:0;color:var(--ink);outline:none}
.diag-aide b{color:var(--t2,#5b6470);font-weight:650;background:var(--surf);border-radius:6px;padding:1px 6px}

.diag-res{margin-top:16px}
.diag-gr{display:flex;align-items:center;gap:8px;margin:16px 0 8px;font-size:var(--f-s);
  font-weight:700;letter-spacing:.03em;text-transform:uppercase;color:var(--muted)}
.diag-gr span{font-size:11px;font-weight:650;background:var(--surf);border-radius:999px;padding:2px 8px;text-transform:none;letter-spacing:0}
.diag-liste{list-style:none;margin:0;padding:0;display:grid;gap:8px}
@media(min-width:560px){.diag-liste{grid-template-columns:1fr 1fr}}
.diag-liste li{margin:0}
.diag-liste a{display:block;padding:12px 14px;border-radius:13px;background:var(--surf);
  color:var(--ink);text-decoration:none;transition:background .18s ease,transform .18s ease}
.diag-liste a:hover{background:var(--s3,#e9ebef);transform:translateY(-1px)}
.diag-liste a:active{transform:none}
.diag-liste b{display:block;font-size:var(--f);font-weight:650;letter-spacing:-.01em}
.diag-liste span{display:block;margin-top:2px;font-size:var(--f-s);line-height:1.45;color:var(--muted)}
.diag-plus{padding:8px 14px;font-size:var(--f-s);color:var(--muted)}
.diag-rien{padding:18px 2px;font-size:var(--f);color:var(--muted)}
.diag-rien a{color:var(--brand);font-weight:650;text-decoration:none}


/* ── L'aide dans la barre de recherche ────────────────────────────────────
   Elle passe AVANT les pièces : quelqu'un qui tape « E4 » ou « ça freine pas »
   ne cherche pas un article, il cherche à comprendre. La pièce vient après,
   quand il sait ce qu'il lui faut. Un filet de couleur sur la gauche sépare les
   deux blocs sans avoir besoin d'un titre de plus. */
.lr-aide{border-left:3px solid var(--brand);margin:0 0 6px;padding-left:1px}
.lr.lr-a{align-items:flex-start;gap:10px}
.lr-g{flex:none;align-self:center;font-size:10.5px;font-weight:750;letter-spacing:.04em;
  text-transform:uppercase;color:var(--brand);background:var(--info-bg,var(--surf));
  border-radius:7px;padding:4px 8px;white-space:nowrap}
.lr.lr-a .lr-t i{font-style:normal;color:var(--muted);font-size:var(--f-s)}

/* ── Déclinaisons d'un modèle ─────────────────────────────────────────────
   Sept tableaux dépliés noieraient la page ; repliés, ils restent lus par
   Google (un <details> fermé n'est pas du contenu caché, c'est du contenu
   replié) et le lecteur n'ouvre que sa machine. */
.specs-var-i{margin:0 0 11px;font-size:var(--f-s);line-height:1.55;color:var(--muted)}
.specs-d{background:var(--surf);border-radius:14px;margin-bottom:8px;overflow:hidden}
.specs-d > summary{display:flex;align-items:baseline;justify-content:space-between;gap:12px;
  padding:13px 15px;cursor:pointer;list-style:none;font-size:var(--f);transition:background .16s ease}
.specs-d > summary::-webkit-details-marker{display:none}
.specs-d > summary::after{content:"";flex:none;width:8px;height:8px;margin-left:auto;align-self:center;
  border-right:2px solid var(--muted);border-bottom:2px solid var(--muted);
  transform:rotate(45deg) translateY(-2px);transition:transform .2s ease}
.specs-d[open] > summary::after{transform:rotate(-135deg) translateY(-2px)}
.specs-d > summary:hover{background:var(--s3,#e9ebef)}
.specs-d > summary b{font-weight:650;letter-spacing:-.01em}
.specs-d > summary span{font-size:var(--f-s);color:var(--brand);font-weight:600;white-space:nowrap}
.specs-d .specs-note,.specs-d .specs-src{margin-left:0;margin-right:0}

/* ── /reparer/ : un site dans le site ─────────────────────────────────────
   Quatre entrées en haut — diagnostic, symptôme, marque, modèle — parce que
   les gens n'arrivent pas tous par la même porte. Elles collent en haut quand
   on descend : dans une page qui porte 48 pannes, 52 marques et des centaines
   de modèles, on doit pouvoir changer d'avis sans remonter. */
.rep-nav{position:sticky;top:0;z-index:18;display:flex;gap:7px;overflow-x:auto;
  padding:10px var(--sp);margin-bottom:6px;background:var(--bg);
  scrollbar-width:none;scroll-snap-type:x proximity;
  box-shadow:inset 0 -.5px 0 var(--line)}
.rep-nav::-webkit-scrollbar{display:none}
.rep-nav a{flex:none;display:inline-flex;align-items:center;gap:6px;scroll-snap-align:start;
  padding:8px 13px;border-radius:999px;background:var(--surf);color:var(--ink);
  text-decoration:none;font-size:13.5px;font-weight:600;white-space:nowrap;
  transition:background .16s ease}
.rep-nav a:hover{background:var(--s3,#e9ebef)}
.rep-nav .ic{width:15px;height:15px;stroke:var(--brand);flex:none}


.rep-grille a:hover{background:var(--s3,#e9ebef);transform:translateY(-1px)}
.rep-grille a:active{transform:none}

/* Collée en haut, sauf pour qui a demandé moins de mouvement : un élément qui
   suit le défilement est exactement ce que ce réglage doit calmer. */
@media(prefers-reduced-motion:reduce){.rep-nav{position:static}}


/* ── L'explorateur : les cinq entrées de la page Réparation ───────────────
   Les chiffres d'abord, en gros. Ce ne sont pas des arguments de vente : ils
   sont comptés sur le contenu réellement publié, et c'est la première chose
   qui dit à un visiteur — et à une IA — l'ampleur de ce qu'il y a derrière. */
.rep-compte li{display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:2px;padding:12px 6px;border-radius:var(--r);background:var(--surf);text-align:center}

/* La barre d'onglets. Collée en haut : avec cinq entrées et des sections
   longues, on doit pouvoir changer d'avis sans remonter la page entière. */
.expl-tabs::-webkit-scrollbar{display:none}
.expl-tab .ic{width:15px;height:15px;stroke:var(--brand);flex:none;transition:stroke .2s ease}
.expl-tab:hover{background:var(--surf2)}
/* L'onglet ouvert se voit du premier coup d'œil : c'est le seul repère de
   position quand cinq sections se ressemblent. */
.expl-tab.on .ic{stroke:#fff}

/* Un panneau ne porte aucune décoration : c'est la section elle-même qui
   respire. Sans JavaScript ils s'affichent tous à la suite, et le titre de
   chacun suffit à s'y retrouver. */
.expl-pan[hidden]{display:none}
.expl-pan>.rep-titre{margin-top:2px}


/* ── Recherche et filtres des tutoriels ─────────────────────────────────── */
.tuto-filtres{display:flex;flex-direction:column;gap:9px;margin-top:11px}
.tuto-fgr{display:flex;flex-wrap:wrap;align-items:center;gap:6px}
.tuto-fl{flex:none;width:80px;font-size:11.5px;font-weight:700;letter-spacing:.04em;
  text-transform:uppercase;color:var(--muted)}
.tuto-f{display:inline-flex;align-items:center;gap:6px;padding:6px 11px;border:0;border-radius:999px;
  background:var(--surf);color:var(--ink);font:inherit;font-size:13px;font-weight:600;
  cursor:pointer;transition:background .16s ease,color .16s ease}
.tuto-f:hover{background:var(--s3,#e9ebef)}
.tuto-f span{font-size:11px;font-weight:650;color:var(--muted);font-variant-numeric:tabular-nums}
.tuto-f[aria-pressed="true"]{background:var(--brand);color:#fff}
.tuto-f[aria-pressed="true"] span{color:rgba(255,255,255,.75)}
.tuto-f:focus-visible{outline:2px solid var(--brand);outline-offset:2px}
@media(max-width:479px){.tuto-fl{width:100%}}

/* ── Suivre un tutoriel ───────────────────────────────────────────────────
   Le sommaire devient une liste de travail : on coche ce qu'on a fait, et on
   retrouve où on en était en revenant. Les repères doivent rester lisibles à
   bout de bras, téléphone posé sur l'établi. */
.tuto-som-t{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}
.tuto-veille{display:inline-flex;align-items:center;gap:7px;padding:7px 12px;border:0;border-radius:999px;
  background:var(--surf);color:var(--ink);font:inherit;font-size:13px;font-weight:600;cursor:pointer;
  transition:background .16s ease,color .16s ease}
.tuto-veille:hover{background:var(--s3,#e9ebef)}
.tuto-veille .ic{width:15px;height:15px;stroke:var(--brand);flex:none}
.tuto-veille[aria-pressed="true"]{background:var(--brand);color:#fff}
.tuto-veille[aria-pressed="true"] .ic{stroke:#fff}
.tuto-veille:focus-visible{outline:2px solid var(--brand);outline-offset:2px}

.tuto-avance{margin:8px var(--sp) 2px;font-size:var(--f-s);font-weight:600;color:var(--muted);
  font-variant-numeric:tabular-nums}
.tuto-fini .tuto-avance{color:var(--ok,#1a7f37)}

.tuto-som ol{list-style:none;margin:8px 0 0;padding:0 var(--sp);display:grid;gap:6px;counter-reset:none}
.tuto-som li{display:flex;align-items:stretch;gap:8px;margin:0}
.tuto-som li > a{flex:1;min-width:0;display:flex;align-items:center;gap:11px;
  padding:11px 13px;border-radius:13px;background:var(--surf);color:var(--ink);
  text-decoration:none;transition:background .16s ease}
.tuto-som li > a:hover{background:var(--s3,#e9ebef)}
.tuto-num{flex:none;width:26px;height:26px;border-radius:50%;background:var(--bg);color:var(--muted);
  display:inline-flex;align-items:center;justify-content:center;
  font-size:12.5px;font-weight:750;font-variant-numeric:tabular-nums}
.tuto-nom{min-width:0;font-size:var(--f-s);font-weight:600;line-height:1.4}

.tuto-coche{flex:none;width:44px;border:0;border-radius:13px;background:var(--surf);cursor:pointer;
  display:inline-flex;align-items:center;justify-content:center;transition:background .16s ease}
.tuto-coche:hover{background:var(--s3,#e9ebef)}
.tuto-coche:focus-visible{outline:2px solid var(--brand);outline-offset:2px}
.tuto-coche > span{width:19px;height:19px;border-radius:6px;border:2px solid var(--muted);
  display:block;position:relative;transition:background .16s ease,border-color .16s ease}
.tuto-coche[aria-pressed="true"] > span{background:var(--ok,#1a7f37);border-color:var(--ok,#1a7f37)}
.tuto-coche[aria-pressed="true"] > span::after{content:"";position:absolute;left:5px;top:1px;
  width:5px;height:10px;border-right:2px solid #fff;border-bottom:2px solid #fff;transform:rotate(42deg)}

.tuto-som li.tuto-ok > a{background:color-mix(in srgb,var(--ok,#1a7f37) 8%,var(--surf))}
.tuto-som li.tuto-ok .tuto-nom{color:var(--muted);text-decoration:line-through;text-decoration-thickness:1px}
.tuto-som li.tuto-ok .tuto-num{background:var(--ok,#1a7f37);color:#fff}
@supports not (background:color-mix(in srgb,red 50%,blue)){.tuto-som li.tuto-ok > a{background:var(--surf)}}

/* ── Les conseils (/conseils/) ────────────────────────────────────────────
   La réponse courte passe avant tout : c'est elle que Google affiche en
   extrait, qu'une IA cite, et que cherche quelqu'un debout à côté de sa
   machine. Le détail vient après, pour qui veut comprendre. */

.cons-liste{list-style:none;margin:0;padding:0 var(--sp);display:grid;gap:8px}
@media(min-width:560px){.cons-liste{grid-template-columns:1fr 1fr}}
.cons-liste a{display:block;padding:13px 15px;border-radius:14px;background:var(--surf);
  color:var(--ink);text-decoration:none;transition:background .18s ease,transform .18s ease}
.cons-liste a:hover{background:var(--s3,#e9ebef);transform:translateY(-1px)}
.cons-liste a:active{transform:none}
.cons-vers{margin:14px var(--sp) 0}
.cons-vers a{font-size:var(--f-s);font-weight:650;color:var(--brand);text-decoration:none}
.cons-vers a:hover{text-decoration:underline}

/* ── Les fiches techniques des machines qu'on ne vend pas ────────────────
   Dire franchement qu'on n'a pas la pièce vaut mieux qu'un bouton qui mène à
   une page vide : le bandeau est donc sobre et gris, pas rouge d'alerte — ce
   n'est pas un problème, c'est une information. */
.fiche-franchise span{display:block;margin-top:4px;font-size:var(--f-s);line-height:1.55;color:var(--muted)}
.fiche-franchise a:hover{text-decoration:underline}
