/* ===========================================================================
   Maison Ferri, feuille unique. Refonte NOIR & OR du 10/10/2026.
   Palette arretee dans CHARTE_MAISON_FERRI_NOIR_OR.pdf, page 3.
   Aucune dependance externe. Polices WOFF2 servies par le site.

   CASCADE : cette feuille est ecrite UNE SEULE FOIS, de haut en bas, et les
   requetes de media sont toutes regroupees a la fin, de la plus large a la
   plus etroite. On n ajoute JAMAIS de bloc correctif a la suite : a
   specificite egale c est la derniere regle ecrite qui gagne, et un correctif
   appose en fin de fichier annule silencieusement le travail d au-dessus.
   =========================================================================== */

/* ------------------------------------------------------------------ polices
   Un seul fichier par famille : Google sert une fonte variable, les trois
   graisses de Manrope pointaient sur le meme binaire (mesure : 3 x 24 576 o
   identiques au sha256). On declare donc la plage de graisses. */
@font-face{font-family:"Cormorant Garamond";font-style:normal;font-weight:500 600;
  font-display:swap;src:url(/assets/polices/cormorant-garamond-latin.5d618c46.woff2) format("woff2");
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:"Cormorant Garamond";font-style:normal;font-weight:500 600;
  font-display:swap;src:url(/assets/polices/cormorant-garamond-latin-ext.9dc38267.woff2) format("woff2");
  unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}
@font-face{font-family:"Manrope";font-style:normal;font-weight:400 600;
  font-display:swap;src:url(/assets/polices/manrope-latin.e310b55a.woff2) format("woff2");
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:"Manrope";font-style:normal;font-weight:400 600;
  font-display:swap;src:url(/assets/polices/manrope-latin-ext.ce093b34.woff2) format("woff2");
  unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}

/* ------------------------------------------------------------------- jetons
   Contrastes CALCULES (WCAG, formule de luminance relative) :
     ivoire  sur noir ............ 17,47:1      noir    sur or ......... 8,48:1
     gris    sur noir ............  9,84:1      noir    sur or clair .. 12,76:1
     or      sur noir ............  8,48:1      or prof sur ivoire .... 5,49:1
     or clair sur noir ........... 12,76:1      ivoire  sur charbon ... 15,77:1
     bordure de champ sur charbon   4,77:1 (seuil non-texte 3:1)
   INTERDITS, calcules eux aussi, jamais produits par cette feuille :
     gris chaud sur ivoire 1,78:1, or clair sur ivoire 1,37:1,
     ivoire sur or 2,06:1, blanc sur or 1,91:1. */
:root{
  --noir:#080808;
  --charbon:#171614;
  --or:#C7A45B;
  --or-clair:#E5CC91;
  --ivoire:#F4EFE4;
  --gris:#BCB5A8;
  --or-profond:#795B25;
  --filet:#4C4536;
  --bord-champ:#8E8268;

  --rayon:2px;
  --rayon-carte:3px;
  --largeur:1240px;
  --marge-laterale:64px;
  --t:180ms;                      /* transitions : 160 a 220 ms */
  --entete-h:92px;
}

*,*::before,*::after{box-sizing:border-box}
/* un texte masque en position absolue se cale sur le premier ancetre
   POSITIONNE. Sans cela c est le bloc conteneur initial, et son
   rectangle peut sortir de la page. Mesure : 0 debordement sur 636
   couples page x largeur avant comme apres, c est une assurance. */
body{position:relative}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}
@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}}
body{
  margin:0;background:var(--noir);color:var(--ivoire);
  font-family:"Manrope",system-ui,-apple-system,"Segoe UI",Roboto,Arial,sans-serif;
  font-size:18px;line-height:1.65;font-weight:400;
  overflow-wrap:break-word;
}
img{max-width:100%;height:auto;display:block}
/* garde-fou : un svg sans regle de taille se deploie a 300 x 150 px */
svg{width:20px;height:20px;flex:none;stroke-width:1.7}

h1,h2,h3,h4{font-family:"Cormorant Garamond",Georgia,"Times New Roman",serif;
  font-weight:600;line-height:1.06;margin:0 0 .5em;color:var(--ivoire);letter-spacing:0}
h1{font-size:clamp(2.5rem,5.4vw,4.5rem);font-weight:500}   /* 40 -> 72 px */
h2{font-size:clamp(2rem,3.6vw,3.125rem);font-weight:500}   /* 32 -> 50 px */
h3{font-size:1.5rem}
h4{font-size:1.2rem}
p{margin:0 0 1.1em;max-width:68ch}
ul{margin:0 0 1.1em;padding-left:1.15em}
li{margin-bottom:.45em}
strong{font-weight:600;color:var(--ivoire)}
a{color:var(--or);text-underline-offset:3px}
a:hover{color:var(--or-clair)}

/* texte masque a l oeil, conserve pour les moteurs et les lecteurs d ecran.
   PAS de white-space:nowrap : une phrase sur une seule ligne etire son
   rectangle (mesure sur un autre chantier : 548 px de large) et fait
   deborder la page meme avec overflow:hidden. Le parent doit etre positionne,
   sinon le rectangle se cale sur le bloc conteneur initial. */
.hors-ecran{position:absolute;width:1px;height:1px;margin:-1px;padding:0;
  overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);border:0;
  white-space:normal}
/* le lien d evitement doit DEVENIR visible quand il recoit le focus, sinon
   il reste une cible de 1 x 1 px que personne ne voit. */
.hors-ecran:focus{position:fixed;top:12px;left:12px;z-index:200;
  width:auto;height:auto;margin:0;padding:14px 20px;clip:auto;clip-path:none;
  background:var(--or);color:var(--noir);font-weight:600;border-radius:var(--rayon)}

.conteneur{width:100%;max-width:var(--largeur);margin:0 auto;
  padding-left:var(--marge-laterale);padding-right:var(--marge-laterale)}

/* --------------------------------------------------------------- sections */
.section{padding:104px 0;background:var(--noir)}
.section--creme{background:var(--charbon)}            /* alternance sombre */
.section--nuit{background:var(--noir);border-top:1px solid var(--filet);
  border-bottom:1px solid var(--filet)}

.surtitre{display:block;font-family:"Manrope",sans-serif;color:var(--or);
  font-weight:600;text-transform:uppercase;letter-spacing:.14em;
  font-size:.6875rem;line-height:1.4;margin-bottom:1.1rem}
.entete-section{max-width:62ch;margin:0 auto 56px;text-align:center}
.entete-section p{color:var(--gris);font-size:1.0625rem;margin:0 auto}

/* ---------------------------------------------------------------- boutons
   Rectangulaires, rayon 2 px, hauteur mini 52 px, padding 24 px.
   AUCUN bouton ne depend de la couleur de son parent : chaque variante
   porte SA couleur de fond ET sa couleur de texte, y compris au survol et
   au focus. C est la regle qui evite un bouton ardoise sur ardoise. */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:.55rem;
  min-height:52px;padding:14px 24px;border-radius:var(--rayon);
  font-family:"Manrope",sans-serif;font-weight:600;font-size:1rem;line-height:1.25;
  text-decoration:none;border:1px solid transparent;cursor:pointer;
  transition:background-color var(--t) ease,color var(--t) ease,border-color var(--t) ease}
.btn svg{width:18px;height:18px}

.btn--or,.btn--plein{background:var(--or);color:var(--noir);border-color:var(--or)}
.btn--or:hover,.btn--plein:hover,
.btn--or:focus-visible,.btn--plein:focus-visible{background:var(--or-clair);color:var(--noir);border-color:var(--or-clair)}

.btn--ligne{background:transparent;color:var(--or);border-color:var(--or)}
.btn--ligne:hover,.btn--ligne:focus-visible{background:var(--or);color:var(--noir);border-color:var(--or)}

.btn--ivoire{background:transparent;color:var(--ivoire);border-color:var(--bord-champ)}
.btn--ivoire:hover,.btn--ivoire:focus-visible{background:var(--ivoire);color:var(--noir);border-color:var(--ivoire)}

/* sur surface ivoire, le contour passe en or profond : l or antique sur
   ivoire ne mesure que 2,9:1, il ne peut pas porter de texte. */

/* -------------------------------------------------------------- en-tete
   POINT 1 d Arthur, 11/10/2026 : l en-tete porte LE LOGO livre.
   MESURE sur LOGO_MAISON_FERRI_NOIR_OR.png, 1254 x 1254 : la ligne
   « NETTOYAGE . RESTAURATION . RACHAT » occupe y 1012-1036, soit 25 px sur
   1254, 1,99 % de la hauteur. A 80 px de haut elle mesure 1,6 px : illisible,
   et il faudrait 301 px de logo pour lui donner 6 px de capitale. La taille
   fait ce qu elle peut, la MISE EN PAGE fait le reste : les trois mots sont
   reposes en texte HTML a cote du logo, lisibles et selectionnables.
   Le fond du PNG est un noir pur #000 et l en-tete est a #080808 : la charte
   autorise explicitement a reprendre le noir de la vignette pour que les
   bords se fondent, on pose donc #000 sous l image, sans toucher au dessin. */
:root{--logo-h:80px}
.entete{position:sticky;top:0;z-index:60;background:var(--noir);
  border-bottom:1px solid var(--filet)}
.entete .conteneur{display:flex;align-items:center;gap:26px;min-height:var(--entete-h)}
.logo{display:flex;align-items:center;gap:18px;text-decoration:none;
  flex:0 0 auto;min-height:48px}
.logo__img{height:var(--logo-h);width:var(--logo-h);object-fit:contain;
  flex:0 0 auto;display:block;background:#000;padding:3px;box-sizing:border-box}
.logo__dit{display:flex;flex-direction:column;gap:7px;
  padding-left:18px;border-left:1px solid var(--filet)}
.logo__base{font-family:"Manrope",sans-serif;font-size:.6875rem;font-weight:600;
  letter-spacing:.16em;text-transform:uppercase;color:var(--or);line-height:1}
.logo__depuis{font-family:"Manrope",sans-serif;font-size:.6875rem;font-weight:400;
  letter-spacing:.07em;color:var(--gris);line-height:1}
.logo:hover .logo__base{color:var(--or-clair)}

.nav{margin-left:auto;display:flex;align-items:center;gap:28px}
.nav a:not(.nav-tel){color:var(--ivoire);text-decoration:none;font-size:.9375rem;font-weight:500;
  white-space:nowrap;
  padding:6px 0;border-bottom:1px solid transparent;transition:color var(--t) ease,border-color var(--t) ease}
.nav a:not(.nav-tel):hover{color:var(--or)}
.nav a:not(.nav-tel)[aria-current="page"]{color:var(--or);border-bottom-color:var(--or)}
.nav-tel{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;
  min-height:48px;padding:12px 22px;border-radius:var(--rayon);
  background:var(--or);color:var(--noir);border:1px solid var(--or);
  font-weight:600;font-size:.9375rem;text-decoration:none;white-space:nowrap;
  transition:background-color var(--t) ease,border-color var(--t) ease}
.nav-tel:hover,.nav-tel:focus-visible{background:var(--or-clair);border-color:var(--or-clair);color:var(--noir)}
.burger{display:none;background:transparent;border:1px solid var(--bord-champ);
  border-radius:var(--rayon);padding:10px;cursor:pointer;color:var(--or);
  min-width:48px;min-height:48px;align-items:center;justify-content:center}
.burger svg{width:24px;height:24px}
.burger:hover{border-color:var(--or);color:var(--or-clair)}

/* ----------------------------------------------- bande des numeros (POINT 2)
   Elle defile. Elle doit rester utilisable :
   - `overflow:hidden` + `position:relative` sur le cadre : la piste depasse en
     largeur sans jamais allonger la page. Un `sr-only` ou un enfant large sans
     parent positionne suffit a etirer un document, on ne prend pas le risque ;
   - la piste contient DEUX lots identiques et se translate de -50 %, soit
     exactement la largeur d un lot : la boucle est sans raccord ;
   - l animation s arrete au survol ET au focus ;
   - sous prefers-reduced-motion il n y a pas d animation du tout : le second
     lot disparait et le premier passe a la ligne. */
.bnum{position:relative;overflow:hidden;background:var(--charbon);
  border-bottom:1px solid var(--filet)}
.bnum__piste{display:flex;width:max-content;
  animation:bnum-defile 54s linear infinite}
.bnum:hover .bnum__piste,
.bnum:focus-within .bnum__piste{animation-play-state:paused}
.bnum__lot{display:flex;list-style:none;margin:0;padding:0}
.bnum__lien{display:inline-flex;align-items:center;gap:9px;
  min-height:48px;padding:11px 26px;text-decoration:none;white-space:nowrap;
  color:var(--ivoire);font-size:.9375rem;font-weight:500;
  border-right:1px solid var(--filet);
  transition:color var(--t) ease,background-color var(--t) ease}
.bnum__lien svg{width:16px;height:16px;color:var(--or);flex:0 0 auto}
.bnum__ville{color:var(--gris);font-size:.8125rem;letter-spacing:.1em;
  text-transform:uppercase}
.bnum__tel{color:var(--or);font-weight:600;letter-spacing:.02em}
.bnum__lien:hover,.bnum__lien:focus-visible{background:#1F1D1A}
.bnum__lien:hover .bnum__tel,.bnum__lien:focus-visible .bnum__tel{color:var(--or-clair)}
@keyframes bnum-defile{from{transform:translateX(0)}to{transform:translateX(-50%)}}
@media (prefers-reduced-motion:reduce){
  .bnum{overflow:visible}
  .bnum__piste{animation:none;width:auto;flex-wrap:wrap;justify-content:center}
  .bnum__lot[aria-hidden="true"]{display:none}
  .bnum__lot{flex-wrap:wrap;justify-content:center}
}

/* ------------------------------------------------------------- hero maison
   Deux colonnes, 52 % texte / 48 % photographie. Le titre et les actions
   sont au premier ecran, avant toute galerie. */
.hero{background:var(--noir);border-bottom:1px solid var(--filet)}
.hero .conteneur{display:grid;grid-template-columns:52fr 48fr;gap:56px;
  align-items:center;padding-top:88px;padding-bottom:88px}
/* Charte page 3 : H1 de 64 a 72 px sur ordinateur, 40 a 46 px sur telephone.
   Le plafond etait a 56 px jusqu au 11/10, il a ete porte a 64 px. Mesure sur
   le rendu servi : 64 px a 1440 px de large, 40 px a 390 px. */
.hero h1{margin:0 0 .25em;font-size:clamp(2.5rem,4.6vw,4rem)}   /* charte : 40 px mobile -> 64 px ordinateur */
.hero__signature{font-family:"Cormorant Garamond",Georgia,serif;font-size:1.75rem;
  line-height:1.15;color:var(--or);margin:0 0 1em;max-width:22ch}
.hero h1 .accent{color:var(--or);display:block}
.hero__texte p{color:var(--gris);font-size:1.125rem;max-width:46ch;margin-bottom:0}
.hero .actions{display:flex;flex-wrap:wrap;gap:14px;margin-top:36px}
.hero__photo{margin:0;position:relative}
.hero__photo img{width:100%;height:clamp(320px,38vw,520px);object-fit:cover;
  border-radius:var(--rayon-carte);border:1px solid var(--filet)}
.hero__photo figcaption{margin-top:12px;font-size:.8125rem;color:var(--gris);line-height:1.5}

/* ancienne banniere pleine largeur, conservee pour les pages internes */
.heros{position:relative;background:var(--noir);padding:72px 0 64px;
  border-bottom:1px solid var(--filet)}
.heros::before{content:"";position:absolute;inset:0;
  background:linear-gradient(90deg,rgba(8,8,8,.94) 0%,rgba(8,8,8,.82) 55%,rgba(8,8,8,.62) 100%)}
.heros .conteneur{position:relative;z-index:1;max-width:1240px}
.heros h1{margin-bottom:.3em;max-width:18ch}
.heros p{color:var(--gris);font-size:1.0625rem;max-width:58ch;margin-bottom:0}
.heros .actions{display:flex;flex-wrap:wrap;gap:14px;margin-top:32px}

/* ------------------------------------------------------- bande de reperes */
/* colonne de lecture unique, 60 a 70 caracteres */
.une-col{max-width:68ch;margin:0 auto}
.une-col h2{margin-bottom:.45em}

.reperes{background:var(--noir);border-bottom:1px solid var(--filet)}
.reperes .conteneur{display:grid;grid-template-columns:repeat(4,1fr);gap:28px;
  padding-top:26px;padding-bottom:26px}
.repere{display:flex;align-items:center;gap:12px;font-size:.9375rem;color:var(--ivoire)}
.repere svg{color:var(--or)}

/* ------------------------------------------------------------- trois entrees */
.entrees{display:grid;grid-template-columns:repeat(3,1fr);gap:0;
  border:1px solid var(--filet);border-radius:var(--rayon-carte);overflow:hidden}
.entree{display:flex;flex-direction:column;gap:14px;padding:40px 32px;
  text-decoration:none;background:var(--charbon);border-right:1px solid var(--filet);
  transition:background-color var(--t) ease}
.entree:last-child{border-right:0}
.entree:hover,.entree:focus-visible{background:#1F1D1A}
.entree svg{width:26px;height:26px;color:var(--or)}
.entree h3{margin:0;font-size:1.5rem;color:var(--ivoire)}
.entree p{margin:0;color:var(--gris);font-size:1.0625rem}
.entree__fleche{margin-top:auto;padding-top:14px;color:var(--or);font-size:.8125rem;
  font-weight:600;letter-spacing:.1em;text-transform:uppercase}
.entree:hover .entree__fleche{color:var(--or-clair)}

/* ----------------------------------------------------------------- cartes */
.grille{display:grid;gap:1px;background:var(--filet)}
.grille--2{grid-template-columns:repeat(2,1fr)}
.grille--3{grid-template-columns:repeat(3,1fr)}
.grille--4{grid-template-columns:repeat(4,1fr)}
.carte{background:var(--charbon);padding:32px 28px;border-radius:0}
.carte h3{margin-bottom:.4em;font-size:1.375rem;color:var(--ivoire)}
.carte p{color:var(--gris);margin-bottom:0;font-size:1.0625rem}
.carte__icone{width:44px;height:44px;border:1px solid var(--filet);border-radius:var(--rayon);
  display:flex;align-items:center;justify-content:center;margin-bottom:20px}
.carte__icone svg{color:var(--or);width:21px;height:21px}
a.carte{text-decoration:none;display:block;transition:background-color var(--t) ease}
a.carte:hover,a.carte:focus-visible{background:#1F1D1A}
a.carte:hover h3{color:var(--or)}

/* ----------------------------------------------------------------- etapes */
.etape{position:relative;padding:0;background:var(--charbon);padding:32px 28px}
.etape__n{display:flex;align-items:center;justify-content:center;
  width:40px;height:40px;border:1px solid var(--or);border-radius:50%;
  color:var(--or);font-family:"Cormorant Garamond",Georgia,serif;font-size:1.25rem;
  font-weight:600;margin-bottom:20px}
.etape h3{font-size:1.3125rem;margin-bottom:.4em}
.etape p{color:var(--gris);font-size:1.0625rem;margin-bottom:0}

/* ---------------------------------------------------------------- galerie */
.galerie{display:grid;gap:24px;grid-template-columns:repeat(3,1fr)}
.galerie figure{margin:0;background:var(--charbon);border:1px solid var(--filet);
  border-radius:var(--rayon-carte);overflow:hidden}
/* object-fit:cover sur les vues d atelier, les bords du tapis n y sont pas
   le sujet. Les pieces entieres passent en .galerie--piece, contain. */
.galerie img{width:100%;aspect-ratio:4/3;object-fit:cover}
.galerie--piece img{object-fit:contain;background:#0E0D0C}
.galerie figcaption{padding:14px 16px;font-size:.8125rem;color:var(--gris);line-height:1.5}

/* ----------------------------------------------------------- avant / apres */
.avap{display:grid;gap:24px;grid-template-columns:repeat(3,1fr)}
.avap figure{margin:0;background:var(--charbon);border:1px solid var(--filet);
  border-radius:var(--rayon-carte);overflow:hidden}
.avap img{width:100%;height:auto}
.avap figcaption{padding:14px 16px;font-size:.8125rem;color:var(--gris);line-height:1.5}
.avap--paire{grid-template-columns:repeat(2,1fr);max-width:760px;margin:32px auto 0}

/* ------------------------------------------------------------------ villes */
.villes{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;list-style:none;
  padding:0;margin:0;background:var(--filet);border:1px solid var(--filet)}
.villes li{margin:0}
.villes a{display:block;padding:14px 16px;background:var(--charbon);
  text-decoration:none;font-size:.9375rem;color:var(--ivoire);
  transition:background-color var(--t) ease,color var(--t) ease}
.villes a:hover,.villes a:focus-visible{background:var(--or);color:var(--noir)}

/* --------------------------------------------------------------- questions */
.question{background:var(--charbon);border:1px solid var(--filet);
  border-radius:var(--rayon-carte);margin-bottom:12px;padding:0 24px}
.question summary{cursor:pointer;font-family:"Cormorant Garamond",Georgia,serif;
  font-size:1.3125rem;font-weight:600;padding:20px 0;color:var(--ivoire);
  list-style:none;display:flex;justify-content:space-between;align-items:center;gap:16px}
.question summary::-webkit-details-marker{display:none}
.question summary::after{content:"+";font-family:"Manrope",sans-serif;font-size:1.4rem;
  color:var(--or);line-height:1;flex:0 0 auto}
.question[open] summary::after{content:"\2212"}
.question summary:hover{color:var(--or)}
.question p{padding-bottom:20px;margin:0;color:var(--gris);font-size:1.0625rem}

/* -------------------------------------------------------------- formulaire
   Les champs sont sur charbon, bordes en #8E8268 : 4,77:1 contre le fond,
   au-dessus du seuil 3:1 des elements d interface. */
.devis{position:relative;background:var(--charbon);border:1px solid var(--filet);
  border-radius:var(--rayon-carte);padding:32px}
.devis h2{font-size:1.875rem;margin-bottom:.3em}
.devis__intro{color:var(--gris);font-size:1.0625rem;margin-bottom:1.6em}
.devis label{display:block;font-size:.875rem;font-weight:500;margin-bottom:7px;
  color:var(--ivoire)}
.devis input,.devis select,.devis textarea{width:100%;padding:14px 15px;margin-bottom:18px;
  min-height:52px;border:1px solid var(--bord-champ);border-radius:var(--rayon);
  font-family:inherit;font-size:16px;background:var(--noir);color:var(--ivoire);
  transition:border-color var(--t) ease}
.devis input::placeholder,.devis textarea::placeholder{color:#8B857A}
.devis input:hover,.devis select:hover,.devis textarea:hover{border-color:var(--or)}
.devis textarea{min-height:120px;resize:vertical}
.devis .btn{width:100%}
.devis__note{font-size:.8125rem;color:var(--gris);margin:14px 0 0;text-align:center}
/* PIEGE : `display:flex` ecrit ici l emporte sur la regle `[hidden]{display:none}`
   du navigateur, qui est une regle d AGENT UTILISATEUR. Les trois messages
   d erreur s affichaient donc EN PERMANENCE, 46 px chacun, alors qu ils
   portaient bien l attribut hidden. Mesure faite sur la valeur CALCULEE,
   pas sur l attribut : c est l attribut qui disait vrai et le rendu qui
   mentait. D ou la regle explicite ci-dessous. */
.devis__erreur{display:flex;align-items:flex-start;gap:7px;
  margin:-12px 0 16px;font-size:.875rem;color:var(--or-clair)}
.devis__erreur[hidden],.devis__bilan[hidden]{display:none}
.devis__erreur svg{width:16px;height:16px;margin-top:3px;color:var(--or-clair)}
.devis [aria-invalid="true"]{border-color:var(--or-clair);border-width:2px}
.devis__bilan{border:1px solid var(--or);border-radius:var(--rayon);padding:16px 18px;
  margin-bottom:22px;color:var(--ivoire);font-size:.9375rem;background:#1E1B16}
.devis form{position:relative}
.miel{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden;white-space:normal}
.deux-col{display:grid;grid-template-columns:1fr 1fr;gap:56px;align-items:start}

/* ---------------------------------------------------- selecteur d atelier */
.ateliers-contact{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;
  background:var(--filet);border:1px solid var(--filet)}
.ac{display:flex;flex-direction:column;gap:6px;padding:22px 20px;background:var(--charbon);
  text-decoration:none;transition:background-color var(--t) ease}
.ac:hover,.ac:focus-visible{background:#1F1D1A}
.ac__ville{font-family:"Cormorant Garamond",Georgia,serif;font-size:1.25rem;
  font-weight:600;color:var(--ivoire)}
.ac__num{color:var(--or);font-size:1rem;font-weight:600;white-space:nowrap}
.ac:hover .ac__num{color:var(--or-clair)}
.ac__zone{color:var(--gris);font-size:.8125rem}

/* -------------------------------------------------------------- pied */
.pied{background:var(--noir);border-top:1px solid var(--filet);
  padding:80px 0 28px;font-size:.9375rem;color:var(--gris)}
.pied .marque-bloc{display:flex;flex-direction:column;gap:20px;margin-bottom:56px;
  align-items:flex-start}
/* logo COMPLET, dans un espace suffisant. object-fit:contain, jamais cover. */
.pied .marque-bloc img{width:200px;height:200px;object-fit:contain;
  border:1px solid var(--filet);border-radius:var(--rayon-carte)}
.pied .marque-bloc p{color:var(--gris);font-size:.9375rem;max-width:44ch;margin:0}
.pied h2{font-family:"Manrope",sans-serif;color:var(--ivoire);font-size:.6875rem;
  text-transform:uppercase;letter-spacing:.14em;font-weight:600;margin-bottom:1.6em}
.pied a{color:var(--gris);text-decoration:none}
.pied a:hover{color:var(--or)}
.pied .grille{display:grid;grid-template-columns:repeat(4,1fr);gap:40px;background:transparent}
.pied ul{list-style:none;padding:0;margin:0}
.pied li{margin-bottom:.6em}
.pied p{color:var(--gris)}
.pied__bas{border-top:1px solid var(--filet);margin-top:56px;padding-top:24px;
  display:flex;flex-wrap:wrap;gap:12px 28px;justify-content:space-between;
  font-size:.8125rem;color:var(--gris)}
.pied__bas a{text-decoration:underline;color:var(--gris)}
.pied__bas a:hover{color:var(--or)}

/* --------------------------------------------------------- fil d ariane */
.fil{background:var(--charbon);border-bottom:1px solid var(--filet);
  font-size:.8125rem;padding:14px 0;color:var(--gris)}
.fil a{color:var(--gris);text-decoration:none}
.fil a:hover{color:var(--or)}
.fil span{color:var(--ivoire)}

/* ------------------------------------------------------- barre basse mobile
   Masquee par defaut, affichee sous 760 px. env(safe-area-inset-bottom) pour
   ne pas passer sous la barre du navigateur. */
.barre-basse{display:none}
.cale-barre{display:none}

/* ------------------------------------------------------------ liseres de focus
   Deux anneaux, un clair et un sombre : une seule teinte ne peut pas rester
   visible a la fois sur le noir du site et sur la surface ivoire. */
a:focus-visible,button:focus-visible,summary:focus-visible,
input:focus-visible,select:focus-visible,textarea:focus-visible,
details:focus-visible,[tabindex]:focus-visible{
  outline:3px solid var(--or-clair);outline-offset:2px;
  box-shadow:0 0 0 6px rgba(8,8,8,.92);border-radius:1px}

/* ------------------------------------------------------------------ reveal
   8 px et opacite seulement, contenu visible sans JavaScript : l etat de
   repos est deja opaque, le script ne fait qu ajouter l animation. */
@media (prefers-reduced-motion:no-preference){
  .js .reveal{opacity:0;transform:translateY(8px);
    transition:opacity 220ms ease,transform 220ms ease}
  .js .reveal.vu{opacity:1;transform:none}
}

/* ------------------------------------------- hero photo des pages internes
   POINT 8 : aucune page ne s ouvre sur du texte seul.
   POINT 4 : sur telephone la photo passe AVANT le titre. Le H1 reste PREMIER
   dans le document ; c est `grid-row` qui inverse l ordre visuel, pas
   `flex-direction`, qui s herite et se retourne contre les variantes. */
.heros--photo{padding:64px 0 60px}
.heros--photo .conteneur{display:grid;grid-template-columns:52fr 48fr;
  gap:48px;align-items:center}
.heros--photo .heros__texte{grid-column:1;grid-row:1}
.heros--photo .heros__photo{grid-column:2;grid-row:1;margin:0}
.heros--photo .heros__photo img{display:block;width:100%;
  height:clamp(240px,24vw,340px);object-fit:cover;
  border-radius:var(--rayon-carte);border:1px solid var(--filet)}
.heros--photo .heros__photo figcaption{margin-top:12px;font-size:.8125rem;
  color:var(--gris);line-height:1.5;max-width:46ch}
.heros--photo h1{max-width:20ch}

/* ------------------------------------- photo posee dans une colonne de texte */
.deux-col--photo{align-items:start}
.bloc-photo{margin:0;position:sticky;top:calc(var(--entete-h) + 24px)}
.bloc-photo img{display:block;width:100%;height:auto;aspect-ratio:4/3;
  object-fit:cover;border-radius:var(--rayon-carte);border:1px solid var(--filet)}
.bloc-photo figcaption{margin-top:12px;font-size:.8125rem;color:var(--gris);
  line-height:1.5}

/* --------------------------------------------- POINT 7 : de pere en fils 1952
   Arthur donne 1952 le 11/10/2026. C est la seule des quatre dates qui vienne
   du donneur d ordre : 1934 (page en production), 1945 (version archivee) et
   1987 (logo d une AUTRE maison) ne figurent nulle part sur le site. */
.hero__depuis{margin:0 0 1.5em}
.hero__depuis span{display:inline-block;font-family:"Manrope",sans-serif;
  font-size:.75rem;font-weight:600;letter-spacing:.16em;text-transform:uppercase;
  color:var(--or);padding:9px 16px;border:1px solid var(--filet);
  border-radius:var(--rayon)}
.marque-bloc__depuis{font-family:"Manrope",sans-serif;font-size:.75rem;
  font-weight:600;letter-spacing:.16em;text-transform:uppercase;
  color:var(--or);margin:0 0 .9em}

/* ===========================================================================
   ADAPTATIONS, de la plus large a la plus etroite. Rien apres ce bloc.
   =========================================================================== */
@media (max-width:1100px){
  .conteneur{padding-left:32px;padding-right:32px}
  /* `.nav{gap:20px}` se trouvait ici. Il ne s appliquait JAMAIS : la requete
     a 1239 px est ecrite PLUS BAS et, a specificite egale, c est elle qui
     gagne sur toute la plage ou celle-ci agit aussi (<= 1100 px). Valeur
     CALCULEE au navigateur avant retrait : gap 0 px de 900 a 1239 px et
     28 px au-dela, soit exactement la meme qu apres retrait. Regle morte. */
  .pied .grille{grid-template-columns:repeat(2,1fr);gap:36px}
  .ateliers-contact{grid-template-columns:repeat(2,1fr)}
}
@media (max-width:1239px){
  /* le menu de bureau n a plus la place : on passe au menu deroulant AVANT
     que la signature ne doive ceder de la largeur. */
  .burger{display:inline-flex}
  .nav{display:none;position:absolute;top:100%;left:0;right:0;
    background:var(--charbon);border-bottom:1px solid var(--filet);
    flex-direction:column;align-items:stretch;gap:0;padding:8px 32px 20px;
    margin-left:0}
  .nav.ouvert{display:flex}
  .nav a{padding:16px 0;border-bottom:1px solid var(--filet);font-size:1rem}
  .nav a[aria-current="page"]{border-bottom-color:var(--filet)}
  .nav-tel{justify-content:center;margin-top:16px}
  .entete .conteneur{justify-content:space-between}
  .hero .conteneur{grid-template-columns:1fr;gap:32px;padding-top:40px;padding-bottom:56px}
  /* POINT 4 d Arthur, 11/10/2026 : sur telephone, la PHOTO D ABORD, le titre
     et le texte dessous. C est l inverse de ce que demandait la section 7 du
     brief ecrit ; c est le donneur d ordre qui tranche. Le H1 reste premier
     dans le document, seule la grille change : `grid-row` est explicite, la
     ou `order` et `flex-direction` s heritent et se retournent contre les
     variantes de carte. */
  .hero__photo{grid-row:1;grid-column:1}
  .hero__texte{grid-row:2;grid-column:1}
  .heros--photo .conteneur{grid-template-columns:1fr;gap:28px}
  .heros--photo .heros__photo{grid-row:1;grid-column:1}
  .heros--photo .heros__texte{grid-row:2;grid-column:1}
  .heros--photo h1{max-width:none}
  .bloc-photo{position:static}
  .grille--4{grid-template-columns:repeat(2,1fr)}
  .grille--3{grid-template-columns:repeat(2,1fr)}
  .villes{grid-template-columns:repeat(3,1fr)}
  .avap{grid-template-columns:repeat(2,1fr)}
  .deux-col{grid-template-columns:1fr;gap:40px}
  .entrees{grid-template-columns:1fr}
  .entree{border-right:0;border-bottom:1px solid var(--filet)}
  .entree:last-child{border-bottom:0}
  .reperes .conteneur{grid-template-columns:repeat(2,1fr);gap:18px}
}
@media (max-width:760px){
  :root{--entete-h:88px;--logo-h:68px;--marge-laterale:20px}
  body{font-size:16px}
  .conteneur{padding-left:20px;padding-right:20px}
  .section{padding:60px 0}
  .nav{padding:8px 20px 20px}
  /* POINT 5 d Arthur : LE LOGO CENTRE SUR TELEPHONE.
     Le bouton de menu sort du flux pour que le centrage porte sur le seul
     logo. Il est positionne par rapport a `.entete`, qui est deja sticky donc
     deja positionnee ; `.conteneur` reste non positionne, sinon le menu
     deroulant, en `left:0;right:0`, se recalerait sur la boite interieure et
     cesserait d occuper toute la largeur. */
  .entete .conteneur{justify-content:center}
  .logo{min-height:48px;gap:0}
  .logo__dit{display:none}
  .burger{position:absolute;right:var(--marge-laterale);top:50%;
    transform:translateY(-50%);height:48px}
  .hero .conteneur{padding-top:40px;padding-bottom:44px;gap:28px}
  .hero .actions{margin-top:28px}
  .hero__signature{font-size:1.375rem}
  .hero .actions .btn{flex:1 1 100%}
  .hero__photo img{height:240px}
  .heros{padding:40px 0 44px}
  .heros--photo{padding:0 0 44px}
  .heros--photo .conteneur{padding-top:0}
  .heros--photo .heros__photo img{height:230px}
  .heros--photo .heros__photo{margin-left:calc(-1 * var(--marge-laterale));
    margin-right:calc(-1 * var(--marge-laterale))}
  .heros--photo .heros__photo img{border-radius:0;border-left:0;border-right:0}
  .heros--photo .heros__photo figcaption{padding:0 var(--marge-laterale)}
  .entete-section{margin-bottom:36px}
  .grille--2,.grille--3,.grille--4{grid-template-columns:1fr}
  .pied .grille{grid-template-columns:1fr;gap:34px}
  .pied{padding:56px 0 24px}
  .pied .marque-bloc img{width:160px;height:160px}
  .galerie{grid-template-columns:repeat(2,1fr);gap:16px}
  .villes{grid-template-columns:repeat(2,1fr)}
  .avap{grid-template-columns:1fr}
  .avap--paire{grid-template-columns:repeat(2,1fr)}
  .ateliers-contact{grid-template-columns:1fr}
  .devis{padding:24px 20px}
  .deux-col{gap:32px}
  .reperes .conteneur{grid-template-columns:1fr;gap:12px}
  .pied__bas{flex-direction:column;gap:10px}
  /* la bande des numeros se replie sur telephone : deux lignes par lien,
     la ville au-dessus du numero, et une cible tactile pleine hauteur */
  .bnum__lien{padding:9px 18px;gap:7px}
  .bnum__ville{font-size:.6875rem}
  .bnum__tel{font-size:.9375rem}

  /* charte : corps a 16 px sur telephone. Ecrit ici, donc apres les
     regles a 17 px ci-dessus, pour gagner a specificite egale. */
  .entree p,.carte p,.etape p,.question p,.devis__intro,.heros p{font-size:1rem}

  /* barre basse : appel et estimation, toujours visibles */
  .barre-basse{display:grid;grid-template-columns:1fr 1fr;gap:10px;
    position:fixed;left:0;right:0;bottom:0;z-index:70;
    background:var(--noir);border-top:1px solid var(--filet);
    padding:10px 16px calc(10px + env(safe-area-inset-bottom));}
  .barre-basse .btn{width:100%;min-height:48px;font-size:.9375rem}
  /* espace sous le contenu : sans lui le pied passe sous la barre */
  .cale-barre{display:block;height:calc(78px + env(safe-area-inset-bottom))}
}
@media (max-width:420px){
  .galerie{grid-template-columns:1fr}
  .avap--paire{grid-template-columns:1fr}
  :root{--logo-h:64px}
}
/* le clavier virtuel reduit la hauteur : on retire la barre basse en paysage
   tres bas, sinon elle recouvre le champ en cours de saisie. */
@media (max-width:760px) and (max-height:450px){
  .barre-basse{display:none}
  .cale-barre{display:none}
}
