/* =========================================================================
   MOKCHA Studio — Design system (partagé par les 3 pages)
   Source de vérité : ../../../design-system/mokcha-design-system.html (versionné dans ce repo)
   Display = Rammetto One · Corps/UI = Poppins
   Palette sable / terre / brique · ombres franches colorées (signature)
   ========================================================================= */

/* Polices hébergées par le thème (sous-ensemble latin, WOFF2) : aucune requête vers un tiers
   avant le premier rendu. Licence SIL OFL 1.1 — Poppins (Indian Type Foundry),
   Rammetto One (Vernon Adams). Ajouter une graisse = ajouter son fichier ICI et dans assets/fonts/. */
@font-face { font-family: 'Poppins'; font-style: normal; font-weight: 400; font-display: swap; src: url('fonts/poppins-400.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: 'Poppins'; font-style: normal; font-weight: 500; font-display: swap; src: url('fonts/poppins-500.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: 'Poppins'; font-style: normal; font-weight: 600; font-display: swap; src: url('fonts/poppins-600.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: 'Poppins'; font-style: normal; font-weight: 700; font-display: swap; src: url('fonts/poppins-700.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: 'Poppins'; font-style: normal; font-weight: 800; font-display: swap; src: url('fonts/poppins-800.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: 'Rammetto One'; font-style: normal; font-weight: 400; font-display: swap; src: url('fonts/rammetto-one-400.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: 'Poppins'; font-style: italic; font-weight: 400; font-display: swap; src: url('fonts/poppins-400-italic.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; }

/* ---------- Tokens ---------- */
:root {
  /* Teintes principales — DA 90/95 % */
  --cream:    #F4E7D7;   /* crème rosé · fond principal */
  --sand:     #E5D2A8;   /* sable · surface secondaire · bordures · rayures */
  --sand-2:   #FBF1E7;   /* crème clair · surface claire · rayure claire */
  --beige:    #E5D2A8;   /* = sable · bordures · séparateurs */
  --beige-2:  #BFAE86;   /* sable atténué · texte sur fond foncé (dérivé) */
  --beige-3:  #EBE3D2;   /* fond bouton désactivé (dérivé) */
  --white:    #FFFFFF;   /* cartes · contraste (dérivé) */

  /* Teintes d'écriture — DA */
  --ink:      #404042;   /* titres · charbon */
  --slate:    #58585A;   /* texte courant · gris moyen */
  --stone:    #7E7F82;   /* légendes · atténué (dérivé, entre gris moyen et gris clair) */

  /* Teintes secondaires — DA 5/10 % */
  --olive:    #897543;   /* olive · accent secondaire · sur-titres */
  --accent:       #6B392E;   /* brique — action principale · liens · ombres */
  --accent-dark:  #542C23;   /* brique foncée · hover (dérivé) */

  /* Alias internes */
  --muted: var(--slate);
  /* compat : anciens inline styles var(--gold) → sable du DS */
  --gold: var(--sand);
  --line: rgba(107,57,46, .14);
  --line-strong: var(--beige);

  /* Rayons */
  --r-sm:  8px;
  --r:     10px;   /* boutons / champs */
  --r-14:  14px;
  --r-16:  16px;
  --r-lg:  20px;   /* cartes / blocs */
  --pill:  999px;

  /* Ombres douces chaudes */
  --shadow-soft:  0 8px 20px rgba(107,57,46, .18);
  --shadow-deep:  0 18px 36px rgba(107,57,46, .22);
  --shadow-subtle:0 1px 3px rgba(107,57,46, .12);
  /* Ombres franches colorées (signature — jamais floues) */
  /* Nommées par RÔLE, pas par couleur : le prochain changement de teinte
     ne touchera plus que la valeur de --accent. */
  --shadow-hard-olive:     6px 6px 0 #897543;
  --shadow-hard-accent:    6px 6px 0 #6B392E;
  --shadow-hard-accent-sm: 3px 3px 0 #6B392E;

  --maxw: 1180px;
  --gap: clamp(1.2rem, 3vw, 2.2rem);
  --header-h: 80px;
  /* Hauteur de la barre CTA mobile. Sert à deux endroits : le padding de fin de
     page et la position du bandeau cookies — les deux doivent bouger ensemble si
     la barre change de taille. */
  --cta-bar-h: calc(68px + env(safe-area-inset-bottom, 0px));

  --ff:      'Poppins', system-ui, -apple-system, 'Segoe UI', sans-serif;
  --ff-disp: 'Rammetto One', 'Poppins', cursive;
}

/* ---------- Reset léger ---------- */
*, *::before, *::after { box-sizing: border-box; }
html { scroll-behavior: smooth; }
body {
  margin: 0;
  font-family: var(--ff);
  font-weight: 400;
  color: var(--slate);
  background: var(--cream);
  line-height: 1.6;
  font-size: 16px;
  -webkit-font-smoothing: antialiased;
  overflow-x: hidden;
}
::selection { background: var(--accent); color: var(--cream); }
/* `height: auto` n'est pas cosmétique. Les <img> portent des attributs width/height —
   utiles, ils réservent la place et évitent le décalage de mise en page au chargement —
   et ces attributs agissent comme des règles CSS de faible priorité. Sans `height: auto`,
   la hauteur de l'attribut fait autorité : l'image est figée à sa taille naturelle, et
   tout `aspect-ratio` déclaré plus bas devient inopérant, puisqu'il n'agit que si l'une
   des deux dimensions est libre. */
img { max-width: 100%; height: auto; display: block; }
/* Liens : brique, sans souligné par défaut. Le souligné est réservé au contenu
   éditorial (voir « .prose a » plus bas) — dans un menu, un bouton ou une carte,
   la position et la forme signalent déjà le lien, le souligné n'y sert à rien. */
a { color: var(--accent); text-decoration: none; }
a:hover { color: var(--accent-dark); }

/* Titres : display = Rammetto One, sous-titres = Poppins */
h1, h2 {
  font-family: var(--ff-disp); font-weight: 400; color: var(--ink);
  line-height: 1.12; letter-spacing: -0.01em; margin: 0 0 .5em;
}
h3, h4 {
  font-family: var(--ff); font-weight: 800; color: var(--ink);
  line-height: 1.25; margin: 0 0 .5em;
}
h1 { font-size: clamp(2rem, 5vw, 3.5rem); }
h2 { font-size: clamp(1.75rem, 4.4vw, 3rem); }
h3 { font-size: clamp(1.15rem, 2vw, 1.45rem); }
h4 { font-size: 1.2rem; }
p { margin: 0 0 1.1em; }
strong { color: var(--ink); font-weight: 600; }

/* ---------- Accessibilité ---------- */
.skip-link {
  position: absolute; left: 8px; top: -60px;
  background: var(--accent); color: var(--cream);
  padding: .7rem 1.1rem; border-radius: var(--r); z-index: 2000;
  transition: top .2s ease; font-weight: 600;
}
.skip-link:focus { top: 8px; text-decoration: none; }
:focus-visible { outline: 3px solid var(--accent); outline-offset: 2px; border-radius: 4px; }
.visually-hidden {
  position: absolute !important; width: 1px; height: 1px; padding: 0; margin: -1px;
  overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0;
}

/* ---------- Layout ---------- */
.container { width: 100%; max-width: var(--maxw); margin-inline: auto; padding-inline: clamp(1.1rem, 4vw, 2rem); }
section { padding-block: clamp(3.5rem, 7vw, 6rem); }
.section-alt  { background: var(--white); }
.section-sand { background: var(--sand); }
.lead { font-size: 1.15rem; color: var(--slate); max-width: 60ch; }
.center { text-align: center; }
.center .lead { margin-inline: auto; }
/* Teaser « Qui suis-je » (piliers) : split façon HP mais compact (~2× moins haut).
   L'image passe en paysage 3:2 plafonnée, au lieu du portrait 2/3 de la home. */
.split--compact .split-media img { aspect-ratio: 3 / 2; max-height: 320px; }

.eyebrow {
  text-transform: uppercase; letter-spacing: .22em; font-size: .78rem;
  font-weight: 600; color: var(--olive); margin: 0 0 .9rem;
}
.section-sand .eyebrow { color: var(--olive); }

/* =========================================================================
   BOUTONS / CTA — valeurs exactes du DS
   ========================================================================= */
.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: .5rem;
  font-family: var(--ff); font-weight: 600; font-size: 15px; line-height: 1;
  padding: 15px 30px; border-radius: var(--r);
  border: none; cursor: pointer; text-decoration: none;
  transition: transform .2s ease, box-shadow .2s ease, background .2s ease, color .2s ease;
}
.btn:hover { text-decoration: none; }

/* Primaire brique */
.btn-primary { background: var(--accent); color: var(--cream); }
.btn-primary:hover { background: var(--accent-dark); color: var(--cream); transform: translateY(-2px); }

/* Primaire SIGNATURE — ombre franche brune (CTA principaux : hero, fin de page) */
.btn-signature { box-shadow: var(--shadow-hard-olive); }
.btn-signature:hover { box-shadow: 3px 3px 0 #897543; transform: translate(3px, 3px); }

/* Secondaire sable */
.btn-secondary { background: var(--sand); color: var(--ink); }
.btn-secondary:hover { background: var(--beige); color: var(--ink); transform: translateY(-2px); }
/* Sur fond sable, le bouton secondaire (sable) se fondrait — on le passe en clair. */
.section-sand .btn-secondary { background: var(--white); }
.section-sand .btn-secondary:hover { background: var(--sand-2); }

/* Contour brun (ex-ghost) */
.btn-ghost,
.btn-outline {
  background: transparent; color: var(--olive);
  border: 1.5px solid var(--olive); padding: 14px 28px;
}
.btn-ghost:hover,
.btn-outline:hover { background: var(--olive); color: var(--cream); transform: translateY(-2px); }

/* Tailles */
.btn-sm { font-size: 13px; padding: 10px 20px; border-radius: var(--r-sm); }
.btn-lg { font-size: 17px; padding: 19px 40px; border-radius: 12px; }

/* Désactivé */
.btn[disabled], .btn.is-disabled {
  background: var(--beige-3); color: #B2B3B7; cursor: not-allowed; box-shadow: none; transform: none;
}

/* =========================================================================
   HEADER (sticky)
   ========================================================================= */
.site-header {
  position: sticky; top: 0; z-index: 1000;
  /* bandes verticales (CSS) — rappel du header du site actuel */
  background: repeating-linear-gradient(to right,
              #F4E7D7 0, #F4E7D7 30px,
              #E5D2A8 30px, #E5D2A8 60px);
  border-bottom: 1px solid var(--line-strong);
}
.header-inner {
  display: flex; align-items: center; gap: 1.5rem;
  min-height: var(--header-h); padding-block: .5rem;
}
.brand { display: flex; align-items: center; flex-shrink: 0; }
.brand img { height: 46px; width: auto; }
.main-nav { margin-left: auto; }
.main-nav ul { display: flex; align-items: center; gap: 1.4rem; list-style: none; margin: 0; padding: 0; }
.main-nav li { display: flex; align-items: center; }
.main-nav a {
  font-family: var(--ff); color: var(--ink); font-weight: 700; font-size: .95rem;
  padding: .4rem 0; position: relative; white-space: nowrap;
}
.main-nav a:hover { color: var(--accent); text-decoration: none; }
.main-nav a[aria-current="page"] { color: var(--olive); font-weight: 600; }
.main-nav a[aria-current="page"]::after {
  content: ""; position: absolute; left: 0; right: 0; bottom: -2px; height: 2px; background: var(--accent);
}
.header-actions { display: flex; align-items: center; gap: 1rem; flex-shrink: 0; }
/* Le téléphone est MOBILE UNIQUEMENT : sur desktop, `tel:` n'ouvre aucun dialer
   chez la plupart des gens. Il réapparaît sous 900px (voir le media query). */
.header-tel { display: none; color: var(--olive); font-weight: 600; white-space: nowrap; align-items: center; gap: .35rem; }
.header-tel:hover { color: var(--accent); text-decoration: none; }
.header-tel svg { width: 16px; height: 16px; flex-shrink: 0; }
.header-actions .btn-primary,
.header-actions .btn-outline { padding: 11px 22px; font-size: 14px; }
/* Le portfolio : secondaire assumé. Contour brun, jamais plein — un seul bouton
   plein dans le header, sinon les deux CTA se neutralisent. */
.btn-portfolio { white-space: nowrap; }
.nav-toggle { display: none; }

/* Sous-menu déroulant « Architecture pro » */
.has-dropdown { position: relative; }
.dropdown-toggle {
  font-family: var(--ff); color: var(--ink); font-weight: 500; font-size: .95rem;
  background: none; border: 0; cursor: pointer; padding: .4rem 0;
  display: inline-flex; align-items: center; gap: .3rem; line-height: inherit;
}
.dropdown-toggle:hover { color: var(--accent); }
.dropdown-toggle .caret { font-size: .7em; transition: transform .2s ease; }
.has-dropdown[data-open="true"] .dropdown-toggle .caret { transform: rotate(180deg); }
.dropdown-menu {
  position: absolute; top: calc(100% + .6rem); left: 0; min-width: 230px;
  background: var(--cream); border: 1px solid var(--line-strong);
  border-radius: var(--r-16); box-shadow: var(--shadow-soft);
  padding: .5rem; margin: 0; list-style: none;
  opacity: 0; visibility: hidden; transform: translateY(-6px);
  transition: opacity .18s ease, transform .18s ease, visibility .18s;
  z-index: 1100;
}
.has-dropdown:hover .dropdown-menu,
.has-dropdown:focus-within .dropdown-menu,
.has-dropdown[data-open="true"] .dropdown-menu {
  opacity: 1; visibility: visible; transform: translateY(0);
}
.dropdown-menu li { display: block; }
.dropdown-menu a {
  display: block; padding: .6rem .8rem; border-radius: var(--r-sm);
  font-size: .92rem; color: var(--ink); font-weight: 500;
}
.dropdown-menu a:hover { background: var(--sand); color: var(--accent); text-decoration: none; }
.dropdown-menu a strong { display: block; color: var(--olive); font-weight: 600; font-size: .82rem; }
/* CTA répété dans le panneau mobile (caché en desktop) */

/* =========================================================================
   HERO
   ========================================================================= */
.hero { position: relative; background: var(--cream); padding: 0; }
.hero-grid {
  display: grid; grid-template-columns: 1.05fr 1fr; align-items: stretch;
  min-height: 560px;
}
/* The text is centred in the first screen, not in the full height of the hero: with
   a tall photo the hero is taller than the screen, and the buttons must not go
   below the fold. A hero shorter than the screen is unchanged. */
.hero-content {
  display: flex; flex-direction: column; justify-content: center;
  align-self: start; min-height: min(100%, calc(100svh - var(--header-h)));
  padding: clamp(2.5rem, 6vw, 5rem) clamp(1.5rem, 5vw, 4rem);
}
.hero-content h1 { color: var(--ink); margin-bottom: .6rem; max-width: 16ch; }
.hero-baseline { font-size: 1.18rem; color: var(--slate); max-width: 50ch; margin-bottom: 1.8rem; line-height: 1.55; }
.hero-baseline em { font-style: italic; }
.hero-ctas { display: flex; flex-wrap: wrap; gap: .9rem; }
.hero-media { position: relative; }
.hero-media img { width: 100%; height: 100%; min-height: 360px; object-fit: cover; }
.hero-microreassure {
  margin-top: 1.6rem; font-size: .92rem; color: var(--stone);
  display: flex; flex-wrap: wrap; gap: .5rem 1.4rem;
}
.hero-microreassure span { display: inline-flex; align-items: center; gap: .4rem; }

/* =========================================================================
   GRILLES
   ========================================================================= */
.grid { display: grid; gap: var(--gap); }
.grid-2 { grid-template-columns: repeat(2, 1fr); }
.grid-3 { grid-template-columns: repeat(3, 1fr); }
.grid-4 { grid-template-columns: repeat(4, 1fr); }

/* =========================================================================
   CARTES (projet / service / générique) — radius 20px
   ========================================================================= */
/* Une carte doit contraster avec le fond de SA section, sinon elle perd son contour et
   cesse d'être une carte. Les sections alternent crème (défaut) et blanc (.section-alt) :
   la carte prend donc l'inverse de son hôte.
   La base était crème, comme `.section-alt .card` — cette seconde règle ne servait donc à
   rien, et toute carte posée sur une section crème (l'archive des réalisations) était
   crème sur crème : sans limite visible. */
.card {
  background: var(--white); border-radius: var(--r-lg);
  overflow: hidden; display: flex; flex-direction: column;
  transition: transform .25s ease, box-shadow .25s ease;
}
.section-alt .card { background: var(--cream); }
.card:hover { transform: translateY(-6px); box-shadow: var(--shadow-deep); }
/* Sous-type en Brouillon : carte informative, non interactive. */
.pillar-card--static:hover { transform: none; box-shadow: none; }

/* Page sous-type (éditoriale, façon article de blog) */
.st-hero { padding-top: 2.5rem; }
.st-hero-head { max-width: 760px; text-align: center; }
.st-hero-head h1 { margin-top: .5rem; }
.st-hero-lead { font-size: 1.2rem; color: var(--slate); margin-top: 1rem; }
.st-hero-cover { margin-top: 2.5rem; border-radius: var(--r-lg); overflow: hidden; box-shadow: var(--shadow-soft); }
.st-hero-cover img { display: block; width: 100%; aspect-ratio: 16 / 9; object-fit: cover; }
.st-essentiel-wrap { padding-top: 2.5rem; }
.st-essentiel { max-width: 820px; margin: 0 auto; background: var(--cream); border-left: 4px solid var(--olive); border-radius: var(--r-lg); padding: 1.5rem 1.75rem; }
.st-essentiel h2 { font-size: 1.05rem; text-transform: uppercase; letter-spacing: .06em; margin: 0 0 .75rem; }
.st-essentiel ul { margin: 0; padding-left: 1.25rem; }
.st-essentiel li { line-height: 1.6; margin-bottom: .35rem; }
[id] { scroll-margin-top: 90px; }
/* Corps éditorial en bandes : un chapitre = un <h2>, fond alterné clair / teinté */
.st-chapter { background: var(--white); padding-block: clamp(2.5rem, 5vw, 4rem); }
.st-chapter--alt { background: var(--sand); }
/* Rail éditorial unique : texte et images par défaut à la même largeur confortable */
.st-chapter .prose { max-width: 820px; }
.st-chapter .prose:first-child > :first-child { margin-top: 0; }
.points-list { list-style: none; margin: 2rem 0 0; padding: 0; display: grid; grid-template-columns: repeat(2, 1fr); gap: 1rem 2rem; }
.points-list li { position: relative; padding-left: 1.75rem; line-height: 1.5; }
.points-list li::before { content: "✓"; position: absolute; left: 0; top: 0; color: var(--olive); font-weight: 800; }
@media (max-width: 640px) { .points-list { grid-template-columns: 1fr; } }
.card-media { aspect-ratio: 4 / 3; overflow: hidden; background: var(--beige); }
.card-media img { width: 100%; height: 100%; object-fit: cover; }
.card-body { padding: 22px 24px 26px; display: flex; flex-direction: column; flex: 1; }

/* Titre de carte projet en Rammetto One.
   Coupure : d'abord aux espaces, puis par césure (`hyphens`), et seulement en
   dernier recours au milieu d'un mot (`break-word`) — « Aménagement de combles »
   se coupait en « Aménagemen / t de combles » avec `anywhere`.
   `text-wrap: balance` répartit les lignes au lieu d'en laisser une très courte. */
/* A card title is an <h3> inside a section, an <h2> on a listing (right under the page's <h1>): same look. */
.card-body h2 { line-height: 1.25; letter-spacing: 0; }
.card-body h2, .card-body h3 {
  font-family: var(--ff-disp); font-weight: 400; font-size: 22px;
  color: var(--ink); line-height: 1.2; margin: 0 0 .5rem;
  overflow-wrap: break-word;
  hyphens: auto;
  text-wrap: balance;
}
/* Vignettes de sous-types : 4 par rangée, donc ~205 px utiles. « Aménagement »
   mesure 208 px à 22 px — d'où une taille légèrement réduite, qui suit la largeur
   de l'écran. La césure ci-dessus reste le filet pour un nom encore plus long. */
.grid-4 .card-body h3 { font-size: clamp(18px, 1.45vw, 21px); }
.card-body p { font-size: 14px; color: var(--stone); flex: 1; margin: 0 0 1rem; line-height: 1.55; }

/* Tag catégorie = pill */
.card-tag {
  display: inline-block; align-self: flex-start; max-width: 100%;
  font-family: var(--ff); font-weight: 600; font-size: 11px;
  letter-spacing: .1em; text-transform: uppercase;
  color: var(--olive); background: var(--sand);
  padding: 5px 12px; border-radius: var(--pill); margin-bottom: 14px;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.pillar-card .card-tag { color: var(--olive); background: var(--sand); }
.card-excerpt {
  color: var(--muted); font-size: .92rem; line-height: 1.5; margin: 0 0 1rem;
  display: -webkit-box; -webkit-line-clamp: 3; line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden;
}

/* Lien « Découvrir → » — la flèche signale déjà le lien, pas besoin du souligné */
.card-link {
  font-family: var(--ff); font-weight: 600; font-size: 14px; color: var(--accent);
  margin-top: auto; display: inline-flex; align-items: center; gap: .35rem;
  text-decoration: none;
}
.card-link::after { content: "→"; transition: transform .15s ease; }
/* The whole card is the click target of its one link: the link is stretched over
   the card, so there is a single <a>, with its own descriptive text as the anchor. */
.card { position: relative; }
.card-link::before { content: ""; position: absolute; inset: 0; }
.card:has(.card-link:focus-visible) { outline: 2px solid var(--accent); outline-offset: 3px; }
.card-link:focus-visible { outline: none; }
.card-link:hover { color: var(--accent-dark); text-decoration: none; }
.card:hover .card-link::after { transform: translateX(4px); }

/* Carte mise en avant — ombre franche d'accent (signature) */
.card-feature { box-shadow: var(--shadow-hard-accent); }
.card-feature:hover { box-shadow: var(--shadow-hard-accent-sm); transform: translate(3px, 3px); }

/* Carte pleine accent (variante DS)
   .card-rasp : ancien nom conservé en alias — la classe peut vivre dans du
   contenu déjà saisi dans WordPress, on ne veut pas casser ces blocs. */
.card-accent, .card-rasp {
  background: var(--accent); color: var(--cream); border-radius: var(--r-lg);
  padding: 32px 30px;
}
.card-accent h3, .card-accent p,
.card-rasp h3, .card-rasp p { color: var(--cream); }

/* Réalisations — vignettes carrées */
.gallery-grid { grid-template-columns: repeat(4, 1fr); }
.thumb {
  position: relative; border-radius: var(--r-lg); overflow: hidden;
  aspect-ratio: 1/1; box-shadow: var(--shadow-subtle);
}
.thumb img { width: 100%; height: 100%; object-fit: cover; transition: transform .35s ease; }
.thumb:hover img { transform: scale(1.05); }
.thumb figcaption {
  position: absolute; left: 0; right: 0; bottom: 0;
  background: linear-gradient(transparent, rgba(64,64,66,.85));
  color: var(--cream); padding: 1.6rem .95rem .85rem; font-size: .85rem;
}
.thumb figcaption strong { display: block; font-family: var(--ff-disp); font-weight: 400; font-size: 1rem; }

/* =========================================================================
   QUI SUIS-JE / split média-texte
   ========================================================================= */
.split { display: grid; grid-template-columns: .8fr 1.1fr; gap: clamp(1.5rem, 4vw, 3.5rem); align-items: center; }
.split.reverse { grid-template-columns: 1.1fr .8fr; }
.split.reverse .split-media { order: 2; }
/* Le portrait est en 2/3 — le format natif des appareils photo. C'est délibéré : une
   photo sortie d'un reflex ou d'un téléphone arrive en 2:3, donc la boîte épouse ce que
   Charlotte fournira naturellement, plutôt que d'exiger un recadrage qu'on oubliera.
   En 4/5, la photo actuelle perdait 16,7 % de sa hauteur — dont le haut du crâne.
   La consigne est répétée dans le champ ACF, côté WordPress. */
.split-media img {
  border-radius: var(--r-lg); aspect-ratio: 2/3; object-fit: cover; width: 100%;
  box-shadow: var(--shadow-deep);
  /* Sous 900 px la grille passe à une colonne : un 2/3 en pleine largeur dépasserait
     l'écran. Le plafond garantit qu'on ne fait jamais défiler une photo sur deux écrans
     avant d'atteindre le texte. */
  max-height: 70vh;
  /* Filet de sécurité si la consigne de ratio n'est pas suivie. Une photo plus allongée
     que la boîte est rognée par `cover`, et `center` répartirait la coupe moitié en haut,
     moitié en bas — donc sur le visage. En cadrant haut, ce qui saute est le bas de
     l'image, jamais la tête. */
  object-position: 50% 20%;
}

/* Deux CTA côte à côte, centrés — et qui passent l'un sous l'autre sur mobile
   plutôt que de déborder ou de se coller. */
.cta-row { display: flex; flex-wrap: wrap; gap: .8rem; justify-content: center; }

/* =========================================================================
   OFFRES — « trois façons de travailler ensemble »
   Des LIGNES pleine largeur, jamais des cartes : la home aligne déjà deux
   grilles de trois (les univers, la méthode). Une troisième aplatirait le
   rythme et le visiteur cesserait de distinguer ce qu'il lit. C'est le
   changement de FORME qui sépare « ce que vous achetez » de « comment ça se
   déroule » — deux idées voisines, faciles à confondre.
   ========================================================================= */
/* La marge basse n'est pas cosmétique : sans elle, la mention de gratuité vient se coller
   au titre de la méthode qui suit, et les deux se lisent comme un seul bloc. */
.offers { margin: 3rem 0 3.5rem; }
.offers-title { text-align: center; margin-bottom: 1.6rem; }
.offer {
  background: var(--white); border-radius: var(--r-lg);
  padding: 1.4rem clamp(1.2rem, 3vw, 2rem);
  /* Le liseré brique porte la lecture verticale : l'œil descend la pile au lieu
     de balayer, ce qui est exactement ce qu'on veut pour une liste d'options. */
  border-left: 5px solid var(--accent);
  margin-bottom: .9rem;
}
.offer h4 { margin: 0 0 .35rem; }
.offer p  { margin: 0; color: var(--slate); }
.offers-note {
  margin: 1.2rem 0 0; text-align: center;
  font-weight: 600; color: var(--olive);
}
/* Phrase de liaison offres → méthode : fait le pont entre « ce que vous prenez »
   et « comment ça se déroule ». Centrée, sobre, juste au-dessus du titre méthode. */
.method-bridge {
  max-width: 58ch; margin: 0 auto 1.6rem; text-align: center;
  font-weight: 600; color: var(--olive); font-size: 1.05rem;
}

/* =========================================================================
   POURQUOI / réassurance, chiffres, process
   ========================================================================= */
.stats { display: flex; flex-wrap: wrap; gap: 1rem 2.8rem; justify-content: center; margin: 0 0 2.5rem; }
.stat { text-align: center; }
.stat b {
  display: block; font-family: var(--ff-disp); font-weight: 400; font-size: 2.2rem;
  color: var(--accent); line-height: 1; margin-bottom: .25rem;
}
.stat span { font-size: .9rem; color: var(--muted); }

/* Process en étapes — badge chiffre en Rammetto (48px, radius 14px, brique) */
.steps { counter-reset: step; display: grid; gap: var(--gap); grid-template-columns: repeat(3, 1fr); }
.step {
  background: var(--white); border-radius: var(--r-lg); padding: 2rem 1.8rem;
  position: relative; box-shadow: var(--shadow-subtle);
}
.section-alt .step, .section-sand .step { background: var(--white); }
.step::before {
  counter-increment: step; content: "0" counter(step);
  display: flex; align-items: center; justify-content: center;
  width: 48px; height: 48px; border-radius: var(--r-14);
  background: var(--accent); color: var(--cream);
  font-family: var(--ff-disp); font-weight: 400; font-size: 22px;
  margin-bottom: 1.1rem;
}
.step h3 { margin-bottom: .4rem; }
.step p { font-size: .96rem; color: var(--muted); margin: 0; line-height: 1.55; }

.feature-list { list-style: none; padding: 0; margin: 0; display: grid; gap: 1rem; }
.feature-list li { display: flex; gap: .8rem; align-items: flex-start; }
.feature-list li::before { content: "✦"; color: var(--accent); font-size: 1.1rem; flex-shrink: 0; line-height: 1.5; }
.feature-list strong { color: var(--ink); }

/* =========================================================================
   PREUVE SOCIALE — logos + témoignages
   ========================================================================= */
.logo-wall { display: flex; flex-wrap: wrap; gap: .7rem .9rem; justify-content: center; margin: 0 0 2.5rem; list-style: none; padding: 0; }
.logo-wall li { list-style: none; }
.logo-chip {
  background: var(--white); border: 1px solid var(--line-strong); border-radius: var(--pill);
  padding: .55rem 1.2rem; font-weight: 600; color: var(--olive); font-size: .92rem;
}
.testimonials { display: grid; gap: var(--gap); grid-template-columns: repeat(2, 1fr); }
blockquote.quote {
  margin: 0; background: var(--white); border-radius: var(--r-lg);
  padding: 2rem; box-shadow: var(--shadow-soft);
}
blockquote.quote p { font-size: 1.08rem; color: var(--ink); line-height: 1.5; }
blockquote.quote cite { font-style: normal; font-weight: 700; color: var(--olive); font-size: .92rem; }
/* Réalisation : le témoignage du client, seul, en colonne de lecture */
blockquote.quote--single { max-width: 760px; margin: 2.5rem auto 0; }
.stars { color: var(--accent); letter-spacing: 2px; }

/* Pastilles d'exemples (sous-types) — même grammaire que les pills de zone. */
.chips { display: flex; flex-wrap: wrap; gap: .4rem; margin: .7rem 0 0; padding: 0; list-style: none; }
.chips li { background: var(--sand); color: var(--olive); border-radius: 999px; padding: .25rem .7rem; font-size: .82rem; font-weight: 600; }
.chips-sm li { font-size: .74rem; padding: .18rem .55rem; }

/* =========================================================================
   ZONE / chips (pills sable)
   ========================================================================= */
.zone-tags { display: flex; flex-wrap: wrap; gap: .6rem; margin-top: 1.2rem; padding: 0; }
.zone-tags li {
  list-style: none; background: var(--sand); color: var(--olive);
  padding: .45rem 1rem; border-radius: var(--pill); font-weight: 600; font-size: .9rem;
}
/* Filtre des réalisations : mêmes pills, cliquables ; la sélection passe en brique */
.filter-chips { display: flex; flex-wrap: wrap; justify-content: center; gap: .6rem; margin-bottom: 1.5rem; }
.filter-chips[hidden], .card[hidden] { display: none; }
.filter-chip {
  border: 0; cursor: pointer; font: inherit; background: var(--sand); color: var(--ink);
  padding: .55rem 1.2rem; border-radius: var(--pill); font-weight: 600; font-size: .95rem;
}
.filter-chip:hover { background: var(--beige); }
.filter-chip[aria-pressed="true"] { background: var(--accent); color: var(--white); }

/* =========================================================================
   LEAD MAGNET / FORMULAIRES (champs DS : fond blanc, bordure terre, focus brique)
   ========================================================================= */
.leadmagnet {
  background: var(--accent); color: var(--cream); border-radius: var(--r-lg);
  padding: clamp(2rem, 5vw, 3.5rem); box-shadow: var(--shadow-hard-olive);
}
.leadmagnet h2 { color: var(--cream); }
.leadmagnet .eyebrow { color: var(--sand); }
.leadmagnet p { color: rgba(244,231,215, .9); max-width: 52ch; }
.lead-form { display: flex; flex-wrap: wrap; gap: .8rem; margin: 1.5rem 0 1rem; }
.lead-form input[type="email"] {
  flex: 1; min-width: 240px; padding: 14px 16px; border-radius: var(--r);
  border: 1.5px solid transparent; font-family: var(--ff); font-size: 15px;
  background: var(--white); color: var(--ink);
}
.lead-form input:focus { outline: none; border-color: var(--ink); box-shadow: 0 0 0 3px rgba(64,64,66,.25); }
.lead-form .btn-primary { background: var(--ink); }
.lead-form .btn-primary:hover { background: #222; }
.consent { display: flex; gap: .6rem; align-items: flex-start; font-size: .85rem; color: rgba(244,231,215,.9); }
/* Sélecteur volontairement plus spécifique que `.contact-form input { width: 100% }`, qui
   est déclaré plus bas et gagnait à égalité de spécificité : la case à cocher était étirée
   sur toute la largeur du formulaire (458 px mesurés sur /contact/), écrasant son propre
   libellé. Un `.consent input` seul ne suffit donc pas. */
.contact-form .consent input[type="checkbox"],
.consent input[type="checkbox"] {
  accent-color: var(--ink); flex: 0 0 18px; width: 18px; height: 18px;
  margin-top: .15rem;
}
.consent a { color: var(--sand); }

.contact-form {
  display: grid; gap: 1.1rem; background: var(--white);
  padding: clamp(1.5rem, 4vw, 2.5rem); border-radius: var(--r-lg);
  box-shadow: var(--shadow-soft);
}
.contact-form label {
  font-family: var(--ff); font-weight: 600; color: var(--ink); font-size: 14px;
  display: block; margin-bottom: .5rem;
}
.contact-form input, .contact-form textarea, .contact-form select {
  width: 100%; padding: 14px 16px; border: 1.5px solid var(--beige); border-radius: var(--r);
  font-family: var(--ff); font-size: 16px; background: var(--white); color: var(--ink); /* 16px: below it, iOS Safari zooms the page on focus */
}
.contact-form textarea { resize: vertical; }
.contact-form input:focus,
.contact-form textarea:focus,
.contact-form select:focus { outline: none; border-color: var(--accent); }
.contact-form input::placeholder, .contact-form textarea::placeholder { color: var(--stone); }

/* =========================================================================
   FAQ — accordéon natif
   ========================================================================= */
.faq { max-width: 820px; margin-inline: auto; }
.faq details {
  background: var(--white); border-radius: var(--r-16);
  margin-bottom: .9rem; box-shadow: var(--shadow-subtle); overflow: hidden;
}
.faq summary {
  list-style: none; cursor: pointer; padding: 1.2rem 1.4rem;
  font-family: var(--ff); font-weight: 600; color: var(--ink); font-size: 1.05rem;
  display: flex; justify-content: space-between; align-items: center; gap: 1rem;
}
.faq summary::-webkit-details-marker { display: none; }
.faq summary::after { content: "+"; font-size: 1.6rem; color: var(--accent); line-height: 1; flex-shrink: 0; transition: transform .2s ease; }
.faq details[open] summary::after { transform: rotate(45deg); }
.faq details > div { padding: 0 1.4rem 1.3rem; color: var(--muted); }
.faq details > div p:last-child { margin-bottom: 0; }

/* =========================================================================
   CTA FINAL + NAP
   ========================================================================= */
.cta-final { background: var(--sand); text-align: center; }
.cta-final h2 { color: var(--ink); }

/* =========================================================================
   CTA FINAL DE LA HOME — deux portes (projet | portfolio)
   ========================================================================= */

/* Sur la home, la FAQ qui précède est déjà en sable : deux sables collés, et la
   dernière section — celle qui convertit — se fondait dans la précédente. On repasse
   au crème pour rétablir la respiration. Le modificateur est SCOPÉ : `.cta-final` sert
   sur six templates, changer sa valeur de base les toucherait tous. */
.cta-final--duo { background: var(--cream); }

.contact-duo {
  display: grid;
  /* Asymétrique, délibérément : les deux portes ne se valent pas. Le projet rapporte,
     le portfolio amorce. Une grille 50/50 dirait au visiteur qu'il a deux choix égaux. */
  grid-template-columns: 1.15fr .85fr;
  gap: 1.5rem; align-items: start;
  margin-top: 2.5rem; text-align: left;
}
.duo-card { border-radius: var(--r-lg); padding: clamp(1.3rem, 3vw, 2.2rem); }
/* La carte principale est blanche et porte l'ombre profonde ; la seconde prend le sable,
   la « surface secondaire » du design system. La hiérarchie tient sans qu'on ait besoin
   d'un second bouton plein. */
.duo-card--main { background: var(--white); box-shadow: var(--shadow-deep); }
.duo-card--alt  { background: var(--sand);  box-shadow: var(--shadow-subtle); }
.duo-card h3 { margin-bottom: .5rem; }
.duo-lead { color: var(--slate); font-size: .98rem; margin-bottom: 1.2rem; }
.duo-note { margin: .9rem 0 0; font-size: .85rem; color: var(--olive); }

/* `.contact-form` EST déjà une carte ailleurs sur le site (fond blanc, ombre, padding).
   Ici elle vit DANS une carte : la laisser telle quelle imbriquerait deux cartes l'une
   dans l'autre. On la remet à plat — c'est la carte qui porte la surface, pas le formulaire. */
.contact-duo .contact-form {
  background: transparent; padding: 0; box-shadow: none; border-radius: 0;
  max-width: none; margin: 0;
}
.contact-duo .contact-form .btn { margin-top: 1rem; }

/* `.consent` est crème — pensé pour le fond sable de l'ancien CTA. Sur ces cartes il serait
   illisible, et c'est un texte de consentement RGPD : il DOIT se lire.
   Le `display:flex` doit être reposé : `.contact-form label` (0,2,0) écrase `.consent`
   (0,1,0), ce qui renvoyait la case à la ligne, centrée au-dessus de son texte. */
.contact-duo .contact-form .consent {
  display: flex; align-items: flex-start; gap: .6rem;
  color: var(--slate); margin-top: 1rem; margin-bottom: 0;
}
.contact-duo .contact-form .consent a { color: var(--accent); text-decoration: underline; }
.contact-duo .contact-form .consent span { flex: 1; }

/* La mention d'information RGPD. Elle remplace la case à cocher obligatoire : informer est
   une obligation, faire cocher n'en est pas une. Discrète mais lisible — un texte légal
   qu'on ne peut pas lire ne remplit pas son office. */
.form-legal {
  margin: .8rem 0 0; font-size: .8rem; line-height: 1.5; color: var(--stone);
}
.form-legal a { color: var(--olive); text-decoration: underline; }
.form-legal a:hover { color: var(--accent); }
/* Sur le fond sombre du CTA des autres pages, le gris « stone » ne passerait pas. */
.cta-final:not(.cta-final--duo) .form-legal { color: rgba(244,231,215,.85); }
.cta-final:not(.cta-final--duo) .form-legal a { color: var(--sand); }

@media (max-width: 900px) {
  /* Empilées, les deux portes gardent leur ordre : le projet d'abord. */
  .contact-duo { grid-template-columns: 1fr; }
}
.cta-final .nap-inline {
  margin-top: 1.4rem; font-size: 1.05rem; color: var(--olive);
  display: flex; flex-wrap: wrap; gap: .6rem 1.5rem; justify-content: center;
}
.cta-final .nap-inline a { color: var(--olive); font-weight: 600; }
.cta-final .nap-inline a:hover { color: var(--accent); }

/* =========================================================================
   FOOTER — fond chaud foncé, texte crème, accent brique
   ========================================================================= */
.site-footer {
  background: var(--olive); color: var(--beige);
  padding-block: clamp(3rem, 6vw, 4.5rem) 1.5rem;
  border-top: 5px solid var(--accent);
  border-top-left-radius: var(--r-lg); border-top-right-radius: var(--r-lg);
}
/* Trois colonnes, plus quatre : la colonne « Zones d'intervention » a été retirée — c'étaient
   six liens vers des pages ville qui n'existent pas. La marque garde plus de place. */
.footer-grid { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 2.5rem 3rem; }
.footer-brand { flex: 0 1 360px; }
.footer-grid > nav { flex: 0 1 auto; }
.site-footer h2 {
  line-height: 1.25; letter-spacing: 0;
  font-family: var(--ff); color: var(--cream); font-size: .82rem; font-weight: 600;
  text-transform: uppercase; letter-spacing: .12em; margin-bottom: 1.1rem;
}
.site-footer img.footer-logo { height: 48px; width: auto; border-radius: 6px; margin-bottom: 1rem; }
.site-footer ul { list-style: none; padding: 0; margin: 0; display: grid; gap: .55rem; }
.site-footer a { color: var(--beige); }
.site-footer a:hover { color: var(--accent); text-decoration: none; }

/* Bloc marque + NAP */
.footer-brand-desc { font-size: .92rem; color: rgba(244,231,215,.85); max-width: 32ch; margin: 0 0 1.1rem; }
.footer-nap p { margin: 0 0 .5rem; display: flex; align-items: center; gap: .45rem; }
.footer-nap a { font-weight: 600; color: var(--cream); }
.footer-nap a:hover { color: var(--accent); }
.footer-nap svg { width: 15px; height: 15px; flex-shrink: 0; opacity: .9; }
.footer-zone { font-size: .88rem; color: rgba(244,231,215,.85); margin-top: .8rem; }
.footer-zone strong { color: var(--cream); }

/* Maillage communes */
.footer-communes { display: flex; flex-wrap: wrap; gap: .4rem; padding: 0; margin: .3rem 0 0; list-style: none; }
.footer-communes li { margin: 0; }
.footer-communes a {
  display: inline-block; background: rgba(244,231,215,.1); color: var(--beige);
  padding: .3rem .7rem; border-radius: var(--pill); font-size: .82rem; font-weight: 500;
}
.footer-communes a:hover { background: var(--accent); color: var(--cream); }

/* Réseaux — icône ronde DS */
.footer-social { display: flex; gap: .7rem; margin-top: 1rem; }
.footer-social a {
  display: inline-flex; align-items: center; justify-content: center;
  width: 40px; height: 40px; border-radius: 50%; background: var(--ink); color: var(--cream);
  transition: background .2s ease, transform .2s ease;
}
.footer-social a:hover { background: var(--accent); color: var(--cream); transform: translateY(-2px); }
.footer-social svg { width: 19px; height: 19px; }

.footer-bottom {
  border-top: 1px solid rgba(244,231,215,.2); margin-top: 2.8rem; padding-top: 1.4rem;
  display: flex; flex-wrap: wrap; gap: .5rem 1.5rem; justify-content: space-between;
  font-size: .85rem; color: rgba(244,231,215,.7);
}
.footer-bottom a { color: rgba(244,231,215,.8); }
.footer-bottom a:hover { color: var(--accent); }

/* =========================================================================
   BREADCRUMB
   ========================================================================= */
.breadcrumb { background: transparent; }
.breadcrumb ol { list-style: none; display: flex; flex-wrap: wrap; gap: .4rem; padding: .9rem 0; margin: 0; font-size: .88rem; }
.breadcrumb li { display: flex; align-items: center; gap: .4rem; color: var(--muted); }
.breadcrumb li + li::before { content: "›"; color: var(--olive); }
.breadcrumb a { color: var(--olive); }
.breadcrumb [aria-current="page"] { color: var(--muted); }

/* =========================================================================
   PAGE PROJET — fiche méta + avant/après + galerie
   ========================================================================= */
.project-meta {
  list-style: none; padding: 1.8rem; margin: 0; background: var(--white);
  border-radius: var(--r-lg); box-shadow: var(--shadow-soft);
  display: grid; gap: .8rem;
}
.project-meta div { display: flex; justify-content: space-between; gap: 1rem; border-bottom: 1px dashed var(--beige); padding-bottom: .7rem; }
.project-meta div:last-child { border-bottom: 0; padding-bottom: 0; }
.project-meta dt { font-weight: 600; color: var(--olive); }
.project-meta dd { margin: 0; text-align: right; color: var(--ink); }

/* Réalisation — hero 2 colonnes (texte gauche / image droite) + fiche technique */
.realisation-hero .hero-content h1 { max-width: none; }
.hero-credit {
  position: absolute; right: .8rem; bottom: .8rem; margin: 0;
  font-size: .76rem; color: rgba(255,255,255,.9);
  background: rgba(64,64,66,.45); padding: .25rem .7rem; border-radius: var(--pill);
}
.id-card { background: var(--white); border-radius: var(--r-lg); box-shadow: var(--shadow-soft); padding: clamp(1.6rem, 3vw, 2.4rem); margin-top: 2.2rem; }
.id-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 1.2rem 2.5rem; margin: 0; }
.id-grid div { border-bottom: 1px dashed var(--beige); padding-bottom: 1rem; }
.id-grid dt { font-size: .72rem; text-transform: uppercase; letter-spacing: .06em; color: var(--olive); font-weight: 700; margin-bottom: .3rem; }
.id-grid dd { margin: 0; color: var(--ink); font-weight: 500; line-height: 1.4; }
/* Galerie réalisation : une grande image + slider de miniatures */
.gallery-main { margin: 0; text-align: center; }
/* Ratio réel de l'image sélectionnée : pas de recadrage, largeur ≤ conteneur, hauteur plafonnée. */
.gallery-main img { display: block; width: auto; max-width: 100%; height: auto; max-height: 74vh; margin: 0 auto; background: var(--beige); border-radius: var(--r-lg); box-shadow: var(--shadow-soft); }
.gallery-caption { font-size: .9rem; color: var(--muted); margin-top: .7rem; text-align: center; }
.gallery-caption:empty { display: none; }
.gallery-thumbs { display: flex; gap: .75rem; overflow-x: auto; scroll-snap-type: x mandatory; padding: 1rem .25rem; scrollbar-width: thin; scrollbar-color: var(--beige) transparent; }
.gallery-thumbs::-webkit-scrollbar { height: 7px; }
.gallery-thumbs::-webkit-scrollbar-thumb { background: var(--beige); border-radius: var(--pill); }
.gallery-thumb { flex: 0 0 130px; scroll-snap-align: start; padding: 0; border: none; background: none; cursor: pointer; border-radius: var(--r-14); overflow: hidden; opacity: .6; outline: 2px solid transparent; outline-offset: 2px; transition: opacity .2s ease, outline-color .2s ease; }
.gallery-thumb img { display: block; width: 100%; height: 88px; object-fit: cover; }
.gallery-thumb:hover { opacity: 1; }
.gallery-thumb.is-active { opacity: 1; outline-color: var(--accent); }

.beforeafter { display: grid; grid-template-columns: 1fr 1fr; gap: 1.2rem; }
.beforeafter figure { margin: 0; }
.beforeafter .ba-label {
  display: inline-block; background: var(--olive); color: var(--cream);
  font-size: .75rem; font-weight: 600; text-transform: uppercase; letter-spacing: .1em;
  padding: 6px 14px; border-radius: var(--pill); margin-bottom: .6rem;
}
.beforeafter .ba-label.after { background: var(--accent); }
.beforeafter img { border-radius: var(--r-lg); aspect-ratio: 4/3; object-fit: cover; width: 100%; box-shadow: var(--shadow-subtle); }
.beforeafter figcaption { font-size: .9rem; color: var(--muted); margin-top: .6rem; }

.project-gallery { grid-template-columns: repeat(3, 1fr); }
.project-gallery figure { margin: 0; }
.project-gallery img { border-radius: var(--r-16); aspect-ratio: 4/3; object-fit: cover; width: 100%; box-shadow: var(--shadow-subtle); }
.project-gallery figcaption { font-size: .85rem; color: var(--muted); margin-top: .5rem; }

.prose { max-width: 72ch; }
.prose.center { margin-inline: auto; }
/* Images ajoutées par la cliente dans le corps (bloc Image de l'éditeur) */
.prose img { max-width: 100%; height: auto; }
.prose figure { margin: 2rem 0; }
.prose figure img,
.prose > img { display: block; border-radius: var(--r-lg); }
.prose figcaption,
.prose .wp-element-caption { font-size: .9rem; color: var(--muted); margin-top: .6rem; text-align: center; }
.prose .aligncenter { margin-inline: auto; text-align: center; }
.prose .alignleft { float: left; margin: .4rem 1.5rem 1rem 0; max-width: 45%; }
.prose .alignright { float: right; margin: .4rem 0 1rem 1.5rem; max-width: 45%; }
/* Largeurs étendues : l'image déborde le rail de texte, recentrée sur la bande.
   Rail texte ~820 · « Large » ~1040 · « Pleine » = largeur du conteneur (~1180). */
.prose .alignwide { width: min(1040px, 92vw); max-width: none; margin-left: 50%; transform: translateX(-50%); }
.prose .alignfull  { width: min(1180px, 94vw); max-width: none; margin-left: 50%; transform: translateX(-50%); }
.prose .alignwide img,
.prose .alignfull img { width: 100%; }
/* Bouton CTA inséré dans le corps via le shortcode [cta] */
.cta-inline { margin: 2.5rem 0; text-align: center; }

/* Slider de vignettes (« Aller plus loin ») — scroll-snap + flèches */
.card-slider { position: relative; margin-top: 2.5rem; }
.card-slider-track {
  display: flex; gap: var(--gap);
  overflow-x: auto; scroll-snap-type: x mandatory; scroll-behavior: smooth;
  /* marge verticale/latérale pour que l'ombre au survol ne soit pas rognée par l'overflow */
  padding: .75rem .5rem 1.75rem; -webkit-overflow-scrolling: touch;
  scrollbar-width: thin; scrollbar-color: var(--beige) transparent;
}
.card-slider-track > .card { flex: 0 0 clamp(258px, 31%, 340px); scroll-snap-align: start; }
/* Dans le slider : pas de soulèvement (rogné par l'overflow) — juste une ombre douce. */
.card-slider .card:hover { transform: none; box-shadow: var(--shadow-soft); }
.card-slider-track::-webkit-scrollbar { height: 8px; }
.card-slider-track::-webkit-scrollbar-thumb { background: var(--beige); border-radius: var(--pill); }
.card-slider-nav {
  position: absolute; top: 38%; transform: translateY(-50%);
  width: 44px; height: 44px; border-radius: var(--pill); border: none; cursor: pointer;
  background: var(--accent); color: var(--cream); font-size: 1.5rem; line-height: 1;
  display: flex; align-items: center; justify-content: center;
  box-shadow: var(--shadow-soft); transition: background .2s ease, transform .2s ease;
}
.card-slider-nav:hover { background: var(--accent-dark); }
.card-slider-nav[disabled] { opacity: .35; cursor: default; }
.card-slider-prev { left: -14px; }
.card-slider-next { right: -14px; }
@media (max-width: 900px) { .card-slider-nav { display: none; } }

/* =========================================================================
   FORMULAIRES — retour après soumission
   Le message est la seule preuve, pour le visiteur, que sa demande est partie.
   ========================================================================= */
.form-feedback {
  padding: 14px 18px; border-radius: var(--r-14); margin-bottom: 1.2rem;
  font-weight: 600; font-size: .95rem; border: 1.5px solid transparent;
}
.form-feedback.is-ok    { background: #E8F0E6; border-color: #1F5C3A; color: #17482D; }
.form-feedback.is-error { background: #F7E4E2; border-color: #8C1D18; color: #7A1913; }

/* Confirmation qui remplace un formulaire envoyé (mokcha_lead_success). Une carte, comme
   le formulaire qu'elle remplace ; à plat dans le bloc deux portes, où la carte existe déjà. */
.lead-sent {
  background: var(--white); padding: clamp(1.5rem, 4vw, 2.5rem); border-radius: var(--r-lg);
  box-shadow: var(--shadow-soft); border-left: 6px solid #1F5C3A; text-align: left; color: var(--ink);
}
.lead-sent-title { font-family: var(--ff); font-weight: 700; font-size: 1.3rem; color: #17482D; margin: 0 0 .6rem; }
.lead-sent-title::before { content: "✓"; margin-right: .5rem; }
.lead-sent p { margin: 0 0 .9rem; }
.lead-sent-actions { display: flex; flex-wrap: wrap; align-items: center; gap: .9rem 1.4rem; margin: 1.4rem 0 0 !important; }
.lead-sent-actions a:not(.btn) { color: var(--accent); text-decoration: underline; font-weight: 600; }
.contact-duo .lead-sent { background: transparent; padding: 0 0 0 1.1rem; box-shadow: none; border-radius: 0; }

/* Liste à puces cochées (page portfolio) */
.check-list { list-style: none; margin: 0; padding: 0; display: grid; gap: .7rem; }
.check-list li { position: relative; padding-left: 1.9rem; }
.check-list li::before {
  content: "✓"; position: absolute; left: 0; top: -1px;
  color: var(--accent); font-weight: 800;
}

/* Liens DANS le contenu éditorial : soulignés, et seulement ici.
   C'est le seul contexte où rien d'autre que la couleur ne distingue le lien
   du texte qui l'entoure — or brique et texte courant ne contrastent qu'à
   1,3:1, très en dessous des 3:1 exigés quand la couleur est le seul indice.
   Le souligné est donc ce qui rend le lien cliquable à l'œil. Ailleurs (menu,
   boutons, cartes, footer), la position et la forme font ce travail.
   Un lien qui est DÉJÀ un composant (bouton, lien de carte) en est exclu, même
   à l'intérieur d'un .prose : il porte sa propre forme, le souligné n'y ferait
   que du bruit. */
.prose a:not([class*="btn"]):not(.card-link),
.faq details div a:not([class*="btn"]):not(.card-link) {
  text-decoration: underline; text-underline-offset: 3px;
}

/* =========================================================================
   CMP cookies
   ========================================================================= */
.cmp {
  position: fixed; left: 1rem; right: 1rem; bottom: 1rem; z-index: 1500;
  background: var(--ink); color: var(--cream); border-radius: var(--r-16);
  padding: 1.2rem 1.4rem; box-shadow: var(--shadow-deep);
  display: flex; flex-wrap: wrap; gap: 1rem; align-items: center; justify-content: space-between;
  max-width: var(--maxw); margin-inline: auto;
}
.cmp p { margin: 0; font-size: .9rem; max-width: 60ch; color: var(--beige-2); }
.cmp a { color: var(--sand); }
.cmp-actions { display: flex; gap: .6rem; flex-shrink: 0; }
.cmp .btn { padding: 10px 20px; font-size: 13px; border-radius: var(--r-sm); }
/* « Refuser » et « Accepter » ont le même poids : refuser doit être aussi simple qu'accepter. */
.cmp-choice { background: transparent; color: var(--cream); border: 1.5px solid rgba(244,231,215,.55); }
.cmp-choice:hover { background: rgba(244,231,215,.14); }
/* Lien « Gérer les cookies » du footer : un bouton (il ouvre le bandeau), au rendu d'un lien. */
.footer-link { background: none; border: 0; padding: 0; font: inherit; color: inherit; cursor: pointer; text-decoration: underline; }
/* Carte Google Maps : affichée au clic seulement (aucun appel à Google avant). */
.map-consent {
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: .9rem;
  min-height: 360px; height: 100%; padding: 2rem; text-align: center;
  background: var(--sand); border-radius: var(--r-lg); color: var(--ink);
}
.map-consent p { margin: 0; max-width: 34ch; font-size: .95rem; }
.map-consent .map-consent-title { font-weight: 700; font-size: 1.05rem; }
.cmp[hidden] { display: none; }

/* =========================================================================
   BARRE CTA MOBILE — fixe en bas d'écran (< 820px)
   Un CTA enfoui dans un menu burger n'est vu que par ceux qui l'ouvrent, donc
   par ceux qui cherchaient déjà. Ici il est présent en permanence, sous le pouce.
   ========================================================================= */
.mobile-cta { display: none; }

/* =========================================================================
   RESPONSIVE — mobile-first ajustements
   ========================================================================= */
@media (max-width: 1000px) {
  .grid-4, .gallery-grid { grid-template-columns: repeat(2, 1fr); }
  .hero-grid { grid-template-columns: 1fr; }
  .hero-content { align-self: stretch; min-height: 0; } /* one column: the first-screen rule does not apply */
  .hero-media { order: -1; min-height: 280px; }
  .hero-media img { min-height: 280px; }
  .footer-grid { justify-content: flex-start; gap: 2.5rem; }
  .footer-brand { flex-basis: 100%; }
  .footer-grid > nav { flex: 1 1 40%; }
}

@media (max-width: 820px) {
  .main-nav {
    position: fixed; inset: var(--header-h) 0 auto 0;
    background: var(--cream); border-bottom: 1px solid var(--line-strong);
    margin: 0; padding: 1rem; display: none; box-shadow: var(--shadow-soft);
  }
  .main-nav.open { display: block; }
  .main-nav ul { flex-direction: column; gap: .2rem; }
  .main-nav a { display: block; padding: .8rem .4rem; border-bottom: 1px solid var(--line); }
  /* Dropdown en mobile : déplié en accordéon, sans position absolue */
  .has-dropdown { position: static; }
  .dropdown-toggle { width: 100%; justify-content: space-between; padding: .8rem .4rem; border-bottom: 1px solid var(--line); }
  .dropdown-menu {
    position: static; opacity: 1; visibility: hidden; transform: none;
    box-shadow: none; border: 0; background: transparent; padding: 0 0 0 .8rem;
    min-width: 0; height: 0; overflow: hidden;
  }
  .has-dropdown[data-open="true"] .dropdown-menu { visibility: visible; height: auto; }
  .dropdown-menu a { border-bottom: 1px solid var(--line); border-radius: 0; }
  .nav-toggle {
    display: inline-flex; flex-direction: column; gap: 5px; justify-content: center;
    margin-left: auto; background: none; border: 0; cursor: pointer; padding: .5rem;
  }
  .nav-toggle span { width: 26px; height: 2px; background: var(--olive); border-radius: 2px; transition: .2s; }
  /* Sur mobile, le header ne garde que l'appel (une icône) — là, `tel:` déclenche
     vraiment un appel. Les deux CTA, eux, descendent dans la barre fixe du bas. */
  .header-tel { display: inline-flex; }
  .header-actions .btn-primary,
  .header-actions .btn-portfolio { display: none; }

  /* --- Barre CTA fixe --- */
  .mobile-cta {
    display: flex; gap: .6rem;
    position: fixed; left: 0; right: 0; bottom: 0; z-index: 1400;
    padding: .7rem .9rem;
    /* iPhone : `env()` évite que la barre passe sous l'indicateur d'accueil. */
    padding-bottom: calc(.7rem + env(safe-area-inset-bottom, 0px));
    background: var(--cream);
    border-top: 1px solid var(--line-strong);
    box-shadow: 0 -6px 20px rgba(107,57,46, .14);
  }
  .mobile-cta .btn {
    flex: 1; padding: 13px 10px; font-size: 14px; text-align: center;
    white-space: nowrap;
  }
  /* La barre recouvrirait la fin de page : on lui réserve sa hauteur. */
  body { padding-bottom: var(--cta-bar-h); }
  /* Et le bandeau cookies remonte au-dessus d'elle, au lieu de s'asseoir dessus. */
  .cmp { bottom: calc(var(--cta-bar-h) + .6rem); }
  .grid-3, .grid-2, .steps, .testimonials, .split, .split.reverse,
  .beforeafter, .project-gallery { grid-template-columns: 1fr; }
  .footer-grid > nav { flex-basis: 100%; }
  .split.reverse .split-media { order: 0; }
  .gallery-grid { grid-template-columns: repeat(2, 1fr); }
}

@media (max-width: 520px) {
  .gallery-grid { grid-template-columns: 1fr 1fr; }
  /* Vignettes de sous-types : une par ligne, sinon le titre se coupe. */
  .grid-4 { grid-template-columns: 1fr; }
  .hero-ctas .btn, .lead-form .btn { width: 100%; justify-content: center; }
  .lead-form input[type="email"] { min-width: 100%; }
  .cmp { flex-direction: column; align-items: flex-start; }
  .cmp-actions { width: 100%; }
  .cmp-actions .btn { flex: 1; justify-content: center; }
}

/* ---------- Reduced motion ---------- */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation: none !important; transition: none !important; scroll-behavior: auto !important; }
}

/* ---- Formulaire de contact (home) ---- */
.contact-form{max-width:700px;margin:1.8rem auto .4rem;text-align:left}
.contact-form .cf-row{display:grid;grid-template-columns:1fr 1fr;gap:.9rem}
.contact-form input,.contact-form select,.contact-form textarea{width:100%;padding:.85rem 1rem;border:1.5px solid #E5D2A8;border-radius:14px;background:#fff;font:inherit;color:#404042}
.contact-form .cf-row>*{margin-top:.9rem}
.contact-form textarea{margin-top:.9rem;resize:vertical}
.contact-form :is(input,select,textarea):focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px rgba(107,57,46,.18)}
.contact-form select{color:#404042}
.contact-form .cf-foot{display:flex;align-items:center;justify-content:space-between;gap:1rem;margin-top:1rem;flex-wrap:wrap}
.contact-form .consent{margin:0}
@media(max-width:600px){.contact-form .cf-row{grid-template-columns:1fr}}

/* ---- Pourquoi faire appel ---- */
.whyarchi-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:1.4rem;margin-top:2.5rem}
.whyarchi-card{background:#fff;border:1px solid #E5D2A8;border-radius:18px;padding:1.5rem}
.whyarchi-card h3{font-size:1.08rem;margin:0 0 .45rem;color:#404042}
.whyarchi-card p{margin:0;color:#58585A;font-size:.95rem;line-height:1.5}
@media(max-width:820px){.whyarchi-grid{grid-template-columns:1fr 1fr}}

/* === Page contact : cartes alignées + carrousel témoignages === */
.contact-form{height:100%;margin:0;display:flex;flex-direction:column}
.contact-form > div,.contact-form .cf-row{flex:0 0 auto}
.leadmagnet{height:100%;margin:0}
.leadmagnet a:not(.btn){color:#fff;text-decoration:underline;text-underline-offset:2px}
.t-carousel{position:relative}
.t-carousel .t-slide{display:none}
.t-carousel .t-slide.is-active{display:block;animation:t-fade .5s ease}
@keyframes t-fade{from{opacity:0}to{opacity:1}}
.t-controls{display:flex;align-items:center;justify-content:center;gap:.8rem;margin-top:.9rem}
.t-prev,.t-next{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;border-radius:50%;border:1px solid var(--line-strong);background:var(--white);color:var(--ink);font-size:1.3rem;line-height:1;cursor:pointer;padding:0;transition:background .2s,color .2s,transform .15s}
.t-prev:hover,.t-next:hover{background:var(--accent);color:#fff;border-color:var(--accent)}
.t-prev:active,.t-next:active{transform:scale(.94)}
.t-dots{display:flex;gap:.45rem;justify-content:center;margin-top:0}
.t-dots button{width:9px;height:9px;padding:0;border:0;border-radius:50%;background:rgba(0,0,0,.18);cursor:pointer;transition:background .2s}
.t-dots button.is-active{background:var(--ink)}
.leadmagnet .t-dots button{background:rgba(255,255,255,.45)}
.leadmagnet .t-dots button.is-active{background:#fff}
