
:root{
  /* La pile mono etait recopiee a la main partout ; elle a un nom depuis le
     11 sept. 2026, pour que les classes neuves n'aient plus a la deviner. */
  --mono:"IBM Plex Mono",ui-monospace,SFMono-Regular,Menlo,monospace;
  --ground:#EEF2F2; --surface:#FFFFFF; --sunken:#E3EAEA;
  --line:#CBD7D8; --line-soft:#DDE5E5;
  --ink:#12191A; --ink-2:#3B4E52; --muted:#6B8085;
  /* ⚠ KIT « FORÊT », choisi par le propriétaire le 4 septembre 2026 sur maquette.
     Trois couleurs, et c'est le COUPLE accent/alerte qui a été jugé, pas l'accent
     seul : tout l'argument du site tient dans l'écart entre « vrai rabais » et
     « faux rabais ». Le vert dit « tu gagnes » là où la rouille dit « on te ment ».

     Deux essais écartés avant celui-ci, et les deux échouaient pour la même raison
     de fond — trop de saturation, pas assez de profondeur :
       #0E8F7C sarcelle (S 84 %) — « plate », et 3,55:1 sur --ground, donc SOUS le
         seuil AA de 4,5 ; le gris --muted d'à côté mesurait 3,69, l'accent était donc
         moins contrasté que le gris qu'il côtoie et se lisait comme du gris ;
       #1B5FD9 bleu vif (S 78 %) — « criard ».
     Le vert forêt tient à 50 % de saturation et 7,01:1 sur --ground. Ne pas remonter
     sa saturation ni sa luminosité sans refaire la mesure. */
  --live:#1F5C3D;            /* vert forêt : donnée vérifiée, vrai mouvement */
  /* ══ LE FEU D'ACHAT NE SUIT PLUS LE KIT DU SITE (6 sept. 2026, tranche par le
     proprietaire : « les couleurs doivent se rapprocher d'un feu de circulation et
     rien a voir avec le kit du design du site »).

     POURQUOI C'EST LA BONNE DECISION ET PAS UN CAPRICE. Les trois etats precedents
     etaient des DERIVES du kit foret : un vert tire de --live, un rouge tire de --lie,
     un ambre invente pour tenir entre les deux. Trois couleurs choisies pour s'accorder
     a une page — donc trois couleurs VOISINES, et l'histoire de ce bloc n'est qu'une
     suite d'echecs a les separer : 1,25 puis 1,46 puis 1,58 de separation vert/rouge,
     1,72 puis 1,32 en jaune/rouge. On optimisait a l'interieur d'une contrainte qui
     etait elle-meme le probleme.
     Un feu de circulation ne cherche pas l'accord : il cherche a etre COMPRIS de loin,
     par tout le monde, en un dixieme de seconde. C'est exactement le travail du point
     dans une liste qu'on balaie. Et le lecteur arrive en connaissant deja le code.

     LE JEU RETENU, MESURE (trois candidats compares, celui-ci gagne partout) :
       vert  #00A94F   jaune #FDB913   rouge #D8232A
     Separations entre remplissages — la mesure qui compte pour un oeil deutéranope,
     face au jeu foret qu'il remplace :
       vert/jaune   1,20  ->  1,79
       jaune/rouge  1,32  ->  2,89   (la demande du jour : « de bcp »)
       vert/rouge   1,58  ->  1,62
     La paire la plus faible passe donc de 1,20 a 1,62 : +35 %, et le jaune cesse d'etre
     une moutarde qui se confond avec la rouille.

     ⚠️ LE REMPLISSAGE NE PORTE PLUS LE CONTRASTE, ET C'EST ASSUME. Sur le blanc des
     listes, ce jeu mesure 3,09 / 1,73 / 5,01 — le jaune est tres bas. C'EST INHERENT :
     un jaune de feu EST clair, un jaune sombre n'est plus un jaune, c'est du brun, et
     c'est precisement le defaut qu'on corrige. Le contraste est donc porte par l'ANNEAU
     (voir la classe feu plus bas), qui tire chaque couleur a 55 % vers le noir :
       vert 8,07:1    jaune 5,25:1    rouge 11,11:1  sur --surface
     Les trois passent AA large. Le critere WCAG d'un objet graphique demande qu'une
     frontiere essentielle atteigne 3:1 — pas que le remplissage le fasse.
     ⚠️ ET LA COULEUR N'EST TOUJOURS PAS LE SEUL PORTEUR DU SENS : le point garde son
     title et son aria-label. Cette regle-la ne se negocie avec aucun jeu de couleurs. */
  --feu-v:#00A94F;
  --live-wash:#DCECE2;
  --lie:#A63D2F;             /* rouille : le faux rabais, et lui seul désormais */
  --lie-wash:#F7E2DC;
  /* Le rouge du feu n'est pas --lie, et ne l'est plus depuis le 6 septembre : --lie
     est la rouille du faux rabais, une couleur de TEXTE sous une pastille. Ici c'est un
     rouge de feu, franc, et sa seule fonction est d'arreter l'oeil. 5,01:1 sur le blanc
     des listes avant meme de compter l'anneau. */
  --feu-r:#D8232A;
  /* L'ambre. Tout l'historique de ce jeton tenait dans un arbitrage devenu sans objet :
     l'eclaircir pour le separer du rouge, ou l'assombrir pour tenir 3:1 sur le fond. On
     ne peut pas les deux, et le kit foret obligeait a choisir. L'anneau ayant repris le
     contraste, on prend le jaune qu'on voulait depuis le debut : celui d'un feu.
     ⚠️ PAS D'ACCENT GRAVE DANS CE BLOC : tout ce CSS vit dans un litteral gabarit, et un
     seul backtick y ferme la chaine. Deja paye deux fois. */
  --feu-j:#FDB913;
  --grid:#D6E0E1;
  --shadow:0 1px 2px rgba(13,23,25,.06), 0 8px 24px -12px rgba(13,23,25,.18);
}
@media (prefers-color-scheme:dark){
  :root:not([data-theme="light"]){
    --ground:#0C1417; --surface:#131F23; --sunken:#0A1113;
    --line:#22343A; --line-soft:#1A2A2F;
    --ink:#E6EFF0; --ink-2:#B3C6C9; --muted:#7B9198;
    --live:#6FD69A; --live-wash:#12301F;
    --lie:#E0765C; --lie-wash:#38201A;
    /* LE MEME FEU, REMONTE POUR UN FOND SOMBRE. Les valeurs du mode clair y tiennent
       toutes sauf le rouge, qui tombe a 3,36:1 sur --surface — juste au-dessus du seuil,
       sans marge. On remonte donc les trois du meme geste, en gardant les teintes :
       5,0 / 11,0 / 7,9:1 sur --surface, et la paire la plus faible reste a 1,39, encore
       au-dessus du 1,20 que le kit foret servait en mode clair.
       ⚠️ L'ANNEAU NE PORTE RIEN ICI. Tire vers le noir, il se fond dans le fond sombre :
       il ne fait que dessiner le bord du disque. En sombre, c'est le remplissage qui
       porte le contraste — d'ou ces valeurs plus claires, et c'est le seul endroit du
       fichier ou les deux themes ne se deduisent pas l'un de l'autre. */
    --feu-v:#1FCB6B;
    --feu-j:#FFC93C;
    --feu-r:#F2564E;
    --grid:#1C2C31;
    --shadow:0 1px 2px rgba(0,0,0,.4), 0 14px 32px -16px rgba(0,0,0,.7);
  }
}
:root[data-theme="dark"]{
  --ground:#0C1417; --surface:#131F23; --sunken:#0A1113;
  --line:#22343A; --line-soft:#1A2A2F;
  --ink:#E6EFF0; --ink-2:#B3C6C9; --muted:#7B9198;
  --live:#6FD69A; --live-wash:#12301F;
  --lie:#E0765C; --lie-wash:#38201A;
  --feu-v:#1FCB6B;
  --feu-j:#FFC93C;
  --feu-r:#F2564E;
  --grid:#1C2C31;
  --shadow:0 1px 2px rgba(0,0,0,.4), 0 14px 32px -16px rgba(0,0,0,.7);
}

*{box-sizing:border-box}
body{
  margin:0; background:var(--ground); color:var(--ink);
  font-family:"IBM Plex Sans",-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;
  font-size:16px; line-height:1.55; -webkit-font-smoothing:antialiased;
}
.wrap{max-width:1180px; margin:0 auto; padding:0 28px}
h1,h2,h3{font-family:Archivo,"Helvetica Neue",Arial,sans-serif; text-wrap:balance; margin:0}
.mono{font-family:"IBM Plex Mono",ui-monospace,SFMono-Regular,Menlo,monospace; font-variant-numeric:tabular-nums}
a{color:inherit}

/* ── lien d'évitement ────────────────────────────────────────────
   Hors écran tant qu'on ne l'atteint pas au clavier, visible dès qu'il a le
   focus. Il ne se cache PAS en display:none : un élément masqué ainsi ne peut
   pas recevoir le focus, et le lien ne servirait donc jamais. */
.saut{
  position:absolute; left:-9999px; top:0; z-index:100;
  background:var(--ink); color:var(--surface); padding:10px 16px;
  font-weight:600; text-decoration:none; border-radius:0 0 6px 0;
}
.saut:focus{left:0}

/* ── rail d'état ─────────────────────────────────────────────── */
.rail{
  border-bottom:1px solid var(--line); background:var(--sunken);
  position:sticky; top:0; z-index:20;
}
/* ⚠ TROIS ZONES, PAS UNE RANGEE (10 sept. 2026, demande du proprietaire : le menu
   de pays « dans le bandeau du haut en plein centre »). Une rangee flex avec
   margin-left:auto sur le dernier element ne peut pas centrer celui du milieu :
   pas d'accent grave ici, ce commentaire vit dans un gabarit de chaine —
   le centre se decale des que les compteurs changent de largeur — et ils changent a
   chaque pays, « 408 SHOPS » contre « 34 SHOPS ». La grille a colonnes egales de part
   et d'autre tient le centre quoi qu'il arrive. */
.rail-in{
  display:grid; grid-template-columns:1fr auto 1fr; align-items:center; gap:12px;
  font-family:"IBM Plex Mono",monospace; font-variant-numeric:tabular-nums;
  font-size:11px; letter-spacing:.09em; text-transform:uppercase; color:var(--muted);
  min-height:38px;
}
.rail-in b{color:var(--ink); font-weight:600}
.rail-g{display:flex; align-items:center; min-width:0}
.rail-g--r{justify-content:flex-end}
.rail-item{padding:0 16px; border-right:1px solid var(--line-soft); white-space:nowrap}
.rail-g--l .rail-item:first-child{padding-left:0}
.rail-g--l .rail-item:last-child{border-right:0}
.rail-g--r .rail-item{border-right:0; padding-right:0; display:flex; align-items:center; gap:7px}
.pulse{width:6px; height:6px; border-radius:50%; background:var(--live); box-shadow:0 0 0 0 var(--live); animation:p 2.6s infinite}
@keyframes p{0%{box-shadow:0 0 0 0 color-mix(in srgb,var(--live) 55%,transparent)}70%{box-shadow:0 0 0 7px transparent}100%{box-shadow:0 0 0 0 transparent}}
@media (prefers-reduced-motion:reduce){.pulse{animation:none}}

/* ── entête ──────────────────────────────────────────────────── */
header{padding:26px 0 0}
.brandbar{display:flex; align-items:baseline; justify-content:space-between; gap:20px; flex-wrap:wrap}
/* LA MARQUE. Pas de symbole : le mot suffit, et deux CAPITALES suffisent a le
   decouper — ElectricSkateboard se lit d'un coup, electricskateboard non. Le
   sarcelle marque les deux initiales, la meme couleur que le verdict verifie. */
.brand{font-family:Archivo,sans-serif; font-weight:800; font-size:21px;
  letter-spacing:-.024em; color:var(--ink)}
.brand b{color:var(--live); font-weight:800}
.brand-tld{color:var(--muted); font-weight:500; font-size:.82em}
.brand:hover b{color:var(--ink)}
nav{display:flex; gap:22px; font-size:13.5px; color:var(--ink-2)}
/* LE MENU DEROULANT. Il s'ouvre au survol ET au focus clavier : focus-within
   couvre les deux sans une ligne de script. Le panneau est en position absolue
   dans un .men en position relative — il ne pousse rien, et le pont invisible de
   10 px (le padding-top) evite qu'il se referme quand la souris traverse l'espace
   entre le lien et le panneau. Pas d'accent grave ici : ce commentaire vit dans un
   gabarit de chaine. */
.men{position:relative; display:flex; align-items:center}
.men > a{white-space:nowrap}
.men .sm{position:absolute; top:100%; left:-14px; z-index:60; padding-top:10px;
  opacity:0; visibility:hidden; transform:translateY(-4px);
  transition:opacity .12s ease, transform .12s ease, visibility 0s .12s}
/* LES DERNIERS MENUS S'OUVRENT VERS L'INTERIEUR. Cale a gauche, le panneau
   d'« Apparels » debordait de 21 px a droite — et un panneau seulement masque
   occupe quand meme la place : la page entiere gagnait une barre de defilement
   horizontale, fermee comme ouverte. Les quatre derniers s'ancrent a droite. */
.men:nth-last-child(-n+4) .sm{left:auto; right:-14px}
.men:hover .sm, .men:focus-within .sm{opacity:1; visibility:visible; transform:none; transition-delay:0s}
.sm-in{background:var(--surface); border:1px solid var(--line); border-radius:4px;
  box-shadow:0 12px 28px rgba(13,23,25,.10); padding:8px; min-width:232px;
  display:grid; grid-template-columns:1fr; gap:1px}
.sm-in a{display:flex; justify-content:space-between; align-items:baseline; gap:16px;
  padding:7px 10px; border-radius:3px; border-bottom:0; font-size:13px; color:var(--ink-2)}
.sm-in a:hover,.sm-in a:focus-visible{background:var(--sunken); color:var(--ink); outline:none}
.sm-in a span{font-family:"IBM Plex Mono",monospace; font-size:11px; color:var(--muted)}
@media(max-width:900px){
  /* Sur un ecran etroit il n'y a pas la place pour un panneau flottant : le bandeau
     garde ses sept engins et se fait defiler, les rayons restent accessibles depuis
     la page de chaque engin.
     ⚠ LE COMMENTAIRE LE DISAIT, LA REGLE NE LE FAISAIT PAS (trouve le 3 septembre
     2026, signale par le proprietaire : « le rendu sur un cell ne fonctionne pas »).
     nav est un enfant flex de .brandbar ; sans min-width:0, un enfant flex refuse
     de se retrecir sous la largeur de son contenu (min-width:auto est la valeur par
     defaut). Ses sept rubriques poussaient donc TOUTE LA PAGE en largeur — chaque
     page du site, pas seulement le menu — et un telephone rendait un site deux fois
     trop large, defilant horizontalement, rien de casse a l'oeil mais illisible.
     Pas d'accent grave dans ce commentaire : il vit dans un gabarit de chaine. */
  .men .sm{display:none}
  nav{min-width:0; overflow-x:auto; scrollbar-width:none}
  nav::-webkit-scrollbar{display:none}
}
nav a{text-decoration:none; padding-bottom:2px; border-bottom:1px solid transparent}
nav a:hover,nav a:focus-visible{border-bottom-color:var(--live); color:var(--ink); outline:none}
/* LE MENU DE PAYS, AU CENTRE DU BANDEAU DU HAUT. Il a passe la journee dans la barre
   de marque, ou il tenait la rangee de droite avec la navigation : le proprietaire l'a
   voulu au centre du bandeau, et la navigation y a regagne toute sa largeur — .brandbar
   retrouve ses deux enfants et son space-between d'origine.
   Il s'habille comme le bandeau, pas comme un formulaire : meme fonte a chasse fixe,
   memes capitales, fond transparent. Un select blanc a bordure au milieu d'une bande
   grise se lirait comme un corps etranger colle par-dessus.
   Pas d'accent grave ici : ce commentaire vit dans un gabarit de chaine. */
/* ⚠ IL DOIT SE VOIR EN ARRIVANT (10 sept. 2026, demande du proprietaire : « rend cette
   case plus dynamique et tape a l'oeil pour etre sur de la voir en partant »). La
   premiere version l'habillait du bandeau — meme gris, meme discretion — et elle
   disparaissait dans une bande de compteurs gris. Un reglage que personne ne remarque
   ne sert a personne : le lecteur repart avec les prix du monde entier au lieu des
   siens, et ne saura jamais qu'il pouvait choisir.
   Il porte donc la couleur vive du site, celle du verdict verifie, et un fond plein.
   C'est le seul element ACTIONNABLE de cette bande — tout le reste y est un chiffre a
   lire — et il est maintenant le seul a etre colore. */
.cur{display:flex; align-items:center; gap:8px; flex:none}
.cur-lab{font-size:11px; letter-spacing:.09em; text-transform:uppercase;
  color:var(--live); font-weight:600; white-space:nowrap}
.cur-sel{
  font-family:"IBM Plex Mono",monospace; font-size:11.5px; letter-spacing:.04em;
  color:#fff; font-weight:600; background:var(--live);
  border:1px solid var(--live); border-radius:5px;
  padding:4px 26px 4px 10px; cursor:pointer; max-width:46vw;
  /* La fleche est DESSINEE, pas heritee : l'habillage natif du select rend un chevron
     gris que le fond vert avale, et le controle perd le signe qu'il se deroule. */
  appearance:none; -webkit-appearance:none;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='7' viewBox='0 0 10 7'%3E%3Cpath d='M1 1l4 4 4-4' fill='none' stroke='%23fff' stroke-width='1.8' stroke-linecap='round'/%3E%3C/svg%3E");
  background-repeat:no-repeat; background-position:right 9px center;
  transition:box-shadow .18s ease, transform .18s ease;
}
.cur-sel:hover{transform:translateY(-1px); box-shadow:0 2px 10px color-mix(in srgb,var(--live) 45%,transparent)}
.cur-sel:focus-visible{outline:2px solid var(--ink); outline-offset:2px}
.cur-sel option{background:var(--surface); color:var(--ink); font-weight:400}
/* ⚠ L'APPEL NE BAT QUE TANT QU'AUCUN PAYS N'EST CHOISI. Une fois le choix fait, il
   n'y a plus rien a demander au lecteur, et une pastille qui continue de pulser au
   coin d'un reglage deja regle se lit comme une alerte.
   ⚠ ET IL DOIT SE VOIR : la premiere version ne faisait varier qu'une ombre portee
   sur six pixels, trois fois — « on s'apercoit presque de rien ». Une ombre qui
   grandit derriere un bouton se perd contre un fond gris ; ce qui attire l'oeil,
   c'est le MOUVEMENT du bouton lui-meme et un halo qui parcourt une vraie distance.
   Trois choses bougent donc ensemble, et huit fois plutot que trois : l'echelle, le
   halo (jusqu'a 14 px), et la luminosite du fond. Le mouvement reste petit — 4 % —
   parce qu'un bouton qui saute dans un bandeau collant devient penible en trois
   secondes ; c'est la REPETITION qui le fait remarquer, pas l'amplitude. */
.cur--neuf .cur-sel{animation:curpuls 1.5s ease-in-out 8}
.cur--neuf .cur-lab{animation:curlab 1.5s ease-in-out 8}
@keyframes curpuls{
  0%,100%{transform:scale(1); box-shadow:0 0 0 0 color-mix(in srgb,var(--live) 70%,transparent); filter:none}
  35%{transform:scale(1.04); box-shadow:0 0 0 8px color-mix(in srgb,var(--live) 26%,transparent); filter:brightness(1.12)}
  70%{transform:scale(1); box-shadow:0 0 0 14px transparent; filter:none}
}
@keyframes curlab{
  0%,100%{opacity:.62}
  35%{opacity:1}
}
@media (prefers-reduced-motion:reduce){
  .cur--neuf .cur-sel,.cur--neuf .cur-lab{animation:none}
}
@media(max-width:760px){ .cur-lab{display:none} }
/* La note du bandeau : elle dit le pays choisi, discrete, et ne parait que filtre. */
.pays-note{font-size:12px; color:var(--muted); margin:10px 0 0; line-height:1.5}

/* ── héros ───────────────────────────────────────────────────── */
/* LE HEROS : DEUX COLONNES QUI COMMENCENT ENSEMBLE.
 *
 * La version precedente sortait le titre sur toute la largeur, au-dessus des deux
 * colonnes. Deux defauts en sont nes : un grand vide a droite du titre, que rien
 * ne remplissait, et une colonne de gauche CENTREE VERTICALEMENT contre une carte
 * bien plus haute — le texte flottait au milieu de nulle part. Les trois blocs se
 * lisaient comme trois choses separees.
 *
 * Le titre revient dans sa colonne, et les deux colonnes s'alignent en HAUT :
 * l'oeil part du meme trait de gauche a droite.
 *
 * DEUX LIGNES, ET LA COUPURE EST CHOISIE. La phrase bascule au point — « That
 * sale is a deal. » puis « Unless it isn't. ». Laisser le navigateur casser ou il
 * veut brisait le balancement au milieu d'une proposition. */
/* SANS L'EYEBROW, LE HEROS REMONTE. Les 52 px du haut compensaient une ligne qui
   n'est plus la ; le titre commence donc plus pres du bandeau, et l'air perdu en
   haut est rendu en bas, ou il separe le heros de la recherche. */
.hero{display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1.02fr); gap:52px;
  align-items:start; padding:34px 0 58px}
/* SANS CARTE, UNE SEULE COLONNE. Un pays peut n'avoir aucun des cinq verdicts a
   montrer : la colonne de droite restait alors vide sur toute la hauteur du premier
   ecran, et la phrase d'accroche se serrait dans une moitie de page pour rien. */
.hero--seul{grid-template-columns:minmax(0,1fr); max-width:none}
.hero--seul .lede{max-width:64ch}
/* LA TAILLE DE LA PHRASE D'ACCROCHE. Elle etait descendue a 44px pour tenir dans
   sa colonne — resultat : le seul mot que l'oeil voyait en premier etait le verdict
   « Real deal. » de la carte de droite, a 58px. La promesse du site se faisait
   dominer par son propre exemple. Elle remonte au niveau du verdict ; la coupure
   au point garde les deux lignes courtes, donc la largeur tient. */
/* LA TAILLE SUIT LA LONGUEUR DU TITRE. « That sale is a deal. » remplissait la
   colonne a 58 px ; « Buy it now. » n'en occupe que la moitie — 276 px sur 531 —
   et se faisait dominer par le verdict de la carte voisine, qui fait 58 px lui
   aussi. Le titre le plus court doit etre le plus gros, sinon il pese moins. */
/* PAS DE CORRECTION OPTIQUE EN PIXELS FIXES. Essayee le 1er septembre : un
   un margin-top negatif pour aligner le trait du « B » sur le bord de la carte. Or la
   police est FLUIDE — de 40 a 84 px selon la largeur — et un decalage fixe est juste
   a une seule taille, faux partout ailleurs. Les boites s'alignent, et le leger
   retrait du texte dans sa boite est ce que fait n'importe quel titre du site. */
.hero-mot h1{font-size:clamp(40px,6.4vw,84px); line-height:.98}
.hero-mot .lede{margin-top:24px}
@media(max-width:900px){.hero{grid-template-columns:1fr; gap:30px; padding:26px 0 38px}
  .hero-mot h1{font-size:clamp(36px,9vw,58px)}}
/* ── fil d'Ariane ────────────────────────────────────────────── */
/* IL SE LIT AVANT LE TITRE, DONC IL NE DOIT PAS LE CONCURRENCER : monospace,
   petit, gris, un chevron maigre entre les maillons. Le dernier maillon n'est
   pas un lien — on n'envoie pas le lecteur sur la page ou il est deja. Il se
   met a defiler horizontalement plutot qu'a passer a la ligne : quatre maillons
   sur deux lignes se lisent comme deux fils. */
/* PAS DE display:flex ICI — et surtout pas d'accent grave dans ce commentaire,
   il vit a l'interieur d'un gabarit de chaine (bug du 31 aout : le serveur ne
   demarrait plus). La bande contient un .wrap, qui se centre avec margin:0 auto ;
   un element flex a marges auto se centre sur sa LARGEUR DE CONTENU, et le fil
   partait donc au milieu de la page pendant que la carte du produit commencait a
   gauche. La bande reste un bloc, le .wrap aligne, la rangee interieure est en flex. */
.ariane{
  /* display:block EST OBLIGATOIRE, PAS COSMETIQUE. La regle nue nav{display:flex}
     (la barre de navigation de l'en-tete) s'applique aussi a ce <nav> ; le .wrap
     interieur devenait alors un element flex a marges auto, donc centre sur sa
     largeur de contenu — le fil demarrait au milieu de la page. On reprend la main.
     Rappel : pas d'accent grave dans ce commentaire, il vit dans un gabarit. */
  display:block; gap:0;
  font-family:"IBM Plex Mono",monospace; font-size:11.5px; letter-spacing:.06em;
  color:var(--muted); padding:18px 0 0;
  overflow-x:auto; white-space:nowrap; scrollbar-width:none;
}
.ariane::-webkit-scrollbar{display:none}
.ariane a{color:var(--ink-2); text-decoration:none; border-bottom:1px solid var(--line)}
.ariane a:hover{color:var(--live); border-bottom-color:var(--live)}
.ariane .sep{color:var(--line); font-size:13px}
.ariane .mq{text-transform:uppercase; letter-spacing:.09em}
/* LE DRAPEAU. Il accompagne un nom de boutique, il ne le remplace pas : cale sur
   la ligne de base du texte voisin, jamais plus gros que lui, et non selectionnable
   pour ne pas polluer un copier-coller de la ligne. */
/* LE PAGEUR reprend exactement la forme de la pagination des listes : meme
   pastille, meme mono, meme creux pour la page courante. Deux paginations qui se
   ressemblent a moitie se lisent comme deux mecanismes differents. */
.pageur{display:flex; gap:6px; flex-wrap:wrap; align-items:center; margin-top:20px;
  font-family:"IBM Plex Mono",monospace; font-size:12px}
.pageur button{font:inherit; color:var(--ink-2); background:var(--surface);
  border:1px solid var(--line); border-radius:3px; padding:6px 11px; cursor:pointer}
.pageur button:hover:not(:disabled){border-color:var(--live); color:var(--live)}
.pageur button[aria-current="true"]{background:var(--ink); border-color:var(--ink); color:var(--ground)}
.pageur button:disabled{opacity:.4; cursor:default}
.pageur .de{color:var(--muted); margin-left:6px}
/* LA PROSE. Le site n'avait aucune page de texte suivi — tout y etait tableau ou
   pastille. Une mesure de ligne courte et un interligne large : ces pages se lisent,
   elles ne se balaient pas. */
.prose{max-width:74ch; font-size:15.5px; line-height:1.75; color:var(--ink-2)}
.prose p{margin:0 0 16px}
.prose ul{margin:0 0 16px; padding-left:20px}
.prose li{margin-bottom:9px}
.prose b{color:var(--ink); font-weight:600}
.prose a{color:var(--live)}
.prose code{font-family:"IBM Plex Mono",monospace; font-size:.9em; background:var(--sunken); padding:1px 5px; border-radius:3px}
/* Les puces de filtre servies par le serveur : meme forme que les boutons, mais
   ce sont des liens — ils fonctionnent sans script et se partagent. */
.filtres--liens a{font-family:"IBM Plex Mono",monospace; font-size:11.5px; letter-spacing:.04em;
  text-transform:uppercase; padding:6px 11px; border:1px solid var(--line); border-radius:3px;
  background:var(--surface); color:var(--ink-2); text-decoration:none}
.filtres--liens a:hover{border-color:var(--live); color:var(--live)}
.filtres--liens a b{font-weight:600; color:var(--muted); margin-left:3px}
.filtres--liens a[aria-current="true"] b{color:var(--ground); opacity:.75}

/* ── FILTRER ET TRIER SONT DEUX GESTES, PAS UN (4 sept. 2026) ──────────────────
   Les quatre rangees etaient des puces identiques, meme forme et meme noir a
   l'etat actif : rien ne disait laquelle RESTREINT la liste et laquelle la
   REORDONNE. Deux separations, toutes deux structurelles :
   1. les filtres passent en grille label/puces — les intitules s'alignent en
      colonne et se lisent comme un formulaire, au lieu de flotter en tete de ligne ;
   2. le tri devient un contrôle segmenté — boutons joints, un seul choix possible,
      et l'actif se remplit de l'ACCENT, jamais du noir des filtres. Deux formes
      differentes pour deux actions differentes. */
.cmd{display:grid; grid-template-columns:auto minmax(0,1fr); gap:10px 14px; align-items:baseline}
.cmd > .lab{
  font-family:"IBM Plex Mono",monospace; font-size:10.5px; letter-spacing:.13em;
  text-transform:uppercase; color:var(--muted); white-space:nowrap; padding-top:6px;
}
.cmd > .chips{display:flex; flex-wrap:wrap; gap:6px}
@media(max-width:620px){
  .cmd{grid-template-columns:1fr; gap:4px 0}
  .cmd > .lab{padding-top:10px}
}

.tri{display:flex; align-items:center; gap:11px; flex-wrap:wrap; margin:16px 0 0}
.tri-lab{font-size:13.5px; font-weight:600; color:var(--ink)}
/* La regle qui calait un second groupe a droite de cette barre est partie avec les
   deux controles de devise (10 sept. 2026) : la barre n'a plus qu'un groupe, rien a
   caler. Le nom de la classe morte n'est pas repete ici — ce commentaire est SERVI
   dans chaque page, et check.sh le lirait comme un controle revenu.
   Pas d'accent grave ici : ce commentaire vit dans un gabarit de chaine. */
.tri-seg{
  display:inline-flex; flex-wrap:wrap; background:var(--surface);
  border:1px solid var(--line); border-radius:4px; overflow:hidden;
}
.tri-seg a{
  padding:8px 13px; font-size:12.5px; color:var(--ink-2); text-decoration:none;
  border-right:1px solid var(--line); white-space:nowrap;
}
.tri-seg a:last-child{border-right:0}
.tri-seg a:hover{background:var(--live-wash); color:var(--live)}
.tri-seg a[aria-current="true"]{background:var(--live); color:var(--ground); font-weight:600}
.tri-seg a:focus-visible{outline:2px solid var(--live); outline-offset:-2px}
.tri-note{margin:9px 0 0; font-size:12.5px; color:var(--ink-2); max-width:62ch}
.filtres--liens a[aria-current="true"]{background:var(--ink); border-color:var(--ink); color:var(--ground)}
.pagi--v{flex-wrap:wrap; gap:8px 10px; margin-top:10px}
.pagi--v a{font-size:12.5px}
.dr{font-size:1.05em; line-height:1; margin-right:5px; user-select:none;
  font-family:"Apple Color Emoji","Segoe UI Emoji","Noto Color Emoji",sans-serif}
.ariane .ici{color:var(--muted); overflow:hidden; text-overflow:ellipsis; max-width:38ch}
.eyebrow{
  font-family:"IBM Plex Mono",monospace; font-size:11.5px; letter-spacing:.14em;
  text-transform:uppercase; color:var(--live); margin-bottom:20px; display:block;
}
h1{font-size:clamp(38px,5.1vw,62px); line-height:1.02; font-weight:800; letter-spacing:-.032em}
h1 em{font-style:normal; color:var(--muted)}
.lede{margin:24px 0 0; font-size:17.5px; line-height:1.6; color:var(--ink-2); max-width:46ch}
.hero-cta{display:flex; gap:12px; margin-top:32px; flex-wrap:wrap}
.btn{
  font-family:Archivo,sans-serif; font-weight:700; font-size:14px; letter-spacing:-.01em;
  padding:12px 20px; border-radius:3px; border:1px solid var(--ink); background:var(--ink);
  color:var(--ground); text-decoration:none; cursor:pointer;
}
.btn:hover{opacity:.87}
.btn.ghost{background:transparent; color:var(--ink); border-color:var(--line)}
.btn.ghost:hover{border-color:var(--ink); opacity:1}
.btn:focus-visible{outline:2px solid var(--live); outline-offset:2px}

/* ── carte graphique ─────────────────────────────────────────── */
.card{background:var(--surface); border:1px solid var(--line); border-radius:5px; box-shadow:var(--shadow)}
.chart-head{display:flex; justify-content:space-between; align-items:flex-start; gap:16px; padding:20px 22px 0}
.chart-head h3{font-size:16.5px; font-weight:700; letter-spacing:-.015em}
.chart-head .sub{font-size:12px; color:var(--muted); margin-top:3px}
.verdict{
  font-family:"IBM Plex Mono",monospace; font-size:10.5px; font-weight:600; letter-spacing:.08em;
  text-transform:uppercase; padding:5px 9px; border-radius:2px; white-space:nowrap;
}
.verdict.bad{background:var(--lie-wash); color:var(--lie); border:1px solid color-mix(in srgb,var(--lie) 30%,transparent)}
.verdict.good{background:var(--live-wash); color:var(--live); border:1px solid color-mix(in srgb,var(--live) 32%,transparent)}
.chart-body{padding:14px 12px 4px}
svg.chart{display:block; width:100%; height:auto}
.chart-foot{
  display:grid; grid-template-columns:repeat(3,1fr); border-top:1px solid var(--line-soft);
}
.stat{padding:14px 22px; border-right:1px solid var(--line-soft)}
.stat:last-child{border-right:0}
.stat dt{font-family:"IBM Plex Mono",monospace; font-size:10px; letter-spacing:.1em; text-transform:uppercase; color:var(--muted); margin:0}
.stat dd{margin:5px 0 0; font-family:"IBM Plex Mono",monospace; font-size:18px; font-weight:600; font-variant-numeric:tabular-nums; letter-spacing:-.01em}
.stat dd small{font-size:11px; font-weight:400; color:var(--muted); letter-spacing:0}

/* ── sections ────────────────────────────────────────────────── */
section{padding:60px 0; border-top:1px solid var(--line)}
/* LE TITRE COLLE A SA SECTION (4 sept. 2026). L'en-tete etait une colonne de 3 a
   4 lignes en gris pale : le tableau commencait tres loin sous son titre, et la
   phrase qui devait donner envie se lisait comme une note de bas de page. Trois
   gestes : la note passe en ink-2 (lisible), la marge tombe de 28 a 18 px, et
   le lien « tout voir » sort du texte pour devenir un vrai bouton de fin de phrase. */
.sec-head{display:flex; align-items:baseline; justify-content:space-between; gap:12px 24px; flex-wrap:wrap; margin-bottom:18px}
/* L'ACCENT SUR « REAL DEALS ». Le sarcelle ne sert qu'a une chose sur ce site :
   la donnee verifiee, le vrai mouvement. Le tampon du heros l'emploie deja pour
   « Real deal. » — le titre de section le reprend, et les deux se repondent. */
h2 .acc{color:var(--live)}
h2{font-size:clamp(23px,2.6vw,29px); font-weight:800; letter-spacing:-.026em}
.sec-note{font-size:14px; line-height:1.5; color:var(--ink-2); max-width:52ch}
/* La date sous « Drops of the day » : elle appartient au titre, pas a la note — d'ou
   le bloc et la ligne propre. Assez discrete pour ne pas concurrencer le h2, assez
   lisible pour etre le premier chiffre verifiable de la section. */
.sec-date{display:block; margin-top:5px; font-family:"IBM Plex Mono",monospace;
  font-size:12.5px; font-weight:500; letter-spacing:.02em; color:var(--muted);
  text-transform:none}
/* « Since 2026-08-28 · 8 days » sous un produit au plancher neuf. Le nombre de jours
   est ce qui cree l'urgence : une date seule ne dit pas si c'est frais ou fini. */
.since{color:var(--live); font-weight:600}
.sec-note b{color:var(--ink); font-weight:700}
/* LE LIEN « TOUT VOIR » EST UN BOUTON SOUS SA SECTION, PAS UN MOT DANS LA NOTE
   (4 sept. 2026). Noyé en fin de paragraphe, il se lisait comme de la prose et rien
   ne disait qu'on pouvait continuer à magasiner. Il vit maintenant sous la liste,
   pleine largeur, là où l'œil arrive quand il a fini de parcourir le tableau. */
.sec-suite{margin-top:18px; display:flex; justify-content:center}
.sec-suite a{display:inline-flex; align-items:baseline; gap:9px; padding:13px 22px;
  border:1px solid var(--live); border-radius:3px; background:var(--surface);
  color:var(--live); text-decoration:none; font-weight:700; font-size:15px;
  letter-spacing:-.01em; transition:background .12s, color .12s}
.sec-suite a:hover,.sec-suite a:focus-visible{background:var(--live); color:var(--ground); outline:none}
.sec-suite .n{font-family:"IBM Plex Mono",monospace; font-size:13px; font-weight:500;
  font-variant-numeric:tabular-nums; opacity:.85}

.jobs{display:grid; grid-template-columns:repeat(3,1fr); gap:1px; background:var(--line); border:1px solid var(--line); border-radius:5px; overflow:hidden}
@media(max-width:760px){.jobs{grid-template-columns:1fr}}
.job{background:var(--surface); padding:26px 24px 28px}
.job .q{font-family:Archivo,sans-serif; font-weight:700; font-size:17px; letter-spacing:-.015em; margin-bottom:9px}
.job p{margin:0; font-size:14.5px; color:var(--ink-2); line-height:1.55}

/* ── tableau ─────────────────────────────────────────────────── */
.tablewrap{overflow-x:auto; border:1px solid var(--line); border-radius:5px; background:var(--surface)}
table{border-collapse:collapse; width:100%; min-width:720px}
th{
  font-family:"IBM Plex Mono",monospace; font-size:10px; letter-spacing:.1em; text-transform:uppercase;
  color:var(--muted); text-align:left; font-weight:500; padding:12px 18px;
  border-bottom:1px solid var(--line); background:var(--sunken); white-space:nowrap;
}
td{padding:15px 18px; border-bottom:1px solid var(--line-soft); font-size:14.5px; vertical-align:middle}
tr:last-child td{border-bottom:0}
tbody tr:hover{background:var(--sunken)}
.prod{font-weight:500}
.prod small{display:block; color:var(--muted); font-size:12px; font-weight:400; margin-top:2px}
td.num{font-family:"IBM Plex Mono",monospace; font-variant-numeric:tabular-nums; white-space:nowrap}
.was{color:var(--muted); text-decoration:line-through; text-decoration-color:var(--lie); font-size:13px}
.spark{width:74px; height:22px; display:block}

/* ── indice d'honnêteté ──────────────────────────────────────── */
.bars{display:flex; flex-direction:column; gap:2px}
.bar{display:grid; grid-template-columns:150px 1fr 62px; align-items:center; gap:16px; padding:7px 0}
@media(max-width:640px){.bar{grid-template-columns:110px 1fr 52px; gap:10px}}
.bar .nm{font-size:14px; font-weight:500}
.bar .track{height:9px; background:var(--sunken); border-radius:1px; overflow:hidden}
.bar .fill{height:100%; border-radius:1px; transform-origin:left; animation:grow .9s cubic-bezier(.2,.7,.3,1) both}
@keyframes grow{from{transform:scaleX(0)}to{transform:scaleX(1)}}
@media (prefers-reduced-motion:reduce){.bar .fill{animation:none}}
.bar .pct{font-family:"IBM Plex Mono",monospace; font-variant-numeric:tabular-nums; font-size:13px; text-align:right; color:var(--ink-2)}

/* ── alerte ──────────────────────────────────────────────────── */
.alert{display:grid; grid-template-columns:1.1fr 1fr; gap:48px; align-items:center}
@media(max-width:860px){.alert{grid-template-columns:1fr; gap:28px}}
.form{display:flex; gap:8px; margin-top:20px; flex-wrap:wrap}
.form input{
  flex:1 1 240px; padding:12px 14px; border:1px solid var(--line); border-radius:3px;
  background:var(--surface); color:var(--ink); font-family:inherit; font-size:14.5px;
}
.form input:focus{outline:2px solid var(--live); outline-offset:-1px; border-color:transparent}
.form input::placeholder{color:var(--muted)}
.fineprint{font-size:12.5px; color:var(--muted); margin-top:12px}
.receipt{
  background:var(--sunken); border:1px solid var(--line); border-radius:4px; padding:20px 22px;
  font-family:"IBM Plex Mono",monospace; font-size:12.5px; line-height:1.85; color:var(--ink-2);
}
.receipt .r-h{color:var(--muted); font-size:10px; letter-spacing:.11em; text-transform:uppercase; margin-bottom:10px}
.receipt b{color:var(--ink); font-weight:600}
.receipt .drop{color:var(--live); font-weight:600}

footer{border-top:1px solid var(--line); padding:34px 0 52px; font-size:13px; color:var(--muted)}

/* ── LE PIED PAR RAYONS (20 sept. 2026) ────────────────────────────────────────
   Il portait UNE rangee de dix liens a plat — les listes, la methode, les pieces —
   et rien des vingt-six pages ecrites les 19 et 20. Sur 28 535 pages servies, c'est
   le maillage le plus large dont dispose un site a dix liens entrants ; le laisser
   ignorer un tiers du contenu editorial revenait a ecrire ces pages pour le menu
   seul. Quatre colonnes nommees, parce qu'une rangee de vingt liens n'est pas un
   pied de page, c'est un debordement. */
.foot-cols{display:grid; grid-template-columns:repeat(auto-fit,minmax(170px,1fr));
  gap:26px 30px; margin-bottom:26px}
.foot-col h4{margin:0 0 11px; font:500 10px/1.4 var(--mono); text-transform:uppercase;
  letter-spacing:.09em; color:var(--muted); padding-bottom:8px;
  border-bottom:1px solid var(--line-soft)}
.foot-col ul{list-style:none; margin:0; padding:0; display:flex; flex-direction:column; gap:7px}
.foot-col a{color:var(--ink-2); text-decoration:none; font-size:13px; line-height:1.4}
.foot-col a:hover{color:var(--live)}
/* Les juridictions sont nombreuses et courtes : en pastilles elles tiennent sur
   trois lignes au lieu de quatorze, et restent toutes explorables. */
.foot-jur{display:flex; flex-wrap:wrap; gap:5px 6px; margin-top:9px}
.foot-jur a{font:500 11px/1 var(--mono); color:var(--muted); text-decoration:none;
  border:1px solid var(--line-soft); padding:4px 7px; white-space:nowrap}
.foot-jur a:hover{color:var(--live); border-color:var(--live)}

/* Le pied en trois bandes : les liens, l'identite, la mention fine. Elles sont
   separees par un filet parce qu'elles ne repondent pas a la meme question —
   ou aller, qui parle, sous quelles conditions. */
.foot-id{display:flex; justify-content:space-between; gap:18px 30px; flex-wrap:wrap;
  align-items:baseline; margin-top:22px; padding-top:20px; border-top:1px solid var(--line-soft)}
.foot-id p{margin:0; max-width:56ch; font-size:13px; line-height:1.65; color:var(--muted)}
.foot-id b{color:var(--ink-2); font-weight:600}
.foot-id .foot-liens{display:flex; gap:18px; flex-wrap:wrap; font-size:13px; white-space:nowrap}
.foot-fine{margin-top:16px; font-family:"IBM Plex Mono",monospace; font-size:11.5px;
  letter-spacing:.05em; color:var(--muted); display:flex; gap:8px 18px; flex-wrap:wrap}

/* Le formulaire de contact. Sans JS : les etats visibles viennent du navigateur
   (:focus-visible, :invalid apres saisie) et de la reponse 303 du serveur. */
.contact-f{display:flex; flex-direction:column; gap:18px; max-width:60ch; margin:4px 0 0}
.contact-f label{display:flex; flex-direction:column; gap:6px;
  font-family:Archivo,sans-serif; font-weight:700; font-size:14.5px; color:var(--ink)}
.contact-f label span{font-family:"IBM Plex Sans",sans-serif; font-weight:400;
  font-size:13px; color:var(--muted)}
.contact-f input[type=email],
.contact-f textarea{
  font-family:"IBM Plex Sans",sans-serif; font-size:15px; line-height:1.55; color:var(--ink);
  background:var(--surface); border:1px solid var(--line); border-radius:3px;
  padding:11px 13px; width:100%; resize:vertical;
}
.contact-f input[type=email]:focus-visible,
.contact-f textarea:focus-visible{outline:2px solid var(--live); outline-offset:1px; border-color:var(--live)}
.contact-f button{align-self:flex-start; cursor:pointer; border:0}

/* ── ce que les pages du site ajoutent à la maquette ─────────── */
.verdict-band{padding:20px 22px;border-bottom:1px solid var(--line-soft);display:flex;flex-wrap:wrap;
align-items:baseline;gap:8px 16px}
.vb-good{background:var(--live-wash);border-left:4px solid var(--live)}
.vb-bad{background:var(--lie-wash);border-left:4px solid var(--lie)}
.vb-flat{background:var(--sunken);border-left:4px solid var(--line)}
/* LE VERDICT SE LIT AVANT LE PRIX, PAS APRES UN PARAGRAPHE. La bande portait une
   etiquette minuscule, puis une phrase (« Everyone else wants… »), puis une ligne
   de faits (« 2 merchants · 2 in stock »). Tout cela est deja visible plus bas :
   le tableau des marchands le dit, ligne par ligne. Ne reste que la reponse. */
.vb-verdict{flex-basis:100%;font-family:Archivo,sans-serif;font-weight:800;
letter-spacing:-.03em;font-size:clamp(30px,4.2vw,44px);line-height:1;margin-bottom:4px}
.vb-good .vb-verdict{color:var(--live)}.vb-bad .vb-verdict{color:var(--lie)}
.vb-flat .vb-verdict{color:var(--ink-2)}
.vb-n{font-family:"IBM Plex Mono",monospace;font-size:29px;font-weight:600;letter-spacing:-.02em;
font-variant-numeric:tabular-nums}
.vb-was{font-family:"IBM Plex Mono",monospace;font-size:14px;color:var(--muted);
text-decoration:line-through;text-decoration-color:var(--lie)}
.warn{padding:16px 22px;background:var(--lie-wash);border-bottom:1px solid var(--line-soft)}
.warn__t{display:block;font-family:"IBM Plex Mono",monospace;font-size:10.5px;font-weight:600;
letter-spacing:.09em;text-transform:uppercase;color:var(--lie);margin-bottom:5px}
.warn p{margin:0;font-size:14.5px;color:var(--ink-2)}.warn b{color:var(--ink);font-weight:600}
.phead{display:flex;gap:20px;padding:24px 22px;border-bottom:1px solid var(--line-soft);align-items:flex-start}
.phead img{width:104px;height:104px;object-fit:contain;background:var(--sunken);border:1px solid var(--line-soft);
border-radius:4px;flex:none}
.phead h1{font-size:clamp(21px,3vw,30px);line-height:1.12}
.eyebrow-s{font-family:"IBM Plex Mono",monospace;font-size:10.5px;letter-spacing:.11em;
text-transform:uppercase;color:var(--muted);margin-bottom:9px;display:block}
.lg{width:24px;height:24px;border-radius:3px;object-fit:contain;background:var(--sunken);
border:1px solid var(--line-soft);flex:none}
.lg--txt{display:flex;align-items:center;justify-content:center;font:600 9px "IBM Plex Mono",monospace;color:var(--muted)}
.m{display:flex;align-items:center;gap:10px}
/* Vignette de rangée — l'image vient du catalogue du marchand, comme sur la fiche
   produit. no-referrer : le marchand voit une requête, pas d'où vient le lecteur. */
.prod-cell{display:flex;align-items:center;gap:13px}
.th{width:46px;height:46px;flex:0 0 46px;object-fit:contain;background:#fff;
  border:1px solid var(--line-soft);border-radius:4px;display:block}
.th--vide{background:var(--sunken)}

/* LE VERDICT DU HÉROS. Trois barres et trois statistiques demandaient de faire
   l'arithmétique soi-même. Le site pose UNE question — est-ce une aubaine, oui ou
   non — et la réponse doit se lire avant qu'on ait fini de la chercher. */
.juge{display:grid;gap:0}
.juge-top{display:flex;align-items:center;gap:14px;padding:18px 22px 0}
.juge-top img{width:56px;height:56px;object-fit:contain;background:#fff;
  border:1px solid var(--line-soft);border-radius:4px}
.juge-top h3{font-size:15.5px;font-weight:600;letter-spacing:-.01em;line-height:1.3}
.juge-top .sub{font-size:12px;color:var(--muted);margin-top:3px}
.stamp{font-family:Archivo,sans-serif;font-weight:800;letter-spacing:-.035em;
  font-size:clamp(38px,5.4vw,58px);line-height:1;padding:16px 22px 4px}
.stamp.no{color:var(--lie)} .stamp.yes{color:var(--live)}
.duel{display:grid;grid-template-columns:1fr 1fr;border-top:1px solid var(--line-soft);margin-top:14px}
.duel > div{padding:15px 22px}
.duel > div + div{border-left:1px solid var(--line-soft)}
.duel dt{font-family:"IBM Plex Mono",monospace;font-size:10px;letter-spacing:.1em;
  text-transform:uppercase;color:var(--muted);margin:0}
.duel dd{margin:6px 0 0;font-family:"IBM Plex Mono",monospace;font-size:23px;font-weight:600;
  font-variant-numeric:tabular-nums;letter-spacing:-.02em}
.duel dd small{display:block;font-size:11px;font-weight:400;color:var(--muted);
  letter-spacing:0;margin-top:3px;font-family:"IBM Plex Sans",sans-serif}
/* LA RATURE SE POSE SUR LE PRIX, JAMAIS SUR LE CONTENEUR. text-decoration se
   propage aux descendants en flux et un enfant NE PEUT PAS la retirer : mettre
   line-through sur le <dd> barrait aussi « at thuroshop.com » en dessous.
   Un <s> autour du seul montant, et le probleme n'existe plus. */
.duel .perd dd{color:var(--muted)}
.duel .perd s{text-decoration:line-through;text-decoration-color:var(--lie)}
.duel .gagne dd{color:var(--live)}
.verdict-pied{padding:13px 22px;border-top:1px solid var(--line-soft);background:var(--sunken);
  font-size:13.5px;color:var(--ink-2)}
.verdict-pied b{font-weight:600}

/* LES MARQUES — on choisit sa lettre, la liste suit. 997 pastilles d'un bloc,
   triées par volume, ne se cherchaient pas : elles se subissaient. */
.filtres{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-bottom:16px}
.filtres .lab{font-family:"IBM Plex Mono",monospace;font-size:10px;letter-spacing:.1em;
  text-transform:uppercase;color:var(--muted);margin-right:2px}
.filtres button{font-family:"IBM Plex Mono",monospace;font-size:11px;letter-spacing:.05em;
  text-transform:uppercase;padding:6px 10px;border-radius:2px;cursor:pointer;
  border:1px solid var(--line);background:var(--surface);color:var(--ink-2)}
.filtres button:hover{border-color:var(--ink);color:var(--ink)}
.filtres button[aria-pressed="true"]{background:var(--ink);border-color:var(--ink);color:var(--ground)}
.filtres button:focus-visible{outline:2px solid var(--live);outline-offset:2px}
.filtres .cpt{font-family:"IBM Plex Mono",monospace;font-size:11px;color:var(--muted);margin-left:auto}
.azbar{display:flex;flex-wrap:wrap;gap:4px;margin-bottom:18px}
.azbar button{font-family:"IBM Plex Mono",monospace;font-size:12px;font-weight:500;
  min-width:30px;padding:6px 7px;border-radius:2px;cursor:pointer;
  border:1px solid var(--line);background:var(--surface);color:var(--ink-2)}
.azbar button:hover:not(:disabled){border-color:var(--ink);color:var(--ink)}
.azbar button[aria-pressed="true"]{background:var(--ink);border-color:var(--ink);color:var(--ground)}
.azbar button:disabled{opacity:.32;cursor:default}
.azbar button:focus-visible{outline:2px solid var(--live);outline-offset:2px}
.mkgrille{display:grid;gap:8px;grid-template-columns:repeat(auto-fill,minmax(215px,1fr))}
.mkgrille a{display:flex;align-items:center;gap:10px;padding:10px 12px;background:var(--surface);
  border:1px solid var(--line);border-radius:4px;text-decoration:none}
.mkgrille a:hover,.mkgrille a:focus-visible{border-color:var(--live);outline:none}
.mkgrille .nom{font-size:13.5px;font-weight:500;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mkgrille .n{font-family:"IBM Plex Mono",monospace;font-size:11px;color:var(--muted);font-variant-numeric:tabular-nums}
/* SANS LOGO, LA GRILLE SE RESSERRE : les pastilles etaient dimensionnees pour une
   image de 24 px, il n'y a plus qu'une ligne de texte. Plus de colonnes, moins de
   hauteur — a soixante marques sous une lettre, c'est la difference entre un ecran
   plein et un bloc qu'on embrasse d'un coup d'oeil. */
.mkgrille--txt{grid-template-columns:repeat(auto-fill,minmax(172px,1fr)); gap:5px}
.mkgrille--txt a{padding:7px 11px; gap:8px}
.mk-vide{color:var(--muted);font-size:13.5px}
.m a{text-decoration:none;border-bottom:1px solid var(--line)}
.m a:hover{border-bottom-color:var(--live);color:var(--live)}
/* UNE SEULE BOITE PAR CELLULE. La cellule de stock portait quatre langages
   visuels a la fois : une pastille verte encadree, une pastille grise encadree,
   un bouton noir plein, un bouton gris en contour. Quatre formes, trois familles
   de couleur, deux polices — pour dire deux choses.

   L'etat perd donc sa boite : il devient une pastille de couleur suivie d'un
   libelle, dans la meme mono majuscule que les en-tetes de colonne, sans fond ni
   bordure. Il ne reste QU'UNE forme encadree dans la rangee — le bouton — et
   c'est elle qui appelle le clic. Meme geometrie pour les deux etats du bouton :
   seul le remplissage change. */
.etat{display:inline-flex;align-items:center;gap:6px;font-family:"IBM Plex Mono",monospace;
  font-size:10px;letter-spacing:.07em;text-transform:uppercase;white-space:nowrap}
.etat::before{content:"";width:6px;height:6px;border-radius:50%;flex:none}
.etat-in{color:var(--live)}
.etat-in::before{background:var(--live)}
.etat-out{color:var(--muted)}
.etat-out::before{background:var(--line)}
tr.best td{background:var(--live-wash)}
.plancher{margin:0 0 12px;font-size:14.5px;color:var(--ink-2);padding:11px 13px;
  background:var(--live-wash);border-left:3px solid var(--live);border-radius:0 3px 3px 0}
.plancher b{color:var(--ink);font-weight:600}
/* Le plancher ATTEINT est une bonne nouvelle : il prend le vert du site, pas le
   gris neutre du rappel « on l'a vu moins cher ». */
.plancher--bas{border-color:var(--live);background:var(--live-wash)}
/* UNE SEULE SORTIE PAR RANGEE. Le nom du marchand etait lui aussi un lien /go/ :
   deux portes vers la meme boutique sur la meme ligne. Ca coupait le comptage en
   deux (deux clics, un seul acheteur) et ca obligerait a poser le parametre
   d'affiliation a deux endroits — donc a l'oublier a l'un des deux. Le nom est
   maintenant du texte ; le bouton est la seule sortie du site, pour toutes les
   rangees, en stock ou non (« Check » quand c'est epuise : la sortie compte
   quand meme, et l'utilisateur peut vouloir verifier lui-meme).

   ACHETER SE FAIT DANS LE TABLEAU, PAS AU-DESSUS.
   Un gros bouton noir avant le tableau repetait une troisieme fois le nom du
   marchand et son prix. L'action appartient a la RANGEE : on lit le prix, on
   voit « in stock », on achete la — sans remonter. Le premier marchand est le
   moins cher, son bouton est plein ; les autres sont en contour. */
.stock-cell{display:flex;align-items:center;gap:14px;justify-content:space-between;max-width:230px}
/* UNE SEULE GEOMETRIE : meme hauteur, meme rayon, meme bordure, meme graisse.
   Ce qui distingue les trois etats est le REMPLISSAGE, jamais la forme. */
.btn-achat{display:inline-flex;align-items:center;height:30px;padding:0 14px;
  font-family:Archivo,sans-serif;font-weight:700;font-size:12.5px;letter-spacing:-.01em;
  border:1px solid var(--line);border-radius:3px;text-decoration:none;white-space:nowrap;
  color:var(--ink);background:var(--surface)}
.btn-achat:hover{border-color:var(--ink)}
.btn-achat.est-le-meilleur{background:var(--ink);border-color:var(--ink);color:var(--ground)}
.btn-achat.est-le-meilleur:hover{opacity:.87}
.btn-achat.est-epuise{color:var(--muted);border-color:var(--line-soft)}
.btn-achat.est-epuise:hover{color:var(--ink);border-color:var(--line)}
.m-nom{font-weight:500}
/* LE CLASSEMENT. Le rang et le prix sont les deux colonnes qu'on balaie : ils
   prennent la mono tabulaire pour que les chiffres s'alignent a l'oeil. */
.cl-rang{font-family:"IBM Plex Mono",monospace;font-size:12px;color:var(--muted);
  width:44px;text-align:right;font-variant-numeric:tabular-nums}
.cl-prix{font-family:"IBM Plex Mono",monospace;font-weight:600;font-size:15px;
  font-variant-numeric:tabular-nums;white-space:nowrap}
/* LE BADGE DE VERDICT. Meme forme que celui du classement — une seule grammaire de
   pastille sur le site, en DEUX degres :
     plein  (v-bon, v-bas) — « Real deal », « Dropped today », « New low » : un
              jugement de prix. Les trois portent la MEME pastille pleine ; c'est
              le mot qui les separe, pas le decor.
     eteint (v-fini) — « Price went up » : un jugement de prix lui aussi, donc une
              pastille pleine ; mais la nouvelle est mauvaise, et elle ne peut emprunter
              ni le vert (qui promet un gain) ni la rouille --lie (qui accuse une
              boutique de mentir — elle lui est reservee, et la confusion serait grave).
              D'ou un plein NEUTRE, tire de --sunken : la convention universelle du
              « c'est ferme ». Aucune couleur nouvelle n'entre dans la palette.
     nu     (v-att, v-gris) — un fait de couverture, pas un jugement : aucun cadre.
   Tout le monde porte deja la geometrie (padding, rayon, bordure transparente) ;
   seul le decor separe les deux degres. Les deux tons pleins restent des classes
   DISTINCTES — le barreme peut redivorcer — mais partagent une seule declaration,
   sinon l'une derive de l'autre a la premiere retouche de palette. */
.v-tag{font-family:"IBM Plex Mono",monospace;font-size:10px;letter-spacing:.06em;
  text-transform:uppercase;white-space:nowrap;padding:3px 8px;border-radius:2px;
  border:1px solid transparent;display:inline-block}
.v-bon,.v-bas{background:var(--live-wash);color:var(--live);
  border-color:color-mix(in srgb,var(--live) 32%,transparent)}
.v-fini{background:var(--sunken);color:var(--ink-2);border-color:var(--line)}
/* ── LE BUY / WAIT SPATIAL ────────────────────────────────────────────────────────
   Trois etats, DEUX registres seulement : le vert quand il y a quelque chose a
   gagner, le neutre quand il n'y en a pas. La rouille --lie n'entre pas ici — elle
   accuse une boutique de mentir, et « attends » n'accuse personne.
   Le bloc se pose sous la bande de verdict : le verdict dit CE QUI EST, celui-ci dit
   QUOI FAIRE. Deux phrases, jamais melangees. */
.spat{border:1px solid var(--line); border-radius:3px; padding:13px 16px; margin:0 22px 4px;
  background:var(--surface)}
.spat--buy{border-color:color-mix(in srgb,var(--live) 38%,transparent); background:var(--live-wash)}
.spat--wait,.spat--any{background:var(--sunken)}
.spat-h{display:flex; align-items:baseline; gap:10px; flex-wrap:wrap; margin-bottom:5px}
.spat-tag{font-family:"IBM Plex Mono",monospace; font-size:11px; letter-spacing:.09em;
  text-transform:uppercase; font-weight:600; color:var(--ink)}
.spat--buy .spat-tag{color:var(--live)}
.spat-src{font-family:"IBM Plex Mono",monospace; font-size:10px; letter-spacing:.05em;
  text-transform:uppercase; color:var(--muted)}
.spat p{margin:0; font-size:13.5px; line-height:1.6; color:var(--ink-2)}
.spat p b{color:var(--ink); font-weight:600}
/* LE FEU D'ACHAT, a gauche du drapeau dans la description du produit. Un cercle plein,
   avec un liseré tire de la couleur elle-meme : sans lui, le point jaune se dissout
   dans un fond clair et le vert fonce se confond avec le texte a cote.
   14 px, ET C'EST UN RETOUR EN ARRIERE ASSUME (6 sept. 2026). Le point est passe de
   7 a 14 puis a 28 px dans la meme journee, a la demande du proprietaire, avant qu'il
   tranche sur piece : « les points actuels sont bcp trop gros ». 28 px imposait sa
   taille au small de 12 px qui le porte et rallongeait chaque rangee d'environ 16 px —
   sur vingt lignes par section, la liste changeait de nature.
   14 px est le point ou le disque se voit d'un coup d'oeil sans dominer le titre qu'il
   annonce. C'est la taille servie, la valeur est stable depuis.
   ⚠️ L'ALIGNEMENT RESTE AU MILIEU, PAS SUR LA LIGNE DE BASE. Cale sur la base, un
   disque de 14 px depasse le haut des capitales d'un texte de 12 px et pousse
   l'interligne. Centre sur la hauteur d'x, il tient dans la ligne.

   L'ANNEAU FONCE, ET C'EST LUI QUI PORTE LE CONTRASTE (6 sept. 2026, meme demande).
   L'ancien lisere etait un halo a 30 % d'opacite : decoratif, il n'ajoutait aucun
   contraste mesurable. Il devient une BORDURE PLEINE de 2 px, tiree de la couleur
   elle-meme a 62 % vers le noir — donc juste, automatiquement, dans les deux themes,
   sans un seul jeton de plus a tenir a jour.
   CE QUE CA CHANGE, MESURE SUR --surface (le blanc des listes, ou vivent les points) :
     vert   remplissage 3,09:1  ->  anneau 8,07:1
     jaune  remplissage 1,73:1  ->  anneau 5,25:1
     rouge  remplissage 5,01:1  ->  anneau 11,11:1
   L'anneau tire a 55 % vers le noir, pas 62 % : avec le feu de circulation le jaune
   part de bien plus haut, et il lui faut un bord plus fonce pour tenir AA.
   Le critere WCAG d'un objet graphique est satisfait des qu'une frontiere essentielle
   passe 3:1 : c'est desormais vrai avec une marge de deux a trois fois, sans toucher a
   une seule des teintes choisies. Le remplissage peut donc rester aussi vif qu'il l'est.
   ⚠️ BORDER, PAS BOX-SHADOW. Le fichier pose box-sizing:border-box partout : la bordure
   se creuse DANS les 28 px au lieu de les gonfler a 32. Un box-shadow exterieur, lui,
   aurait deborde la ligne et repousse le texte. */
.feu{display:inline-block; width:14px; height:14px; border-radius:50%; margin-right:7px;
  border:2px solid transparent; vertical-align:middle; flex:0 0 auto}
.feu--v{background:var(--feu-v); border-color:color-mix(in srgb,var(--feu-v) 55%,#000)}
.feu--j{background:var(--feu-j); border-color:color-mix(in srgb,var(--feu-j) 55%,#000)}
.feu--r{background:var(--feu-r); border-color:color-mix(in srgb,var(--feu-r) 55%,#000)}
/* UNE SEULE TAILLE DE POINT SUR TOUT LE SITE (6 sept. 2026 : « tous les points
   devraient toujours avoir la meme grosseur »).
   IL Y AVAIT UNE EXCEPTION, ET ELLE ETAIT LA VRAIE PLAINTE. Le point de la bande de
   verdict etait dimensionne par son CONTEXTE — .34em d'un titre en clamp(30px, 4.2vw,
   44px), donc 10 a 15 px selon la largeur de l'ecran. Sur une meme fiche produit, il
   etait donc DEUX FOIS PLUS PETIT que les points du tableau de suggestions juste en
   dessous : le point qui porte le verdict principal comptait moins, a l'oeil, que ceux
   des produits qu'on propose en passant.
   L'exception est retiree. Le disque fait 14 px partout, et il ne reste ici que
   l'ajustement optique : dans un titre de 30 a 44 px, un ecart en em suit la taille du
   texte la ou une valeur en pixels se decalerait a chaque palier du clamp. */
.vb-verdict .feu{margin-right:.2em; vertical-align:.04em}
/* L'ecart par marchand, sous son prix dans le tableau des offres. */
.ec{font-family:"IBM Plex Mono",monospace; font-size:10.5px; font-weight:400; color:var(--muted)}
.ec--best{color:var(--live); font-weight:600}
.v-att{color:var(--ink-2)}
.v-gris{color:var(--muted)}
/* LE MONTANT MANQUE. Ni vert ni rouille : c'est un fait, pas un gain ni une accusation.
   L'encre pleine, parce que c'est LE chiffre de la ligne — personne ne regrette
   « 22 % », on regrette « 150 $ ». */
.manque{color:var(--ink); font-weight:600}
.manque i{font-style:normal; color:var(--muted); font-weight:400}
/* Le classement emet « cl-tag » + le ton du verdict (v-bon, v-bas…) : il n'a plus
   de palette a lui. cl-tag ne porte donc que la geometrie. */
.cl-tag{font-family:"IBM Plex Mono",monospace;font-size:10px;letter-spacing:.06em;
  text-transform:uppercase;white-space:nowrap;padding:3px 8px;border-radius:2px;border:1px solid transparent;
  display:inline-block}
.pied-note{font-size:13.5px;line-height:1.7;color:var(--muted);border-top:1px solid var(--line-soft);
  padding-top:18px;margin-top:8px;max-width:78ch}
.pied-note b{color:var(--ink-2);font-weight:600}
/* La marque et le modele empilés : colles sur une ligne, « aeboard » et
   « AEBoard G5 » se lisaient comme un seul mot. */
.cl-nom{display:flex;flex-direction:column;gap:2px;border-bottom:0}
.cl-nom b{font-family:"IBM Plex Mono",monospace;font-size:10px;letter-spacing:.07em;
  text-transform:uppercase;color:var(--muted);font-weight:500}
.cl-nom span{font-weight:500;line-height:1.35;border-bottom:1px solid var(--line);align-self:flex-start}
.cl-nom:hover span{border-bottom-color:var(--live);color:var(--live)}
/* L'ENTREE PAR LE BUDGET, offerte a cote de l'entree par la marque. On ne
   choisit pas toujours une planche en pensant « Meepo » ; souvent on pense
   « 1 200 $ ». Les deux chemins meritent la meme visibilite. */
.cta-cl{display:block;text-decoration:none;padding:22px 24px;border:1px solid var(--line);
  border-radius:4px;background:var(--surface);transition:border-color .12s}
.cta-cl:hover{border-color:var(--ink)}
.cta-cl__t{display:block;font-family:Archivo,sans-serif;font-weight:800;
  font-size:clamp(19px,2.2vw,24px);letter-spacing:-.02em;color:var(--ink)}
.cta-cl__s{display:block;margin-top:6px;font-size:14.5px;color:var(--muted);max-width:70ch}
.btn-achat:focus-visible{outline:2px solid var(--live);outline-offset:2px}
.hist{padding:20px 22px;border-bottom:1px solid var(--line-soft)}
.tl-scroll{overflow-x:auto;overflow-y:hidden;margin:8px 0 2px;-webkit-overflow-scrolling:touch}
.tl-scroll svg{display:block;max-width:none}
.tl-t{margin:0 0 2px!important;font-size:13.5px!important;color:var(--ink-2)!important}
.tl-t b{color:var(--ink)}
.tl a{color:var(--ink-2);text-decoration:underline;text-underline-offset:2px}
.tl a:hover{color:var(--live)}

.hist p{margin:9px 0 0;font-size:12.5px;color:var(--muted)}.hist p b{color:var(--ink)}
.faq-b{padding:6px 22px 22px}
.qa{padding:16px 0;border-bottom:1px solid var(--line-soft)}.qa:last-child{border-bottom:0}
.qa h3{font-family:"IBM Plex Sans",sans-serif;font-weight:600;font-size:15px;margin:0 0 6px;letter-spacing:0}
.qa p{margin:0;font-size:14.5px;color:var(--ink-2)}
.foot-facts{display:flex;flex-wrap:wrap;gap:6px 22px;padding:15px 22px;background:var(--sunken);
font-family:"IBM Plex Mono",monospace;font-size:11px;letter-spacing:.05em;color:var(--muted)}
.foot-facts b{color:var(--ink);font-weight:600}
.grille{display:grid;gap:10px;grid-template-columns:repeat(auto-fill,minmax(180px,1fr))}
.grille a{display:flex;justify-content:space-between;align-items:baseline;gap:10px;padding:13px 16px;
background:var(--surface);border:1px solid var(--line);border-radius:4px;text-decoration:none}
.grille a:hover{border-color:var(--live)}
.grille b{font-size:14px;font-weight:600}
.grille span{font-family:"IBM Plex Mono",monospace;font-size:11px;color:var(--muted);font-variant-numeric:tabular-nums}
/* LES QUATRE VÉHICULES — la PREMIÈRE question du visiteur (planche, trottinette,
   vélo ?), avant les rayons de pièces qui sont la seconde. Calculées depuis le
   28 août et routées en /v/…, elles n'existaient dans l'accueil que sous forme de
   quatre liens de menu : le corps de la page n'en montrait aucune. */
/* TROIS COLONNES, PAS « autant qu'il en rentre ». auto-fit posait les six
   vehicules en 5 + 1 : une rangee pleine et une carte seule, orpheline a gauche.
   Trois colonnes fixes donnent deux rangees de trois — la grille se lit comme un
   bloc, et le compte reste juste si un septieme vehicule apparait (3+3+1 se
   verrait, mais c'est un choix a reprendre ce jour-la). */
.vehic{display:grid;gap:12px;grid-template-columns:repeat(5,1fr)}
@media(max-width:900px){.vehic{grid-template-columns:repeat(3,1fr)}}
@media(max-width:560px){.vehic{grid-template-columns:1fr}}
.vehic a{display:flex;flex-direction:column;gap:6px;padding:22px 22px 20px;background:var(--surface);
  border:1px solid var(--line);border-radius:5px;text-decoration:none;box-shadow:var(--shadow)}
.vehic a:hover,.vehic a:focus-visible{border-color:var(--live);outline:none}
.vehic .vg{display:block;color:var(--ink);margin-bottom:8px}
.vehic .vg svg{width:52px;height:33px;display:block}
.vehic a:hover .vg{color:var(--live)}
.vehic b{font-family:Archivo,sans-serif;font-size:16.5px;font-weight:700;letter-spacing:-.015em;
  line-height:1.2}
.vehic .nb{font-family:"IBM Plex Mono",monospace;font-size:11.5px;color:var(--muted);
  font-variant-numeric:tabular-nums;letter-spacing:.04em}
.tags{display:flex;flex-wrap:wrap;gap:7px}
.tags a{font-size:13px;padding:6px 12px;border:1px solid var(--line);border-radius:2px;text-decoration:none;
color:var(--ink-2);background:var(--surface);white-space:nowrap}
.tags a:hover{border-color:var(--live);color:var(--live)}
.tags a b{color:var(--ink);font-weight:600;font-family:"IBM Plex Mono",monospace;font-size:11.5px}
.tags a.on{background:var(--ink);color:var(--ground);border-color:var(--ink)}
.tags a.on b{color:var(--ground)}
.pagi{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin-top:20px}
.pagi a{font-family:"IBM Plex Mono",monospace;font-size:12.5px;padding:7px 12px;border:1px solid var(--line);
border-radius:2px;text-decoration:none;color:var(--muted);background:var(--surface);font-variant-numeric:tabular-nums}
.pagi a:hover{border-color:var(--live);color:var(--live)}
.pagi a.on{background:var(--ink);color:var(--ground);border-color:var(--ink)}
.pagi span{color:var(--muted);font-size:12.5px}
.alert__off{flex-basis:100%;margin:10px 0 0;font-size:12.5px;color:var(--lie)}
.cherche{display:flex;gap:8px;margin:18px 0 0}
.cherche input{flex:1 1 auto;min-width:0;padding:12px 15px;border:1px solid var(--line);border-radius:3px;
background:var(--surface);color:var(--ink);font-family:inherit;font-size:14.5px}
.cherche input:focus{outline:2px solid var(--live);outline-offset:-1px;border-color:transparent}
.cherche input::placeholder{color:var(--muted)}
.cherche button{font-family:Archivo,sans-serif;font-weight:700;font-size:13.5px;padding:12px 20px;
border:1px solid var(--ink);background:var(--ink);color:var(--ground);border-radius:3px;cursor:pointer}
.cherche button:hover{opacity:.87}
.cherche button:focus-visible{outline:2px solid var(--live);outline-offset:2px}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.carte-prod{background:var(--surface);border:1px solid var(--line);border-radius:5px;
box-shadow:var(--shadow);overflow:hidden}
@media(max-width:760px){.phead{flex-direction:column}.phead img{width:84px;height:84px}}


/* ── PAGES DE BOUTIQUE (11 sept. 2026) ──────────────────────────────────────────
   Aucune classe neuve pour ce qui existe deja : la grille de cartes reprend .rg,
   les chiffres .num. Ne sont definis ici que les deux objets que le site n'avait
   pas — la rangee d'etiquettes de prix, et la paire de barres badge/reel. */
.bq-verdict{font-size:clamp(23px,4vw,36px);line-height:1.15;margin:14px 0 0;font-weight:700;
  letter-spacing:-.026em;max-width:20ch;text-wrap:balance}
.bq-verdict em{font-style:normal;color:var(--lie)}
.bq-sub{margin:12px 0 0;font-size:16px;color:var(--ink-2);max-width:56ch}
.bq-sub b{color:var(--ink);font-weight:600}
.bq-tags{display:flex;gap:6px;margin-top:18px;flex-wrap:wrap;align-items:flex-end}
.bq-tag{width:46px;height:56px;border:2px solid var(--muted);background:var(--sunken);
  display:flex;align-items:center;justify-content:center;font:600 11px/1 var(--mono);
  color:var(--muted);position:relative}
.bq-tag::before{content:"";position:absolute;top:5px;left:50%;transform:translateX(-50%);
  width:6px;height:6px;border-radius:50%;border:2px solid var(--muted)}
.bq-tag.vrai{border-color:var(--live);background:var(--live-wash);color:var(--live);
  width:56px;height:66px;font-size:12px}
.bq-tag.vrai::before{border-color:var(--live)}
.bq-cap{display:flex;gap:20px;margin-top:10px;flex-wrap:wrap;font-size:13.5px;color:var(--ink-2)}
.bq-cap b{color:var(--ink);font-weight:600}
.bq-chart{display:flex;flex-direction:column;border:1px solid var(--line);margin-top:16px}
.bq-row{display:grid;grid-template-columns:minmax(96px,168px) 1fr;gap:12px;align-items:center;
  padding:8px 12px;border-bottom:1px solid var(--line-soft)}
.bq-row:last-child{border-bottom:0}
.bq-row .qui{font:500 11.5px/1.4 var(--mono);color:var(--ink-2);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.bq-row .qui a{color:inherit}
.bq-bars{display:flex;flex-direction:column;gap:3px}
.bq-b{display:flex;align-items:center;gap:7px;height:12px}
.bq-f{height:12px;min-width:2px}
.bq-f.badge{background:var(--lie)}.bq-f.reel{background:var(--live)}
.bq-l{font:500 10.5px/1 var(--mono);color:var(--muted);font-variant-numeric:tabular-nums;white-space:nowrap}
.bq-head{display:grid;grid-template-columns:minmax(96px,168px) 1fr;gap:12px;padding:8px 12px;
  background:var(--sunken);border-bottom:1px solid var(--line);
  font:500 10px/1.4 var(--mono);text-transform:uppercase;letter-spacing:.08em;color:var(--muted)}
.bq-key{display:flex;gap:15px;flex-wrap:wrap;text-transform:none;letter-spacing:0;font-size:10.5px;color:var(--ink-2)}
.bq-key i{display:inline-block;width:9px;height:9px;margin-right:5px}
/* ── LE MAILLAGE DES ETUDES SUR L'ACCUEIL (20 sept. 2026) ──────────────────────
   Il etait fait de trois listes a puces en style en ligne : vingt-six titres nus
   empiles, sans un mot sur ce que chacun repond. Au milieu d'une page ou chaque
   autre section a ses classes et sa forme, ca se lit comme un plan de site colle
   par erreur — et ca gaspille la seule chose qu'on a deja sous la main, la
   phrase-resume que chaque etude porte dans sa table.
   Une carte par question : la question en tete, sa reponse en dessous. Le lien
   couvre les deux, donc l'ancre reste le titre et le contexte voyage avec. */
.etu-cols{display:grid; grid-template-columns:repeat(auto-fit,minmax(268px,1fr));
  gap:24px 28px; margin-top:18px}
.etu-col h3{margin:0 0 12px; font:500 10px/1.4 var(--mono); text-transform:uppercase;
  letter-spacing:.09em; color:var(--muted); padding-bottom:9px;
  border-bottom:1px solid var(--line)}
.etu-list{list-style:none; margin:0; padding:0; display:flex; flex-direction:column}
.etu-list li{border-bottom:1px solid var(--line-soft)}
.etu-list li:last-child{border-bottom:0}
.etu-list a{display:block; text-decoration:none; padding:10px 0; color:inherit}
.etu-list a:hover .q{color:var(--live)}
.etu-list .q{display:block; font-family:Archivo,sans-serif; font-weight:700;
  font-size:13.5px; line-height:1.35; color:var(--ink)}
.etu-list .r{display:block; margin-top:3px; font-size:12.5px; line-height:1.45; color:var(--muted)}
.bq-deals{display:grid;grid-template-columns:repeat(auto-fit,minmax(196px,1fr));gap:14px}
.bq-card{display:flex;flex-direction:column;background:var(--sunken);border:1px solid var(--line)}
.bq-card .ph{aspect-ratio:1/1;background:#fff;overflow:hidden;display:flex;align-items:center;justify-content:center}
.bq-card .ph img{width:100%;height:100%;object-fit:contain;display:block}
.bq-card .bd{padding:11px 12px 13px;display:flex;flex-direction:column;gap:6px;flex:1}
.bq-card .nm{font-size:13px;font-weight:600;line-height:1.32;margin:0}
.bq-card .at{font:500 10.5px/1.4 var(--mono);color:var(--muted);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.bq-card .px{display:flex;align-items:baseline;gap:8px;margin-top:auto;padding-top:5px}
.bq-card .now{font:600 19px/1 var(--mono);font-variant-numeric:tabular-nums;letter-spacing:-.02em}
.bq-card .was{font:500 12.5px/1 var(--mono);color:var(--muted);text-decoration:line-through;
  font-variant-numeric:tabular-nums}
.bq-save{align-self:flex-start;background:var(--live);color:var(--ground);
  font:600 11.5px/1 var(--mono);padding:4px 8px}
.bq-save--cmp{background:transparent;color:var(--ink-2);border:1px solid var(--line);padding:3px 7px}
.pays-liens{border-top:1px solid var(--line-soft);background:var(--sunken);padding:10px 0;
  font:500 12px/1.9 var(--mono)}
.pays-liens .wrap{display:flex;flex-wrap:wrap;gap:0 14px;align-items:baseline}
.pays-liens span{color:var(--muted)}
.pays-liens a{color:var(--ink-2);text-decoration:none}
.pays-liens a:hover{color:var(--ink);text-decoration:underline}
.bq-card .nm a{color:inherit;text-decoration:none}
.bq-card .nm a:hover{text-decoration:underline}
.bq-card .ph{display:block}
.bq-buy{display:block;text-align:center;margin-top:4px;padding:8px 10px;background:var(--ink);
  color:var(--ground);font:600 12px/1.2 var(--mono);text-decoration:none;letter-spacing:.01em}
.bq-buy:hover{background:var(--live)}
.bq-buy:focus-visible{outline:2px solid var(--live);outline-offset:2px}
.bq-rest{border:2px solid var(--ink);padding:18px 20px;display:flex;flex-direction:column;gap:8px}
.bq-rest h2{margin:0;font-size:17px;font-weight:700;letter-spacing:-.012em}
.bq-rest p{margin:0;font-size:15px;color:var(--ink-2);max-width:60ch}
.bq-rest strong{color:var(--ink);font-weight:600}
@media (max-width:560px){.bq-tag{width:38px;height:46px}.bq-tag.vrai{width:46px;height:56px}}
