/* =========================================================================
   DILITECH — feuille de style unique
   =========================================================================

   IDENTITÉ (charte graphique officielle, février 2025)
     Bleu marine  #302784 — fiabilité, sécurité, sérieux
     Bleu clair   #009FE3 — innovation, modernité, high-tech
     Typographie  Montserrat, en Bold (700/800) ET ExtraLight (200)

   L'IDÉE DIRECTRICE
     Le logo Dilitech est construit sur un contraste : « DILI » en gras
     marine, « TECH » en très maigre. On a fait de ce contraste la règle
     typographique de tout le site : chaque grand titre est coupé en deux,
     une moitié grasse et une moitié maigre bleu clair. Le site parle donc
     la même langue que son logo, à chaque section.

     Deuxième reprise du logo : le disque encadré de deux barres. Il devient
     le visuel du hero, et le motif des séparateurs.

     Troisième : la coupe en diagonale, présente sur tous les supports de la
     charte (plaquettes, kakémonos, affichage). Elle ferme ici chaque
     surface sombre.

   CONTRASTES — vérifiés, pas devinés
     #302784 sur blanc ....... 13,0:1  ✔ tout usage
     #009FE3 sur blanc ........ 3,0:1  ✘ interdit en petit texte
     #00719F sur blanc ........ 5,0:1  ✔ c'est LUI pour les petits labels
     #009FE3 sur #302784 ...... 4,4:1  ✔ gros texte et interface seulement
     #4FC3F0 sur #302784 ...... 6,4:1  ✔ petits labels sur fond sombre
     #545A73 sur blanc ........ 6,8:1  ✔ texte courant secondaire

   RYTHME DES PAGES
     blanc → brume → blanc → ancre marine → blanc → brume → pied marine.
     Jamais plus de trois ancres sombres : elles doivent rester des repères.
   ========================================================================= */

/* =========================================================================
   1. JETONS
   ========================================================================= */

:root {
  /* --- marine --- */
  --navy:      #302784;
  --navy-clair:#3A2F9B;
  --navy-2:    #241C63;
  --navy-3:    #1A1247;
  --navy-ink:  #100B33;

  /* --- bleu clair --- */
  --cyan:      #009FE3;
  --cyan-2:    #4FC3F0;   /* petits labels sur fond sombre */
  --cyan-3:    #9BDDF7;
  --cyan-ink:  #00719F;   /* petits labels sur fond clair */

  /* --- surfaces ---
     Site basculé en sombre à la demande du client, sur le modèle du hero
     (voir --nuit ci-dessous) : « papier » et « brume » n'écrivent plus du
     texte foncé sur fond clair mais des surfaces claires sur fond sombre.
     Les jetons gardent leurs noms (repris partout dans le CSS) ; seules
     leurs valeurs s'inversent. */
  --paper:  #12111D;   /* cartes, panneaux — la surface « élevée » */
  --mist:   #0B0A14;   /* variante légèrement en retrait de --paper */
  --mist-2: #191730;   /* variante légèrement au-dessus de --paper */

  /* --- encres --- */
  --tx-1: #F4F5FA;
  --tx-2: #B9BCDA;
  --tx-3: #8A8FB5;
  --sur-sombre:   #FFFFFF;
  --sur-sombre-2: #C6C9E4;
  --sur-sombre-3: #9296C4;

  /* --- traits --- */
  --line:   rgba(255, 255, 255, .14);
  --line-2: rgba(255, 255, 255, .07);
  --line-s: rgba(255, 255, 255, .16);
  --line-s2:rgba(255, 255, 255, .08);

  /* --- signaux --- */
  --wa:      #25D366;
  --wa-ink:  #0B7A3B;
  --promo:   #D6165A;
  --promo-clair: #FF7BA8;
  --ok:      #12885A;
  --alerte:  #B4560A;

  /* Le fond sombre de la marque : halo cyan en haut à droite, halo marine
     en bas, sur une base qui va au noir quasi pur plutôt qu'au marine clair
     — mis au point sur le hero de l'accueil (le premier essai restait un
     dégradé marine/violet trop lumineux, voir claudeprompt.md), puis repris
     ici pour que toutes les sections sombres du site s'accordent avec lui. */
  --nuit:
    radial-gradient(760px 520px at 88% -14%, rgba(0, 159, 227, .16) 0%, transparent 62%),
    radial-gradient(620px 460px at 4% 108%, rgba(48, 39, 132, .28) 0%, transparent 60%),
    linear-gradient(158deg, #0a0714 0%, #050308 45%, #000000 100%);

  /* Fond générique des sections et de la page. Identique à --nuit en mode
     nuit (le site reste exactement ce qu'il était) ; seul lui bascule en
     mode jour. --nuit, lui, ne change jamais : il reste la couleur des
     bandes d'accent (.nuit — hero, « pourquoi », « parc », « comment ça se
     passe ») et du pied de page, sombres dans les deux thèmes — le même
     parti pris que le catalogue Toguna, qui garde ses panneaux marine
     dans ses deux thèmes. */
  --fond: var(--nuit);

  /* RVB du texte et des traits posés sur fond sombre (voir thème jour). */
  --sur-rgb: 255, 255, 255;

  /* Voile de la barre de navigation une fois posée (au défilement). */
  --nav-fond: rgba(10, 9, 17, .78);

  /* --- typographie --- */
  --font: "Montserrat", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;

  /* --- métrique --- */
  --wrap: 1280px;
  --nav-h: 70px;
  --pad: clamp(18px, 4.5vw, 40px);
  --r: 14px;          /* rayon courant */
  --r-s: 9px;
  --coupe: clamp(28px, 4vw, 62px);   /* profondeur des coupes en diagonale */

  --ease: cubic-bezier(.22, .61, .36, 1);
  --ease-net: cubic-bezier(.65, 0, .35, 1);
  /* Courbe « premium » : accélération nette puis arrivée très douce — celle
     qu'on retrouve sur les interfaces soignées (Linear, Vercel, Toguna). */
  --ease-expo: cubic-bezier(.16, 1, .3, 1);
  /* Petit rebond, réservé aux micro-interactions (boutons, pastilles). */
  --ease-spring: cubic-bezier(.34, 1.56, .64, 1);

  /* --- lueurs --- */
  --glow-cyan: rgba(0, 159, 227, .45);
  --glow-cyan-doux: rgba(0, 159, 227, .22);

  color-scheme: dark;
}

/* ---------------------------------------------------------------------
   Thème jour — posé par `data-theme="light"` sur <html> (script anti-flash
   en tête de chaque page + activerBasculeTheme() dans js/core/ui.js).
   TOUT passe au clair, hero et bandes d'accent compris (demande du client) :
   même --nuit et les jetons « sur fond sombre » (--sur-sombre*, --cyan-2,
   --sur-rgb) basculent, donc les composants pensés pour le sombre suivent
   sans règle à part. Seuls le marine et le cyan de marque ne bougent pas.
   --------------------------------------------------------------------- */
:root[data-theme="light"] {
  --fond: #FFFFFF;
  --nav-fond: rgba(255, 255, 255, .86);

  /* Les anciennes bandes sombres : un blanc à peine teinté, les halos
     cyan/marine du mode nuit réduits à une trace — assez pour que le hero
     et les bandes d'accent se distinguent encore des sections unies. */
  --nuit:
    radial-gradient(760px 520px at 88% -14%, rgba(0, 159, 227, .09) 0%, transparent 62%),
    radial-gradient(620px 460px at 4% 108%, rgba(48, 39, 132, .07) 0%, transparent 60%),
    linear-gradient(158deg, #F8F9FD 0%, #FFFFFF 50%, #F4F6FB 100%);

  --paper:  #FFFFFF;
  --mist:   #F4F5FA;
  --mist-2: #E9EBF4;

  --tx-1: #14131F;
  --tx-2: #474A66;
  --tx-3: #6B6E8E;
  --sur-sombre:   #14131F;
  --sur-sombre-2: #474A66;
  --sur-sombre-3: #6B6E8E;
  /* composantes RVB du texte/des traits « sur fond sombre », utilisées en
     rgba(var(--sur-rgb), .x) : blanc la nuit, encre marine le jour. */
  --sur-rgb: 20, 19, 50;
  /* le cyan « petits labels sur fond sombre » devient celui « sur fond
     clair » (--cyan-ink, 5:1 sur blanc) */
  --cyan-2: #00719F;

  --line:   rgba(20, 19, 50, .14);
  --line-2: rgba(20, 19, 50, .08);
  --line-s: rgba(20, 19, 50, .16);
  --line-s2:rgba(20, 19, 50, .08);

  --glow-cyan: rgba(0, 159, 227, .18);
  --glow-cyan-doux: rgba(0, 159, 227, .12);

  color-scheme: light;
}

/* Composants dont le fond sombre est écrit en dur (dégradés, voiles
   translucides) plutôt qu'en jeton : leur pendant clair, groupé ici pour
   qu'on voie d'un coup d'œil tout ce que le mode jour réécrit. */
:root[data-theme="light"] .site-pied { background: var(--mist); }

:root[data-theme="light"] .motif { filter: invert(1); }
:root[data-theme="light"] .halos--hero { mix-blend-mode: normal; opacity: .45; }
:root[data-theme="light"] .hero__media-vignette { display: none; }
:root[data-theme="light"] .hero__media-shadow { opacity: .3; }
:root[data-theme="light"] .cta-pill:hover { background: var(--tx-1); color: #fff; border-color: var(--tx-1); }

:root[data-theme="light"] .bento__tile {
  background:
    radial-gradient(240px 180px at 88% -12%, rgba(0, 159, 227, .10) 0%, transparent 62%),
    linear-gradient(160deg, #FFFFFF 0%, #F5F6FB 100%);
  box-shadow: 0 18px 40px -32px rgba(18, 19, 43, .3);
}
:root[data-theme="light"] .bento__tile--d {
  background:
    radial-gradient(560px 400px at 50% -14%, rgba(0, 159, 227, .26) 0%, rgba(0, 159, 227, .07) 45%, transparent 74%),
    linear-gradient(180deg, #FFFFFF 0%, #F3F5FB 100%);
}
:root[data-theme="light"] .bento__badge-nb {
  background: linear-gradient(160deg, #FFFFFF 0%, #EEF0F7 100%);
  box-shadow: 0 14px 26px -16px rgba(18, 19, 43, .3);
}
:root[data-theme="light"] .bento__recu,
:root[data-theme="light"] .bento__chips span { box-shadow: 0 12px 24px -16px rgba(18, 19, 43, .3); }
:root[data-theme="light"] .bento__carte-pill { background: rgba(255, 255, 255, .88); color: var(--tx-1); }
/* cyan plein au survol : texte blanc plutôt que marine sur le cyan foncé du jour */
:root[data-theme="light"] .bento__tile--a:hover .bento__fleche,
:root[data-theme="light"] .contact-carte:hover .contact-carte__fleche { color: #fff; }

:root[data-theme="light"] .carte__illus { filter: drop-shadow(0 10px 22px rgba(18, 19, 43, .16)); }
:root[data-theme="light"] .siege__stat--large {
  background: linear-gradient(135deg, rgba(0, 159, 227, .10), rgba(48, 39, 132, .08));
  border: 1px solid rgba(0, 159, 227, .25);
}

:root[data-theme="light"] .contact-carte {
  background: var(--paper);
  box-shadow: 0 12px 30px -24px rgba(18, 19, 43, .3);
}
:root[data-theme="light"] .pied-contact .contact-carte {
  background:
    var(--paper) padding-box,
    linear-gradient(120deg, rgba(var(--sur-rgb), .12), rgba(var(--sur-rgb), .12)) border-box;
}
:root[data-theme="light"] .pied-contact .contact-carte:hover {
  background:
    var(--paper) padding-box,
    linear-gradient(120deg, var(--cyan), #302784) border-box;
}
:root[data-theme="light"] .pied-contact__form,
:root[data-theme="light"] .contact__form form {
  background: var(--paper);
  box-shadow: 0 0 0 1px rgba(18, 19, 43, .03), 0 20px 44px -28px rgba(18, 19, 43, .28);
}
:root[data-theme="light"] .arg:hover {
  box-shadow: inset 0 1px 0 rgba(var(--sur-rgb), .16), 0 22px 40px -26px rgba(18, 19, 43, .28);
}

/* Motif « circuit » : points aux intersections et amorces de pistes.
   Unique ornement des surfaces sombres, posé à très faible opacité. */
.circuit {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='72' height='72' viewBox='0 0 72 72'%3E%3Cg fill='none' stroke='%23FFFFFF' stroke-width='1'%3E%3Cpath d='M0 18h20M28 18h44M18 0v12M18 24v48M54 0v30M54 38v34M0 54h30M38 54h34'/%3E%3C/g%3E%3Cg fill='%23FFFFFF'%3E%3Ccircle cx='18' cy='18' r='2.4'/%3E%3Ccircle cx='54' cy='54' r='2.4'/%3E%3Ccircle cx='54' cy='34' r='1.6'/%3E%3Ccircle cx='34' cy='18' r='1.6'/%3E%3C/g%3E%3C/svg%3E");
  background-size: 72px 72px;
}

/* Grain fin superposé aux surfaces sombres les plus en vue (hero, appel
   final) : bruit fractal en SVG, sans dépendance, quasi imperceptible mais
   ce qui casse l'effet « dégradé plat » d'un fond uni et donne la texture
   qu'ont les interfaces travaillées. */
.grain { position: relative; }
.grain::after {
  content: "";
  position: absolute; inset: 0;
  /* Doit peindre SOUS le contenu statique (.wrap) : dans l'ordre de
     peinture CSS, un élément positionné à z-index:auto passe pourtant
     AU-DESSUS du flux statique — seul un z-index négatif le repasse
     dessous, comme .motif un peu plus haut. */
  z-index: -1;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='g'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23g)'/%3E%3C/svg%3E");
  mix-blend-mode: overlay;
  opacity: .05;
  pointer-events: none;
}

/* Halos flous en dérive lente : la profondeur des sections sombres vient de
   ces taches de lumière qui bougent, pas d'un dégradé figé. Chaque halo est
   une simple pastille radiale + flou, animée en transform (peu coûteux). */
.halos { position: absolute; inset: 0; overflow: hidden; pointer-events: none; z-index: -1; }
.halo {
  position: absolute;
  border-radius: 50%;
  filter: blur(72px);
  opacity: .5;
  will-change: transform;
  animation: derive 22s var(--ease) infinite alternate;
}
.halo--1 {
  width: 46vw; height: 46vw; max-width: 620px; max-height: 620px;
  top: -14%; right: -8%;
  background: radial-gradient(circle, var(--cyan) 0%, transparent 70%);
  animation-duration: 26s;
}
.halo--2 {
  width: 36vw; height: 36vw; max-width: 480px; max-height: 480px;
  bottom: -18%; left: -6%;
  background: radial-gradient(circle, var(--navy-clair) 0%, transparent 72%);
  opacity: .6;
  animation-duration: 32s;
  animation-delay: -6s;
}
.halo--3 {
  width: 24vw; height: 24vw; max-width: 320px; max-height: 320px;
  top: 38%; left: 32%;
  background: radial-gradient(circle, var(--cyan-2) 0%, transparent 74%);
  opacity: .32;
  animation-duration: 19s;
  animation-delay: -11s;
}
@keyframes derive {
  from { transform: translate3d(0, 0, 0) scale(1); }
  to   { transform: translate3d(4%, -6%, 0) scale(1.14); }
}

/* =========================================================================
   2. BASES
   ========================================================================= */

*, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; }

html {
  scroll-behavior: smooth;
  -webkit-text-size-adjust: 100%;
  /* `clip` et non `hidden` : `hidden` créerait un conteneur de défilement et
     casserait le `position: sticky` de la barre de navigation. */
  overflow-x: clip;
}

body {
  font-family: var(--font);
  font-size: 16px;
  font-weight: 400;
  line-height: 1.68;
  color: var(--tx-1);
  /* Simple filet de sécurité pour les quelques pixels qui ne sont couverts
     par aucune section (marges des coupes en diagonale, notamment) : chaque
     section peint désormais son propre fond (voir la règle `section` plus
     bas), donc pas besoin ici de `background-attachment: fixed` — fragile
     sur mobile (Safari iOS en particulier gère mal cette propriété). */
  background: var(--fond);
  overflow-x: clip;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}

body.defilement-bloque { position: fixed; width: 100%; overflow: hidden; }

img, svg, video { max-width: 100%; display: block; }
a { color: inherit; text-decoration: none; }
button { font: inherit; color: inherit; background: none; border: none; cursor: pointer; }
input, select, textarea { font: inherit; color: inherit; }
ul, ol { list-style: none; }
::selection { background: var(--cyan); color: #fff; }

:focus-visible {
  outline: 3px solid var(--cyan);
  outline-offset: 3px;
  border-radius: 3px;
}

.wrap { width: 100%; max-width: var(--wrap); margin-inline: auto; padding-inline: var(--pad); }

.sr-only {
  position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
  overflow: hidden; clip-path: inset(50%); white-space: nowrap; border: 0;
}

/* Chaque section peint sa propre instance du dégradé du hero (var(--nuit))
   plutôt que de compter sur un fond de page fixe : plus fiable (certains
   navigateurs mobiles gèrent mal `background-attachment: fixed`) et surtout
   plus riche — chaque section garde son propre halo, pas seulement celle
   qui atterrit au bon endroit dans un dégradé figé. `.sec--brume` (fond
   légèrement différent) et `.nuit` (déjà ce même dégradé) restent
   prioritaires, cette règle ne les concerne pas. */
section {
  position: relative; isolation: isolate;
  padding-block: clamp(64px, 8.5vw, 122px);
  background: var(--fond);
  transition: background-color .4s var(--ease);
}
.sec--brume { background: var(--mist); }
.sec--serre { padding-block: clamp(48px, 6vw, 84px); }

/* --- lueur qui suit le curseur, posée sur chaque section --------------
   Même mécanique que le spotlight du hero (--mx/--my posés par
   activerLueurSections() dans js/core/ui.js), généralisée à tout le site :
   survoler n'importe quelle section fait apparaître le même halo cyan
   discret. `isolation: isolate` (ci-dessus) garde le z-index négatif
   confiné à la section, sans passer sous les sections voisines. */
section::before {
  content: ""; position: absolute; inset: 0; z-index: -1; pointer-events: none;
  background: radial-gradient(520px circle at var(--mx, 50%) var(--my, 30%), var(--glow-cyan-doux), transparent 62%);
  opacity: 0; transition: opacity .5s var(--ease);
}
section:hover::before { opacity: 1; }
@media (pointer: coarse) { section::before { display: none; } }

/* --- icônes ------------------------------------------------------------ */
.ic {
  display: inline-flex; flex: none;
  width: 1.15em; height: 1.15em;
  vertical-align: -.22em;
}
.ic svg { width: 100%; height: 100%; }

/* =========================================================================
   3. TYPOGRAPHIE ÉDITORIALE
   ========================================================================= */

/* Le contraste gras / très maigre du logo, appliqué aux titres.
   <h2 class="titre">Le bon matériel, <em>pour le bon usage.</em></h2> */
.titre {
  font-weight: 800;
  font-size: clamp(1.95rem, 4.6vw, 3.35rem);
  line-height: 1.06;
  letter-spacing: -.03em;
  color: var(--tx-1);
  text-wrap: balance;
}
.titre em {
  font-style: normal;
  font-weight: 200;
  color: var(--cyan-ink);
}

.titre--geant { font-size: clamp(2.4rem, 6.6vw, 4.6rem); }
.titre--petit { font-size: clamp(1.45rem, 2.8vw, 2.05rem); }

/* Sur fond sombre : le maigre passe au bleu clair lisible. */
.sur-nuit .titre,
.sur-nuit .titre em { color: var(--sur-sombre); }
.sur-nuit .titre em { color: var(--cyan-2); font-weight: 200; }

.surtitre {
  display: inline-flex; align-items: center; gap: 11px;
  font-size: .69rem; font-weight: 700;
  letter-spacing: .22em; text-transform: uppercase;
  color: var(--cyan-ink);
  margin-bottom: 16px;
}
.surtitre::before {
  content: ""; width: 26px; height: 2px;
  background: currentColor; opacity: .75;
}
.sur-nuit .surtitre { color: var(--cyan-2); }

.chapeau {
  font-size: clamp(1rem, 1.5vw, 1.12rem);
  font-weight: 400;
  color: var(--tx-2);
  max-width: 62ch;
  margin-top: 18px;
}
.sur-nuit .chapeau { color: var(--sur-sombre-2); }

.tete-sec { margin-bottom: clamp(34px, 4.5vw, 58px); }
.tete-sec--centre { text-align: center; }
.tete-sec--centre .surtitre { justify-content: center; }
.tete-sec--centre .chapeau { margin-inline: auto; }

/* En-tête à deux colonnes : titre à gauche, lien d'action à droite. */
.tete-duo {
  display: flex; flex-wrap: wrap; align-items: flex-end;
  justify-content: space-between; gap: 22px;
  margin-bottom: clamp(30px, 4vw, 52px);
}

/* Séparateur repris du logo : barre · disque · barre. */
.signe-sep {
  display: flex; align-items: center; justify-content: center; gap: 9px;
  margin: 34px auto;
}
.signe-sep i { display: block; width: 3px; height: 17px; border-radius: 2px; background: var(--cyan); }
.signe-sep b { display: block; width: 14px; height: 14px; border-radius: 50%; background: var(--navy); }

/* =========================================================================
   4. SURFACES SOMBRES ET COUPES
   ========================================================================= */

.nuit {
  position: relative;
  background: var(--nuit);
  color: var(--sur-sombre);
  isolation: isolate;
}
.nuit > .motif {
  position: absolute; inset: 0; z-index: -1;
  opacity: .052; pointer-events: none;
}

/* La diagonale de la charte, en bas et/ou en haut des blocs sombres. */
.coupe-bas  { clip-path: polygon(0 0, 100% 0, 100% calc(100% - var(--coupe)), 0 100%); }
.coupe-haut { clip-path: polygon(0 var(--coupe), 100% 0, 100% 100%, 0 100%); }
.coupe-duo  { clip-path: polygon(0 var(--coupe), 100% 0, 100% calc(100% - var(--coupe)), 0 100%); }

/* Un bloc coupé en bas mord sur le suivant : on compense la marge. */
.coupe-bas + * { margin-top: calc(var(--coupe) * -.35); }

/* =========================================================================
   5. LOGO
   ========================================================================= */

.marque { display: inline-flex; align-items: center; gap: 11px; }
.marque__signe {
  width: auto; height: 26px;
  fill: var(--tx-1);
  flex: none;
}
.marque__mot {
  font-size: 1.42rem;
  letter-spacing: .012em;
  line-height: 1;
  white-space: nowrap;
}
.marque__mot b { font-weight: 800; color: var(--tx-1); }
.marque__mot i { font-style: normal; font-weight: 200; color: var(--cyan); }

/* Déclinaison sur fond sombre : le signe passe en blanc. */
.nuit .marque__signe, .site-pied .marque__signe { fill: var(--sur-sombre); }
.nuit .marque__mot b,  .site-pied .marque__mot b { color: var(--sur-sombre); }
.nuit .marque__mot i,  .site-pied .marque__mot i { color: var(--cyan-2); }

/* Logo principal de la charte (février 2025) : oreillettes bleu clair,
   tête marine, « DILI » marine gras, « TECH » bleu clair fin. Le site est en
   mode jour partout (nav, menu, pied clairs) : il s'applique à tout logo
   complet (`.marque`). Le signe seul des avatars, blanc sur pastille marine,
   n'est pas dans un `.marque` et garde son `fill` d'ensemble. */
:root[data-theme="light"] .marque .marque__barre { fill: var(--cyan); }
:root[data-theme="light"] .marque .marque__tete { fill: var(--navy); }
:root[data-theme="light"] .marque .marque__mot b { color: var(--navy); }
:root[data-theme="light"] .marque .marque__mot i { color: var(--cyan); }
.marque--pied .marque__signe { height: 30px; }
.marque--pied .marque__mot { font-size: 1.6rem; }

/* =========================================================================
   6. BOUTONS
   ========================================================================= */

/* Coins courts plutôt que la pilule complète, et plus ni reflet balayant
   ni lever + ombre colorée ni halo suiveur de curseur au survol (les trois
   étaient le même réflexe « gabarit générique » repéré sur le bouton du
   hero — voir claudeprompt.md) : un simple éclaircissement, partout. */
.btn {
  --btn-fond: var(--navy);
  --btn-txt: #fff;
  position: relative;
  display: inline-flex; align-items: center; justify-content: center; gap: 9px;
  padding: 13px 22px;
  border-radius: 8px;
  font-size: .89rem; font-weight: 700; letter-spacing: .01em;
  background: var(--btn-fond); color: var(--btn-txt);
  border: 1.5px solid transparent;
  transition: filter .25s var(--ease), background-color .2s var(--ease),
              color .2s var(--ease), border-color .2s var(--ease);
  white-space: nowrap;
}
.btn:hover { filter: brightness(1.1); }
.btn:active { filter: brightness(.96); }

.btn--plein  { --btn-fond: var(--navy); }
.btn--cyan   { --btn-fond: var(--cyan); --btn-txt: #04263A; }
.btn--wa     { --btn-fond: var(--wa);   --btn-txt: #042A15; }
.btn--large  { width: 100%; padding: 15px 24px; font-size: .95rem; }

.btn--ligne {
  --btn-fond: transparent; --btn-txt: var(--navy);
  border-color: var(--line);
}
.btn--ligne:hover { filter: none; border-color: var(--navy); background: rgba(48, 39, 132, .05); }

.sur-nuit .btn--ligne, .nuit .btn--ligne {
  --btn-txt: var(--sur-sombre); border-color: var(--line-s);
}
.sur-nuit .btn--ligne:hover, .nuit .btn--ligne:hover {
  background: rgba(var(--sur-rgb), .1); border-color: rgba(var(--sur-rgb), .45);
}

/* Lien fléché : l'action discrète des en-têtes de section. */
.lien-fleche {
  display: inline-flex; align-items: center; gap: 8px;
  font-size: .85rem; font-weight: 700;
  color: var(--cyan-ink);
  border-bottom: 1.5px solid transparent;
  padding-bottom: 2px;
  transition: gap .2s var(--ease), border-color .2s var(--ease);
}
.lien-fleche:hover { gap: 13px; border-color: currentColor; }
.sur-nuit .lien-fleche { color: var(--cyan-2); }

/* =========================================================================
   7. EN-TÊTE
   ========================================================================= */

/* La nav flotte désormais par-dessus le contenu (position: fixed) plutôt que
   de rester dans le flux (sticky) : c'est ce qui permet à une bande sombre
   de départ (hero, entête de page) de commencer à y = 0 et de se voir juste
   derrière une nav transparente, comme chez VP/EventMotors, au lieu d'être
   coupée net par une barre blanche opaque. `#contenu` compense l'espace que
   la nav ne réserve plus — sauf quand la première section est justement
   cette bande sombre, qui veut occuper tout l'écran depuis le sommet. */
.site-entete {
  position: fixed; top: 0; left: 0; right: 0; z-index: 800; display: block;
  transition: transform .35s var(--ease-expo);
}
/* Cachée pendant qu'on descend (activerChromeDePage, js/core/ui.js). */
.site-entete.est-cachee { transform: translateY(-100%); }
#contenu { padding-top: var(--nav-h); }
.site-entete--sombre ~ #contenu { padding-top: 0; }


/* --- barre de navigation --- */
.nav {
  position: relative; z-index: 810;
  background: var(--nav-fond);
  backdrop-filter: blur(18px) saturate(1.6);
  -webkit-backdrop-filter: blur(18px) saturate(1.6);
  border-bottom: 1px solid transparent;
  transition: border-color .3s var(--ease), box-shadow .4s var(--ease-expo), background-color .3s var(--ease);
}
.site-entete.est-pose .nav {
  border-bottom-color: var(--line-2);
  box-shadow: 0 20px 40px -28px rgba(18, 19, 43, .4);
}

/* --- nav en surimpression sur une bande sombre --------------------------
   Transparente et texte clair tant qu'on n'a pas défilé (la bande sombre se
   voit à travers), puis se solidifie exactement comme la nav normale une
   fois `.est-pose` posée par activerChromeDePage(). */
.site-entete--sombre .nav {
  background: transparent; backdrop-filter: none; -webkit-backdrop-filter: none;
}
.site-entete--sombre:not(.est-pose) .nav__liens a,
.site-entete--sombre:not(.est-pose) .nav__ico,
.site-entete--sombre:not(.est-pose) .marque__mot b { color: rgba(var(--sur-rgb), .92); }
.site-entete--sombre:not(.est-pose) .marque__mot i { color: var(--cyan-2); }
.site-entete--sombre:not(.est-pose) .marque__signe { fill: var(--sur-sombre); }
.site-entete--sombre:not(.est-pose) .nav__liens a[aria-current="page"],
.site-entete--sombre:not(.est-pose) .nav__liens a:hover { color: var(--sur-sombre); }
.site-entete--sombre:not(.est-pose) .nav__ico:hover { background: rgba(var(--sur-rgb), .14); color: var(--sur-sombre); }
.site-entete--sombre.est-pose .nav {
  background: var(--nav-fond);
  backdrop-filter: blur(18px) saturate(1.6); -webkit-backdrop-filter: blur(18px) saturate(1.6);
  transition: background-color .3s var(--ease), height .3s var(--ease), opacity .3s var(--ease);
}
/* Filet dégradé, plus vivant qu'une bordure unie — la même idée que le
   soulignement animé des liens, posée une fois pour toute la barre. */
.site-entete.est-pose .nav::after {
  content: "";
  position: absolute; left: 0; right: 0; bottom: -1px; height: 1px;
  background: linear-gradient(90deg, transparent, var(--cyan) 50%, transparent);
  opacity: .5;
}
.nav__in {
  height: var(--nav-h);
  display: flex; align-items: center; gap: 22px;
}
.nav__logo { flex: none; }

.nav__liens {
  display: flex; align-items: center; gap: clamp(14px, 2vw, 30px);
  margin-inline: auto;
}
.nav__liens a {
  position: relative;
  font-size: .875rem; font-weight: 600;
  color: var(--tx-2);
  padding-block: 6px;
  transition: color .2s var(--ease);
}
.nav__liens a::after {
  content: ""; position: absolute; left: 0; right: 0; bottom: -2px;
  height: 2px; background: var(--cyan);
  transform: scaleX(0); transform-origin: left;
  transition: transform .28s var(--ease);
}
.nav__liens a:hover { color: var(--tx-1); }
.nav__liens a:hover::after { transform: scaleX(1); }
.nav__liens a[aria-current="page"] { color: var(--tx-1); font-weight: 700; }
.nav__liens a[aria-current="page"]::after { transform: scaleX(1); }

.nav__actions { display: flex; align-items: center; gap: 9px; flex: none; }
.nav__ico {
  display: grid; place-items: center;
  width: 40px; height: 40px; border-radius: 50%;
  color: var(--tx-2);
  transition: background-color .2s var(--ease), color .2s var(--ease);
}
.nav__ico:hover { background: var(--mist); color: var(--tx-1); }
.nav__ico .ic { width: 20px; height: 20px; }

/* --- bascule jour / nuit : on montre le mode vers lequel on va --------
   En nuit, le soleil (« passer en jour ») ; en jour, la lune. Même
   principe que le bouton du catalogue Toguna. */
.bascule-theme { position: relative; }
.bascule-theme__lune { display: none; }
:root[data-theme="light"] .bascule-theme__soleil { display: none; }
:root[data-theme="light"] .bascule-theme__lune { display: inline-flex; }

/* `overflow: visible` : la pastille de compte (span positionné hors de la
   boîte, top/right négatifs) serait autrement rognée par le `overflow:
   hidden` que `.btn` pose pour le reflet au survol. */
.btn--devis { position: relative; overflow: visible; padding: 11px 18px; font-size: .84rem; }
/* Sans le rognage de `.btn`, le reflet en losange dépasserait des coins très
   arrondis de cette pilule compacte : on le retire plutôt que de le laisser
   déborder en carré. */
.btn--devis::before { content: none; }
.btn--devis .ic { width: 18px; height: 18px; }
.site-entete.a-selection .btn--devis { --btn-fond: var(--cyan); --btn-txt: #04263A; }

.pastille {
  position: absolute; top: -5px; right: -5px;
  min-width: 21px; height: 21px; padding: 0 6px;
  display: grid; place-items: center;
  border-radius: 999px;
  background: var(--promo); color: #fff;
  font-size: .68rem; font-weight: 800; line-height: 1;
  border: 2px solid #fff;
  animation: pastille-pop .32s var(--ease);
}
/* `display: grid` l'emporterait sur l'attribut `hidden` : on le neutralise. */
.pastille[hidden] { display: none; }
@keyframes pastille-pop { from { transform: scale(.4); } to { transform: scale(1); } }

.nav__burger { display: none; }

/* --- menu mobile --- */
.menu {
  position: fixed; inset: 0; z-index: 900;
  background: var(--nuit);
  color: var(--sur-sombre);
  overflow-y: auto;
  padding: calc(var(--nav-h) + 24px) var(--pad) 40px;
  animation: menu-entre .3s var(--ease);
}

/* Le panneau couvre tout l'écran ; la barre doit rester AU-DESSUS de lui,
   sinon le bouton de fermeture devient intouchable au doigt (le panneau
   intercepte le clic) et le menu ne se referme plus qu'au clavier. */
.site-entete.menu-ouvert .nav { z-index: 910; background: transparent; backdrop-filter: none; }
.site-entete.menu-ouvert .nav,
.site-entete.menu-ouvert .nav.est-pose { border-color: transparent; box-shadow: none; }
.site-entete.menu-ouvert .marque__signe { fill: var(--sur-sombre); }
.site-entete.menu-ouvert .marque__mot b { color: var(--sur-sombre); }
.site-entete.menu-ouvert .marque__mot i { color: var(--cyan-2); }
.site-entete.menu-ouvert .nav__burger { color: var(--sur-sombre); }
.site-entete.menu-ouvert .nav__burger:hover { background: rgba(var(--sur-rgb), .14); }
.site-entete.menu-ouvert .btn--devis { --btn-fond: rgba(var(--sur-rgb), .14); --btn-txt: var(--sur-sombre); }
@keyframes menu-entre { from { opacity: 0; transform: translateY(-8px); } }
.menu__in { max-width: 520px; margin-inline: auto; display: grid; gap: 30px; }

.menu__liens { display: grid; }
.menu__liens a {
  display: flex; align-items: center; justify-content: space-between;
  padding: 17px 2px;
  font-size: 1.32rem; font-weight: 700; letter-spacing: -.02em;
  border-bottom: 1px solid var(--line-s2);
  animation: menu-ligne .42s var(--ease) backwards;
  animation-delay: calc(var(--i) * 40ms);
}
@keyframes menu-ligne { from { opacity: 0; transform: translateX(-14px); } }
.menu__liens a[aria-current="page"] { color: var(--cyan-2); }
.menu__liens .ic { width: 18px; height: 18px; opacity: .45; }

.menu__titre {
  font-size: .69rem; font-weight: 700; letter-spacing: .22em;
  text-transform: uppercase; color: var(--cyan-2); margin-bottom: 12px;
}
.menu__cats { display: flex; flex-wrap: wrap; gap: 9px; }
.menu__cats a {
  padding: 9px 15px; border-radius: 999px;
  border: 1px solid var(--line-s);
  font-size: .82rem; font-weight: 600;
}
.menu__cats a:hover { background: rgba(var(--sur-rgb), .1); }

.menu__pied { display: grid; gap: 14px; margin-top: clamp(40px, 8vh, 72px); }
.menu__tel {
  display: inline-flex; align-items: center; gap: 9px; justify-content: center;
  font-weight: 700; color: var(--cyan-2);
}
.menu__theme {
  display: inline-flex; align-items: center; gap: 9px; justify-content: center;
  padding: 12px; border-radius: 999px;
  border: 1px solid rgba(var(--sur-rgb), .16);
  font-weight: 600; color: var(--sur-sombre-2);
}
.menu__theme:hover { background: rgba(var(--sur-rgb), .08); color: var(--sur-sombre); }

/* =========================================================================
   8. HERO
   ========================================================================= */

/* --- entrée animée, une seule fois au chargement ------------------------
   Indépendante du système `.reveal` (qui attend le défilement) : le hero
   est déjà visible à l'ouverture de la page, il doit jouer tout de suite. */
.entre {
  animation: entree .8s var(--ease-expo) backwards;
  animation-delay: calc(var(--i, 0) * 90ms + 60ms);
}
@keyframes entree {
  from { opacity: 0; transform: translateY(22px); }
  to   { opacity: 1; transform: translateY(0); }
}

.surtitre__pouls {
  position: relative;
  display: inline-block;
  width: 7px; height: 7px; margin-right: 3px;
  border-radius: 50%;
  background: currentColor;
  box-shadow: 0 0 0 0 var(--glow-cyan);
  animation: pouls 2.2s var(--ease) infinite;
}
@keyframes pouls {
  0%   { box-shadow: 0 0 0 0 var(--glow-cyan); }
  70%  { box-shadow: 0 0 0 8px transparent; }
  100% { box-shadow: 0 0 0 0 transparent; }
}

/* =========================================================================
   HERO — composition reprise à la lettre depuis la référence STEP SNEAKERS
   (Docs/hero, capture « Which one is your favorite… »), à la demande du
   client après deux essais jugés insuffisants. Un CSS grid à deux colonnes
   porte les cinq blocs de la référence exactement dans les mêmes cases —
   titre, paragraphe, puces + CTA, trio icône/libellé, photo produit —
   plutôt que la mécanique VP précédente (mot fantôme, libellé vertical,
   pagination à points), absente de cette référence.
   Couleurs et police ramenées à la charte Dilitech (Montserrat, bleus de
   la marque) au lieu du bleu générique de STEP. Voir claudeprompt.md.
   ========================================================================= */

.hero {
  position: relative; isolation: isolate;
  overflow: hidden;
  color: var(--sur-sombre);
  width: 100%;
  /* `var(--nuit)` a été assombri jusqu'au noir quasi pur en travaillant ce
     hero (voir sa définition) : il sert maintenant de fond ici comme sur
     toutes les autres sections sombres du site, plutôt que de garder une
     variante locale — c'est ce même dégradé qu'on réutilise pour harmoniser
     le reste du site avec le hero. */
  background: var(--nuit);

  /* Une hauteur ferme (pas seulement un plancher) donne au `1fr` de la
     grille interne un espace réel à distribuer — sans elle, la ligne qui
     porte la photo se dimensionnait sur le contenu et débordait largement
     sous la fenêtre (mesuré : ~1050px pour une fenêtre de 900px). */
  height: calc(100vh - var(--nav-h));
  min-height: 620px;
}

/* Le fond (ci-dessus) occupe toute la largeur de la fenêtre ; le contenu,
   lui, reste cadré à --wrap et centré — sur les écrans plus larges que
   --wrap, mettre max-width directement sur .hero aurait aussi rogné son
   propre fond, laissant deux bandes blanches (fond de page) de part et
   d'autre au lieu du dégradé. */
.hero__grid {
  position: relative; z-index: 1; height: 100%;
  display: grid;
  grid-template-columns: minmax(280px, 1.05fr) minmax(300px, 1fr);
  grid-template-rows: auto 1fr auto;
  grid-template-areas:
    "headline desc"
    "specs    media"
    "trio     media";
  column-gap: clamp(24px, 4vw, 60px);
  row-gap: 18px;
  max-width: var(--wrap); margin: 0 auto;
  padding: calc(var(--nav-h) + 30px) clamp(24px, 4vw, 50px) 26px;
}

.hero__frame {
  position: absolute; z-index: 2; inset: 18px; border-radius: 20px;
  border: 1px solid rgba(var(--sur-rgb), .14); pointer-events: none;
}
@media (max-width: 900px) { .hero__frame { display: none; } }

.halos--hero { position: absolute; inset: 0; z-index: 0; mix-blend-mode: screen; }
.halos--hero .halo--1 { top: -8%; left: auto; right: -6%; opacity: .5; }
.halos--hero .halo--3 { top: auto; bottom: -10%; left: 4%; right: auto; opacity: .32; }

/* Spotlight qui suit le curseur — activerSpotlightHero() dans js/core/ui.js
   (mousemove → --mx/--my en %), posé sur le hero entier. */
.hero__spotlight {
  position: absolute; inset: 0; z-index: 0; pointer-events: none;
  background: radial-gradient(560px circle at var(--mx, 50%) var(--my, 35%), var(--glow-cyan), transparent 62%);
  opacity: 0; transition: opacity .5s var(--ease);
}
.hero:hover .hero__spotlight { opacity: 1; }
@media (pointer: coarse) { .hero__spotlight { display: none; } }

/* --- colonne de gauche : titre, paragraphe, puces, trio ---------------- */
.hero__headline { grid-area: headline; position: relative; z-index: 1; align-self: end; }
.hero__title {
  font-weight: 700;
  font-size: clamp(2.2rem, 3.6vw, 3.2rem);
  line-height: 1.08;
  letter-spacing: -.03em;
  color: var(--sur-sombre);
}
/* Premier mot en accent — italique, gras, souligné cyan — comme « Enjoy »
   dans la référence, plutôt que le dégradé gras → maigre de l'ancienne
   version. */
.hero__title em {
  font-style: italic; font-weight: 800; color: var(--cyan-2);
  text-decoration: underline; text-decoration-color: var(--cyan-2);
  text-underline-offset: 6px; text-decoration-thickness: 2px;
}

.hero__desc {
  grid-area: desc; position: relative; z-index: 1;
  justify-self: end; align-self: start; text-align: right;
  max-width: 34ch;
}
.hero__desc p { font-size: .88rem; line-height: 1.6; color: rgba(var(--sur-rgb), .62); margin: 0 0 14px; }
.hero__desc p:last-child { margin-bottom: 0; }

.hero__specs { grid-area: specs; position: relative; z-index: 1; align-self: center; }
/* Les puces « marques disponibles » ont été retirées (demande du client) :
   cet espace vide garde la hauteur qu'elles occupaient, pour que le CTA ne
   remonte pas combler le vide. */
.hero__specs-vide { height: 130px; }
@media (max-width: 900px) { .hero__specs-vide { height: 96px; } }
.hero__specs-label {
  font-size: .68rem; font-weight: 700; letter-spacing: .16em; text-transform: uppercase;
  color: rgba(var(--sur-rgb), .55); margin: 0 0 14px;
}
/* Puces façon pointures de la référence, remplies avec de vraies marques
   du catalogue (voir hero() dans accueil.js) plutôt que des tailles. */
.hero__chips { display: flex; flex-wrap: wrap; gap: 10px; margin: 0 0 28px; max-width: 360px; padding: 0; list-style: none; }
.hero__chip {
  padding: 9px 16px; border: 1px solid rgba(var(--sur-rgb), .22); border-radius: 10px;
  background: rgba(var(--sur-rgb), .03);
  font-size: .74rem; font-weight: 700; color: var(--sur-sombre);
  transition: border-color .3s var(--ease);
}
.hero__chip--plus { color: var(--cyan-2); border-color: rgba(79, 195, 240, .4); }

.hero__actions { display: flex; align-items: center; gap: 26px; flex-wrap: wrap; }

/* --- bouton monochrome, coins nets ----------------------------------------
   Le premier essai restait un pavé cyan plein — toujours le réflexe
   « bouton-couleur-de-marque » des gabarits génériques. Ici, plus aucune
   couleur : bordé, transparent, blanc sur noir, comme les cases du compteur
   Toguna Motors (Docs/hero) — le cyan n'apparaît nulle part sur le bouton,
   seul son inversion (fond blanc, texte noir) marque le survol. */
.cta-pill {
  display: inline-flex; align-items: center; gap: 14px;
  padding: 15px 26px; border-radius: 6px;
  border: 1px solid rgba(var(--sur-rgb), .5);
  background: transparent; color: var(--sur-sombre);
  font-size: .78rem; font-weight: 700; letter-spacing: .1em; text-transform: uppercase;
  transition: background .3s var(--ease), color .3s var(--ease), border-color .3s var(--ease);
}
.cta-pill:hover { background: #fff; color: #000; border-color: #fff; }
.cta-pill__fleche {
  display: grid; place-items: center; width: 15px; height: 15px; flex-shrink: 0;
}
.cta-pill__fleche svg { width: 100%; height: 100%; }

/* --- lien souligné : l'appel secondaire (absent de la référence, gardé
   car « demander un devis » reste un besoin réel du site) -------------- */
.cta-link {
  position: relative; display: inline-flex; align-items: center; gap: 10px;
  font-size: .74rem; font-weight: 700; letter-spacing: .1em; text-transform: uppercase;
  color: rgba(var(--sur-rgb), .8); padding-bottom: 6px; transition: color .35s var(--ease);
}
.cta-link__dot { width: 7px; height: 7px; border-radius: 50%; background: var(--wa); flex-shrink: 0; }
.cta-link::after {
  content: ""; position: absolute; left: 0; bottom: 0; width: 100%; height: 1px;
  background: var(--cyan-2); transform: scaleX(.18); transform-origin: left;
  transition: transform .4s var(--ease-expo);
}
.cta-link:hover { color: var(--sur-sombre); }
.cta-link:hover::after { transform: scaleX(1); }

/* --- trio icône/libellé, en cases nettes ---------------------------------
   Plus de trait de séparation ni d'icône nue flottante (le style « pack
   d'icônes IA ») : chaque icône est posée dans une case bordée à coins
   courts, sur le modèle des cases du compte à rebours Toguna Motors
   (Docs/hero) — garantie et SAV sont des faits fixes déjà énoncés plus bas
   sur la page, le réseau reste calculé (voir hero() dans accueil.js). */
.hero__trio {
  grid-area: trio; position: relative; z-index: 1; align-self: end;
  display: flex; gap: 22px; padding: 0; margin: 0; list-style: none;
}
.hero__trio li { display: flex; flex-direction: column; align-items: center; gap: 10px; text-align: center; }
.hero__trio-ic {
  display: grid; place-items: center;
  width: 44px; height: 44px; border-radius: 6px;
  border: 1px solid rgba(var(--sur-rgb), .22);
  background: transparent;
}
.hero__trio-ic .ic { width: 20px; height: 20px; color: var(--sur-sombre); }
.hero__trio span:last-child {
  font-size: .64rem; font-weight: 700; letter-spacing: .08em; text-transform: uppercase;
  color: rgba(var(--sur-rgb), .6); text-wrap: balance;
}

/* --- photo produit, pleine colonne de droite ---------------------------
   Photo de travail (source Pinterest, sans licence commerciale) — à
   remplacer par une vraie photo Dilitech avant mise en ligne. Le
   vignettage radial isole l'appareil de son décor (bureau, bokeh) pour se
   rapprocher du produit détouré sur fond sombre de la référence. */
.hero__media {
  grid-area: media; position: relative; z-index: 1;
  border-radius: 24px; overflow: hidden;
  min-height: 320px;
}
.hero__media img {
  width: 100%; height: 100%; object-fit: cover; object-position: 50% 32%;
  filter: brightness(.94) contrast(1.08) saturate(1.05);
}
.hero__media-vignette {
  position: absolute; inset: 0;
  background: radial-gradient(120% 90% at 50% 40%, transparent 42%, rgba(6, 5, 20, .55) 78%, rgba(6, 5, 20, .92) 100%);
}
.hero__media-shadow {
  position: absolute; left: 10%; right: 10%; bottom: -6%; height: 60px;
  background: radial-gradient(ellipse at center, rgba(0, 0, 0, .55), transparent 72%);
  filter: blur(4px);
}

@media (max-width: 900px) {
  /* La colonne unique s'empile sur sa hauteur naturelle : la hauteur ferme
     du bureau (pensée pour la grille à deux colonnes) n'a plus lieu d'être
     ici. */
  .hero { height: auto; min-height: auto; }
  .hero__grid {
    grid-template-columns: 1fr;
    grid-template-rows: auto;
    grid-template-areas: "headline" "media" "desc" "specs" "trio";
    row-gap: 22px;
    text-align: center;
    padding-top: calc(var(--nav-h) + 34px);
    padding-bottom: 40px;
  }
  .hero__desc { justify-self: center; text-align: center; max-width: 44ch; }
  .hero__specs { align-self: auto; }
  .hero__chips { justify-content: center; max-width: none; }
  .hero__actions { justify-content: center; }
  .hero__trio { justify-content: center; flex-wrap: wrap; row-gap: 16px; }
  .hero__media { min-height: 320px; order: -1; }
}

/* Simple rangée de boutons — reste utilisée par les en-têtes « introuvable »
   (404.html, article.js, produit.js), pas par le hero de l'accueil. */
.heros__actions { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 32px; }

/* --- bande de preuves, façon fiche technique (reprise sur reseau.html) --
   Verre dépoli, séparateurs verticaux entre les chiffres. */
.heros__preuves {
  display: flex; flex-wrap: wrap;
  margin-top: 40px; padding: 22px 26px;
  background: rgba(var(--sur-rgb), .045);
  border: 1px solid var(--line-s2);
  border-radius: var(--r);
  backdrop-filter: blur(14px);
  -webkit-backdrop-filter: blur(14px);
}
.heros__preuve {
  position: relative;
  padding-inline: 26px;
  flex: 1 1 0;
  min-width: 84px;
}
.heros__preuve:first-child { padding-left: 0; }
.heros__preuve:not(:first-child)::before {
  content: "";
  position: absolute; left: 0; top: 2px; bottom: 2px;
  width: 1px; background: var(--line-s);
}
.heros__preuve b {
  display: block;
  font-size: 1.75rem; font-weight: 800; line-height: 1.1;
  color: var(--tx-1);
  font-variant-numeric: tabular-nums;
}
.heros__preuve span {
  display: block; margin-top: 4px;
  font-size: .68rem; font-weight: 700; letter-spacing: .12em;
  text-transform: uppercase; color: var(--tx-3);
}
/* Posée désormais dans une section qui bascule (#reseau), plus sur une
   bande sombre : en mode jour, une carte pleine plutôt qu'un verre blanc
   invisible sur fond clair. */
:root[data-theme="light"] .heros__preuves { background: var(--paper); }


/* =========================================================================
   9. MARQUEE DES MARQUES
   ========================================================================= */

.marques {
  border-block: 1px solid var(--line-2);
  padding-block: 22px;
  overflow: hidden;
  background: var(--paper);
}
.marques__piste {
  display: flex; gap: 52px; width: max-content;
  animation: defiler 46s linear infinite;
}
.marques:hover .marques__piste { animation-play-state: paused; }
@keyframes defiler { to { transform: translateX(-50%); } }
.marques__m {
  font-size: 1.02rem; font-weight: 700; letter-spacing: .02em;
  color: var(--tx-3);
  white-space: nowrap;
  transition: color .2s var(--ease);
}
.marques__m:hover { color: var(--tx-1); }

/* =========================================================================
   10. BENTO — L'UNIVERS DILITECH
   -------------------------------------------------------------------------
   Grille reprise À LA LETTRE depuis la référence (Docs/section/univers
   (cartes catégories).jfif) : sept tuiles, mêmes proportions — voir le
   commentaire dans index.html pour le détail. Contenu réel uniquement,
   voir univers() dans accueil.js pour ce qui est calculé.
   ========================================================================= */

.bento {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  grid-template-rows: auto auto auto;
  gap: 12px;
}
.bento__tile {
  position: relative;
  display: flex; flex-direction: column;
  padding: clamp(16px, 2vw, 22px);
  border-radius: var(--r);
  background:
    radial-gradient(240px 180px at 88% -12%, rgba(0, 159, 227, .16) 0%, transparent 62%),
    linear-gradient(160deg, #141225 0%, #0c0a17 55%, #050308 100%);
  border: 1px solid var(--line-2);
  overflow: hidden;
  transition: transform .3s var(--ease), border-color .3s var(--ease), box-shadow .3s var(--ease);
}
.bento__tile:hover {
  transform: translateY(-4px);
  border-color: rgba(79, 195, 240, .3);
  box-shadow: 0 26px 50px -34px rgba(0, 0, 0, .6);
}

.bento__tile--a { grid-column: 1 / span 1; grid-row: 1 / span 1; min-height: 150px; }
.bento__tile--b { grid-column: 2 / span 1; grid-row: 1 / span 1; align-items: center; justify-content: center; }
.bento__tile--c { grid-column: 3 / span 2; grid-row: 1 / span 1; justify-content: space-between; }
.bento__tile--d { grid-column: 1 / span 2; grid-row: 2 / span 2; justify-content: space-between; }
.bento__tile--e { grid-column: 3 / span 1; grid-row: 2 / span 1; justify-content: center; }
.bento__tile--g { grid-column: 4 / span 1; grid-row: 2 / span 1; justify-content: center; }
.bento__tile--f { grid-column: 3 / span 2; grid-row: 3 / span 1; }

/* --- tuile A : garantie, avec un petit « reçu » imbriqué — la carte dans
   la carte de la référence (« +$2400 / Has been received at your bank »),
   pas juste une icône et du texte à plat. --- */
.bento__eyebrow {
  font-size: .74rem; color: var(--tx-3); line-height: 1.4; max-width: 18ch;
}
.bento__recu {
  display: flex; align-items: center; gap: 12px;
  margin-top: auto; padding: 12px; border-radius: 12px;
  background: rgba(var(--sur-rgb), .035); border: 1px solid var(--line-2);
  box-shadow: 0 14px 28px -18px rgba(0, 0, 0, .7);
}
.bento__recu-ic {
  display: grid; place-items: center; flex: none;
  width: 34px; height: 34px; border-radius: 9px;
  background: var(--navy); color: var(--cyan-2);
}
.bento__recu-ic .ic { width: 15px; height: 15px; }
.bento__recu-txt { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.bento__recu-titre { font-size: 1.05rem; font-weight: 800; color: var(--tx-1); letter-spacing: -.01em; }
.bento__recu-sous { font-size: .7rem; color: var(--tx-3); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.bento__mini { font-size: .72rem; color: var(--tx-3); margin-top: 4px; }
.bento__mini--centre { text-align: center; margin-top: 12px; }
.bento__fleche {
  position: absolute; right: 16px; bottom: 16px;
  display: grid; place-items: center;
  width: 28px; height: 28px; border-radius: 50%;
  border: 1px solid var(--line-2); color: var(--tx-2);
  transition: background .3s var(--ease), color .3s var(--ease), border-color .3s var(--ease);
}
.bento__fleche svg { width: 13px; height: 13px; }
.bento__tile--a:hover .bento__fleche { background: var(--cyan-2); color: var(--navy-ink); border-color: var(--cyan-2); }
.bento__tile--a { padding-bottom: 60px; }

/* --- tuile B : marques, puces empilées en cartes (pas des ronds) --- */
.bento__chips { display: flex; }
.bento__chips span {
  display: grid; place-items: center;
  width: 42px; height: 42px; border-radius: 11px;
  background: var(--mist-2); border: 2px solid var(--paper);
  font-size: .62rem; font-weight: 800; color: var(--tx-1);
  margin-left: -14px;
  transform: rotate(var(--rot, 0deg));
  box-shadow: 0 10px 20px -6px rgba(0, 0, 0, .55);
}
.bento__chips span:nth-child(1) { margin-left: 0; --rot: -9deg; z-index: 1; }
.bento__chips span:nth-child(2) { --rot: 0deg; z-index: 2; }
.bento__chips span:nth-child(3) { --rot: 9deg; z-index: 3; background: var(--navy); color: var(--cyan-2); }

/* --- titres : gabarit commun, poussé beaucoup plus grand sur les tuiles
   qui portent un vrai titre (C, E, F) — l'écart de taille avec les
   libellés .bento__mini est ce qui donne le ton « soigné » de la
   référence, pas des tailles toutes proches les unes des autres. --- */
.bento__titre { font-size: .96rem; font-weight: 800; letter-spacing: -.02em; color: var(--tx-1); }
.bento__titre em { font-style: normal; color: var(--cyan-2); }
.bento__titre--grand { font-size: clamp(1.3rem, 1.6vw, 1.55rem); line-height: 1.15; letter-spacing: -.025em; }

/* --- tuile C : réseau / carte, avec la pastille de ville sur le point
   du siège — comme le pavé « Argentina » posé sur la carte de la
   référence. --- */
/* Hauteur ferme plutôt que `flex: 1` : un <svg> sans width/height HTML
   (seulement du CSS) retombe sur son intrinsèque par défaut (300×150) pour
   le calcul de taille du conteneur flex — ça gonflait toute la ligne de la
   grille bento bien au-delà de ce qu'affichaient les autres tuiles. */
.bento__carte { position: relative; height: 108px; margin: 10px 0; }
.bento__carte-pill {
  position: absolute; transform: translate(-50%, -160%);
  padding: 5px 11px; border-radius: 999px;
  background: rgba(16, 11, 51, .7); border: 1px solid rgba(var(--sur-rgb), .18);
  backdrop-filter: blur(10px); font-size: .64rem; font-weight: 700; color: #fff;
  white-space: nowrap;
}
.bento__legende { font-size: .78rem; color: var(--tx-3); }
.bento__legende b { color: var(--tx-1); font-weight: 700; }

/* --- tuile D : grand chiffre, lueur bleue dramatique (comme le « 88% »
   de la référence) plutôt que le halo discret des autres tuiles. --- */
.bento__tile--d {
  background:
    radial-gradient(560px 400px at 50% -14%, rgba(0, 159, 227, .6) 0%, rgba(0, 159, 227, .14) 45%, transparent 74%),
    linear-gradient(180deg, #0a0714 0%, #050308 60%, #000000 100%);
}
.bento__phrase { font-size: .84rem; color: rgba(var(--sur-rgb), .72); max-width: 26ch; }
.bento__nombre { font-size: clamp(4rem, 7vw, 5.6rem); font-weight: 800; color: var(--sur-sombre); line-height: .95; letter-spacing: -.04em; margin-top: auto; }
.bento__d-bas { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-top: 14px; }
.bento__nombre-mini {
  font-size: .74rem; font-weight: 700; letter-spacing: .06em; text-transform: uppercase;
  color: rgba(var(--sur-rgb), .55);
}
/* --- interrupteurs « adapté à mon usage » (tuiles D et E) --------------
   Autrefois purement décoratifs ; ce sont maintenant de vrais boutons qui
   rouvrent les questions du concierge (.js-ouvrir-conseiller). Éteints tant
   que le visiteur n'a rien dit de son usage, allumés ensuite — l'état est
   posé par le concierge (data-actif, aria-checked). */
.bento__toggle {
  display: inline-flex; align-items: center; flex: none;
  width: 38px; height: 22px; border-radius: 999px;
  background: rgba(var(--sur-rgb), .16); padding: 3px;
  transition: background .3s var(--ease);
}
.bento__toggle i {
  display: block; width: 16px; height: 16px; border-radius: 50%;
  background: rgba(var(--sur-rgb), .7);
  transition: transform .35s var(--ease-spring), background .3s var(--ease);
}
.bento__toggle[data-actif="true"] { background: var(--cyan-2); }
.bento__toggle[data-actif="true"] i { transform: translateX(16px); background: var(--navy-ink); }
button.bento__toggle { position: relative; z-index: 2; cursor: pointer; }
button.bento__toggle:hover { box-shadow: 0 0 0 4px rgba(0, 159, 227, .18); }

.bento__bascule-usage { position: relative; z-index: 2; display: inline-flex; align-items: center; gap: 9px; }
.bento__bascule-mot {
  font-size: .68rem; font-weight: 700; letter-spacing: .06em; text-transform: uppercase;
  color: rgba(var(--sur-rgb), .55);
}

/* Lien étiré : toute la tuile D mène au catalogue, sauf l'interrupteur qui
   est posé au-dessus (z-index 2). */
.bento__etire { position: absolute; inset: 0; z-index: 1; border-radius: inherit; }
.bento__tile--d > :not(.bento__etire) { position: relative; }
.bento__tile--d .bento__d-bas { z-index: 2; pointer-events: none; }
.bento__tile--d .bento__bascule-usage { pointer-events: auto; }

/* --- tuile E : la tuile entière est un bouton --- */
button.bento__tile { font: inherit; text-align: left; cursor: pointer; width: 100%; }
.bento__tile--e .bento__toggle { margin-bottom: 14px; }
.bento__tile--e .bento__titre, .bento__tile--e .bento__mini { display: block; }
.bento__tile--e:hover .bento__mini { color: var(--tx-1); }

/* --- tuile G : villes, chiffre dans un badge élevé (comme le petit
   panneau « 12 » de la référence) plutôt qu'un nombre nu. --- */
.bento__badge-nb {
  display: grid; place-items: center;
  width: 52px; height: 52px; margin: 10px 0; border-radius: 13px;
  background: linear-gradient(160deg, #1c1a33 0%, #0d0c18 100%);
  border: 1px solid var(--line-2); box-shadow: 0 14px 26px -14px rgba(0, 0, 0, .75);
  font-size: 1.3rem; font-weight: 800; color: var(--cyan-2);
  font-variant-numeric: tabular-nums;
}

/* --- tuile F : trois familles + carte pleine couleur (comme la carte
   « Audience Growth » bleue de la référence), plutôt qu'une répartition
   chiffrée — pas de tendance réelle à afficher, un CTA franc à la place. */
.bento__tile--f {
  flex-direction: row; align-items: center; justify-content: space-between; gap: 16px;
}
.bento__asterisque { position: absolute; top: 16px; left: 18px; font-size: 1.1rem; color: var(--tx-3); }
.bento__tile--f .bento__titre { padding-left: 26px; flex: 1 1 auto; }
.bento__carte-cta {
  position: relative; z-index: 1; flex: none;
  display: grid; grid-template-columns: 1fr auto; align-items: center; column-gap: 14px; row-gap: 4px;
  padding: 14px 18px; border-radius: 12px;
  background: var(--cyan); color: #04263A;
  transition: transform .3s var(--ease);
}
.bento__tile--f:hover .bento__carte-cta { transform: translateX(4px); }
.bento__carte-cta-mini { grid-column: 1 / -1; font-size: .64rem; font-weight: 700; letter-spacing: .1em; text-transform: uppercase; opacity: .75; }
.bento__carte-cta-gros { font-size: 1.05rem; font-weight: 800; white-space: nowrap; }
.bento__carte-cta svg { width: 15px; height: 15px; }

@media (max-width: 900px) {
  .bento { grid-template-columns: repeat(2, 1fr); }
  .bento__tile--a { grid-column: 1; grid-row: 1; }
  .bento__tile--b { grid-column: 2; grid-row: 1; }
  .bento__tile--c { grid-column: 1 / span 2; grid-row: 2; }
  .bento__tile--d { grid-column: 1 / span 2; grid-row: 3; }
  .bento__tile--e { grid-column: 1; grid-row: 4; }
  .bento__tile--g { grid-column: 2; grid-row: 4; }
  .bento__tile--f { grid-column: 1 / span 2; grid-row: 5; flex-direction: column; align-items: flex-start; }
}
@media (max-width: 560px) {
  .bento { grid-template-columns: 1fr; }
  .bento__tile--a, .bento__tile--b, .bento__tile--c, .bento__tile--d,
  .bento__tile--e, .bento__tile--g, .bento__tile--f { grid-column: 1; grid-row: auto; }
  .bento__tile--f { flex-direction: column; align-items: flex-start; }
}

/* =========================================================================
   11. CARTE PRODUIT
   ========================================================================= */

.grille-produits {
  display: grid;
  gap: clamp(14px, 2vw, 22px);
  grid-template-columns: repeat(auto-fill, minmax(238px, 1fr));
}

.carte {
  display: flex; flex-direction: column;
  background: var(--paper);
  border: 1px solid var(--line-2);
  border-radius: var(--r);
  overflow: hidden;
  transition: transform .42s var(--ease-expo), box-shadow .42s var(--ease-expo), border-color .3s var(--ease);
}
.carte:hover {
  transform: translateY(-7px);
  border-color: rgba(0, 159, 227, .45);
  box-shadow: 0 30px 54px -28px rgba(18, 19, 43, .38), 0 0 0 1px rgba(0, 159, 227, .08),
              0 16px 40px -22px var(--glow-cyan-doux);
}

/* Sans vraie photo, le dessin ne flotte plus seul sur un fond clair (c'est
   ce qui lisait comme un pictogramme oublié) : il est posé sur le même
   dégradé de marque que le hero et les bandes sombres du site, avec une
   fine trame en fond — une tuile qui a l'air dessinée exprès, pas un
   placeholder. */
.carte__visuel {
  position: relative;
  display: grid; place-items: center;
  aspect-ratio: 4 / 3;
  background: var(--nuit);
  border-bottom: 1px solid var(--line-2);
  overflow: hidden;
}
.carte__visuel::before {
  content: ""; position: absolute; inset: 0;
  background-image:
    linear-gradient(rgba(var(--sur-rgb), .06) 1px, transparent 1px),
    linear-gradient(90deg, rgba(var(--sur-rgb), .06) 1px, transparent 1px);
  background-size: 24px 24px;
}
.carte__illus {
  position: relative; width: 46%; color: rgba(var(--sur-rgb), .94);
  filter: drop-shadow(0 10px 22px rgba(6, 5, 20, .4));
  transition: transform .38s var(--ease);
}
.carte__illus .il-a { color: var(--cyan-2); }
.carte:hover .carte__illus { transform: scale(1.08) rotate(-1.5deg); }
/* Une vraie photo, quand elle existe, recouvre le dessin. */
.carte__visuel img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }

.etiq {
  position: absolute; top: 11px; left: 11px;
  padding: 5px 11px; border-radius: 999px;
  font-size: .67rem; font-weight: 800; letter-spacing: .07em; text-transform: uppercase;
  background: var(--navy); color: #fff;
}
.etiq--promo   { background: var(--promo); }
.etiq--nouveau { background: var(--cyan); color: #04263A; }
.etiq--best    { background: var(--navy); }
.etiq--remise  { left: auto; right: 11px; background: #fff; color: var(--promo); border: 1px solid currentColor; }

.carte__corps { display: flex; flex-direction: column; gap: 9px; padding: 17px 17px 18px; flex: 1; }

.carte__marque {
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
  font-size: .71rem; font-weight: 700; letter-spacing: .12em; text-transform: uppercase;
  color: var(--tx-3);
}
.jeton {
  padding: 3px 8px; border-radius: 5px;
  font-size: .63rem; letter-spacing: .06em;
  background: var(--mist-2); color: var(--tx-2);
}
.jeton--recond { background: rgba(0, 159, 227, .13); color: var(--cyan-ink); }

.carte__nom {
  font-size: 1rem; font-weight: 700; line-height: 1.32; letter-spacing: -.015em;
  color: var(--tx-1);
}
.carte__nom a:hover { color: var(--tx-1); }

.carte__resume {
  font-size: .84rem; line-height: 1.6; color: var(--tx-2);
  display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical;
  line-clamp: 3; overflow: hidden;
}

.carte__pied {
  display: flex; align-items: flex-end; justify-content: space-between; gap: 10px;
  margin-top: auto; padding-top: 10px;
}
.carte__prix { display: flex; flex-direction: column; line-height: 1.25; }
.carte__barre { font-size: .75rem; color: var(--tx-3); text-decoration: line-through; }
.carte__actuel { font-size: 1.08rem; font-weight: 800; color: var(--tx-1); letter-spacing: -.01em; }
.carte__unite { font-size: .7rem; color: var(--tx-3); }

.stock { display: inline-flex; align-items: center; gap: 6px; font-size: .74rem; font-weight: 600; }
.stock__point { width: 7px; height: 7px; border-radius: 50%; background: currentColor; flex: none; }
.stock--moyen   { color: var(--ok); }
.stock--faible  { color: var(--alerte); }
.stock--rupture { color: var(--tx-3); }

.btn--carte {
  --btn-fond: var(--mist);
  --btn-txt: var(--navy);
  width: 100%; padding: 11px 14px; font-size: .82rem;
  margin-top: 4px;
}
.btn--carte:hover { --btn-fond: var(--navy); --btn-txt: #fff; box-shadow: none; }
.btn--carte.est-dedans { --btn-fond: rgba(0, 159, 227, .14); --btn-txt: var(--cyan-ink); }
.btn--carte.est-ajoute { --btn-fond: var(--ok); --btn-txt: #fff; }

/* --- résultat vide --- */
.vide {
  grid-column: 1 / -1;
  display: grid; justify-items: center; gap: 12px;
  padding: clamp(46px, 7vw, 84px) 24px;
  text-align: center;
  background: var(--mist); border-radius: var(--r);
}
.vide .ic { width: 38px; height: 38px; color: var(--tx-3); }
.vide__titre { font-size: 1.14rem; font-weight: 800; color: var(--tx-1); }
.vide__txt { font-size: .92rem; color: var(--tx-2); max-width: 44ch; }

/* =========================================================================
   12. CATALOGUE — filtres et barre d'outils
   ========================================================================= */

.cat-page { display: grid; gap: clamp(20px, 3vw, 34px); align-items: start; }

.filtres {
  display: grid; gap: 24px;
  padding: 22px;
  background: var(--paper);
  border: 1px solid var(--line-2);
  border-radius: var(--r);
}
.filtres__bloc { display: grid; gap: 11px; }
.filtres__titre {
  display: flex; align-items: center; justify-content: space-between;
  font-size: .71rem; font-weight: 800; letter-spacing: .16em; text-transform: uppercase;
  color: var(--tx-1);
}
.filtres__liste { display: grid; gap: 3px; max-height: 268px; overflow-y: auto; margin-inline: -6px; padding-inline: 6px; }

.opt {
  display: flex; align-items: center; gap: 10px;
  padding: 7px 9px; border-radius: 8px;
  font-size: .86rem; color: var(--tx-2);
  cursor: pointer;
  transition: background-color .16s var(--ease);
}
.opt:hover { background: var(--mist); }
.opt input { accent-color: var(--navy); width: 16px; height: 16px; flex: none; cursor: pointer; }
.opt__nom { flex: 1; }
.opt__nb { font-size: .74rem; color: var(--tx-3); font-variant-numeric: tabular-nums; }
.opt:has(input:checked) { color: var(--tx-1); font-weight: 600; }

/* Curseur de prix : deux poignées superposées sur une même piste. */
.prix-plage { display: grid; gap: 12px; }
.prix-plage__val {
  display: flex; justify-content: space-between;
  font-size: .82rem; font-weight: 700; color: var(--tx-1);
  font-variant-numeric: tabular-nums;
}
.prix-plage__piste { position: relative; height: 26px; }
.prix-plage__piste::before {
  content: ""; position: absolute; left: 0; right: 0; top: 11px; height: 4px;
  border-radius: 2px; background: var(--mist-2);
}
.prix-plage__actif {
  position: absolute; top: 11px; height: 4px; border-radius: 2px;
  background: var(--cyan);
}
.prix-plage input[type="range"] {
  position: absolute; inset: 0; width: 100%; height: 26px;
  -webkit-appearance: none; appearance: none;
  background: none; pointer-events: none; margin: 0;
}
.prix-plage input[type="range"]::-webkit-slider-thumb {
  -webkit-appearance: none; appearance: none;
  width: 19px; height: 19px; border-radius: 50%;
  background: #fff; border: 2.5px solid var(--navy);
  cursor: grab; pointer-events: auto;
  box-shadow: 0 2px 7px rgba(18, 19, 43, .3);
}
.prix-plage input[type="range"]::-moz-range-thumb {
  width: 19px; height: 19px; border-radius: 50%;
  background: #fff; border: 2.5px solid var(--navy);
  cursor: grab; pointer-events: auto;
}

/* --- barre d'outils au-dessus de la grille --- */
.outils {
  display: flex; flex-wrap: wrap; align-items: center; gap: 12px;
  margin-bottom: 20px;
}
.recherche {
  position: relative; flex: 1 1 240px; min-width: 0;
}
.recherche input {
  width: 100%; padding: 13px 42px 13px 44px;
  border: 1px solid var(--line); border-radius: 999px;
  background: var(--paper);
  font-size: .9rem;
  transition: border-color .2s var(--ease), box-shadow .2s var(--ease);
}
.recherche input:focus {
  outline: none; border-color: var(--navy);
  box-shadow: 0 0 0 4px rgba(48, 39, 132, .12);
}
.recherche__ic {
  position: absolute; left: 16px; top: 50%; transform: translateY(-50%);
  color: var(--tx-3); width: 19px; height: 19px;
}
.recherche__x {
  position: absolute; right: 12px; top: 50%; transform: translateY(-50%);
  display: grid; place-items: center; width: 26px; height: 26px;
  border-radius: 50%; color: var(--tx-3);
}
.recherche__x:hover { background: var(--mist); color: var(--tx-1); }

.select-tri {
  padding: 12px 16px; padding-right: 38px;
  border: 1px solid var(--line); border-radius: 999px;
  background: var(--paper) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%23B9BCDA' stroke-width='2' stroke-linecap='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E") no-repeat right 15px center;
  font-size: .86rem; font-weight: 600;
  appearance: none; cursor: pointer;
}

.compte-res { font-size: .86rem; color: var(--tx-2); margin-left: auto; }
.compte-res b { color: var(--tx-1); font-weight: 800; }

.btn-filtres { display: none; }

/* --- jetons de filtres actifs --- */
.actifs { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 18px; }
.actif {
  display: inline-flex; align-items: center; gap: 7px;
  padding: 6px 8px 6px 13px; border-radius: 999px;
  background: rgba(48, 39, 132, .09);
  font-size: .78rem; font-weight: 600; color: var(--tx-1);
}
.actif button { display: grid; place-items: center; width: 18px; height: 18px; border-radius: 50%; opacity: .6; }
.actif button:hover { opacity: 1; background: rgba(48, 39, 132, .18); }
.actif .ic { width: 12px; height: 12px; }

/* --- sous-catégories dépliées sous la catégorie cochée --- */
.opt-sous {
  display: grid; gap: 2px;
  margin: 2px 0 6px 13px;
  padding-left: 11px;
  border-left: 2px solid var(--mist-2);
}
.opt--sous { font-size: .82rem; padding-block: 6px; }

.actif--tout { background: none; color: var(--tx-3); font-weight: 600; padding: 6px 11px; }
.actif--tout:hover { color: var(--promo); }

.actifs-nb {
  display: grid; place-items: center;
  min-width: 19px; height: 19px; padding: 0 5px;
  border-radius: 999px; background: var(--navy); color: #fff;
  font-size: .68rem; font-weight: 800;
}
.actifs-nb[hidden] { display: none; }

.charger { display: grid; justify-items: center; margin-top: 30px; }
.charger[hidden] { display: none; }

.filtres__fermer { display: none; width: 100%; margin-bottom: 6px; }

/* --- en-tête de page (bandeau sombre court) --- */
.entete-page {
  /* Même logique que le padding du hero de l'accueil : la nav flotte en
     transparence par-dessus cette bande, il lui faut donc sa hauteur en
     plus du rythme habituel. */
  padding-block: calc(var(--nav-h) + clamp(30px, 4vw, 50px)) clamp(62px, 8vw, 104px);
  overflow: hidden;
}
.entete-page .chapeau { max-width: 58ch; }
/* Même profondeur que le hero de l'accueil, en plus léger : une seule tache
   de lumière plutôt que trois halos en dérive — ces bandeaux sont plus
   courts et se répètent sur huit pages, inutile d'y répéter le plein jeu. */
.entete-page::before {
  content: "";
  position: absolute; z-index: -1;
  top: -35%; right: -8%;
  width: min(52vw, 620px); aspect-ratio: 1;
  background: radial-gradient(circle, var(--cyan) 0%, transparent 68%);
  filter: blur(80px);
  opacity: .28;
  pointer-events: none;
}

/* Mot fantôme en filigrane — repris à la lettre de la référence contact
   (Docs/section/contact dili tech.jfif). Scopé à cette variante plutôt
   qu'à .entete-page entier : les sept autres bandeaux de page restent sur
   leur simple tache de lumière, plus légère.
   Ancré près du haut (pas un pourcentage de la hauteur totale de la
   section) : cartes et formulaire vivent maintenant dans la même bande que
   le titre, donc la section est bien plus haute qu'à l'origine — un
   centrage vertical global posait le mot fantôme au milieu du formulaire
   plutôt que derrière le titre, comme sur la référence. */
.entete-page__fantome {
  position: absolute; z-index: -1; left: 0; right: 0;
  top: clamp(84px, 13vw, 150px);
  font-family: var(--font); font-weight: 800; text-transform: uppercase;
  font-size: clamp(5rem, 15vw, 12rem); line-height: 1; letter-spacing: -.04em;
  text-align: center; white-space: nowrap; pointer-events: none;
  /* Aplat plein à faible opacité — pas un contour (-webkit-text-stroke) :
     c'est ainsi que le code source v0 du client construit ce mot, sur un
     vert qu'on ramène ici au marine de la charte. */
  color: rgba(79, 66, 170, .16);
}
@media (max-width: 640px) { .entete-page__fantome { display: none; } }

/* --- pastille + titre au-dessus des cartes/formulaire --- */
.contact-tete { position: relative; z-index: 1; margin-bottom: clamp(32px, 4vw, 48px); }
.contact-pill {
  display: inline-flex; align-items: center; gap: 8px;
  padding: 7px 14px; margin-bottom: 16px; border-radius: 999px;
  background: rgba(var(--sur-rgb), .06); border: 1px solid var(--line-s2);
  font-size: .72rem; font-weight: 700; letter-spacing: .04em; color: var(--sur-sombre);
}
.contact-pill .ic { width: 13px; height: 13px; color: var(--cyan-2); }
.contact__form-note { color: var(--tx-2); font-size: .92rem; margin-bottom: 22px; max-width: 52ch; }

/* =========================================================================
   13. FICHE PRODUIT
   ========================================================================= */

.fil { display: flex; flex-wrap: wrap; align-items: center; gap: 7px; font-size: .8rem; color: var(--tx-3); margin-bottom: 22px; }
.fil a:hover { color: var(--tx-1); }
.fil .ic { width: 13px; height: 13px; opacity: .5; }

.fiche { display: grid; gap: clamp(26px, 4vw, 52px); align-items: start; }

.fiche__visuel {
  position: relative;
  display: grid; place-items: center;
  aspect-ratio: 4 / 3;
  background: linear-gradient(168deg, var(--mist) 0%, var(--paper) 100%);
  border: 1px solid var(--line-2); border-radius: var(--r);
  overflow: hidden;
}
.fiche__visuel .carte__illus { width: 58%; }
.fiche__visuel img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }

.fiche__marque { font-size: .76rem; font-weight: 700; letter-spacing: .16em; text-transform: uppercase; color: var(--cyan-ink); }
.fiche h1 {
  font-size: clamp(1.6rem, 3.4vw, 2.5rem); font-weight: 800;
  letter-spacing: -.03em; line-height: 1.1; color: var(--tx-1);
  margin-top: 9px;
}
.fiche__resume { margin-top: 16px; font-size: 1.02rem; color: var(--tx-2); }

.fiche__prix { display: flex; align-items: baseline; gap: 12px; flex-wrap: wrap; margin-top: 24px; }
.fiche__prix .actuel { font-size: clamp(1.7rem, 3.4vw, 2.3rem); font-weight: 800; color: var(--tx-1); letter-spacing: -.03em; }
.fiche__prix .barre { font-size: 1.02rem; color: var(--tx-3); text-decoration: line-through; }
.fiche__prix .gain { padding: 4px 11px; border-radius: 999px; background: rgba(214, 22, 90, .12); color: var(--promo); font-size: .78rem; font-weight: 800; }

.fiche__mention { font-size: .8rem; color: var(--tx-3); margin-top: 6px; }

.fiche__achat { display: flex; flex-wrap: wrap; gap: 11px; margin-top: 24px; }
.fiche__achat .qte { flex: none; }
.fiche__achat .btn { flex: 1 1 210px; }

.fiche__points { display: grid; gap: 11px; margin-top: 26px; padding-top: 24px; border-top: 1px solid var(--line-2); }
.fiche__point { display: flex; gap: 11px; align-items: flex-start; font-size: .88rem; color: var(--tx-2); }
.fiche__point .ic { width: 19px; height: 19px; color: var(--cyan-ink); margin-top: 2px; }
.fiche__point b { color: var(--tx-1); font-weight: 700; }

/* --- tableau de caractéristiques --- */
.specs { width: 100%; border-collapse: collapse; }
.specs tr { border-bottom: 1px solid var(--line-2); }
.specs tr:last-child { border-bottom: 0; }
.specs th, .specs td { padding: 13px 4px; text-align: left; font-size: .9rem; vertical-align: top; }
.specs th { font-weight: 600; color: var(--tx-2); width: 42%; }
.specs td { font-weight: 600; color: var(--tx-1); }

/* --- disponibilité par point de vente --- */
.dispo { display: grid; gap: 8px; }
.dispo__l {
  display: flex; align-items: center; gap: 12px;
  padding: 12px 15px;
  background: var(--paper); border: 1px solid var(--line-2); border-radius: var(--r-s);
}
.dispo__dr { font-size: 1.1rem; line-height: 1; flex: none; }
.dispo__ville { font-weight: 700; font-size: .92rem; }
.dispo__pays { font-size: .76rem; color: var(--tx-3); }
.dispo__etat { margin-left: auto; }
.dispo__l--siege { border-color: rgba(0, 159, 227, .35); background: rgba(0, 159, 227, .05); }

.encart-siege {
  display: flex; gap: 12px; align-items: flex-start;
  padding: 15px 17px; margin-top: 14px;
  background: var(--paper); border: 1px solid var(--line-2); border-radius: var(--r-s);
  font-size: .85rem; color: var(--tx-2);
}
.encart-siege .ic { width: 19px; height: 19px; color: var(--cyan-ink); flex: none; margin-top: 2px; }

/* --- compléments de la fiche --- */
.chargement { color: var(--tx-3); font-size: .92rem; padding-block: 40px; }

.fiche__note-visuel {
  display: flex; gap: 9px; align-items: flex-start;
  margin-top: 12px; font-size: .79rem; color: var(--tx-3); line-height: 1.55;
}
.fiche__note-visuel .ic { width: 16px; height: 16px; flex: none; margin-top: 2px; color: var(--cyan-ink); }

.fiche__usages {
  display: flex; flex-wrap: wrap; align-items: center; gap: 8px;
  margin-top: 22px; font-size: .84rem; color: var(--tx-2);
}
.jeton--usage {
  background: rgba(48, 39, 132, .09); color: var(--tx-1);
  font-size: .76rem; font-weight: 700; padding: 5px 11px; border-radius: 999px;
  transition: background-color .18s var(--ease), color .18s var(--ease);
}
.jeton--usage:hover { background: var(--navy); color: #fff; }

.fiche-bas { display: grid; gap: clamp(28px, 4vw, 46px); align-items: start; }
.fiche-bloc__intro { font-size: .86rem; color: var(--tx-2); margin: 12px 0 16px; }
.fiche-bloc .titre { margin-bottom: 4px; }
.stock--gros { font-size: .88rem; margin-bottom: 14px; }
.stock--gros .stock__point { width: 9px; height: 9px; }

/* Invite compacte de fin de panneau (fiche produit / article) — remplace la
   grande bande .nuit de clôture qu'avaient produit.html/article.html,
   disproportionnée une fois posée dans un panneau plutôt qu'en pleine page. */
.fiche-question p {
  display: flex; align-items: center; gap: 10px;
  padding: 16px 18px; border-radius: var(--r);
  background: var(--mist); font-size: .89rem; color: var(--tx-2);
}
.fiche-question .ic { width: 19px; height: 19px; color: var(--cyan-ink); flex: none; }
.fiche-question .lien-fleche { margin-left: auto; }

@media (min-width: 860px) {
  .fiche-bas { grid-template-columns: 1fr 1fr; }
}

/* =========================================================================
   14. COMPTEUR DE QUANTITÉ
   ========================================================================= */

.qte {
  display: inline-flex; align-items: center;
  border: 1px solid var(--line); border-radius: 999px;
  overflow: hidden; background: var(--paper);
}
.qte__b {
  display: grid; place-items: center;
  width: 38px; height: 42px; color: var(--tx-2);
  transition: background-color .16s var(--ease), color .16s var(--ease);
}
.qte__b:hover { background: var(--mist); color: var(--tx-1); }
.qte__b .ic { width: 15px; height: 15px; }
.qte__n {
  width: 46px; height: 42px; text-align: center;
  border: 0; background: none;
  font-size: .92rem; font-weight: 700;
  font-variant-numeric: tabular-nums;
  -moz-appearance: textfield;
}
.qte__n::-webkit-outer-spin-button, .qte__n::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
.qte__n:focus { outline: none; }

/* =========================================================================
   15. PANNEAU DE SÉLECTION
   ========================================================================= */

.panneau { position: fixed; inset: 0; z-index: 950; }
.panneau__voile {
  position: absolute; inset: 0;
  background: rgba(16, 11, 51, .5);
  backdrop-filter: blur(3px);
  opacity: 0; transition: opacity .3s var(--ease);
}
.panneau.est-ouvert .panneau__voile { opacity: 1; }

.panneau__boite {
  position: absolute; top: 0; right: 0; bottom: 0;
  width: min(462px, 100%);
  display: flex; flex-direction: column;
  background: var(--paper);
  box-shadow: -20px 0 60px -30px rgba(16, 11, 51, .6);
  transform: translateX(100%);
  transition: transform .34s var(--ease-net);
}
.panneau.est-ouvert .panneau__boite { transform: translateX(0); }

/* Variante large : fiche produit / lecture d'article, réutilise toute la
   mécanique du tiroir de sélection (voile, piège à focus, transition) sans
   rien dupliquer, juste une boîte plus large pour une fiche à deux colonnes. */
.panneau--large .panneau__boite { width: min(1080px, 100%); }
.panneau--large .panneau__corps { padding: 0; }
.panneau--large .panneau__corps > .sec--serre:first-child,
.panneau--large .panneau__corps > .sec--brume:first-child { padding-top: 28px; }

.panneau__tete {
  display: flex; align-items: flex-start; justify-content: space-between; gap: 14px;
  padding: 22px var(--pad) 18px;
  border-bottom: 1px solid var(--line-2);
  flex: none;
}
.panneau__sur { font-size: .69rem; font-weight: 700; letter-spacing: .2em; text-transform: uppercase; color: var(--cyan-ink); }
.panneau__titre { font-size: 1.42rem; font-weight: 800; letter-spacing: -.025em; color: var(--tx-1); }
.panneau__x {
  display: grid; place-items: center; width: 38px; height: 38px;
  border-radius: 50%; background: var(--mist); color: var(--tx-2); flex: none;
}
.panneau__x:hover { background: var(--mist-2); color: var(--tx-1); }

.panneau__corps { flex: 1; overflow-y: auto; padding: 18px var(--pad); overscroll-behavior: contain; }

.panneau__vide { display: grid; justify-items: center; gap: 12px; text-align: center; padding-block: 44px; }
.panneau__vide .ic { width: 42px; height: 42px; color: var(--tx-3); }
.panneau__vide-titre { font-size: 1.1rem; font-weight: 800; color: var(--tx-1); }
.panneau__vide-txt { font-size: .88rem; color: var(--tx-2); max-width: 34ch; }

.panneau__lignes { display: grid; gap: 4px; }
.pligne {
  display: grid; grid-template-columns: 58px 1fr auto; gap: 12px; align-items: start;
  padding: 14px 0; border-bottom: 1px solid var(--line-2);
}
.pligne__illus {
  display: grid; place-items: center;
  width: 58px; aspect-ratio: 1;
  background: var(--mist); border-radius: var(--r-s);
  color: var(--tx-1);
}
.pligne__illus svg { width: 78%; }
.pligne__illus { overflow: hidden; }
.pligne__illus img { width: 100%; height: 100%; object-fit: cover; }
.pligne__illus .il-a { color: var(--cyan); }
.pligne__nom { font-size: .89rem; font-weight: 700; line-height: 1.35; }
.pligne__nom:hover { color: var(--tx-1); }
.pligne__ref { font-size: .74rem; color: var(--tx-3); margin: 3px 0 9px; }
.pligne .qte__b { width: 30px; height: 32px; }
.pligne .qte__n { width: 36px; height: 32px; font-size: .84rem; }
.pligne__droite { display: grid; justify-items: end; gap: 8px; }
.pligne__total { font-size: .89rem; font-weight: 800; color: var(--tx-1); white-space: nowrap; }
.pligne__x { color: var(--tx-3); }
.pligne__x:hover { color: var(--promo); }
.pligne__x .ic { width: 17px; height: 17px; }

.panneau__vider {
  display: inline-flex; align-items: center; gap: 7px;
  margin: 14px 0 4px;
  font-size: .8rem; font-weight: 600; color: var(--tx-3);
}
.panneau__vider:hover { color: var(--promo); }

.panneau__form { display: grid; gap: 13px; margin-top: 26px; padding-top: 22px; border-top: 1px solid var(--line-2); }
.panneau__form-titre { font-size: .95rem; font-weight: 800; color: var(--tx-1); }
.panneau__form-aide { font-size: .8rem; color: var(--tx-3); margin-top: -8px; }

.panneau__pied {
  flex: none;
  padding: 16px var(--pad) 20px;
  border-top: 1px solid var(--line-2);
  background: var(--paper);
  display: grid; gap: 9px;
}
.panneau__total { display: flex; align-items: baseline; justify-content: space-between; }
.panneau__total span { font-size: .84rem; font-weight: 600; color: var(--tx-2); }
.panneau__total strong { font-size: 1.42rem; font-weight: 800; color: var(--tx-1); letter-spacing: -.02em; }
.panneau__mention { font-size: .74rem; color: var(--tx-3); margin-top: -4px; margin-bottom: 4px; }
.panneau__alerte {
  display: flex; gap: 9px; align-items: flex-start;
  padding: 11px 13px; border-radius: var(--r-s);
  background: rgba(180, 86, 10, .1); color: var(--alerte);
  font-size: .79rem; line-height: 1.5;
}
.panneau__alerte .ic { width: 17px; height: 17px; flex: none; margin-top: 1px; }

/* =========================================================================
   16. FORMULAIRES
   ========================================================================= */

.champ { display: grid; gap: 6px; }
.champ > span { font-size: .8rem; font-weight: 600; color: var(--tx-2); }
.champ > span b { color: var(--promo); }
.champ input, .champ textarea, .champ select {
  width: 100%;
  padding: 12px 14px;
  border: 1px solid var(--line); border-radius: var(--r-s);
  background: var(--paper);
  font-size: .92rem;
  transition: border-color .18s var(--ease), box-shadow .18s var(--ease);
}
.champ textarea { resize: vertical; min-height: 92px; }
.champ input::placeholder, .champ textarea::placeholder { color: var(--tx-3); }
.champ input:focus, .champ textarea:focus, .champ select:focus {
  outline: none; border-color: var(--navy);
  box-shadow: 0 0 0 4px rgba(48, 39, 132, .11);
}
.champ.est-erreur input, .champ.est-erreur textarea { border-color: var(--promo); box-shadow: 0 0 0 4px rgba(214, 22, 90, .1); }
.champ-duo { display: grid; gap: 13px; grid-template-columns: 1fr 1fr; }

/* --- page contact --- */
.contact { display: grid; gap: clamp(30px, 4vw, 52px); align-items: start; }
/* Le formulaire vit dans sa propre carte — .contact-form dans le code
   source v0 du client — plutôt que de poser ses champs à même le fond de
   la section, comme les cartes de coordonnées à côté. */
.contact__form form {
  display: grid; gap: 15px;
  padding: clamp(20px, 2.4vw, 28px);
  background: rgba(30, 26, 58, .35);
  border: 1px solid rgba(var(--sur-rgb), .12);
  border-radius: 14px;
  box-shadow: 0 0 0 1px rgba(0, 0, 0, .3), 0 20px 44px -18px rgba(0, 0, 0, .5);
}

.champ--groupe { border: 0; }
.champ--groupe legend {
  font-size: .8rem; font-weight: 600; color: var(--tx-2); margin-bottom: 9px; padding: 0;
}
.puces { display: flex; flex-wrap: wrap; gap: 8px; }
.puce { position: relative; display: inline-flex; }
/* Masquée sans être retirée du flux d'accessibilité. `position: absolute`
   seule ne suffit pas : la règle `.champ input { width: 100% }` la faisait
   alors mesurer toute la largeur du bloc conteneur, et la page débordait. */
.puce input {
  position: absolute; width: 1px; height: 1px;
  opacity: 0; pointer-events: none; margin: 0;
}
.puce span {
  display: inline-block;
  padding: 9px 15px; border-radius: 999px;
  border: 1px solid var(--line);
  font-size: .82rem; font-weight: 600; color: var(--tx-2);
  cursor: pointer;
  transition: all .18s var(--ease);
}
.puce span:hover { border-color: var(--navy); color: var(--tx-1); }
.puce input:checked + span { background: var(--navy); border-color: var(--navy); color: #fff; }
.puce input:focus-visible + span { outline: 3px solid var(--cyan); outline-offset: 3px; }

.form__mention { font-size: .79rem; color: var(--tx-3); line-height: 1.55; }
.form__actions { display: grid; gap: 10px; margin-top: 6px; }
@media (min-width: 560px) { .form__actions { grid-template-columns: 1fr 1fr; } }

/* --- rappel de la sélection jointe --- */
.rappel {
  display: grid; gap: 12px;
  padding: 17px 19px; margin-top: 4px;
  background: var(--mist); border-radius: var(--r);
}
.rappel--vide {
  display: flex; gap: 11px; align-items: flex-start;
  font-size: .85rem; color: var(--tx-2);
}
.rappel--vide .ic, .rappel__tete .ic { width: 19px; height: 19px; color: var(--cyan-ink); flex: none; }
.rappel--vide a { color: var(--cyan-ink); font-weight: 700; text-decoration: underline; }
.rappel__tete { display: flex; gap: 11px; align-items: center; font-size: .86rem; color: var(--tx-2); }
.rappel__tete b { color: var(--tx-1); }
.rappel__voir {
  margin-left: auto; font-size: .8rem; font-weight: 700; color: var(--cyan-ink);
  text-decoration: underline; white-space: nowrap;
}
.rappel__liste { display: grid; gap: 7px; padding-top: 12px; border-top: 1px solid var(--line-2); }
.rappel__liste li { display: flex; justify-content: space-between; gap: 14px; font-size: .84rem; color: var(--tx-2); }
.rappel__liste b { color: var(--tx-1); white-space: nowrap; }
.rappel__total {
  display: flex; justify-content: space-between; align-items: baseline;
  padding-top: 11px; border-top: 1px solid var(--line-2);
  font-size: .86rem; color: var(--tx-2);
}
.rappel__total b { font-size: 1.15rem; font-weight: 800; color: var(--tx-1); }

/* --- cartes de coordonnées ----------------------------------------------
   Portées du vrai code source v0 du client (Docs/contact/app/page.tsx +
   globals.css) plutôt que d'une capture d'écran : dégradé diagonal plutôt
   qu'un aplat, liseré intérieur, flèche pleine (pas juste bordée), la
   carte glisse vers la droite au survol plutôt que de se soulever.
   Couleurs du vert de leur maquette ramenées au marine/cyan de la charte ;
   tailles remises à une échelle lisible (la maquette d'origine descend
   jusqu'à du texte à 8px, une échelle de vignette, pas de production). --- */
.contact-cartes { display: grid; gap: 10px; margin-bottom: 14px; }
.contact-carte {
  /* `min-width: 0` : sans lui, une grille (comme un flex) refuse par défaut
     de rétrécir sous la taille intrinsèque du contenu — ici le libellé
     d'adresse en une seule ligne, assez long pour pousser la carte hors du
     viewport mobile et faire disparaître la flèche sur le bord. */
  min-width: 0;
  display: flex; align-items: center; gap: 14px;
  padding: 16px 18px;
  background: linear-gradient(105deg, rgba(36, 30, 74, .55) 0%, rgba(10, 9, 17, .75) 100%);
  border: 1px solid rgba(var(--sur-rgb), .1); border-radius: 12px;
  box-shadow: inset 0 1px rgba(var(--sur-rgb), .05);
  transition: border-color .25s var(--ease), transform .25s var(--ease);
}
.contact-carte:hover { border-color: rgba(79, 195, 240, .45); transform: translateX(4px); }
.contact-carte__ic {
  display: grid; place-items: center; flex: none;
  width: 40px; height: 40px; border-radius: 10px;
  border: 1px solid rgba(var(--sur-rgb), .14);
  color: var(--cyan-2);
}
.contact-carte__ic .ic { width: 18px; height: 18px; }
.contact-carte__txt { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.contact-carte__label { font-size: .66rem; font-weight: 700; letter-spacing: .1em; text-transform: uppercase; color: var(--tx-3); }
.contact-carte__valeur {
  font-size: .93rem; font-weight: 700; color: var(--tx-1);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.contact-carte__fleche {
  display: grid; place-items: center; flex: none;
  width: 32px; height: 32px; border-radius: 50%;
  background: rgba(var(--sur-rgb), .12); color: var(--sur-sombre);
  transition: background .25s var(--ease), color .25s var(--ease);
}
.contact-carte__fleche .ic { width: 14px; height: 14px; transform: rotate(-45deg); }
.contact-carte:hover .contact-carte__fleche { background: var(--cyan-2); color: var(--navy-ink); }

/* --- bande « contact » du pied de page --------------------------------
   Reprise à la lettre de la référence (Docs/section/contact dili tech.jfif) :
   texte fantôme, pastille, titre, cartes — au-dessus des colonnes de liens
   habituelles, sur toutes les pages. Les cartes elles-mêmes sont la règle
   .contact-carte de base (celle de la page contact, en pleine taille), pas
   une version compacte : c'est la fidélité au modèle qui prime ici, la
   grille passe juste à 3 colonnes pour ne pas les étirer sur toute la
   largeur du pied de page. */
.pied-contact {
  position: relative; isolation: isolate; overflow: hidden;
  /* Même fond que le hero de l'accueil (halos cyan/marine sur noir quasi
     pur) plutôt qu'un dégradé propre à cette bande — pas de motif « circuit »
     à petits carreaux ici, le hero n'en a pas non plus. */
  background: var(--nuit);
  padding-block: clamp(48px, 6vw, 76px);
}
.pied-contact__in { position: relative; z-index: 1; }
.pied-contact .contact-pill { margin-bottom: 18px; }
.pied-contact h2.titre--petit { margin-bottom: 10px; max-width: 22ch; }
.pied-contact__texte { color: var(--tx-2); font-size: .92rem; line-height: 1.5; max-width: 40ch; margin-bottom: 26px; }
.pied-contact .contact-cartes { margin-bottom: 0; }
/* Cadre v0 : le libellé en gras porte l'action (« Nous écrire »), la valeur
   redescend en second plan — inverse de la carte de la page Contact, où le
   libellé est une catégorie (« E-MAIL ») affichée en majuscules. */
.pied-contact .contact-carte__label {
  text-transform: none; letter-spacing: normal; font-size: .84rem; font-weight: 700; color: var(--tx-1);
}
.pied-contact .contact-carte__valeur { font-weight: 400; color: var(--tx-3); font-size: .82rem; }
/* Survol en dégradé (cyan → violet de la charte) sur le contour de la carte,
   plutôt qu'une simple teinte unie : technique du double fond, l'un en
   padding-box (le remplissage de la carte), l'autre en border-box (visible
   uniquement dans l'épaisseur du bord grâce à la couleur transparente). */
.pied-contact .contact-carte {
  border-color: transparent;
  background:
    linear-gradient(105deg, rgba(36, 30, 74, .55) 0%, rgba(10, 9, 17, .75) 100%) padding-box,
    linear-gradient(120deg, rgba(var(--sur-rgb), .12), rgba(var(--sur-rgb), .12)) border-box;
  transition: background .35s var(--ease), transform .25s var(--ease);
}
.pied-contact .contact-carte:hover {
  border-color: transparent;
  background:
    linear-gradient(105deg, rgba(36, 30, 74, .55) 0%, rgba(10, 9, 17, .75) 100%) padding-box,
    linear-gradient(120deg, var(--cyan-2), #302784) border-box;
  transform: translateX(4px);
}
@media (min-width: 780px) {
  .pied-contact .contact-cartes { grid-template-columns: repeat(3, 1fr); gap: 16px; }
}

/* --- traits obliques flanquant le mot fantôme, repris de la référence v0 -- */
.pied-contact__trait {
  position: absolute; z-index: 0; top: 0; width: 220px; height: 130px;
  border-top: 1px solid rgba(198, 229, 218, .16); opacity: .7; pointer-events: none;
}
.pied-contact__trait--gauche { left: -40px; transform: skew(35deg); border-radius: 0 0 0 60px; border-right: 1px solid rgba(198, 229, 218, .16); }
.pied-contact__trait--droite { right: -40px; transform: skew(-35deg); border-radius: 0 0 60px 0; border-left: 1px solid rgba(198, 229, 218, .16); }
@media (max-width: 780px) { .pied-contact__trait { display: none; } }

/* --- message rapide : formulaire court à côté des cartes, même moteur
   d'envoi que la page Contact (voir #brancherFormulaire dans chrome.js).
   Les cartes repassent à 1 colonne dès que le formulaire leur prend la
   moitié de la largeur, sous peine de les écraser sur tablette. --- */
.pied-contact__grille { display: grid; gap: 30px; }
@media (min-width: 980px) {
  .pied-contact__grille { grid-template-columns: .95fr 1.05fr; gap: 46px; align-items: start; }
  .pied-contact .contact-cartes { grid-template-columns: 1fr; }
}
.pied-contact__form {
  display: grid; gap: 13px; align-content: start;
  padding: clamp(20px, 2.4vw, 26px);
  background: rgba(30, 26, 58, .35);
  border: 1px solid rgba(var(--sur-rgb), .12);
  border-radius: 14px;
  box-shadow: 0 0 0 1px rgba(0, 0, 0, .3), 0 20px 44px -18px rgba(0, 0, 0, .5);
}
.pied-contact__form-titre {
  font-size: .71rem; font-weight: 800; letter-spacing: .16em; text-transform: uppercase;
  color: var(--cyan-2);
}
.pied-contact__form .btn { justify-content: center; }

/* --- blocs de coordonnées --- */
.contact__infos { display: grid; gap: 14px; }
.bloc-info {
  display: grid; gap: 9px; justify-items: start;
  padding: 22px 24px;
  background: var(--paper); border: 1px solid var(--line-2); border-radius: var(--r);
}
.bloc-info--photo {
  padding: 0; overflow: hidden; gap: 0; position: relative;
}
.bloc-info--photo img {
  width: 100%; height: 200px; object-fit: cover; object-position: 50% 38%; display: block;
}
.bloc-info--photo figcaption {
  padding: 14px 20px; font-size: .82rem; color: var(--tx-2); line-height: 1.5;
}
.bloc-info__titre {
  display: flex; align-items: center; gap: 9px;
  font-size: .71rem; font-weight: 800; letter-spacing: .16em; text-transform: uppercase;
  color: var(--tx-1);
}
.bloc-info__titre .ic { width: 17px; height: 17px; color: var(--cyan-ink); }
.bloc-info__gros { font-size: 1.05rem; font-weight: 700; color: var(--tx-1); }
.bloc-info__gros a:hover { color: var(--tx-1); }
.bloc-info__txt { font-size: .87rem; color: var(--tx-2); }
.bloc-info__liste { display: grid; gap: 8px; }
.bloc-info__liste li { display: flex; align-items: center; gap: 9px; font-size: 1rem; font-weight: 700; }
.bloc-info__liste a:hover { color: var(--tx-1); }
.bloc-info__horaires { display: grid; gap: 8px; width: 100%; }
.bloc-info__horaires li { display: flex; justify-content: space-between; gap: 16px; font-size: .87rem; color: var(--tx-2); }
.bloc-info__horaires b { color: var(--tx-1); }
.bloc-info__horaires .est-ferme, .bloc-info__horaires .est-ferme b { color: var(--tx-3); font-weight: 500; }


.ouverture { display: flex; align-items: flex-start; gap: 8px; font-weight: 600; }
.ouverture .stock__point { margin-top: .5em; }
.ouverture.est-ouvert { color: var(--ok); }
.ouverture.est-ferme { color: var(--tx-3); }

/* --- questions fréquentes --- */
.faq { display: grid; gap: 10px; max-width: 860px; }
.faq__i {
  background: var(--paper); border: 1px solid var(--line-2); border-radius: var(--r);
  overflow: hidden;
}
.faq__i summary {
  display: flex; align-items: center; gap: 16px;
  padding: 18px 22px;
  font-size: .98rem; font-weight: 700; color: var(--tx-1);
  cursor: pointer; list-style: none;
}
.faq__i summary::-webkit-details-marker { display: none; }
.faq__i summary span { flex: 1; }
.faq__ch { color: var(--tx-3); transition: transform .24s var(--ease); flex: none; }
.faq__i[open] .faq__ch { transform: rotate(180deg); }
.faq__i p { padding: 0 22px 20px; font-size: .92rem; line-height: 1.7; color: var(--tx-2); }

@media (min-width: 980px) {
  /* Coordonnées à gauche (plus étroites), formulaire à droite (plus large)
     — l'ordre de la référence, .contact__infos passé avant .contact__form
     dans le HTML. */
  .contact { grid-template-columns: .8fr 1.2fr; }
}

/* =========================================================================
   17. BLOCS ÉDITORIAUX
   ========================================================================= */

/* --- arguments (le « pourquoi Dilitech ») --- */
.args { display: grid; gap: 20px; }
.arg {
  position: relative;
  padding: clamp(22px, 2.6vw, 30px);
  border-radius: var(--r);
  background: rgba(var(--sur-rgb), .055);
  border: 1px solid var(--line-s2);
  /* Verre dépoli véritable plutôt qu'un simple aplat translucide : le flou
     capte ce qu'il y a derrière (les halos du fond), ce qui donne à la
     carte une épaisseur qu'un fond blanc à 5 % n'a pas. */
  backdrop-filter: blur(18px);
  -webkit-backdrop-filter: blur(18px);
  box-shadow: inset 0 1px 0 rgba(var(--sur-rgb), .14);
  transition: background-color .3s var(--ease), border-color .38s var(--ease-expo),
              transform .38s var(--ease-expo), box-shadow .38s var(--ease-expo);
}
.arg:hover {
  background: rgba(var(--sur-rgb), .09);
  border-color: rgba(0, 159, 227, .4);
  transform: translateY(-6px);
  box-shadow: inset 0 1px 0 rgba(var(--sur-rgb), .16), 0 22px 40px -22px rgba(0, 0, 0, .45),
              0 0 32px -8px var(--glow-cyan-doux);
}
.arg__n {
  font-size: .72rem; font-weight: 800; letter-spacing: .16em;
  color: var(--cyan-2); margin-bottom: 14px;
}
.arg__ic { width: 30px; height: 30px; color: var(--cyan-2); margin-bottom: 14px; }
.arg h3 { font-size: 1.12rem; font-weight: 700; letter-spacing: -.02em; margin-bottom: 9px; }
.arg p { font-size: .89rem; color: var(--sur-sombre-2); }

/* --- onglets (sélection du moment) --- */
.onglets {
  display: flex; gap: 5px; flex-wrap: wrap;
  padding: 5px;
  background: var(--paper);
  border: 1px solid var(--line-2);
  border-radius: 999px;
}
.onglet {
  padding: 9px 17px; border-radius: 999px;
  font-size: .83rem; font-weight: 700; color: var(--tx-2);
  transition: background-color .2s var(--ease), color .2s var(--ease);
}
.onglet:hover { color: var(--tx-1); }
.onglet.est-actif { background: var(--navy); color: #fff; }

/* --- services ---------------------------------------------------------
   Pas de photo possible ici (ce sont des prestations, pas des objets à
   photographier) : la matière vient d'un traitement éditorial — grand
   numéro en filigrane, icône agrandie, filet d'accent qui se déploie au
   survol — plutôt que du contenu, pour que la grille ait du relief sans
   rien inventer visuellement. */
.services { display: grid; gap: 18px; counter-reset: serv; }
.serv .lien-fleche { margin-top: 4px; justify-self: start; }
.serv {
  position: relative;
  display: grid; gap: 13px;
  padding: clamp(26px, 3vw, 38px);
  background: var(--paper); border: 1px solid var(--line-2); border-radius: var(--r);
  overflow: hidden;
  counter-increment: serv;
  transition: transform .28s var(--ease), box-shadow .28s var(--ease), border-color .28s var(--ease);
}
.serv::before {
  content: counter(serv, decimal-leading-zero);
  position: absolute; top: -.12em; right: 18px; z-index: 0;
  font-size: 4.6rem; font-weight: 800; letter-spacing: -.03em;
  color: var(--mist); pointer-events: none;
  transition: color .28s var(--ease);
}
.serv::after {
  content: ""; position: absolute; top: 0; left: 0; right: 0; height: 3px;
  background: linear-gradient(90deg, var(--navy), var(--cyan));
  transform: scaleX(0); transform-origin: left;
  transition: transform .35s var(--ease);
}
.serv:hover { transform: translateY(-4px); border-color: rgba(48, 39, 132, .2); box-shadow: 0 24px 44px -32px rgba(18, 19, 43, .5); }
.serv:hover::after { transform: scaleX(1); }
.serv > * { position: relative; z-index: 1; }
.serv__ic {
  display: grid; place-items: center;
  width: 56px; height: 56px; border-radius: 15px;
  background: linear-gradient(155deg, var(--cyan) 0%, var(--navy) 130%); color: #fff;
  box-shadow: 0 12px 24px -14px rgba(0, 159, 227, .55);
}
.serv__ic .ic { width: 26px; height: 26px; }
.serv h3 { font-size: 1.15rem; font-weight: 800; letter-spacing: -.02em; color: var(--tx-1); }
.serv p { font-size: .89rem; color: var(--tx-2); }
.serv ul { display: grid; gap: 6px; margin-top: 2px; }
.serv li { position: relative; padding-left: 19px; font-size: .85rem; color: var(--tx-2); }
.serv li::before {
  content: ""; position: absolute; left: 0; top: .62em;
  width: 7px; height: 7px; border-radius: 50%; background: var(--cyan);
}

/* --- bloc de service : texte d'un côté, illustration de l'autre --- */
.bloc-serv { display: grid; gap: clamp(28px, 4vw, 56px); align-items: center; }
.bloc-serv__txt .chapeau { margin-bottom: 24px; }
.bloc-serv__txt .btn { margin-top: 26px; }
.bloc-serv__vis {
  display: grid; place-items: center;
  aspect-ratio: 5 / 4;
  border-radius: var(--r);
  background: var(--nuit);
  color: var(--sur-sombre);
  overflow: hidden;
}
.bloc-serv__vis svg { width: 58%; stroke-width: 3.2; }
.bloc-serv__vis .il-a { color: var(--cyan-2); }

/* Le seul panneau du site qui montre une vraie photo plutôt qu'un dessin :
   le bloc « service après-vente », parce que c'est le seul endroit où le
   message est justement « une personne vous répond ». Photo Dilitech
   (visuel de communication recadré), pas une image d'agence. */
/* Aspect plus haut que les panneaux voisins (4/5 plutôt que 5/4) : le
   cadrage d'origine est un portrait serré, un panneau large aurait laissé
   trop de vide au-dessus des épaules. */
.bloc-serv__vis--photo { position: relative; background: var(--navy-3); aspect-ratio: 4 / 5; }
.bloc-serv__vis--photo img {
  width: 100%; height: 100%;
  object-fit: cover; object-position: 50% 26%;
  display: block;
}
.bloc-serv__vis--photo::after {
  content: "";
  position: absolute; inset: 0;
  background: linear-gradient(200deg, transparent 45%, rgba(16, 11, 51, .55) 100%);
  pointer-events: none;
}

@media (min-width: 860px) {
  .bloc-serv { grid-template-columns: 1.05fr .95fr; }
  /* Une section sur deux inverse l'ordre : le regard fait des allers-retours
     au lieu de descendre une colonne unique. */
  .bloc-serv--inv .bloc-serv__txt { order: 2; }
}

/* --- listes à puces des blocs de service --- */
.liste-p { display: grid; gap: 11px; }
.liste-p li { position: relative; padding-left: 26px; font-size: .95rem; color: var(--tx-2); }
.liste-p li b { color: var(--tx-1); font-weight: 700; }
.liste-p li::before {
  content: ""; position: absolute; left: 2px; top: .6em;
  width: 8px; height: 8px; border-radius: 50%;
  background: var(--cyan);
}

/* --- filières de formation --- */
.filieres { display: grid; gap: 14px; }
.filiere {
  display: flex; gap: 15px; align-items: flex-start;
  padding: 20px 22px;
  background: var(--paper); border: 1px solid var(--line-2); border-radius: var(--r);
  transition: transform .38s var(--ease-expo), border-color .3s var(--ease), box-shadow .38s var(--ease-expo);
}
.filiere:hover {
  transform: translateY(-6px);
  border-color: rgba(0, 159, 227, .4);
  box-shadow: 0 22px 40px -28px rgba(18, 19, 43, .35), 0 10px 26px -18px var(--glow-cyan-doux);
}
.filiere__ic {
  display: grid; place-items: center; flex: none;
  width: 42px; height: 42px; border-radius: 11px;
  background: rgba(0, 159, 227, .11); color: var(--cyan-ink);
}
.filiere__ic .ic { width: 21px; height: 21px; }
.filiere h3 { font-size: 1rem; font-weight: 800; color: var(--tx-1); margin-bottom: 4px; }
.filiere p { font-size: .87rem; color: var(--tx-2); }

@media (min-width: 700px) { .filieres { grid-template-columns: repeat(2, 1fr); } }

/* --- étapes numérotées --- */
.etapes { display: grid; gap: 18px; counter-reset: e; }
.etape {
  padding: clamp(20px, 2.4vw, 28px);
  border-radius: var(--r);
  background: rgba(var(--sur-rgb), .055);
  border: 1px solid var(--line-s2);
}
.etape__n {
  display: grid; place-items: center;
  width: 34px; height: 34px; border-radius: 50%;
  background: var(--cyan); color: #04263A;
  font-size: .88rem; font-weight: 800;
  margin-bottom: 14px;
}
.etape h3 { font-size: 1.06rem; font-weight: 700; margin-bottom: 8px; }
.etape p { font-size: .88rem; color: var(--sur-sombre-2); }

@media (min-width: 560px) { .etapes { grid-template-columns: repeat(2, 1fr); } }
@media (min-width: 980px) { .etapes { grid-template-columns: repeat(4, 1fr); } }

/* --- réseau de partenaires --- */
.reseau { display: grid; gap: 16px; }
.pdv {
  position: relative;
  display: grid; gap: 9px;
  padding: 22px;
  background: var(--paper); border: 1px solid var(--line-2); border-radius: var(--r);
  transition: transform .28s var(--ease), border-color .28s var(--ease), box-shadow .28s var(--ease);
}
.pdv:hover {
  transform: translateY(-7px);
  border-color: rgba(0, 159, 227, .4);
  box-shadow: 0 26px 48px -30px rgba(18, 19, 43, .4), 0 14px 32px -20px var(--glow-cyan-doux);
}
.pdv--siege { border-color: rgba(0, 159, 227, .4); background: linear-gradient(168deg, rgba(0, 159, 227, .07), transparent 62%); }
.pdv__tete { display: flex; align-items: center; gap: 11px; }
/* Pastille de code pays plutôt qu'un drapeau emoji : les indicateurs
   régionaux ne sont pas dessinés sous Windows, où ils retombent sur deux
   lettres nues. Un jeton dessiné est lisible partout. */
.pdv__dr, .dispo__dr {
  display: grid; place-items: center; flex: none;
  width: 38px; height: 38px; border-radius: 11px;
  background: var(--mist-2); color: var(--tx-1);
  font-size: .74rem; font-weight: 800; letter-spacing: .06em;
}
.pdv--siege .pdv__dr, .dispo__l--siege .dispo__dr { background: var(--navy); color: #fff; }
.dispo__dr { width: 32px; height: 32px; border-radius: 9px; font-size: .68rem; }
.pdv__ville { font-size: 1.14rem; font-weight: 800; letter-spacing: -.02em; color: var(--tx-1); }
.pdv__pays { font-size: .78rem; color: var(--tx-3); }
.pdv__role {
  display: inline-block; padding: 4px 10px; border-radius: 999px;
  font-size: .68rem; font-weight: 800; letter-spacing: .09em; text-transform: uppercase;
  background: var(--mist); color: var(--tx-2);
  justify-self: start;
}
.pdv--siege .pdv__role { background: var(--cyan); color: #04263A; }
.pdv__note { font-size: .86rem; color: var(--tx-2); }
.pdv__lien { margin-top: auto; padding-top: 6px; justify-self: start; }
.pdv__refs { font-size: .88rem; color: var(--tx-2); }
.pdv__refs b { font-size: 1.32rem; font-weight: 800; color: var(--tx-1); }
.pdv__univers { display: flex; flex-wrap: wrap; gap: 6px; }
.pdv__univers span {
  padding: 4px 10px; border-radius: 999px;
  background: var(--mist); font-size: .73rem; font-weight: 600; color: var(--tx-2);
}

/* --- le siège --- */
.siege { display: grid; gap: clamp(26px, 4vw, 48px); align-items: start; }
.siege__txt .chapeau { margin-bottom: 26px; }

.siege__infos, .siege__horaires { display: grid; gap: 11px; margin-bottom: 24px; }
.siege__infos li, .siege__horaires li {
  display: flex; align-items: center; gap: 11px;
  font-size: .93rem; color: var(--tx-2);
}
.siege__infos .ic, .siege__horaires .ic { width: 18px; height: 18px; color: var(--cyan-ink); flex: none; }
.siege__infos a:hover { color: var(--tx-1); }
.siege__horaires li b { margin-left: auto; font-weight: 700; color: var(--tx-1); }
.siege__horaires .est-ferme { color: var(--tx-3); }
.siege__horaires .est-ferme b { color: var(--tx-3); font-weight: 600; }

.siege__stats { display: grid; gap: 12px; }
.siege__stat {
  padding: 22px 24px;
  background: var(--mist); border-radius: var(--r);
}
.siege__stat b {
  display: block;
  font-size: 2.1rem; font-weight: 800; line-height: 1.05;
  color: var(--tx-1); letter-spacing: -.03em;
}
.siege__stat span {
  font-size: .77rem; font-weight: 700; letter-spacing: .1em;
  text-transform: uppercase; color: var(--tx-3);
}
.siege__stat--large { background: var(--nuit); color: var(--sur-sombre); }
.siege__stat--large b { color: var(--sur-sombre); }
.siege__stat--large span { color: var(--cyan-2); }

@media (min-width: 700px) {
  .siege__stats { grid-template-columns: repeat(2, 1fr); }
  .siege__stat--large { grid-column: 1 / -1; }
}
@media (min-width: 980px) {
  .siege { grid-template-columns: 1.2fr .8fr; }
}

/* --- le stock en photo : preuve plutôt qu'affirmation ------------------
   Trois photos prises à l'entrepôt de Torokorobougou (pas des visuels
   d'agence) : la légende assume le grain d'une photo de téléphone plutôt
   que de la maquiller en studio, c'est ce qui la rend crédible. */
.siege-photos { margin-top: clamp(30px, 4vw, 52px); }
.siege-photos__legende {
  font-size: .71rem; font-weight: 800; letter-spacing: .16em; text-transform: uppercase;
  color: var(--cyan-ink); margin-bottom: 16px;
}
.siege-photos__grille {
  display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px;
}
.siege-photos__grille img {
  width: 100%; height: 260px; object-fit: cover;
  border-radius: var(--r-s);
  transition: transform .5s var(--ease-expo), box-shadow .5s var(--ease-expo);
}
.siege-photos__grille img:hover {
  transform: translateY(-4px);
  box-shadow: 0 22px 40px -24px rgba(18, 19, 43, .4);
}
@media (max-width: 700px) {
  .siege-photos__grille { grid-template-columns: 1fr; }
  .siege-photos__grille img { height: 220px; }
}

/* --- vie locale : présence de Dilitech aux côtés d'initiatives locales,
   pas seulement dans la boutique ------------------------------------- */
.engagement {
  display: grid; gap: clamp(22px, 3vw, 34px);
  margin-top: clamp(8px, 1.5vw, 16px);
}
.engagement__texte p { color: var(--tx-2); margin-bottom: 18px; }

.engagement__citation {
  padding: clamp(22px, 2.6vw, 30px);
  background: var(--mist); border-radius: var(--r);
}
.engagement__citation img {
  width: 100%; height: 190px; object-fit: cover; object-position: 50% 22%;
  border-radius: var(--r-s); margin-bottom: 18px;
}
.engagement__label {
  font-size: .71rem; font-weight: 800; letter-spacing: .1em; text-transform: uppercase;
  color: var(--cyan-ink); margin-bottom: 10px;
}
.engagement__citation blockquote p {
  font-size: .95rem; line-height: 1.55; color: var(--tx-1);
}
.engagement__signature {
  margin-top: 12px;
  font-size: .8rem; font-weight: 600; color: var(--tx-3);
}

@media (min-width: 980px) {
  .engagement { grid-template-columns: 1.2fr .8fr; align-items: center; }
}

/* Trois photos prises chez notre partenaire 2D Digitals, pas des visuels
   d'agence : mêmes codes que la galerie du siège plus haut. */
.engagement-photos { margin-top: clamp(30px, 4vw, 52px); }
.engagement-photos__legende {
  font-size: .71rem; font-weight: 800; letter-spacing: .16em; text-transform: uppercase;
  color: var(--cyan-ink); margin-bottom: 16px;
}
.engagement-photos__grille {
  display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px;
}
.engagement-photos__grille img {
  width: 100%; height: 260px; object-fit: cover;
  border-radius: var(--r-s);
  transition: transform .5s var(--ease-expo), box-shadow .5s var(--ease-expo);
}
.engagement-photos__grille img:hover {
  transform: translateY(-4px);
  box-shadow: 0 22px 40px -24px rgba(18, 19, 43, .4);
}
@media (max-width: 700px) {
  .engagement-photos__grille { grid-template-columns: 1fr; }
  .engagement-photos__grille img { height: 220px; }
}

/* --- articles --- */
.articles { display: grid; gap: 20px; }
.art {
  display: flex; flex-direction: column;
  background: var(--paper); border: 1px solid var(--line-2); border-radius: var(--r);
  overflow: hidden;
  transition: transform .28s var(--ease), box-shadow .28s var(--ease), border-color .28s var(--ease);
}
.art:hover { transform: translateY(-4px); border-color: rgba(48, 39, 132, .2); box-shadow: 0 24px 44px -32px rgba(18, 19, 43, .5); }
.art__visuel {
  display: grid; place-items: center;
  aspect-ratio: 16 / 9;
  background: var(--nuit);
  color: var(--sur-sombre);
  border-bottom: 1px solid var(--line-2);
}
.art__visuel svg { width: 42%; stroke-width: 3.2; }
/* Articles avec une vraie photo (champ `img` dans js/data/articles.js). */
.art__visuel--photo { overflow: hidden; }
.art__visuel--photo img { width: 100%; height: 100%; object-fit: cover; transition: transform .6s var(--ease-expo); }
.art:hover .art__visuel--photo img { transform: scale(1.04); }
.art__visuel .il-a { color: var(--cyan-2); }
.art__corps { display: grid; gap: 9px; padding: 20px; flex: 1; align-content: start; }
.art__meta { display: flex; align-items: center; gap: 9px; font-size: .73rem; font-weight: 700; letter-spacing: .1em; text-transform: uppercase; color: var(--cyan-ink); }
.art__meta span { color: var(--tx-3); font-weight: 600; letter-spacing: normal; text-transform: none; }
.art h3 { font-size: 1.12rem; font-weight: 800; letter-spacing: -.022em; line-height: 1.28; color: var(--tx-1); }
.art__chapo { font-size: .88rem; color: var(--tx-2); }
.art .lien-fleche { margin-top: auto; padding-top: 12px; justify-self: start; }

/* --- corps d'article --- */
.papier { max-width: 720px; margin-inline: auto; }
.papier h2 {
  font-size: clamp(1.28rem, 2.4vw, 1.62rem); font-weight: 800;
  letter-spacing: -.025em; color: var(--tx-1);
  margin-top: 46px; margin-bottom: 14px;
}
.papier p { margin-bottom: 18px; font-size: 1.02rem; line-height: 1.78; color: var(--tx-2); }
.papier ul { display: grid; gap: 11px; margin-bottom: 22px; }
.papier li { position: relative; padding-left: 26px; font-size: 1rem; line-height: 1.7; color: var(--tx-2); }
.papier li::before {
  content: ""; position: absolute; left: 3px; top: .66em;
  width: 8px; height: 8px; border-radius: 50%; background: var(--cyan);
}
.papier .note {
  display: flex; gap: 13px;
  padding: 20px 22px; margin: 30px 0;
  background: var(--mist); border-left: 3px solid var(--cyan);
  border-radius: 0 var(--r-s) var(--r-s) 0;
  font-size: .95rem; color: var(--tx-1);
}
.papier .note .ic { width: 21px; height: 21px; color: var(--cyan-ink); flex: none; margin-top: 2px; }

/* --- compléments article --- */
.cat-filtres { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 30px; }
.cat-filtres .onglet {
  border: 1px solid var(--line-2); background: var(--paper);
  display: inline-flex; align-items: center; gap: 8px;
}
.cat-filtres .onglet.est-actif { border-color: var(--navy); background: var(--navy); }
.onglet__nb {
  font-size: .68rem; font-weight: 800; opacity: .6;
  font-variant-numeric: tabular-nums;
}

.art-tete { max-width: 780px; }
.art-tete .titre { margin-top: 8px; }
.art-tete__meta {
  display: flex; align-items: center; gap: 9px;
  margin-top: 22px; font-size: .82rem; color: var(--sur-sombre-3);
}
.art-tete__meta .ic { width: 15px; height: 15px; }
.fil--sombre { color: var(--sur-sombre-3); margin-bottom: 0; }
.fil--sombre a:hover { color: var(--cyan-2); }

.papier__visuel {
  display: grid; place-items: center;
  aspect-ratio: 16 / 7;
  margin-bottom: 38px;
  border-radius: var(--r);
  background: var(--nuit); color: var(--sur-sombre);
}
.papier__visuel svg { width: 26%; stroke-width: 3.2; }
.papier__visuel--photo { overflow: hidden; position: relative; }
.papier__visuel--photo img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.papier__visuel .il-a { color: var(--cyan-2); }
.papier h2:first-of-type { margin-top: 0; }

.suite {
  display: flex; align-items: center; gap: 16px;
  padding: 24px 26px;
  border: 1px solid var(--line-2); border-radius: var(--r);
  transition: border-color .24s var(--ease), transform .24s var(--ease);
}
.suite:hover { border-color: var(--navy); transform: translateY(-3px); }
.suite__sur {
  font-size: .69rem; font-weight: 800; letter-spacing: .18em;
  text-transform: uppercase; color: var(--cyan-ink); flex: none;
}
.suite__titre { font-size: 1.05rem; font-weight: 700; color: var(--tx-1); flex: 1; }
.suite__fl { color: var(--tx-1); flex: none; }
.suite__fl .ic { width: 22px; height: 22px; }
@media (max-width: 640px) { .suite { flex-wrap: wrap; gap: 8px; } }

/* =========================================================================
   18. APPEL À L'ACTION
   ========================================================================= */

.cta { text-align: center; }
/* Lueur d'ambiance derrière l'appel, sans qu'aucune page n'ait à poser de
   balisage : une tache radiale posée une fois pour toutes les sections
   `.cta`, exactement comme le halo qui baigne les boutons de la charte. */
.cta::before {
  content: "";
  position: absolute; z-index: -1;
  left: 50%; bottom: -8%; transform: translateX(-50%);
  width: min(760px, 130%); height: 280px;
  background: radial-gradient(50% 100% at 50% 100%, var(--glow-cyan-doux), transparent 72%);
  filter: blur(4px);
  pointer-events: none;
}
.cta__in { display: grid; justify-items: center; gap: 10px; max-width: 720px; margin-inline: auto; }
.cta__actions { display: flex; flex-wrap: wrap; gap: 12px; justify-content: center; margin-top: 26px; }
.cta__note { font-size: .82rem; color: var(--sur-sombre-3); margin-top: 16px; }

/* =========================================================================
   19. PIED DE PAGE
   ========================================================================= */

.site-pied {
  display: block; position: relative;
  background: var(--navy-ink);
  color: var(--sur-sombre-2);
  font-size: .89rem;
}
/* Filet dégradé au raccord avec la section qui précède : la coupure entre
   deux aplats sombres a besoin d'un repère, pas d'une bordure franche. */
.site-pied::before {
  content: "";
  position: absolute; top: 0; left: 0; right: 0; height: 1px;
  background: linear-gradient(90deg, transparent, var(--line-s) 50%, transparent);
}
.pied__reseaux { display: flex; gap: 9px; }
.pied__reseaux a {
  display: grid; place-items: center;
  width: 40px; height: 40px; border-radius: 50%;
  background: rgba(var(--sur-rgb), .07);
  border: 1px solid var(--line-s2);
  color: var(--sur-sombre);
  transition: background-color .2s var(--ease), transform .3s var(--ease-expo),
              border-color .2s var(--ease), box-shadow .3s var(--ease-expo);
}
.pied__reseaux a:hover {
  background: var(--cyan); border-color: var(--cyan); transform: translateY(-3px);
  box-shadow: 0 10px 24px -8px var(--glow-cyan);
}

/* Déclinaison claire du même bloc, sur la page contact. Déclarée APRÈS la
   version sombre : à spécificité égale, c'est la dernière qui l'emporte. */
.bloc-info__reseaux a { background: var(--mist); border-color: var(--line-2); color: var(--tx-1); }
.bloc-info__reseaux a:hover { background: var(--navy); border-color: var(--navy); color: #fff; }
.pied__reseaux .ic { width: 18px; height: 18px; }

/* =========================================================================
   20. FLOTTANTS
   ========================================================================= */

/* La bulle WhatsApp à gauche, la remontée à droite : elles ne doivent jamais
   se recouvrir, y compris sur un écran de 320 px. */
.bulle-wa {
  position: fixed; left: 18px; bottom: 18px; z-index: 700;
  display: grid; place-items: center;
  width: 54px; height: 54px; border-radius: 50%;
  background: var(--wa); color: #042A15;
  box-shadow: 0 12px 28px -10px rgba(37, 211, 102, .65);
  transition: transform .25s var(--ease), opacity .25s var(--ease), visibility .25s;
}
.bulle-wa:hover { transform: scale(1.08); }
.bulle-wa .ic { width: 28px; height: 28px; }
/* Masquée tant que le hero de l'accueil occupe l'écran (voir
   masquerBulleWaSurHero() dans js/core/ui.js) : la bulle verte se pose
   pile sur les cases du trio à cet endroit-là. */
.bulle-wa--masquee { opacity: 0; visibility: hidden; transform: scale(.85); pointer-events: none; }

.remonter {
  position: fixed; right: 18px; bottom: 18px; z-index: 700;
  display: grid; place-items: center;
  width: 46px; height: 46px; border-radius: 50%;
  background: var(--navy); color: #fff;
  opacity: 0; visibility: hidden; transform: translateY(12px);
  transition: opacity .25s var(--ease), transform .25s var(--ease), visibility .25s;
  box-shadow: 0 12px 28px -14px rgba(16, 11, 51, .8);
}
.remonter.est-visible { opacity: 1; visibility: visible; transform: translateY(0); }
.remonter .ic { width: 20px; height: 20px; }

/* =========================================================================
   LE CONCIERGE — questions d'usage au fil de la visite
   (js/components/concierge.js, mémoire dans js/core/profil.js)
   Non modal, posé au-dessus du bouton « remonter » ; sur mobile, une
   feuille pleine largeur au-dessus des deux boutons flottants.
   ========================================================================= */
.concierge {
  position: fixed; right: 18px; bottom: 78px; z-index: 720;
  width: min(372px, calc(100vw - 36px));
}
.concierge__carte {
  position: relative;
  padding: 18px 18px 16px;
  border-radius: 18px;
  background: var(--paper);
  border: 1px solid var(--line);
  box-shadow: 0 30px 60px -28px rgba(0, 0, 0, .55), 0 0 0 1px rgba(0, 159, 227, .06),
              0 18px 40px -26px var(--glow-cyan-doux);
  opacity: 0; transform: translateY(16px) scale(.98);
  transition: opacity .45s var(--ease-expo), transform .55s var(--ease-expo);
}
/* Filet cyan en haut de carte : la même signature que la nav posée. */
.concierge__carte::before {
  content: ""; position: absolute; left: 22px; right: 22px; top: -1px; height: 2px;
  border-radius: 2px;
  background: linear-gradient(90deg, transparent, var(--cyan) 50%, transparent);
  opacity: .7;
}
.concierge.est-ouvert .concierge__carte { opacity: 1; transform: none; }
/* La question « métier » a beaucoup de puces : la carte ne dépasse jamais
   l'écran, elle défile à l'intérieur si besoin. */
.concierge__carte { max-height: calc(100vh - 100px); max-height: calc(100dvh - 100px); overflow-y: auto; overscroll-behavior: contain; }

.concierge__tete { display: flex; align-items: center; gap: 10px; margin-bottom: 12px; }
.concierge__signe {
  display: grid; place-items: center; flex: none;
  width: 34px; height: 34px; border-radius: 50%;
  background: var(--navy);
}
.concierge__signe .marque__signe { height: 13px; fill: #fff; }
.concierge__qui { font-size: .78rem; font-weight: 800; color: var(--tx-1); flex: 1; }
.concierge__qui span { font-weight: 500; color: var(--tx-3); }
.concierge__x {
  display: grid; place-items: center; width: 30px; height: 30px; border-radius: 50%;
  color: var(--tx-3); flex: none;
}
.concierge__x:hover { background: var(--mist); color: var(--tx-1); }
.concierge__x .ic { width: 16px; height: 16px; }

.concierge__titre { font-size: 1.02rem; font-weight: 800; line-height: 1.3; color: var(--tx-1); letter-spacing: -.01em; }
.concierge__texte, .concierge__aide { font-size: .85rem; line-height: 1.55; color: var(--tx-2); margin-top: 6px; }
.concierge__aide { font-size: .78rem; color: var(--tx-3); }
.concierge__etape {
  margin-bottom: 6px;
  font-size: .66rem; font-weight: 800; letter-spacing: .14em; text-transform: uppercase;
  color: var(--cyan-ink);
}
:root:not([data-theme="light"]) .concierge__etape { color: var(--cyan-2); }

.concierge__options { display: flex; flex-wrap: wrap; gap: 7px; margin: 14px 0 4px; }
.concierge__opt, .puce-usage {
  padding: 8px 13px; border-radius: 999px;
  border: 1px solid var(--line); background: var(--mist);
  font-size: .8rem; font-weight: 600; color: var(--tx-1);
  transition: background .2s var(--ease), border-color .2s var(--ease), color .2s var(--ease), transform .2s var(--ease-spring);
}
.concierge__opt:hover, .puce-usage:hover { border-color: var(--cyan); transform: translateY(-1px); }
/* Choix coché : teinte cyan + coche, volontairement différent du bouton
   plein marine (« Suivant ») — les deux se confondaient. */
.concierge__opt[aria-pressed="true"], .puce-usage[aria-pressed="true"] {
  background: rgba(0, 159, 227, .14); border-color: var(--cyan); color: var(--tx-1);
}
.concierge__opt[aria-pressed="true"]::before, .puce-usage[aria-pressed="true"]::before {
  content: "✓"; margin-right: 6px; font-weight: 800; color: var(--cyan);
}

/* --- parcours à étapes --- */
.concierge__progres { display: flex; gap: 4px; margin-bottom: 12px; }
.concierge__progres i {
  flex: 1; height: 3px; border-radius: 3px;
  background: var(--line);
  transition: background .3s var(--ease);
}
.concierge__progres i.est-fait { background: rgba(0, 159, 227, .45); }
.concierge__progres i.est-actuel { background: var(--cyan); }
.concierge__salut { font-size: .84rem; font-weight: 600; color: var(--cyan-ink); margin-bottom: 4px; }
:root:not([data-theme="light"]) .concierge__salut { color: var(--cyan-2); }
.concierge__champ-bloc { display: block; margin: 14px 0 4px; }
.concierge__champ-bloc--libre { margin-top: 10px; }
.concierge__champ-bloc--libre .concierge__champ { font-size: .86rem; font-weight: 500; padding: 9px 13px; }
.concierge__champ {
  width: 100%; padding: 11px 14px;
  border: 1px solid var(--line); border-radius: 12px;
  background: var(--mist); color: var(--tx-1);
  font-size: .95rem; font-weight: 600;
  transition: border-color .2s var(--ease), box-shadow .2s var(--ease);
}
.concierge__champ::placeholder { color: var(--tx-3); font-weight: 400; }
.concierge__champ:focus { outline: none; border-color: var(--cyan); box-shadow: 0 0 0 3px rgba(0, 159, 227, .18); }
.concierge__nav {
  display: flex; align-items: center; justify-content: space-between; gap: 12px;
  margin-top: 16px;
}
.concierge__retour {
  display: inline-flex; align-items: center; gap: 4px;
  font-size: .8rem; font-weight: 600; color: var(--tx-2);
  padding: 8px 4px;
}
.concierge__retour:hover { color: var(--tx-1); }
.concierge__retour .ic, .concierge__nav .concierge__principal .ic { width: 14px; height: 14px; }

.concierge__actions { display: flex; flex-wrap: wrap; align-items: center; gap: 14px; margin-top: 14px; }
.concierge__principal {
  display: inline-flex; align-items: center; gap: 8px;
  padding: 10px 16px; border-radius: 999px;
  background: var(--navy); color: #fff;
  font-size: .8rem; font-weight: 700;
  transition: background .2s var(--ease), opacity .2s var(--ease);
}
.concierge__options + .concierge__principal { margin-top: 10px; }
.concierge__principal:hover { background: var(--navy-clair); }
.concierge__principal:disabled { opacity: .4; cursor: default; }
.concierge__principal .ic { width: 14px; height: 14px; }
.concierge__lien { font-size: .76rem; font-weight: 600; color: var(--tx-3); }
.concierge__lien:hover { color: var(--tx-1); }
.concierge__lien--fort {
  display: inline-flex; align-items: center; gap: 6px; margin-top: 10px;
  font-size: .82rem; font-weight: 700; color: var(--cyan-ink);
}
.concierge__lien--fort .ic { width: 14px; height: 14px; }
:root:not([data-theme="light"]) .concierge__lien--fort { color: var(--cyan-2); }
.concierge__pied { display: flex; align-items: center; gap: 8px; margin-top: 14px; color: var(--tx-3); font-size: .76rem; }

.concierge__merci { display: flex; gap: 12px; align-items: flex-start; }
.concierge__ok {
  display: grid; place-items: center; flex: none;
  width: 30px; height: 30px; border-radius: 50%;
  background: rgba(18, 136, 90, .14); color: var(--ok);
}
.concierge__ok .ic { width: 16px; height: 16px; }

@media (max-width: 600px) {
  .concierge { left: 12px; right: 12px; bottom: 84px; width: auto; }
  /* Entre la barre de navigation (70px) et les boutons flottants. */
  .concierge__carte { max-height: calc(100vh - 170px); max-height: calc(100dvh - 170px); padding: 16px 16px 14px; }
  .concierge__opt { padding: 7px 11px; font-size: .76rem; }
  .concierge__options { gap: 6px; }
}

/* --- « Pour quel usage ? » dans la section sélection --------------------- */
.usage-choix {
  display: grid; gap: 12px;
  margin: -12px 0 30px;
  padding: 18px 20px;
  border-radius: var(--r);
  background: var(--paper);
  border: 1px solid var(--line-2);
}
.usage-choix__q { font-size: .95rem; font-weight: 800; color: var(--tx-1); }
.usage-choix__q span { display: block; margin-top: 2px; font-size: .8rem; font-weight: 400; color: var(--tx-3); }
.usage-choix__puces { display: flex; flex-wrap: wrap; gap: 8px; }
.usage-choix__resume {
  display: flex; align-items: center; flex-wrap: wrap; gap: 8px;
  font-size: .84rem; color: var(--tx-2);
}
.usage-choix__resume[hidden] { display: none; }
.usage-choix__resume > .ic { width: 16px; height: 16px; color: var(--ok); }
.usage-choix__resume b { color: var(--tx-1); font-weight: 700; }
.usage-choix__modifier {
  margin-left: auto; font-size: .76rem; font-weight: 600; color: var(--tx-3);
  text-decoration: underline; text-underline-offset: 3px;
}
.usage-choix__modifier:hover { color: var(--tx-1); }
/* L'onglet « Pour vous » porte un petit point cyan : c'est le seul qui
   parle du visiteur, pas du stock. */
.onglet--vous::before {
  content: ""; display: inline-block; width: 7px; height: 7px; margin-right: 7px;
  border-radius: 50%; background: var(--cyan); vertical-align: 1px;
}

/* --- catalogue : suggestion tirée des réponses -------------------------- */
.suggestion-usage {
  display: flex; align-items: center; flex-wrap: wrap; gap: 10px;
  margin-bottom: 16px; padding: 12px 16px;
  border-radius: var(--r-s);
  background: var(--paper); border: 1px solid rgba(0, 159, 227, .3);
  font-size: .86rem; color: var(--tx-2);
}
.suggestion-usage > .ic { width: 17px; height: 17px; color: var(--cyan); flex: none; }
.suggestion-usage b { color: var(--tx-1); }
.suggestion-usage__btn {
  display: inline-flex; align-items: center; gap: 6px; margin-left: auto;
  font-size: .8rem; font-weight: 700; color: var(--cyan-ink);
}
:root:not([data-theme="light"]) .suggestion-usage__btn { color: var(--cyan-2); }
.suggestion-usage__btn .ic { width: 14px; height: 14px; }

/* =========================================================================
   CONSEILS — cartes « publication » (js/components/carte-conseil.js),
   utilisées sur conseils.html et en aperçu sur l'accueil
   ========================================================================= */
.posts { display: grid; gap: 22px; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); }
.post {
  display: flex; flex-direction: column;
  background: var(--paper); border: 1px solid var(--line-2); border-radius: 18px;
  overflow: hidden;
  box-shadow: 0 18px 40px -34px rgba(18, 19, 43, .35);
  transition: transform .35s var(--ease-expo), box-shadow .35s var(--ease-expo), border-color .35s var(--ease);
}
.post:hover { transform: translateY(-4px); border-color: rgba(0, 159, 227, .35); box-shadow: 0 28px 50px -32px rgba(18, 19, 43, .45); }
.post__visuel {
  position: relative; display: grid; place-items: center;
  aspect-ratio: 16 / 9; background: var(--nuit); color: var(--sur-sombre); overflow: hidden;
}
.post__visuel svg { width: 36%; stroke-width: 3.2; }
.post__visuel .il-a { color: var(--cyan-2); }
.post__visuel--photo img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; transition: transform .6s var(--ease-expo); }
.post:hover .post__visuel--photo img { transform: scale(1.04); }
.post__rubrique {
  position: absolute; left: 14px; top: 14px;
  padding: 5px 11px; border-radius: 999px;
  background: var(--navy); color: #fff;
  font-size: .66rem; font-weight: 800; letter-spacing: .08em; text-transform: uppercase;
}
.post__corps { display: flex; flex-direction: column; gap: 10px; padding: 18px 20px 20px; flex: 1; }
.post__auteur { display: flex; align-items: center; gap: 9px; font-size: .78rem; color: var(--tx-2); }
.post__auteur b { color: var(--tx-1); }
.post__date { color: var(--tx-3); }
.post__avatar {
  display: grid; place-items: center; flex: none;
  width: 30px; height: 30px; border-radius: 50%; background: var(--navy);
}
.post__avatar .marque__signe { height: 11px; fill: #fff; }
/* La phrase-choc : grande, entre guillemets, comme sur les réseaux. */
.post__citation { font-size: 1.14rem; font-weight: 800; line-height: 1.32; letter-spacing: -.015em; color: var(--tx-1); }
.post__citation a:hover { color: var(--navy); }
.post__titre-petit { font-size: .8rem; font-weight: 700; color: var(--cyan-ink); }
.post__titre { font-size: 1.08rem; font-weight: 800; line-height: 1.3; color: var(--tx-1); }
.post__titre a:hover { color: var(--navy); }
.post__chapo { font-size: .87rem; line-height: 1.6; color: var(--tx-2); }
.post__lire { margin-top: auto; padding-top: 6px; align-self: flex-start; }

/* À la une : le plus récent, sur toute la largeur, visuel à gauche. */
@media (min-width: 900px) {
  .post--une { grid-column: 1 / -1; flex-direction: row; }
  .post--une .post__visuel { flex: 0 0 54%; aspect-ratio: auto; min-height: 340px; }
  .post--une .post__corps { padding: 32px 34px; justify-content: center; gap: 14px; }
  .post--une .post__citation { font-size: clamp(1.4rem, 2.2vw, 1.9rem); }
}
.posts--apercu { grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); }
@media (min-width: 980px) { .posts--apercu { grid-template-columns: repeat(3, 1fr); } }

.rubrique-desc { margin: -14px 0 24px; font-size: .9rem; color: var(--tx-2); }
.rubrique-desc[hidden] { display: none; }

.conseils-reseaux { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin-top: 26px; }
.conseils-reseaux__mot { font-size: .84rem; color: var(--tx-2); margin-right: 4px; }
.conseils-reseaux__lien {
  display: inline-flex; align-items: center; gap: 7px;
  padding: 8px 14px; border-radius: 999px;
  background: var(--paper); border: 1px solid var(--line);
  font-size: .8rem; font-weight: 700; color: var(--tx-1);
  transition: border-color .2s var(--ease), transform .2s var(--ease);
}
.conseils-reseaux__lien:hover { border-color: var(--cyan); transform: translateY(-1px); }
.conseils-reseaux__lien .ic { width: 16px; height: 16px; }

/* Publication sans image : la phrase en grand sur fond sombre, comme le
   post Facebook d'origine (fond sombre voulu, même en mode jour). */
.post__visuel--texte { background: #1d1d1f; padding: 28px; }
.post__texte {
  color: #fff; text-align: center; font-weight: 800; letter-spacing: -.01em;
  font-size: clamp(1.02rem, 1.6vw, 1.3rem); line-height: 1.35; text-wrap: balance;
}
.post--une .post__texte { font-size: clamp(1.4rem, 2.6vw, 2.1rem); max-width: 18ch; }
.post__visuel--texte .post__rubrique { background: rgba(255, 255, 255, .14); }
.post__source {
  display: inline-flex; align-items: center; gap: 4px; margin-left: auto;
  font-size: .7rem; font-weight: 700; color: #1877F2;
}
.post__source .ic { width: 13px; height: 13px; }

/* --- lecture : la publication d'origine --- */
.publication {
  margin: 0 0 26px; padding: 16px 18px; border-radius: 16px;
  background: var(--paper); border: 1px solid var(--line);
  box-shadow: 0 14px 30px -26px rgba(18, 19, 43, .35);
}
.publication__tete { display: flex; align-items: center; gap: 10px; margin-bottom: 10px; }
.publication__tete b { display: block; font-size: .88rem; color: var(--tx-1); }
.publication__tete small { font-size: .72rem; color: var(--tx-3); }
.publication__avatar { display: grid; place-items: center; width: 36px; height: 36px; border-radius: 50%; background: var(--navy); flex: none; }
.publication__avatar .marque__signe { height: 13px; fill: #fff; }
.publication blockquote p { margin: 0 0 6px !important; font-size: 1.02rem !important; font-weight: 600; line-height: 1.55 !important; color: var(--tx-1) !important; }
.papier__source {
  display: inline-flex; align-items: center; gap: 7px; margin-top: 8px;
  font-size: .86rem; font-weight: 700; color: #1877F2;
}
.papier__source .ic { width: 16px; height: 16px; }
.papier__visuel--photo img { object-position: 50% 35%; }

/* --- lecture : phrase-choc et dialogues --- */
.papier__citation {
  margin: 0 0 26px; padding-left: 18px; border-left: 3px solid var(--cyan);
  font-size: clamp(1.25rem, 2vw, 1.55rem); font-weight: 800; line-height: 1.35; color: var(--tx-1);
}
.dialogue { display: grid; gap: 10px; margin: 6px 0 26px; }
.dialogue__r {
  max-width: 82%; margin: 0 !important; padding: 11px 15px; border-radius: 16px;
  font-size: .95rem !important; line-height: 1.5 !important;
}
.dialogue__qui { display: block; margin-bottom: 2px; font-size: .68rem; font-weight: 800; letter-spacing: .08em; text-transform: uppercase; opacity: .7; }
.dialogue__r--client { justify-self: start; background: var(--mist); color: var(--tx-1) !important; border-bottom-left-radius: 4px; }
.dialogue__r--nous { justify-self: end; background: var(--navy); color: #fff !important; border-bottom-right-radius: 4px; }

/* =========================================================================
   FICHE PRODUIT (panneau) — galerie + colonne d'achat
   (js/components/panneau-produit.js, photos : js/data/galeries.js)
   ========================================================================= */
.pf { display: grid; gap: 28px; padding: 26px var(--pad) 10px; }
/* Enfants de grille : sans min-width 0, la galerie défilante élargit la
   colonne au-delà de l'écran sur mobile. */
.pf > *, .pf-bas > * { min-width: 0; }
@media (min-width: 860px) {
  .pf { grid-template-columns: 1.08fr .92fr; gap: 36px; align-items: start; padding-top: 30px; }
  .pf__galerie { position: sticky; top: 0; }
}

/* --- galerie --- */
.pf__scene {
  position: relative; overflow: hidden;
  aspect-ratio: 4 / 3; border-radius: 18px;
  background: var(--mist); border: 1px solid var(--line-2);
  touch-action: pan-y; user-select: none;
}
.pf__photo {
  position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover;
  opacity: 0; transform: scale(1.02);
  transition: opacity .45s var(--ease), transform .8s var(--ease-expo);
}
.pf__photo.est-active { opacity: 1; transform: none; }
.pf__illus { position: absolute; inset: 0; display: grid; place-items: center; background: var(--nuit); color: var(--sur-sombre); }
.pf__illus svg { width: 46%; }
.pf__etiquettes { position: absolute; left: 14px; top: 14px; display: flex; gap: 6px; z-index: 2; }
.pf__etiquettes .etiq { position: static; }
.pf__fleche {
  position: absolute; top: 50%; z-index: 2; transform: translateY(-50%);
  display: grid; place-items: center; width: 40px; height: 40px; border-radius: 50%;
  background: rgba(255, 255, 255, .9); color: #14131F;
  box-shadow: 0 8px 20px -8px rgba(0, 0, 0, .35);
  opacity: 0; transition: opacity .25s var(--ease), transform .25s var(--ease);
}
.pf__fleche .ic { width: 18px; height: 18px; }
.pf__fleche--g { left: 12px; }
.pf__fleche--d { right: 12px; }
.pf__scene:hover .pf__fleche, .pf__fleche:focus-visible { opacity: 1; }
@media (hover: none) { .pf__fleche { opacity: 1; } }
.pf__fleche:hover { transform: translateY(-50%) scale(1.06); }
.pf__compteur {
  position: absolute; right: 12px; bottom: 12px; z-index: 2;
  padding: 4px 10px; border-radius: 999px;
  background: rgba(20, 19, 31, .6); color: #fff; font-size: .72rem; font-weight: 700;
}
.pf__vignettes { display: flex; gap: 8px; margin-top: 10px; overflow-x: auto; padding-bottom: 4px; scrollbar-width: thin; }
.pf__vignette {
  flex: 0 0 76px; aspect-ratio: 4 / 3; border-radius: 10px; overflow: hidden;
  border: 2px solid transparent; opacity: .6;
  transition: opacity .2s var(--ease), border-color .2s var(--ease);
}
.pf__vignette img { width: 100%; height: 100%; object-fit: cover; }
.pf__vignette:hover { opacity: 1; }
.pf__vignette.est-active { opacity: 1; border-color: var(--cyan); }
.pf__note { display: flex; gap: 8px; margin-top: 12px; font-size: .76rem; line-height: 1.5; color: var(--tx-3); }
.pf__note .ic { width: 15px; height: 15px; flex: none; margin-top: 1px; color: var(--cyan-ink); }

/* --- informations et achat --- */
.pf__marque { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; font-size: .74rem; font-weight: 800; letter-spacing: .12em; text-transform: uppercase; color: var(--cyan-ink); }
.pf__ref { color: var(--tx-3); letter-spacing: .06em; font-weight: 600; }
.pf__neuf { background: rgba(18, 136, 90, .12); color: var(--ok); }
.pf__nom { margin-top: 10px; font-size: clamp(1.55rem, 2.6vw, 2.1rem); font-weight: 800; line-height: 1.12; letter-spacing: -.025em; color: var(--tx-1); }
.pf__resume { margin-top: 12px; font-size: .95rem; line-height: 1.65; color: var(--tx-2); }
.pf__usage {
  display: flex; gap: 9px; align-items: flex-start; margin-top: 14px; padding: 11px 14px;
  border-radius: 12px; background: var(--mist); font-size: .84rem; line-height: 1.5; color: var(--tx-2);
}
.pf__usage .ic { width: 17px; height: 17px; flex: none; margin-top: 1px; color: var(--cyan-ink); }
.pf__usage b { color: var(--tx-1); }
.pf__usage a { color: var(--cyan-ink); font-weight: 700; text-decoration: underline; text-underline-offset: 3px; }
.pf__usage--oui { background: rgba(18, 136, 90, .09); }
.pf__usage--oui .ic { color: var(--ok); }

.pf__cles { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; margin-top: 18px; }
.pf__cles li {
  display: flex; gap: 10px; align-items: flex-start; padding: 11px 12px;
  border: 1px solid var(--line-2); border-radius: 12px; background: var(--paper);
  font-size: .8rem; font-weight: 700; line-height: 1.35; color: var(--tx-1);
}
.pf__cles .ic { width: 18px; height: 18px; flex: none; color: var(--cyan-ink); margin-top: 2px; }
.pf__cles small { display: block; font-size: .66rem; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: var(--tx-3); margin-bottom: 2px; }

.pf__achat {
  margin-top: 18px; padding: 18px; border-radius: 16px;
  background: var(--mist); border: 1px solid var(--line-2);
}
.pf__prix { display: flex; flex-wrap: wrap; align-items: baseline; gap: 10px; }
.pf__actuel { font-size: clamp(1.7rem, 3vw, 2.2rem); font-weight: 800; letter-spacing: -.03em; color: var(--tx-1); }
.pf__barre { width: 100%; font-size: .9rem; color: var(--tx-3); text-decoration: line-through; }
.pf__gain { padding: 4px 10px; border-radius: 999px; background: rgba(214, 22, 90, .12); color: var(--promo); font-size: .76rem; font-weight: 800; }
.pf__achat .stock { margin-top: 6px; }
.pf__mention { margin-top: 4px; font-size: .74rem; color: var(--tx-3); }
.pf__boutons { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 14px; }
.pf__boutons .qte { flex: none; background: var(--paper); }
.pf__ajouter { flex: 1 1 200px; justify-content: center; }
.pf__wa {
  display: flex; align-items: center; justify-content: center; gap: 8px;
  margin-top: 10px; padding: 11px; border-radius: 999px;
  border: 1px solid rgba(37, 211, 102, .5); background: var(--paper);
  font-size: .82rem; font-weight: 700; color: var(--wa-ink);
  transition: background .2s var(--ease);
}
.pf__wa:hover { background: rgba(37, 211, 102, .1); }
.pf__wa .ic { width: 17px; height: 17px; color: var(--wa); }

.pf__garanties { display: grid; gap: 12px; margin-top: 18px; }
.pf__garanties li { display: flex; gap: 11px; font-size: .82rem; line-height: 1.45; color: var(--tx-2); }
.pf__garanties .ic { width: 20px; height: 20px; flex: none; color: var(--cyan-ink); }
.pf__garanties b { display: block; color: var(--tx-1); font-weight: 700; }
.pf .fiche__usages { margin-top: 18px; }

/* --- bas de fiche --- */
.pf-bas { display: grid; gap: 18px; padding: 24px var(--pad); }
@media (min-width: 860px) { .pf-bas { grid-template-columns: 1fr 1fr; align-items: start; } }
.pf-bloc { padding: 22px; border-radius: 16px; background: var(--paper); border: 1px solid var(--line-2); }
.pf-bloc__titre { font-size: 1.15rem; font-weight: 800; letter-spacing: -.015em; color: var(--tx-1); margin-bottom: 12px; }
.pf-bloc__titre em { font-style: normal; font-weight: 300; color: var(--cyan-ink); }
.pf-similaires { padding: 8px var(--pad) 30px; }

/* --- notifications --- */
.toasts {
  position: fixed; left: 50%; bottom: 22px; z-index: 990;
  transform: translateX(-50%);
  display: grid; gap: 9px;
  width: min(430px, calc(100vw - 32px));
  pointer-events: none;
}
.toast {
  display: flex; align-items: center; gap: 11px;
  padding: 13px 15px;
  border-radius: var(--r-s);
  background: var(--navy-ink); color: #fff;
  font-size: .87rem; font-weight: 600;
  box-shadow: 0 18px 40px -18px rgba(16, 11, 51, .7);
  pointer-events: auto;
  animation: toast-entre .3s var(--ease);
}
@keyframes toast-entre { from { opacity: 0; transform: translateY(14px); } }
.toast.part { animation: toast-part .26s var(--ease) forwards; }
@keyframes toast-part { to { opacity: 0; transform: translateY(10px); } }
.toast__txt { flex: 1; min-width: 0; }
.toast > .ic { width: 19px; height: 19px; color: var(--cyan-2); flex: none; }
.toast--alerte > .ic { color: #FFB86B; }
.toast__action { font-size: .82rem; font-weight: 800; color: var(--cyan-2); white-space: nowrap; }
.toast__x { display: grid; place-items: center; width: 24px; height: 24px; border-radius: 50%; opacity: .55; flex: none; }
.toast__x:hover { opacity: 1; background: rgba(255, 255, 255, .12); }
.toast__x .ic { width: 14px; height: 14px; }

/* =========================================================================
   21. APPARITION AU DÉFILEMENT
   ========================================================================= */

.reveal {
  opacity: 0;
  transform: translateY(26px) scale(.98);
  transition: opacity .7s var(--ease-expo), transform .7s var(--ease-expo);
  /* Posé par activerReveal() (js/core/ui.js) selon le rang de l'élément
     parmi ses frères — toute rangée de cartes se dévoile donc en cascade,
     sans qu'il faille écrire une règle nth-child par grille. */
  transition-delay: calc(var(--i, 0) * 70ms);
}
.reveal.est-vu { opacity: 1; transform: none; }

/* =========================================================================
   22. ADAPTATION AUX ÉCRANS  (mobile d'abord : ce qui suit élargit)
   ========================================================================= */

@media (min-width: 560px) {
  .univers, .services, .articles, .reseau, .args { grid-template-columns: repeat(2, 1fr); }
  .cat-page .grille-produits { grid-template-columns: repeat(auto-fill, minmax(196px, 1fr)); }
}

@media (min-width: 860px) {
  .fiche { grid-template-columns: 1fr 1fr; }
  .services { grid-template-columns: repeat(3, 1fr); }
  .articles { grid-template-columns: repeat(3, 1fr); }
  .args { grid-template-columns: repeat(4, 1fr); }
  .reseau { grid-template-columns: repeat(3, 1fr); }
}

@media (min-width: 981px) {
  .cat-page { grid-template-columns: 268px 1fr; }
}

/* --- passage en présentation mobile --- */
@media (max-width: 980px) {
  .nav__liens { display: none; }
  .nav__burger { display: grid; place-items: center; width: 42px; height: 42px; border-radius: 50%; color: var(--tx-1); }
  .nav__burger:hover { background: var(--mist); }
  .nav__burger .ic { width: 22px; height: 22px; }
  .nav__in { justify-content: space-between; }
  .nav__logo { margin-right: auto; }
  .btn--devis__mot { display: none; }
  .btn--devis { padding: 11px; width: 42px; height: 42px; }

  /* Le catalogue passe en filtres escamotables. */
  .btn-filtres { display: inline-flex; }
  .filtres {
    position: fixed; inset: 0; z-index: 940;
    border-radius: 0; border: 0;
    padding: 20px var(--pad) 100px;
    overflow-y: auto;
    transform: translateY(100%);
    transition: transform .34s var(--ease-net);
    align-content: start;
  }
  .filtres.est-ouvert { transform: translateY(0); }
  .filtres__fermer { display: flex; }
}

@media (min-width: 981px) {
  .filtres { position: sticky; top: calc(var(--nav-h) + 18px); }
  .filtres__fermer { display: none; }
}

@media (max-width: 760px) {
  .champ-duo { grid-template-columns: 1fr; }
  .heros__preuves { gap: 14px 26px; }
  .heros__preuve b { font-size: 1.45rem; }
  .pligne { grid-template-columns: 48px 1fr auto; }
  .pligne__illus { width: 48px; }
}

/* Très petits écrans (320 px) : logo + loupe + sélection + menu ne tiennent
   plus côte à côte. La loupe part la première — le lien « Catalogue » du
   menu mène à la même recherche. */
@media (max-width: 400px) {
  :root { --pad: 15px; }
  .nav__in { gap: 8px; }
  .nav__actions { gap: 5px; }
  .nav__ico { display: none; }
  .marque__signe { height: 22px; }
  .marque__mot { font-size: 1.18rem; }
  .nav__burger, .btn--devis { width: 38px; height: 38px; padding: 9px; }
}

@media (max-width: 480px) {
  .grille-produits { grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); gap: 12px; }
  .carte__corps { padding: 13px 13px 14px; gap: 7px; }
  .carte__resume { display: none; }
  .carte__nom { font-size: .92rem; }
  .btn--carte span { font-size: .76rem; }
  .cta__actions .btn { width: 100%; }
}

/* =========================================================================
   23. PRÉFÉRENCES SYSTÈME
   ========================================================================= */

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: .001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: .001ms !important;
    scroll-behavior: auto !important;
  }
  .reveal { opacity: 1; transform: none; }
  .marques__piste, .disque__anneau, .orbite__puce { animation: none; }
}

/* --- impression : une fiche produit doit sortir proprement --- */
@media print {
  .site-entete, .site-pied, .panneau, .bulle-wa, .remonter, .toasts,
  .filtres, .outils, .btn { display: none !important; }
  body { color: #000; font-size: 11pt; }
  .fiche { grid-template-columns: 1fr 1fr; }
  a[href^="http"]::after { content: " (" attr(href) ")"; font-size: 9pt; color: #555; }
}

/* =========================================================================
   NOS MÉTIERS — grille condensée (remplace les six blocs .bloc-serv)
   Bureau : 4 colonnes, la photo « Vente » tient deux rangées à gauche,
   « Équipement de parc » s'étire sur deux colonnes en bas à droite.
   ========================================================================= */
.metiers__chapeau { max-width: 420px; margin: 0; }
.metiers { display: grid; gap: 14px; }
.metier {
  position: relative;
  display: flex; flex-direction: column; gap: 8px;
  padding: 22px 22px 24px;
  background: var(--paper);
  border: 1px solid var(--line-2);
  border-radius: 18px;
  scroll-margin-top: 110px;
  transition: border-color .25s ease, transform .25s ease;
}
.metier:hover { border-color: var(--line); transform: translateY(-2px); }
.metier__n { font-size: .72rem; font-weight: 800; letter-spacing: .12em; color: var(--tx-3); }
.metier h3 { font-size: 1.06rem; font-weight: 800; color: var(--tx-1); line-height: 1.25; }
.metier p:not(.metier__n) { font-size: .88rem; color: var(--tx-2); line-height: 1.55; }
.metier .lien-fleche { margin-top: auto; padding-top: 6px; align-self: flex-start; }
.metier__ic {
  position: absolute; top: 18px; right: 18px;
  display: grid; place-items: center;
  width: 38px; height: 38px; border-radius: 11px;
  background: rgba(0, 159, 227, .1); color: var(--cyan-ink);
}
.metier__ic .ic, .metier__ic svg { width: 19px; height: 19px; }

.metier__puces { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 4px; }
.metier__puces li {
  font-size: .76rem; font-weight: 600; color: var(--tx-2);
  padding: 4px 10px; border-radius: 99px; border: 1px solid var(--line);
}

.metier__etapes { display: flex; flex-wrap: wrap; gap: 6px 18px; margin: 6px 0 2px; counter-reset: etape; }
.metier__etapes li { counter-increment: etape; font-size: .84rem; font-weight: 700; }
.metier__etapes li::before {
  content: counter(etape); display: inline-grid; place-items: center;
  width: 20px; height: 20px; margin-right: 7px; border-radius: 50%;
  font-size: .7rem; background: var(--cyan); color: #fff;
}

/* case marine */
.metier--nuit { background: linear-gradient(150deg, var(--navy) 0%, var(--navy-2) 100%); border-color: transparent; color: #fff; }
.metier--nuit h3, .metier--nuit .metier__etapes li { color: #fff; }
.metier--nuit p:not(.metier__n) { color: rgba(255, 255, 255, .78); }
.metier--nuit .metier__n { color: rgba(255, 255, 255, .55); }
.metier--nuit .metier__ic { background: rgba(255, 255, 255, .12); color: #4FC3F0; }
.metier--nuit .lien-fleche { color: #4FC3F0; }

/* case photo */
.metier--photo { padding: 0; overflow: hidden; min-height: 320px; justify-content: flex-end; border: 0; }
.metier--photo img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.metier--photo::after {
  content: ''; position: absolute; inset: 0;
  background: linear-gradient(180deg, rgba(16, 11, 51, 0) 30%, rgba(16, 11, 51, .88) 100%);
}
.metier--photo .metier__corps { position: relative; z-index: 1; display: flex; flex-direction: column; gap: 8px; padding: 22px; }
.metier--photo h3 { color: #fff; font-size: 1.25rem; }
.metier--photo p:not(.metier__n) { color: rgba(255, 255, 255, .82); }
.metier--photo .metier__n { color: rgba(255, 255, 255, .6); }
.metier--photo .lien-fleche { color: #4FC3F0; }

.metier--nuit .metier__etapes { flex-direction: column; gap: 9px; }
.metier--large .metier__puces { max-width: 520px; }

@media (min-width: 640px) {
  .metiers { grid-template-columns: repeat(2, 1fr); }
  .metier--photo { grid-column: span 2; }
}
@media (min-width: 1000px) {
  .metiers { grid-template-columns: 1.25fr repeat(3, 1fr); }
  .metier--photo { grid-column: 1; grid-row: span 2; }
  .metier--large { grid-column: span 2; }
}

/* sélection : une seule rangée de quatre */
@media (min-width: 1100px) {
  .grille-produits--rangee { grid-template-columns: repeat(4, 1fr); }
}
@media (min-width: 600px) and (max-width: 1099px) {
  .grille-produits--rangee { grid-template-columns: repeat(2, 1fr); }
}

/* =========================================================================
   RÉSEAU condensé — propos + chiffres à gauche, six villes à droite
   ========================================================================= */
.reseau2 { display: grid; gap: clamp(28px, 4vw, 56px); align-items: center; }
.reseau2__txt .chapeau { margin-top: 14px; max-width: 460px; }
.reseau2__chiffres { display: flex; gap: clamp(22px, 4vw, 44px); margin-top: 28px; }
.reseau2__chiffres li { display: grid; gap: 2px; }
.reseau2__chiffres b { font-size: clamp(1.9rem, 3.4vw, 2.5rem); font-weight: 800; letter-spacing: -.03em; color: var(--navy); line-height: 1; }
.reseau2__chiffres span { font-size: .74rem; font-weight: 700; letter-spacing: .1em; text-transform: uppercase; color: var(--tx-3); }

.reseau2__villes { display: grid; grid-template-columns: repeat(2, 1fr); gap: 12px; }
.ville {
  position: relative; display: grid; gap: 3px;
  padding: 18px 18px 18px;
  background: var(--paper); border: 1px solid var(--line-2); border-radius: 16px;
  transition: border-color .25s ease, transform .25s ease, box-shadow .25s ease;
}
.ville:hover { border-color: rgba(0, 159, 227, .45); transform: translateY(-2px); box-shadow: 0 16px 30px -24px rgba(18, 19, 43, .45); }
.ville__iso {
  justify-self: start; margin-bottom: 8px;
  font-size: .68rem; font-weight: 800; letter-spacing: .08em;
  padding: 4px 8px; border-radius: 7px; background: rgba(48, 39, 132, .08); color: var(--navy);
}
.ville__nom { font-size: 1.05rem; font-weight: 800; color: var(--tx-1); letter-spacing: -.01em; }
.ville__pays { font-size: .8rem; color: var(--tx-3); }
.ville__fleche { position: absolute; top: 18px; right: 16px; color: var(--tx-3); transition: color .25s ease, transform .25s ease; }
.ville__fleche svg { width: 16px; height: 16px; }
.ville:hover .ville__fleche { color: var(--cyan-ink); transform: translateX(3px); }

@media (min-width: 560px) { .reseau2__villes { grid-template-columns: repeat(3, 1fr); } }
@media (min-width: 1000px) { .reseau2 { grid-template-columns: 5fr 7fr; } }

/* =========================================================================
   LA BOUTIQUE — texte + infos à gauche, mosaïque de trois photos à droite
   ========================================================================= */
.boutique { display: grid; gap: clamp(28px, 4vw, 56px); align-items: center; }
.boutique__txt .chapeau { margin: 14px 0 26px; max-width: 520px; }
.boutique__infos { display: grid; gap: 4px 36px; margin-bottom: 8px; }
.boutique__infos .siege__horaires li { white-space: nowrap; gap: 10px; }
.boutique__infos .siege__horaires li b { padding-left: 14px; }
.boutique__photos {
  display: grid; gap: 10px;
  grid-template-columns: 1.4fr 1fr;
  grid-template-rows: 1fr 1fr;
  aspect-ratio: 5 / 4;
}
.boutique__photos img { width: 100%; height: 100%; object-fit: cover; border-radius: 16px; min-height: 0; }
.boutique__photos img:first-child { grid-row: span 2; }
.boutique__photos img:last-child { object-position: 30% 20%; }
@media (min-width: 640px) { .boutique__infos { grid-template-columns: auto auto; justify-content: start; } }
@media (min-width: 1000px) { .boutique { grid-template-columns: 1fr 1fr; } }

/* =========================================================================
   VIE LOCALE — une grande photo, le propos, trois vignettes
   ========================================================================= */
.vie { display: grid; gap: clamp(26px, 4vw, 56px); align-items: center; }
.vie__photo { position: relative; margin: 0; border-radius: 20px; overflow: hidden; aspect-ratio: 1 / 1.08; }
.vie__photo img { width: 100%; height: 100%; object-fit: cover; }
.vie__photo figcaption {
  position: absolute; left: 14px; right: 14px; bottom: 14px;
  padding: 9px 13px; border-radius: 11px;
  font-size: .78rem; font-weight: 700; color: #fff;
  background: rgba(16, 11, 51, .62); backdrop-filter: blur(6px);
}
.vie__txt .chapeau { margin: 14px 0 22px; max-width: 520px; }
.vie__citation {
  margin: 0 0 22px; padding: 4px 0 4px 18px;
  border-left: 3px solid var(--cyan);
}
.vie__citation p { font-size: .95rem; font-style: italic; color: var(--tx-1); line-height: 1.6; }
.vie__citation cite { display: block; margin-top: 8px; font-size: .76rem; font-style: normal; font-weight: 700; color: var(--tx-3); letter-spacing: .02em; }
.vie__vignettes { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; margin-bottom: 22px; }
.vie__vignettes img { width: 100%; aspect-ratio: 1; object-fit: cover; border-radius: 12px; }
@media (min-width: 900px) { .vie { grid-template-columns: .9fr 1.1fr; } }

/* =========================================================================
   RÉSEAU (v3) — un panneau : carte marine à gauche, texte + villes à droite
   Mobile : la carte passe au-dessus, les villes en 2 colonnes.
   Repère de la carte : le SVG occupe 80 % × 82 % avec 10 % / 9 % de marge
   (les points ne collent jamais au bord) ; carteReseau() applique le même
   calcul aux points HTML.
   ========================================================================= */
.reseau3 {
  display: grid; overflow: hidden;
  background: var(--paper); border: 1px solid var(--line-2); border-radius: 24px;
  box-shadow: 0 30px 60px -48px rgba(18, 19, 43, .45);
}
.reseau3__carte {
  position: relative; min-height: 260px; aspect-ratio: 4 / 3;
  background:
    radial-gradient(420px 300px at 30% 40%, rgba(0, 159, 227, .28) 0%, transparent 70%),
    linear-gradient(155deg, var(--navy) 0%, var(--navy-3) 100%);
}
.reseau3__carte svg { position: absolute; left: 10%; top: 12%; width: 66%; height: 76%; overflow: visible; }
.reseau3__carte line { stroke: rgba(79, 195, 240, .45); stroke-width: 1.2; stroke-dasharray: 4 4; }
.reseau3__carte .point {
  position: absolute; display: flex; align-items: center; gap: 7px;
  transform: translate(-6px, -50%);
}
.reseau3__carte .point i {
  flex: none; width: 12px; height: 12px; border-radius: 50%;
  background: #fff; box-shadow: 0 0 0 4px rgba(255, 255, 255, .14);
}
.reseau3__carte .point b { font-size: .74rem; font-weight: 700; color: rgba(255, 255, 255, .88); white-space: nowrap; }
.reseau3__carte .point--siege { transform: translate(-8px, -50%); z-index: 1; }
.reseau3__carte .point--siege i {
  width: 16px; height: 16px; background: #4FC3F0;
  box-shadow: 0 0 0 6px rgba(79, 195, 240, .22);
  animation: pouls 2.4s ease-in-out infinite;
}
.reseau3__carte .point--siege b { padding: 4px 10px; border-radius: 99px; background: #fff; color: var(--navy); font-weight: 800; }
@keyframes pouls { 50% { box-shadow: 0 0 0 12px rgba(79, 195, 240, 0); } }
@media (prefers-reduced-motion: reduce) { .reseau3__carte .point--siege i { animation: none; } }

.reseau3__txt { padding: clamp(24px, 4vw, 48px); display: flex; flex-direction: column; min-width: 0; }
.reseau3__txt .chapeau { margin-top: 12px; }
.reseau3__chiffres { display: flex; gap: clamp(20px, 4vw, 40px); margin: 22px 0 18px; padding-bottom: 20px; border-bottom: 1px solid var(--line-2); }
.reseau3__chiffres li { display: grid; gap: 2px; }
.reseau3__chiffres b { font-size: clamp(1.7rem, 3vw, 2.2rem); font-weight: 800; letter-spacing: -.03em; color: var(--navy); line-height: 1; }
.reseau3__chiffres span { font-size: .7rem; font-weight: 700; letter-spacing: .1em; text-transform: uppercase; color: var(--tx-3); }

.reseau3__villes { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 2px 18px; }
.reseau3 .ville { display: flex; align-items: center; gap: 11px; padding: 10px 6px; border-radius: 10px; transition: background .2s ease; }
.reseau3 .ville:hover { background: var(--mist); }
.reseau3 .ville__iso {
  flex: none; display: grid; place-items: center; width: 34px; height: 26px;
  font-size: .64rem; font-weight: 800; letter-spacing: .06em;
  border-radius: 7px; background: rgba(48, 39, 132, .08); color: var(--navy);
}
.reseau3 .ville__nom { flex: 1; min-width: 0; display: grid; font-size: .92rem; font-weight: 800; color: var(--tx-1); line-height: 1.2; }
.reseau3 .ville__nom small { font-size: .74rem; font-weight: 500; color: var(--tx-3); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.reseau3 .ville__fleche { flex: none; color: var(--tx-3); transition: transform .2s ease, color .2s ease; }
.reseau3 .ville__fleche svg { width: 15px; height: 15px; display: block; }
.reseau3 .ville:hover .ville__fleche { color: var(--cyan-ink); transform: translateX(3px); }

@media (min-width: 900px) {
  .reseau3 { grid-template-columns: 1fr 1fr; }
  .reseau3__carte { order: 2; }   /* texte à gauche, carte à droite */
  .reseau3__carte { aspect-ratio: auto; min-height: 460px; }
}
@media (max-width: 420px) {
  .reseau3__carte .point b { font-size: .64rem; }
  .reseau3__villes { gap: 0 8px; }
  .reseau3 .ville { gap: 8px; padding: 9px 2px; }
  .reseau3 .ville__iso { width: 30px; }
  .reseau3 .ville__fleche { display: none; }
  .reseau3 .ville__nom { font-size: .84rem; }
  .reseau3 .ville__nom > :first-child, .reseau3 .ville__nom { overflow-wrap: anywhere; }
}

/* =========================================================================
   BOUTIQUE (v2) — carte photo immersive
   Bureau : texte à gauche sur dégradé marine, deux vignettes à droite.
   Mobile : photo en bandeau haut, texte dessous sur fond marine.
   ========================================================================= */
.boutique2 {
  position: relative; overflow: hidden; isolation: isolate;
  display: grid; border-radius: 24px; background: var(--navy-3); color: #fff;
}
.boutique2__fond { display: block; width: 100%; height: 220px; object-fit: cover; }
.boutique2__txt { position: relative; z-index: 1; padding: 26px 22px 28px; min-width: 0; }
.boutique2 .surtitre { color: #4FC3F0; }
.boutique2 .surtitre::before { background: #4FC3F0; }
.boutique2 .titre { color: #fff; }
.boutique2 .titre em { color: #4FC3F0; }
.boutique2 .chapeau { color: rgba(255, 255, 255, .8); margin: 12px 0 26px; max-width: 460px; }
.boutique2__infos { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 24px; }
.boutique2__infos li {
  display: inline-flex; align-items: center; gap: 8px; max-width: 100%;
  padding: 8px 13px; border-radius: 99px; font-size: .82rem;
  background: rgba(255, 255, 255, .1); border: 1px solid rgba(255, 255, 255, .14);
}
.boutique2__infos li a, .boutique2__infos li span { overflow-wrap: anywhere; }
.boutique2__infos svg { width: 15px; height: 15px; flex: none; color: #4FC3F0; }
.boutique2__infos a:hover { color: #4FC3F0; }
.boutique2__actions { display: flex; flex-wrap: wrap; gap: 10px; }
.boutique2__appel { --btn-fond: transparent; --btn-txt: #fff; border: 1px solid rgba(255, 255, 255, .35); }
.boutique2__appel:hover { background: rgba(255, 255, 255, .1); }
.boutique2__vignettes { display: none; }

@media (min-width: 900px) {
  .boutique2 { min-height: 460px; grid-template-columns: minmax(0, 620px); align-items: center; }
  .boutique2__fond { position: absolute; inset: 0; height: 100%; z-index: -2; }
  .boutique2::before {
    content: ""; position: absolute; inset: 0; z-index: -1;
    background: linear-gradient(90deg, rgba(16, 11, 51, .95) 0%, rgba(16, 11, 51, .84) 48%, rgba(16, 11, 51, .2) 100%);
  }
  .boutique2__txt { padding: 52px 56px; }
  .boutique2__vignettes {
    display: grid; gap: 12px; align-self: end; justify-self: end;
    grid-template-columns: repeat(2, 150px); padding: 0 28px 28px 0;
  }
  .boutique2__vignettes img {
    width: 150px; height: 190px; object-fit: cover; border-radius: 16px;
    border: 3px solid rgba(255, 255, 255, .9); box-shadow: 0 20px 40px -20px rgba(0, 0, 0, .6);
  }
  .boutique2__vignettes img:last-child { object-position: 30% 20%; transform: translateY(-26px); }
}

/* =========================================================================
   CONSEILS (aperçu d'accueil) — un grand à gauche, deux en ligne à droite
   Tablette : le grand sur toute la largeur, deux dessous.
   Mobile : le grand, puis deux lignes compactes (vignette + titre).
   ========================================================================= */
.posts--apercu .post:not(:first-child) .post__chapo { display: none; }
@media (min-width: 640px) and (max-width: 979px) {
  .posts--apercu { grid-template-columns: repeat(2, 1fr); }
  .posts--apercu .post:first-child { grid-column: 1 / -1; }
}
@media (max-width: 639px) {
  .posts--apercu { gap: 14px; }
  .posts--apercu .post:not(:first-child) { flex-direction: row; }
  .posts--apercu .post:not(:first-child) .post__visuel { flex: 0 0 112px; aspect-ratio: auto; min-height: 120px; }
  .posts--apercu .post:not(:first-child) .post__rubrique,
  .posts--apercu .post:not(:first-child) .post__source,
  .posts--apercu .post:not(:first-child) .post__avatar,
  .posts--apercu .post:not(:first-child) .post__lire { display: none; }
  .posts--apercu .post:not(:first-child) .post__texte { font-size: .62rem; padding: 8px; }
  .posts--apercu .post:not(:first-child) .post__corps { padding: 12px 14px; gap: 6px; min-width: 0; justify-content: center; }
  .posts--apercu .post:not(:first-child) .post__titre,
  .posts--apercu .post:not(:first-child) .post__citation { font-size: .92rem; }
}
@media (min-width: 980px) {
  .posts--apercu { grid-template-columns: 1.2fr 1fr; }
  .posts--apercu .post:first-child { grid-row: span 2; }
  .posts--apercu .post:first-child .post__visuel { aspect-ratio: 16 / 10; }
  .posts--apercu .post:first-child .post__corps { padding: 24px 26px 26px; }
  .posts--apercu .post:not(:first-child) { flex-direction: row; }
  .posts--apercu .post:not(:first-child) .post__visuel { flex: 0 0 42%; aspect-ratio: auto; min-height: 200px; }
  .posts--apercu .post:not(:first-child) .post__corps { min-width: 0; }
  .posts--apercu .post:not(:first-child) .post__texte { font-size: .95rem; padding: 16px; }
}

/* conseils : le lien à droite du titre, citation lisible dans la grande case,
   cases de droite allégées (date seule, sans le réseau d'origine) */
#conseils .tete-duo > div { max-width: 760px; }
.posts--apercu .post:first-child .post__texte { font-size: clamp(1.15rem, 2.2vw, 1.8rem); max-width: 20ch; }
.posts--apercu .post:not(:first-child) .post__source { display: none; }
@media (min-width: 980px) {
  .posts--apercu .post:first-child .post__visuel { aspect-ratio: 16 / 9; }
}

/* tablette : carte du réseau moins haute, bandeau boutique plus généreux */
@media (min-width: 560px) and (max-width: 899px) {
  .reseau3__carte { aspect-ratio: 16 / 9; }
  .boutique2__fond { height: 280px; }
}
.posts--apercu .post:first-child .post__texte { font-size: clamp(1.25rem, 2.8vw, 1.8rem); }

/* =========================================================================
   23. LA BOUTIQUE (octobre 2026)
   -------------------------------------------------------------------------
   Le catalogue est devenu une boutique qui pousse à la vente : visite
   filmée au défilement (section .vol, plus bas), rayons collés en haut d'écran, packs, rangées horizontales,
   panier de commande et barre panier permanente. Tout reste en mode jour
   (consigne client) : l'immersion vient de la photo du produit — sa scène
   inclinable et son halo flouté qui teinte le fond — pas d'un fond sombre.
   ========================================================================= */

/* --- engagements --------------------------------------------------------- */
/* Sur téléphone, les engagements tiennent en 2 × 2 : le titre suffit. */
@media (max-width: 559px) {
  .page-boutique .engagements__in { grid-template-columns: 1fr 1fr; gap: 12px; padding-block: 14px; }
  .page-boutique .engagements li { font-size: .78rem; gap: 8px; }
  .page-boutique .engagements li > span:last-child { font-size: 0; }
  .page-boutique .engagements b { font-size: .78rem; }
}
.boutique-tete .titre { font-size: clamp(1.7rem, 3.6vw, 2.6rem); margin-bottom: 18px; }
.boutique-etapes { display: flex; flex-wrap: wrap; gap: 10px 26px; list-style: none; margin: 0; padding: 0; }
.boutique-etapes li { display: flex; align-items: center; gap: 10px; font-size: .88rem; font-weight: 600; color: var(--tx-2); }
.boutique-etapes b {
  display: grid; place-items: center; width: 26px; height: 26px; border-radius: 50%;
  background: var(--navy); color: #fff; font-size: .78rem; font-weight: 800; flex: none;
}

.engagements { background: var(--paper); border-block: 1px solid var(--line-2); }
.engagements__in { display: grid; gap: 14px 26px; padding-block: 20px; }
@media (min-width: 560px) { .engagements__in { grid-template-columns: 1fr 1fr; } }
@media (min-width: 1000px) { .engagements__in { grid-template-columns: repeat(4, 1fr); } }
.engagements li { display: flex; align-items: center; gap: 12px; font-size: .82rem; line-height: 1.4; color: var(--tx-2); }
.engagements li > .ic {
  width: 42px; height: 42px; padding: 10px; border-radius: 50%;
  background: rgba(0, 159, 227, .1); color: var(--cyan-ink);
}
.engagements b { display: block; color: var(--tx-1); font-weight: 800; }

/* --- par usage ----------------------------------------------------------- */
.usages { display: grid; gap: 14px; grid-template-columns: 1fr 1fr; grid-auto-rows: 190px; }
.usage--large { grid-column: span 2; }
@media (min-width: 900px) {
  .usages { grid-template-columns: repeat(4, 1fr); grid-auto-rows: 230px; }
  .usage--large { grid-column: span 2; grid-row: span 2; }
}
.usage {
  position: relative; isolation: isolate; overflow: hidden;
  display: flex; align-items: flex-end;
  border-radius: 20px; color: #fff;
}
.usage img {
  position: absolute; inset: 0; z-index: -2; width: 100%; height: 100%; object-fit: cover;
  transition: transform 1.1s var(--ease-expo);
}
.usage:hover img { transform: scale(1.07); }
.usage__voile {
  position: absolute; inset: 0; z-index: -1;
  background: linear-gradient(180deg, rgba(16, 11, 51, 0) 25%, rgba(16, 11, 51, .88) 100%);
}
.usage__txt { display: grid; gap: 4px; padding: clamp(16px, 2vw, 24px); }
.usage__nom { font-size: clamp(1.1rem, 1.8vw, 1.45rem); font-weight: 800; letter-spacing: -.02em; }
.usage--large .usage__nom { font-size: clamp(1.4rem, 2.6vw, 2.2rem); }
.usage__desc { font-size: .8rem; color: rgba(255, 255, 255, .82); }
.usage__chiffres { font-size: .76rem; color: rgba(255, 255, 255, .9); }
.usage__chiffres b { color: var(--cyan-3); }
.usage__fleche {
  position: absolute; top: 14px; right: 14px;
  display: grid; place-items: center; width: 40px; height: 40px; border-radius: 50%;
  background: rgba(255, 255, 255, .92); color: var(--navy);
  transform: rotate(-45deg); transition: transform .35s var(--ease-expo), background .2s;
}
.usage__fleche .ic { width: 18px; height: 18px; }
.usage:hover .usage__fleche { transform: rotate(0); background: var(--cyan); color: #04263A; }
@media (max-width: 559px) { .usage:not(.usage--large) .usage__desc { display: none; } }

/* --- rails (rangées horizontales) ---------------------------------------- */
.rail-sec .tete-duo { align-items: center; }
.rail-sec .surtitre .ic { width: 15px; height: 15px; }
.rail__piste {
  display: grid; grid-auto-flow: column; grid-auto-columns: minmax(232px, 258px); gap: 16px;
  overflow-x: auto; scroll-snap-type: x mandatory; overscroll-behavior-x: contain;
  margin-inline: calc(var(--pad) * -1); padding: 10px var(--pad) 18px; scroll-padding-inline: var(--pad);
  scrollbar-width: thin; scrollbar-color: var(--mist-2) transparent;
}
.rail__piste > .carte { scroll-snap-align: start; }
/* L'apparition au défilement observe la fenêtre : une carte hors champ à
   droite n'y entrerait jamais. Dans un rail, tout est visible d'emblée. */
.rail .reveal { opacity: 1; transform: none; }
.rail__fleches { display: flex; gap: 8px; }
.rail__b {
  display: grid; place-items: center; width: 44px; height: 44px; border-radius: 50%;
  border: 1px solid var(--line); background: var(--paper); color: var(--navy);
  transition: background .2s var(--ease), color .2s var(--ease), border-color .2s;
}
.rail__b:hover { background: var(--navy); border-color: var(--navy); color: #fff; }
.rail__b .ic { width: 18px; height: 18px; }
@media (pointer: coarse) { .rail__fleches { display: none; } }

/* --- packs --------------------------------------------------------------- */
.packs__chapeau { margin: -12px 0 clamp(24px, 3vw, 36px); }
.packs { display: grid; gap: 18px; }
@media (min-width: 1000px) { .packs { grid-template-columns: 1fr 1fr; } }
.pack {
  display: grid; overflow: hidden;
  background: var(--paper); border: 1px solid var(--line-2); border-radius: 22px;
  transition: transform .42s var(--ease-expo), box-shadow .42s var(--ease-expo), border-color .3s;
}
.pack:hover { transform: translateY(-5px); border-color: rgba(0, 159, 227, .4); box-shadow: 0 30px 60px -34px rgba(18, 19, 43, .4); }
@media (min-width: 600px) { .pack { grid-template-columns: 42% 1fr; } }
.pack__vis { position: relative; min-height: 230px; background: var(--nuit); }
.pack__machine { position: absolute; inset: 0; display: grid; place-items: center; }
.pack__machine img { width: 100%; height: 100%; object-fit: cover; }
.pack__machine svg { width: 58%; color: var(--navy); }
.pack__plus { position: absolute; left: 12px; bottom: 12px; display: flex; }
.pack__plus li {
  display: grid; place-items: center; width: 50px; height: 50px; border-radius: 12px; overflow: hidden;
  background: #fff; box-shadow: 0 10px 22px -10px rgba(16, 11, 51, .5); color: var(--navy);
  border: 2px solid #fff;
}
.pack__plus li:not(:first-child) { margin-left: -10px; }
.pack__plus svg { width: 74%; }
.pack__plus .il-a { color: var(--cyan); }
.pack__plus img { width: 100%; height: 100%; object-fit: cover; }
.pack__corps { display: flex; flex-direction: column; gap: 8px; padding: clamp(18px, 2.4vw, 26px); }
.pack__pour { font-size: .68rem; font-weight: 800; letter-spacing: .16em; text-transform: uppercase; color: var(--cyan-ink); }
.pack__nom { font-size: 1.32rem; font-weight: 800; letter-spacing: -.02em; color: var(--tx-1); }
.pack__accroche { font-size: .86rem; color: var(--tx-2); }
.pack__liste { display: grid; margin-top: 6px; }
.pack__liste li {
  display: flex; justify-content: space-between; gap: 12px; padding: 7px 0;
  border-top: 1px dashed var(--line); font-size: .8rem; color: var(--tx-2);
}
.pack__liste a:hover { color: var(--tx-1); text-decoration: underline; }
.pack__liste span { flex: none; font-weight: 700; color: var(--tx-1); }
.pack__pied { display: flex; flex-wrap: wrap; align-items: flex-end; justify-content: space-between; gap: 12px; margin-top: auto; padding-top: 12px; }
.pack__total { display: grid; font-size: 1.4rem; font-weight: 800; letter-spacing: -.02em; color: var(--navy); line-height: 1.15; }
.pack__total small { font-size: .7rem; font-weight: 600; letter-spacing: 0; color: var(--tx-3); }

/* --- les rayons ---------------------------------------------------------- */
.rayons-sec { padding-top: 0; }
.rayons-barre {
  position: sticky; top: 0; z-index: 30;
  background: rgba(244, 245, 250, .88);
  backdrop-filter: blur(16px) saturate(1.5); -webkit-backdrop-filter: blur(16px) saturate(1.5);
  border-bottom: 1px solid var(--line-2);
  transition: top .35s var(--ease-expo);
}
/* La barre se glisse sous la navigation quand celle-ci est affichée, et
   remonte en haut d'écran quand elle se replie au défilement. */
.site-entete:not(.est-cachee) ~ #contenu .rayons-barre { top: var(--nav-h); }
.rayons-barre__in { display: flex; gap: 8px; padding-block: 12px; overflow-x: auto; scrollbar-width: none; }
.rayons-barre__in::-webkit-scrollbar { display: none; }
.rayon {
  flex: none; display: inline-flex; align-items: center; gap: 8px;
  padding: 9px 12px 9px 14px; border-radius: 999px;
  border: 1px solid var(--line); background: var(--paper);
  font-size: .82rem; font-weight: 700; color: var(--tx-2);
  transition: background .2s var(--ease), color .2s var(--ease), border-color .2s var(--ease);
}
.rayon:hover { border-color: var(--navy); color: var(--tx-1); }
.rayon .ic { width: 17px; height: 17px; color: var(--cyan-ink); }
.rayon small { padding: 1px 8px; border-radius: 999px; background: var(--mist); font-size: .68rem; font-weight: 800; color: var(--tx-3); }
.rayon--promo .ic { color: var(--promo); }
.rayon.est-actif { background: var(--navy); border-color: var(--navy); color: #fff; }
.rayon.est-actif .ic { color: var(--cyan-3); }
.rayon.est-actif small { background: rgba(255, 255, 255, .18); color: #fff; }
.rayon--promo.est-actif { background: var(--promo); border-color: var(--promo); }
.rayon--promo.est-actif .ic { color: #fff; }
.rayons-tete { padding-top: clamp(30px, 4vw, 52px); margin-bottom: clamp(22px, 3vw, 34px); }
@media (min-width: 981px) {
  .rayons-sec .filtres {
    top: calc(var(--nav-h) + 84px);
    max-height: calc(100vh - var(--nav-h) - 104px); overflow-y: auto; overscroll-behavior: contain;
  }
}

/* --- « vous ne trouvez pas ? » ------------------------------------------- */
.introuvable {
  display: grid; gap: 24px; align-items: center;
  padding: clamp(24px, 4vw, 44px); border-radius: 24px;
  background: linear-gradient(135deg, rgba(0, 159, 227, .09), rgba(48, 39, 132, .07)), var(--paper);
  border: 1px solid var(--line-2);
}
.introuvable__txt { margin-top: 10px; max-width: 58ch; color: var(--tx-2); font-size: .95rem; }
.introuvable__actions { display: flex; flex-wrap: wrap; gap: 10px; }
@media (min-width: 860px) { .introuvable { grid-template-columns: 1fr auto; } }

/* --- accès boutique, sur l'accueil -------------------------------------- */
.acces-boutique {
  display: grid; gap: 18px; margin-top: clamp(28px, 4vw, 44px);
  padding: clamp(18px, 2.6vw, 28px); border-radius: 22px;
  background: var(--paper); border: 1px solid var(--line-2);
  grid-template-areas: "tete" "rayons" "cta";
}
@media (min-width: 980px) {
  .acces-boutique { grid-template-columns: 1fr auto; grid-template-areas: "tete cta" "rayons rayons"; align-items: center; }
}
.acces-boutique__tete { grid-area: tete; }
.acces-boutique__titre { display: flex; align-items: center; gap: 10px; font-size: 1.15rem; font-weight: 800; color: var(--tx-1); }
.acces-boutique__titre .ic { width: 22px; height: 22px; color: var(--cyan-ink); }
.acces-boutique__txt { margin-top: 4px; font-size: .86rem; color: var(--tx-2); }
.acces-boutique__rayons { grid-area: rayons; display: grid; gap: 10px; grid-template-columns: repeat(auto-fit, minmax(176px, 1fr)); }
.acces-boutique > .cta-pill { grid-area: cta; justify-self: start; }
.acces-rayon {
  display: flex; align-items: center; gap: 12px; height: 100%;
  padding: 12px 14px; border-radius: 14px; background: var(--mist); border: 1px solid transparent;
  transition: background .2s var(--ease), border-color .2s var(--ease), transform .3s var(--ease-expo);
}
.acces-rayon:hover { background: var(--paper); border-color: rgba(0, 159, 227, .45); transform: translateY(-2px); }
.acces-rayon > .ic { width: 40px; height: 40px; padding: 9px; border-radius: 50%; background: var(--paper); color: var(--cyan-ink); }
.acces-rayon--promo > .ic { color: var(--promo); }
.acces-rayon b { display: block; font-size: .86rem; color: var(--tx-1); line-height: 1.25; }
.acces-rayon small { font-size: .72rem; color: var(--tx-3); }
.cta-pill--plein { background: var(--navy); border-color: var(--navy); color: #fff; }
:root[data-theme] .cta-pill--plein:hover { background: var(--cyan); border-color: var(--cyan); color: #04263A; }

/* --- carte produit : version boutique ------------------------------------ */
.carte__vue2 { opacity: 0; transition: opacity .55s var(--ease); }
@media (hover: hover) { .carte:hover .carte__vue2 { opacity: 1; } }
.carte__apercu {
  position: absolute; left: 50%; bottom: 12px; z-index: 2;
  display: inline-flex; align-items: center; gap: 6px;
  padding: 6px 13px; border-radius: 999px;
  background: rgba(255, 255, 255, .92); color: var(--navy);
  backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px);
  font-size: .72rem; font-weight: 800; white-space: nowrap;
  opacity: 0; transform: translate(-50%, 8px);
  transition: opacity .3s var(--ease), transform .4s var(--ease-expo);
}
.carte__apercu .ic { width: 15px; height: 15px; }
@media (hover: hover) { .carte:hover .carte__apercu { opacity: 1; transform: translate(-50%, 0); } }
.carte__visuel .etiq { z-index: 2; }
.carte__gain {
  width: fit-content; margin-top: 4px; padding: 2px 8px; border-radius: 999px;
  background: rgba(214, 22, 90, .1); color: var(--promo); font-size: .66rem; font-weight: 800;
}
.btn--carte { --btn-fond: var(--navy); --btn-txt: #fff; }
.btn--carte:hover { --btn-fond: var(--cyan); --btn-txt: #04263A; }
.stock--faible .stock__point { animation: stock-pouls 1.6s var(--ease) infinite; }
@keyframes stock-pouls { 50% { box-shadow: 0 0 0 5px rgba(180, 86, 10, .18); } }

/* --- fiche produit : version boutique ------------------------------------ */
.pf__commander { margin-top: 10px; }
.pf__offert { display: flex; align-items: center; gap: 8px; margin-top: 10px; font-size: .8rem; color: var(--ok); }
.pf__offert .ic { width: 18px; height: 18px; }
.pf__offert b { margin-right: 3px; }

.rebond { animation: rebond .55s var(--ease-spring); }
@keyframes rebond { 40% { transform: scale(1.2); } }

/* La vignette qui file vers le panier (envoler(), js/pages/commun.js). */
.vol-panier {
  position: fixed; z-index: 1200; pointer-events: none; margin: 0;
  border-radius: 16px; object-fit: cover; background: #fff; color: var(--navy);
  box-shadow: 0 18px 40px -12px rgba(16, 11, 51, .5);
}
svg.vol-panier { padding: 10px; }

/* --- barre panier en bas d'écran ----------------------------------------- */
.barre-panier {
  position: fixed; left: 50%; bottom: 16px; z-index: 690;
  width: min(430px, calc(100vw - 172px));
  transform: translate(-50%, 160%); visibility: hidden;
  transition: transform .5s var(--ease-expo), visibility .5s;
}
.barre-panier.est-visible { transform: translate(-50%, 0); visibility: visible; }
body.defilement-bloque .barre-panier { transform: translate(-50%, 160%); }
.barre-panier__in {
  width: 100%; display: flex; align-items: center; gap: 12px;
  padding: 7px 7px 7px 9px; border-radius: 999px;
  background: var(--navy); color: #fff; text-align: left;
  box-shadow: 0 22px 44px -18px rgba(16, 11, 51, .7), 0 0 0 1px rgba(255, 255, 255, .08) inset;
}
.barre-panier__ic {
  position: relative; flex: none; display: grid; place-items: center;
  width: 42px; height: 42px; border-radius: 50%; background: rgba(255, 255, 255, .14);
}
.barre-panier__ic .ic { width: 20px; height: 20px; }
.barre-panier__ic b {
  position: absolute; top: -4px; right: -4px; min-width: 19px; height: 19px; padding: 0 5px;
  display: grid; place-items: center; border-radius: 999px;
  background: var(--promo); font-size: .66rem; font-weight: 800; border: 2px solid var(--navy);
}
.barre-panier__txt { display: grid; min-width: 0; line-height: 1.2; }
.barre-panier__txt small { font-size: .62rem; font-weight: 700; letter-spacing: .14em; text-transform: uppercase; opacity: .7; }
.barre-panier__txt strong { font-size: .92rem; font-weight: 800; white-space: nowrap; }
.barre-panier__cta {
  margin-left: auto; flex: none; display: inline-flex; align-items: center; gap: 7px;
  padding: 11px 17px; border-radius: 999px;
  background: var(--cyan); color: #04263A; font-size: .82rem; font-weight: 800;
  transition: background .2s var(--ease);
}
.barre-panier__in:hover .barre-panier__cta { background: #fff; }
.barre-panier__cta .ic { width: 16px; height: 16px; }
@media (max-width: 560px) {
  .barre-panier { left: 82px; right: 74px; width: auto; transform: translateY(160%); }
  .barre-panier.est-visible { transform: none; }
  body.defilement-bloque .barre-panier { transform: translateY(160%); }
  .barre-panier__txt small { display: none; }
  .barre-panier__txt strong { font-size: .84rem; }
  .barre-panier__cta { padding: 0; width: 40px; height: 40px; justify-content: center; font-size: 0; gap: 0; }
  .barre-panier__cta .ic { width: 18px; height: 18px; }
}
/* La carte du concierge se pose au-dessus de la barre, pas dessus. */
body.a-panier .concierge { bottom: 84px; }
@media (max-width: 600px) { body.a-panier .concierge { bottom: 76px; } }

/* --- panier --------------------------------------------------------------- */
.panneau--panier .panneau__boite { width: min(480px, 100%); }
.panneau__nb { font-weight: 200; color: var(--cyan-ink); }
.panneau__vide-ic {
  display: grid; place-items: center; width: 78px; height: 78px; border-radius: 50%;
  background: rgba(0, 159, 227, .1);
}
.panneau__vide .panneau__vide-ic .ic { width: 34px; height: 34px; color: var(--cyan-ink); }
.panneau__vide .lien-fleche .ic, .panneau__vide .btn .ic { width: 16px; height: 16px; color: currentColor; }

.jauge { margin-bottom: 14px; padding: 12px 14px; border-radius: 12px; background: rgba(0, 159, 227, .08); }
.jauge__txt { display: flex; gap: 9px; font-size: .8rem; line-height: 1.45; color: var(--tx-2); }
.jauge__txt b { color: var(--tx-1); }
.jauge__txt .ic { width: 18px; height: 18px; flex: none; color: var(--cyan-ink); margin-top: 1px; }
.jauge__piste { display: block; height: 6px; margin-top: 9px; border-radius: 3px; background: rgba(48, 39, 132, .1); overflow: hidden; }
.jauge__plein {
  display: block; height: 100%; width: calc(var(--p, 0) * 100%); border-radius: inherit;
  background: linear-gradient(90deg, var(--cyan), var(--navy));
  transition: width .6s var(--ease-expo);
}
.jauge--ok { background: rgba(18, 136, 90, .09); }
.jauge--ok .ic { color: var(--ok); }
.jauge--ok .jauge__plein { background: var(--ok); }

.pligne__ref s { margin-left: 4px; color: var(--tx-3); }

.avec { margin-top: 20px; }
.avec__titre { margin-bottom: 10px; font-size: .7rem; font-weight: 800; letter-spacing: .16em; text-transform: uppercase; color: var(--tx-3); }
.avec__liste { display: grid; gap: 8px; }
.avec__item {
  display: grid; grid-template-columns: 52px 1fr auto; align-items: center; gap: 12px;
  padding: 8px 10px 8px 8px; border-radius: 12px; border: 1px solid var(--line-2);
}
.avec__vis { display: grid; place-items: center; width: 52px; height: 52px; border-radius: 10px; overflow: hidden; background: var(--mist); color: var(--navy); }
.avec__vis img { width: 100%; height: 100%; object-fit: cover; }
.avec__vis svg { width: 78%; }
.avec__vis .il-a { color: var(--cyan); }
.avec__txt { display: grid; min-width: 0; line-height: 1.3; }
.avec__nom {
  font-size: .8rem; font-weight: 700; color: var(--tx-1);
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; line-clamp: 2; overflow: hidden;
}
.avec__txt b { font-size: .78rem; color: var(--tx-2); }
.avec__plus {
  display: grid; place-items: center; width: 36px; height: 36px; border-radius: 50%;
  background: var(--navy); color: #fff; transition: background .2s var(--ease);
}
.avec__plus:hover { background: var(--cyan); color: #04263A; }
.avec__plus.est-ajoute { background: var(--ok); }
.avec__plus .ic { width: 17px; height: 17px; }

.choix { border: 0; display: grid; gap: 8px; min-width: 0; }
.choix .panneau__form-titre { display: flex; align-items: center; gap: 9px; margin-bottom: 4px; }
.choix .panneau__form-aide { margin-top: -6px; }
.choix__n {
  display: grid; place-items: center; flex: none; width: 22px; height: 22px; border-radius: 50%;
  background: var(--navy); color: #fff; font-size: .7rem; font-weight: 800;
}
.choix__opt {
  display: flex; align-items: center; gap: 12px;
  padding: 11px 13px; border-radius: 12px; border: 1.5px solid var(--line);
  cursor: pointer; transition: border-color .2s var(--ease), background .2s var(--ease);
}
.choix__opt:hover { border-color: rgba(48, 39, 132, .45); }
.choix__opt:has(input:checked) { border-color: var(--navy); background: rgba(48, 39, 132, .05); }
.choix__opt input { flex: none; width: 17px; height: 17px; accent-color: var(--navy); }
.choix__ic { display: grid; place-items: center; flex: none; width: 36px; height: 36px; border-radius: 50%; background: var(--mist); }
.choix__ic .ic { width: 18px; height: 18px; color: var(--cyan-ink); }
.choix__txt { display: grid; line-height: 1.35; }
.choix__txt b { font-size: .86rem; color: var(--tx-1); }
.choix__txt small { font-size: .74rem; color: var(--tx-3); }
.choix__offert {
  margin-left: 6px; padding: 2px 8px; border-radius: 999px;
  background: var(--ok); color: #fff; font-style: normal; font-size: .64rem; font-weight: 800;
  vertical-align: 1px;
}
.choix--compact .choix__opt { padding: 9px 12px; }
.panneau__form .choix + .choix { margin-top: 8px; }

.panneau__eco { margin-left: 6px; font-style: normal; font-size: .74rem; font-weight: 800; color: var(--promo); }
.btn--commander { font-size: 1rem; padding-block: 16px; box-shadow: 0 16px 30px -16px rgba(37, 211, 102, .8); }
.panneau--panier .panneau__mention { display: flex; align-items: center; justify-content: center; gap: 6px; margin: 2px 0 0; text-align: center; }
.panneau--panier .panneau__mention .ic { width: 14px; height: 14px; color: var(--ok); }
.panneau__mail { width: 100%; padding: 4px; font-size: .76rem; font-weight: 600; color: var(--tx-3); text-decoration: underline; text-underline-offset: 3px; }
.panneau__mail:hover { color: var(--tx-1); }
/* Les notifications montent au-dessus de la barre panier au lieu de la
   recouvrir (elles bloquaient le clic sur « Commander »). */
body.a-panier .toasts { bottom: 86px; transition: bottom .4s var(--ease-expo); }

/* =========================================================================
   24. LA VISITE — film de la boutique lu au défilement (js/components/vol.js)
   -------------------------------------------------------------------------
   Seule bande sombre de la boutique : c'est un film, il se regarde dans le
   noir comme au cinéma. Tout ce qui suit redevient clair (mode jour).
   La hauteur de la section = la course de défilement des temps
   (--vol-course, posée par le moteur) + un écran pour la scène épinglée.
   ========================================================================= */
.vol { position: relative; padding: 0; background: #05040c; height: calc(var(--vol-course, 0vh) + 100vh); }
/* Le film doit rester dégagé : ni bouton de remontée, ni carte du concierge
   par-dessus (le concierge attend qu'on ait quitté la visite). */
body.sur-vol .remonter { opacity: 0; visibility: hidden; }
.vol::before { display: none; }
.vol__scene { position: sticky; top: 0; height: 100vh; overflow: hidden; isolation: isolate; }
.vol__affiche, .vol__toile { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.vol__affiche { z-index: -2; transition: opacity .6s var(--ease); }
.vol__toile { z-index: -1; }
.vol.est-pret .vol__affiche { opacity: 0; }
.vol__voile {
  position: absolute; inset: 0; z-index: 0; pointer-events: none;
  background:
    linear-gradient(90deg, rgba(5, 4, 12, .82) 0%, rgba(5, 4, 12, .5) 34%, rgba(5, 4, 12, .08) 62%, transparent 75%),
    linear-gradient(180deg, rgba(5, 4, 12, .6) 0%, transparent 20%, transparent 70%, rgba(5, 4, 12, .55) 100%),
    radial-gradient(120% 90% at 70% 50%, transparent 55%, rgba(5, 4, 12, .45) 100%);
}
.vol__chapitres { position: absolute; inset: 0; z-index: 1; pointer-events: none; }
.vol-ch {
  position: absolute;
  left: max(var(--pad), calc((100vw - var(--wrap)) / 2 + var(--pad)));
  bottom: clamp(70px, 13vh, 150px);
  width: min(580px, calc(100vw - 2 * var(--pad)));
  color: #fff; opacity: 0; pointer-events: auto;
  will-change: opacity, transform;
}
.vol-ch[inert] { pointer-events: none; }
.vol-ch__fixe { display: none; }
.vol-ch__sur {
  display: inline-flex; align-items: center; gap: 11px; margin-bottom: 14px;
  font-size: .7rem; font-weight: 700; letter-spacing: .22em; text-transform: uppercase; color: #4FC3F0;
}
.vol-ch__sur::before { content: ""; width: 26px; height: 2px; background: currentColor; }
.vol-ch__titre {
  font-size: clamp(2.3rem, 5.4vw, 4.6rem); font-weight: 800; line-height: 1; letter-spacing: -.035em;
  color: #fff; text-wrap: balance; text-shadow: 0 6px 40px rgba(0, 0, 0, .35);
}
.vol-ch__titre em { font-style: normal; font-weight: 200; color: #4FC3F0; }
.vol-ch__txt { margin-top: 16px; max-width: 46ch; font-size: clamp(.95rem, 1.3vw, 1.08rem); color: rgba(255, 255, 255, .84); }
.vol-ch__actions { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 24px; }
.vol-ch__actions .btn { padding: 14px 22px; }
.vol-ch__actions .ic { width: 17px; height: 17px; }
.btn--verre {
  --btn-fond: rgba(255, 255, 255, .1); --btn-txt: #fff;
  border-color: rgba(255, 255, 255, .32);
  backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px);
}
.btn--verre:hover { --btn-fond: rgba(255, 255, 255, .2); filter: none; }

/* produit « à la une » posé dans le chapitre du mur */
.vol-une {
  display: flex; align-items: center; gap: 12px; margin-top: 20px; max-width: 440px;
  padding: 9px 9px 9px 9px; border-radius: 16px;
  background: rgba(255, 255, 255, .1); border: 1px solid rgba(255, 255, 255, .18);
  backdrop-filter: blur(14px); -webkit-backdrop-filter: blur(14px);
}
.vol-une img { flex: none; width: 72px; height: 54px; border-radius: 10px; object-fit: cover; }
.vol-une__txt { display: grid; min-width: 0; line-height: 1.3; }
.vol-une__sur { font-size: .64rem; font-weight: 800; letter-spacing: .16em; text-transform: uppercase; color: #FF7BA8; }
.vol-une__nom { font-size: .92rem; font-weight: 700; color: #fff; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.vol-une__nom:hover { text-decoration: underline; }
.vol-une__prix { font-size: .9rem; font-weight: 800; color: #9BDDF7; }
.vol-une__prix { white-space: nowrap; }
.vol-une__prix s { margin-left: 6px; font-weight: 500; color: rgba(255, 255, 255, .55); }
.vol-une__plus {
  margin-left: auto; flex: none; display: grid; place-items: center;
  width: 46px; height: 46px; border-radius: 50%; background: var(--cyan); color: #04263A;
  transition: background .2s var(--ease), transform .3s var(--ease-spring);
}
.vol-une__plus:hover { background: #fff; transform: scale(1.06); }
.vol-une__plus.est-ajoute, .vol-une__plus.est-dedans { background: var(--ok); color: #fff; }
.vol-une__plus .ic { width: 20px; height: 20px; }

.vol-fin { display: grid; gap: 8px; margin-top: 18px; }
.vol-fin li { display: flex; align-items: center; gap: 10px; font-size: .92rem; color: rgba(255, 255, 255, .9); }
.vol-fin .ic { width: 18px; height: 18px; color: #4FC3F0; }
.vol-fin a:hover { color: #fff; text-decoration: underline; }

.vol__progres { position: absolute; left: 0; right: 0; bottom: 0; z-index: 2; height: 3px; background: rgba(255, 255, 255, .12); }
.vol__progres span {
  display: block; height: 100%; transform: scaleX(0); transform-origin: left;
  background: linear-gradient(90deg, var(--cyan), #9BDDF7);
}
.vol__passer {
  position: absolute; z-index: 3; right: var(--pad); bottom: 22px;
  display: inline-flex; align-items: center; gap: 6px;
  padding: 9px 14px; border-radius: 999px;
  background: rgba(255, 255, 255, .1); border: 1px solid rgba(255, 255, 255, .22); color: #fff;
  backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px);
  font-size: .76rem; font-weight: 700;
}
.vol__passer:hover { background: rgba(255, 255, 255, .2); }
.vol__passer .ic { width: 15px; height: 15px; }
body.a-panier .vol__passer { bottom: 84px; }
.vol__debug {
  position: fixed; left: 8px; top: 80px; z-index: 2000; padding: 6px 9px; border-radius: 6px;
  background: rgba(0, 0, 0, .75); color: #0f0; font: 12px/1.4 monospace;
}
#boutique-contenu:focus { outline: none; }

/* navigation transparente, en clair, tant qu'on est au-dessus du film */
body.sur-vol .site-entete .nav {
  background: linear-gradient(180deg, rgba(5, 4, 12, .55), transparent) !important;
  backdrop-filter: none !important; -webkit-backdrop-filter: none !important;
  box-shadow: none !important; border-color: transparent !important;
}
body.sur-vol .site-entete .nav::after { display: none; }
body.sur-vol .site-entete .nav__liens a { color: rgba(255, 255, 255, .86); }
body.sur-vol .site-entete .nav__liens a:hover,
body.sur-vol .site-entete .nav__liens a[aria-current="page"] { color: #fff; }
body.sur-vol .site-entete .marque__mot b { color: #fff; }
body.sur-vol .site-entete .marque__mot i { color: #4FC3F0; }
body.sur-vol .site-entete .marque__signe { fill: #fff; }
body.sur-vol .site-entete .nav__burger { color: #fff; }

/* téléphone : le texte passe en bas, sur un voile plus franc */
@media (max-width: 760px) {
  .vol__voile {
    background:
      linear-gradient(180deg, rgba(5, 4, 12, .55) 0%, transparent 18%, transparent 36%, rgba(5, 4, 12, .9) 78%, rgba(5, 4, 12, .96) 100%);
  }
  .vol-ch { left: var(--pad); right: var(--pad); width: auto; bottom: 74px; }
  .vol-ch__titre { font-size: clamp(2rem, 9vw, 2.6rem); }
  .vol-ch__txt { font-size: .92rem; margin-top: 12px; }
  .vol-ch__actions { margin-top: 18px; }
  .vol-ch__actions .btn { flex: 1 1 auto; padding: 13px 16px; }
  .vol__passer { bottom: 16px; right: auto; left: 50%; transform: translateX(-50%); }
  body.a-panier .vol__passer { display: none; }
}

/* mouvement réduit / appareil modeste : chaque chapitre à plat, sur son image */
.vol--fixe { height: auto; }
.vol--fixe .vol__scene { position: static; height: auto; overflow: visible; }
.vol--fixe .vol__affiche, .vol--fixe .vol__toile, .vol--fixe .vol__voile,
.vol--fixe .vol__progres, .vol--fixe .vol__passer { display: none; }
.vol--fixe .vol__chapitres { position: static; }
.vol--fixe .vol-ch {
  position: relative; left: auto; bottom: auto; width: auto;
  opacity: 1 !important; transform: none !important;
  display: flex; align-items: flex-end; min-height: 82vh; overflow: hidden; isolation: isolate;
  padding: calc(var(--nav-h) + 40px) var(--pad) 56px;
}
.vol--fixe .vol-ch__fixe { display: block; position: absolute; inset: 0; z-index: -2; width: 100%; height: 100%; object-fit: cover; }
.vol--fixe .vol-ch::after {
  content: ""; position: absolute; inset: 0; z-index: -1;
  background: linear-gradient(180deg, rgba(5, 4, 12, .35), rgba(5, 4, 12, .9));
}
.vol--fixe .vol-ch__in { width: min(580px, 100%); margin-left: max(0px, calc((100vw - var(--wrap)) / 2)); }

/* =========================================================================
   BOUTIQUE — bannière du modèle Ecomus « electronic », puis rayons, barre
   et grille du modèle Ecomus « shop collection » ; filtres en panneau
   latéral. Tout est préfixé `bq-`, `sub-`, `eco-` ou `.page-boutique` :
   rien ne déborde sur les autres pages.
   ========================================================================= */

/* --- les rayons en cartes de collection (Ecomus « shop collection ») --- */
.sub-rayons { padding: clamp(36px, 5vw, 60px) 0 0; }
.sub-rayons::before { display: none; }
.sub-rayons__liste {
  display: grid; grid-auto-flow: column; grid-auto-columns: minmax(150px, 1fr); gap: 14px;
  overflow-x: auto; scrollbar-width: none; scroll-snap-type: x mandatory;
  margin-inline: calc(var(--pad) * -1); padding: 2px var(--pad);
}
.sub-rayons__liste::-webkit-scrollbar { display: none; }
@media (min-width: 1000px) { .sub-rayons__liste { gap: 24px; } }
.sub-rayon {
  position: relative; scroll-snap-align: start;
  aspect-ratio: 4 / 5; border: 0; border-radius: 10px; padding: 0; overflow: hidden;
  background: var(--teinte, #F3F4F8); cursor: pointer; color: var(--tx-1);
  outline: 2px solid transparent; outline-offset: -2px;
  transition: outline-color .2s var(--ease);
}
.sub-rayon__illus { position: absolute; inset: 0 0 22%; display: grid; place-items: center; }
.sub-rayon__illus svg { width: 46%; height: auto; transition: transform .6s var(--ease); }
.sub-rayon:hover .sub-rayon__illus svg { transform: scale(1.08); }
.sub-rayon__nom {
  position: absolute; left: 50%; bottom: 18px; transform: translateX(-50%);
  width: max-content; max-width: calc(100% - 20px); padding: 11px 18px;
  background: #fff; text-align: center;
  font: 500 .88rem/1 var(--font);
  transition: background .2s var(--ease), color .2s var(--ease);
}
.sub-rayon:hover .sub-rayon__nom { background: var(--tx-1); color: #fff; }
.sub-rayon.est-actif { outline-color: var(--tx-1); }
.sub-rayon.est-actif .sub-rayon__nom { background: var(--tx-1); color: #fff; }

/* --- la barre : filtre · colonnes · tri, collée en haut ---------------- */
.sub-outils { position: sticky; top: 0; z-index: 30; background: var(--fond); transition: top .3s var(--ease); }
.site-entete:not(.est-cachee) ~ #contenu .sub-outils { top: var(--nav-h); }
.sub-outils__in {
  display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; gap: 12px;
  padding-block: clamp(18px, 2.4vw, 28px) 14px;
}
.sub-filtre {
  justify-self: start; display: inline-flex; align-items: center; gap: 10px;
  padding: 12px 16px; border: 1px solid #EBEBEB; border-radius: 3px; background: #fff;
  font: 700 .74rem/1 var(--font); letter-spacing: .08em; text-transform: uppercase; color: var(--tx-1);
  cursor: pointer; transition: border-color .2s var(--ease);
}
.sub-filtre:hover { border-color: var(--tx-1); }
.sub-filtre .ic { width: 20px; height: 20px; }
.sub-tri {
  justify-self: end; min-width: 190px; padding: 12px 16px; border: 1px solid #EBEBEB; border-radius: 3px;
  background: #fff; font: 500 .88rem var(--font); color: var(--tx-1); cursor: pointer;
}
.sub-vues { display: flex; align-items: center; gap: 18px; }
.sub-vue {
  display: flex; gap: 4px; padding: 6px 2px; border: 0; background: none; cursor: pointer;
}
.sub-vue i { width: 6px; height: 6px; border-radius: 50%; background: #B9B9B9; transition: background .2s var(--ease); }
.sub-vue:hover i, .sub-vue.est-actif i { background: var(--tx-1); }
/* 1 colonne : au téléphone seulement ; 3 et 4 : à l'écran seulement. */
.sub-vue--1 { display: none; }
@media (max-width: 759px) {
  .sub-vue--1 { display: flex; }
  .sub-vue--3, .sub-vue--4 { display: none; }
  .sub-outils__in { grid-template-columns: auto 1fr auto; }
  .sub-vues { justify-self: center; }
  .sub-tri { min-width: 0; max-width: 150px; padding: 11px 10px; font-size: .82rem; }
  .sub-filtre { padding: 11px 12px; }
}

/* --- filtres : recherche et nombre de résultats dans le panneau -------- */
.bq-filtres__compte { margin-left: 8px; font-size: .8rem; font-weight: 500; letter-spacing: .06em; text-transform: uppercase; color: var(--tx-3); }
.page-boutique .filtres .recherche { flex: none; }
.page-boutique .filtres .recherche__x[hidden] { display: none; }
.page-boutique .filtres input[type="search"]::-webkit-search-cancel-button { display: none; }
/* panneau ouvert : le concierge et la barre panier s'effacent */
html.filtres-ouverts .concierge,
html.filtres-ouverts .barre-panier,
html.filtres-ouverts .bulle-wa { visibility: hidden; }

/* filtres : un panneau qui glisse de la gauche, sur tous les écrans */
.page-boutique .cat-page { display: block; }
.page-boutique .filtres,
.page-boutique .filtres.est-ouvert {
  position: fixed; top: 0; bottom: 0; left: 0; z-index: 940;
  width: min(420px, 100%); max-height: none;
  padding: 26px 28px 0; overflow-y: auto; overscroll-behavior: contain;
  align-content: start;
  border: 0; border-radius: 0; background: var(--fond);
  box-shadow: 0 0 60px rgba(16, 11, 51, .18);
  transition: transform .34s var(--ease-net), visibility 0s linear .34s;
  transform: translateX(-105%); visibility: hidden;
}
.page-boutique .filtres.est-ouvert {
  transform: translateX(0); visibility: visible;
  transition: transform .34s var(--ease-net);
}
.bq-filtres__titre { order: -1; margin: 0; font-size: 1.5rem; font-weight: 700; letter-spacing: -.02em; color: var(--tx-1); }
.page-boutique .filtres .js-reinit-filtres { order: 98; }
.page-boutique .filtres__fermer {
  order: 99; display: flex; position: sticky; bottom: 0;
  margin: 0 -28px; padding: 18px; width: auto; border-radius: 0;
  background: var(--tx-1); color: var(--fond); border: 0;
}
.bq-voile { position: fixed; inset: 0; z-index: 935; background: rgba(16, 11, 51, .32); }
.bq-voile[hidden] { display: none; }
html.filtres-ouverts { overflow: hidden; }

/* la grille : façon Ecomus « shop collection », sans bordure */
.bq-res { padding: 6px 0 clamp(56px, 7vw, 96px); }
/* `section` isole ses calques : le panneau de filtres resterait sous la nav. */
.page-boutique .bq-res { isolation: auto; }
.page-boutique .bq-res::before { display: none; }
.page-boutique .actifs:not(:empty) { margin-bottom: 18px; }
.bq-grille { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 28px 14px; }
@media (min-width: 760px)  { .bq-grille { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 40px 24px; } }
@media (min-width: 1100px) { .bq-grille { grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 44px 30px; } }
/* le choix du visiteur (pastilles de points) */
@media (max-width: 759px) { [data-grille][data-cols="1"] .bq-grille { grid-template-columns: minmax(0, 1fr); } }
@media (min-width: 760px) {
  [data-grille][data-cols="2"] .bq-grille { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  [data-grille][data-cols="3"] .bq-grille { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  [data-grille][data-cols="4"] .bq-grille { grid-template-columns: repeat(4, minmax(0, 1fr)); }
}

.bq-carte { min-width: 0; }
.bq-carte__vis { position: relative; aspect-ratio: 4 / 5; overflow: hidden; border-radius: 10px; background: #F5F5F5; }
.bq-carte__lien { display: block; width: 100%; height: 100%; }
.bq-carte__img { width: 100%; height: 100%; object-fit: cover; transition: transform .8s var(--ease); }
.bq-carte__illus { display: grid; place-items: center; width: 100%; height: 100%; color: var(--tx-1); }
.bq-carte__illus svg { width: 44%; height: auto; transition: transform .8s var(--ease); }
.bq-carte:hover .bq-carte__img,
.bq-carte:hover .bq-carte__illus svg { transform: scale(1.06); }

.bq-carte__badge {
  position: absolute; top: 14px; right: 14px; z-index: 1;
  padding: 6px 11px; border-radius: 999px; background: #F2542D;
  font-size: .78rem; font-weight: 700; line-height: 1; color: #fff;
}

/* deux boutons carrés qui montent au survol */
.bq-carte__actions {
  position: absolute; left: 0; right: 0; bottom: 16px; z-index: 1;
  display: flex; justify-content: center; gap: 8px;
}
.bq-carte__action {
  display: grid; place-items: center; width: 42px; height: 42px;
  border: 0; border-radius: 3px; background: #fff; color: var(--tx-1); cursor: pointer;
  box-shadow: 0 6px 16px -10px rgba(16, 11, 51, .4);
  transition: transform .35s var(--ease), opacity .35s var(--ease), background .2s var(--ease), color .2s var(--ease);
}
.bq-carte__action .ic { width: 19px; height: 19px; }
.bq-carte__action:hover { background: var(--tx-1); color: #fff; }
.bq-carte__ajout.est-dedans,
.bq-carte__ajout.est-ajoute { background: var(--navy); color: #fff; }
@media (hover: hover) {
  .bq-carte__action { opacity: 0; transform: translateY(14px); }
  .bq-carte__apercu { transition-delay: .04s; }
  .bq-carte:hover .bq-carte__action,
  .bq-carte__action:focus-visible { opacity: 1; transform: none; }
}
/* au doigt : le panier seul, rond, toujours visible en coin */
@media (hover: none) {
  .bq-carte__actions { left: auto; right: 10px; bottom: 10px; }
  .bq-carte__apercu { display: none; }
  .bq-carte__action { width: 38px; height: 38px; border-radius: 50%; }
}

.bq-carte__nom {
  margin: 16px 0 6px; font-size: .95rem; font-weight: 400; line-height: 1.4;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
.bq-carte__nom a { color: var(--tx-1); text-decoration: none; }
.bq-carte__nom a:hover { color: #F2542D; }
.bq-carte__prix { margin: 0; font-size: .92rem; font-weight: 700; color: var(--tx-1); }
.bq-carte__prix s { margin-right: 6px; color: var(--tx-3); font-weight: 400; font-size: .84rem; }
.bq-carte__promo { color: #DB1215; }
.bq-carte__prix small { color: var(--tx-3); font-weight: 400; font-size: .76rem; }
@media (max-width: 759px) {
  .bq-carte__nom { margin-top: 12px; font-size: .86rem; }
  .bq-carte__prix { font-size: .86rem; }
}

/* =========================================================================
   LE HAUT DE LA BOUTIQUE — façon Ecomus « electronic »
   ========================================================================= */

.eco-btn {
  display: inline-flex; align-items: center; gap: 10px;
  padding: 15px 28px; border-radius: 999px; border: 1px solid var(--navy);
  background: var(--navy); color: #fff; text-decoration: none;
  font: 600 .92rem/1 var(--font);
  transition: background .2s var(--ease), color .2s var(--ease), border-color .2s var(--ease);
}
.eco-btn .ic { width: 16px; height: 16px; }
.eco-btn:hover { background: var(--navy-ink); border-color: var(--navy-ink); }
.eco-btn--ligne { background: transparent; color: var(--navy); }
.eco-btn--ligne:hover { background: var(--navy); color: #fff; border-color: var(--navy); }

/* bannière */
.eco-hero { padding: 0; background: #EEF8FD; overflow: hidden; }
.eco-hero__in {
  display: grid; align-items: center; gap: 28px;
  min-height: clamp(380px, 46vw, 560px); padding-block: 44px;
}
@media (min-width: 900px) { .eco-hero__in { grid-template-columns: 1.05fr 1fr; gap: 48px; } }
.eco-hero__sur {
  margin: 0 0 16px; font-size: .86rem; font-weight: 500;
  letter-spacing: .06em; text-transform: uppercase; color: var(--tx-1);
}
.eco-hero__titre {
  margin: 0 0 18px; max-width: 13ch;
  font-size: clamp(2.3rem, 5.2vw, 4.1rem); font-weight: 500;
  line-height: 1.04; letter-spacing: -.035em; color: var(--tx-1);
}
.eco-hero__desc { margin: 0 0 30px; max-width: 46ch; font-size: 1rem; line-height: 1.6; color: var(--tx-2); }
.eco-hero__actions { display: flex; flex-wrap: wrap; gap: 12px; }
.eco-hero__vis img {
  display: block; width: 100%; aspect-ratio: 4 / 3; object-fit: cover; border-radius: 16px;
}

/* services : la bande grise d'Ecomus */
.page-boutique .eco-services { background: #F5F5F5; border: 0; }
.page-boutique .eco-services .engagements__in { padding-block: clamp(30px, 4vw, 50px); gap: 22px 30px; }
.page-boutique .eco-services li { font-size: .86rem; }
.page-boutique .eco-services li > .ic {
  width: 58px; height: 58px; padding: 17px; border-radius: 50%;
  background: #fff; color: var(--tx-1);
}
.page-boutique .eco-services b { font-size: 1rem; font-weight: 600; margin-bottom: 2px; }

@media (max-width: 759px) {
  .eco-hero__in { padding-block: 34px 28px; min-height: 0; }
}

/* =========================================================================
   PANIER — refonte douce (octobre 2026), d'après le panier de On : deux
   temps (panier → vos informations), beaucoup d'air, des filets fins,
   vignettes arrondies sur gris, un seul bouton plein par écran. Tout est
   préfixé `pn-` dans `.panneau--panier`, plus la carte `.ajout-pop`.
   ========================================================================= */

.panneau--panier .panneau__boite { width: min(440px, 100%); background: #fff; }

.pn-tete {
  flex: none; display: flex; align-items: center; gap: 10px;
  padding: 18px 20px 14px 24px;
}
.pn-tete__titre { flex: 1; margin: 0; font-size: 1.15rem; font-weight: 600; letter-spacing: -.01em; color: var(--tx-1); }
.pn-tete__nb { font-weight: 400; color: var(--tx-3); }
.pn-tete__b {
  flex: none; display: grid; place-items: center; width: 38px; height: 38px;
  border: 0; border-radius: 50%; background: #F4F4F6; color: var(--tx-1); cursor: pointer;
  transition: background .2s var(--ease);
}
.pn-tete__b:hover { background: #E9E9EE; }
.pn-tete__b .ic { width: 18px; height: 18px; }
.pn-tete__b[data-retour] { margin-left: -6px; }
.pn-tete__b[hidden] { display: none; }

.panneau--panier .pn-corps { padding: 6px 24px 20px; }

/* la ligne de livraison offerte : un texte et un filet */
.pn-livraison { margin-bottom: 8px; padding: 12px 0 16px; border-bottom: 1px solid #EFEFF2; }
.pn-livraison p { display: flex; align-items: center; gap: 9px; margin: 0 0 10px; font-size: .82rem; color: var(--tx-2); }
.pn-livraison b { color: var(--tx-1); font-weight: 600; }
.pn-livraison .ic { width: 17px; height: 17px; flex: none; color: var(--tx-1); }
.pn-livraison__piste { display: block; height: 3px; border-radius: 3px; background: #EFEFF2; overflow: hidden; }
.pn-livraison__piste span {
  display: block; height: 100%; width: calc(var(--p, 0) * 100%);
  border-radius: inherit; background: var(--tx-1); transition: width .5s var(--ease);
}
.pn-livraison.est-offerte .ic { color: var(--ok); }
.pn-livraison.est-offerte .pn-livraison__piste span { background: var(--ok); }

/* les articles */
.pn-lignes { margin: 0; padding: 0; list-style: none; }
.pn-ligne {
  display: grid; grid-template-columns: 76px 1fr auto; gap: 14px; align-items: start;
  padding: 18px 0; border-bottom: 1px solid #EFEFF2;
}
.pn-ligne:last-child { border-bottom: 0; }
.pn-ligne__vis {
  display: grid; place-items: center; width: 76px; height: 76px;
  border-radius: 10px; background: #F5F5F5; overflow: hidden; color: var(--tx-1);
}
.pn-ligne__vis img { width: 100%; height: 100%; object-fit: cover; }
.pn-ligne__vis svg { width: 62%; height: auto; }
.pn-ligne__txt { min-width: 0; }
.pn-ligne__nom {
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
  font-size: .9rem; font-weight: 500; line-height: 1.4; color: var(--tx-1); text-decoration: none;
}
.pn-ligne__nom:hover { text-decoration: underline; text-underline-offset: 3px; }
.pn-ligne__unite { margin: 3px 0 10px; font-size: .78rem; color: var(--tx-3); }
.pn-ligne__unite s { margin-left: 4px; }
.pn-ligne__bas { display: flex; align-items: center; gap: 14px; }
.pn-ligne__prix { margin: 0; font-size: .9rem; font-weight: 600; color: var(--tx-1); white-space: nowrap; }
.pn-ligne__retirer {
  padding: 0; border: 0; background: none; cursor: pointer;
  font: 400 .78rem var(--font); color: var(--tx-3);
  text-decoration: underline; text-underline-offset: 3px;
}
.pn-ligne__retirer:hover { color: var(--tx-1); }

.pn-qte {
  display: inline-flex; align-items: center; height: 32px;
  border: 1px solid #E4E4E9; border-radius: 999px;
}
.pn-qte button {
  display: grid; place-items: center; width: 30px; height: 100%;
  border: 0; background: none; color: var(--tx-2); cursor: pointer; border-radius: 999px;
}
.pn-qte button:hover { color: var(--tx-1); }
.pn-qte .ic { width: 13px; height: 13px; }
.pn-qte input {
  width: 26px; padding: 0; border: 0; background: none; text-align: center;
  font: 600 .84rem var(--font); color: var(--tx-1); -moz-appearance: textfield;
}
.pn-qte input::-webkit-outer-spin-button, .pn-qte input::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
.pn-qte input:focus { outline: none; }

/* le pied : totaux + un bouton */
.panneau--panier .pn-pied {
  gap: 12px; padding: 16px 24px 20px; border-top: 1px solid #EFEFF2; background: #fff;
}
.pn-totaux { display: grid; gap: 7px; margin: 0; }
.pn-totaux div { display: flex; justify-content: space-between; align-items: baseline; gap: 12px; }
.pn-totaux dt, .pn-totaux dd { margin: 0; font-size: .86rem; color: var(--tx-2); }
.pn-totaux dd { color: var(--tx-1); }
.pn-totaux__eco dd { color: var(--ok); }
.pn-totaux__total { padding-top: 6px; }
.pn-totaux__total dt { font-size: 1rem; font-weight: 600; color: var(--tx-1); }
.pn-totaux__total dt small { margin-left: 6px; font-size: .78rem; font-weight: 400; color: var(--tx-3); }
.pn-totaux__total dd { font-size: 1.15rem; font-weight: 700; letter-spacing: -.01em; }

.pn-btn {
  display: flex; align-items: center; justify-content: center; gap: 10px;
  width: 100%; padding: 16px 22px; border-radius: 999px;
  border: 1px solid var(--tx-1); background: #fff; color: var(--tx-1); cursor: pointer;
  font: 600 .95rem/1 var(--font); text-decoration: none;
  transition: background .2s var(--ease), color .2s var(--ease), border-color .2s var(--ease);
}
.pn-btn--plein { background: var(--tx-1); color: #fff; }
.pn-btn--plein:hover { background: var(--navy); border-color: var(--navy); }
.pn-btn--wa { border-color: var(--wa); background: var(--wa); color: #fff; }
.pn-btn--wa:hover { filter: brightness(.95); }
.pn-btn .ic { width: 19px; height: 19px; }
.pn-mention { display: flex; align-items: center; justify-content: center; gap: 6px; margin: 0; font-size: .76rem; color: var(--tx-3); text-align: center; }
.pn-mention .ic { width: 14px; height: 14px; }
.pn-note { margin: 0; padding: 10px 12px; border-radius: 8px; background: #FFF6E5; font-size: .78rem; color: #7A5200; }
.pn-erreur { margin: 0; font-size: .8rem; line-height: 1.45; color: var(--promo); text-align: center; }
.pn-erreur[hidden] { display: none; }
.pn-mail {
  justify-self: center; padding: 0; border: 0; background: none; cursor: pointer;
  font: 400 .78rem var(--font); color: var(--tx-2); text-decoration: underline; text-underline-offset: 3px;
}

/* panier vide */
.pn-vide { display: grid; justify-items: center; gap: 10px; padding: 56px 0; text-align: center; }
.pn-vide__ic { display: grid; place-items: center; width: 64px; height: 64px; border-radius: 50%; background: #F4F4F6; }
.pn-vide__ic .ic { width: 26px; height: 26px; color: var(--tx-1); }
.pn-vide__titre { margin: 6px 0 0; font-size: 1.05rem; font-weight: 600; color: var(--tx-1); }
.pn-vide__txt { margin: 0 0 10px; max-width: 30ch; font-size: .86rem; color: var(--tx-2); }
.pn-vide .pn-btn { width: auto; padding-inline: 28px; }

/* 2. vos informations */
.panneau--panier .pn-form { display: grid; gap: 24px; margin: 0; padding-top: 12px; border-top: 0; }
.pn-groupe { display: grid; gap: 8px; margin: 0; padding: 0; border: 0; min-width: 0; }
.pn-groupe legend { margin-bottom: 10px; padding: 0; font-size: .95rem; font-weight: 600; color: var(--tx-1); }
.pn-opt {
  position: relative; display: flex; align-items: flex-start; gap: 12px;
  padding: 13px 14px; border: 1px solid #E4E4E9; border-radius: 10px; cursor: pointer;
  transition: border-color .2s var(--ease), background .2s var(--ease);
}
.pn-opt:hover { border-color: #C9C9D2; }
.pn-opt input {
  flex: none; appearance: none; width: 18px; height: 18px; margin: 1px 0 0;
  border: 1.5px solid #C2C2CC; border-radius: 50%; background: #fff; cursor: pointer;
  transition: border-color .2s var(--ease), box-shadow .2s var(--ease);
}
.pn-opt input:checked { border-color: var(--tx-1); box-shadow: inset 0 0 0 4px #fff, inset 0 0 0 9px var(--tx-1); }
.pn-opt input:focus-visible { outline: 2px solid var(--navy); outline-offset: 2px; }
.pn-opt:has(input:checked) { border-color: var(--tx-1); background: #FAFAFB; }
.pn-opt__txt { display: grid; gap: 2px; }
.pn-opt__txt b { font-size: .88rem; font-weight: 500; color: var(--tx-1); }
.pn-opt__txt small { font-size: .76rem; line-height: 1.4; color: var(--tx-3); }

.pn-champ > span { font-size: .78rem; font-weight: 500; color: var(--tx-2); }
.pn-champ input, .pn-champ textarea {
  padding: 13px 14px; border-color: #E4E4E9; border-radius: 10px; background: #fff; font-size: .9rem;
}
.pn-champ input:focus, .pn-champ textarea:focus { border-color: var(--tx-1); box-shadow: none; }
.pn-champ textarea { min-height: 72px; }

.pn-plus { margin-top: 4px; }
.pn-plus summary {
  display: flex; align-items: center; gap: 8px; padding: 6px 0; cursor: pointer; list-style: none;
  font-size: .86rem; font-weight: 500; color: var(--tx-1);
}
.pn-plus summary::-webkit-details-marker { display: none; }
.pn-plus summary::before { content: "+"; display: grid; place-items: center; width: 20px; height: 20px; border-radius: 50%; background: #F4F4F6; font-weight: 600; }
.pn-plus[open] summary::before { content: "−"; }
.pn-plus summary small { font-weight: 400; color: var(--tx-3); }
.pn-plus .pn-champ { margin-top: 12px; }

/* =========================================================================
   « Ajouté à votre panier » — la carte de On, en clair
   ========================================================================= */
.ajout-pop {
  position: fixed; top: calc(var(--nav-h) + 12px); right: 16px; z-index: 995;
  width: min(380px, calc(100vw - 24px)); padding: 18px 18px 16px;
  border-radius: 16px; background: #fff;
  box-shadow: 0 24px 60px -24px rgba(16, 11, 51, .35), 0 0 0 1px rgba(16, 11, 51, .05);
  opacity: 0; transform: translateY(-10px);
  transition: opacity .3s var(--ease), transform .3s var(--ease);
}
.ajout-pop[hidden] { display: none; }
.ajout-pop.est-visible { opacity: 1; transform: none; }
.ajout-pop__tete { display: flex; align-items: center; justify-content: space-between; margin-bottom: 14px; }
.ajout-pop__titre { display: flex; align-items: center; gap: 8px; margin: 0; font-size: .95rem; font-weight: 600; color: var(--tx-1); }
.ajout-pop__titre .ic { width: 17px; height: 17px; color: var(--ok); }
.ajout-pop__x {
  display: grid; place-items: center; width: 32px; height: 32px;
  border: 0; border-radius: 50%; background: #F4F4F6; color: var(--tx-1); cursor: pointer;
}
.ajout-pop__x .ic { width: 15px; height: 15px; }
.ajout-pop__produit { display: grid; grid-template-columns: 64px 1fr auto; gap: 12px; align-items: center; margin-bottom: 16px; }
.ajout-pop__vis {
  grid-row: span 1; display: grid; place-items: center; width: 64px; height: 64px;
  border-radius: 10px; background: #F5F5F5; overflow: hidden; color: var(--tx-1);
}
.ajout-pop__vis img { width: 100%; height: 100%; object-fit: cover; }
.ajout-pop__vis svg { width: 62%; height: auto; }
.ajout-pop__nom {
  margin: 0; font-size: .86rem; font-weight: 500; line-height: 1.4; color: var(--tx-1);
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
.ajout-pop__prix { margin: 0; font-size: .86rem; font-weight: 600; color: var(--tx-1); white-space: nowrap; }
.ajout-pop__actions { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
.ajout-pop__b {
  padding: 13px 10px; border: 1px solid var(--tx-1); border-radius: 999px;
  background: #fff; color: var(--tx-1); cursor: pointer; font: 600 .86rem/1 var(--font);
  transition: background .2s var(--ease), color .2s var(--ease);
}
.ajout-pop__b:hover { background: #F4F4F6; }
.ajout-pop__b--plein { background: var(--tx-1); color: #fff; }
.ajout-pop__b--plein:hover { background: var(--navy); border-color: var(--navy); }
@media (max-width: 559px) {
  .ajout-pop { top: auto; bottom: 12px; right: 12px; transform: translateY(14px); }
}
