/* ═══════════════════════════════════════════════════════════════════════════
   VITALAB · SOCLE v1  —  DÉBUT DU BLOC PARTAGÉ
   Tout ce qui suit jusqu'à « FIN DU BLOC PARTAGÉ » se copie tel quel
   dans vitalab.css, et se charge sur les quinze pages.
   Rien n'a été inventé : jetons extraits de vitalabbooking_147.html.
   ═══════════════════════════════════════════════════════════════════════════ */

/* ───── 1 · JETONS ───────────────────────────────────────────────────────── */
:root{
  --white:#ffffff; --bg:#F4F3F6; --surface:#ffffff;
  --line:#E4E2EC; --line-soft:#EDEBF1; --line-cool:#E4E2EC;
  --ink:#232F58; --ink-soft:#454C6E; --ink2:#5B6488; --muted:#85868F;
  --indigo:#4C56C9; --indigo-deep:#3B45B0; --indigo-pale:#E9EAFA; --indigo-line:#D6D9F4;
  --silver-grad:linear-gradient(145deg,#ffffff 0%,#f1eee6 100%);
  /* Largeur de la colonne de contenu. Elle était écrite 960px en dur dans
     cinq composants et dans la feuille du catalogue : le catalogue serrait
     ses cartes pendant que celles de l'accueil s'étiraient sur toute la
     largeur. Un seul nombre les accorde désormais.                        */
  --colonne:1232px;   /* [18 août] 1080 → 1232 : la travée de l'en-tête,
                        du bord gauche du bouton menu au bord droit de
                        « Réserver ». Sur l'accueil, la barre de catégories
                        y était déjà et débordait de 76 px de chaque côté
                        de la liste qu'elle filtre. */
  --radius:16px; --btn-radius:11px;
  --shadow-sm:0 1px 6px -3px rgba(35,47,88,.12);
  --shadow:0 20px 46px -28px rgba(35,47,88,.28);
  --shadow-float:0 14px 40px -20px rgba(35,47,88,.24),0 2px 8px -4px rgba(35,47,88,.08);
  --font:'Hanken Grotesk',system-ui,sans-serif; --accent:'Playfair Display',Georgia,serif;
  --gutter:clamp(20px,4vw,64px);
  --head-full:95px; --head-compact:71px;
  /* ajouts du socle — sémantique d'état, absente des trois pages */
  --vio:#7B2FAE; --vio-deep:#5A1F80; --vio-pale:#F3E9FA; --vio-line:#DDC7F0;

  /* Une couleur par famille de services. Quatre teintes en servaient dix :
     le sarcelle couvrait ITSS, herpès et urine ; la terracotta couvrait
     drogues, ECG, prénuptial et pylori. Contrastes vérifiés — accent sur
     blanc ≥ 4.5 (texte), accent sur pastille ≥ 3.0 (icône), et ΔE ≥ 15
     entre deux accents quelconques. Le balisage porte encore ces valeurs
     en dur ; ces jetons sont la référence quand on les remplacera.        */
  --f-prelevement:#4C56C9; --f-prelevement-pale:#E9EAFA;
  --f-bilans:#2F7A55;      --f-bilans-pale:#DFEFE6;
  --f-itss:#2C7C8A;        --f-itss-pale:#DCECED;
  --f-herpes:#6B5BA6;      --f-herpes-pale:#E9E6F5;
  --f-urine:#1F6F94;       --f-urine-pale:#DCEAF2;
  --f-femme:#A85276;       --f-femme-pale:#F3E1EA;
  --f-pylori:#B25636;      --f-pylori-pale:#F5E4DB;
  --f-ecg:#B23A5B;         --f-ecg-pale:#F7E1E7;
  --f-heredite:#8A6A2F;    --f-heredite-pale:#F1EADB;
  --f-drogues:#566079;     --f-drogues-pale:#E6E8EE;
  --ok:#1EA85C; --ok-pale:#E6F2F1; --ok-line:#CFE6E1;
  --warn:#B4761E; --warn-pale:#FBF3E4; --warn-line:#EEDCBB;
}

/* ───── 2 · BASE ─────────────────────────────────────────────────────────── */
*{margin:0;padding:0;box-sizing:border-box}
html{scroll-behavior:smooth;scroll-padding-top:calc(var(--head-compact) + 12px);-webkit-text-size-adjust:100%;text-size-adjust:100%}
body{font-family:var(--font);background:var(--bg);color:var(--ink-soft);-webkit-font-smoothing:antialiased;line-height:1.6;overflow-x:clip;padding-top:var(--head-full);-webkit-tap-highlight-color:transparent}
.wrap{width:100%;padding:0 var(--gutter);margin:0}
a{color:inherit;text-decoration:none}
h1,h2,h3,h4,h5{color:var(--ink);font-weight:700;letter-spacing:-.015em;line-height:1.15}
em{font-style:italic}
img{max-width:100%}
:focus-visible{outline:2px solid var(--indigo);outline-offset:3px;border-radius:6px}
@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important;scroll-behavior:auto!important}}

/* ───── 3 · BILINGUISME — inchangé, 639 paires en dépendent ──────────────── */
body:not(.en) [data-en]{display:none!important}
body.en       [data-fr]{display:none!important}

/* ───── 4 · PRIX — un seul interrupteur pour la décision §7 ──────────────── */
/* body.prix  → les prix s'affichent · absence de la classe → ils disparaissent */
body:not(.prix) [data-prix]{display:none!important}

/* ───── 5 · RÉVÉLATION AU DÉFILEMENT ─────────────────────────────────────── */
.reveal{opacity:0;transform:translateY(18px);transition:opacity .7s cubic-bezier(.16,1,.3,1),transform .7s cubic-bezier(.16,1,.3,1)}
.reveal.in{opacity:1;transform:none}

/* ───── 6 · MARQUE ───────────────────────────────────────────────────────── */
.brand{display:flex;align-items:center;gap:9px;flex-shrink:0;color:var(--ink)}
.brand-logo{display:block;height:32px;width:auto;aspect-ratio:1500/498;background:url("data:image/png;base64,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") left center/contain no-repeat}

/* ───── 7 · EN-TÊTE ──────────────────────────────────────────────────────── */
.siteheader{position:fixed;top:0;left:0;right:0;z-index:60;background:radial-gradient(130% 460% at 50% 44%,var(--indigo-pale) 0%,rgba(233,234,250,0) 60%),#FAF9FC;border-bottom:1px solid transparent;box-shadow:none;transition:background .35s ease,box-shadow .35s ease,border-color .35s ease}
.siteheader.compact{background:rgba(250,250,253,.85);backdrop-filter:blur(20px) saturate(1.35);-webkit-backdrop-filter:blur(20px) saturate(1.35);border-bottom-color:var(--line-cool);box-shadow:0 12px 30px -18px rgba(35,47,88,.34)}
.headbar{display:flex;position:relative;align-items:center;gap:clamp(9px,1.3vw,18px);width:100%;padding:12px clamp(16px,3vw,44px)}
/* Bouton menu : trois traits fondus dans l'en-tête. Pas de fond, pas de
   bordure, pas de mot — la surface reste celle de l'en-tête et seul le
   survol dépose un halo. Les traits sont des blocs de 2 px alignés sur la
   grille de pixels : plus nets qu'un SVG mis à l'échelle. Le trait du
   milieu, plus court, s'étire au survol; à l'ouverture les deux autres se
   croisent. L'état vient de aria-expanded, que la bascule pose déjà.   */
.menu-btn{display:inline-flex;flex-direction:column;align-items:center;justify-content:center;
  gap:4px;width:46px;height:46px;padding:0;flex-shrink:0;background:#fff;
  border:1px solid var(--line-cool);border-radius:13px;cursor:pointer;
  font:inherit;-webkit-tap-highlight-color:transparent;
  /* Gris neutre au repos. #7A7C88 tient au-dessus de 3:1 sur toute la largeur
     de l'en-tête, y compris au centre du dégradé indigo, qui est la partie la
     plus claire — c'est le seuil des éléments graphiques non textuels. Un cran
     plus clair (--muted, #85868F) y tomberait à 2,9:1.                    */
  color:#7A7C88;
  transition:background .22s ease,border-color .22s ease,color .22s ease}
.menu-btn:hover{background:var(--indigo-pale);border-color:var(--indigo-line);color:var(--indigo-deep)}
.menu-btn:active{background:rgba(76,86,201,.14)}
.menu-btn:focus-visible{outline:none;border-color:var(--indigo-line);
  box-shadow:0 0 0 3px rgba(76,86,201,.18)}
/* menu ouvert : la croix prend la couleur active, sinon un panneau indigo
   resterait commandé par un bouton gris.                                */
.menu-btn[aria-expanded="true"]{color:var(--indigo-deep)}
/* Trois traits de même longueur, centrés — au repos comme au survol. Rien
   ne change de largeur, seule la croix bouge.                           */
.menu-btn .ml{display:block;width:18px;height:2px;border-radius:2px;background:currentColor;
  transition:transform .26s cubic-bezier(.2,.9,.3,1.2),opacity .16s ease}
.menu-btn[aria-expanded="true"] .ml:nth-child(1){transform:translateY(6px) rotate(45deg)}
.menu-btn[aria-expanded="true"] .ml:nth-child(2){opacity:0;transform:scaleX(.2)}
.menu-btn[aria-expanded="true"] .ml:nth-child(3){transform:translateY(-6px) rotate(-45deg)}
@media(prefers-reduced-motion:reduce){.menu-btn .ml{transition:none}}
.hright{display:flex;align-items:center;gap:clamp(7px,1vw,14px);flex-shrink:0;margin-left:auto}
.h-link{font-size:.85rem;font-weight:600;color:var(--ink-soft);white-space:nowrap;transition:color .2s;display:inline-flex;align-items:center;gap:6px}
.h-link:hover{color:var(--indigo)}
.h-phone{font-size:.85rem;font-weight:700;color:var(--ink);white-space:nowrap;display:inline-flex;align-items:center;gap:7px;padding-left:clamp(6px,1vw,13px);border-left:1px solid var(--line)}
.h-phone i{color:var(--indigo);font-size:16px}
.h-phone:hover{color:var(--indigo-deep)}
.lang{display:flex;font-size:.74rem;font-weight:600;background:var(--bg);border:1px solid var(--line-cool);border-radius:10px;padding:3px}
.lang button,.lang a{font:inherit;border:none;background:none;cursor:pointer;text-decoration:none;color:var(--muted);padding:5px 10px;border-radius:7px;font-weight:600;transition:all .25s}
.lang button.on,.lang a.on{background:var(--white);color:var(--ink);box-shadow:var(--shadow-sm)}
/* Le menu déroulant reprend la réalité du catalogue : une action de
   réservation en tête, puis les dix sections telles qu'elles sont ordonnées
   dans les barres, puis le laboratoire. Deux colonnes pour les sections :
   dix entrées en pile feraient un menu de 400 px de haut.              */
.navmenu{position:absolute;top:calc(100% + 10px);left:clamp(16px,3vw,44px);
  width:min(344px,calc(100vw - 26px));background:#fff;border:1px solid var(--line);
  border-radius:16px;padding:10px;display:none;z-index:70;
  max-height:min(78vh,640px);overflow:auto;overscroll-behavior:contain;
  box-shadow:0 30px 70px -32px rgba(35,47,88,.34),0 2px 10px -5px rgba(35,47,88,.10)}
.navmenu::-webkit-scrollbar{width:0}
.nm-cta{background:var(--indigo);border-radius:12px;font-weight:600;margin-bottom:2px}
.navmenu a.nm-cta,.navmenu a.nm-cta i{color:#fff}
.navmenu a.nm-cta:hover{background:var(--indigo-deep);color:#fff}
.nm-lab{font-size:.6rem;font-weight:700;letter-spacing:.14em;text-transform:uppercase;
  color:var(--muted);padding:14px 12px 6px}
.nm-grid{display:grid;grid-template-columns:1fr 1fr;gap:4px}
.navmenu .nm-grid a{padding:9px 10px;gap:9px;border-radius:11px;font-size:.83rem;
  line-height:1.22;align-items:center;min-height:40px}
.navmenu .nm-grid a i{font-size:16px;width:17px;flex-shrink:0}
.navmenu .nm-grid a.nm-all{grid-column:1 / -1;justify-content:center;font-weight:600;
  color:var(--indigo-deep);background:var(--indigo-pale)}
.navmenu .nm-grid a.nm-all:hover{background:var(--indigo-line)}
.nm-sep{height:1px;background:var(--line-soft);margin:9px 6px 2px}
.navmenu.open{display:block}
.navmenu a{display:flex;align-items:center;gap:12px;padding:11px 13px;border-radius:11px;font-size:.92rem;font-weight:500;color:var(--ink-soft);transition:background .2s,color .2s}
.navmenu a i{font-size:18px;color:var(--indigo);width:20px;text-align:center}
.navmenu a:hover{background:var(--indigo-pale);color:var(--indigo-deep)}

/* recherche — repris de vitalabbooking_147 */
/* search */
.search{flex:1 1 auto;min-width:0;max-width:none;position:relative}
.search-in{display:flex;align-items:center;gap:10px;background:#fff;border:1px solid var(--line-cool);border-radius:13px;padding:0 6px 0 15px;height:46px;transition:all .25s}
.search-in:focus-within{background:#fff;border-color:var(--indigo-line);box-shadow:0 0 0 4px rgba(76,86,201,.12)}
.search-in>svg{color:var(--muted);flex-shrink:0;transition:color .25s}
.search-in:focus-within>svg{color:var(--indigo)}
.search input{width:100%;border:none;background:none;outline:none;font:inherit;font-size:.92rem;color:var(--ink);padding:0}
.search input::placeholder{color:var(--muted)}
.search kbd{flex-shrink:0;font:inherit;font-size:.6rem;font-weight:700;color:var(--muted);background:#fff;border:1px solid var(--line);border-bottom-width:2px;border-radius:5px;padding:2px 6px}
.search-go{flex-shrink:0;width:34px;height:34px;border:none;border-radius:9px;background:var(--indigo);color:#fff;display:grid;place-items:center;cursor:pointer;transition:all .2s;box-shadow:0 6px 14px -6px rgba(76,86,201,.6)}
.search-go:hover{background:var(--indigo-deep);transform:translateY(-1px)}
.search-go svg{width:16px;height:16px}
.sug{position:absolute;top:calc(100% + 12px);left:0;right:0;background:#fff;border:1px solid var(--line);border-radius:16px;box-shadow:var(--shadow);padding:8px;display:none;max-height:min(72vh,470px);overflow:auto;z-index:80}
.search.open .sug{display:block}
.sug-head{display:flex;align-items:center;justify-content:space-between;padding:6px 10px 4px;font-size:.64rem;font-weight:700;letter-spacing:.13em;text-transform:uppercase;color:var(--muted)}
.sug-group{font-size:.62rem;font-weight:700;letter-spacing:.13em;text-transform:uppercase;color:var(--indigo-deep);padding:11px 10px 4px}
.sug a{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:9px 11px;border-radius:11px;font-size:.9rem;color:var(--ink-soft);transition:background .16s;cursor:pointer}
.sug a .sname{display:flex;align-items:center;gap:11px;min-width:0}
.sug a .sic{width:29px;height:29px;border-radius:9px;background:var(--indigo-pale);color:var(--indigo);display:grid;place-items:center;font-size:15px;flex-shrink:0;transition:all .16s}
.sug a .stext{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sug a mark{background:rgba(76,86,201,.16);color:var(--indigo-deep);border-radius:3px;padding:0 1px;font-weight:600}
.sug a .tag{font-size:.62rem;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--muted);white-space:nowrap;flex-shrink:0}
.sug a:hover,.sug a.hl{background:var(--indigo-pale);color:var(--indigo-deep)}
.sug a:hover .sic,.sug a.hl .sic{background:var(--indigo);color:#fff}
.sug a:hover .tag,.sug a.hl .tag{color:var(--indigo)}
.sug .empty{padding:18px 12px;color:var(--muted);font-size:.86rem;text-align:center;line-height:1.6}
.sug .empty b{color:var(--ink)}

/* ===== BARRE POPULAIRE ===== */
/* ===== POPULAR BAR (under header) ===== */
.popbar{display:flex;align-items:center;justify-content:center;gap:0;flex-wrap:nowrap;width:100%;padding:0 clamp(16px,3vw,44px) 4px;max-height:56px;opacity:1;overflow:hidden;transition:max-height .35s ease,opacity .28s ease,padding .3s ease}
/* ── La largeur de la bande de chrome ───────────────────────────────────────
   [16 août] Le fond du dégradé couvre l'écran entier — c'est voulu, une bande
   d'en-tête se coupe mal. Mais son CONTENU s'étalait avec lui : sur un écran
   de 1900 px, le logo touchait le bord gauche et Réserver le bord droit, avec
   un champ de recherche de mille pixels au milieu. Borné à 1320 : le champ
   reste lisible en entier et toutes les catégories tiennent. Essayé à 1080,
   la largeur du contenu des pages — le champ se faisait rogner. */
.headbar,.popbar{max-width:1320px;margin-left:auto;margin-right:auto}
.popbar .plabel,.popbar .pall{flex:0 0 auto}
.popnav{flex:0 0 auto;background:none;border:none;color:var(--indigo);font-size:1.05rem;
  line-height:1;cursor:pointer;opacity:.7;transition:opacity .2s,transform .2s;
  /* 21×21 mesuré au téléphone : sous le minimum de 24×24 de WCAG 2.5.8,
     et ce sont des contrôles isolés, donc sans l'exception d'espacement. */
  min-width:26px;min-height:26px;display:inline-flex;align-items:center;justify-content:center;padding:0}
.popnav:hover{opacity:1;transform:scale(1.2)}
.popnav[data-dir="-1"]{margin:0 3px 0 18px}
.popnav[data-dir="1"]{margin:0 18px 0 3px}
.poptrack{flex:0 1 auto;min-width:0;display:flex;align-items:center;gap:16px;overflow-x:auto;overflow-y:hidden;justify-content:flex-start;scroll-behavior:smooth;-webkit-overflow-scrolling:touch;scrollbar-width:none;padding:0 2px}
.poptrack::-webkit-scrollbar{display:none}
.poptrack .popchip{flex:0 0 auto}
.poptrack.grabbing{scroll-behavior:auto;cursor:grabbing}
.poptrack.grabbing .popchip{cursor:grabbing}
.siteheader.compact .popbar{max-height:0;opacity:0;padding-top:0;padding-bottom:0}
.popbar .plabel{font-size:.63rem;font-weight:700;letter-spacing:.15em;text-transform:uppercase;color:var(--indigo);margin-right:0}
.popchip{font-family:var(--font);font-size:.8rem;font-weight:600;color:var(--ink2);
  background:none;border:none;cursor:pointer;transition:color .2s;display:inline-flex;
  align-items:center;gap:6px;white-space:nowrap;text-decoration:none;text-underline-offset:3px;
  padding:4px 0;min-height:26px}   /* 23 px mesurés : un pixel sous le seuil */
.popchip i{font-size:14px;color:var(--indigo)}
.popchip:hover{color:var(--indigo)}
.popchip:hover span{text-decoration:underline;text-decoration-color:var(--indigo)}
.popchip:hover i{opacity:1}
.pall{font-size:.8rem;font-weight:600;color:var(--indigo-deep);display:inline-flex;align-items:center;gap:6px;margin-left:0;cursor:pointer;white-space:nowrap}
.pall .arr{transition:transform .25s}.pall:hover .arr{transform:translateX(3px)}.pall:hover span:not(.arr){text-decoration:underline;text-underline-offset:3px;text-decoration-color:var(--indigo-deep)}

/* ───── 8 · BOUTONS ──────────────────────────────────────────────────────── */
.btn{font-family:var(--font);font-weight:600;font-size:.88rem;padding:12px 22px;border-radius:var(--btn-radius);cursor:pointer;background:#fff;border:1px solid var(--line);color:var(--ink);box-shadow:var(--shadow-sm);display:inline-flex;align-items:center;gap:9px;transition:all .35s cubic-bezier(.16,1,.3,1);white-space:nowrap}
.btn .arr{transition:transform .3s}
.btn:hover .arr{transform:translateX(3px)}
.btn:hover{background:var(--indigo-pale);border-color:var(--indigo-line);color:var(--indigo-deep);transform:translateY(-2px);box-shadow:0 12px 24px -14px rgba(35,47,88,.24)}
.btn-primary{background:var(--indigo);border-color:var(--indigo);color:#fff;box-shadow:0 12px 26px -12px rgba(76,86,201,.6)}
.btn-primary:hover{background:var(--indigo-deep);border-color:var(--indigo-deep);color:#fff}
/* ── L'exception de la carte « Bilan de santé complet » ────────────────────
   [17 août] Ce bouton était le SEUL « Réserver » plein bleu du site : tous
   les autres passent par .btn-book — blanc, filet indigo, texte indigo
   profond au repos, indigo plein au survol. D'où l'impression de bleu trop
   fort. On le remet dans le rang.

   Porté par .bs-r (0,2,0) et non .btn-primary (0,1,0) : .btn-primary sert
   102 fois ailleurs sur le site et ne doit pas bouger.

   Le fond du panneau .bs-r vaut ~#F0F1FC sous le bouton ; un remplissage
   --indigo-pale (#E9EAFA) l'y aurait dissous. Le blanc, lui, détache. */
.bs-r .btn-primary{background:#fff;border:1.5px solid var(--indigo);
  color:var(--indigo-deep);box-shadow:0 6px 16px -12px rgba(35,47,88,.25)}
.bs-r .btn-primary:hover{background:var(--indigo);border-color:var(--indigo);
  color:#fff;box-shadow:0 10px 20px -10px rgba(76,86,201,.6)}
.btn-cta{color:var(--indigo-deep);border-color:var(--indigo-line)}
.btn-outline-fill{color:var(--indigo-deep);border-color:var(--indigo-line)}
.btn-outline-fill:hover{background:var(--indigo);border-color:var(--indigo);color:#fff;box-shadow:0 12px 26px -12px rgba(76,86,201,.6)}
.btn-soft{color:var(--indigo-deep)}
.btn-sm{padding:10px 16px;font-size:.82rem}
.btn-book{flex:1;min-width:0;justify-content:center;height:clamp(36px,4.2vw,42px);border-radius:11px;border:1.5px solid var(--indigo);color:var(--indigo-deep);background:transparent;font-family:var(--font);font-weight:600;font-size:clamp(.72rem,1.35vw,.85rem);white-space:nowrap;padding:0 clamp(6px,1.4vw,12px);display:inline-flex;align-items:center;gap:6px;transition:all .25s;cursor:pointer;text-decoration:none}
.btn-book:hover{background:var(--indigo);color:#fff;border-color:var(--indigo);box-shadow:0 10px 20px -10px rgba(76,86,201,.6)}
.btn-book .arr{transition:transform .25s}
.btn-book:hover .arr{transform:translateX(3px)}

/* ───── 9 · SECTIONS ─────────────────────────────────────────────────────── */
.section{padding:clamp(48px,6vw,86px) 0}
.section-tight{padding:clamp(30px,4vw,52px) 0}
.eyebrow{font-family:var(--accent);font-style:italic;font-size:.96rem;font-weight:400;color:var(--indigo);letter-spacing:.01em}
.sec-head{max-width:660px;margin:0 auto;text-align:center}
.sec-head.left{text-align:left;margin:0}
.sec-head .eyebrow{display:inline-block;margin-bottom:10px}
.sec-head h2{font-size:clamp(1.5rem,2.7vw,2.05rem);margin-bottom:12px;letter-spacing:-.02em}
.sec-head h2 .ac{font-family:var(--accent);font-style:italic;font-weight:400;color:var(--indigo)}
.sec-head p{font-size:.96rem;color:var(--ink2);font-weight:400;line-height:1.65}

/* ───── 10 · CARTE DE SERVICE ────────────────────────────────────────────── */
/* Une seule carte pour les quinze pages. Les fentes prix / délai / ordonnance
   sont facultatives : la carte reste valable si on ne les remplit pas. */
.svc{position:relative;display:flex;flex-direction:column;background:#fff;border:1px solid var(--line);border-radius:18px;padding:22px 22px 18px;transition:transform .4s cubic-bezier(.16,1,.3,1),box-shadow .4s cubic-bezier(.16,1,.3,1),border-color .4s}
.svc:hover{transform:translateY(-4px);border-color:var(--indigo-line);box-shadow:var(--shadow)}
.svc-top{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:9px}
.svc h3{font-family:var(--accent);font-size:1.16rem;font-weight:500;color:var(--ink);line-height:1.18}
.svc .svc-desc{font-size:.86rem;color:var(--ink2);line-height:1.55;flex:1;margin-bottom:14px}
.svc-meta{display:flex;flex-wrap:wrap;align-items:center;gap:7px;margin-bottom:14px}
.svc-foot{display:flex;align-items:center;gap:10px;padding-top:13px;border-top:1px solid var(--line-soft)}
.svc-price{display:flex;align-items:baseline;gap:6px;margin-right:auto}
.svc-price .amt{font-size:1.42rem;font-weight:700;color:var(--ink);font-variant-numeric:tabular-nums;letter-spacing:-.015em;line-height:1}
.svc-price .from{font-size:.66rem;color:var(--muted);text-transform:uppercase;letter-spacing:.08em;font-weight:600}
.svc-noprice{margin-right:auto;font-size:.8rem;color:var(--muted)}

/* pastilles d'information */
.pill{display:inline-flex;align-items:center;gap:5px;font-size:.72rem;font-weight:600;line-height:1;padding:5px 10px;border-radius:20px;border:1px solid transparent;white-space:nowrap}
.pill i{font-size:13px}
.pill-delay{background:var(--ok-pale);border-color:var(--ok-line);color:#14663A}
.pill-delay.is-range{background:var(--warn-pale);border-color:var(--warn-line);color:var(--warn)}
.pill-rx{background:var(--indigo-pale);border-color:var(--indigo-line);color:var(--indigo-deep)}
.pill-norx{background:#fff;border-color:var(--line);color:var(--ink2)}
.pill-fam{background:var(--bg);border-color:var(--line-cool);color:var(--ink-soft)}

/* note d'honnêteté attachée à une fourchette de délai */
.delay-note{font-size:.74rem;line-height:1.5;color:var(--warn);background:var(--warn-pale);border:1px solid var(--warn-line);border-radius:10px;padding:8px 11px;margin-bottom:13px;display:flex;gap:7px}
.delay-note i{font-size:14px;flex:none;margin-top:1px}

/* ───── 11 · GRILLES ─────────────────────────────────────────────────────── */
.grid-3{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}
.grid-2{display:grid;grid-template-columns:repeat(2,1fr);gap:16px}
@media(max-width:1000px){.grid-3{grid-template-columns:repeat(2,1fr)}}
@media(max-width:680px){.grid-3,.grid-2{grid-template-columns:1fr}}

/* ───── 12 · FENTE DU WIDGET DE RÉSERVATION ──────────────────────────────── */
.bookslot{background:#fff;border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-sm);overflow:hidden;min-height:640px;position:relative}
.bookslot iframe{display:block;width:100%;height:100%;min-height:640px;border:0}
.bookslot-ph{position:absolute;inset:0;display:grid;place-items:center;text-align:center;padding:32px;color:var(--muted);font-size:.88rem;gap:10px;background:repeating-linear-gradient(135deg,#fff 0 12px,#FBFAFD 12px 24px)}

/* ───── 12b · KIT DE DÉTAIL — repris de vitalabbooking_147 ───────────────── */
.hero-badge .dot{width:8px;height:8px;border-radius:50%;background:#1EA85C;box-shadow:0 0 0 3px rgba(30,168,92,.18);flex-shrink:0}
.hero-proof{max-width:600px;margin:24px auto 0;padding-top:20px;border-top:1px solid var(--line-cool)}
.hp-row{display:flex;align-items:center;justify-content:center;gap:16px;flex-wrap:wrap;font-size:.85rem;color:var(--ink2)}
.hp-item{display:inline-flex;align-items:center;gap:8px}
.hp-item b{color:var(--ink);font-weight:700}
.hp-item b.acc{color:var(--indigo-deep)}
.hp-stars{color:#F5A623;letter-spacing:.5px;font-size:.82rem}
.g-ic-sm{width:17px;height:17px;flex-shrink:0}
.hp-item>i{color:var(--indigo);font-size:16px}
.hp-sep{width:1px;height:15px;background:var(--line)}
.hp-ins{display:flex;align-items:center;justify-content:center;gap:8px;margin-top:11px;font-size:.85rem;color:var(--muted)}
.hp-ins i{color:var(--indigo);font-size:16px}
.hp-ins b{color:var(--ink-soft);font-weight:700}
@media(max-width:520px){.hp-sep{display:none}.hp-row{gap:8px 16px}}
/* ===== CENTRES STRIP (between hero & services) ===== */
.centres-strip{padding:9px 0 clamp(18px,3vw,30px)}
.cs-sep{height:1px;background:var(--line-cool);max-width:600px;margin:0 auto 20px}
.cs-panel{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--line-cool);border:1px solid var(--line-cool);border-radius:16px;overflow:hidden;box-shadow:0 1px 3px rgba(20,30,80,.05);max-width:820px;margin-left:auto;margin-right:auto}
.cs-cell{display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;gap:3px;background:#fff;padding:13px 16px;min-width:0;transition:background .25s}
.cs-cell:hover{background:var(--indigo-pale)}
.cs-name{font-family:var(--accent);font-size:1rem;color:var(--ink);line-height:1.15;display:flex;align-items:center;gap:7px}
.cs-dot{width:7px;height:7px;border-radius:50%;background:#1EA85C;box-shadow:0 0 0 3px rgba(30,168,92,.16);flex:none}
.cs-addr{font-size:.76rem;color:var(--muted);max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* ===== BANDS ===== */
.band-light{background:linear-gradient(180deg,var(--bg) 0%,#EFEFFB 8%,#E9EAFA 20%,#E1E2F9 40%,#E1E2F9 60%,#E9EAFA 80%,#EFEFFB 92%,var(--bg) 100%);padding:clamp(52px,7vw,84px) 0}
.band-card{background:#fff;border:1px solid var(--indigo-line);border-radius:20px;max-width:960px;margin:0 auto;padding:clamp(32px,3.6vw,42px) clamp(26px,3.6vw,46px);display:flex;align-items:center;justify-content:space-between;gap:32px;flex-wrap:wrap;box-shadow:0 30px 60px -30px rgba(35,47,88,.32),0 4px 14px -8px rgba(35,47,88,.1)}
.band-text{text-align:left;flex:1 1 380px}
.band-text .band-eyebrow{font-size:.68rem;font-weight:700;letter-spacing:.16em;text-transform:uppercase;color:var(--indigo-deep);margin-bottom:10px}
.band-text h3{font-size:clamp(1.4rem,2.1vw,1.65rem);margin-bottom:8px;color:var(--ink);font-weight:700;line-height:1.18}
.band-text h3 .ac{font-family:var(--accent);font-style:italic;font-weight:400;color:var(--indigo);font-size:1.12em}
.band-text .band-sub{font-size:.96rem;color:var(--ink2);max-width:54ch;line-height:1.6;font-weight:400;text-wrap:balance}
.band-text .band-sub strong{color:var(--ink-soft);font-weight:600}
.band-actions{display:flex;flex-direction:column;align-items:stretch;gap:10px;flex:0 0 auto;min-width:220px}
.band-phone{font-size:.85rem;color:var(--indigo-deep);display:inline-flex;align-items:center;gap:6px;justify-content:center}
.band-phone a{color:var(--indigo-deep);font-weight:600}
.band-icon{flex:0 0 auto}
.band-icon i{font-size:60px;color:var(--indigo);opacity:.9}
@media(max-width:1040px){.band-card{flex-direction:row;flex-wrap:wrap;align-items:center;justify-content:center;gap:22px 18px}.band-text{flex:1 1 100%;min-width:0;text-align:center}.band-text .band-sub{margin-left:auto;margin-right:auto}.band-icon{order:2;flex:0 0 auto;margin:0}.band-icon i{font-size:50px}.band-actions{order:3;flex:0 0 auto;width:auto;min-width:0}}
@media(max-width:760px){.cs-panel{grid-template-columns:repeat(2,1fr)}}

/* ───── 12ter · NOTE « OÙ SE FAIT LE CHOIX » ─────────────────────────────── */
/* L'échelle ITSS annonce « trois analyses au choix parmi les six » sans dire
   où le choix se fait. Il se fait dans le formulaire SimplyBook, par les
   champs « Analyse 1 … 6 ». Cette note le dit, sous l'échelle. Volontairement
   sans fond ni cadre : c'est une note de bas d'échelle, pas un bloc de plus
   en concurrence avec celui des modules juste en dessous. */
.choix-note{display:flex;align-items:flex-start;gap:9px;
            font-size:.83rem;line-height:1.55;color:var(--ink2);
            margin:13px 0 0}
.choix-note i{font-size:16px;color:var(--indigo);flex:none;margin-top:1px}

/* ───── 12bis · REÇU D'ASSURANCE (.rc-*) ───────────────────────── */
/* Le balisage .rc-* de la section « assurance » est présent sur 66 pages,
   mais ses règles n'étaient déclarées qu'en <style> inline sur 62 d'entre
   elles : apres.html, en/after-your-visit.html et leurs deux clones
   (estimation / en/estimate) affichaient le reçu sans mise en forme.
   Les règles sont donc rapatriées ici, à l'identique du bloc inline
   (empreinte 9d10bb1f3211e115440bac165515a628), pour que le socle suffise.
   Les copies inline restant plus tardives dans la cascade, aucune page
   déjà correcte n'est modifiée. */
.rc-top{display:flex;align-items:center;justify-content:space-between;gap:10px;padding-bottom:12px;border-bottom:1px dashed #EBE4D7}
.rc-logo{font-family:var(--accent);font-weight:600;font-size:1.06rem;color:var(--ink)}
.rc-logoimg{height:19px}
.rc-logo b{color:var(--indigo)}
.rc-tag{font-size:.58rem;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--muted)}
.rc-row{display:flex;align-items:center;justify-content:space-between;gap:12px;font-size:.84rem;color:var(--ink-soft);padding:10px 0;border-bottom:1px solid #F0EBE0}
.rc-row b{color:var(--ink);font-variant-numeric:tabular-nums}
.rc-check{color:#1B7A4B;font-weight:700;display:inline-flex;align-items:center;gap:5px}
.rc-check i{font-size:15px}
.rc-foot{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:12px}
.rc-pdf{display:inline-flex;align-items:center;gap:7px;font-size:.76rem;font-weight:700;color:#B23A2E;background:#FBE9E7;border-radius:9px;padding:6px 11px}
.rc-ready{font-size:.76rem;color:var(--ink2);display:inline-flex;align-items:center;gap:6px}
.rc-ready i{color:#1B7A4B;font-size:15px}

/* ───── 13 · PIED DE PAGE — repris de vitalabbooking_147 ─────────────────── */
/* ===== FOOTER ===== */
footer{background:linear-gradient(165deg,#2a3560 0%,#161d3c 100%);padding:60px 0 28px;color:rgba(255,255,255,.72)}
.foot-brandcol .brand-word{color:#fff}
.foot-brandcol .brand-word .lab{color:#AEB6F5}
.foot-brandcol .brand-logo{height:34px;filter:brightness(0) invert(1)}
.foot-brand .brand-logo{height:38px;filter:brightness(0) invert(1);margin-top:-4px;margin-bottom:15px}
.foot-blurb{font-size:.85rem;line-height:1.6;color:rgba(255,255,255,.58);margin:14px 0 16px;max-width:36ch}
.foot-contact .line{display:flex;gap:9px;align-items:flex-start;font-size:.86rem;color:rgba(255,255,255,.72);margin-bottom:9px}
.foot-contact .line i{color:#9AA4F0;flex-shrink:0;font-size:16px;margin-top:1px}
.foot-contact .line a{color:rgba(255,255,255,.72);transition:color .25s}
.foot-contact .line a:hover{color:#fff}
.foot-hours{display:grid;grid-template-columns:auto auto;column-gap:6px;row-gap:3px;font-variant-numeric:tabular-nums;font-size:0.76rem;line-height:1.5;color:rgba(255,255,255,.72)}
.foot-hours .fht{text-align:right}
.foot-hours .fhf{text-align:left}
/* full clinic cards at top of footer */
.foot-clinics{margin:0 0 34px;padding-bottom:36px;border-bottom:1px solid rgba(255,255,255,.13)}
.foot-clinics-head{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;flex-wrap:wrap;margin-bottom:20px}
.fc-eyebrow{font-size:.66rem;font-weight:700;letter-spacing:.17em;text-transform:uppercase;color:#AEB6F5;margin-bottom:7px}
.foot-lead h4{font-size:clamp(1.2rem,2vw,1.5rem);color:#fff;font-weight:700;letter-spacing:-.01em}
.foot-lead h4 .ac{font-family:var(--accent);font-style:italic;font-weight:400;color:#AEB6F5}
.foot-clinics-head .fc-sub{font-size:.86rem;color:rgba(255,255,255,.6)}
.clinic-cards{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:rgba(255,255,255,.1);border:1px solid rgba(255,255,255,.13);border-radius:20px;overflow:hidden;box-shadow:0 24px 55px -34px rgba(0,0,0,.55)}
.clinic-card .btn-book{max-width:195px;width:100%;border-color:rgba(255,255,255,.28);color:#ECEDFB}
.clinic-card{position:relative;background:rgba(255,255,255,.05);padding:14px 22px 20px;display:flex;flex-direction:column;transition:background .3s cubic-bezier(.16,1,.3,1)}
.foot-lead h4{visibility:hidden}
.clinic-card:hover{background:rgba(255,255,255,.09)}
.clinic-card:hover h5{color:#fff}
.cc-top{display:flex;align-items:center;justify-content:center;gap:10px;margin-bottom:9px}
.clinic-card h5{font-family:var(--accent);font-weight:600;font-size:1.24rem;color:#F1F2FD;line-height:1.05;white-space:nowrap}
.cc-open{align-self:flex-end;margin-top:-2px;margin-bottom:5px;font-size:.58rem;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:#87E6AD;display:inline-flex;align-items:center;gap:5px;background:rgba(74,222,128,.14);border-radius:20px;padding:4px 9px;white-space:nowrap;flex-shrink:0}
.cc-open::before{content:'';width:6px;height:6px;border-radius:50%;background:#4ADE80}
.cc-addr{font-size:.83rem;color:rgba(255,255,255,.6);line-height:1.5;display:block;text-align:center;margin:0 0 16px;flex:1;text-decoration:none;cursor:pointer}
.cc-addr .addr-text:hover{color:#fff;text-decoration:underline}
.cc-name-link{color:inherit;text-decoration:none}
/* Hauteur de cible au téléphone. Les liens du pied et les noms de clinique
   tombaient entre 20 et 22 px ; empilés et espacés ils pouvaient invoquer
   l'exception d'espacement de WCAG 2.5.8, mais quelques pixels coûtent moins
   cher qu'un débat. Rien ne bouge au-dessus de 640 px. */
@media(max-width:640px){
  .foot-col a,.foot-bottom a,.cc-name-link{min-height:26px;display:inline-flex;align-items:center}
}
.cc-name-link:hover{text-decoration:none}
.cc-addr i{color:#9AA4F0;font-size:15px;flex-shrink:0;margin-top:2px}
.cc-actions{display:flex;align-items:center;justify-content:center;gap:8px}
.btn-book{flex:1;min-width:0;justify-content:center;height:clamp(36px,4.2vw,42px);border-radius:11px;border:1.5px solid var(--indigo);color:var(--indigo-deep);background:transparent;font-family:var(--font);font-weight:600;font-size:clamp(.72rem,1.35vw,.85rem);white-space:nowrap;padding:0 clamp(6px,1.4vw,12px);display:inline-flex;align-items:center;gap:6px;transition:all .25s;cursor:pointer;text-decoration:none}
.btn-book:hover{background:var(--indigo);color:#fff;border-color:var(--indigo);box-shadow:0 10px 20px -10px rgba(76,86,201,.6)}
.btn-book .arr{transition:transform .25s}.btn-book:hover .arr{transform:translateX(3px)}
.cc-icon{width:42px;height:42px;flex-shrink:0;border-radius:11px;border:1px solid var(--line);background:#fff;color:var(--ink-soft);display:grid;place-items:center;transition:all .25s}
.cc-icon:hover{border-color:var(--indigo-line);background:var(--indigo-pale);color:var(--indigo-deep);transform:translateY(-1px)}
.cc-icon i{font-size:17px}
.foot-mid{display:flex;align-items:flex-start;gap:clamp(24px,4vw,56px);padding-bottom:36px;border-bottom:1px solid rgba(255,255,255,.13)}
.foot-brandcol{flex:0 0 250px;max-width:270px}
.foot-brandcol p{font-size:.85rem;line-height:1.6;color:rgba(255,255,255,.58);margin:12px 0 16px}
.foot-contact-side{flex:0 0 250px;max-width:260px}
.foot-cols{display:grid;grid-template-columns:repeat(4,1fr);gap:clamp(20px,2.4vw,40px)}
@media(max-width:880px){.foot-cols{grid-template-columns:repeat(2,1fr);gap:clamp(28px,4vw,40px) 0}}
.foot-cols .foot-col{justify-self:center;text-align:left;width:min(226px,100%)}
.foot-col h5{font-size:.7rem;letter-spacing:.16em;text-transform:uppercase;color:#fff;margin-bottom:14px;font-weight:700}
.foot-col a,.foot-col .line{display:block;font-size:.86rem;color:rgba(255,255,255,.72);margin-bottom:9px;transition:color .25s}
.foot-col a:hover{color:#fff}
.foot-col .line{display:flex;gap:9px;align-items:flex-start;color:rgba(255,255,255,.72)}
.foot-col .line i{color:#9AA4F0;flex-shrink:0;font-size:16px;margin-top:1px}
.foot-col .line a{display:inline;margin:0}
.foot-partners .partner-line{margin-bottom:13px;line-height:1.4}
.foot-partners .partner-line a{display:block;margin:0}
.foot-partners strong{color:#fff;font-weight:600;font-size:.9rem}
.foot-partners .pdesc{display:block;font-style:italic;font-family:var(--accent);color:rgba(255,255,255,.5);font-size:.82rem;margin-top:2px}
.foot-bottom{display:flex;align-items:center;justify-content:space-between;gap:18px;padding-top:22px;font-size:.8rem;color:rgba(255,255,255,.5);flex-wrap:wrap}
.socials{display:flex;gap:9px}
.socials a{width:32px;height:32px;border-radius:8px;border:1px solid rgba(255,255,255,.18);background:rgba(255,255,255,.06);display:grid;place-items:center;color:#fff;transition:all .3s}
.socials a:hover{background:#9AA4F0;border-color:#9AA4F0;color:#161d3c;transform:translateY(-2px)}
.foot-disc{font-size:.72rem;color:rgba(255,255,255,.4);line-height:1.55;margin-top:18px;max-width:80ch}

/* responsive repris tel quel */
/* ===== RESPONSIVE ===== */
@media(max-width:1000px){ .foot-clinics{grid-template-columns:1fr}.clinic-cards{grid-template-columns:repeat(2,1fr)} }
@media(max-width:1080px){ .h-phone{display:none} }
@media(max-width:1000px){
  .h-link{display:none}
  .channels{grid-template-columns:1fr 1fr}
  .pp-body{min-height:0}
  .foot-mid{flex-wrap:wrap}
}
@media(max-width:760px){
  .headbar{flex-wrap:wrap;padding:10px 16px;gap:10px}
  .menu-btn{order:0}.brand{order:1}.hright{order:2;margin-left:auto}
  .search{order:3;flex-basis:100%;max-width:none}
  .lang{display:none}
  .popbar{flex-wrap:nowrap;overflow:hidden;justify-content:center;gap:0;padding-left:12px;padding-right:12px}
  .popbar::-webkit-scrollbar{display:none}
  :root{--head-full:170px;--head-compact:114px}
}
@media(max-width:680px){
  .channels{grid-template-columns:1fr}
  .vla-card .top{flex-direction:column}.vla-card .prices{width:100%}
  .mrow{flex-wrap:wrap}.mlead{display:none}.mprices{margin-left:49px}
  .cathead .cnote{display:none}
  .clinic-cards{grid-template-columns:1fr}
  .foot-mid{flex-direction:column;gap:30px}
  .foot-brandcol{max-width:none}
}
/* ===== iPhone / touch refinements (additive layer — safe to remove) ===== */
/* honour the notch & home-indicator in landscape and at the page bottom */
footer{padding-bottom:calc(28px + env(safe-area-inset-bottom))}
/* momentum scrolling on the review carousel */
.testi-track{-webkit-overflow-scrolling:touch}
/* dropdown height that respects the dynamic iOS toolbar */
@supports (max-height:100dvh){.sug{max-height:min(72dvh,470px)}}

@media(max-width:760px){
  /* keep header-offset vars in step with the real stacked-header height */
  :root{--head-full:152px;--head-compact:116px}
  /* keep the search field at 16px so iOS Safari doesn't zoom the page on focus */
  .search input{font-size:16px}
  /* notch-safe side padding + slightly tighter vertical rhythm to reclaim space */
  .headbar{padding:8px max(16px,env(safe-area-inset-right)) 8px max(16px,env(safe-area-inset-left))}
  .popbar{padding:0 max(16px,env(safe-area-inset-right)) 4px max(16px,env(safe-area-inset-left))}
  /* comfortable finger targets (Apple HIG ≈ 44px) without changing the look much */
  .popchip{padding-top:4px;padding-bottom:4px}
  .catchip{padding-top:8px;padding-bottom:8px}
  .search-go{width:38px;height:38px}
  .pall{padding:6px 4px}
  .vlb-card .det,.vla-card .det,.vlb-card .book,.vla-card .book{display:inline-flex;align-items:center;min-height:40px}
  .testi-arrow{width:42px;height:42px}
}

@media(max-width:680px){
  /* stop long test names in the list rows from pushing the page sideways on small iPhones */
  .mmain{flex:1 1 auto;min-width:0}
  .mname,.mdesc{overflow-wrap:anywhere}
  .mrow{gap:11px}
  .mprices{margin-left:0}
}

/* very small iPhones (SE / mini) — a little more breathing room */
@media(max-width:380px){
  :root{--gutter:16px}
  .hero h1{font-size:1.72rem}
  .vlb-card,.vla-card{padding-left:18px;padding-right:18px}
  .mcard{padding-left:14px;padding-right:14px}
  .band-actions{min-width:0;width:100%}
}

.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}

/* ───── 14 · ÉTAT DÉSARMÉ ────────────────────────────────────────────────── */
/* Visible seulement tant que VL_BOOK.actif = false. Se retire en une ligne
   le jour de la bascule, ou se garde en préproduction uniquement.        */
.vl-debug.vl-desarme .vl-armband{display:flex}
/* décalage du bandeau : mesuré au chargement par vlDecalage() */
.vl-armband{display:none;align-items:center;gap:9px;justify-content:center;background:var(--warn-pale);border-bottom:1px solid var(--warn-line);color:#6B4A12;font-size:.79rem;font-weight:600;padding:7px 16px;text-align:center}
.vl-armband i{font-size:15px;color:var(--warn)}
.vl-armband code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.92em;background:rgba(180,118,30,.12);border-radius:5px;padding:1px 6px}
.vl-desarme [data-book-off="inerte"]{opacity:.55;pointer-events:none}

/* ═══════════════════════════════════════════════════════════════════════════
   FIN DU BLOC PARTAGÉ — extrait du socle v6, non modifié
   ═══════════════════════════════════════════════════════════════════════════ */

/* v8.18 — surbrillance après un saut depuis la recherche.
   Le JS pose .vl-flash sur 18 pages mais le style n'existait que sur 6 :
   ailleurs le saut se faisait sans repère visuel.                      */
.vl-flash{animation:vlFlash 2s ease-out;border-radius:14px}
@keyframes vlFlash{
  0%{box-shadow:0 0 0 0 rgba(76,86,201,.45);background:rgba(76,86,201,.10)}
  100%{box-shadow:0 0 0 14px rgba(76,86,201,0);background:transparent}
}

/* ═══ PROPRE À L'ACCUEIL — repris de vitalabbooking_147, non modifié ═══════ */
.popnav{flex:0 0 auto;background:none;border:none;color:var(--indigo);font-size:1.05rem;line-height:1;cursor:pointer;padding:2px 2px;opacity:.7;transition:opacity .2s,transform .2s}
.popnav:hover{opacity:1;transform:scale(1.2)}
.popnav[data-dir="-1"]{margin:0 3px 0 18px}
.popnav[data-dir="1"]{margin:0 18px 0 3px}
/* ===== HERO ===== */
.hero{position:relative;text-align:center;padding:clamp(38px,6vh,74px) 0 30px;background:radial-gradient(120% 92% at 50% -12%,var(--indigo-pale) 0%,rgba(233,234,250,0) 60%),linear-gradient(180deg,#FAF9FC 0%,var(--bg) 100%)}
.hero .wrap{max-width:900px;margin:0 auto}
.hero .eyebrow{display:inline-block;margin-bottom:16px}
.hero h1{font-size:clamp(1.9rem,4.4vw,3.15rem);font-weight:600;line-height:1.06;letter-spacing:-.023em;margin:0 auto 22px;color:var(--ink);max-width:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased}
.hero h1 .ha{font-family:var(--accent);font-style:italic;font-weight:500;color:var(--indigo)}
.hero .lead{font-size:clamp(1rem,1.4vw,1.1rem);font-weight:400;color:var(--ink2);max-width:56ch;margin:0 auto 26px;line-height:1.75}
.lead .chk{vertical-align:-.2em;margin-right:.34em}
.hero .lead em{font-style:italic;font-family:var(--accent);color:var(--ink-soft)}
.hero-cta{display:flex;gap:12px;justify-content:center;flex-wrap:wrap;margin-bottom:0}
.hero-trust{display:flex;gap:22px;justify-content:center;flex-wrap:wrap;font-size:.82rem;color:var(--muted)}
.hero-trust span{display:inline-flex;align-items:center;gap:7px}
.hero-trust i{color:var(--indigo);font-size:16px;vertical-align:-2px}
.hero-trust b{color:var(--ink-soft);font-weight:600}
.hero-badge{display:inline-flex;align-items:center;gap:8px;background:#E6F2F1;border:1px solid #CFE6E1;border-radius:10px;padding:5px 15px;font-size:.8rem;font-weight:600;color:var(--ink-soft);margin-bottom:18px}
.hero-badge .dot{width:8px;height:8px;border-radius:50%;background:#1EA85C;box-shadow:0 0 0 3px rgba(30,168,92,.18);flex-shrink:0}
@media(max-width:520px){.hp-sep{display:none}.hp-row{gap:8px 16px}}

/* ───── 13 · DÉPÔT DE REQUÊTE ET PROFIL SUR MESURE ────────────────────
   Portés par /services, /prise-de-sang et leurs versions anglaises.
   Les règles vivent ici et non dans chaque page : c'est la leçon du
   reçu d'assurance, dont le balisage était sur 66 pages et les règles
   sur 62. */

/* ═══ LE DÉPÔT DE REQUÊTE — bandeau pleine largeur ══════════════════════════
   Réplique du composant de la page d'accueil (.fk.oui), déplié sur toute la
   largeur : la question « avez-vous une ordonnance ? » est déjà répondue ici,
   il ne reste que l'action. Vert, comme sur l'accueil, pour que le patient
   reconnaisse le même objet.                                              */
.ord{--ok:#2F7D5A;--ok-deep:#25644A;--ok-pale:#F4F9F6;--ok-line:#D6E7DE;
     position:relative;background:linear-gradient(180deg,#F6FAF8 0%,#fff 100%);
     border-bottom:1px solid var(--line-soft);padding:26px 24px 24px;
     display:grid;grid-template-columns:1fr minmax(290px,354px);
     gap:30px;align-items:stretch}
/* Les deux colonnes finissent à la même ligne : la note de prix descend au
   bas de la colonne de gauche, le bas du bouton « Réserver » lui répond. */
.ord-l{display:flex;flex-direction:column}
.ord-l .ord-note{margin-top:auto;padding-top:15px}
.ord-r{display:flex;flex-direction:column}
.ord-r .ord-act{margin-top:auto}
.ord::before{content:'';position:absolute;inset:0 0 auto 0;height:3px;background:var(--ok)}
.ord-yn{display:inline-flex;align-items:center;gap:7px;font-size:.63rem;font-weight:800;
        letter-spacing:.13em;text-transform:uppercase;color:var(--ok)}
.ord-yn i{font-size:15px}
.ord h2{font-family:var(--accent);font-weight:500;font-size:clamp(1.2rem,2.1vw,1.48rem);
        line-height:1.15;color:var(--ink);margin:10px 0 8px;letter-spacing:-.008em}
.ord-sub{font-size:.88rem;color:var(--ink2);line-height:1.58;margin:0;max-width:47ch}
.ord-steps{display:flex;flex-wrap:wrap;gap:15px;margin-top:16px}
.ord-steps .st{display:flex;align-items:center;gap:7px;font-size:.78rem;
               color:var(--ink2);white-space:nowrap}
.ord-steps .n{width:18px;height:18px;border-radius:50%;background:var(--ok-pale);
              color:var(--ok-deep);border:1px solid var(--ok-line);display:grid;
              place-items:center;font-size:10px;font-weight:800;flex:none;
              font-variant-numeric:tabular-nums}
.ord-note{font-size:.78rem;color:var(--muted);margin:0;line-height:1.55}
.ord-note b{color:var(--ink-soft);font-weight:700}
.ord-note a{color:var(--indigo-deep);font-weight:600;text-decoration:none;
            white-space:nowrap}   /* la flèche ne part jamais seule à la ligne */
.ord-act{display:grid;gap:9px;margin-top:11px}
.ord-plus{padding:8px 12px 12px}
/* hors catalogue (page « prise de sang »), le bandeau devient une carte. */
.ord.solo{border:1px solid var(--line-cool);border-bottom:1px solid var(--line-cool);
          border-radius:20px;overflow:hidden;
          box-shadow:0 1px 6px -3px rgba(35,47,88,.12);max-width:var(--colonne);margin:0 auto}
/* Bandeau teinté, mais .ord-plus n'est pas une carte à débordement masqué :
   il prend ses propres coins plutôt que de filer d'un bord à l'autre.
   Ce groupe ne pose pas d'accent — il retombe sur l'indigo du site. */
.ord-plus .subhead{margin:2px 0 9px;padding:11px 14px 10px;border-top:0;
  border-radius:11px;
  background:color-mix(in srgb,var(--acc,var(--indigo)) 11%,#fff);
  color:var(--acc,var(--indigo-deep));
  font-size:.72rem;font-weight:700;letter-spacing:.11em;text-transform:uppercase}

/* la zone de dépôt — composant partagé avec l'accueil */
.fk-drop{position:relative;display:block;border:2px dashed var(--ord-line,#D6E7DE);
         background:var(--ord-pale,#F4F9F6);border-radius:14px;padding:26px 16px;
         text-align:center;cursor:pointer;transition:.22s}
.ord .fk-drop:hover,.ord .fk-drop.over{border-color:#2F7D5A;background:#EDF5F1}
.fk-drop input{position:absolute;inset:0;opacity:0;cursor:pointer}
.fk-drop i{font-size:27px;color:#2F7D5A;display:block;line-height:1}
.fk-drop .t{display:block;font-weight:700;font-size:.9rem;margin-top:8px;color:var(--ink)}
.fk-drop .s{display:block;color:var(--muted);font-size:.78rem;margin-top:3px}
.fk-staged{display:none;align-items:center;gap:12px;border:1px solid #D6E7DE;
           background:#F4F9F6;border-radius:14px;padding:13px 14px}
.fk-staged.on{display:flex} .fk-drop.off{display:none}
.fk-staged .ic{width:34px;height:34px;border-radius:10px;background:#2F7D5A;color:#fff;
               display:grid;place-items:center;font-size:17px;flex:none}
.fk-staged>span:nth-child(2){display:block;min-width:0}
.fk-staged .nm{display:block;font-weight:700;font-size:.86rem;line-height:1.3;
               word-break:break-all;color:var(--ink)}
.fk-staged .mt{display:block;color:var(--muted);font-size:.74rem}
.fk-staged .x{margin-left:auto;background:none;border:none;color:var(--muted);
              cursor:pointer;font-size:17px;padding:4px;line-height:0;flex:none}
.fk-btn{width:100%;border:none;border-radius:11px;padding:13px 18px;font:inherit;
        font-size:.92rem;font-weight:700;cursor:pointer;text-decoration:none;
        display:inline-flex;align-items:center;justify-content:center;gap:9px;transition:.2s}
.fk-btn i{font-size:18px}
.fk-btn.ok{background:#E6F1EB;color:#1E5A43;border:1px solid #C6DDD1}
.fk-btn.ok:hover{background:#DBEAE2;border-color:#AFD0BF}
.fk-btn.ok-ligne{background:#fff;color:#1E5A43;border:1px solid var(--line-cool)}
.fk-btn.ok-ligne:hover{border-color:#C6DDD1;background:#F4F9F6}
.fk-btn.vedette{box-shadow:0 0 0 3px rgba(47,125,90,.24)}

@media(max-width:860px){
  .ord{grid-template-columns:1fr;gap:20px;padding:22px 18px 20px}
  .ord-sub{max-width:none}
}
/* En téléphone, les trois étapes passent en liste : une par ligne.
   Deux puis une, c'est le repli par défaut de flex-wrap — et c'est
   exactement l'effet d'escalier que l'œil relève. */
@media(max-width:440px){ .ord-steps{flex-direction:column;gap:8px}
                         .ord-steps .st{font-size:.79rem} }
@media(prefers-reduced-motion:reduce){ .fk-drop,.fk-btn{transition:none} }

/* ═══ SUR MESURE (SB 81) — le miroir du dépôt ═══════════════════════════════
   Même composant que .ord, retourné : à gauche la promesse, à droite l'objet
   d'entrée. Le patient qui a parcouru tout le catalogue sans se reconnaître
   arrive ici. Violet, comme la branche « je n'ai pas d'ordonnance » de
   l'accueil, pour que la parenté saute aux yeux.                          */
.sm{--vi:#7B2FAE;--vi-deep:#63248C;--vi-pale:#FAF6FD;--vi-line:#E9D8F5;
    position:relative;background:linear-gradient(180deg,#FBF8FE 0%,#fff 100%);
    border:1px solid var(--line-cool);border-radius:20px;overflow:hidden;
    box-shadow:0 1px 6px -3px rgba(35,47,88,.12);
    max-width:var(--colonne);margin:clamp(22px,3.4vw,34px) auto 0;
    padding:26px 24px 24px;
    display:grid;grid-template-columns:1fr minmax(290px,354px);
    gap:30px;align-items:stretch}
.sm::before{content:'';position:absolute;inset:0 0 auto 0;height:3px;background:var(--vi)}
.sm-l{display:flex;flex-direction:column}
.sm-r{display:flex;flex-direction:column}
.sm-yn{display:inline-flex;align-items:center;gap:7px;font-size:.63rem;font-weight:800;
       letter-spacing:.13em;text-transform:uppercase;color:var(--vi)}
.sm-yn i{font-size:15px}
.sm h2{font-family:var(--accent);font-weight:500;font-size:clamp(1.2rem,2.1vw,1.48rem);
       line-height:1.15;color:var(--ink);margin:10px 0 8px;letter-spacing:-.008em}
.sm-sub{font-size:.88rem;color:var(--ink2);line-height:1.58;margin:0;max-width:47ch}
.sm-steps{display:flex;flex-wrap:wrap;gap:15px;margin-top:16px}
.sm-steps .st{display:flex;align-items:center;gap:7px;font-size:.78rem;
              color:var(--ink2);white-space:nowrap}
.sm-steps .n{width:18px;height:18px;border-radius:50%;background:var(--vi-pale);
             color:var(--vi-deep);border:1px solid var(--vi-line);display:grid;
             place-items:center;font-size:10px;font-weight:800;flex:none;
             font-variant-numeric:tabular-nums}
.sm-cond{list-style:none;margin:auto 0 0;padding:16px 0 0;display:grid;gap:7px}
.sm-cond li{display:flex;align-items:flex-start;gap:9px;font-size:.8rem;
            line-height:1.5;color:var(--ink2);text-wrap:pretty}
.sm-cond li::before{content:'';width:5px;height:5px;border-radius:50%;
                    background:var(--vi);flex:none;margin-top:.52em}
.sm-cond b{color:var(--ink);font-weight:700}
.sm-garde{display:flex;align-items:flex-start;gap:8px;font-size:.76rem;line-height:1.5;
          color:var(--muted);margin:9px 0 0}
.sm-garde i{font-size:15px;color:var(--vi);flex:none;margin-top:1px}

/* le champ — réplique de « Situation médicale et/ou analyses » (champ 15) */
.sm-champ{border:1px solid var(--vi-line);background:var(--vi-pale);border-radius:14px;
          padding:14px;display:flex;flex-direction:column;flex:1}
.sm-champ .lab{display:flex;align-items:center;justify-content:space-between;gap:8px;
               font-size:.63rem;font-weight:800;letter-spacing:.11em;text-transform:uppercase;
               color:var(--vi);margin-bottom:9px}
.sm-champ .lab .c{color:var(--muted);letter-spacing:.04em;font-weight:700}
.sm-champ textarea{width:100%;min-height:104px;flex:1;resize:vertical;border:1px solid var(--vi-line);
                   border-radius:10px;background:#fff;padding:11px 12px;font:inherit;
                   font-size:.85rem;line-height:1.55;color:var(--ink);
                   transition:border-color .18s,box-shadow .18s}
.sm-champ textarea::placeholder{color:#A9A2B8}
.sm-champ textarea:focus{outline:none;border-color:var(--vi);
                         box-shadow:0 0 0 3px rgba(123,47,174,.13)}
.sm-champ .aide{display:flex;align-items:flex-start;gap:7px;font-size:.73rem;
                color:var(--vi-deep);margin-top:9px;line-height:1.45;font-weight:600}
.sm-champ .aide i{font-size:14px;flex:none;margin-top:1px}
.sm-act{display:grid;gap:9px;margin-top:auto;padding-top:11px}
.sm-btn{width:100%;border:none;border-radius:11px;padding:13px 18px;font:inherit;
        font-size:.92rem;font-weight:700;cursor:pointer;text-decoration:none;
        display:inline-flex;align-items:center;justify-content:center;gap:9px;transition:.2s}
.sm-btn i{font-size:18px}
/* Même règle que le bleu des modules : le ton clair au repos, le ton plein
   au survol. Le bouton cesse d'être un aplat violet dans une carte pâle. */
.sm-btn.vi{background:var(--vi-fill,#F1E8FA);color:var(--vi-ink,#5A1F80);
           border:1px solid var(--vi-edge,#DDC7F0)}
.sm-btn.vi:hover{background:var(--vi);border-color:var(--vi);color:#fff}
.sm-copie{font-size:.74rem;color:var(--vi-deep);text-align:center;margin:0;
          min-height:1.1em;font-weight:700;opacity:0;transition:opacity .2s}
.sm-copie.on{opacity:1}

@media(max-width:860px){
  .sm{grid-template-columns:1fr;gap:20px;padding:22px 18px 20px}
  .sm-sub{max-width:none}
  .sm-cond{margin-top:0}
  .sm-champ{flex:none}
  .sm-champ textarea{flex:none}
}
/* En téléphone, les trois étapes passent en liste : une par ligne.
   Deux puis une, c'est le repli par défaut de flex-wrap — et c'est
   exactement l'effet d'escalier que l'œil relève. */
@media(max-width:440px){ .sm-steps{flex-direction:column;gap:8px}
                         .sm-steps .st{font-size:.79rem} }
@media(prefers-reduced-motion:reduce){ .sm-btn,.sm-champ textarea{transition:none} }

.ord.hide,.ord-plus.hide{display:none}

/* ───── 14 · CARTE DU BILAN ET BLOC « SANS ORDONNANCE » ─────────────────
   .bs-card est repris de /bilan-de-sante ; il gagne ici la bande de 3 px
   qui signe la famille. .pf est le pendant violet des deux bandeaux :
   la porte au-dessus, la sortie de secours en dessous. */

.bs-card{display:grid;grid-template-columns:1.55fr .95fr;gap:0;background:#fff;
  border:1px solid var(--indigo-line);border-radius:20px;overflow:hidden;
  max-width:var(--colonne);margin:0 auto;position:relative;
  box-shadow:0 26px 56px -34px rgba(35,47,88,.30),0 2px 8px -4px rgba(35,47,88,.06)}
/* la bande, comme sur les deux bandeaux : elle signe la famille */
.bs-card::before{content:'';position:absolute;inset:0 0 auto 0;height:3px;
  background:var(--indigo);z-index:2}
.bs-l{padding:clamp(24px,3vw,32px)}
.bs-eyebrow{font-size:.64rem;font-weight:700;text-transform:uppercase;letter-spacing:.15em;
  color:var(--indigo-deep);margin-bottom:9px}
.bs-l h3{font-family:var(--accent);font-size:clamp(1.34rem,2.2vw,1.72rem);font-weight:500;
  line-height:1.14;letter-spacing:-.015em;margin-bottom:9px;color:var(--ink)}
.bs-lead{font-size:.9rem;color:var(--ink2);line-height:1.6;max-width:50ch;margin:0}
.bs-toks{display:grid;grid-auto-flow:column;grid-template-rows:repeat(5,auto);
  grid-template-columns:repeat(3,max-content);justify-content:start;
  column-gap:clamp(18px,2.4vw,34px);row-gap:7px;margin:15px 0 2px;
  font-size:.815rem;color:var(--ink-soft);line-height:1.5}
.bs-toks span{white-space:nowrap}
.bs-notes{display:flex;flex-wrap:wrap;gap:8px 18px;margin-top:15px;padding-top:14px;
  border-top:1px solid var(--line-soft)}
.bs-note{display:inline-flex;align-items:center;gap:7px;font-size:.82rem;color:var(--ink2)}
.bs-note i{color:var(--indigo);font-size:16px}
.bs-r{min-width:0;   /* la colonne de prix débordait de 3 px la carte en anglais :
                        une grille refuse de rétrécir un enfant sous son contenu
                        tant qu'on ne le lui autorise pas explicitement. */
      background:linear-gradient(165deg,#F7F7FD 0%,#EDEEFB 100%);
  border-left:1px solid var(--indigo-line);padding:clamp(24px,3vw,32px);
  display:flex;flex-direction:column;justify-content:center;text-align:center}
.bs-lab{font-size:.64rem;font-weight:700;text-transform:uppercase;letter-spacing:.15em;
  color:var(--muted);margin-bottom:6px}
.bs-prix{margin-bottom:9px;font-size:clamp(2.1rem,3.6vw,2.7rem);font-weight:700;color:var(--ink);
  letter-spacing:-.03em;line-height:1;font-variant-numeric:tabular-nums}
.bs-incl{font-size:clamp(.62rem,1.02vw,.82rem);font-weight:600;color:var(--indigo-deep);
  margin:0 auto 18px;line-height:1.4;text-align:center}
@media(max-width:840px){.bs-card{grid-template-columns:1fr}
                        .bs-r{border-left:0;border-top:1px solid var(--indigo-line)}}
@media(max-width:540px){.bs-toks{grid-template-columns:repeat(3,minmax(0,1fr));
  column-gap:12px;row-gap:7px;font-size:.745rem;line-height:1.35;align-items:start}
  .bs-toks span{white-space:normal;overflow-wrap:break-word}}
@media(max-width:380px){.bs-toks{column-gap:9px;row-gap:6px;font-size:.70rem;line-height:1.32}}

.pf{--vi:#7B2FAE;--vi-deep:#63248C;--vi-pale:#FAF6FD;--vi-line:#E9D8F5;
    position:relative;background:#fff;border:1px solid var(--line-cool);
    border-radius:20px;overflow:hidden;max-width:var(--colonne);margin:0 auto;
    box-shadow:0 1px 6px -3px rgba(35,47,88,.12)}
.pf::before{content:'';position:absolute;inset:0 0 auto 0;height:3px;background:var(--vi);z-index:2}
/* ── étage 1 · la porte ─────────────────────────────────────────────── */
.pf-h{background:linear-gradient(180deg,#FBF8FE 0%,#fff 100%);
      padding:24px 24px 22px;display:grid;grid-template-columns:1fr minmax(276px,332px);
      gap:28px;align-items:center;border-bottom:1px solid var(--line-soft)}
.pf-yn{display:inline-flex;align-items:center;gap:7px;font-size:.63rem;font-weight:800;
       letter-spacing:.13em;text-transform:uppercase;color:var(--vi)}
.pf-yn i{font-size:15px}
.pf h2{font-family:var(--accent);font-weight:500;font-size:clamp(1.2rem,2.1vw,1.44rem);
       line-height:1.15;color:var(--ink);margin:9px 0 7px;letter-spacing:-.008em}
.pf-sub{font-size:.87rem;color:var(--ink2);line-height:1.55;margin:0;max-width:52ch}
.pf-cond{list-style:none;margin:13px 0 0;padding:0;display:grid;gap:6px}
.pf-cond li{display:flex;align-items:flex-start;gap:9px;font-size:.79rem;line-height:1.48;color:var(--ink2)}
.pf-cond li::before{content:'';width:5px;height:5px;border-radius:50%;background:var(--vi);flex:none;margin-top:.52em}
.pf-cond b{color:var(--ink);font-weight:700}
.pf-act{display:grid;gap:9px}
.pf-btn{width:100%;border-radius:11px;padding:13px 18px;font:inherit;font-size:.91rem;
        font-weight:700;text-decoration:none;cursor:pointer;display:inline-flex;
        align-items:center;justify-content:center;gap:9px;transition:.2s;border:1px solid transparent}
.pf-btn i{font-size:18px}
.pf-btn.plein{background:#F1E8FA;color:#5A1F80;border-color:#DDC7F0}
.pf-btn.plein:hover{background:var(--vi);border-color:var(--vi);color:#fff}
.pf-btn.ligne{background:#fff;color:var(--vi-deep);border-color:var(--line-cool)}
.pf-btn.ligne:hover{border-color:var(--vi-line);background:var(--vi-pale)}
/* ── étage 2 · la sortie de secours ─────────────────────────────────── */
.pf-b{padding:20px 24px 22px;display:grid;grid-template-columns:1fr minmax(276px,332px);
      gap:28px;align-items:start}
.pf-q{display:inline-flex;align-items:center;gap:7px;font-size:.63rem;font-weight:800;
      letter-spacing:.13em;text-transform:uppercase;color:var(--vi)}
.pf-q i{font-size:15px}
.pf-b h3{font-family:var(--accent);font-weight:500;font-size:1.12rem;color:var(--ink);
         margin:8px 0 6px;line-height:1.2}
.pf-b .d{font-size:.83rem;color:var(--ink2);line-height:1.52;margin:0;max-width:52ch}
.pf-mini{list-style:none;margin:11px 0 0;padding:0;display:grid;gap:6px}
.pf-mini li{display:flex;align-items:flex-start;gap:9px;font-size:.79rem;
            line-height:1.48;color:var(--ink2)}
.pf-mini li::before{content:'';width:5px;height:5px;border-radius:50%;background:var(--vi);
                    flex:none;margin-top:.52em}
.pf-mini b{color:var(--ink);font-weight:700}
.pf-champ{display:flex;flex-direction:column;gap:9px}
.pf-champ textarea{width:100%;min-height:78px;resize:vertical;border:1px solid var(--vi-line);
  border-radius:11px;background:var(--vi-pale);padding:11px 12px;font:inherit;font-size:.84rem;
  line-height:1.52;color:var(--ink);transition:border-color .18s,box-shadow .18s,background .18s}
.pf-champ textarea::placeholder{color:#A9A2B8}
.pf-champ textarea:focus{outline:none;background:#fff;border-color:var(--vi);
  box-shadow:0 0 0 3px rgba(123,47,174,.13)}
.pf-aide{display:flex;align-items:flex-start;gap:7px;font-size:.73rem;color:var(--vi-deep);
         line-height:1.42;font-weight:600;margin:-2px 0 0}
.pf-aide i{font-size:14px;flex:none;margin-top:1px}
.pf-garde{display:flex;align-items:flex-start;gap:8px;font-size:.75rem;line-height:1.45;
          color:var(--muted);margin:12px 0 0}
.pf-garde i{font-size:14px;color:var(--vi);flex:none;margin-top:1px}
.pf-copie{font-size:.74rem;color:var(--vi-deep);text-align:center;margin:0;
          min-height:1.1em;font-weight:700;opacity:0;transition:opacity .2s}
.pf-copie.on{opacity:1}
.bs-card.hide,.pf.hide{display:none}
@media(max-width:880px){
  .pf-h,.pf-b{grid-template-columns:1fr;gap:18px;padding-left:18px;padding-right:18px}
  .pf-sub,.pf-b .d{max-width:none}
}

/* ───── 15 · GRAMMAIRE DU CATALOGUE ─────────────────────────────────────────
   Les familles ne sont plus des listes : deux ou trois services distincts
   deviennent des cartes côte à côte, une gamme graduée montre trois ancres
   puis l'échelle, et les modules vivent dans un bloc teinté qui dit
   visuellement « ceci s'ajoute à autre chose ». */
:is(.fam,.catgroup) .cathead{display:flex;align-items:flex-end;justify-content:space-between;
  gap:20px;flex-wrap:wrap;margin-bottom:20px}
:is(.fam,.catgroup) .cathead .l{display:flex;align-items:center;gap:14px}
:is(.fam,.catgroup) .cathead .cg-ic{width:48px;height:48px;border-radius:13px;
  background:var(--cbg,var(--indigo-pale));color:var(--cl,var(--indigo));
  display:grid;place-items:center;font-size:24px;flex:none}
:is(.fam,.catgroup) .cathead .cat-eyebrow{font-size:.7rem;font-weight:700;letter-spacing:.16em;
  text-transform:uppercase;color:var(--cl,var(--indigo-deep))}
:is(.fam,.catgroup) .cathead h2{font-family:var(--accent);font-weight:500;
  font-size:clamp(1.3rem,2.2vw,1.62rem);margin-top:2px;letter-spacing:-.02em;
  line-height:1.15;color:var(--ink)}
.vlb-card.vedette{border-color:var(--indigo-line);
  box-shadow:0 22px 44px -28px rgba(35,47,88,.34)}
.vlb-card.vedette .chip{box-shadow:0 0 0 4px var(--indigo-pale)}
.vlb-card .drapeau{position:absolute;top:14px;right:14px;font-size:.6rem;font-weight:800;
  letter-spacing:.12em;text-transform:uppercase;color:var(--indigo-deep);
  background:var(--indigo-pale);border:1px solid var(--indigo-line);
  border-radius:8px;padding:5px 9px;transition:background .2s}
.vlb-card:hover .drapeau{background:#DDE0F7}
.echelle{margin-top:18px;background:#fff;border:1px solid var(--line-cool);
  border-radius:16px;overflow:hidden}
/* ── Les intertitres des listes : un bandeau dans la couleur du groupe ─────
   [16 août] Repris de .mods-head, l'ancien gabarit de la page ITSS. La
   teinte se calcule depuis --acc, que chaque famille et chaque catégorie
   pose déjà : le bandeau suit son groupe sans qu'on l'écrive ici, et une
   nouvelle catégorie héritera de la sienne toute seule. */
.echelle .subhead,.modules .subhead{margin:0;padding:13px 22px 12px;border-top:0;
  background:color-mix(in srgb,var(--acc,var(--indigo)) 11%,#fff);
  color:var(--acc,var(--indigo-deep));
  font-size:.72rem;font-weight:700;letter-spacing:.11em;text-transform:uppercase}
.echelle .choix-note{margin:6px 14px 14px}
/* La carte des modules suit son groupe, comme son bandeau : même source
   --acc, trois paliers de la même teinte — 6 % le fond, 22 % le contour,
   11 % le bandeau. Sans accent, on retombe sur l'indigo du site. */
.modules{margin-top:14px;
  background:color-mix(in srgb,var(--acc,var(--indigo)) 6%,#fff);
  border:1px solid color-mix(in srgb,var(--acc,var(--indigo)) 22%,#fff);
  border-radius:16px;overflow:hidden}
/* (la règle ci-dessus couvre désormais .modules ; on ne garde ici que le
   rappel que ce bloc est teinté indigo par défaut) */
/* .fam en tête : les rangées de famille portent déjà display:flex en ligne
   dans la page, à spécificité égale mais déclarées plus tard. Sans ce
   préfixe, la grille ne prend pas et le nom passe à côté de sa description. */
:is(.fam,.catgroup) .echelle .mrow,:is(.fam,.catgroup) .modules .mrow{display:grid;grid-template-columns:36px 1fr auto;
  grid-template-areas:'puce nom prix' 'puce compo prix';column-gap:11px;row-gap:2px;
  padding:12px 14px;text-decoration:none;color:inherit;background:transparent;
  transition:background .18s}
:is(.fam,.catgroup) .echelle .mrow+.mrow,:is(.fam,.catgroup) .modules .mrow+.mrow{box-shadow:inset 0 1px 0 var(--line-soft)}
:is(.fam,.catgroup) .echelle .mrow:hover{background:color-mix(in srgb,var(--acc) 5%,#fff)}
:is(.fam,.catgroup) .modules .mrow:hover{background:rgba(255,255,255,.65)}
:is(.fam,.catgroup) .echelle .mrow .mchip,:is(.fam,.catgroup) .modules .mrow .mchip{grid-area:puce;align-self:center}
:is(.fam,.catgroup) .echelle .mrow .mmain,:is(.fam,.catgroup) .modules .mrow .mmain{display:contents}
:is(.fam,.catgroup) .echelle .mrow .mname,:is(.fam,.catgroup) .modules .mrow .mname{grid-area:nom;align-self:end;
  font-family:var(--accent);font-size:.96rem;color:var(--ink);line-height:1.18}
:is(.fam,.catgroup) .echelle .mrow .mdesc,:is(.fam,.catgroup) .modules .mrow .mdesc{grid-area:compo;align-self:start;
  font-size:.74rem;color:var(--muted);line-height:1.45}
:is(.fam,.catgroup) .echelle .mrow .mprices,:is(.fam,.catgroup) .modules .mrow .mprices{grid-area:prix;align-self:center;justify-self:end}
:is(.fam,.catgroup) .echelle .mrow .v,:is(.fam,.catgroup) .modules .mrow .v{font-size:1rem;font-weight:700;color:var(--ink);
  white-space:nowrap;font-variant-numeric:tabular-nums}
@media(max-width:430px){
  :is(.fam,.catgroup) .echelle .mrow,:is(.fam,.catgroup) .modules .mrow{padding:11px 12px}
  :is(.fam,.catgroup) .cathead .cg-ic{width:40px;height:40px;font-size:20px}
}

:is(.fam,.catgroup) .cathead .cnt{margin-left:auto;align-self:center;font-size:.78rem;font-weight:700;
  color:var(--muted);background:#fff;border:1px solid var(--line-cool);
  border-radius:999px;min-width:28px;height:28px;padding:0 9px;display:grid;
  place-items:center;font-variant-numeric:tabular-nums;flex:none}

/* La flèche ::after des rangées de liste n'a pas de zone dans cette grille :
   sans cela elle devient une cellule auto-placée et tombe sous la pastille. */
:is(.fam,.catgroup) .echelle .mrow::after,:is(.fam,.catgroup) .modules .mrow::after{display:none}

/* Respiration. Une famille est devenue un bloc de cartes, plus une liste :
   16 px entre deux blocs ne suffisait plus. Et une seconde tête à l'intérieur
   d'une famille — les hépatites sous le dépistage ITSS — ouvre une
   sous-section : elle mérite un filet, pas d'être collée aux modules. */
.fam + .fam{margin-top:clamp(30px,4.2vw,52px)}
:is(.fam,.catgroup) .cathead:not(:first-child){margin-top:clamp(28px,3.6vw,42px);
  padding-top:clamp(22px,2.8vw,30px);border-top:1px dashed var(--line-cool)}

/* Une famille qui contient des cartes ne doit pas être une carte elle-même :
   le fond blanc, la bordure et l'ombre du conteneur créaient une carte
   derrière les cartes. Les familles restées en liste les gardent. */
.fam{background:transparent;border:0;box-shadow:none;
     border-radius:0;overflow:visible}

/* ───── 16 · CARTES DE SERVICE (.vlb-*) ─────────────────────────────────────
   Reprises de l'accueil, où elles vivaient en ligne. Le catalogue s'en sert
   désormais : elles appartiennent au socle. Extraites par le moteur du
   navigateur lui-même — un analyseur écrit à la main avait aplati les
   requêtes média et produit « @media … and @media … », du CSS invalide. */
.vlb-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 18px; }
@media (max-width: 1000px){
  .vlb-grid { grid-template-columns: repeat(2, 1fr); }
  .vlb-grid .vlb-card:nth-child(3) { grid-column: 1 / -1; }
}
@media (max-width: 640px){
  .vlb-grid { grid-template-columns: 1fr; }
  .vlb-grid .vlb-card:nth-child(3) { grid-column: auto; }
}
.vlb-grid.svc-2 { grid-template-columns: repeat(2, 1fr); }
/* Deux grilles qui se suivent — Urine et cultures en empile deux — se
   touchaient : l'écart de 18px vit à l'intérieur d'une grille, pas entre
   deux. Santé féminine s'en tirait avec un margin-top:26px écrit à la
   main dans le balisage ; ici la règle le fait pour tout le monde. */
.vlb-grid + .vlb-grid{margin-top:18px}
@media (max-width: 640px){
  .vlb-grid.svc-2 { grid-template-columns: 1fr; }
}
.vlb-card { background: rgb(255, 255, 255); border: 1px solid var(--line-cool); border-radius: 16px; padding: 24px; display: flex; flex-direction: column; transition: 0.4s cubic-bezier(0.16, 1, 0.3, 1); }
.vlb-card:hover { transform: translateY(-4px); border-color: var(--indigo-line); box-shadow: var(--shadow); }
.vlb-card .chip { width: 44px; height: 44px; border-radius: 12px; background: var(--indigo-pale); color: var(--indigo); display: flex; align-items: center; justify-content: center; font-size: 22px; margin-bottom: 16px; }
.vlb-card h3 { font-family: var(--accent); font-size: 1.42rem; font-weight: 500; margin: 0px; color: var(--ink); line-height: 1.1; }
.vlb-card .cardtag { font-family: var(--accent); font-style: italic; font-size: 0.86rem; color: var(--indigo); margin-top: 2px; line-height: 1.15; }
.vlb-card .cdesc { color: var(--ink2); font-size: 0.86rem; line-height: 1.55; margin: 9px 0px 15px; flex: 1 1 auto; }
.vlb-card .cmeta { font-size: 0.79rem; color: var(--indigo); display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.vlb-card .cmeta i { font-size: 15px; vertical-align: -2px; }
.vlb-card .cmeta .d { opacity: 0.55; }
.vlb-card .hr { height: 1px; background: var(--indigo-line); margin: 16px 0px; }
.vlb-card .pp { display: flex; }
.vlb-card .pt { flex: 1 1 0%; padding-right: 16px; }
.vlb-card .pt + .pt { border-left: 1px solid var(--indigo-line); padding-left: 16px; padding-right: 0px; }
.vlb-card .pl { font-size: 0.66rem; letter-spacing: 0.06em; text-transform: uppercase; color: var(--muted); font-weight: 600; line-height: 1.3; }
.vlb-card .psub { font-size: 0.69rem; color: var(--muted); margin-top: 3px; }
.vlb-card .pv { font-size: 1.44rem; font-weight: 600; color: var(--ink); margin-top: 7px; font-variant-numeric: tabular-nums; }
.vlb-card .pv-txt { font-size: 1rem; font-weight: 600; line-height: 1.25; letter-spacing: -0.01em; }
.vlb-card .pv small { font-size: 0.72rem; font-weight: 600; color: var(--muted); }
.vlb-card .btn-book { margin-top: 20px; height: 46px; flex: 0 0 auto; border: 1.5px solid var(--indigo); color: var(--indigo-deep); border-radius: 12px; font-weight: 600; font-size: 0.88rem; text-decoration: none; background: transparent; display: flex; align-items: center; justify-content: center; gap: 8px; transition: background 0.15s, color 0.15s; }
.vlb-card .btn-book .arr { transition: transform 0.2s; }
.vlb-card .btn-book:hover { background: var(--indigo); color: rgb(255, 255, 255); }
.vlb-card .btn-book:hover .arr { transform: translateX(3px); }
.vlb-card .det { text-align: center; margin-top: 11px; color: var(--indigo-deep); font-size: 0.88rem; font-weight: 600; text-decoration: none; }
.vlb-card .det .arr { display: inline-block; transition: transform 0.3s; }
.vlb-card .det:hover { color: var(--indigo); }
.vlb-card .det:hover .arr { transform: translateX(3px); }
.vla-card { background: rgb(255, 255, 255); border: 1px solid var(--line-cool); border-radius: 15px; padding: 20px 22px; transition: 0.4s cubic-bezier(0.16, 1, 0.3, 1); }
.vla-card:hover { transform: translateY(-3px); border-color: var(--indigo-line); box-shadow: var(--shadow); }
.vla-card .top { display: flex; justify-content: space-between; align-items: flex-start; gap: 20px; flex-wrap: wrap; }
.vla-card .lead { display: flex; gap: 13px; align-items: flex-start; }
.vla-card .chip { width: 42px; height: 42px; border-radius: 12px; background: var(--accbg); color: var(--acc); display: flex; align-items: center; justify-content: center; font-size: 21px; flex-shrink: 0; }
.vla-card .cat { font-size: 0.66rem; letter-spacing: 0.13em; text-transform: uppercase; color: var(--acc); font-weight: 600; }
.vla-card .svc { font-family: var(--accent); font-size: 1.36rem; font-weight: 500; margin: 2px 0px 0px; color: var(--ink); line-height: 1.15; }
.vla-card .prices { display: flex; flex-shrink: 0; }
.vla-card .tier { padding: 0px 16px; }
.vla-card .tier + .tier { border-left: 1px solid var(--indigo-line); }
.vla-card .tier:first-child { padding-left: 0px; }
.vla-card .te { font-size: 0.62rem; letter-spacing: 0.07em; text-transform: uppercase; color: var(--muted); font-weight: 600; }
.vla-card .ts { font-size: 0.69rem; color: var(--muted); margin-top: 2px; }
.vla-card .tp { font-size: 1.25rem; font-weight: 600; color: var(--ink); margin-top: 5px; font-variant-numeric: tabular-nums; }
.vla-card .tp small { font-size: 0.72rem; color: var(--muted); font-weight: 600; }
.vla-card .desc { color: var(--ink2); font-size: 0.86rem; line-height: 1.55; margin: 13px 0px 0px; max-width: 60ch; }
.vla-card .incl { margin-top: 13px; display: flex; flex-wrap: wrap; gap: 6px; }
.vla-card .incl span { font-size: 0.72rem; color: var(--ink-soft); background: var(--bg); border: 1px solid var(--line-cool); border-radius: 9px; padding: 4px 10px; }
.vla-card .foot { display: flex; justify-content: space-between; align-items: center; gap: 16px; margin-top: 14px; flex-wrap: wrap; }
.vla-card .meta { font-size: 0.79rem; color: var(--indigo); display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.vla-card .meta i { font-size: 15px; vertical-align: -2px; }
.vla-card .meta .d { opacity: 0.5; }
.vla-card .cta { display: flex; align-items: center; gap: 18px; }
.vla-card .book { color: var(--acc); font-weight: 600; font-size: 0.88rem; text-decoration: none; display: inline-flex; align-items: center; gap: 6px; }
.vla-card .book .arr { transition: transform 0.3s; }
.vla-card .book:hover .arr { transform: translateX(3px); }
.vla-card .det { color: var(--muted); font-size: 0.86rem; text-decoration: none; }
.vla-card .det:hover { color: var(--ink2); }
@media (max-width: 680px){
  .vla-card .top { flex-direction: column; }
  .vla-card .prices { width: 100%; }
}
@media (max-width: 760px){
  .vlb-card .det, .vla-card .det, .vlb-card .book, .vla-card .book { display: inline-flex; align-items: center; min-height: 40px; }
}
@media (max-width: 380px){
  .vlb-card, .vla-card { padding-left: 18px; padding-right: 18px; }
}
.btn, .svc, .ins-chip, .cc-icon, .search-go, .tcard, .vla-card, .vlb-card, .pp-link { position: relative; }
.btn:hover::after, .svc:hover::after, .ins-chip:hover::after, .cc-icon:hover::after, .search-go:hover::after, .tcard:hover::after, .vla-card:hover::after, .vlb-card:hover::after, .pp-link:hover::after { content: ""; position: absolute; left: 0px; right: 0px; top: 100%; pointer-events: auto; }
.svc:hover::after, .tcard:hover::after, .vla-card:hover::after, .vlb-card:hover::after { height: 8px; }
@media (hover: none){
  .btn:hover::after, .svc:hover::after, .ins-chip:hover::after, .cc-icon:hover::after, .search-go:hover::after, .tcard:hover::after, .vla-card:hover::after, .vlb-card:hover::after, .pp-link:hover::after { content: none; }
}
.vlb-grid.vlb-tiers { margin-bottom: 14px; }

/* ───── 17 · BANDEAU DE SERVICE (.vlb-bandeau) ──────────────────────────────
   Variante pleine largeur de la carte, utilisée par Santé féminine pour la
   β-hCG et le VPH auto-prélèvement. Oubliée au portage : le balisage était
   là, les règles non, et la famille s'affichait en texte brut. */
.vlb-bandeau .btn-book { border: 1.5px solid var(--indigo); color: var(--indigo-deep); background: transparent; }
.vlb-bandeau .btn-book:hover { background: var(--indigo); border-color: var(--indigo); color: rgb(255, 255, 255); }
.vlb-card .drapeau, .vlb-bandeau .drapeau { background: var(--indigo-pale); border: 1px solid var(--indigo-line); color: var(--indigo-deep); transition: background 0.2s; }
.vlb-card:hover .drapeau, .vlb-bandeau:hover .drapeau { background: #DDE0F7; }
.vlb-bandeau { position: relative; display: grid; grid-template-columns: auto minmax(0px, 1fr) 300px 150px; gap: clamp(16px, 2.4vw, 30px); align-items: center; background: rgb(255, 255, 255); border: 1px solid var(--line-cool); border-radius: 16px; padding: 20px clamp(20px, 2.4vw, 26px); transition: 0.4s cubic-bezier(0.16, 1, 0.3, 1); }
.vlb-bandeau:hover { transform: translateY(-3px); border-color: color-mix(in srgb,var(--acc) 34%,#fff); box-shadow: var(--shadow); }
.vlb-bandeau .chip { width: 48px; height: 48px; border-radius: 13px; background: var(--accbg); color: var(--acc); display: grid; place-items: center; font-size: 23px; flex: 0 0 auto; }
.vlb-bandeau h3 { font-family: var(--accent); font-size: 1.3rem; font-weight: 500; margin: 0px; color: var(--ink); line-height: 1.14; }
.vlb-bandeau .cardtag { font-family: var(--accent); font-style: italic; font-size: 0.85rem; color: var(--acc); margin-top: 1px; line-height: 1.15; }
.vlb-bandeau .cdesc { color: var(--ink2); font-size: 0.87rem; line-height: 1.5; margin: 7px 0px 0px; max-width: 62ch; }
.vlb-bandeau .cmeta { font-size: 0.77rem; color: var(--indigo); display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-top: 9px; }
.vlb-bandeau .cmeta i { font-size: 15px; vertical-align: -2px; }
.vlb-bandeau .cmeta .d { opacity: 0.55; }
.vlb-bandeau .pp { display: grid; grid-template-columns: 1fr 1fr; flex: 0 0 auto; }
.vlb-bandeau .pt.vide { border-left: 0px; }
.vlb-bandeau .pt { padding: 0px 18px; border-left: 1px solid var(--line-cool); }
.vlb-bandeau .pl { font-size: 0.64rem; letter-spacing: 0.06em; text-transform: uppercase; color: var(--muted); font-weight: 600; line-height: 1.3; white-space: nowrap; }
.vlb-bandeau .psub { font-size: 0.68rem; color: var(--muted); margin-top: 2px; white-space: nowrap; }
.vlb-bandeau .pv { font-size: 1.44rem; font-weight: 600; color: var(--ink); margin-top: 5px; font-variant-numeric: tabular-nums; }
.vlb-bandeau .btn-book { flex: 0 0 auto; width: 150px; height: 46px; border-radius: 12px; font-weight: 600; font-size: 0.88rem; text-decoration: none; display: flex; align-items: center; justify-content: center; gap: 8px; transition: background 0.15s, color 0.15s, border-color 0.15s; }
.vlb-bandeau .drapeau { position: absolute; top: -9px; left: 22px; font-size: 0.58rem; font-weight: 800; letter-spacing: 0.12em; text-transform: uppercase; color: var(--indigo-deep); background: var(--accbg); border: 1px solid color-mix(in srgb,var(--acc) 34%,#fff); border-radius: 7px; padding: 3px 9px; }
@media (max-width: 1060px){
  .vlb-bandeau { grid-template-columns: minmax(0px, 1fr); row-gap: 15px; }
  .vlb-bandeau > * { grid-column: 1; }
  .vlb-bandeau .pp { width: auto; }
  .vlb-bandeau .pt { padding: 0px 18px 0px 0px; border-left: 0px; }
  .vlb-bandeau .pt + .pt { padding-left: 18px; border-left: 1px solid var(--line-cool); }
  .vlb-bandeau .btn-book { width: 100%; }
  .vlb-bandeau .cdesc { max-width: none; }
}
@media (max-width: 430px){
  .vlb-bandeau .pp, .vlb-card .pp { display: grid; grid-template-columns: 1fr; row-gap: 11px; }
  .vlb-bandeau .pt, .vlb-card .pt { padding: 0px; border-left: 0px; }
  .vlb-bandeau .pt + .pt, .vlb-card .pt + .pt { padding: 11px 0px 0px; border-left: 0px; border-top: 1px solid var(--line-cool); }
  .vlb-bandeau .pt.vide, .vlb-card .pt.vide { display: none; }
}
.vlb-bandeau .chip { align-self: start; margin-top: 2px; }
.vlb-bandeau .drapeau { top: -10px; }



/* ── Séries d'étapes « 1 · 2 · 3 » ─────────────────────────────────────────
   [AJOUTÉ le 15 août 2026] La règle @media(max-width:440px) plus haut ne
   regarde que la FENÊTRE. Or la carte de l'accueil descend à 325 px de large
   sur une tablette de 834 px, alors que la rangée d'étapes en demande 332 :
   elle débordait de 7 px sans que la fenêtre soit « en mode téléphone ».
   On interroge donc la CARTE et non l'écran. Le @media est conservé : il
   sert de repli aux navigateurs sans requêtes de conteneur.
   ------------------------------------------------------------------------ */
.fk,.ord-l{container-type:inline-size}
@container (max-width:392px){
  .fk-steps,.ord-steps{flex-direction:column;gap:8px}
  .fk-steps .st,.ord-steps .st{font-size:.79rem}
}
/* Ceinture et bretelles : sans requête de conteneur, on passe à la ligne
   plutôt que de déborder. .ord-steps l'avait déjà, .fk-steps non. */
.fk-steps{flex-wrap:wrap}

/* Seconde rangée de méta : « suivi des résultats » sous « ordonnance incluse ».
   [15 août 2026] Mesuré avant de choisir : ajoutée DANS la rangée existante,
   elle la faisait passer de 20 à 48 px avec un retour à la ligne irrégulier
   d'une carte à l'autre. Sur sa propre ligne : 20 px partout, aucun
   débordement, +23 px de hauteur de carte, identique à toutes les largeurs. */
.cmeta + .cmeta.cmeta-suivi{margin-top:3px}

/* ── Rangées de méta : deux mises en page selon la forme de la carte ───────
   [15 août 2026]
   · Carte-BANDEAU (large, horizontale) : « suivi des résultats » revient sur
     la MÊME ligne, juste après « ordonnance incluse ». Deux blocs en
     inline-flex se suivent naturellement et passent à la ligne si besoin.
   · Carte VERTICALE : une mention par ligne, trois lignes. Le séparateur
     « · » sert de rupture — un élément flex à base 100 % force le retour.
     Il fallait aussi mettre row-gap à 0 : les marges négatives n'annulent
     PAS l'écart entre lignes d'un conteneur flex, seul row-gap le fait.
     La hauteur de 4 px du séparateur devient l'écart voulu.
     Le :has() limite l'effet aux cartes portant la rangée « suivi » — les
     autres, dont la méta dit tout autre chose, ne bougent pas. */
.vlb-bandeau .cmeta{display:inline-flex;vertical-align:baseline}
.vlb-bandeau .cmeta.cmeta-suivi{margin-top:0;margin-left:12px}
.vlb-card .cmeta:has(+ .cmeta-suivi){row-gap:0}
.vlb-card .cmeta:has(+ .cmeta-suivi) .d{flex-basis:100%;height:4px;overflow:hidden;opacity:0;margin:0}

/* Mention de requête en capitales. [15 août 2026 — REMONTÉ DANS LE SOCLE]
   Cette règle ne vivait qu'en ligne, page par page. services.html et
   en/services.html utilisent la classe sans jamais la définir : leurs 90
   mentions sortaient en minuscules maigres, seules du site. */
.cmeta-maj{text-transform:uppercase;font-size:.71rem;font-weight:700;letter-spacing:.055em}

/* Filet des cartes en colonnes (.vlb-tiers) : garantir un écart minimal.
   [15 août 2026] Ces pages posent « .vlb-tiers .vlb-card .hr{margin-top:auto} »
   pour aligner les prix au bas de la rangée. Sur la carte la PLUS HAUTE il ne
   reste aucun espace libre, donc auto vaut 0 et le filet vient se coller sous
   la dernière mention — on dirait un soulignement. Mesuré sur
   /helicobacter-pylori : 0 px, contre 16 px partout ailleurs ; et sur
   /depistage-itss les trois cartes d'une même rangée donnaient 0, 21 et 43 px.
   La rangée « suivi » a rendu le défaut visible en rendant les cartes plus
   hautes ; elle ne l'a pas créé.
   La marge se pose donc sur la mention, pas sur le filet : auto absorbe
   simplement 16 px de moins, l'alignement des prix est préservé. */
.vlb-tiers .vlb-card .cmeta:has(+ .hr){margin-bottom:16px}

/* ── Rangées de liste — un seul gabarit ────────────────────────────────────
   [15 août 2026] Voir vl_lot6.py pour les mesures. En deux mots : la cellule
   du prix enjambait les deux lignes et se centrait dessus, donc le prix
   tombait entre le nom et la description (11 px d'écart avec le nom). Et sur
   téléphone la colonne du prix rognait la description, qui passait sur deux
   lignes une fois sur deux : 61 / 78 / 61 / 78 px de hauteur dans une liste
   de six paliers identiques.
   Le prix reste sur la ligne du nom, la description prend toute la largeur.
   .ord-plus, restée en flex, rejoint le même gabarit. */
:is(.fam,.catgroup) .echelle .mrow,
:is(.fam,.catgroup) .modules .mrow,
.pile1 .ord-plus .mrow{
  display:grid;grid-template-columns:36px 1fr auto;
  grid-template-areas:'puce nom prix' 'puce compo compo';
  column-gap:11px;row-gap:2px;padding:12px 14px;
  text-decoration:none;color:inherit;background:transparent;transition:background .18s}
:is(.fam,.catgroup) .echelle .mrow .mprices,
:is(.fam,.catgroup) .modules .mrow .mprices,
.pile1 .ord-plus .mrow .mprices{grid-area:prix;align-self:end;justify-self:end;margin:0}
/* Le montant héritait de l'interlignage du corps de texte : sa boîte faisait
   26,6 px pour un nom de 18,1 px. Aligné par le bas il remontait de 4 px,
   centré il redescendait d'autant — dans les deux cas il ratait la ligne du
   nom. Ramené à 1,18 comme le nom, sa boîte fait 19,9 px : les deux bas
   coïncident au pixel, les centres à 0,9 px près. */
:is(.fam,.catgroup) .echelle .mrow .mp .v,
:is(.fam,.catgroup) .modules .mrow .mp .v,
.pile1 .ord-plus .mrow .mp .v{line-height:1.18}

/* .ord-plus n'avait aucune des règles de la grille : on les lui donne,
   à l'identique de .echelle et .modules. */
.pile1 .ord-plus .mrow + .mrow{box-shadow:inset 0 1px 0 var(--line-soft)}
.pile1 .ord-plus .mrow:hover{background:color-mix(in srgb,var(--acc) 5%,#fff)}
.pile1 .ord-plus .mrow .mchip{grid-area:puce;align-self:center}
.pile1 .ord-plus .mrow .mmain{display:contents}
.pile1 .ord-plus .mrow .mname{grid-area:nom;align-self:end;
  font-family:var(--accent);font-size:.96rem;color:var(--ink);line-height:1.18}
.pile1 .ord-plus .mrow .mdesc{grid-area:compo;align-self:start;
  font-size:.74rem;color:var(--muted);line-height:1.45}
.pile1 .ord-plus .mrow .mp .v{font-size:1rem;font-weight:700;color:var(--ink);
  white-space:nowrap;font-variant-numeric:tabular-nums}
/* la flèche ::after n'a pas de zone dans cette grille : sans cela elle
   devient une cellule auto-placée et tombe sous la pastille. */
.pile1 .ord-plus .mrow::after{display:none}
@media(max-width:430px){
  .pile1 .ord-plus .mrow{padding:11px 12px}
}

/* ── Colonne standard des pages de service ────────────────────────────────
   [15 août 2026] Le socle plafonne déjà chaque enfant de
   « section.sec > .wrap » à 960 px — la largeur de /depistage-itss, de
   /sante-feminine, de /bilan-de-sante et de la carte d'assurance partout.
   Six pages levaient ce plafond pour leurs grilles : mesuré à 1600 px de
   fenêtre, 1472 px de large sur /consultation-medicale et
   /electrocardiogramme contre 960 ailleurs.
   Spécificité : les règles à annuler valent 0,4,0
   (« .sec > .wrap > .vlb-grid.pleine » — trois classes plus une). Un premier
   essai en 0,3,1 n'a rien changé, mesuré : 1472 px avant comme après. On
   reprend donc les MÊMES sélecteurs, préfixés de « section », ce qui donne
   0,4,1 et passe devant d'un cheveu. */
section.sec > .wrap > .vlb-grid.pleine,
section.sec > .wrap > .tiers-head.pleine,
section.sec > .wrap > .vlb-grid.vlb-tiers,
section.sec > .wrap > .tiers-head:first-of-type{
  max-width:960px;margin-left:auto;margin-right:auto}
/* Le panneau « Le motif de votre consultation » lève le plafond par un
   identifiant (« #consult-wrap{max-width:none} », 1,0,0). On le reprend
   préfixé, 1,2,1, sans quoi la règle ci-dessus ne l'atteint pas. */
section.sec > .wrap > #consult-wrap{max-width:960px;margin-left:auto;margin-right:auto}

/* ── Filet de liaison nom → prix ──────────────────────────────────────────
   [15 août 2026] Le montant était petit et collé au bord ; rien ne reliait
   l'œil du nom au prix sur des rangées de plus de 1 000 px de large.
   · corps du montant 1 rem → 1,08 rem ;
   · 20 px du bord droit au lieu de 14 ;
   · un filet à 16 % de la couleur du texte, à mi-hauteur de la ligne du nom,
     qui occupe l'espace libre entre le nom et la colonne du prix.
   currentColor plutôt qu'une teinte fixe : le même filet marche sur le fond
   blanc de l'échelle et sur l'indigo pâle des modules. */
:is(.fam,.catgroup) .echelle .mrow,
:is(.fam,.catgroup) .modules .mrow,
.pile1 .ord-plus .mrow{padding-right:20px}

:is(.fam,.catgroup) .echelle .mrow .mp .v,
:is(.fam,.catgroup) .modules .mrow .mp .v,
.pile1 .ord-plus .mrow .mp .v{font-size:1.08rem}

:is(.fam,.catgroup) .echelle .mrow .mname,
:is(.fam,.catgroup) .modules .mrow .mname,
.pile1 .ord-plus .mrow .mname{display:flex;align-items:center;gap:12px}

:is(.fam,.catgroup) .echelle .mrow .mname::after,
:is(.fam,.catgroup) .modules .mrow .mname::after,
.pile1 .ord-plus .mrow .mname::after{content:'';flex:1 1 auto;min-width:14px;
  height:1px;background:currentColor;opacity:.16;align-self:center}

/* Sous 430 px il ne reste plus d'espace utile entre les deux : le filet
   ferait un trait de quelques pixels, ce qui se voit comme un défaut. */
@media(max-width:430px){
  :is(.fam,.catgroup) .echelle .mrow .mname::after,
  :is(.fam,.catgroup) .modules .mrow .mname::after,
  .pile1 .ord-plus .mrow .mname::after{display:none}
  :is(.fam,.catgroup) .echelle .mrow,
  :is(.fam,.catgroup) .modules .mrow,
  .pile1 .ord-plus .mrow{padding-right:14px}
}
