
:root{
  --ground:#EEF2F2; --surface:#FFFFFF; --sunken:#E3EAEA;
  --line:#CBD7D8; --line-soft:#DDE5E5;
  --ink:#0D1719; --ink-2:#3B4E52; --muted:#6B8085;
  --live:#0E8F7C;            /* teal : donnée vérifiée, vrai mouvement */
  --live-wash:#D3EDE8;
  --lie:#B4462F;             /* rouille : réservé au faux rabais, rien d'autre */
  --lie-wash:#F6DED8;
  --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:#4FD6BC; --live-wash:#12332E;
    --lie:#E0765C; --lie-wash:#38201A;
    --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:#4FD6BC; --live-wash:#12332E;
  --lie:#E0765C; --lie-wash:#38201A;
  --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}

/* ── rail d'état ─────────────────────────────────────────────── */
.rail{
  border-bottom:1px solid var(--line); background:var(--sunken);
  position:sticky; top:0; z-index:20;
}
.rail-in{
  display:flex; align-items:center; gap:0; flex-wrap:wrap;
  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-item{padding:0 16px; border-right:1px solid var(--line-soft); white-space:nowrap}
.rail-item:first-child{padding-left:0}
.rail-item:last-child{border-right:0; margin-left:auto; 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. */
  .men .sm{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}

/* ── 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}
/* 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. */
.dit-comment{margin:0;padding:9px 22px 0;font-family:"IBM Plex Mono",monospace;font-size:11px;
  letter-spacing:.05em;text-transform:uppercase}
.dit-comment a{color:var(--muted);text-decoration:none;border-bottom:1px solid var(--line)}
.dit-comment a:hover{color:var(--live);border-bottom-color:var(--live)}
.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[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)}
.sec-head{display:flex; align-items:baseline; justify-content:space-between; gap:20px; flex-wrap:wrap; margin-bottom:28px}
/* 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:13px; color:var(--muted); max-width:44ch}

.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)}
.foot-in{display:flex; justify-content:space-between; gap:24px; flex-wrap:wrap; align-items:center}
.foot-in nav{gap:20px; font-size:13px}
.foot-in a{color:var(--muted); text-decoration:none}
.foot-in a:hover{color:var(--ink)}

/* ── 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. Les rangs forts prennent la couleur, les trois derniers
   restent gris : ils enoncent un fait de couverture, pas un jugement de prix. */
.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{background:var(--live-wash);color:var(--live);border-color:color-mix(in srgb,var(--live) 32%,transparent)}
.v-bas{color:var(--live)}
.v-att{color:var(--ink-2)}
.v-gris{color:var(--muted)}
.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}
.cl-bon{background:var(--live-wash);color:var(--live);border-color:color-mix(in srgb,var(--live) 32%,transparent)}
.cl-bas{color:var(--live)}
.cl-att{color:var(--muted)}
.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)}
.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(3,1fr)}
@media(max-width:900px){.vehic{grid-template-columns:repeat(2,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}}

