/* ============================================================================
   PRESSING DE VERNIER — feuille de style principale
   ----------------------------------------------------------------------------
   Ce fichier définit les couleurs, les tailles de texte et les espacements
   du site entier. Tout est réglé au même endroit, en haut, dans le bloc
   « :root ». Changer une valeur là met à jour tout le site d'un coup.
   ============================================================================ */

:root{

  /* ---- COULEURS ------------------------------------------------------
     Relevées sur le logo et sur l'affiche des 20 ans.

     L'IVOIRE EST UN PAPIER ANCIEN, PAS UN BLANC CASSÉ. Il valait #F6F3EC,
     un gris très clair neutre : à côté du vert et de l'or, il tirait au
     froid. #F3ECDC est le même ivoire décalé de six degrés vers le jaune —
     la couleur d'un papier qui a vieilli, pas une couleur nouvelle.

     LA LIMITE EST FIXÉE PAR LE CONTRASTE, pas par le goût. Deux jetons de
     texte du site sont réglés au ras du seuil de 4,5:1 : --or-grave (5,05:1
     sur l'ivoire froid) et --acier-texte (5,22:1). Réchauffer le fond les
     fait descendre ensemble. Mesuré sur #F3ECDC : or gravé 4,76:1 · acier
     4,89:1. Les deux passent. Un cran plus chaud (#F2EBDA) donnait 4,71 et
     4,84 — encore au-dessus, mais sans marge pour un futur ajustement.
     #F3ECDC est le point où le papier est franchement chaud et où la marge
     tient encore.

     --papier suit du même décalage : c'est l'ivoire d'un ton plus soutenu,
     il ne peut pas rester froid sous un fond qui ne l'est plus.           */
  --ivoire:        #F3ECDC;   /* fond principal des pages          */
  --papier:        #E8DFCA;   /* filets, bordures, fonds secondaires */
  --graphite:      #232825;   /* texte courant                     */
  --vert:          #04321E;   /* vert du logo — titres, boutons    */
  --vert-nuit:     #04180F;   /* fond des bandeaux sombres         */
  --or:            #A8842F;   /* or sur fond clair                 */
  --or-clair:      #C9A24D;   /* or sur fond sombre                */
  /* L'or du PETIT TEXTE sur fond clair. Ce n'est pas une couleur de plus
     dans la palette : c'est le seul or assez sombre pour tenir les 4,5:1
     qu'exige un texte de 11 px sur l'ivoire. L'or du site y plafonne à
     3,15:1 et l'or clair à 2,16:1 — tous deux restent justes pour un grand
     texte, un filet ou un aplat, jamais pour une légende. */
  --or-grave:      #82631F;   /* 5,05:1 sur ivoire                 */
  --acier:         #8A979B;   /* gris froid — filets, bordures     */
  /* Le gris du PETIT TEXTE. Même logique que --or-grave : --acier tient
     2,71:1 sur l'ivoire, très en dessous des 4,5:1 qu'exige une légende ou
     un lien. Il reste juste pour une bordure ou un aplat, jamais pour un mot
     qu'on doit lire. Celui-ci tient 5,22:1 sur l'ivoire et 5,78 sur le
     blanc des tableaux. */
  --acier-texte:   #5A686C;   /* 5,22:1 sur ivoire                 */
  --blanc:         #FFFFFF;

  /* Le trait du papier millimétré. Il est en OR, pas en gris : il court
     derrière des plaques vertes qui portent de l'or, et un trait gris y
     serait la seule chose froide de la vue. Très pâle — 8,5 % d'or, réduits
     encore de moitié par l'opacité de `.millimetre`, soit 4 % à l'écran. On
     ne le voit pas, on voit que le papier n'est pas nu. */
  --trait-quadrillage: rgba(168,132,47,.085);

  /* ---- LE SYSTÈME DU VERT ---------------------------------------------
     UNE seule rampe pour toutes les surfaces vertes du site. Cinq crans
     d'une même teinte (149–152°), du plus clair au plus sombre. Le cran 5
     est --vert-nuit : la rampe ne remplace pas la palette, elle la
     prolonge vers le haut.

     Chaque surface verte pioche DEUX crans dans cette rampe, et c'est le
     seul réglage qui la distingue des autres. Même famille, même grain,
     même sens de lumière — seule l'amplitude change. Voir le bloc
     « LES SURFACES VERTES », plus bas, pour le détail et la raison de
     chaque amplitude.                                                     */
  --v1: #16402B;   /* cime   — la lumière tombe ici              */
  --v2: #103322;
  --v3: #0B2718;
  --v4: #071E12;
  --v5: #04180F;   /* fond   — l'ombre. Identique à --vert-nuit  */

  /* Le grain : une turbulence fractale, sans couleur propre. Il donne de la
     matière au vert sans le déplacer d'un degré de teinte. 14 % est le
     point où la trame cesse d'être visible comme trame et devient du
     tissu ; au-delà elle se met à grésiller sur les grandes surfaces.     */
  --grain-tissu: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3'/%3E%3C/filter%3E%3Crect width='180' height='180' filter='url(%23n)' opacity='.5'/%3E%3C/svg%3E");
  --grain-force: .14;

  /* ---- TEXTES SUR FOND SOMBRE ---------------------------------------- */
  --sur-nuit:      #F6F3EC;
  --sur-nuit-doux: rgba(246,243,236,.74);

  /* ---- POLICES -------------------------------------------------------
     Hébergées dans assets/polices/ : aucun appel à un service extérieur. */
  --serif: "Newsreader", Georgia, "Times New Roman", serif;
  --sans:  "Archivo", -apple-system, "Segoe UI", Roboto, Helvetica, sans-serif;

  /* Le nom de la maison, et lui seul : bandeau, en-tête, sceau. Les titres
     de pages restent en --serif. */
  --logotype: "Cinzel", Georgia, "Times New Roman", serif;

  /* ---- TAILLES DE TEXTE ----------------------------------------------
     Les corps de TEXTE gardent le rapport 1,25 et leurs valeurs : Archivo
     et Inter ont des hauteurs d'x voisines, rien ne bouge à la lecture.

     Les corps d'AFFICHAGE descendent d'environ 15 %. La hauteur d'x de
     Newsreader est nettement supérieure à celle de Cormorant Garamond :
     aux mêmes valeurs en pixels, les titres paraîtraient une taille trop
     gros. Seul --t-xl est arrondi vers le haut (22,95 → 24 px), pour
     garder un écart perceptible avec --t-l à 21 px.                      */
  --t-xs:  12px;                        /* étiquettes espacées   */
  --t-s:   14px;                        /* légendes              */
  --t-m:   17px;                        /* texte courant         */
  --t-l:   21px;                        /* chapô, prix           */
  --t-xl:  24px;                        /* titres de carte       */
  --t-2xl: clamp(26px, 2.9vw, 36px);    /* titres secondaires    */
  --t-3xl: clamp(33px, 4.8vw, 56px);    /* titres de section     */
  --t-4xl: clamp(36px, 5.6vw, 72px);    /* titre de page         */

  /* ---- ESPACEMENTS --------------------------------------------------- */
  --s1: 8px;   --s2: 16px;  --s3: 24px;  --s4: 40px;
  --s5: 64px;  --s6: 96px;  --s7: 140px;

  /* ---- MISE EN PAGE -------------------------------------------------- */
  --largeur-max: 1180px;
  --marge-page:  clamp(18px, 4vw, 54px);

  /* ---- MOUVEMENT ----------------------------------------------------- */
  --transition: 260ms cubic-bezier(.22,.61,.36,1);
}

/* ============================================================================
   BASE
   ============================================================================ */
*,*::before,*::after{ box-sizing:border-box; }

/* `scroll-padding-top` : la hauteur de ce qui reste en haut de l'écran. Sans
   lui, un lien d'ancre — le sommaire de la page Tarifs, le lien d'évitement —
   amène sa cible EXACTEMENT au bord haut de la fenêtre, c'est-à-dire derrière
   la bande fixe. Le titre visé disparaît dessous.

   Ce qui reste en haut, c'est la bande du logo, et elle seule : sa hauteur
   RÉELLE est mesurée par assets/site.js et exposée en `--h-bande-logo`.
   La valeur de repli, 61 px, est celle de la bande à sa taille de texte par
   défaut — un visiteur qui a forcé une taille minimale la fait grandir, et
   une valeur figée laisserait le titre à moitié caché. Seize pixels d'air
   en plus. La valeur mobile est plus bas, avec le reste du régime étroit. */
html{
  scroll-behavior:smooth; -webkit-text-size-adjust:100%;
  scroll-padding-top:calc(var(--h-bande-logo,61px) + 16px);
}

/* Newsreader porte un axe de taille optique : son dessin s'épaissit de
   lui-même dans les petits corps et s'affine dans les grands. C'est le
   comportement par défaut du navigateur ; on l'écrit pour que personne ne
   le neutralise par mégarde. */
:where(html){ font-optical-sizing:auto; }

/* LA PLACE DE LA BANDE FIXE. Elle est sortie du flux, donc rien ne la
   réserve : sans ce retrait, le nom d'or de la plaque commencerait sous elle
   et les soixante premiers pixels de chaque page seraient cachés. Le retrait
   suit la hauteur mesurée, jamais une valeur figée — voir `--h-bande-logo`
   dans assets/site.js. Sur téléphone la plaque du nom est fixe elle aussi ;
   le retrait vaut alors les deux, et c'est écrit dans le régime étroit. */
body{
  margin:0;
  padding-top:var(--h-bande-logo,61px);
  background:var(--ivoire);
  color:var(--graphite);
  font-family:var(--sans);
  font-size:var(--t-m);
  line-height:1.62;
  font-weight:300;
  overflow-x:hidden;
}

img,svg{ max-width:100%; height:auto; display:block; }
a{ color:inherit; text-decoration:none; }
button{ font:inherit; cursor:pointer; }

/* UN LIEN DANS UNE PHRASE. Le site enlève le soulignement à tous les liens :
   c'est juste pour une navigation, un bouton ou une carte, où la place et la
   forme disent déjà qu'on peut cliquer. Au milieu d'un paragraphe, plus rien
   ne le dit — un lien sans soulignement y devient un mot ordinaire. Il en
   reprend donc un, en or gravé, à distance du texte. */
.lien{
  color:var(--or-grave);
  text-decoration:underline;
  text-decoration-thickness:1px;
  text-underline-offset:3px;
  transition:color var(--transition);
}
.lien:hover{ color:var(--vert); }

/* Anneau de focus visible partout : obligatoire pour la navigation clavier */
:focus-visible{
  outline:2px solid var(--or);
  outline-offset:4px;
  border-radius:2px;
}

/* Lien d'évitement, pour les lecteurs d'écran et le clavier.
   Il se pose SOUS la bande fixe : au bord haut il la recouvrirait, et le
   premier arrêt du clavier masquerait le numéro de téléphone. */
.saut{
  position:absolute; left:-9999px; top:var(--h-bande-logo,61px); z-index:200;
  background:var(--vert); color:var(--ivoire); padding:14px 20px;
  font-size:var(--t-s); letter-spacing:.1em; text-transform:uppercase;
}
.saut:focus{ left:0; }

.zone{
  max-width:var(--largeur-max);
  margin-inline:auto;
  padding-inline:var(--marge-page);
}

/* ============================================================================
   TITRES ET TEXTES
   ============================================================================ */
h1,h2,h3,h4{ font-family:var(--serif); font-weight:600; line-height:1.06; margin:0; color:var(--vert); }
h1{ font-size:var(--t-4xl); font-weight:400; letter-spacing:-.02em; }
h2{ font-size:var(--t-3xl); font-weight:500; letter-spacing:-.01em; }
h3{ font-size:var(--t-xl); }
h4{ font-size:var(--t-l); }

/* L'italique doré, motif récurrent des titres */
.accent{ font-style:italic; font-weight:600; color:var(--or); }

.sur-titre{
  font-family:var(--sans); font-size:10px; font-weight:500;
  letter-spacing:.3em; text-transform:uppercase; color:var(--acier-texte);
  margin:0 0 var(--s3);
}

.chapo{
  font-size:var(--t-l); line-height:1.6;
  color:rgba(35,40,37,.74); max-width:54ch; margin:var(--s3) 0 0;
}

/* Le filet à losange du logo — séparateur de la marque */
.filet{ display:flex; align-items:center; gap:14px; }
.filet::before,.filet::after{
  content:""; height:1px; flex:1;
  background:linear-gradient(90deg,transparent,var(--or),transparent);
}
.filet i{ width:7px; height:7px; background:var(--or); transform:rotate(45deg); flex:none; }
.filet.court{ max-width:210px; }

/* ============================================================================
   BOUTONS
   ============================================================================ */
.bouton{
  display:inline-flex; align-items:center; justify-content:center; gap:10px;
  min-height:54px; padding:0 30px; border-radius:2px;
  font-size:11px; letter-spacing:.17em; text-transform:uppercase; font-weight:500;
  transition:background var(--transition), color var(--transition), border-color var(--transition);
}
.bouton.plein{ background:var(--vert); color:var(--ivoire); border:1px solid var(--vert); }
.bouton.plein:hover{ background:transparent; color:var(--vert); }
.bouton.vide{ border:1px solid var(--acier); color:var(--graphite); }
.bouton.vide:hover{ background:var(--papier); }

/* Sur fond sombre */
.sombre .bouton.plein{ background:var(--or-clair); color:var(--vert-nuit); border-color:var(--or-clair); }
.sombre .bouton.plein:hover{ background:transparent; color:var(--or-clair); }
.sombre .bouton.vide{ border-color:rgba(201,162,77,.55); color:var(--or-clair); }
.sombre .bouton.vide:hover{ background:rgba(201,162,77,.14); }

/* ============================================================================
   LES SURFACES VERTES — un seul traitement, décliné selon le rôle
   ----------------------------------------------------------------------------
   Quatre surfaces du site sont vertes : le bandeau du nom, les six cartes de
   métier, la bande d'entrée des pages de métier, la fin de page. Avant ce
   bloc, chacune avait reçu son propre traitement au fil des essais — deux
   halos radiaux sur le bandeau, un dégradé à deux couleurs sur les cartes, un
   aplat mort sur le pied. Des verts qui ne se ressemblaient pas.

   LA MÉCANIQUE EST LA MÊME PARTOUT :
     · un dégradé vertical, toujours de 0 % à 100 % de la surface — jamais en
       pixels. Une carte qui grandit sur un grand écran garde son modelé ;
       un dégradé calé en pixels s'y serait aplati.
     · la lumière tombe du haut. Clair en haut, sombre en bas. Sans exception,
       y compris sur les surfaces qui sont en bas de page.
     · le même grain, à la même force, DERRIÈRE le contenu (z-index:-1 sous
       `isolation:isolate`). Il ne peut donc pas passer sur les traits fins
       des illustrations dorées : ce n'est pas un réglage d'opacité qui les
       protège, c'est l'ordre des couches.

   CE QUI CHANGE D'UNE SURFACE À L'AUTRE : deux crans de la rampe --v1…--v5,
   et rien d'autre.

   DEUX RÉGLAGES, PAS UN. L'amplitude dit COMBIEN de crans ; la position dit
   LESQUELS. Les deux ont leur règle, et elles sont indépendantes.

     L'AMPLITUDE SUIT LE RÔLE
       Un objet détouré prend toute la rampe. Une bande pleine largeur en prend
       deux. Un objet a quatre bords qui bornent son dégradé et le rendent
       lisible ; une bande n'en a pas, et au-delà de deux crans elle cesse
       d'être une surface pour devenir un effet.

     LA POSITION SUIT LA PLACE DANS LA PAGE
       Ce qui est en haut prend les crans hauts, ce qui est en bas les crans
       bas. La page entre par v2 et sort par v5 : elle s'éclaire en arrivant et
       s'éteint en partant. C'est la même lumière à l'échelle du document, et
       pas seulement à celle de chaque bloc.

   CE QUE ÇA DONNE, MESURÉ :

     BANDEAU DU NOM        2 crans   v2 → v4      118 px
       Une bande, donc deux crans — et les crans HAUTS, il ouvre la page.
       Bridé aussi pour une raison qui lui est propre : il porte des capitales
       d'or fines sur toute sa largeur, et au-delà de deux crans le contraste
       de l'or change entre le sommet et la base des lettres.

     BANDE D'ENTRÉE        2 crans   v2 → v4      ≈ 400 px
       Une bande, donc deux crans — et les MÊMES que le bandeau du nom, qui
       est juste au-dessus d'elle sur une page de métier. Deux bandes vertes
       qui se suivent à trois pixels l'une de l'autre doivent parcourir la
       même distance, sinon la seconde repart plus clair ou plus sombre que
       la première n'a fini, et la jointure se voit comme une marche.
       Elle est trois fois plus haute pour les deux mêmes crans : c'est la
       pente la plus douce du site, et c'est voulu — elle porte un titre de
       54 px et une carte de papier, pas des capitales fines.

     CARTE DE MÉTIER       4 crans   v1 → v5      403 px
       Un objet détouré, le seul du site : toute la rampe. La carte doit se
       lire comme une plaque bombée, pas comme une découpe. C'est la pente la
       plus raide de la page — un cran tous les 100 px — et c'est justement ce
       qui la détache du papier.

     PIED DE PAGE          2 crans   v3 → v5      ≈ 337 px
       Une bande, donc deux crans — et les crans BAS, il ferme la page. Il
       finit sur v5 : rien ne vient après, la page s'éteint.
       Avant que la bande d'appel n'y soit fondue, la fin de page faisait
       962 px en deux blocs et prenait trois crans. Elle en fait trois fois
       moins aujourd'hui, en un seul : à trois crans sur 337 px la pente
       aurait triplé, et un fond de page se serait mis à ressembler à une
       carte.

   `.sombre` reste un aplat : c'est v5, le dernier cran de la rampe. Une
   surface sans dégradé qui se tient au bout de l'échelle est dans le système,
   pas à côté.

   La liste ci-dessous est la liste COMPLÈTE des surfaces vertes du site. Rien
   d'autre n'est vert. Ajouter une surface verte, c'est l'ajouter ici — pas
   lui écrire un traitement à elle.
   ============================================================================ */
.ent-plaque,
.ent-metier,
.tr-carte,
.pied{ position:relative; isolation:isolate; }

.ent-plaque::after,
.ent-metier::after,
.tr-carte::after,
.pied::after{
  content:""; position:absolute; inset:0; z-index:-1; pointer-events:none;
  opacity:var(--grain-force);
  background-image:var(--grain-tissu);
}

/* ============================================================================
   L'EN-TÊTE — le même mobilier sur les neuf pages
   ----------------------------------------------------------------------------
   Trois bandes, dans cet ordre, aux mêmes places partout :

     1 · LA BANDE DU LOGO   ivoire   le bouton et le nom composé à gauche,
                                     l'ancienneté et l'état d'ouverture au
                                     centre, le téléphone à droite
     2 · LA PLAQUE DU NOM   vert     le nom en or et son filet. C'est la
                                     SEULE surface verte de l'en-tête, et la
                                     seule à porter le dégradé et le grain.
                                     Le second endroit vert de la page est le
                                     bloc des six cartes, et il n'y en a pas
                                     d'autre.
     3 · LA NAVIGATION      ivoire   les huit entrées, centrées

   D'une page à l'autre, deux choses seulement changent, et elles le doivent :
   l'entrée de menu marquée `aria-current`, et la balise du nom — `h1` sur
   l'accueil, où le nom EST le titre de la page, `p` ailleurs, où la page a
   déjà le sien. Tout le reste est identique au caractère près.

   CE QUI RESTE À L'ÉCRAN, ET POURQUOI SEULEMENT ÇA
   La bande 1, et rien d'autre : 61 px. C'est la bande des FAITS — le nom, si
   c'est ouvert, et le numéro. Ce sont les trois choses qu'on vient chercher
   en cours de lecture, et le numéro est la seule action du site qui compte
   vraiment : il doit être atteignable sans jamais remonter.

   LA NAVIGATION NE COLLE PLUS. Elle collait, et c'était le mauvais choix :
   un menu de huit entrées ne sert qu'une fois, au moment où l'on décide où
   aller. Le garder à l'écran pendant toute la lecture, c'était réserver
   52 px à une décision déjà prise. Elle défile maintenant avec la page.
   Elle reste posée HORS du `<header>` — un `<nav>` est un repère de
   navigation à part entière, la sémantique n'y perd rien.

   Sur téléphone, la navigation se replie derrière le bouton du menu. C'est
   alors la PLAQUE qui est fixe elle aussi, juste sous la bande, sinon le
   menu cesserait d'être atteignable une fois la page défilée. Voir le régime
   étroit, plus bas.

   Tout est calé sur `.zone`, donc sur le conteneur de 1180 px, comme le pied
   de page et comme la tringle.
   ============================================================================ */

/* ── 1 · LA BANDE DU LOGO ─────────────────────────────────────────────────
   Trois zones, trois registres : l'identité à gauche, les faits au centre,
   l'action à droite. La grille est `1fr auto 1fr`, donc les faits tombent
   exactement sur l'axe de la page — le même axe que le nom d'or en dessous
   et que la tringle plus bas. */
/* ELLE EST FIXE, SUR LES NEUF PAGES. `fixed` et non `sticky` : une bande
   collante reste dans le flux et ne se fige qu'une fois atteinte par le
   défilement — celle-ci doit être là dès le premier pixel et n'en plus
   bouger. Le fond est opaque, la page passe dessous.
   z-index 70 : au-dessus de la plaque (60) et du panneau du menu (54), en
   dessous du seul lien d'évitement (200). */
.ent-logo{
  position:fixed; top:0; left:0; right:0; z-index:70;
  background:var(--ivoire); border-bottom:1px solid var(--papier);
}
.ent-logo .zone{
  display:grid; grid-template-columns:1fr auto 1fr;
  column-gap:var(--s3); align-items:center;
  min-height:60px; padding-block:7px;
}

.marque{ display:flex; align-items:center; gap:13px; min-width:0; min-height:44px; }
.marque svg{ width:34px; flex:none; color:var(--vert); }
.marque .mots{ display:flex; flex-direction:column; line-height:1; }
.marque .mots b{
  font-family:var(--logotype); font-size:17px; font-weight:600;
  letter-spacing:.12em; text-transform:uppercase; color:var(--vert); white-space:nowrap;
}
/* Or gravé et non or du site : 8 px espacés, c'est du petit texte, et l'or
   du site n'y tient que 3,15:1 sur l'ivoire. */
.marque .mots span{
  font-size:8px; letter-spacing:.24em; text-transform:uppercase;
  color:var(--or-grave); margin-top:5px; white-space:nowrap;
}

/* Les deux faits qu'on vient chercher, sur l'axe de la page. */
.ent-faits{
  margin:0; display:flex; align-items:center; gap:13px;
  font-size:11px; letter-spacing:.12em; text-transform:uppercase;
  color:rgba(35,40,37,.78); white-space:nowrap;
}
.ent-faits i{ width:5px; height:5px; background:var(--or); transform:rotate(45deg); flex:none; }

/* Le téléphone est la seule action de la bande : il porte le fil d'or que le
   site coud sous ses liens de navigation — ici cousu en permanence. Le
   chiffre reste vert et non or : l'or sur l'ivoire plafonne à 3,15:1, sous
   le seuil de 4,5:1 exigé d'un texte de cette taille. */
.ent-tel{
  justify-self:end; position:relative; white-space:nowrap;
  font-size:13.5px; font-weight:600; letter-spacing:.09em; color:var(--vert);
}
/* La cible tactile fait bien 44 px, mais hors du flux : un `min-height` sur
   le lien en ferait la pièce la plus haute de la bande, qui gagnerait dix
   pixels de vide. */
.ent-tel::before{
  content:""; position:absolute; left:-8px; right:-8px;
  top:50%; height:44px; transform:translateY(-50%);
}
.ent-tel::after{
  content:""; position:absolute; left:0; right:0; bottom:-5px; height:1px;
  background:var(--or); transition:background var(--transition);
}
.ent-tel:hover::after{ background:var(--vert); }

/* ── 2 · LA PLAQUE DU NOM ─────────────────────────────────────────────────
   Deux crans de la rampe, le minimum : c'est la surface verte la plus courte
   du site, et la seule qui porte des capitales d'or fines sur toute sa
   largeur. Voir « LES SURFACES VERTES » pour la règle.

   Les deux halos radiaux qui vivaient ici — un vert lumineux tombant du haut,
   un reflet doré au coin bas droit — ont été retirés. Le reflet doré en
   particulier plaçait une seconde source de lumière en bas à droite, qui
   contredisait toutes les autres surfaces vertes de la page. */
.ent-plaque{
  background:linear-gradient(180deg,var(--v2),var(--v4));
  border-bottom:1px solid rgba(201,162,77,.28);
  overflow:hidden;
}
.ent-plaque .zone{ padding-block:clamp(20px,2.4vw,28px) clamp(17px,2vw,23px); }
/* `.ent-plaque .nom` et non `.nom` seul : les planches techniques de la page
   Couture produisent des <text class="nom"> en SVG, que le selecteur nu
   attrapait aussi. */
.ent-plaque .nom{ display:block; max-width:min(495px,72%); margin:0 auto; }
/* Le titre doit occuper toute la largeur du lien, sinon la plaque se calibre
   sur son contenu et le nom rétrécit. */
.nom-enseigne{ margin:0; font-size:inherit; font-weight:inherit; width:100%; }

/* Le filet à losange ferme le nom. Il est remonté contre lui — il en est
   l'ornement de clôture, pas une légende posée en dessous. */
.ent-plaque .filet{
  max-width:min(230px,40%);
  margin:clamp(11px,1.4vw,15px) auto 0;
}
.ent-plaque .filet::before,.ent-plaque .filet::after{
  background:linear-gradient(90deg,transparent,var(--or-clair),transparent);
}
.ent-plaque .filet i{ background:var(--or-clair); width:6px; height:6px; }

/* ── 3 · LA NAVIGATION ─────────────────────────────────────────────────────
   Elle défile avec la page : voir « CE QUI RESTE À L'ÉCRAN », plus haut. */
.ent-nav{
  background:var(--ivoire); border-bottom:1px solid var(--papier);
}
.navigation{ display:flex; justify-content:center; gap:clamp(16px,2.2vw,32px); }
.navigation a{
  font-size:11px; letter-spacing:.17em; text-transform:uppercase;
  color:rgba(35,40,37,.7); position:relative; padding:17px 0; white-space:nowrap;
  transition:color var(--transition);
}
/* Le fil qui se coud sous le lien */
.navigation a::after{
  content:""; position:absolute; left:0; bottom:11px; height:1px; width:100%;
  background:var(--or); transform:scaleX(0); transform-origin:left;
  transition:transform var(--transition);
}
.navigation a:hover{ color:var(--vert); }
.navigation a:hover::after,
.navigation a[aria-current="page"]::after{ transform:scaleX(1); }
.navigation a[aria-current="page"]{ color:var(--vert); }

/* ── LE BOUTON DU MENU, sur téléphone ────────────────────────────────────
   Il vit dans la plaque, en or, et n'apparaît qu'une fois la navigation
   repliée. */
.burger{
  display:none; background:none; border:0; padding:11px;
  position:absolute; right:var(--marge-page); top:50%; transform:translateY(-50%);
}
.burger span{ display:block; width:22px; height:1.5px; background:var(--or-clair); margin:5px 0; }

/* ============================================================================
   BANDEAUX SOMBRES
   ============================================================================ */
.sombre{
  background:var(--vert-nuit); color:var(--sur-nuit);
  position:relative;
}
.sombre h1,.sombre h2,.sombre h3,.sombre h4{ color:var(--sur-nuit); }
.sombre .chapo{ color:var(--sur-nuit-doux); }
.sombre .sur-titre{ color:var(--or-clair); }
.sombre .accent{ color:var(--or-clair); }

/* ============================================================================
   RÉVÉLATION AU DÉFILEMENT
   ============================================================================ */
.revele{
  opacity:0; transform:translateY(22px);
  transition:opacity .85s ease, transform .85s cubic-bezier(.19,1,.22,1);
}
.revele.vu{ opacity:1; transform:none; }
.revele[data-delai="1"]{ transition-delay:.1s; }
.revele[data-delai="2"]{ transition-delay:.2s; }
.revele[data-delai="3"]{ transition-delay:.3s; }
.revele[data-delai="4"]{ transition-delay:.4s; }

/* ============================================================================
   PIED DE PAGE
   ============================================================================ */
.pied{
  /* Deux crans, et les deux derniers : c'est une bande, et elle ferme la page.
     Voir « LES SURFACES VERTES ». */
  background:linear-gradient(180deg,var(--v3),var(--v5));
  color:var(--sur-nuit); padding:var(--s6) 0 var(--s4);
}
.pied .sceau{ width:120px; margin:0 auto var(--s4); color:var(--or-clair); }
.pied .colonnes{ display:grid; grid-template-columns:repeat(3,1fr); gap:var(--s4); }
/* Les titres de colonne du pied sont des h2 et non des h3 : trois pages du
   site n'ont pour l'instant qu'un h1 dans leur contenu, et un h3 y sauterait
   un niveau. Un h2 est juste partout — le pied est un repere separe, ses
   titres ne s'imbriquent pas dans le plan de la page. */
.pied h2{ font-size:var(--t-s); font-family:var(--sans); font-weight:500;
          letter-spacing:.2em; text-transform:uppercase; color:var(--or-clair); margin-bottom:var(--s2); }
.pied p,.pied li{ font-size:var(--t-s); color:var(--sur-nuit-doux); margin:0 0 7px; }
.pied ul{ list-style:none; margin:0; padding:0; }
.pied a:hover{ color:var(--or-clair); }
/* ── LE PIED, EN UNE SEULE BANDE ──────────────────────────────────────────
   La bande d'appel et le pied étaient deux blocs verts collés, tous deux
   terminés par le même numéro de téléphone, séparés par un écran de vide :
   962 px de fin de page pour deux appels à l'action et une seule intention.
   Ils n'en font plus qu'un, et la bande fait ≈ 330 px — le tiers visé.

   TROIS COLONNES, ET LEURS LARGEURS NE SONT PAS ÉGALES : `1fr auto 1fr`.
   Le sceau prend la largeur qu'il fait, les deux colonnes de texte se
   partagent le reste à parts égales. Trois colonnes égales auraient donné au
   sceau — 88 px de large — le même tiers de page qu'à trois lignes d'horaires,
   et les deux colonnes utiles se seraient serrées pour le vide du centre.

   L'ORDRE DU BALISAGE N'EST PAS L'ORDRE DE L'ÉCRAN, et c'est délibéré : le
   sceau est écrit en premier et placé au centre par `grid-column`. Sur
   téléphone les colonnes s'empilent dans l'ordre du balisage — sceau,
   horaires, coordonnées — et le sceau annonce la fin de page au lieu de couper
   en deux les deux seules choses qu'on vient y lire. Le SVG est décoratif et
   rien n'y est focalisable : l'ordre du clavier n'en est pas affecté.
   ------------------------------------------------------------------------ */
.pied-bande{ padding:clamp(40px,4.6vw,58px) 0 var(--s3); }

.pied-bande .colonnes{
  grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);
  gap:var(--s4) clamp(var(--s3),4vw,var(--s5));
  /* Les deux colonnes de texte partent du haut — sinon « HORAIRES » et
     « NOUS TROUVER » ne tombent pas sur la même ligne, et deux intitulés de
     même rang qui se ratent de vingt pixels se voient tout de suite. Le sceau,
     lui, se recentre : c'est un disque, et un disque calé par son bord
     supérieur sur un intitulé paraît toujours tombé. */
  align-items:start;
}
.pied-bande .pied-sceau{ align-self:center; }
/* `grid-row:1` est indispensable, et ce n'est pas une précaution : le sceau
   réclame la colonne 2, donc l'auto-placement passe la colonne 1 et ne revient
   jamais en arrière — les horaires tombaient sur une deuxième rangée, et les
   coordonnées sur une troisième. Les trois colonnes doivent dire qu'elles sont
   sur la MÊME rangée pour que l'ordre du balisage cesse de compter. */
.pied-bande .pied-sceau   { grid-row:1; grid-column:2; }
.pied-bande .pied-horaires{ grid-row:1; grid-column:1; }
.pied-bande .pied-trouver { grid-row:1; grid-column:3; }

.pied-sceau{ text-align:center; }
.pied-bande .sceau{ width:88px; margin:0 auto 12px; }
.signature-depuis{
  margin:0; text-align:center;
  font-size:10.5px; letter-spacing:.28em; text-transform:uppercase;
  color:var(--or-clair);
}

/* La colonne de droite se cale sur le bord droit du conteneur, comme celle de
   gauche se cale sur le bord gauche. Le pied a deux bords et un axe : les
   trois colonnes les occupent, une chacun. */
.pied-trouver{ text-align:right; }

.pied-bande .colonnes ul{ margin:0; padding:0; list-style:none; }
.pied-bande .colonnes li{ margin:0; }
.pied-bande h2{ margin-bottom:10px; }

/* LES HORAIRES : le jour à gauche, l'heure à droite, un filet léger entre
   chaque ligne. Les chiffres sont tabulaires, sinon les trois plages ne
   s'alignent pas d'une ligne à l'autre. */
.pied-horaires li{
  display:flex; align-items:baseline; justify-content:space-between;
  gap:var(--s3); padding:9px 0;
  border-bottom:1px solid rgba(246,243,236,.11);
}
.pied-horaires li:last-child{ border-bottom:0; }
.pied-horaires li span:first-child{ color:var(--sur-nuit); white-space:nowrap; }
.pied-horaires li span:last-child{ font-variant-numeric:tabular-nums; text-align:right; }

/* NOUS TROUVER : « Adresse » et « Contact » disaient la même chose. Les trois
   lignes sont des liens, et non du texte dont un seul cliquait — l'adresse
   ouvre l'itinéraire, le bouton compose l'appel, le courriel ouvre la
   messagerie.

   LE BOUTON DORÉ EST ICI, ET NON DANS UNE BANDE À LUI. C'est la seule action
   du pied, et elle appartient aux coordonnées : on cherche un numéro là où on
   cherche une adresse. Isolé au-dessus, il répétait un numéro qui se trouvait
   déjà quinze lignes plus bas. */
.pied-trouver p{ margin:0; }
.pied-adresse a,.pied-mail a{
  display:inline-block; line-height:1.55;
  border-bottom:1px solid transparent;
  transition:color var(--transition), border-color var(--transition);
}
.pied-adresse a:hover,.pied-adresse a:focus-visible,
.pied-mail a:hover,.pied-mail a:focus-visible{
  color:var(--or-clair); border-bottom-color:rgba(201,162,77,.5);
}
.pied-trouver .bouton{ margin:14px 0 12px; min-height:48px; }

.pied .mentions{
  margin-top:var(--s5); padding-top:var(--s3);
  border-top:1px solid rgba(246,243,236,.14);
  font-size:var(--t-xs); color:rgba(246,243,236,.5);
  display:flex; flex-wrap:wrap; gap:var(--s3); justify-content:space-between;
}
/* Les horaires se terminent déjà par un filet : 64 px de plus avant celui des
   mentions faisaient deux séparations coup sur coup. */
.pied-bande .mentions{ margin-top:var(--s3); }
/* Les trois groupes de la ligne s'alignent sur leur texte : les liens des
   pages légales portent une marge de cible qui les décalerait sinon. */
.pied .mentions{ align-items:baseline; }

/* ============================================================================
   PETITS ÉCRANS
   ============================================================================ */
@media (max-width:1120px){
  /* La ligne « nettoyage · blanchisserie · couture » saute la première : le
     nom composé se suffit, et la bande a besoin de sa place pour les faits.
     Le nom descend d'un cran dans le même mouvement : il porte
     `white-space:nowrap` et déborde par-dessus les faits dès que sa colonne
     passe sous sa longueur. Deux points de moins lui en font vingt-huit. */
  .marque .mots span{ display:none; }
  .marque .mots b{ font-size:15px; letter-spacing:.09em; }
}

/* LA NAVIGATION SE RESSERRE AVANT DE SE REPLIER.
   Ses huit entrées sont en `white-space:nowrap` et centrées : trop larges,
   elles ne se coupent pas et ne passent pas à la ligne — elles débordent de
   la `.zone`, des deux côtés à la fois. Mesuré à 880 px : 830 px de
   navigation pour 795 de place, et « Nettoyage » comme « Nous trouver »
   touchaient le bord de l'écran.

   Le défaut vivait entre 861 px — juste au-dessus du seuil où la navigation
   se replie derrière le bouton du menu — et 1000 px, où la place redevient
   suffisante d'elle-même. Une tablette en paysage tombe en plein dedans.

   C'est la GOUTTIÈRE qui cède D'ABORD : les petites capitales espacées sont
   la voix du site, et les resserrer change le dessin de la navigation, pas
   seulement son encombrement.

   Sous 920 px la gouttière seule n'y suffit plus — il reste seize pixels de
   trop de chaque côté à 865 px, et zéro de marge à 901 — et l'interlettrage
   cède à son tour, de trois centièmes de cadratin. C'est la dernière bande avant que la navigation ne
   se replie derrière le bouton du menu, et trois centièmes ne se voient pas
   quand rien n'est là pour les comparer. */
@media (min-width:861px) and (max-width:1040px){
  .navigation{ gap:12px; }
}
@media (min-width:861px) and (max-width:920px){
  .navigation{ gap:8px; }
  .navigation a{ letter-spacing:.14em; }
}
@media (max-width:1040px){
  /* L'ANCIENNETÉ SORT DE LA BANDE. Mesuré à 900 px : le nom composé fait
     235 px de large et sa colonne 234 — il a `white-space:nowrap` et il
     débordait donc PAR-DESSUS les faits, de soixante pixels, sans que rien
     ne l'arrête. Le défaut vivait entre 860 et 1120 px, là où le nom est
     encore affiché et où la bande n'a plus la place de le porter.

     C'est l'ancienneté qui cède, et non le nom : elle est répétée sur la
     plaque verte juste en dessous et dans le pied de page, où elle est un
     argument. L'état d'ouverture et le numéro, eux, ne sont écrits nulle
     part ailleurs en haut de page. Reste « Ouvert · jusqu'à 18h30 »,
     175 px, et la colonne du nom repasse à 302. */
  .ent-faits [data-depuis],
  .ent-faits i{ display:none; }
}
@media (max-width:860px){
  :root{ --s6:64px; --s7:88px; }

  /* LA PLAQUE DU NOM EST FIXE ELLE AUSSI, juste sous la bande du logo.
     La navigation se replie ici derrière le bouton du menu, et ce bouton vit
     dans la plaque : si la plaque défilait, le menu deviendrait inatteignable
     dès le premier écran passé. Deux bandes fixes, donc, et pas une de plus.

     `fixed` et non `sticky` : la bande du logo étant elle-même sortie du
     flux, `.entete` n'a plus pour hauteur que celle de la plaque — une plaque
     collante n'y aurait aucune course et se décollerait aussitôt.

     Les deux hauteurs sont MESURÉES par assets/site.js (`--h-bande-logo` et
     `--h-plaque`) : le nom passe sur une ou deux lignes selon la largeur, et
     une taille de texte forcée fait grandir les deux bandes. Les valeurs de
     repli ne servent qu'avant l'exécution du script. */
  .ent-plaque{
    position:fixed; top:var(--h-bande-logo,45px); left:0; right:0; z-index:60;
  }
  body{ padding-top:calc(var(--h-bande-logo,45px) + var(--h-plaque,97px)); }
  /* L'écart d'une ancre à son titre suit les deux bandes, plus huit d'air. */
  html{ scroll-padding-top:calc(var(--h-bande-logo,45px) + var(--h-plaque,97px) + 8px); }

  .ent-nav{ display:none; }
  .burger{ display:block; }

  .marque svg{ width:28px; }
  /* Le nom est déjà à 15 px depuis 1120 px, et l'ancienneté déjà sortie à
     1040 px : voir plus haut. */
  .ent-faits{ font-size:10.5px; letter-spacing:.08em; }
  .ent-logo .zone{ column-gap:11px; }
  .ent-tel{ font-size:12.5px; }
  /* Le nom RESTE CENTRÉ : le bouton du menu est en position absolue, il ne
     pousse rien. 62 % et non 72 : c'est la largeur qui laisse dix-sept
     pixels entre le bord du nom et le bouton à 375 px, la largeur la plus
     serrée du site. Le calage sur l'axe de la page vaut aussi ici, et un nom
     poussé à gauche sur une tablette de 768 px paraîtrait tombé. */
  .ent-plaque .nom{ max-width:min(495px,62%); }
  .ent-plaque .zone{ padding-block:16px 14px; }
  /* Le filet sort : sous un nom de cette taille il ne sépare plus rien, et
     la plaque doit rester basse — c'est elle qui reste collée en haut. */
  .ent-plaque .filet{ display:none; }

  .pied .colonnes{ grid-template-columns:1fr; gap:var(--s3); }

  /* LES TROIS COLONNES DU PIED S'EMPILENT DANS L'ORDRE DU BALISAGE :
     le sceau, les horaires, les coordonnées. C'est pour cet empilement que le
     sceau est écrit en premier — au milieu du balisage, il aurait séparé les
     horaires des coordonnées, c'est-à-dire les deux seules choses qu'on vient
     lire ici. En tête, il fait ce qu'il fait déjà sur grand écran : il dit que
     la page se termine.

     L'alignement à droite tombe avec les colonnes. Il ne servait qu'à ancrer
     « Nous trouver » sur le bord droit, en face des horaires ; l'un sous
     l'autre, il ne resterait qu'un bloc aligné à droite sans rien en face, et
     le pied aurait deux axes pour une seule colonne. */
  .pied-bande .colonnes{ grid-template-columns:1fr; }
  .pied-bande .pied-sceau,
  .pied-bande .pied-horaires,
  .pied-bande .pied-trouver{ grid-row:auto; grid-column:1; }
  .pied-trouver{ text-align:left; }
  /* Le bouton prend toute la largeur : seul sur sa ligne et calé à gauche, il
     aurait eu l'air d'un reste de la colonne qui n'existe plus. */
  .pied-trouver .bouton{ display:flex; width:100%; }

  /* Le jour et son horaire se touchaient : « 8h00 – 12h30 · 13h30 – 18h30 »
     fait 190 px à lui seul, et 24 px de gouttière ne rentrent pas dans les
     354 px utiles d'un téléphone. La gouttière tombe à 16 px, et le retour à
     la ligne reste possible si la formulation s'allonge un jour. */
  .pied-horaires li{ flex-wrap:wrap; gap:4px var(--s2); }
}
@media (max-width:620px){
  /* LE LOGO SORT DE LA BANDE. Mesuré à 375 px : le bouton, l'état
     d'ouverture dans sa formulation la plus longue (« Fermé · ouvre lundi à
     8h00 », 190 px) et le numéro font 325 px à eux trois, soit exactement la
     largeur disponible — le numéro se cassait sur deux lignes. Il fallait
     libérer une des trois pièces.

     C'est le bouton qui cède, et c'est le bon choix : le nom de la maison
     est écrit soixante pixels plus bas, en or, dix fois plus gros, et il
     ramène lui aussi à l'accueil. L'état et le numéro, eux, ne sont écrits
     nulle part ailleurs en haut de page.

     Reste deux zones : les faits à gauche, l'action à droite. */
  .marque{ display:none; }

  /* LA BANDE FIXE RESTE SOUS 50 px. Elle occupe maintenant le haut de
     l'écran en permanence : chaque pixel qu'elle prend est un pixel de
     lecture en moins, sur l'écran où il y en a le moins.
     Mesurée à 375 px : 44 px de hauteur minimale — la cible tactile du
     numéro, qu'on ne descend pas — plus le filet du bas, soit 45 px. Le
     `padding` tombe à 3 px : à 10,5 et 12,5 px de corps, les deux lignes
     font 17 px de haut et le `min-height` décide seul. */
  .ent-logo .zone{
    grid-template-columns:minmax(0,1fr) auto;
    min-height:44px; padding-block:3px;
  }
  .ent-faits{ grid-column:1; justify-self:start; }
  .ent-tel{ grid-column:2; }

  /* L'ÉTAT PEUT PASSER À LA LIGNE, et lui seul. Mesuré à 320 px, la largeur
     d'écran la plus étroite encore rencontrée : la formulation la plus longue
     que produit assets/site.js — « Fermé · ouvre mercredi à 8h00 » — fait
     218 px, le numéro 94, et il ne reste que 269 px. Le numéro sortait de
     l'écran, masqué par le `overflow-x:hidden` du corps : invisible, donc
     jamais corrigé.

     Le réglage se règle tout seul : tant que la phrase tient sur une ligne
     elle y reste — c'est le cas dès 360 px — et elle ne se replie que quand
     il le faut. Le numéro, lui, garde son `nowrap` : un numéro de téléphone
     coupé en deux ne se compose pas. */
  .ent-faits{ white-space:normal; min-width:0; }
  .ent-faits .pastille{ min-width:0; }
}
@media (max-width:620px){
  body{ font-size:16px; }
  :root{ --t-m:16px; --t-l:18px; }
  .bouton{ width:100%; }
}

/* ============================================================================
   MENU SUR TÉLÉPHONE
   ============================================================================ */
/* Le panneau couvre tout l'écran et PASSE SOUS l'en-tête, qui garde son
   z-index supérieur : le bouton qui a ouvert le menu doit rester visible et
   cliquable pour le refermer. Le retrait par le haut dégage les deux bandes
   fixes — la bande du logo et la plaque du nom — et vingt-quatre pixels
   d'air. Il suit leurs hauteurs mesurées : une valeur figée laisserait la
   première entrée du menu sous la plaque dès qu'un nom passe sur deux
   lignes. */
.menu-mobile{
  position:fixed; inset:0; z-index:54;
  background:var(--ivoire); overflow-y:auto;
  padding:calc(var(--h-bande-logo,45px) + var(--h-plaque,97px) + 24px)
          var(--marge-page) var(--s4);
}
.menu-mobile ul{ list-style:none; margin:0; padding:0; }
.menu-mobile li{ border-bottom:1px solid var(--papier); }
.menu-mobile a{
  display:block; padding:20px 0;
  font-family:var(--serif); font-size:26px; font-weight:500; color:var(--vert);
}
@media (min-width:861px){ .menu-mobile{ display:none; } }

/* ============================================================================
   BANDEAU D INFORMATIONS PRATIQUES
   ============================================================================ */
.bandeau-infos{ border-block:1px solid var(--papier); background:var(--blanc); }
.bandeau-infos dl{ margin:0; display:grid; grid-template-columns:repeat(3,1fr); }
.bandeau-infos dl > div{ padding:var(--s3); border-left:1px solid var(--papier); }
.bandeau-infos dl > div:first-child{ border-left:0; padding-left:0; }
.bandeau-infos dl > div:last-child{ padding-right:0; }
.bandeau-infos dt{ font-size:10px; letter-spacing:.22em; text-transform:uppercase; color:var(--or-grave); margin-bottom:7px; }
.bandeau-infos dd{ margin:0; font-size:15px; }
.bandeau-infos a:hover{ color:var(--or); }

/* La pastille qui bat quand la boutique est ouverte */
.pastille{ display:inline-flex; align-items:center; gap:8px; }
.pastille::before{
  content:""; width:7px; height:7px; border-radius:50%; flex:none;
  background:#1E8A52; box-shadow:0 0 0 0 rgba(30,138,82,.55);
  animation:battement 2.4s infinite;
}
.pastille.ferme::before{ background:#B0564A; animation:none; box-shadow:none; }
/* Dans le bandeau, l'état mène aux horaires complets de la page Nous
   trouver. Un pointillé discret le dit ; il devient un trait d'or au
   survol. Les 13 px de marge rendus par une marge négative donnent au doigt
   ses 44 px sans faire grandir la bande. */
a.pastille{
  color:inherit; text-decoration:underline dotted rgba(35,40,37,.45);
  text-underline-offset:4px; padding-block:13px; margin-block:-13px;
  transition:color var(--transition), text-decoration-color var(--transition);
}
a.pastille:hover{ color:var(--vert); text-decoration-style:solid; text-decoration-color:var(--or); }
@keyframes battement{
  70%{ box-shadow:0 0 0 9px rgba(30,138,82,0); }
  100%{ box-shadow:0 0 0 0 rgba(30,138,82,0); }
}

/* ============================================================================
   PAPIER MILLIMÉTRÉ — la signature de l'atelier
   ----------------------------------------------------------------------------
   Le quadrillage du tailleur, en or très pâle. Il ne décorait qu'une section
   par page — celle du titre — et s'arrêtait net au premier intertitre : le
   papier commençait quadrillé et finissait nu, sans que rien ne le dise.

   IL COURT MAINTENANT SOUS TOUT LE CONTENU. La classe est posée sur le
   `<main>` de chaque page, et sur les deux blocs de l'accueil qui ont un fond
   à eux. Tout ce qui porte son propre fond — les bandes vertes, les cartes
   blanches, les planches à la craie — le recouvre là où il passe : le
   quadrillage n'apparaît que sur le papier, ce qui est exactement son rôle.

   SAUF LA LISTE DE PRIX. Sur la page Tarifs, le quadrillage s'arrête après
   le titre. Ses traits tombent tous les 32 px et une ligne de prix en fait
   57 : deux trames régulières qui ne se superposent jamais, et l'œil suit
   la mauvaise. C'est la seule page où chaque ligne doit se lire d'un bout à
   l'autre — le nom à gauche, le montant à droite, trente-trois traits
   verticaux entre les deux. La classe y reste posée sur la section du titre,
   comme avant, et pas sur le `<main>`.
   ============================================================================ */
.millimetre{ position:relative; isolation:isolate; }
.millimetre::before{
  content:""; position:absolute; inset:0; z-index:-1; pointer-events:none; opacity:.5;
  background:
    repeating-linear-gradient(0deg,transparent 0 31px,var(--trait-quadrillage) 31px 32px),
    repeating-linear-gradient(90deg,transparent 0 31px,var(--trait-quadrillage) 31px 32px);
}

/* ============================================================================
   LA PLANCHE TECHNIQUE
   ============================================================================ */
/* La planche est dessinée à la craie : fond de nuit, trait ivoire. */
.planche{ background:var(--vert-nuit); border-radius:3px; padding:clamp(14px,2vw,26px); }
.planche svg{ width:100%; height:auto; overflow:visible; display:block; }

/* Le contour, tracé deux fois : la main revient dessus sans recouvrir. */
.planche .trait{
  fill:none; stroke:var(--ivoire); stroke-width:1.7; opacity:.88;
  stroke-linejoin:round; stroke-linecap:round;
  filter:var(--grain) drop-shadow(0 0 2.5px rgba(246,243,236,.4));
}
.planche .repasse{
  fill:none; stroke:var(--ivoire); stroke-width:1.5; opacity:.58;
  stroke-linejoin:round; stroke-linecap:round; filter:var(--grain);
}
/* Ce qui fait reconnaître la pièce : revers, col de chemise, rabats de
   poche, ceinture et passants, pliure du pantalon. */
.planche .detail{
  fill:none; stroke:var(--ivoire); stroke-width:.9; opacity:.5;
  stroke-linecap:round; stroke-linejoin:round; filter:var(--grain);
}
.planche .detail.fin{ stroke-width:.85; opacity:.36; }   /* les hachures du tissu */

/* La fermeture éclair, à la craie elle aussi. */
.planche .zip-ruban{ fill:none; stroke:var(--ivoire); stroke-width:1.2; opacity:.5; }
.planche .dent{ stroke:var(--ivoire); stroke-width:1.35; stroke-linecap:round; opacity:.72; }
.planche .curseur{ fill:none; stroke:var(--ivoire); stroke-width:1.7; stroke-linejoin:round; opacity:.8; }

/* Les lignes de coupe : la seule chose du vêtement qui ait droit à l'or.
   Calculées comme un décalage du tracé, elles en épousent la courbe. */
.planche .coupe{
  fill:none; stroke:var(--or-clair); stroke-width:1.5;
  stroke-dasharray:4.5 4; stroke-linecap:round; stroke-linejoin:round;
}
/* La quincaillerie — anneaux, tringles : elle n est pas dans le tissu,
   c est normal, et le controle geometrique l ignore. */

/* Les étiquettes de prix posées sur la pièce. Le trait de rappel qui mène
   au montant reste une droite : il ne désigne pas une coupe. */
.planche .fil-fond{ stroke:var(--vert-nuit); stroke-width:2.8; stroke-linecap:round; }
.planche .fil{ stroke:var(--or-clair); stroke-width:1; }
.planche .coche{ stroke:var(--or-clair); stroke-width:1.2; }
.planche .point{ fill:var(--or-clair); }
.planche .halo{ fill:none; stroke:var(--or-clair); stroke-width:.8; opacity:.45; }
.planche text.nom{
  font-family:var(--sans); font-size:8.4px; font-weight:600;
  letter-spacing:.15em; text-transform:uppercase; fill:var(--or-clair);
}
.planche text.prix{
  font-family:var(--sans); font-size:18px; font-weight:600;
  fill:var(--ivoire); font-variant-numeric:tabular-nums;
}
.planche text.prix .mention{ font-size:11px; font-weight:400; fill:rgba(246,243,236,.55); }

/* ============================================================================
   TABLEAUX DE PRIX
   ============================================================================ */
.tarif-bloc{ margin-bottom:var(--s5); break-inside:avoid; }
.tarif-bloc :is(h2,h3){ font-size:var(--t-xl); padding-bottom:12px; margin-bottom:6px; border-bottom:1px solid var(--or); }
.tarif-table{ width:100%; border-collapse:collapse; }
.tarif-table th{ font-weight:400; text-align:left; }
.tarif-table thead th{
  font-family:var(--sans); font-size:9.5px; letter-spacing:.18em; text-transform:uppercase;
  color:var(--acier-texte); padding:12px 0 8px; text-align:right;
}
.tarif-table tbody th{ padding:11px 16px 11px 0; font-size:15px; color:var(--graphite); border-bottom:1px dotted var(--papier); }
.tarif-table td{ padding:11px 0; text-align:right; white-space:nowrap; border-bottom:1px dotted var(--papier); vertical-align:baseline; }
.tarif-table tr:last-child th,.tarif-table tr:last-child td{ border-bottom:0; }
.tarif-table b{ font-family:var(--serif); font-size:var(--t-l); font-weight:600; color:var(--vert); font-variant-numeric:tabular-nums; }
.tarif-table em{ font-style:normal; font-size:11px; letter-spacing:.08em; text-transform:uppercase; color:var(--acier-texte); }
/* L'unité fait partie du prix : même famille, même couleur, un cran plus
   petite que le chiffre. */
.tarif-table b .unite,.prix-choisis b .unite{ font-size:.72em; font-weight:500; color:inherit; }
/* La phrase qui explique un prix, sous le libellé. */
.tarif-table .precision,.prix-choisis .precision{
  display:block; margin-top:3px; font-size:13px; line-height:1.45; color:var(--acier-texte);
}
.tarif-table.deux-colonnes td{ min-width:120px; }
.mentions-tarifs{ margin-top:var(--s4); padding-top:var(--s3); border-top:1px solid var(--papier); }
.mentions-tarifs p{ font-size:13px; color:var(--acier-texte); margin:0 0 5px; }


/* ============================================================================
   HORAIRES ET PLAN
   ============================================================================ */
.horaires{ list-style:none; margin:var(--s4) 0 0; padding:0; }
.horaires > div{ display:flex; justify-content:space-between; gap:var(--s3); padding:13px 0; border-bottom:1px solid var(--papier); font-size:15px; }
.horaires dt{ margin:0; }
.horaires dd{ margin:0; color:var(--acier-texte); text-align:right; font-variant-numeric:tabular-nums; }
.horaires > div.aujourdhui,.horaires > div.aujourdhui dd{ color:var(--or); }
.sombre .horaires > div{ border-bottom-color:rgba(246,243,236,.14); }
.sombre .horaires dd{ color:var(--sur-nuit-doux); }
.sombre .horaires > div.aujourdhui,.sombre .horaires > div.aujourdhui dd{ color:var(--or-clair); }

/* LE PLAN D'ACCÈS — le dessin vectoriel du flyer, lien vers l'itinéraire.
   Le filet d'or au survol dit qu'il se clique, sans rien ajouter dessus. */
.plan-acces{
  display:block; border:1px solid var(--papier); border-radius:3px; overflow:hidden;
  transition:border-color var(--transition), box-shadow var(--transition);
}
.plan-acces svg{ display:block; width:100%; height:auto; aspect-ratio:918/765; }
.plan-acces:hover{ border-color:var(--or); box-shadow:0 0 0 1px var(--or); }
.plan-acces:focus-visible{ outline:2px solid var(--or); outline-offset:3px; }
.plan-source{ margin:8px 0 0; font-size:11.5px; color:var(--acier-texte); }
/* SUR TÉLÉPHONE, LE PLAN PASSE AU CARRÉ ET SES ÉTIQUETTES GRANDISSENT.
   Dessinées pour le papier, elles tombaient à 7 px sur 340 px d'écran. Le
   carré rogne 76 m à gauche et à droite (le SVG est en `slice`), ce qui
   grossit le dessin de 20 % sans perdre IKEA ni l'avenue Louis-Pictet ; les
   corps sont ensuite relevés d'un tiers. La ligne de l'arrêt TPG l'est
   moins : plus longue, elle sortirait du cadre. Les valeurs sont en mètres,
   l'unité du dessin. */
@media (max-width:620px){
  .plan-acces svg{ aspect-ratio:1/1; }
  .plan-acces g[font-size="20.4"]{ font-size:25px; }
  .plan-acces text[font-size="25.2"]{ font-size:32px; }
  .plan-acces text[font-size="19.8"]{ font-size:26px; }
  .plan-acces text[font-size="24.0"]{ font-size:30px; }
  .plan-acces text[font-size="19.2"]{ font-size:20px; }
}
.coordonnees{ display:grid; gap:var(--s2); margin-top:var(--s4); }
.coordonnees a{ display:flex; align-items:center; gap:14px; font-size:16px; min-height:44px; transition:color var(--transition); }
.coordonnees a:hover{ color:var(--or); }
.coordonnees svg{ width:19px; height:19px; stroke:var(--or); fill:none; stroke-width:1.3; flex:none; }
.sombre .coordonnees a:hover{ color:var(--or-clair); }
.sombre .coordonnees svg{ stroke:var(--or-clair); }

/* ============================================================================
   MISES EN PAGE
   ============================================================================ */
.duo{ display:grid; grid-template-columns:1fr 1fr; gap:clamp(30px,5vw,72px); align-items:center; }
.section{ padding:var(--s7) 0; }
.section.serree{ padding:var(--s6) 0; }
.centre{ text-align:center; }
.centre .chapo{ margin-inline:auto; }
.centre .filet{ max-width:330px; margin-inline:auto; }

/* Nous trouver : le plan vient en premier dans le balisage (il passe avant
   les horaires sur téléphone) et se range à droite sur grand écran. */
.trouver-duo{ align-items:start; }
.trouver-duo .plan-bloc{ grid-column:2; grid-row:1; }
.trouver-duo #horaires{ grid-column:1; grid-row:1; }

@media (max-width:860px){
  .duo{ grid-template-columns:1fr; }
  .trouver-duo .plan-bloc,.trouver-duo #horaires{ grid-column:auto; grid-row:auto; }
  .bandeau-infos dl{ grid-template-columns:1fr; }
  .bandeau-infos dl > div{ border-left:0; border-top:1px solid var(--papier); padding-left:0; padding-right:0; }
  .bandeau-infos dl > div:first-child{ border-top:0; }
}
@media (max-width:620px){
  .tarif-table tbody th{ font-size:14px; padding-right:10px; }
  .tarif-table b{ font-size:18px; }
}

/* ============================================================================
   CIBLES TACTILES
   Tout lien doit offrir au moins 44 px de hauteur au doigt. Sans ça,
   on rate le lien une fois sur trois sur un téléphone.
   ============================================================================ */
.pied a{ display:inline-flex; align-items:center; min-height:44px; }
.pied .mentions a{ min-height:0; }
/* Les deux pages légales, en petit sur la ligne des mentions. Soulignées :
   au milieu d'une ligne de texte, rien d'autre ne dirait qu'elles se
   cliquent. Six pixels de marge portent la cible à 24 px de haut. */
.pied .mentions-liens a{
  padding-block:6px; text-decoration:underline; text-underline-offset:3px;
  text-decoration-color:rgba(246,243,236,.35); transition:color var(--transition);
}
.pied .mentions-liens a:hover{ color:var(--or-clair); }

/* ============================================================================
   LES PAGES LÉGALES — un document, pas une vitrine
   ----------------------------------------------------------------------------
   Mentions légales et Protection des données sont des pages de référence :
   on y vient chercher une information précise, et on les lit d'un trait. Elles
   gardent la palette et les polices du site, mais tout y est d'un cran plus
   discret : corps de 15 px au lieu de 17, titres de 30 et 18 px au lieu de 54
   et 36, une colonne de 34 rem (environ 70 signes par ligne), des blocs
   serrés, ni quadrillage ni animation.

   LISIBILITÉ. Le texte est en graphite plein, et non en graphite atténué
   comme sur les pages métier : plus petit, il garde un contraste de 12,7:1
   sur l'ivoire (mesuré, formule WCAG). Les intitulés de la fiche, en acier,
   tiennent 4,9:1 ; les liens, en or gravé, 4,75:1 ; les titres verts,
   12:1. Tous au-dessus du seuil de 4,5:1 (WCAG AA). Un interligne de 1,65
   compense la taille.
   ============================================================================ */
.page-legale{ padding:var(--s5) 0 var(--s6); }
.document{ max-width:calc(34rem + 2 * var(--marge-page)); font-size:15px; line-height:1.65; }
.document h1{ font-size:30px; font-weight:500; letter-spacing:-.01em; }
.document h2{
  font-size:18px; font-weight:600; line-height:1.3;
  margin:30px 0 0; padding-top:14px; border-top:1px solid var(--papier);
}
.document p,.document ul{ margin:10px 0 0; }
.document ul{ padding-left:1.2em; }
.document li{ margin-top:4px; }
.document li::marker{ color:var(--or-grave); }
.document .document-date{ margin-top:6px; font-size:13px; color:var(--acier-texte); }
.document sup{ font-size:.7em; line-height:0; }

/* La fiche de l'entreprise : l'intitulé à gauche, la valeur à droite. */
.fiche{ margin:12px 0 0; }
.fiche > div{
  display:grid; grid-template-columns:11rem 1fr; gap:var(--s2);
  padding:7px 0; border-bottom:1px solid var(--papier);
}
.fiche > div:last-child{ border-bottom:0; }
.fiche dt{ color:var(--acier-texte); }
.fiche dd{ margin:0; }
@media (max-width:620px){
  .page-legale{ padding:var(--s4) 0 var(--s5); }
  .document h1{ font-size:26px; }
  .fiche > div{ grid-template-columns:1fr; gap:0; }
}
.coordonnees a{ min-height:44px; }
/* Le telephone du bandeau : c est le lien le plus clique sur mobile */
.bandeau-infos a{ display:inline-flex; align-items:center; min-height:44px; }

/* ============================================================================
   PRIX SUR DEVIS ET NOTES DE SECTION
   Certaines prestations n'ont pas de prix fixe : le montant depend de la
   piece. Elles s'affichent « Sur devis », dans le meme alignement que les
   montants pour que la colonne reste lisible.
   ============================================================================ */
.tarif-table .devis{
  font-family:var(--sans); font-size:11px; letter-spacing:.14em;
  text-transform:uppercase; color:var(--or); font-style:normal;
}
.note-tarif{
  font-size:13.5px; color:var(--acier-texte); margin:10px 0 var(--s2); max-width:60ch;
}

/* ============================================================================
   LES PAGES DE METIER — resserrees
   Ces pages repondent a deux questions, dans cet ordre : qu'est-ce que vous
   faites, et combien ca coute. Elles n'ont pas a etre parcourues, elles ont
   a etre lues d'un coup.

   Le rythme de l'accueil ne leur convient pas : `.section` y pose 140 px de
   respiration en haut ET en bas, ce qui fait plus de mille pixels de vide
   sur quatre sections — legitime quand chaque bloc est une scene, absurde
   quand la page tient en deux ecrans. On resserre ici, et ici seulement :
   l'accueil garde son souffle.
   ============================================================================ */
.page-metier{
  /* DE COMBIEN LA CARTE DÉBORDE DANS LE PAPIER. Une seule valeur, lue à trois
     endroits : par la carte, qui descend d'autant sous la bande ; par la
     section qui suit, qui recule d'autant pour ne pas passer dessous ; et par
     le calcul de la marge de la carte, qui doit y ajouter le retrait bas de
     la bande. Un écart entre ces trois lectures, et le titre « Ce que nous… »
     se glisse sous la carte. */
  --debord-carte:clamp(58px,6.8vw,94px);
  /* Le retrait bas de la bande, sorti en jeton pour la même raison : il entre
     dans le calcul de la marge de la carte. */
  --pad-bas-entree:clamp(30px,3.4vw,44px);
}

.page-metier .section{ padding:var(--s5) 0; }
.page-metier .section.serree{ padding:var(--s4) 0; }
.page-metier .filet.court{ margin-bottom:var(--s2); }
.page-metier .chapo{ margin-bottom:0; }
.page-metier .planches{ margin-top:var(--s4); }
/* Le titre respire moins haut ici que sur l'accueil : la page doit montrer
   ses prix sans qu'on ait a defiler pour les atteindre. */
.page-metier h1{ font-size:clamp(33px,4.4vw,54px); }
/* Les titres de section passent d'un cran : sur une page qui tient en deux
   ecrans, un titre de 56 px annonce une scene qui n'arrive jamais. */
.page-metier h2{ font-size:var(--t-2xl); }

/* ============================================================================
   CE QUE NOUS FAISONS — la version courte
   ----------------------------------------------------------------------------
   Sous l'intertitre, les pages de métier disaient l'essentiel en six ou sept
   cartes blanches — sept familles pour dire « nous nettoyons des vêtements ».
   Trois d'entre elles se répondaient, deux répétaient le chapô, et il fallait
   deux écrans pour arriver aux prix. Il n'en reste qu'un paragraphe, ou deux
   lignes quand le métier se partage vraiment en deux — au kilo ou à la pièce,
   les chemises ou le linge de maison.

   LA PARTIE EN TÊTE DE LIGNE N'EST PAS UN TITRE, c'est le premier mot de la
   phrase, mis en avant : « Au kilo — le linge du quotidien… » se lit d'un
   trait. Un `<h3>` au-dessus d'un paragraphe aurait coupé la phrase en deux
   et rajouté deux rangs au plan du document pour deux lignes de texte.
   ============================================================================ */
.dit{
  max-width:62ch; margin:var(--s3) 0 0;
  font-size:var(--t-m); line-height:1.62; color:rgba(35,40,37,.78);
}
.dit-lignes{
  max-width:62ch; margin:var(--s3) 0 0; padding:0; list-style:none;
}
.dit-lignes li{
  padding:15px 0; border-bottom:1px solid var(--papier);
  color:rgba(35,40,37,.78);
}
.dit-lignes li:last-child{ border-bottom:0; }
.dit-lignes b{
  font-family:var(--serif); font-size:var(--t-l); font-weight:600;
  color:var(--vert);
}

/* ============================================================================
   LA BANDE D'ENTRÉE D'UNE PAGE DE MÉTIER
   ----------------------------------------------------------------------------
   LA BANDE EST LA TRINGLE. C'est toute l'idée : on a décroché une étiquette
   du mur de l'accueil, elle est encore pincée, et la bande verte est la barre
   à laquelle elle pend. Elle ne s'arrête donc pas au bord de l'étiquette —
   l'étiquette la traverse et retombe dans le papier, comme une étiquette
   épinglée au-dessus d'un comptoir dépasse du rebord.

   CE QUI SE DÉCIDE ICI, C'EST L'ÉQUILIBRE, et rien d'autre : la couleur, le
   grain, les caractères et la carte existent déjà ailleurs dans le site.

     LES DEUX COLONNES   280 px | reste       ratio ≈ 1:3
       La carte est FIXE, en pixels, pas en fractions : c'est un objet aux
       proportions données — 280 de large pour 2,4 de rapport — et une carte
       qui s'étire cesse d'être une étiquette. Elle ne doit pas non plus
       disputer la page au titre : c'est un jeton de reconnaissance, le titre
       est la page. La gouttière va de 32 à 72 px.

     LA CARTE EST À DROITE, ET LE TEXTE À GAUCHE. Le titre prend le bord où
       commencent toutes les lignes de la page — celui du sur-titre qui
       l'annonce, celui des intertitres en dessous, celui de la colonne des
       horaires tout en bas. Une page qui s'ouvre par une étiquette fait
       commencer sa première ligne trois cent cinquante pixels plus à droite
       que toutes les suivantes.
       On lit le texte, PUIS on voit la carte : elle confirme qu'on est bien
       là où l'on a cliqué, elle ne l'annonce pas.

       L'ORDRE DE L'ÉCRAN EST DEVENU CELUI DU BALISAGE, et les deux règles de
       placement explicite ont disparu avec. Le texte est écrit en premier —
       le `<h1>` d'une page ne peut pas être précédé d'une étiquette
       décorative dans le document — et il est maintenant le premier à
       l'écran. L'empilement sur téléphone suit tout seul : le titre, puis la
       carte.

     LE DÉBORD EST FIXE, ET C'EST TOUT LE MÉCANISME. Premier essai : la carte
       recevait une marge basse négative et s'alignait en haut. Le débord
       valait alors « hauteur de la carte moins hauteur du texte moins le
       retrait bas de la bande » — un nombre que personne n'avait choisi, qui
       changeait d'une page à l'autre avec la longueur du chapô, et qui
       tombait à zéro dès qu'un titre passait sur trois lignes.

       La carte s'aligne donc sur le BAS de sa rangée (`align-self:end`) et
       porte une marge basse négative de « débord + retrait bas ». Le calcul
       donne alors exactement le débord voulu, que ce soit le texte ou la
       carte qui décide de la hauteur de la bande — les deux cas tombent sur
       le même résultat. La carte descend quand le texte s'allonge, et elle
       dépasse toujours d'autant.

     LE DÉBORD vaut de 58 à 94 px, soit environ le quart de la largeur de la
       carte. Moins, et elle a l'air posée de travers sur la limite ; plus,
       elle ne pend plus de la bande, elle est tombée devant.

   LA BANDE NE PORTE PAS `.sombre`. Elle aurait pris ses couleurs de texte
   d'un coup — mais aussi celles de la CARTE, qui est en papier ivoire et dont
   le titre serait passé à l'ivoire sur de l'ivoire. Les quatre lignes de
   couleur sont donc écrites ici, et elles s'arrêtent au bloc de texte.
   ============================================================================ */
.ent-metier{
  /* Deux crans, et les crans hauts : c'est une bande, et elle ouvre la page.
     Voir « LES SURFACES VERTES ». Le grain et `isolation` viennent de là. */
  background:linear-gradient(180deg,var(--v2),var(--v4));
  color:var(--sur-nuit);
  padding:clamp(44px,5.2vw,70px) 0 var(--pad-bas-entree);
  /* La carte sort par le bas : rien ne doit la couper, et elle doit passer
     DEVANT la section suivante. */
  overflow:visible;
  z-index:1;
}
.ent-metier-mots h1{ color:var(--sur-nuit); }
.ent-metier-mots .accent{ color:var(--or-clair); }
.ent-metier-mots .sur-titre{ color:var(--or-clair); }
.ent-metier-mots .chapo{ color:var(--sur-nuit-doux); }

/* LA PHRASE QU'ON VIENT CHERCHER. Une page de métier a parfois UNE
   information qui précède toutes les autres — sur Couture, c'est la cabine
   d'essayage : aucun autre atelier du quartier n'en a, et c'est pour ça qu'on
   vient. Noyée au milieu du chapô, elle se lit comme un détail d'intendance.

   ELLE PASSE AU SERIF, ET À L'IVOIRE PLEIN. Deux choses, pas trois : la voix
   des titres du site, et le contraste que le reste du chapô n'a pas (l'ivoire
   adouci tient 7,5:1 sur ce vert, l'ivoire plein 12,5). Aucune couleur
   nouvelle, aucun ornement, aucun encadré — une phrase du corps de texte qui
   emprunte la voix d'un titre suffit à se détacher, et elle reste une phrase.

   Sa taille se tient EN DESSOUS du `h1` et au-dessus du chapô : elle ne
   dispute pas le titre, elle le prolonge. */
.chapo-fort{
  margin:var(--s3) 0 0; max-width:48ch;
  font-family:var(--serif); font-weight:400;
  font-size:clamp(20px,2.1vw,26px); line-height:1.35;
  color:var(--vert);
}
.ent-metier-mots .chapo-fort{ color:var(--sur-nuit); }
/* Le reste du chapô suit la phrase de près : c'est la suite du même propos,
   pas un second paragraphe. */
.chapo-fort + .chapo{ margin-top:14px; }

.ent-metier-duo{
  display:grid;
  grid-template-columns:minmax(0,1fr) 280px;
  gap:clamp(32px,5vw,72px);
  align-items:start;
}

/* LA CARTE PEND DU BAS DE LA BANDE, ET DÉBORDE D'UN NOMBRE CHOISI.
   `align-self:end` plus une marge basse négative de « débord + retrait bas » :
   voir le calcul dans l'en-tête de ce bloc. La carte descend d'elle-même
   quand le texte s'allonge, et le débord ne bouge pas. */
.ent-metier-carte{
  align-self:end;
  margin-bottom:calc(-1 * (var(--debord-carte) + var(--pad-bas-entree)));
}

/* La section qui suit recule du débord : sans ça, son titre passe sous la
   carte. Les deux valeurs viennent du même jeton. */
.ent-metier + .section{ padding-top:calc(var(--s5) + var(--debord-carte)); }

@media (max-width:860px){
  .page-metier{ --debord-carte:66px; --pad-bas-entree:28px; }
  .ent-metier-duo{ grid-template-columns:1fr; }
  /* Empilée, la carte n'a plus de colonne en face : le retrait dégage la
     pince du chapô qui la précède. Il s'ajoute à la hauteur de la carte ET à
     sa contribution : le débord reste celui qui est écrit. */
  .ent-metier-carte{ padding-top:46px; }
}

/* ============================================================================
   LES DEUX VOLETS — page Professionnels
   ----------------------------------------------------------------------------
   Cette page s'adresse à DEUX clientèles qui n'ont rien à se dire : le
   restaurant qui fait laver ses nappes, et la boutique qui fait ourler les
   pantalons de ses clients. L'une vient pour du linge, l'autre pour de la
   couture, et chacune doit se reconnaître sans lire ce qui concerne l'autre.

   DEUX COLONNES, ET NON DEUX SECTIONS L'UNE SOUS L'AUTRE. C'est le cas où
   deux colonnes disent quelque chose : elles ne se suivent pas, elles
   s'opposent. Empilées, la seconde se lirait comme la suite de la première
   — « et en plus, nous faisons des retouches » — alors qu'elle s'adresse à
   quelqu'un d'autre.

   ELLES SONT INÉGALES, ET C'EST HONNÊTE : trois lignes à gauche, une à
   droite. Il y a plus à dire aux établissements. Étoffer le volet des
   boutiques pour équilibrer le dessin aurait été écrire pour la mise en page.

   Les deux colonnes partent du même bord haut, sinon les deux intitulés ne
   tombent pas sur la même ligne — et deux titres de même rang qui se ratent
   de vingt pixels se voient tout de suite.
   ============================================================================ */
.volets{
  display:grid; grid-template-columns:1fr 1fr;
  gap:var(--s4) clamp(var(--s4),5vw,var(--s6));
  align-items:start;
}
@media (max-width:860px){
  .volets{ grid-template-columns:1fr; gap:var(--s5); }
}

/* CE QUI VAUT POUR LES DEUX. La collecte et la livraison ne sont ni au
   restaurant ni à la boutique : elles sont aux deux. La ligne passe donc
   sous les colonnes, sur toute la largeur, et un filet la détache — sans
   lui, elle se lirait comme la quatrième ligne de la colonne de gauche. */
.volets-commun{
  margin-top:var(--s5); padding-top:var(--s4);
  border-top:1px solid var(--papier);
}
.volets-commun .dit-lignes{ margin-top:0; }

/* ============================================================================
   QUELQUES PRIX CHOISIS
   ----------------------------------------------------------------------------
   Ce n'est pas un tableau de prix réduit : c'est une liste de lignes prises
   où il faut. La page Couture en montre quatre par section, dont trois
   viennent d'une rubrique et la quatrième d'une autre — celles qu'on demande
   au comptoir, et non celles qui se suivent dans le fichier. Un tableau
   `data-tarifs` ne sait montrer que le début d'une rubrique entière.

   Le libellé ET le montant viennent de data/tarifs.js : voir la section 11 de
   assets/site.js. Rien n'est recopié ici.

   La forme est celle des tableaux de prix du site — libellé à gauche, montant
   à droite en serif vert, filet pointillé entre les lignes. Ce sont les mêmes
   prix, ils se lisent de la même façon ; leur donner une présentation à eux
   aurait laissé croire qu'ils se comptent autrement.
   ============================================================================ */
.prix-choisis{
  max-width:62ch; margin:var(--s4) 0 0; padding:0; list-style:none;
}
.prix-choisis li{
  display:flex; align-items:baseline; justify-content:space-between;
  gap:var(--s3); padding:12px 0;
  border-bottom:1px dotted var(--papier);
}
.prix-choisis li:last-child{ border-bottom:0; }
/* La mention qui suit une liste de prix se décolle : collée sous le dernier
   montant, elle se lit comme une cinquième ligne sans prix. */
.prix-choisis + .note-tarif{ margin-top:var(--s3); }
.prix-choisis span{ font-size:15px; color:var(--graphite); }
.prix-choisis b{
  flex:none;
  font-family:var(--serif); font-size:var(--t-l); font-weight:600;
  color:var(--vert); font-variant-numeric:tabular-nums; white-space:nowrap;
}
/* Le « dès » d'un prix minimum : même traitement que dans les tableaux. */
.prix-choisis b i{
  font-style:normal; font-family:var(--sans); font-size:11px; font-weight:500;
  letter-spacing:.1em; text-transform:uppercase; color:var(--acier-texte);
}
/* « Sur devis » prend la place du montant. En or GRAVÉ et non en or du site :
   c'est du texte de 11 px, et l'or du site n'y tient que 2,97:1 sur l'ivoire
   chaud. L'or gravé tient 4,75:1. */
.prix-choisis .devis{
  font-family:var(--sans); font-size:11px; font-weight:500;
  letter-spacing:.14em; text-transform:uppercase; color:var(--or-grave);
}

/* ============================================================================
   LA PHRASE DE LIAISON
   ----------------------------------------------------------------------------
   Une ligne seule entre deux sections, pour dire ce que les deux ont en
   commun. Sur la page Couture elle sépare les retouches du quotidien des
   grandes occasions, et empêche de lire la seconde comme un rayon plus cher :
   c'est le même atelier, le même soin, et la phrase est là pour le dire.

   Serif italique et or gravé : c'est exactement le motif de `.accent`, la
   respiration dorée que portent tous les titres du site. L'or du site y
   tiendrait 2,97:1, sous le seuil de 3:1 des grands textes dès que la phrase
   redescend à 19 px sur téléphone ; l'or gravé tient 4,75:1 à toute taille.

   Elle n'est pas dans une `.section` : elle n'a ni titre ni contenu, elle est
   ce qui reste entre deux sections. Ses marges le disent — plus serrées que
   celles d'une section, et égales des deux côtés.
   ============================================================================ */
.liaison{
  max-width:44ch; margin:0 auto; padding:clamp(30px,4vw,52px) var(--marge-page);
  text-align:center;
  font-family:var(--serif); font-style:italic; font-weight:400;
  font-size:clamp(19px,2.2vw,25px); line-height:1.4;
  color:var(--or-grave); text-wrap:balance;
}
/* LA LIAISON PORTE SON AIR ELLE-MÊME, des deux côtés, et les sections qui
   l'encadrent retirent le leur. Sans ça elle reçoit le retrait bas de la
   première section EN PLUS du sien — 116 px au-dessus, 52 en dessous — et une
   phrase qui dit ce que deux sections ont en commun se retrouve poussée
   contre la seconde.

   `:has()` n'est pas supporté partout ; là où il manque, la première règle
   est ignorée et l'on retombe sur l'espacement d'avant, plus large en haut.
   C'est un défaut d'équilibre, pas une casse. */
.section:has(+ .liaison){ padding-bottom:0; }
.liaison + .section{ padding-top:0; }

/* ============================================================================
   L APPEL — le bloc « une urgence ? », et l invitation a telephoner
   Le telephone est le canal principal : il a son propre bloc, pas un
   simple lien perdu dans un paragraphe.
   ============================================================================ */
.appel{
  border:1px solid var(--papier); background:var(--blanc);
  padding:var(--s4); margin-top:var(--s5);
  display:flex; flex-wrap:wrap; align-items:center; justify-content:space-between;
  gap:var(--s3) var(--s4);
}
.appel .bouton{ flex:none; }
/* L'ENCART UNIQUE DES PAGES DE MÉTIER. Il y en avait deux par page, « Un
   doute ? » et « Une urgence ? », qui posaient le même bouton sous deux
   paragraphes disant la même chose. Il n'en reste qu'un, et il tient en une
   phrase : un encart qui a besoin d'un titre ET d'un paragraphe pour demander
   qu'on appelle en dit un de trop.
   La phrase est en serif et au corps du chapô — c'est la seule ligne de
   l'encart, elle n'a personne au-dessus d'elle pour la présenter.
   `.appel .appel-mot` et non `.appel-mot` seul : il n'y a plus de règle
   `.appel p` aujourd'hui, mais la phrase reste un `<p>` dans une carte, et
   une classe nue céderait devant la première règle de type qu'on y ajouterait. */
.appel .appel-mot{
  margin:0; max-width:42ch;
  font-family:var(--serif); font-size:var(--t-l); font-weight:400;
  line-height:1.35; color:var(--vert);
}
@media (max-width:620px){
  .appel{ flex-direction:column; align-items:stretch; }
}

/* ============================================================================
   LA PAGE TARIFS — quatre familles, une recherche, un repère
   ----------------------------------------------------------------------------
   La page faisait plus de douze mille pixels d'un seul tenant, précédés d'un
   sommaire de dix-sept ancres. Elle n'est plus la porte d'entrée du site :
   on l'ouvre en sachant ce qu'on cherche.
   ============================================================================ */

/* ── Les quatre familles, en tête ─────────────────────────────────────────
   Plus grandes que les anciennes dix-sept pastilles : quatre entrées, ce
   sont des portes, pas une liste. */
.familles-tarifs{ display:grid; grid-template-columns:repeat(auto-fit,minmax(min(230px,100%),1fr)); gap:1px;
  background:var(--papier); border:1px solid var(--papier); }
.familles-tarifs a{
  background:var(--blanc); padding:var(--s3);
  display:flex; align-items:center; min-height:76px;
  font-family:var(--serif); font-size:var(--t-xl); font-weight:500; color:var(--vert);
  transition:background var(--transition), color var(--transition);
}
.familles-tarifs a:hover{ background:#FCFBF8; color:var(--or-grave); }

/* ── La barre collante ────────────────────────────────────────────────────
   Elle se pose sous ce qui est déjà fixe : la bande du logo sur ordinateur,
   la bande du logo ET la plaque du nom sur téléphone. Les deux hauteurs sont
   mesurées par assets/site.js. Sans ce calage, la barre se glisserait
   DERRIÈRE le mobilier au lieu de dessous. */
.barre-tarifs{
  position:sticky; top:var(--h-bande-logo,61px); z-index:59;
  background:rgba(246,243,236,.94); backdrop-filter:blur(8px);
  border-block:1px solid var(--papier);
}
.barre-tarifs .zone{
  display:flex; align-items:center; gap:var(--s3);
  min-height:58px; padding-block:9px; flex-wrap:wrap;
}
.barre-tarifs .ou{
  margin:0; flex:none;
  font-size:11px; letter-spacing:.2em; text-transform:uppercase; color:var(--or-grave);
}
.barre-tarifs .chercher{ flex:1; min-width:200px; margin-left:auto; }
.barre-tarifs input{
  width:100%; min-height:40px; padding:0 14px;
  font:inherit; font-size:15px; color:var(--graphite);
  background:var(--blanc); border:1px solid var(--papier); border-radius:2px;
  transition:border-color var(--transition);
}
.barre-tarifs input::placeholder{ color:var(--acier-texte); }
.barre-tarifs input:focus{ border-color:var(--or); outline:none; }
.barre-tarifs input:focus-visible{ outline:2px solid var(--or); outline-offset:2px; }
.barre-tarifs .compte{
  margin:0; flex:none; min-width:15ch; text-align:right;
  font-size:12.5px; color:var(--acier-texte); font-variant-numeric:tabular-nums;
}

/* ── Les familles, dans la liste ──────────────────────────────────────────
   Le titre de famille est la seule chose qui sépare deux métiers sur douze
   mille pixels : il doit se voir de loin, et le filet d'or le pose. */
.famille-tarifs{ margin-top:var(--s6); }
.famille-tarifs:first-child{ margin-top:var(--s3); }
.famille-tarifs > h2{
  font-size:var(--t-2xl); padding-bottom:14px; margin-bottom:var(--s4);
  border-bottom:2px solid var(--or);
}

/* Les ancres visent une famille ou une section : elles doivent s'arrêter
   SOUS la navigation ET sous la barre des tarifs.
   `scroll-margin-top` S'AJOUTE au `scroll-padding-top` de la page, il ne le
   remplace pas. La page réserve déjà 68 px pour la navigation ; il ne reste
   ici que la hauteur de la barre, 59 px, et non la somme des deux. */
.groupes-tarifs .tarif-bloc,
.famille-tarifs{ scroll-margin-top:59px; }

/* `!important` : une ligne de tableau masquée doit l'être quoi qu'il arrive.
   `display:table-row` d'une feuille de navigateur l'emporterait sinon sur
   l'attribut `hidden`, et la recherche ne filtrerait rien. */
[hidden]{ display:none !important; }

@media (max-width:860px){
  /* La bande et la plaque occupent deja 142 px : la barre doit rester mince,
     sinon le mobilier fixe mange un tiers de l'ecran. Retiree a 78 px -- une
     ligne de reperes, une ligne de recherche, et rien de plus. */
  .barre-tarifs{ top:calc(var(--h-bande-logo,45px) + var(--h-plaque,97px)); }
  .barre-tarifs .zone{ min-height:0; padding-block:8px; gap:7px; }
  .barre-tarifs input{ min-height:38px; font-size:14.5px; }
  .barre-tarifs .ou,.barre-tarifs .compte{ font-size:10.5px; }
  .barre-tarifs .ou{ order:1; }
  .barre-tarifs .compte{ order:2; margin-left:auto; text-align:right; min-width:0; }
  .barre-tarifs .chercher{ order:3; flex-basis:100%; margin-left:0; }
  /* Les deux bandes fixes sont déjà réservées par la page ; la barre en
     ajoute 79. */
  .groupes-tarifs .tarif-bloc,
  .famille-tarifs{ scroll-margin-top:79px; }
  .familles-tarifs a{ min-height:64px; font-size:var(--t-l); }
}


/* ============================================================================
   LES PLANCHES, CÔTE À CÔTE — page Retouches et couture
   ----------------------------------------------------------------------------
   Plus d'onglets : les pièces sont toutes là, on voit laquelle est la sienne
   et on y va. Ce qui suit règle le seul vrai problème de cette mise en page.

   LES PLANCHES SONT DESSINÉES POUR LA PLEINE LARGEUR. Leur boîte fait 640
   unités ; le libellé d'un repère en fait 8,4 et le montant 18. Affichées sur
   1072 px, le facteur vaut 1,68 et les libellés sortent à 14 px : confortable.
   Réduites à 236 px — cinq de front dans le conteneur — le facteur tombe à
   0,37 et le libellé à 3 px. Illisible.

   DEUX COLONNES, ET LES REPÈRES GROSSIS. À 520 px le facteur vaut 0,81 ; les
   repères sont donc redimensionnés EN UNITÉS DE DESSIN pour ressortir autour
   de 11 et 20 px. C'est le seul endroit du site où une taille de texte est
   écrite dans le dessin plutôt que dans la feuille : un SVG met son texte à
   l'échelle avec le reste, il n'a pas d'autre moyen de compenser.
   ============================================================================ */
.planches{
  display:grid;
  /* UNE SEULE COLONNE PAR DÉFAUT, et deux déclarées explicitement dans le
     même palier que le grossissement des repères, plus bas. Avec un
     `auto-fit`, la grille passait à deux colonnes dès 920 px alors que les
     repères ne grossissaient qu'à partir de 1000 : entre les deux, chaque
     planche tombait à 380 px et son libellé à 5 px — exactement le défaut
     que les trois paliers devaient supprimer. Les deux réglages doivent
     basculer ensemble, donc au même endroit. */
  grid-template-columns:1fr;
  gap:var(--s4) var(--s3); margin-top:var(--s5);
}
.planches figure{ margin:0; }
.planches figcaption{
  margin-top:12px;
  font-size:11px; letter-spacing:.2em; text-transform:uppercase;
  color:var(--or-grave);
}
/* La liste de repli, qui remplace les repères quand ils deviennent trop
   petits. Elle est dans le balisage à toute largeur — même source, deux
   présentations.

   AU-DESSUS DE 760 px ELLE EST MASQUÉE À L'ŒIL, PAS AU LECTEUR D'ÉCRAN. Les
   planches portent `role="img"` : leur contenu est alors traité comme une
   image opaque, et les `<text>` des repères ne sont pas lus. Un
   `display:none` sur la liste retirerait donc les prix de TOUTE présentation
   non visuelle — le lecteur d'écran n'entendrait que « Chemise dessinée à
   plat ». La liste est donc simplement sortie du champ, comme le fait
   `.lecture-seule`. */
.prestations{
  position:absolute; width:1px; height:1px; overflow:hidden;
  clip-path:inset(50%); white-space:nowrap;
  margin:0; padding:0; list-style:none;
}

/* AU-DESSUS DE 1000 px la grille passe à deux colonnes et chaque planche
   tombe à environ 500 px : les repères sont grossis en unités de dessin pour
   ressortir autour de 11 et 20 px. Entre 760 et 1000 px la grille n'a qu'une
   colonne, la planche reprend toute la largeur, et les tailles d'origine
   suffisent — c'est pour cette largeur-là qu'elles ont été réglées. */
@media (min-width:1000px){
  .planches{ grid-template-columns:1fr 1fr; }
  .planches .planche text.nom{ font-size:13.5px; letter-spacing:.1em; }
  .planches .planche text.prix{ font-size:25px; }
  .planches .planche text.prix .mention{ font-size:15px; }
}

/* SOUS 760 px, AUCUNE TAILLE NE SAUVE LE REPÈRE. La planche fait 640 unités
   de large ; à 325 px d'affichage le facteur vaut 0,5 et le libellé sort à
   4 px. Le grossir assez le ferait manger le dessin. Les repères sont donc
   masqués, le dessin reste — il sert à reconnaître la pièce — et les prix
   passent en liste, où ils sont enfin lisibles. */
@media (max-width:760px){
  .planches .planche .reperes{ display:none; }
  .planches figcaption{ margin-top:14px; }
  .prestations{
    position:static; width:auto; height:auto; overflow:visible;
    clip-path:none; white-space:normal;
    display:block; margin:10px 0 0;
  }
  .prestations li{
    display:flex; align-items:baseline; justify-content:space-between; gap:var(--s2);
    padding:11px 0; border-bottom:1px solid var(--papier);
    font-size:15px;
  }
  .prestations li:last-child{ border-bottom:0; }
  .prestations span{ color:rgba(35,40,37,.78); }
  .prestations b{
    font-family:var(--serif); font-size:19px; font-weight:600; color:var(--vert);
    white-space:nowrap; font-variant-numeric:tabular-nums;
  }
  .prestations b i{
    font-style:normal; font-family:var(--sans); font-size:11px; font-weight:500;
    letter-spacing:.1em; text-transform:uppercase; color:var(--acier-texte);
  }
}

/* ============================================================================
   LA PLAQUE DU NOM — le nom en or, dessiné en SVG et mesuré après rendu
   (voir assets/site.js) : il ne peut donc jamais être rogné.
   ============================================================================ */

/* Le nom est une image : ce texte le double pour les lecteurs d ecran
   et pour Google, sans s afficher. */
.lecture-seule{
  position:absolute; width:1px; height:1px; overflow:hidden;
  clip-path:inset(50%); white-space:nowrap;
}
.plaque{ display:block; }
.plaque svg{ width:100%; height:auto; display:block; }
.plaque text{ font-family:var(--logotype); fill:url(#orfevre); }
/* Une seule ligne sur grand ecran, deux lignes sur petit :
   sinon le nom deviendrait minuscule sur un telephone. */
.plaque.deux-lignes{ display:none; }
.plaque.deux-lignes svg{ margin-inline:auto; }
.plaque.deux-lignes svg + svg{ margin-top:.08em; }
@media (max-width:680px){
  .plaque.une-ligne{ display:none; }
  .plaque.deux-lignes{ display:block; }
}

/* La phrase de positionnement : présente, mais elle ne prend plus la place du nom */
.positionnement{
  background:var(--ivoire); border-bottom:1px solid var(--papier);
  padding:clamp(28px,4vw,42px) var(--marge-page);
}
.positionnement p{
  max-width:66ch; margin:0 auto; text-align:center;
  font-family:var(--serif); font-size:clamp(19px,2.2vw,25px);
  line-height:1.5; color:var(--vert); font-weight:400;
}

/* ============================================================================
   MOUVEMENT RÉDUIT — respecté partout, ce n'est pas une option
   ============================================================================ */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{
    animation-duration:.01ms !important;
    animation-iteration-count:1 !important;
    transition-duration:.01ms !important;
  }
  html{ scroll-behavior:auto; }
  .revele{ opacity:1; transform:none; }
}

/* ============================================================================
   IMPRESSION — la liste de prix doit sortir proprement sur papier
   ============================================================================ */
@media print{
  /* `.ent-nav` et `.menu-mobile` sont des freres du <header>, pas ses
     enfants : masquer `.entete` ne les emporte plus. Sans cette ligne, la
     liste des prix sort du papier avec sa barre de navigation. */
  .entete,.ent-nav,.menu-mobile,.pied,.burger,
  .familles-tarifs,.barre-tarifs{ display:none; }
  body{ background:#fff; color:#000; font-size:11pt; }
  .sombre{ background:#fff; color:#000; }
  a::after{ content:""; }
}


/* ============================================================================
   LA TRINGLE ET LES SIX CARTES — page d'accueil
   ----------------------------------------------------------------------------
   LE CALAGE DES CARTES SOUS LES PINCES
   Les six pinces ont été mesurées dans assets/illustrations/tringle.webp,
   sur la boîte du contenu (2109 × 76) :

       pince      1       2       3       4       5       6
       mesuré  11,356  26,837  42,248  57,658  73,044  88,573 %

   Les écarts entre pinces valent 15,481 · 15,411 · 15,410 · 15,386 · 15,529 :
   0,142 point de dispersion. La grille ci-dessous reprend ces valeurs
   mesurées, jamais des valeurs idéales — aucune carte n'est placée à la
   main, et changer ces six nombres suffirait si l'image était régénérée.

   LE POINT D'ACCROCHE est dicté par la platine murale, pas par la mâchoire.
   La platine descend jusqu'à la ligne 67 sur 76 ; en dessous il ne reste que
   les six pinces. Un haut de carte plus haut ferait passer la première et la
   dernière carte SOUS la fixation, et le coin du papier disparaîtrait.
   ============================================================================ */
/* LE FOND DU BLOC EST IVOIRE, LES CARTES SONT VERTES.
   ----------------------------------------------------------------------------
   C'était l'inverse. Six rectangles de papier ivoire sur un mur vert : les
   cartes ne se détachaient que parce qu'elles étaient claires, et le vert
   occupait la moitié de l'écran sans rien porter.

   Mesuré, l'échange est net dans les deux sens :
     - le trait des six dessins est un or CLAIR (#BB8419 à #D1A553). Sur le
       papier ivoire il tenait 1,43:1 de moyenne ; sur la plaque verte il
       tient 2,33:1. Les dessins gagnent × 1,62.
     - la carte elle-même passe de 1,04:1 contre son fond (vert sur vert,
       après le premier essai) à 14,45:1 (vert sur ivoire).

   Le vert n'apparaît plus que DEUX fois dans la page, et les deux fois il
   porte de l'or : la plaque du nom, et les six cartes. C'est le même objet à
   deux échelles. Rien d'autre n'est vert, donc le vert veut dire quelque
   chose.

   LE MUR EST DU PAPIER, LES CARTES SONT DU TISSU. Le dégradé et le grain sont
   sur les six cartes, qui sont vertes — voir « LES SURFACES VERTES ». Le mur
   ivoire derrière elles reçoit l'autre traitement du site, celui du papier :
   le quadrillage du tailleur et un halo très doux. Deux matières, deux
   traitements, et aucun des deux n'empiète sur l'autre.
   ============================================================================ */
.tr-mur{
  /* L'or de la carte, sur son vert : le même que sur la plaque du nom. */
  --or-tr:var(--or-clair);
  /* LE HALO. Une ellipse très large, centrée un peu au-dessus du milieu des
     cartes, qui éclaircit le papier de deux points à peine. Son rôle n'est
     pas de se voir : c'est d'empêcher les quatre coins du bloc d'être aussi
     clairs que son centre, ce qui est le propre d'un aplat imprimé. Au-delà
     de 55 % d'ouverture il cesse d'être une lumière et devient une tache. */
  background:
    radial-gradient(132% 74% at 50% 40%, rgba(255,252,244,.58), transparent 72%),
    var(--ivoire);
  color:var(--graphite);
  position:relative; isolation:isolate; overflow:hidden;
  padding:clamp(18px,2.4vw,32px) 0 clamp(46px,5.5vw,84px);
}
.tr-titre{
  display:flex; align-items:center; gap:clamp(14px,2vw,26px);
  max-width:660px; margin:0 auto clamp(14px,1.8vw,22px);
  padding-inline:var(--marge-page);
}
.tr-titre i{ flex:1; height:1px; background:linear-gradient(90deg,transparent,rgba(130,99,31,.5),transparent); }
/* L'or clair tombait à 2,16:1 sur l'ivoire, moins de la moitié du seuil.
   L'or gravé tient 5,05:1 — voir le jeton dans « :root ». */
.tr-titre span{
  font-size:clamp(9.5px,1vw,11.5px); letter-spacing:.34em; text-transform:uppercase;
  color:var(--or-grave); white-space:nowrap;
}

/* LA TRINGLE NE GLISSE PLUS. Elle mesurait 1420 px et débordait de l'écran :
   sur un téléphone on voyait 1,7 carte sur six, et les cinq autres étaient
   derrière un geste que rien n'annonçait. Elle est désormais calée sur le
   conteneur du site, et sous 1200 px elle cède la place à l'empilement (voir
   le bloc « LES SIX MÉTIERS SUR PETIT ÉCRAN », plus bas).

   Il n'y a donc plus ni piste défilante, ni voiles de bord, ni points de
   position : ces trois pièces n'existaient que pour rendre le glissement
   supportable. */
.tr-ensemble{ max-width:var(--largeur-max); margin-inline:auto; position:relative; }
.tr-rail{
  display:block; width:100%; height:auto;
  /* La tringle passe DEVANT les cartes : sans ça la mâchoire disparaîtrait
     derrière le papier et les cartes sembleraient posées derrière la barre
     au lieu d'être pincées par elle. pointer-events est neutralisé, sinon la
     tringle intercepterait le clic sur le haut de chaque carte. */
  position:relative; z-index:2; pointer-events:none;
}

.tr-cartes{
  position:relative; z-index:1;
  display:grid;
  /* Une colonne de marge, puis carte / gouttière en alternance. Carte à
     14,9 % de la tringle, centrée sur chaque pince mesurée. minmax(0,…) est
     indispensable : sans lui le contenu pousse les colonnes et les cartes
     glissent hors des pinces. */
  grid-template-columns:
    minmax(0,3.906fr) minmax(0,14.9fr) minmax(0,0.581fr) minmax(0,14.9fr)
    minmax(0,0.511fr) minmax(0,14.9fr) minmax(0,0.510fr) minmax(0,14.9fr)
    minmax(0,0.486fr) minmax(0,14.9fr) minmax(0,0.629fr) minmax(0,14.9fr)
    minmax(0,3.977fr);
  align-items:stretch;
  margin-top:-0.375%;          /* la carte remonte jusqu'à la ligne 68 */
}
.tr-carte{
  grid-row:1;
  container-type:inline-size;
  display:flex; flex-direction:column; align-items:center; text-align:center;
  /* Toute la rampe : c'est le seul objet détouré des trois surfaces vertes,
     et c'est là que le modelé paie. Voir « LES SURFACES VERTES ». */
  background:linear-gradient(180deg,var(--v1),var(--v5));
  /* LE LISERÉ. Il est sous la pince, à l'endroit exact où la mâchoire mord
     la carte : c'est le point d'accroche de l'objet, au sens propre. Franc
     et non dégradé — un liseré qui s'estompe ne tient rien. */
  border-top:2px solid var(--or-clair);
  padding:6.4% 7% 5.4%;
  /* Une ombre discrète, et teintée de vert de nuit plutôt que noire : sur un
     fond clair, une ombre noire appuyée fait une salissure sous chaque carte.
     C'est l'inverse du réglage qu'il fallait quand le mur était sombre. */
  box-shadow:0 14px 28px -10px rgba(4,24,15,.32);
  transition:transform var(--transition), box-shadow var(--transition);
}
.tr-carte:nth-child(1){ grid-column:2; }
.tr-carte:nth-child(2){ grid-column:4; }
.tr-carte:nth-child(3){ grid-column:6; }
.tr-carte:nth-child(4){ grid-column:8; }
.tr-carte:nth-child(5){ grid-column:10; }
.tr-carte:nth-child(6){ grid-column:12; }
.tr-carte:hover{ transform:translateY(4px); box-shadow:0 18px 32px -10px rgba(4,24,15,.42); }
/* Le filet d'or reste à l'INTÉRIEUR de la carte, à son retrait d'origine.
   Sur le fond vert du premier essai, il avait dû monter sur l'arête : c'était
   la seule chose qui disait où finissait une carte. Sur l'ivoire, une plaque
   sombre se détache toute seule et le filet redevient ce qu'il était, un
   ornement. Il passe à l'or clair, comme tout ce qui est posé sur du vert. */
.tr-carte::before{
  content:""; position:absolute; inset:3%;
  border:1px solid rgba(201,162,77,.42); pointer-events:none;
}

/* La boîte d'illustration a la même dimension pour les six, l'image est
   centrée dedans. --vue donne à chaque dessin sa hauteur, en fraction de la
   largeur utile de la carte : les proportions vont de 0,42 à 1,06, et à
   largeur égale le costume paraîtrait deux fois plus petit que le fer. Le
   calage porte donc sur la surface perçue, pas sur une dimension. */
.tr-vue{
  height:122cqw; width:100%; flex:none;
  display:flex; align-items:center; justify-content:center;
  margin-bottom:4cqw;
}
.tr-vue img{ display:block; width:auto; max-width:100%; height:calc(var(--vue) * 100cqw); }

/* Le contenu de la carte suit la convention du site pour une surface sombre,
   celle de `.sombre` : ivoire pour ce qu'on lit, ivoire adouci pour le
   second plan, or clair pour l'action. Aucun motif nouveau.
   Titre 14,45:1 · description 8,48:1 · « voir » 6,68:1 — ce dernier était à
   3,66:1 sur le papier, sous le seuil de 4,5:1 exigé d'un texte de 11 px en
   gras : le changement de fond corrige un défaut qui existait. */
.tr-carte h2{
  margin:0; font-weight:500; line-height:1.16;
  font-size:clamp(18px,13.5cqw,31px); color:var(--sur-nuit); text-wrap:balance;
}
.tr-filet{
  width:34cqw; min-width:40px; height:1px; flex:none;
  background:linear-gradient(90deg,transparent,var(--or-tr),transparent);
  margin:5.2cqw 0;
}
.tr-carte p{
  margin:0; font-size:clamp(13px,8.6cqw,18px); line-height:1.5;
  color:var(--sur-nuit-doux); hyphens:auto;
}
.tr-voir{
  margin-top:auto; padding-top:7cqw;
  display:inline-flex; align-items:center; gap:3.4cqw;
  font-size:clamp(11px,6cqw,13px); letter-spacing:.2em; text-transform:uppercase;
  font-weight:600; color:var(--or-clair);
}
.tr-voir i{ width:7cqw; min-width:18px; height:1px; background:currentColor; flex:none; transition:width var(--transition); }
.tr-carte:hover .tr-voir i{ width:14cqw; }

/* ============================================================================
   LA PINCE DE CARTE — pour l'empilement des petits écrans
   ----------------------------------------------------------------------------
   Ce n'est pas une image nouvelle : c'est un morceau de tringle.webp, cadré
   sur la pince n°2 et ses deux bouts de barre, dont les extrémités
   s'estompent. Un anneau seul aurait été plus juste, mais il n'existe pas
   dans le fichier : la barre passe DANS l'anneau, et son intérieur n'a
   jamais été dessiné. Séparer les deux par la couleur détruit l'anneau —
   essayé, mesuré, abandonné.

   Le cadrage, relevé dans le fichier : x 517 → 616, y 16 → 76.
   La pince y est centrée (son axe est à x 566,5). Au facteur 0,75 :
       largeur    99 × 0,75 =  74 px
       hauteur    60 × 0,75 =  45 px
       fond      2109 × 0,75 = 1582 px
       décalage   517 × 0,75 = 388 px  et  16 × 0,75 = 12 px

   74 px et non 106 : au-delà, les deux bouts de barre cessent d'être la
   ferrure de la pince et deviennent un bout de tringle qui flotte en l'air.
   Court, on lit une pince ; long, on cherche le mur auquel elle est fixée.

   Le masque efface les deux bouts en fondu. Il est opaque de 26 à 74 %, et
   la pince occupe 29 à 70 % : elle n'est jamais entamée.
   ============================================================================ */
.tr-pince{
  display:none;                       /* la tringle s'en charge, au-dessus du seuil */
  position:absolute; left:50%; top:-38px; z-index:4;
  width:74px; height:45px;
  transform:translateX(-50%);
  background-image:url("../assets/illustrations/tringle.webp");
  background-size:1582px auto;
  background-position:-388px -12px;
  background-repeat:no-repeat;
  -webkit-mask-image:linear-gradient(90deg,transparent 0,#000 26%,#000 74%,transparent 100%);
          mask-image:linear-gradient(90deg,transparent 0,#000 26%,#000 74%,transparent 100%);
  /* Teintée de vert de nuit, comme l'ombre des cartes : sur l'ivoire, une
     ombre noire sous le laiton le fait paraître sale. */
  filter:drop-shadow(0 2px 3px rgba(4,24,15,.34));
  pointer-events:none;
}


/* ============================================================================
   LA CARTE SEULE — en tête de sa propre page de métier
   ----------------------------------------------------------------------------
   C'est LE MÊME OBJET que sur l'accueil : même forme, même pince, même filet
   d'or, même cadrage, mêmes textes — tout vient de la règle `.tr-carte`
   ci-dessus et de METIERS dans assets/site.js. On a cliqué une étiquette sur
   l'accueil, on la retrouve ici, décrochée de la tringle.

   MAIS ELLE A CHANGÉ DE MATIÈRE, ET C'EST LE FOND QUI L'EXIGE. Sur l'accueil
   les six cartes sont vertes parce qu'elles sont posées sur du papier : c'est
   l'écart qui les détache. Ici l'étiquette est posée SUR le vert, et une
   carte verte sur une bande verte ne se détache plus — mesuré au premier
   essai : 1,04:1 entre la carte et son fond. Elle passe donc au papier, et
   l'écart se rétablit dans l'autre sens.

   La règle est la même des deux côtés : la carte prend la matière que son
   fond n'a pas. Ce n'est pas une exception, c'est le même principe appliqué
   à un fond différent.
   ============================================================================ */

/* 1 · LA PINCE EST TOUJOURS LÀ. Sur l'accueil elle ne sort qu'en dessous de
       1200 px, quand la tringle cède la place à l'empilement. Ici il n'y a
       jamais de tringle : c'est la pince, et elle seule, qui dit que l'objet
       pend de la bande verte. Sans elle, la carte est un cadre posé dans une
       colonne. */
.tr-carte-seule .tr-pince{ display:block; }

/* 2 · LA LARGEUR. 280 px, en pixels et non en fractions. Une étiquette a des
       proportions — 2,4 de rapport sur la tringle — et une étiquette qui
       s'étire cesse d'en être une. À 1440 px sa colonne ferait 429 px et le
       rapport tomberait à 1,2 : une affiche, plus une étiquette. */
.tr-carte-seule{
  max-width:280px;
  margin:0 auto;
  /* Elle ne mène nulle part : elle ne doit pas répondre au survol comme un
     lien. L'ombre reste, c'est un objet en relief, pas un bouton. */
  transition:none;
}

/* 3 · LE PAPIER. Le fond, le cadre imprimé, le nom du métier et son texte
       reprennent les couleurs du site sur fond clair. Exactement celles-là :
       la carte n'a pas de palette à elle.

       ELLE PERD SON LISERÉ D'OR. Sur l'accueil, deux pixels d'or francs
       marquent l'endroit où la mâchoire mord une carte sombre. Ici la carte
       est claire sur du vert : son arête se lit déjà à 12:1, et le liseré
       redirait une deuxième fois ce que le bord dit déjà. Le filet d'or
       intérieur reste — c'est le cadre imprimé de l'étiquette, pas un
       soulignement du bord.

       L'OMBRE EST DOUBLE, PARCE QUE LA CARTE FLOTTE AU-DESSUS DE DEUX FONDS.
       Une ombre réglée pour le vert disparaît dessus ; réglée pour l'ivoire,
       elle fait une salissure sur le vert. L'ombre longue et très diffuse
       porte sur le vert, l'ombre courte et serrée décolle la carte du papier
       en bas. */
.tr-carte-seule{
  background:var(--ivoire);
  border-top:0;
  box-shadow:0 30px 56px -20px rgba(2,12,8,.62),
             0 5px 13px -5px rgba(2,12,8,.34);
}
.tr-carte-seule::before{ border-color:rgba(168,132,47,.5); }
.tr-carte-seule p{ color:rgba(35,40,37,.72); }
.tr-carte-seule .tr-filet{ background:linear-gradient(90deg,transparent,var(--or),transparent); }
.tr-carte-seule:hover{
  transform:none;
  box-shadow:0 30px 56px -20px rgba(2,12,8,.62),
             0 5px 13px -5px rgba(2,12,8,.34);
}

/* L'ILLUSTRATION EST UNE ENCRE, PAS UNE DORURE. Les six dessins sont tracés
   dans un or clair — #BB8419 à #D1A553 — réglé pour ressortir sur du vert de
   nuit. Sur le papier ivoire ce même or tombe à 1,43:1 de moyenne : le trait
   ne disparaît pas, mais il pâlit jusqu'à ne plus tenir la carte.
   Le filtre le ramène au registre de l'or gravé, celui que le site emploie
   déjà pour tout ce qui est doré sur fond clair. Ce n'est pas une couleur de
   plus : c'est le même dessin, imprimé au lieu d'être estampé. */
.tr-carte-seule .tr-vue img{ filter:brightness(.62) saturate(1.5) contrast(1.12); }

/* 3 · LE CADRAGE DE L'ILLUSTRATION suit le régime large, celui de la carte
       empilée — 66cqw et non 122. Le régime étroit est déclaré dans une
       requête de média que cette carte-ci ne déclenche pas : sur une page de
       métier en 1440 px, elle recevrait la boîte haute de la tringle, et son
       dessin monterait à 366 px pour 300 px de large. */
.tr-carte-seule .tr-vue{ height:66cqw; margin-bottom:4cqw; }
.tr-carte-seule .tr-vue img{ height:calc(var(--vue) * 56cqw); }

/* 4 · LE NOM DU MÉTIER n'est plus un titre mais un rappel — voir la raison
       dans assets/site.js, au-dessus de `carteMetier`. Il garde exactement
       l'aspect du `<h2>` de l'accueil, à la couleur près : la carte est en
       papier ici, le nom est du vert du site et non de l'ivoire. Écrit après
       `.tr-carte p` pour le devancer.
       `.tr-nom` n'existe QUE sur la carte seule : sa couleur est donc écrite
       ici, avec le reste de son aspect, et non dans le bloc du papier — deux
       règles de même poids, celle-ci serait de toute façon la dernière. */
.tr-carte .tr-nom{
  margin:0; font-weight:500; line-height:1.16;
  font-family:var(--serif);
  font-size:clamp(18px,13.5cqw,31px); color:var(--vert); text-wrap:balance;
}

/* ============================================================================
   LES SIX MÉTIERS SUR PETIT ÉCRAN — l'empilement
   ----------------------------------------------------------------------------
   LE SEUIL EST 1200 px, ET IL N'EST PAS ARBITRAIRE. La tringle mesure
   1180 px — la largeur du conteneur du site — et elle ne peut pas rétrécir :
   ses six pinces sont à des positions fixes de l'image, et les cartes se
   calent dessus. Sous 1180 px elle ne tient plus dans l'écran. 1200 laisse
   dix pixels d'air de chaque côté avant la bascule.

   En dessous, la tringle disparaît et chaque carte porte sa propre pince.
   C'est le bon partage : une tringle veut dire des pièces accrochées CÔTE À
   CÔTE le long d'une barre, et un petit écran n'a pas d'étendue latérale.
   La pince, elle, dit « ceci a été accroché » et n'a besoin d'aucune largeur.

   LE RYTHME EST TENU PAR LA PINCE, PAS PAR L'ÉCART. La pince déborde de
   38 px au-dessus de sa carte. L'écart entre deux cartes vaut 62 px : les
   38 de la pince, plus 24 d'air au-dessus d'elle. Ces 24 px sont la seule
   valeur qui compte — c'est le blanc qui sépare une pince du bas de la
   carte précédente, et c'est lui qui décide si la colonne se lit comme six
   objets suspendus ou comme un ruban continu. Sous 20 px, la pince paraît
   accrochée à la carte du dessus.
   ============================================================================ */
/* 1199.98 et non 1199 : la largeur d'affichage n'est pas toujours un nombre
   entier (facteur de zoom, écran à forte densité), et un écran mesuré
   1199,5 px ne serait attrapé ni par `max-width:1199px` ni par
   `min-width:1200px`. La tringle réapparaîtrait pour un demi-pixel. */
@media (max-width:1199.98px){
  .tr-rail{ display:none; }
  .tr-ensemble{ max-width:none; }

  /* Une colonne sur téléphone, deux sur tablette, trois au-delà. Sans cette
     grille, une carte « pleine largeur » sur un écran de 1000 px ferait
     920 px de large et son dessin 600 px de haut. Le pas de 280 px est celui
     sous lequel le texte de la carte cesse d'être lisible — et c'est aussi
     la largeur de la carte seule des pages de métier. */
  .tr-cartes{
    display:grid;
    grid-template-columns:repeat(auto-fit,minmax(280px,1fr));
    gap:62px var(--s3);
    /* 46 px sous l'intitulé : la première pince en occupe 38. */
    margin:46px auto 0;
    max-width:var(--largeur-max);
    padding-inline:var(--marge-page);
  }
  /* Les six colonnes fixes de la tringle n'ont plus cours. Même poids que les
     règles `:nth-child` du haut de fichier, écrites plus bas : elles gagnent. */
  .tr-carte:nth-child(n){ grid-column:auto; }
  .tr-carte{
    /* `grid-row:auto` est indispensable, et ce n'est pas une précaution : la
       tringle épingle les six cartes sur la MÊME rangée, `grid-row:1`. Tant
       que cette ligne tient, l'auto-placement n'a plus le choix que d'aligner
       les cartes en colonnes — six colonnes de 280 px sur un écran de 375. */
    grid-row:auto;
    padding:26px 7% 22px;             /* 26 en haut : la mâchoire mord jusqu'à 6 px */
  }
  .tr-pince{ display:block; }

  /* Le dessin respire, sans faire de la carte une affiche : à 339 px de
     carte, la boîte fait 224 px et le plus haut des six dessins en occupe
     223. Le calage sur la surface perçue, lui, ne change pas. */
  .tr-vue{ height:66cqw; margin-bottom:4cqw; }
  .tr-vue img{ height:calc(var(--vue) * 56cqw); }
}
