/* ==========================================================================
   WR Couverture-Wiss — Feuille de styles V1
   Valeurs reprises de "conception-ui-ux-wr.md" (sections 3, 4, 5, 21, 22, 23).
   Aucune valeur de design en dur hors de ce fichier.
   Theme clair uniquement (decision UI n. 12 du 17/08/2026).
   ========================================================================== */

/* --------------------------------------------------------------------------
   1. TOKENS DE DESIGN
   -------------------------------------------------------------------------- */
:root {
  /* Couleurs de marque et d'action */
  --wr-orange: #E2711D;
  --wr-orange-action: #C25510;
  --wr-orange-action-hover: #A8480C;
  --wr-orange-action-active: #8F3D0A;
  --wr-orange-light: #F08A3C;
  --wr-orange-tint: #FDF1E7;

  /* Neutres */
  --ink-900: #0F1E2E;
  --ink-800: #16283C;
  --ink-700: #24384F;
  --text-900: #1E2A38;
  --text-600: #5A6675;
  --text-invert: #FFFFFF;
  --text-invert-soft: #C7D0DA;
  --surface-0: #FFFFFF;
  --surface-1: #F5F7FA;
  --border-1: #E2E8F0;
  --border-2: #CBD5E1;

  /* Semantiques */
  --urgency: #D32F2F;
  --urgency-hover: #B71C1C;
  --success: #1E7A46;
  --success-bg: #EAF5EE;
  --error: #C62828;
  --error-bg: #FDECEC;

  /* Typographie */
  --font-title: "Barlow", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  --font-body: "Inter", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;

  /* Espacements (base 4px) */
  --sp-4: 4px;   --sp-8: 8px;   --sp-12: 12px; --sp-16: 16px; --sp-20: 20px;
  --sp-24: 24px; --sp-32: 32px; --sp-40: 40px; --sp-48: 48px; --sp-64: 64px;
  --sp-80: 80px; --sp-96: 96px; --sp-128: 128px;

  /* Rythme de section */
  --section-y: var(--sp-48);
  --section-y-dense: var(--sp-32);
  --title-gap: var(--sp-24);
  --grid-gap: var(--sp-16);
  --gutter: var(--sp-20);

  /* Rayons */
  --r-btn: 6px;
  --r-card: 8px;
  --r-badge: 4px;
  --r-pill: 999px;

  /* Ombres */
  --shadow-1: 0 1px 2px rgba(15,30,46,.06), 0 1px 3px rgba(15,30,46,.08);
  --shadow-2: 0 4px 12px rgba(15,30,46,.10);
  --shadow-3: 0 8px 24px rgba(15,30,46,.14);
  --shadow-header: 0 2px 8px rgba(15,30,46,.10);

  /* Mouvement */
  --ease: cubic-bezier(0.2, 0, 0, 1);
  --t-color: 150ms;
  --t-move: 200ms;
  --t-panel: 250ms;

  /* Conteneurs */
  --container: 1200px;
  --container-narrow: 760px;
  --container-mid: 900px;

  /* Hauteurs de barres */
  --topbar-h: 36px;
  --header-h: 60px;
  --actionbar-h: 68px;
}

@media (min-width: 768px) {
  :root {
    --section-y: var(--sp-64);
    --section-y-dense: var(--sp-40);
    --title-gap: var(--sp-32);
    --grid-gap: var(--sp-20);
    --gutter: var(--sp-24);
  }
}

@media (min-width: 1100px) {
  :root {
    --section-y: var(--sp-96);
    --section-y-dense: var(--sp-48);
    --title-gap: var(--sp-40);
    --grid-gap: var(--sp-24);
    --gutter: var(--sp-32);
    --header-h: 88px;
  }
}

/* --------------------------------------------------------------------------
   2. RESET ET BASES
   -------------------------------------------------------------------------- */
*, *::before, *::after { box-sizing: border-box; }

html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; }

/* P1-03 — Ancres et en-tete collant.
   Sans cela, une ancre depose le visiteur au pixel 0 : le titre vise passe
   sous le header collant (60px mobile / 88px desktop) et le visiteur croit
   que le lien l'a mal envoye.
   76px  = header mobile 60 + 16 de respiration.
   104px = header desktop 88 + 16 de respiration. */
html { scroll-padding-top: 76px; }
h2[id], h3[id], section[id], article[id] { scroll-margin-top: 76px; }

@media (min-width: 1100px) {
  html { scroll-padding-top: 104px; }
  h2[id], h3[id], section[id], article[id] { scroll-margin-top: 104px; }
}

/* P1-04 — `hidden` doit toujours l'emporter.
   `.project-card { display: flex }` est une regle d'auteur : elle battait la
   regle `[hidden] { display: none }` de la feuille par defaut du navigateur.
   Consequence : les filtres de la page Realisations ne masquaient rien. */
[hidden] { display: none !important; }

body {
  margin: 0;
  font-family: var(--font-body);
  font-size: 1rem;
  line-height: 1.6;
  color: var(--text-900);
  background: var(--surface-0);
  overflow-x: hidden;
  /* Espace reserve a la barre d'action fixe mobile */
  padding-bottom: calc(84px + env(safe-area-inset-bottom, 0px));
}

@media (min-width: 1100px) {
  body { padding-bottom: 0; }
}

img, picture, svg, video { max-width: 100%; display: block; }
img { height: auto; }

h1, h2, h3, h4 {
  font-family: var(--font-title);
  color: var(--text-900);
  margin: 0 0 var(--sp-16);
  line-height: 1.2;
  font-weight: 700;
  text-wrap: balance;
}

h1 { font-size: 1.75rem; line-height: 1.15; }
h2 { font-size: 1.5rem; }
h3 { font-size: 1.25rem; font-weight: 600; line-height: 1.3; }

@media (min-width: 1024px) {
  h1 { font-size: 2.5rem; letter-spacing: -0.01em; }
  h2 { font-size: 2rem; letter-spacing: -0.01em; }
  h3 { font-size: 1.375rem; }
}

p { margin: 0 0 var(--sp-16); max-width: 68ch; }
p:last-child { margin-bottom: 0; }

a { color: var(--wr-orange-action); }

a:not([class]) {
  text-underline-offset: 2px;
  text-decoration-thickness: 1px;
}
a:not([class]):hover {
  color: var(--wr-orange-action-hover);
  text-decoration-thickness: 2px;
}

ul, ol { margin: 0 0 var(--sp-16); padding-left: 1.25em; }
li { margin-bottom: var(--sp-8); }

:focus-visible {
  outline: 2px solid var(--text-900);
  outline-offset: 2px;
  box-shadow: 0 0 0 3px rgba(226,113,29,.35);
  border-radius: 2px;
}
.on-dark :focus-visible,
.hero :focus-visible,
.site-footer :focus-visible,
.topbar :focus-visible {
  outline-color: #FFFFFF;
}

/* Lien d'evitement */
.skip-link {
  position: absolute;
  left: var(--sp-8);
  top: -100px;
  z-index: 200;
  background: var(--surface-0);
  color: var(--text-900);
  padding: var(--sp-12) var(--sp-16);
  border-radius: var(--r-btn);
  font-weight: 600;
  box-shadow: var(--shadow-3);
  transition: top var(--t-move) var(--ease);
}
.skip-link:focus { top: var(--sp-8); }

/* --------------------------------------------------------------------------
   3. UTILITAIRES DE MISE EN PAGE
   -------------------------------------------------------------------------- */
.container {
  width: 100%;
  max-width: var(--container);
  margin-inline: auto;
  padding-inline: var(--gutter);
}
.container--narrow { max-width: calc(var(--container-narrow) + 2 * var(--gutter)); }
.container--mid { max-width: calc(var(--container-mid) + 2 * var(--gutter)); }

.section { padding-block: var(--section-y); }
.section--dense { padding-block: var(--section-y-dense); }
.section--alt { background: var(--surface-1); }
.section--ink { background: var(--ink-900); color: var(--text-invert); }
.section--ink h2, .section--ink h3 { color: var(--text-invert); }

.section__head { margin-bottom: var(--title-gap); }
.section__head p { color: var(--text-600); }

.overline {
  display: block;
  font-family: var(--font-body);
  font-size: 0.8125rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--wr-orange-action);
  margin-bottom: var(--sp-8);
}
.section--ink .overline { color: var(--wr-orange-light); }

/* Filet d'accent : seul ornement graphique du site */
.rule::after {
  content: "";
  display: block;
  width: 56px;
  height: 3px;
  background: var(--wr-orange);
  margin-top: var(--sp-12);
}

.lead {
  font-size: 1.0625rem;
  line-height: 1.55;
  color: var(--text-600);
}
@media (min-width: 1024px) { .lead { font-size: 1.25rem; } }

.small { font-size: 0.875rem; line-height: 1.5; }
.muted { color: var(--text-600); }
.text-center { text-align: center; }

.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;
}

.prose p, .prose li { max-width: 68ch; }
.prose h2 { margin-top: var(--sp-40); }
.prose h2:first-child { margin-top: 0; }
.prose h3 { margin-top: var(--sp-24); }

.stack > * + * { margin-top: var(--sp-16); }

/* --------------------------------------------------------------------------
   4. BOUTONS
   -------------------------------------------------------------------------- */
.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
  min-height: 52px;
  padding: 0 24px;
  font-family: var(--font-body);
  font-size: 1rem;
  font-weight: 600;
  line-height: 1.2;
  text-align: center;
  text-decoration: none;
  border: 0;
  border-radius: var(--r-btn);
  cursor: pointer;
  transition: background-color var(--t-color) var(--ease),
              color var(--t-color) var(--ease),
              border-color var(--t-color) var(--ease),
              transform var(--t-move) var(--ease);
}
@media (min-width: 768px) { .btn { min-height: 56px; } }

.btn .icon { flex: none; width: 20px; height: 20px; }
.btn:active { transform: translateY(1px); }

.btn--primary { background: var(--wr-orange-action); color: #FFFFFF; }
.btn--primary:hover { background: var(--wr-orange-action-hover); color: #FFFFFF; }
.btn--primary:active { background: var(--wr-orange-action-active); }

.btn--secondary {
  background: transparent;
  color: var(--text-900);
  border: 2px solid var(--text-900);
}
.btn--secondary:hover { background: var(--surface-1); color: var(--text-900); }

.btn--urgency { background: var(--urgency); color: #FFFFFF; }
.btn--urgency:hover { background: var(--urgency-hover); color: #FFFFFF; }

.btn--on-dark { background: #FFFFFF; color: var(--text-900); }
.btn--on-dark:hover { background: var(--surface-1); color: var(--text-900); }

.btn--outline-light {
  background: transparent;
  color: #FFFFFF;
  border: 2px solid #FFFFFF;
}
.btn--outline-light:hover { background: rgba(255,255,255,.12); color: #FFFFFF; }

.btn--block { width: 100%; }
.btn[aria-disabled="true"], .btn:disabled {
  background: var(--border-1); color: #8A94A1; cursor: not-allowed; border-color: var(--border-1);
}

.btn-row {
  display: flex;
  flex-wrap: wrap;
  gap: var(--sp-12);
}
@media (min-width: 768px) { .btn-row { gap: var(--sp-16); } }

/* Lien-action discret */
.action-link {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  min-height: 44px;
  font-size: 0.9375rem;
  font-weight: 600;
  color: var(--wr-orange-action);
  text-decoration: none;
}
.action-link:hover { color: var(--wr-orange-action-hover); text-decoration: underline; text-underline-offset: 3px; }
.action-link .icon { width: 16px; height: 16px; flex: none; }

/* --------------------------------------------------------------------------
   5. BADGES ET ETIQUETTES
   -------------------------------------------------------------------------- */
.badge-urgency {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  min-height: 28px;
  padding: 0 12px;
  border-radius: var(--r-pill);
  background: var(--urgency);
  color: #FFFFFF;
  font-size: 0.8125rem;
  font-weight: 700;
  text-decoration: none;
}
.badge-urgency:hover { background: var(--urgency-hover); color: #FFFFFF; }
.badge-urgency .icon { width: 16px; height: 16px; flex: none; }

.badge-axe {
  display: inline-flex;
  align-items: center;
  height: 24px;
  padding: 0 10px;
  border-radius: var(--r-badge);
  font-size: 0.75rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.04em;
}
.badge-axe--toiture { background: var(--wr-orange-tint); color: var(--wr-orange-action-active); }
.badge-axe--peinture { background: #EEF2F7; color: var(--ink-700); }

.pastille {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  height: 32px;
  padding: 0 14px;
  border-radius: var(--r-pill);
  background: #F0F3F7;
  color: var(--text-900);
  font-size: 0.875rem;
  font-weight: 600;
}
.pastille .flag { width: 16px; height: 16px; flex: none; border-radius: 2px; }

/* --------------------------------------------------------------------------
   6. BANDEAU URGENCE + BARRE UTILITAIRE
   -------------------------------------------------------------------------- */
.urgency-strip {
  display: block;
  background: var(--urgency);
  color: #FFFFFF;
  text-align: center;
  font-size: 0.8125rem;
  font-weight: 600;
  line-height: var(--topbar-h);
  min-height: var(--topbar-h);
  text-decoration: none;
}
.urgency-strip:hover { background: var(--urgency-hover); color: #FFFFFF; }

.topbar { display: none; background: var(--ink-900); color: var(--text-invert-soft); }
.topbar__inner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--sp-16);
  min-height: 40px;
  font-size: 0.875rem;
}
.topbar a { color: var(--text-invert-soft); }
.topbar__right { display: flex; align-items: center; gap: var(--sp-16); }

/* Reseaux sociaux de la barre superieure — 06/09/2026.
   Logos de marque pleins, sans libelle. La zone cliquable fait 28 px,
   exactement la hauteur du badge "Urgence fuite" place a cote : les deux
   sont donc parfaitement alignes verticalement.
   CENTRAGE : "margin-inline: auto" centre le groupe dans l'espace libre
   entre le texte de gauche et le groupe de droite. Les marges automatiques
   d'un element flex absorbent l'espace disponible a parts egales : le groupe
   reste donc centre quel que soit le nombre de logos.
   EMPLACEMENT PREVU POUR INSTAGRAM : ajouter un second <li> dans la liste
   suffira, l'ecart est deja gere par le "gap" ci-dessous et le centrage
   se recalcule tout seul. */
.topbar__social {
  display: flex;
  align-items: center;
  gap: var(--sp-12);
  list-style: none;
  margin: 0;
  margin-inline: auto;
  padding: 0;
  flex: none;
}
/* "display: flex" sur le <li> : sans lui, l'interligne du texte ajoute un
   demi-pixel sous le logo et le decale d'1 px par rapport au badge voisin. */
.topbar__social li { margin: 0; display: flex; }
.topbar__social a {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 28px;
  height: 28px;
  border-radius: var(--r-pill);
}
.topbar__social a:hover { background: rgba(255,255,255,.12); }
/* Logo de marque plein : il porte ses propres couleurs, il ne suit donc pas
   "currentColor" comme les icones au trait du site. 20 px dans une zone
   cliquable de 28 px. */
.topbar__social .icon { width: 20px; height: 20px; flex: none; }

@media (min-width: 1100px) {
  .topbar { display: block; }
  .urgency-strip { display: none; }
}

/* --------------------------------------------------------------------------
   7. HEADER ET NAVIGATION
   -------------------------------------------------------------------------- */
.site-header {
  position: sticky;
  top: 0;
  z-index: 100;
  background: var(--surface-0);
  border-bottom: 1px solid var(--border-1);
  transition: box-shadow var(--t-move) var(--ease);
}
.site-header.is-scrolled { box-shadow: var(--shadow-header); }

.site-header__inner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--sp-16);
  min-height: var(--header-h);
  transition: min-height var(--t-move) var(--ease);
}
@media (min-width: 1100px) {
  .site-header.is-scrolled .site-header__inner { min-height: 68px; }
}

.brand { display: inline-flex; align-items: center; flex: none; }
.brand img { height: 40px; width: auto; transition: height var(--t-move) var(--ease); }
@media (min-width: 1100px) {
  .brand img { height: 56px; }
  .site-header.is-scrolled .brand img { height: 44px; }
}

.header-actions { display: flex; align-items: center; gap: var(--sp-8); }

.icon-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 44px;
  height: 44px;
  border: 1px solid var(--border-2);
  border-radius: var(--r-btn);
  background: var(--surface-0);
  color: var(--text-900);
  cursor: pointer;
}
.icon-btn:hover { background: var(--surface-1); }
.icon-btn .icon { width: 22px; height: 22px; }

/* Navigation principale (desktop >= 1100px) */
.main-nav { display: none; }
.header-phone { display: none; }

@media (min-width: 1100px) {
  .main-nav { display: block; margin-left: auto; }
  .main-nav > ul {
    display: flex;
    align-items: center;
    gap: var(--sp-24);
    list-style: none;
    margin: 0;
    padding: 0;
  }
  .main-nav > ul > li { margin: 0; position: relative; }

  .nav-link, .nav-toggle {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    min-height: 44px;
    padding: 0;
    font-family: var(--font-body);
    font-size: 1rem;
    font-weight: 600;
    color: var(--text-900);
    background: none;
    border: 0;
    border-bottom: 2px solid transparent;
    cursor: pointer;
    text-decoration: none;
    transition: color var(--t-color) var(--ease), border-color var(--t-color) var(--ease);
  }
  .nav-link:hover, .nav-toggle:hover,
  .nav-toggle[aria-expanded="true"] {
    color: var(--wr-orange-action);
    border-bottom-color: var(--wr-orange);
  }
  .nav-link[aria-current="page"] { border-bottom-color: var(--wr-orange); }
  .nav-toggle .icon { width: 16px; height: 16px; transition: transform var(--t-move) var(--ease); }
  .nav-toggle[aria-expanded="true"] .icon { transform: rotate(180deg); }

  .nav-panel {
    position: absolute;
    top: calc(100% + 8px);
    left: 50%;
    transform: translate(-50%, 4px);
    z-index: 120;
    background: var(--surface-0);
    border: 1px solid var(--border-1);
    border-radius: var(--r-card);
    box-shadow: var(--shadow-3);
    padding: var(--sp-20);
    list-style: none;
    margin: 0;
    opacity: 0;
    visibility: hidden;
    transition: opacity var(--t-move) var(--ease), transform var(--t-move) var(--ease), visibility var(--t-move);
  }
  .nav-panel[data-open="true"] { opacity: 1; visibility: visible; transform: translate(-50%, 0); }
  .nav-panel--wide { width: 620px; display: grid; grid-template-columns: 1fr 1fr; gap: var(--sp-8); }
  .nav-panel--narrow { width: 360px; }
  .nav-panel li { margin: 0; }
  .nav-panel--wide .nav-panel__foot { grid-column: 1 / -1; border-top: 1px solid var(--border-1); padding-top: var(--sp-12); margin-top: var(--sp-8); }

  .nav-panel a {
    display: block;
    min-height: 56px;
    padding: var(--sp-8) var(--sp-12);
    border-radius: var(--r-btn);
    text-decoration: none;
    color: var(--text-900);
  }
  .nav-panel a:hover { background: var(--surface-1); }
  .nav-panel a strong { display: block; font-size: 1rem; font-weight: 600; }
  .nav-panel a span { display: block; font-size: 0.875rem; color: var(--text-600); line-height: 1.4; }
  .nav-panel a.is-urgency strong { color: var(--urgency); }
  .nav-panel a.is-urgency strong::before {
    content: "";
    display: inline-block;
    width: 8px; height: 8px;
    border-radius: 50%;
    background: var(--urgency);
    margin-right: 8px;
    vertical-align: middle;
  }

  .header-phone { display: inline-flex; min-height: 48px; }
  .header-actions .icon-btn { display: none; }
}

/* --------------------------------------------------------------------------
   CORRECTIF 03/09/2026 — NUMERO DE TELEPHONE DU HEADER SUR UNE SEULE LIGNE
   Probleme : entre 1100px et ~1340px, la barre de navigation desktop occupe
   presque toute la largeur ; le bouton telephone, dernier element flexible,
   etait comprime et les derniers chiffres passaient a la ligne.
   Correction en trois temps, sans jamais reduire la police en dessous de 15px :
     1. le bouton et son numero ne peuvent plus etre coupes (nowrap) ;
     2. le bloc d'actions ne peut plus etre comprime (flex: none) ;
     3. sur la seule plage etroite 1100-1339px, les espacements de la
        navigation et le padding du bouton sont resserres pour degager
        la place necessaire.
   Au-dela de 1340px, tout revient aux valeurs d'origine.
   -------------------------------------------------------------------------- */
@media (min-width: 1100px) {
  .header-actions { flex: none; }
  .header-phone {
    flex: none;
    white-space: nowrap;
    word-spacing: normal;
  }
  .header-phone .icon { flex: none; }
}

@media (min-width: 1100px) and (max-width: 1339px) {
  .site-header__inner { gap: var(--sp-12); }
  .main-nav > ul { gap: var(--sp-16); }
  .nav-link, .nav-toggle { font-size: 0.9375rem; }
  .header-phone { padding: 0 16px; font-size: 0.9375rem; gap: 8px; }
  .header-phone .icon { width: 18px; height: 18px; }
}

/* Plage etroite 1100-1339 px : l'ecran ne permet pas d'elargir le header.
   On y degage les ~30 px manquants sans toucher a la taille du texte :
   marges laterales du header un peu plus courtes, ecart entre entrees
   resserre, bouton telephone legerement plus compact.
   Sans cela, le "nowrap" ci-dessus ferait DEBORDER la page a 1100 px
   (mesure : 1126 px de contenu pour 1100 px d'ecran). */
@media (min-width: 1100px) and (max-width: 1339px) {
  .topbar .container,
  .site-header .container { padding-inline: var(--sp-20); }
  .site-header__inner { gap: var(--sp-8); }
  .main-nav > ul { gap: 10px; }
  .header-phone { padding: 0 14px; }
  /* Logo a 44 px de haut sur cette seule plage — la meme taille qu'en mobile,
     donc toujours parfaitement lisible. Il retrouve ses 56 px des 1340 px. */
  .brand img,
  .site-header.is-scrolled .brand img { height: 44px; }
}

/* --------------------------------------------------------------------------
   CORRECTIF 04/09/2026 — LIBELLES DU MENU D'ORDINATEUR SUR UNE SEULE LIGNE
   Probleme mesure : trois entrees s'affichaient sur deux lignes
   ("Peinture & boiseries", "Services complementaires", "Contact & devis").
   Mesures reelles dans le navigateur, en 1440px :
     - les six entrees, sans coupure, ont besoin de 858 px ;
     - la barre de navigation n'en avait que 778.
   Il manquait donc environ 80 px. La cause n'est pas la taille du texte :
   c'est que le header partage la largeur de la colonne de contenu (1200 px),
   alors que l'ecran, lui, est bien plus large.

   Correction, sans rapetisser ni le texte ni le logo :
     1. les libelles ne peuvent plus etre coupes (nowrap) ;
     2. le header et la barre du haut recoivent leur PROPRE largeur, plus
        large que la colonne de contenu, des que l'ecran le permet.
        Le contenu des pages, lui, garde ses 1200 px : rien d'autre ne bouge ;
     3. l'ecart entre les entrees passe de 24 a 20 px, ajustement discret.
   Le correctif du numero de telephone ci-dessus reste entierement valable :
   le bouton garde son nowrap et son flex: none.
   -------------------------------------------------------------------------- */
@media (min-width: 1100px) {
  .nav-link, .nav-toggle { white-space: nowrap; }
  .main-nav > ul { flex-wrap: nowrap; }
  /* Le chevron des menus deroulants etait ecrase a 0 px de large des que la
     barre manquait de place (mesure a 1100 px : 0x16 au lieu de 16x16) : le
     visiteur ne voyait plus qu'un sous-menu existait. Comme toutes les autres
     icones du site (.btn, .crosslink, .action-link), il devient incompressible. */
  .nav-toggle .icon { flex: none; }
}

@media (min-width: 1340px) {
  .main-nav > ul { gap: var(--sp-20); }
}

/* Largeur propre au header : elle ne s'applique qu'a la barre du haut et a
   l'en-tete, jamais au contenu editorial, qui garde ses 1200 px.
   Elle demarre au meme seuil que le retour du texte a 16 px (1340 px), pour
   que la navigation dispose tout de suite d'une marge confortable : sans elle,
   la place necessaire et la place disponible seraient exactement egales. */
@media (min-width: 1340px) {
  .topbar .container,
  .site-header .container { max-width: 1360px; }
}

/* Menu mobile plein ecran */
.mobile-menu {
  position: fixed;
  inset: 0;
  z-index: 150;
  display: none;
  background: var(--surface-0);
  overflow-y: auto;
  transform: translateX(100%);
  transition: transform var(--t-panel) var(--ease);
}
.mobile-menu.is-open { display: block; transform: translateX(0); }
.mobile-menu__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--sp-16);
  min-height: 60px;
  border-bottom: 1px solid var(--border-1);
}
.mobile-menu__list { list-style: none; margin: 0; padding: 0; }
.mobile-menu__list > li { margin: 0; border-bottom: 1px solid var(--border-1); }
.mobile-menu__list a, .mobile-menu__list button {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--sp-12);
  width: 100%;
  min-height: 56px;
  padding: var(--sp-8) 0;
  font-family: var(--font-body);
  font-size: 1rem;
  font-weight: 600;
  color: var(--text-900);
  background: none;
  border: 0;
  text-align: left;
  text-decoration: none;
  cursor: pointer;
}
.mobile-menu__list .is-urgency { color: var(--urgency); }
.mobile-menu__list .is-urgency .icon { color: var(--urgency); }
.mobile-menu__list button .icon { transition: transform var(--t-move) var(--ease); flex: none; width: 20px; height: 20px; }
.mobile-menu__list button[aria-expanded="true"] .icon { transform: rotate(180deg); }
.mobile-submenu { list-style: none; margin: 0 0 var(--sp-8); padding: 0 0 0 var(--sp-16); }
.mobile-submenu[hidden] { display: none; }
.mobile-submenu li { border: 0; }
.mobile-submenu a { font-weight: 400; min-height: 48px; }
.mobile-menu__foot {
  background: var(--surface-1);
  padding: var(--sp-24) 0 var(--sp-32);
  margin-top: var(--sp-24);
}
.mobile-menu__foot .btn { margin-bottom: var(--sp-12); }

@media (min-width: 1100px) { .mobile-menu { display: none !important; } }

/* --------------------------------------------------------------------------
   8. BARRE D'ACTION FIXE MOBILE (decision UI n. 4)
   -------------------------------------------------------------------------- */
.action-bar {
  position: fixed;
  left: 0; right: 0; bottom: 0;
  z-index: 140;
  display: flex;
  gap: var(--sp-8);
  padding: var(--sp-8) var(--sp-12) calc(var(--sp-8) + env(safe-area-inset-bottom, 0px));
  min-height: var(--actionbar-h);
  background: var(--surface-0);
  border-top: 1px solid var(--border-1);
  box-shadow: 0 -8px 24px rgba(15,30,46,.14);
}
.action-bar .btn {
  min-height: 52px;
  padding-inline: var(--sp-12);
  font-size: 1rem;
  font-weight: 700;
}
.action-bar__call { flex: 0 0 58%; }
.action-bar__quote {
  flex: 1 1 42%;
  background: var(--wr-orange-tint);
  color: var(--wr-orange-action-active);
  border: 2px solid var(--wr-orange-action);
}
.action-bar__quote:hover { background: #FAE3D2; color: var(--wr-orange-action-active); }
.action-bar--urgency .btn { flex: 1 1 100%; }

@media (min-width: 1100px) { .action-bar { display: none; } }

/* --------------------------------------------------------------------------
   9. HERO
   -------------------------------------------------------------------------- */
.hero { position: relative; background: var(--ink-900); }
.hero__media { position: absolute; inset: 0; }
.hero__media img { width: 100%; height: 100%; object-fit: cover; object-position: 65% 40%; }
.hero__veil {
  position: absolute;
  inset: 0;
  background: rgba(15,30,46,.65);
}
.hero__inner {
  position: relative;
  z-index: 1;
  display: flex;
  align-items: center;
  min-height: 420px;
  padding-block: var(--sp-32);
  color: #FFFFFF;
}
.hero__content { max-width: 100%; }
.hero h1 {
  color: #FFFFFF;
  font-size: 2rem;
  line-height: 1.1;
  text-shadow: 0 1px 2px rgba(15,30,46,.5);
  margin-top: var(--sp-16);
}
.hero__chapo {
  font-size: 1.0625rem;
  line-height: 1.55;
  color: rgba(255,255,255,.88);
  margin-bottom: var(--sp-24);
}
.hero .btn-row { flex-direction: column; }
.hero .btn-row .btn { width: 100%; }
.hero__urgency {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: var(--sp-12);
  min-height: 48px;
  margin-top: var(--sp-16);
  padding: 0 var(--sp-16);
  border-radius: var(--r-card);
  background: rgba(211,47,47,.92);
  color: #FFFFFF;
  font-size: 1rem;
  font-weight: 600;
  text-decoration: none;
}
.hero__urgency:hover { background: var(--urgency-hover); color: #FFFFFF; }
.hero__urgency .icon { width: 20px; height: 20px; flex: none; }
.hero__mention {
  margin-top: var(--sp-16);
  font-size: 0.875rem;
  color: rgba(255,255,255,.9);
}
/* Reseaux sociaux du hero — 08/09/2026.
   Rappel discret sous la mention "Devis et deplacement gratuits...", destine aux
   ecrans ou la barre superieure et ses logos sont masques (en dessous de 1100 px).
   Le bloc est place APRES les boutons Appeler / Demander un devis : ceux-ci ne
   sont ni deplaces ni reduits, et la barre d'action fixe du bas (.action-bar)
   n'est pas concernee.
   Zone tactile de 44 px (recommandation d'accessibilite) pour un logo de 20 px.
   Le retrait de 10 px a gauche aligne le premier logo sur le texte au-dessus :
   sans lui, la zone tactile decalerait visuellement les logos vers la droite. */
.hero__social {
  display: flex;
  align-items: center;
  gap: var(--sp-4);
  list-style: none;
  margin: var(--sp-8) 0 0 -10px;
  padding: 0;
}
/* "display: flex" sur le <li> : evite le demi-pixel d'interligne sous le logo. */
.hero__social li { margin: 0; display: flex; }
.hero__social a {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 44px;
  height: 44px;
  border-radius: var(--r-pill);
}
.hero__social a:hover { background: rgba(255,255,255,.14); }
/* Logos de marque pleins : ils portent leurs propres couleurs et ne suivent donc
   pas "currentColor" comme les icones au trait du site. */
.hero__social .icon { width: 20px; height: 20px; flex: none; opacity: .92; }

@media (min-width: 1100px) {
  /* Au-dela de 1100 px, la barre superieure affiche deja ces deux logos. */
  .hero__social { display: none; }
}

.hero__trades {
  margin-top: var(--sp-16);
  font-size: 0.875rem;
  color: rgba(255,255,255,.85);
}
.hero__trades .sep { color: var(--wr-orange-light); padding-inline: 4px; }
/* CORRECTIF 03/09/2026 — DEBORDEMENT HORIZONTAL DE LA PAGE D'ACCUEIL SUR MOBILE
   La liste des metiers du hero est ecrite sans espace autour des separateurs
   ("Toiture<span class="sep">·</span>Couverture…") : le navigateur la lisait
   comme UN SEUL mot insecable de 558 px, ce qui rendait toute la page d'accueil
   deroulable lateralement en dessous de 768 px (constate a 360 px et 390 px).
   On insere un espace de largeur nulle apres chaque separateur : cela cree un
   point de retour a la ligne SANS rien changer a l'apparence de la ligne.
   Le HTML n'est pas touche. */
.hero__trades .sep::after { content: "\200B"; }

@media (min-width: 768px) {
  .hero__inner { min-height: 460px; }
  .hero__content { max-width: 640px; }
  .hero .btn-row { flex-direction: row; }
  .hero .btn-row .btn { width: auto; }
  .hero__urgency { display: inline-flex; margin-top: var(--sp-20); min-height: 52px; }
  .hero__trades { font-size: 0.9375rem; }
}

@media (min-width: 1024px) {
  .hero__inner { min-height: 520px; }
  .hero__content { max-width: 58.33%; }
  .hero__veil {
    background: linear-gradient(to right, rgba(15,30,46,.78), rgba(15,30,46,.35));
  }
  .hero h1 { font-size: 3.25rem; letter-spacing: -0.01em; }
  .hero__chapo { font-size: 1.25rem; }
}

/* En-tete de page interne */
.page-head { background: var(--surface-1); padding-block: var(--sp-32); }
@media (min-width: 768px) { .page-head { padding-block: var(--sp-48); } }
.page-head h1 { margin-bottom: var(--sp-16); }
.page-head .lead { margin-bottom: var(--sp-24); }

.breadcrumb { font-size: 0.875rem; color: var(--text-600); padding-block: var(--sp-12); }
.breadcrumb ol { display: flex; flex-wrap: wrap; gap: 6px; list-style: none; margin: 0; padding: 0; }
.breadcrumb li { margin: 0; display: flex; align-items: center; gap: 6px; }
.breadcrumb li + li::before { content: "›"; color: var(--border-2); }
.breadcrumb a { color: var(--text-600); }

/* --------------------------------------------------------------------------
   10. BANDEAU DE REASSURANCE (4 arguments)
   -------------------------------------------------------------------------- */
.trust { background: var(--ink-900); color: #FFFFFF; padding-block: var(--sp-32); }
@media (min-width: 1024px) { .trust { padding-block: var(--sp-40); } }
.trust__grid { display: grid; gap: 0; }
.trust__item {
  display: flex;
  align-items: center;
  gap: var(--sp-16);
  padding-block: var(--sp-16);
  border-top: 1px solid var(--ink-700);
}
.trust__item:first-child { border-top: 0; }
.trust__item .icon { width: 28px; height: 28px; flex: none; color: var(--wr-orange-light); }
.trust__item strong { display: block; font-size: 1rem; font-weight: 600; color: #FFFFFF; }
.trust__item span { display: block; font-size: 0.875rem; color: var(--text-invert-soft); }

@media (min-width: 768px) {
  .trust__grid { grid-template-columns: 1fr 1fr; }
  .trust__item:nth-child(2) { border-top: 0; }
}
@media (min-width: 1024px) {
  .trust__grid { grid-template-columns: repeat(4, 1fr); }
  .trust__item { border-top: 0; border-left: 1px solid var(--ink-700); padding: 0 var(--sp-20); }
  .trust__item:first-child { border-left: 0; padding-left: 0; }
}

/* --------------------------------------------------------------------------
   11. CARTES DE PRESTATIONS
   -------------------------------------------------------------------------- */
.card-grid {
  display: grid;
  gap: var(--grid-gap);
  grid-template-columns: 1fr;
}
@media (min-width: 560px) { .card-grid { grid-template-columns: repeat(2, 1fr); } }
@media (min-width: 1024px) { .card-grid--3 { grid-template-columns: repeat(3, 1fr); } }

.card {
  position: relative;
  display: flex;
  flex-direction: column;
  background: var(--surface-0);
  border: 1px solid var(--border-1);
  border-radius: var(--r-card);
  box-shadow: var(--shadow-1);
  overflow: hidden;
  transition: transform var(--t-move) var(--ease), box-shadow var(--t-move) var(--ease), border-color var(--t-move) var(--ease);
}
.card:hover { transform: translateY(-2px); box-shadow: var(--shadow-2); border-color: var(--border-2); }
.card:hover .card__title { color: var(--wr-orange-action); }
.card:hover .card__media img { transform: scale(1.03); }
.card:focus-within { outline: 2px solid var(--text-900); outline-offset: 2px; }

.card__media { overflow: hidden; background: var(--surface-1); }
.card__media img {
  width: 100%;
  aspect-ratio: 16 / 10;
  object-fit: cover;
  transition: transform var(--t-move) var(--ease);
}
.card__body { padding: var(--sp-20); display: flex; flex-direction: column; gap: var(--sp-8); flex: 1; }
@media (min-width: 768px) { .card__body { padding: var(--sp-24); } }
.card__title { font-size: 1.25rem; font-weight: 600; margin: 0; transition: color var(--t-color) var(--ease); }
@media (min-width: 1024px) { .card__title { font-size: 1.375rem; } }
.card__title a { color: inherit; text-decoration: none; }
/* Lien etendu : la carte entiere est cliquable, un seul lien reel par carte */
.card__title a::after { content: ""; position: absolute; inset: 0; }
.card__title a:focus-visible { outline: none; box-shadow: none; }
.card__text { font-size: 0.9375rem; line-height: 1.5; color: var(--text-600); margin: 0; }
.card__action { margin-top: auto; }

/* Carte sans photo disponible */
.card--noimg { border-top: 4px solid var(--wr-orange); }
.card--noimg .card__icon { width: 32px; height: 32px; color: var(--wr-orange-action); }

/* Bloc urgence de la grille toiture */
.urgency-cell {
  display: flex;
  flex-direction: column;
  gap: var(--sp-12);
  align-items: flex-start;
  background: var(--urgency);
  color: #FFFFFF;
  border-radius: var(--r-card);
  padding: var(--sp-24);
  order: -1;
}
.urgency-cell h3 { color: #FFFFFF; margin: 0; }
.urgency-cell p { color: rgba(255,255,255,.9); font-size: 0.9375rem; margin: 0; }
.urgency-cell .icon-lg { width: 32px; height: 32px; }
@media (min-width: 560px) {
  .urgency-cell { order: 0; grid-column: span 2; flex-direction: row; align-items: center; flex-wrap: wrap; }
  .urgency-cell .urgency-cell__text { flex: 1 1 300px; }
}

/* --------------------------------------------------------------------------
   12. BLOC PETITES REPARATIONS
   -------------------------------------------------------------------------- */
.repairs {
  background: var(--surface-1);
  border-left: 4px solid var(--wr-orange);
  border-radius: var(--r-card);
  padding: var(--sp-24);
  display: flex;
  gap: var(--sp-16);
  align-items: flex-start;
}
@media (min-width: 768px) { .repairs { padding: var(--sp-32); } }
.repairs .icon-lg { width: 32px; height: 32px; flex: none; color: var(--wr-orange-action); }
.repairs h3 { margin-bottom: var(--sp-8); }

/* --------------------------------------------------------------------------
   13. BLOC PROCESSUS
   -------------------------------------------------------------------------- */
.process { display: grid; gap: var(--sp-24); }
@media (min-width: 1024px) { .process { grid-template-columns: 1fr 1fr; gap: var(--sp-48); align-items: start; } }

.process__card { background: var(--ink-900); color: #FFFFFF; border-radius: var(--r-card); padding: var(--sp-24); }
@media (min-width: 768px) { .process__card { padding: var(--sp-32); } }
.process__card h2 { color: #FFFFFF; }
.process__card p { color: var(--text-invert-soft); }

.steps { list-style: none; margin: var(--sp-24) 0 0; padding: 0; counter-reset: step; }
.steps li {
  position: relative;
  display: flex;
  align-items: center;
  gap: var(--sp-16);
  padding-bottom: var(--sp-20);
  color: #FFFFFF;
  font-weight: 600;
  margin: 0;
}
.steps li:last-child { padding-bottom: 0; }
/* ==========================================================================
   V1.3 — CELLULE URGENCE DE L'ACCUEIL (grille Toiture)
   Remplace le gros rectangle rouge plein par un bandeau compact sur photo.
   Texte et bouton en HTML/CSS, jamais incrustes dans l'image.
   ========================================================================== */
.urgency-cell--media {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  border-radius: 12px;
  border: 1px solid rgba(255,122,69,.35);
  background: #0B1622;
  padding: 0;                       /* annule le padding de .urgency-cell */
  display: block;
  min-height: 200px;
}
.urgency-cell__bg {
  position: absolute; inset: 0; z-index: 0;
  width: 100%; height: 100%;
  object-fit: cover; object-position: 50% 45%;
}
.urgency-cell__veil {
  position: absolute; inset: 0; z-index: 1;
  background:
    linear-gradient(90deg, rgba(8,14,22,.93) 0%, rgba(8,14,22,.78) 55%, rgba(8,14,22,.40) 100%),
    linear-gradient(180deg, rgba(160,26,26,.26) 0%, rgba(8,14,22,0) 62%);
}
.urgency-cell__content {
  position: relative; z-index: 2;
  display: flex; align-items: center; justify-content: space-between;
  flex-wrap: wrap; gap: var(--sp-20);
  padding: var(--sp-24);
  min-height: 200px;
}
.urgency-cell--media .urgency-cell__text { color: #FFFFFF; }
.urgency-cell__kicker {
  display: inline-flex; align-items: center; gap: 8px;
  margin: 0 0 6px;
  font-family: var(--font-title, inherit);
  font-weight: 700; font-size: .875rem;
  letter-spacing: .14em; text-transform: uppercase;
  color: #FF7A45;
}
.urgency-cell__kicker .icon { width: 17px; height: 17px; }
.urgency-cell__title {
  margin: 0;
  color: #FFFFFF;
  font-size: clamp(1.625rem, 3.6vw, 2.125rem);
  line-height: 1.06;
  text-shadow: 0 2px 14px rgba(0,0,0,.55);
}
.urgency-cell__zone {
  margin: 6px 0 0;
  color: #DCE3EB;
  font-size: .9375rem; font-weight: 600;
}
@media (max-width: 767px) {
  .urgency-cell--media, .urgency-cell__content { min-height: 0; }
  .urgency-cell__bg { object-position: 45% 45%; }
  .urgency-cell__veil { background: linear-gradient(180deg, rgba(8,14,22,.70) 0%, rgba(8,14,22,.90) 100%); }
  .urgency-cell__content { flex-direction: column; align-items: stretch; text-align: center; gap: var(--sp-16); padding: var(--sp-20); }
  .urgency-cell__kicker { justify-content: center; }
  .urgency-cell--media .urgency-band__cta { width: 100%; }
}

/* ==========================================================================
   V1.3 — SECTION URGENCE FUITE : bandeau compact sur image
   Remplace l'ancien grand bloc rouge plein. Texte et bouton en HTML/CSS,
   jamais incrustes dans l'image.
   ========================================================================== */
.urgency-band { padding: var(--sp-32) 0 var(--sp-24); }
.urgency-band__card {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  border-radius: 14px;
  border: 1px solid rgba(255,107,107,.30);
  box-shadow: 0 14px 40px rgba(9,16,26,.28);
  min-height: 260px;
  display: flex;
  align-items: center;
}
.urgency-band__bg {
  position: absolute; inset: 0; z-index: 0;
  width: 100%; height: 100%;
  object-fit: cover; object-position: 50% 45%;
}
.urgency-band__veil {
  position: absolute; inset: 0; z-index: 1;
  background:
    linear-gradient(90deg, rgba(8,14,22,.93) 0%, rgba(8,14,22,.80) 52%, rgba(8,14,22,.42) 100%),
    linear-gradient(180deg, rgba(160,26,26,.28) 0%, rgba(8,14,22,0) 60%);
}
.urgency-band__content {
  position: relative; z-index: 2;
  display: flex; align-items: center; justify-content: space-between;
  flex-wrap: wrap; gap: var(--sp-24);
  width: 100%;
  /* P1-11 — etait `var(--sp-28)`, variable qui n'existe pas : le padding
     tombait a 0 et le contenu touchait les bords sur ordinateur.
     32px est la valeur de l'echelle immediatement superieure. */
  padding: var(--sp-32) var(--sp-32);
}
.urgency-band__text { color: #FFFFFF; }

.urgency-band__kicker {
  display: inline-flex; align-items: center; gap: 8px;
  margin: 0 0 8px;
  font-family: var(--font-title, inherit);
  font-weight: 700; font-size: .9375rem;
  letter-spacing: .14em; text-transform: uppercase;
  color: #FF7A45;                       /* orange chaud, pas de pave rouge */
}
.urgency-band__kicker .icon { width: 18px; height: 18px; }
.urgency-band__title {
  margin: 0;
  color: #FFFFFF;
  /* P1-05 : legerement reduit pour laisser la place a la ligne de
     disponibilite juste en dessous, sans cesser de dominer le bloc. */
  font-size: clamp(1.625rem, 3.8vw, 2.375rem);
  line-height: 1.1;
  letter-spacing: .01em;
  text-shadow: 0 2px 14px rgba(0,0,0,.55);
}
/* P1-05 : la disponibilite recupere le poids visuel qu'avait le H1. */
.urgency-band__avail {
  margin: 6px 0 0;
  font-family: var(--font-title);
  font-weight: 700;
  font-size: clamp(1.5rem, 3.4vw, 2rem);
  line-height: 1.1;
  color: #FFFFFF;
  text-shadow: 0 2px 14px rgba(0,0,0,.55);
}
.urgency-band__zone {
  margin: 8px 0 0;
  color: #DCE3EB;
  font-size: 1rem; font-weight: 600;
}

.urgency-band__cta {
  display: inline-flex; flex-direction: column; align-items: center;
  gap: 2px;
  padding: 14px var(--sp-24);
  border-radius: 12px;
  text-decoration: none;
  color: #FFFFFF;
  background: linear-gradient(180deg, #E23A2E 0%, #C1231A 100%);
  border: 1px solid rgba(255,160,120,.55);
  box-shadow: 0 10px 26px rgba(200,35,25,.42);
  transition: transform .18s ease, box-shadow .18s ease, filter .18s ease;
}
.urgency-band__cta:hover, .urgency-band__cta:focus-visible {
  color: #FFFFFF; text-decoration: none;
  filter: brightness(1.06);
  transform: translateY(-2px);
  box-shadow: 0 14px 32px rgba(200,35,25,.55);
}
.urgency-band__cta:focus-visible { outline: 3px solid #FFFFFF; outline-offset: 3px; }
.urgency-band__cta-label {
  display: inline-flex; align-items: center; gap: 8px;
  font-family: var(--font-title, inherit);
  font-weight: 700; font-size: .875rem;
  letter-spacing: .08em; text-transform: uppercase;
}
.urgency-band__cta-label .icon { width: 18px; height: 18px; }
.urgency-band__cta-number {
  font-family: var(--font-title, inherit);
  font-weight: 700;
  font-size: clamp(1.25rem, 3.4vw, 1.5rem);
  line-height: 1.15;
  white-space: nowrap;
}

@media (max-width: 767px) {
  .urgency-band__card { min-height: 0; }
  .urgency-band__bg { object-position: 45% 45%; }
  .urgency-band__veil { background: linear-gradient(180deg, rgba(8,14,22,.72) 0%, rgba(8,14,22,.90) 100%); }
  .urgency-band__content { flex-direction: column; align-items: stretch; text-align: center; padding: var(--sp-24) var(--sp-20); gap: var(--sp-20); }
  .urgency-band__kicker { justify-content: center; }
  .urgency-band__cta { width: 100%; }
}
@media (prefers-reduced-motion: reduce) {
  .urgency-band__cta { transition: none; }
  .urgency-band__cta:hover { transform: none; }
}

/* ==========================================================================
   V1.2 — HERO ACCUEIL : bloc rouge urgence distinct
   Specification conception-ui-ux-wr.md 7.1 : bloc rouge separe des deux
   boutons commerciaux, jamais un troisieme bouton de meme nature.
   ========================================================================== */
.hero__urgency--block {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  margin-top: var(--sp-20);          /* separation nette des 2 CTA */
  min-height: 52px;
  padding: 0 var(--sp-20);
  border-radius: 8px;
  background: rgba(211, 47, 47, .92);
  border: 1px solid rgba(255, 107, 107, .55);
  color: #FFFFFF;
  font-weight: 600;
  font-size: 1rem;
  text-decoration: none;
  box-shadow: 0 6px 20px rgba(211, 47, 47, .38);
  transition: background-color .18s ease, transform .18s ease;
}
.hero__urgency--block .icon { width: 20px; height: 20px; flex: none; }
.hero__urgency--block:hover,
.hero__urgency--block:focus-visible {
  background: #B71C1C;
  color: #FFFFFF;
  transform: translateY(-1px);
  text-decoration: none;
}
.hero__urgency--block:focus-visible { outline: 3px solid #FFFFFF; outline-offset: 3px; }
@media (max-width: 767px) {
  .hero__urgency--block { display: flex; width: 100%; justify-content: center; }
}
@media (prefers-reduced-motion: reduce) {
  .hero__urgency--block { transition: none; }
  .hero__urgency--block:hover { transform: none; }
}

/* ==========================================================================
   V1.1 — WATERMARK DES PHOTOS DE REALISATIONS
   Le logo est superpose en CSS, JAMAIS incruste dans le fichier image :
   les originaux et les copies web restent intacts.
   Il est purement decoratif : non cliquable, invisible pour les lecteurs
   d'ecran. C'est la CARTE du projet qui reste cliquable, pas le watermark.
   Pour l'activer : ajouter la classe .is-watermarked sur la figure.
   ========================================================================== */
.ba__item, .figure, .project-card figure { position: relative; }

.is-watermarked::after {
  content: "";
  position: absolute;
  right: 10px;
  bottom: 10px;
  width: clamp(64px, 18%, 110px);
  aspect-ratio: 2 / 1;
  background-image: url("../img/logo/wr-couverture-wiss-logo.png");
  background-repeat: no-repeat;
  background-position: right bottom;
  background-size: contain;
  opacity: .42;                 /* assez discret pour ne pas gener la photo */
  filter: drop-shadow(0 1px 2px rgba(0,0,0,.45));
  pointer-events: none;         /* jamais cliquable */
  z-index: 2;
}
/* Sur une photo tres claire, on renforce legerement la lisibilite */
.is-watermarked--light::after { opacity: .55; }
/* Position alternative si le sujet occupe le coin bas-droit */
.is-watermarked--bl::after { right: auto; left: 10px; background-position: left bottom; }
@media (max-width: 480px) {
  .is-watermarked::after { width: clamp(52px, 24%, 80px); right: 8px; bottom: 8px; opacity: .38; }
}
@media print { .is-watermarked::after { display: none; } }

/* --------------------------------------------------------------------------
   P1-12 — VISIONNEUSE (lightbox)
   Specification conception-ui-ux-wr.md 13.4. Jamais implementee jusqu'ici :
   aucune photo du site n'etait agrandissable, alors que le seul avantage
   concurrentiel du site est la preuve photo. A 375px, une image de
   comparatif ne fait que 163px de large.
   -------------------------------------------------------------------------- */

/* Indice visuel : sans cela, personne ne devine qu'une image est cliquable. */
.ba__item, .photo-grid figure, .photo-solo { cursor: zoom-in; }
.ba__item::before, .photo-grid figure::before, .photo-solo::before {
  content: "";
  position: absolute;
  right: 10px; top: 10px;
  width: 32px; height: 32px;
  border-radius: 999px;
  background-color: rgba(15,30,46,.72);
  background-repeat: no-repeat;
  background-position: center;
  background-size: 18px 18px;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='2' stroke-linecap='round'%3E%3Ccircle cx='11' cy='11' r='7'/%3E%3Cpath d='M20 20l-3.5-3.5M11 8v6M8 11h6'/%3E%3C/svg%3E");
  opacity: 0;
  transition: opacity var(--t-color) var(--ease);
  z-index: 3;
  pointer-events: none;
}
.ba__item:hover::before, .photo-grid figure:hover::before, .photo-solo:hover::before,
.ba__item:focus-visible::before, .photo-grid figure:focus-visible::before, .photo-solo:focus-visible::before { opacity: 1; }
/* Sur tactile, aucun survol : la pastille reste visible en permanence. */
@media (hover: none) {
  .ba__item::before, .photo-grid figure::before, .photo-solo::before { opacity: .6; }
}
.photo-grid figure, .photo-solo { position: relative; }

.lightbox {
  position: fixed; inset: 0; z-index: 200;
  display: flex; flex-direction: column;
  align-items: center; justify-content: center;
  background: rgba(9,16,25,.94);
  padding: 24px;
  opacity: 0;
  transition: opacity var(--t-panel) var(--ease);
}
.lightbox[data-open="true"] { opacity: 1; }
.lightbox__figure {
  position: relative;
  margin: 0;
  max-width: 100%;
  transform: scale(.98);
  transition: transform var(--t-panel) var(--ease);
}
.lightbox[data-open="true"] .lightbox__figure { transform: scale(1); }
.lightbox__img {
  max-width: 100%;
  max-height: calc(100vh - 190px);
  width: auto; height: auto;
  border-radius: var(--r-card);
}
/* D-12 : le watermark est conserve dans la visionneuse, mais plus discret
   (30 % contre 42 % dans la page). Il n'est pose QUE si la figure d'origine
   le portait : une photo sans watermark ne doit pas en gagner un.
   Le logo reste en CSS : jamais incruste dans les fichiers image. */
.lightbox__figure.is-watermarked::after { opacity: .30; }
.lightbox__tag {
  position: absolute; top: 10px; left: 10px;
  height: 24px; padding: 0 10px;
  display: inline-flex; align-items: center;
  border-radius: var(--r-badge);
  font-size: .75rem; font-weight: 700; letter-spacing: .04em;
  text-transform: uppercase; color: #FFFFFF;
  background: rgba(15,30,46,.85);
}
.lightbox__legende {
  margin: 12px 0 0; max-width: 900px;
  color: #FFFFFF; text-align: center; font-size: .9375rem;
}
.lightbox__compteur { margin: 8px 0 0; color: var(--text-invert-soft); font-size: .875rem; }
.lightbox__fermer, .lightbox__prec, .lightbox__suiv {
  position: absolute;
  display: inline-flex; align-items: center; justify-content: center;
  background: rgba(255,255,255,.12);
  border: 0; border-radius: 999px;
  color: #FFFFFF; cursor: pointer;
  transition: background var(--t-color) var(--ease);
}
.lightbox__fermer:hover, .lightbox__prec:hover, .lightbox__suiv:hover { background: rgba(255,255,255,.24); }
.lightbox__fermer { top: 16px; right: 16px; width: 44px; height: 44px; }
.lightbox__prec, .lightbox__suiv { top: 50%; transform: translateY(-50%); width: 48px; height: 48px; }
.lightbox__prec { left: 16px; }
.lightbox__suiv { right: 16px; }
.lightbox__fermer .icon, .lightbox__prec .icon, .lightbox__suiv .icon { width: 24px; height: 24px; }
/* Sur mobile, les fleches passent sous l'image pour ne pas la recouvrir. */
@media (max-width: 767px) {
  .lightbox__prec, .lightbox__suiv { top: auto; bottom: 20px; transform: none; }
  .lightbox__prec { left: 20%; }
  .lightbox__suiv { right: 20%; }
  .lightbox__img { max-height: calc(100vh - 240px); }
}
@media (prefers-reduced-motion: reduce) {
  .lightbox, .lightbox__figure { transition: none; }
}

/* --- Localisation d'une realisation ---
   La commune n'est affichee QUE si elle est connue.
   Un champ vide ne doit produire AUCUN texte de remplacement.
   Pour afficher : <p class="project-card__place"><svg .../> Nom de la commune</p>
   Tant que la commune est inconnue, l'element n'est pas rendu du tout. */
.project-card__place {
  display: inline-flex; align-items: center; gap: 6px;
  margin: 4px 0 0;
  font-size: 0.875rem;
  font-weight: 600;
  color: var(--text-600);
}
.project-card__place .icon { width: 15px; height: 15px; flex: none; color: var(--wr-orange); }
.project-card__place:empty { display: none; }

/* ==========================================================================
   V1.1 — HERO URGENCE AVEC IMAGE
   Le texte est en HTML/CSS par-dessus l'image, jamais incruste dans l'image.
   ========================================================================== */
.urgency-hero--media {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  min-height: 560px;
  display: flex;
  align-items: center;
  padding: var(--sp-32) 0;
  background: #0B1622;
}
.urgency-hero__media { position: absolute; inset: 0; z-index: 0; }
.urgency-hero__media img { width: 100%; height: 100%; object-fit: cover; object-position: 50% 45%; display: block; }
.urgency-hero__veil {
  position: absolute; inset: 0; z-index: 1;
  background:
    linear-gradient(90deg, rgba(9,16,26,.90) 0%, rgba(9,16,26,.74) 45%, rgba(9,16,26,.34) 100%),
    linear-gradient(180deg, rgba(150,20,20,.20) 0%, rgba(9,16,26,0) 55%);
}
.urgency-hero__inner { position: relative; z-index: 2; color: #FFFFFF; max-width: 760px; }

.urgency-hero__kicker {
  display: inline-flex; align-items: center; gap: 10px;
  margin: 0 0 var(--sp-12);
  padding: 8px 16px;
  border-radius: 999px;
  background: #D32F2F;
  color: #FFFFFF;
  font-family: var(--font-title, inherit);
  font-weight: 700;
  font-size: 1rem;
  letter-spacing: .10em;
  text-transform: uppercase;
  box-shadow: 0 6px 20px rgba(211,47,47,.45);
}
.urgency-hero__kicker .icon { width: 20px; height: 20px; }

.urgency-hero__title {
  color: #FFFFFF;
  font-size: clamp(2.75rem, 8vw, 4.75rem);
  line-height: 1.02;
  margin: 0 0 8px;
  text-shadow: 0 2px 18px rgba(0,0,0,.55);
}
.urgency-hero__zone {
  margin: 0 0 var(--sp-24);
  font-size: clamp(1.0625rem, 2.4vw, 1.375rem);
  font-weight: 600;
  color: #E8EDF3;
}

/* Bouton d'appel surdimensionne : l'action la plus visible du site */
.btn-urgency-xl {
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: 2px;
  width: 100%; max-width: 460px;
  padding: 18px var(--sp-24);
  border-radius: 14px;
  background: #D32F2F;
  color: #FFFFFF;
  text-decoration: none;
  border: 2px solid #FF6B6B;
  box-shadow: 0 10px 34px rgba(211,47,47,.50);
  transition: transform .18s ease, box-shadow .18s ease, background-color .18s ease;
}
.btn-urgency-xl:hover, .btn-urgency-xl:focus-visible {
  background: #B71C1C;
  transform: translateY(-2px);
  box-shadow: 0 14px 40px rgba(211,47,47,.60);
  color: #FFFFFF;
}
.btn-urgency-xl:focus-visible { outline: 3px solid #FFFFFF; outline-offset: 3px; }
.btn-urgency-xl__label {
  display: inline-flex; align-items: center; gap: 10px;
  font-family: var(--font-title, inherit);
  font-weight: 700; font-size: 1.0625rem;
  text-transform: uppercase; letter-spacing: .04em;
}
.btn-urgency-xl__label .icon { width: 22px; height: 22px; }
.btn-urgency-xl__number {
  font-family: var(--font-title, inherit);
  font-weight: 700;
  font-size: clamp(1.625rem, 5.5vw, 2.125rem);
  line-height: 1.1;
  letter-spacing: .01em;
}

.urgency-hero__second {
  display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-16);
  margin-top: var(--sp-20);
}
.urgency-hero__mail { color: #E8EDF3; text-decoration: underline; text-underline-offset: 3px; }
.urgency-hero__mail:hover, .urgency-hero__mail:focus-visible { color: #FFFFFF; }
.urgency-hero--media .urgency-hero__sub {
  margin: var(--sp-20) 0 0;
  color: #D7DEE7;
  font-size: 0.9688rem;
  max-width: 62ch;
}
@media (max-width: 767px) {
  .urgency-hero--media { min-height: 520px; }
  .urgency-hero__media img { object-position: 38% 45%; }
  .urgency-hero__veil { background: linear-gradient(180deg, rgba(9,16,26,.62) 0%, rgba(9,16,26,.86) 65%, rgba(9,16,26,.94) 100%); }
  .btn-urgency-xl { max-width: none; }
  .urgency-hero__second { flex-direction: column; align-items: stretch; }
  .urgency-hero__second .btn { width: 100%; justify-content: center; }
  .urgency-hero__mail { text-align: center; }
}
@media (prefers-reduced-motion: reduce) {
  .btn-urgency-xl { transition: none; }
  .btn-urgency-xl:hover, .btn-urgency-xl:focus-visible { transform: none; }
}

/* --- V1.1 : etapes detaillees (titre + description) --- */
.steps--detailed li { align-items: flex-start; padding-bottom: var(--sp-24); }
.steps--detailed li > strong,
.steps--detailed li > span { display: block; }
.steps--detailed li > strong {
  font-family: var(--font-title, inherit);
  font-weight: 700;
  font-size: 1.0625rem;
  line-height: 1.3;
  color: #FFFFFF;
  margin-bottom: 4px;
}
.steps--detailed li > span {
  font-weight: 400;
  font-size: 0.9375rem;
  line-height: 1.55;
  color: var(--text-invert-soft);
}
.steps--detailed li > :is(strong, span) { max-width: 62ch; }
@media (max-width: 480px) {
  .steps--detailed li > strong { font-size: 1rem; }
  .steps--detailed li > span { font-size: 0.9063rem; }
}
.steps li::before {
  counter-increment: step;
  content: counter(step);
  flex: none;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 32px; height: 32px;
  border-radius: 50%;
  background: var(--wr-orange);
  color: #FFFFFF;
  font-size: 0.9375rem;
  font-weight: 700;
}
.steps li:not(:last-child)::after {
  content: "";
  position: absolute;
  left: 15px;
  top: 32px;
  bottom: 8px;
  width: 2px;
  background: var(--ink-700);
}

.figure img { border-radius: var(--r-card); box-shadow: var(--shadow-1); width: 100%; aspect-ratio: 4 / 3; object-fit: cover; }
.figure figcaption { font-size: 0.875rem; color: var(--text-600); margin-top: var(--sp-8); }

/* --------------------------------------------------------------------------
   14. PHOTOS, AVANT / APRES, GALERIES
   -------------------------------------------------------------------------- */
.ba {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--sp-8);
  max-width: var(--container-mid);
  margin-inline: auto;
}
.ba__item { position: relative; margin: 0; }
.ba__item img {
  width: 100%;
  border-radius: var(--r-card);
  object-fit: cover;
  background: var(--surface-1);
}
.ba--portrait .ba__item img { aspect-ratio: 3 / 4; }
.ba--paysage .ba__item img { aspect-ratio: 4 / 3; }
.ba__tag {
  position: absolute;
  top: var(--sp-8);
  left: var(--sp-8);
  display: inline-flex;
  align-items: center;
  height: 24px;
  padding: 0 10px;
  border-radius: var(--r-badge);
  font-size: 0.75rem;
  font-weight: 700;
  letter-spacing: 0.04em;
  color: #FFFFFF;
}
.ba__tag--avant { background: rgba(15,30,46,.85); }
.ba__tag--apres { background: var(--wr-orange-action); }
.ba__tag--pendant { background: var(--ink-700); }
/* P1-09 — Chantiers sans photo de resultat (Projets 17 et 18).
   Gris ardoise, jamais l'orange reserve a APRES : la couleur ne porte
   jamais seule l'information, le mot le dit explicitement. */
.ba__tag--encours { background: var(--ink-700); }
.ba__caption {
  max-width: var(--container-mid);
  margin: var(--sp-12) auto 0;
  font-size: 1rem;
  font-weight: 600;
}

.photo-grid {
  display: grid;
  gap: var(--grid-gap);
  grid-template-columns: repeat(2, 1fr);
}
@media (min-width: 768px) { .photo-grid--3 { grid-template-columns: repeat(3, 1fr); } }
.photo-grid figure { margin: 0; }
.photo-grid img {
  width: 100%;
  aspect-ratio: 3 / 4;
  object-fit: cover;
  border-radius: var(--r-card);
  background: var(--surface-1);
}
.photo-grid--paysage img { aspect-ratio: 4 / 3; }

.photo-solo { max-width: 720px; margin-inline: auto; }
.photo-solo img { width: 100%; border-radius: var(--r-card); }
.photo-solo figcaption { font-size: 0.875rem; color: var(--text-600); margin-top: var(--sp-8); }

/* Filtres de la page Realisations */
.filters { display: flex; flex-wrap: wrap; gap: var(--sp-8); margin-bottom: var(--sp-16); }
.filter {
  min-height: 44px;
  padding: 0 20px;
  border-radius: var(--r-pill);
  border: 1px solid var(--border-2);
  background: var(--surface-0);
  color: var(--text-900);
  font-family: var(--font-body);
  font-size: 0.9375rem;
  font-weight: 600;
  cursor: pointer;
  transition: background-color var(--t-color) var(--ease), color var(--t-color) var(--ease);
}
.filter:hover { background: var(--surface-1); }
.filter[aria-pressed="true"] { background: var(--ink-900); color: #FFFFFF; border-color: var(--ink-900); }

.project-card { display: flex; flex-direction: column; gap: var(--sp-12); }
.project-card__media { position: relative; }
.project-card__media img {
  width: 100%;
  aspect-ratio: 4 / 3;
  object-fit: cover;
  border-radius: var(--r-card);
  background: var(--surface-1);
}
.project-card__media .badge-axe {
  position: absolute;
  top: var(--sp-12);
  left: var(--sp-12);
  background: rgba(255,255,255,.92);
}
.project-card h3 { margin: 0; font-size: 1.25rem; }
.project-card__meta { font-size: 0.875rem; color: var(--text-600); margin: 0; }

/* --------------------------------------------------------------------------
   15. LISTES DE PRESTATIONS, LIENS CROISES
   -------------------------------------------------------------------------- */
.feature-list { list-style: none; padding: 0; margin: 0 0 var(--sp-16); }
.feature-list li {
  position: relative;
  padding-left: var(--sp-24);
  margin-bottom: var(--sp-12);
  max-width: 68ch;
}
.feature-list li::before {
  content: "";
  position: absolute;
  left: 0; top: 0.6em;
  width: 8px; height: 8px;
  border-radius: 2px;
  background: var(--wr-orange);
}

.crosslinks { display: grid; gap: var(--grid-gap); grid-template-columns: 1fr; }
@media (min-width: 560px) { .crosslinks { grid-template-columns: repeat(2, 1fr); } }
@media (min-width: 1024px) { .crosslinks { grid-template-columns: repeat(3, 1fr); } }
.crosslink {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--sp-12);
  min-height: 64px;
  padding: var(--sp-16);
  background: var(--surface-0);
  border: 1px solid var(--border-1);
  border-radius: var(--r-card);
  font-weight: 600;
  color: var(--text-900);
  text-decoration: none;
  transition: border-color var(--t-color) var(--ease), color var(--t-color) var(--ease);
}
.crosslink:hover { border-color: var(--wr-orange-action); color: var(--wr-orange-action); }
.crosslink .icon { width: 16px; height: 16px; flex: none; }

.reassurance {
  background: var(--surface-1);
  border: 1px solid var(--border-1);
  border-radius: var(--r-card);
  padding: var(--sp-24);
}
@media (min-width: 768px) { .reassurance { padding: var(--sp-32); } }

/* P2-03 — Page Avis clients : ces deux classes etaient utilisees dans le HTML
   mais n'existaient nulle part. Le bloc d'attente flottait sans conteneur.
   La bordure en pointilles dit visuellement "emplacement en attente",
   sans ajouter un mot de plus. */
.reviews-empty {
  background: var(--surface-1);
  border: 1px dashed var(--border-2);
  border-radius: var(--r-card);
  padding: var(--sp-24);
  text-align: center;
}
@media (min-width: 768px) { .reviews-empty { padding: var(--sp-32); } }

.note-pending {
  color: var(--text-600);
  margin-top: var(--sp-12);
}

/* --------------------------------------------------------------------------
   16. CONVERSION
   -------------------------------------------------------------------------- */
.cta-band { background: var(--wr-orange-action); color: #FFFFFF; padding-block: var(--sp-40); }
@media (min-width: 1024px) { .cta-band { padding-block: var(--sp-48); } }
.cta-band__inner { display: grid; gap: var(--sp-24); text-align: center; justify-items: center; }
.cta-band h2 { color: #FFFFFF; margin-bottom: var(--sp-8); }
.cta-band p { color: rgba(255,255,255,.92); }
.cta-band .btn-row { flex-direction: column; width: 100%; }
.cta-band .btn-row .btn { width: 100%; }
.cta-band__mention { font-size: 0.875rem; color: rgba(255,255,255,.92); }

@media (min-width: 768px) {
  .cta-band .btn-row { flex-direction: row; width: auto; }
  .cta-band .btn-row .btn { width: auto; }
}
@media (min-width: 1024px) {
  .cta-band__inner { grid-template-columns: 1fr auto; text-align: left; align-items: center; justify-items: start; }
  .cta-band__actions { justify-self: end; text-align: right; }
}

.cta-box {
  max-width: var(--container-narrow);
  margin-inline: auto;
  background: var(--surface-1);
  border: 1px solid var(--border-1);
  border-radius: var(--r-card);
  padding: var(--sp-24);
  text-align: center;
}
@media (min-width: 768px) { .cta-box { padding: var(--sp-32); } }
.cta-box .btn-row { justify-content: center; flex-direction: column; }
.cta-box .btn-row .btn { width: 100%; }
@media (min-width: 560px) {
  .cta-box .btn-row { flex-direction: row; }
  .cta-box .btn-row .btn { width: auto; }
}

/* Bloc appel (page contact / urgence) */
.call-box {
  background: var(--surface-1);
  border-radius: var(--r-card);
  padding: var(--sp-24);
  text-align: center;
}
.call-box__number {
  display: inline-block;
  font-family: var(--font-title);
  font-size: 1.75rem;
  font-weight: 700;
  color: var(--text-900);
  text-decoration: none;
  margin-bottom: var(--sp-16);
  font-variant-numeric: tabular-nums;
}
.urgency-note {
  background: var(--surface-0);
  border: 1px solid var(--border-1);
  border-left: 4px solid var(--urgency);
  border-radius: var(--r-card);
  padding: var(--sp-16) var(--sp-20);
}

/* Page urgence */
.urgency-hero { background: var(--ink-900); color: #FFFFFF; padding-block: var(--sp-48); }
.urgency-hero h1 { color: #FFFFFF; }
.urgency-hero__number {
  display: inline-block;
  font-family: var(--font-title);
  font-size: 2.25rem;
  font-weight: 700;
  letter-spacing: -0.01em;
  color: #FFFFFF;
  text-decoration: none;
  font-variant-numeric: tabular-nums;
  margin-block: var(--sp-16);
}
.urgency-hero__number:hover { color: var(--wr-orange-light); }
.urgency-hero .btn--urgency { min-height: 64px; width: 100%; font-size: 1.125rem; }
.urgency-hero__sub { margin-top: var(--sp-16); font-size: 0.9375rem; color: var(--text-invert-soft); }
@media (min-width: 1024px) {
  .urgency-hero { padding-block: var(--sp-64); }
  .urgency-hero__number { font-size: 3.5rem; }
  .urgency-hero .btn--urgency { width: auto; min-width: 340px; }
}

.steps-num { counter-reset: n; list-style: none; padding: 0; margin: 0 0 var(--sp-16); }
.steps-num li {
  counter-increment: n;
  position: relative;
  padding-left: var(--sp-40);
  margin-bottom: var(--sp-16);
  max-width: 68ch;
}
.steps-num li::before {
  content: counter(n);
  position: absolute;
  left: 0; top: 0;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 28px; height: 28px;
  border-radius: 50%;
  background: var(--wr-orange-tint);
  color: var(--wr-orange-action-active);
  font-size: 0.875rem;
  font-weight: 700;
}

/* --------------------------------------------------------------------------
   17. FORMULAIRE
   -------------------------------------------------------------------------- */
.form-layout { display: grid; gap: var(--sp-32); }
@media (min-width: 1024px) {
  .form-layout { grid-template-columns: 7fr 5fr; gap: var(--sp-48); align-items: start; }
  .form-aside { position: sticky; top: 120px; }
}

.field { margin-bottom: var(--sp-20); }
.field > label, .fieldset-legend {
  display: block;
  font-size: 0.875rem;
  font-weight: 600;
  color: var(--text-900);
  margin-bottom: 6px;
}
.field input[type="text"],
.field input[type="tel"],
.field input[type="email"],
.field select,
.field textarea {
  width: 100%;
  min-height: 52px;
  padding: 12px 14px;
  font-family: var(--font-body);
  font-size: 1rem;
  color: var(--text-900);
  background: var(--surface-0);
  border: 1px solid var(--border-2);
  border-radius: var(--r-btn);
  transition: border-color var(--t-color) var(--ease), box-shadow var(--t-color) var(--ease);
}
@media (min-width: 768px) {
  .field input[type="text"], .field input[type="tel"], .field input[type="email"], .field select { min-height: 48px; }
}
.field textarea { min-height: 120px; resize: vertical; }
.field input:hover, .field select:hover, .field textarea:hover { border-color: #94A3B8; }
.field input:focus, .field select:focus, .field textarea:focus {
  outline: none;
  border: 2px solid var(--wr-orange-action);
  box-shadow: 0 0 0 3px rgba(226,113,29,.25);
}
.field .hint { font-size: 0.875rem; color: var(--text-600); margin: 6px 0 0; }
.field .error-msg { display: none; font-size: 0.875rem; color: var(--error); margin: 6px 0 0; font-weight: 500; }
.field.has-error input, .field.has-error select, .field.has-error textarea { border: 2px solid var(--error); }
.field.has-error .error-msg { display: block; }

.field--check { display: flex; gap: var(--sp-12); align-items: flex-start; }
.field--check input[type="checkbox"] { width: 22px; height: 22px; margin-top: 2px; flex: none; accent-color: var(--wr-orange-action); }
.field--check label { font-size: 0.9375rem; font-weight: 400; margin: 0; }

.dropzone {
  display: none;
  align-items: center;
  justify-content: center;
  flex-direction: column;
  gap: var(--sp-8);
  min-height: 140px;
  padding: var(--sp-16);
  border: 2px dashed var(--border-2);
  border-radius: var(--r-card);
  background: #FAFBFC;
  text-align: center;
  cursor: pointer;
}
.dropzone.is-over { border-color: var(--wr-orange-action); background: var(--wr-orange-tint); }
.dropzone .icon-lg { width: 32px; height: 32px; color: var(--text-600); }
@media (min-width: 768px) { .dropzone { display: flex; } .photo-btn { display: none; } }

.thumbs { display: flex; flex-wrap: wrap; gap: var(--sp-8); margin-top: var(--sp-12); padding: 0; list-style: none; }
.thumbs li { position: relative; margin: 0; width: 72px; }
.thumbs img { width: 72px; height: 72px; object-fit: cover; border-radius: var(--r-btn); }
.thumbs .thumb-name { display: block; font-size: 0.75rem; color: var(--text-600); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.thumbs button {
  position: absolute;
  top: -6px; right: -6px;
  width: 24px; height: 24px;
  display: inline-flex; align-items: center; justify-content: center;
  border-radius: 50%;
  border: 1px solid var(--border-2);
  background: var(--surface-0);
  color: var(--text-900);
  cursor: pointer;
  font-size: 14px;
  line-height: 1;
}
.thumbs button::before { content: ""; position: absolute; inset: -10px; }

.form-notice {
  border-radius: var(--r-card);
  padding: var(--sp-20);
  margin-bottom: var(--sp-24);
}
.form-notice--info { background: var(--wr-orange-tint); border-left: 4px solid var(--wr-orange-action); }
.form-notice--error { background: var(--error-bg); border-left: 4px solid var(--error); }
/* 06/09/2026 : message de confirmation apres un envoi reussi du formulaire.
   Reprend les couleurs de succes deja definies en haut de cette feuille. */
.form-notice--success { background: var(--success-bg); border-left: 4px solid var(--success); }
.form-notice h3 { margin-bottom: var(--sp-8); font-size: 1.125rem; }
.form-notice ul { margin-bottom: 0; }

.aside-card {
  background: var(--surface-1);
  border: 1px solid var(--border-1);
  border-radius: var(--r-card);
  padding: var(--sp-24);
}
.aside-card__number {
  display: inline-block;
  font-family: var(--font-title);
  font-size: 1.5rem;
  font-weight: 700;
  color: var(--text-900);
  text-decoration: none;
  font-variant-numeric: tabular-nums;
}

.def-list { margin: 0; }
.def-list dt { font-weight: 600; margin-top: var(--sp-16); }
.def-list dt:first-child { margin-top: 0; }
.def-list dd { margin: 4px 0 0; color: var(--text-600); }

/* --------------------------------------------------------------------------
   18. PIED DE PAGE
   -------------------------------------------------------------------------- */
.site-footer { background: var(--ink-900); color: var(--text-invert-soft); padding-block: var(--sp-48); }
@media (min-width: 1024px) { .site-footer { padding-block: 56px; } }
.site-footer h2, .site-footer h3 { color: #FFFFFF; font-size: 1rem; margin-bottom: var(--sp-12); }
.site-footer a { color: #FFFFFF; text-decoration: none; }
.site-footer a:hover { text-decoration: underline; text-underline-offset: 3px; }
.site-footer ul { list-style: none; padding: 0; margin: 0 0 var(--sp-16); }
.site-footer li { margin-bottom: var(--sp-8); }
.site-footer p { color: var(--text-invert-soft); }

.footer-grid { display: grid; gap: var(--sp-32); }
@media (min-width: 768px) { .footer-grid { grid-template-columns: 1fr 1fr; } }
@media (min-width: 1024px) { .footer-grid { grid-template-columns: 4fr 3fr 3fr 2fr; gap: var(--sp-32); } }

.footer-brand img { height: 56px; width: auto; margin-bottom: var(--sp-16); }
.footer-phone { font-size: 1.125rem; font-weight: 600; font-variant-numeric: tabular-nums; }
.footer-sub { font-size: 0.8125rem; font-weight: 600; text-transform: uppercase; letter-spacing: 0.06em; color: var(--wr-orange-light); margin: var(--sp-16) 0 var(--sp-8); }

/* Reseaux sociaux du pied de page — 05/09/2026. Reprend les couleurs et la
   typographie du pied de page : aucun style nouveau, seulement la mise en
   ligne horizontale et une zone cliquable de 44px de haut. */
.footer-social { display: flex; flex-wrap: wrap; gap: var(--sp-16); }
.footer-social li { margin-bottom: 0; }
.footer-social a { display: inline-flex; align-items: center; gap: var(--sp-8); min-height: 44px; }
.footer-social .icon { flex: none; width: 20px; height: 20px; }

.footer-bottom {
  border-top: 1px solid var(--ink-700);
  margin-top: var(--sp-32);
  padding-top: var(--sp-24);
  display: flex;
  flex-direction: column;
  gap: var(--sp-12);
  align-items: center;
  text-align: center;
  font-size: 0.875rem;
}
.footer-bottom ul { display: flex; gap: var(--sp-16); margin: 0; flex-wrap: wrap; justify-content: center; }
.footer-bottom li { margin: 0; }
@media (min-width: 768px) {
  .footer-bottom { flex-direction: row; justify-content: space-between; text-align: left; }
}

/* --------------------------------------------------------------------------
   19. UTILITAIRES COMPLEMENTAIRES
   -------------------------------------------------------------------------- */
.btn-row--center { justify-content: center; }
.mt-16 { margin-top: var(--sp-16); }
.mt-20 { margin-top: var(--sp-20); }
.mt-32 { margin-top: var(--sp-32); }
.mt-40 { margin-top: var(--sp-40); }

/* Photo au format portrait dans un bloc figure (photo du vehicule) */
.figure--portrait img { aspect-ratio: 3 / 4; }

/* Liste des chantiers de la page Realisations */
/* P1-09 — 2 colonnes maximum, jamais 3.
   Une fiche contient un comparatif a deux images cote a cote, pas une
   vignette unique : a 3 colonnes sur 1200px chaque image ferait 180px et
   la comparaison deviendrait illisible. A 2 colonnes elle fait ~270px. */
.projects { display: grid; gap: var(--sp-32); grid-template-columns: 1fr; }
@media (min-width: 768px)  { .projects { grid-template-columns: repeat(2, 1fr); gap: var(--sp-40); } }
@media (min-width: 1100px) { .projects { grid-template-columns: repeat(2, 1fr); gap: var(--sp-48); } }

/* Logo compact dans l'en-tete du menu mobile */
.mobile-menu__head img { height: 40px; width: auto; }

/* --------------------------------------------------------------------------
   20. MOUVEMENT REDUIT (regle globale unique)
   -------------------------------------------------------------------------- */
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
  .card:hover, .card:hover .card__media img { transform: none; }
  .mobile-menu { transition: none; transform: none; }
  .mobile-menu.is-open { transform: none; }
}

/* ==========================================================================
   21. ZONES D'INTERVENTION — TEXTE + CARTE DU CANTON (03/09/2026)
   Composition de la maquette de reference, reproduite en HTML/CSS/SVG :
   texte a gauche, carte a droite sur ordinateur ; empilement sur mobile.
   La carte est un SVG inline : elle prend donc les couleurs de la charte
   (orange / noir / blanc) et reste nette a toutes les tailles.
   ========================================================================== */
.zones {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--sp-32);
  align-items: center;
}
@media (min-width: 900px) {
  .zones { grid-template-columns: minmax(0, 5fr) minmax(0, 7fr); gap: var(--sp-48); }
}

.zones__text > * { margin-top: 0; }
.zones__text > * + * { margin-top: var(--sp-16); }
.zones__text .rule { margin-top: var(--sp-8); }

.zones__free {
  display: flex;
  align-items: center;
  gap: var(--sp-12);
  font-weight: 600;
  color: var(--text-900);
}
.zones__free .icon { flex: none; width: 26px; height: 26px; color: var(--wr-orange-action); }

.zones__communes {
  background: var(--surface-0);
  border: 1px solid var(--border-1);
  border-left: 4px solid var(--wr-orange);
  border-radius: var(--r-card);
  padding: var(--sp-16) var(--sp-20);
}
.zones__communes p { margin: 0; font-size: 0.9375rem; line-height: 1.6; color: var(--text-600); }
.zones__communes-titre {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-bottom: var(--sp-8) !important;
  font-weight: 600;
  color: var(--wr-orange-action) !important;
  font-size: 1rem !important;
}
.zones__communes-titre .icon { flex: none; width: 18px; height: 18px; }

/* --- La carte ------------------------------------------------------------ */
.zmap { margin: 0; }
.zmap__cadre {
  border: 1px solid var(--border-1);
  border-radius: var(--r-card);
  background: #EDF1F0;
  overflow: hidden;
  box-shadow: var(--shadow-1);
}
.zmap__svg { display: block; width: 100%; height: auto; }

.zmap__hors   { fill: #E7EBE9; }
.zmap__lac    { fill: #C9DEEC; }
.zmap__canton { fill: #F7C79E; stroke: var(--wr-orange); stroke-width: 4.5; stroke-linejoin: round; }

.zmap__dot        { fill: var(--wr-orange-action); }
.zmap__dot--chef  { fill: var(--text-900); }

/* Les tailles sont exprimees dans le repere du SVG (viewBox de 1000 unites).
   Sur ordinateur la carte s'affiche vers 640 px de large : 24 unites donnent
   donc environ 15 px reels a l'ecran. */
.zmap__label {
  font-family: var(--font-body);
  font-size: 24px;
  font-weight: 600;
  fill: var(--text-900);
  paint-order: stroke;
  stroke: rgba(255,255,255,.88);
  stroke-width: 5px;
  stroke-linejoin: round;
}
.zmap__label--chef { font-size: 32px; font-weight: 700; }
.zmap__pays {
  font-family: var(--font-body);
  font-size: 30px;
  font-weight: 700;
  letter-spacing: .08em;
  fill: #98A2AD;
}
.zmap__pays--sec { font-size: 25px; }

/* Tablette : la carte passe pleine largeur, elle est donc plus grande. */
@media (min-width: 768px) and (max-width: 899px) {
  .zmap__label { font-size: 20px; }
  .zmap__label--chef { font-size: 27px; }
}

/* Mobile : la carte ne fait plus que ~350 px de large. On agrandit fortement
   le texte utile et on retire les etiquettes secondaires pour rester lisible. */
@media (max-width: 767px) {
  .zmap__label { font-size: 36px; stroke-width: 7px; }
  .zmap__label--chef { font-size: 46px; }
  .zmap__label--sec { display: none; }
  .zmap__dot { r: 6; }
  .zmap__dot--chef { r: 9; }
  .zmap__pays { font-size: 42px; }
  .zmap__pays--sec { font-size: 34px; }
  .zmap__canton { stroke-width: 6; }
}

.zmap__legende {
  display: flex;
  flex-direction: column;
  gap: var(--sp-8);
  margin-top: var(--sp-16);
}
.zmap__cle {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  font-size: 0.875rem;
  line-height: 1.45;
  color: var(--text-600);
}
.zmap__cle strong { color: var(--text-900); }
.zmap__pastille {
  flex: none;
  width: 16px; height: 16px;
  margin-top: 2px;
  border-radius: 4px;
}
.zmap__pastille--zone { background: #F7C79E; border: 2px solid var(--wr-orange); }
.zmap__pastille--hors { background: #E7EBE9; border: 2px solid #CBD3D1; }

.zmap__source {
  margin: var(--sp-8) 0 0;
  font-size: 0.75rem;
  color: var(--text-600);
}

/* ==========================================================================
   22. LES SECTEURS DU CANTON (page Zones d'intervention) — 04/09/2026
   Quatre blocs, un par secteur, chacun avec sa liste de communes.
   Les listes passent en colonnes des qu'il y a la place : sur telephone,
   une seule colonne, jamais de debordement.
   ========================================================================== */
.secteurs {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--sp-20);
}
@media (min-width: 768px)  { .secteurs { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--sp-24); } }

.secteur {
  background: var(--surface-0);
  border: 1px solid var(--border-1);
  border-top: 4px solid var(--wr-orange);
  border-radius: var(--r-card);
  padding: var(--sp-20);
  display: flex;
  flex-direction: column;
}
@media (min-width: 768px) { .secteur { padding: var(--sp-24); } }

.secteur__titre {
  margin: 0 0 var(--sp-8);
  font-size: 1.125rem;
  font-weight: 600;
  color: var(--text-900);
}
@media (min-width: 1024px) { .secteur__titre { font-size: 1.25rem; } }

.secteur__texte {
  margin: 0 0 var(--sp-16);
  font-size: 0.9375rem;
  line-height: 1.55;
  color: var(--text-600);
}

.secteur__communes {
  list-style: none;
  margin: 0;
  padding: 0;
  columns: 2;
  column-gap: var(--sp-20);
  font-size: 0.9375rem;
  line-height: 1.75;
}
/* Deux colonnes partout : a trois, les noms longs (Plan-les-Ouates,
   Collonge-Bellerive, Pregny-Chambesy) se coupaient en deux lignes. */
.secteur__communes li {
  break-inside: avoid;
  margin: 0;
  padding-left: 16px;
  position: relative;
  color: var(--text-900);
}
.secteur__communes li::before {
  content: "";
  position: absolute;
  left: 0;
  top: 0.62em;
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--wr-orange);
}

.secteur__compte {
  margin: var(--sp-16) 0 0;
  padding-top: var(--sp-12);
  border-top: 1px solid var(--border-1);
  font-size: 0.8125rem;
  color: var(--text-600);
}

/* ==========================================================================
   23. QUESTIONS FREQUENTES — 04/09/2026 (GEO P1-5)
   Sept questions au total, sur trois pages seulement : zones d'intervention,
   urgence fuite et contact. Aucun script : les reponses sont toujours
   visibles, donc lisibles par un visiteur comme par un robot.
   Aucune couleur ni aucun espacement nouveau : uniquement des tokens
   existants, sur le meme modele que les cartes .secteur.
   ========================================================================== */
.faq {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--sp-16);
}

.faq__item {
  background: var(--surface-0);
  border: 1px solid var(--border-1);
  border-left: 4px solid var(--wr-orange);
  border-radius: var(--r-card);
  padding: var(--sp-20);
}
@media (min-width: 768px) { .faq__item { padding: var(--sp-24); } }

.faq__q {
  margin: 0 0 var(--sp-8);
  font-size: 1.0625rem;
  font-weight: 600;
  color: var(--text-900);
}
@media (min-width: 768px) { .faq__q { font-size: 1.125rem; } }

.faq__a {
  margin: 0;
  max-width: 68ch;
  line-height: 1.65;
  color: var(--text-600);
}
.faq__a + .faq__a { margin-top: var(--sp-12); }

/* ==========================================================================
   24. BANDEAU COOKIES / MESURE D'AUDIENCE — 06/09/2026 (mission Analytics)
   --------------------------------------------------------------------------
   Le HTML de ce bandeau n'existe dans AUCUNE page : il est construit par
   assets/js/consent.js. Ces styles ne s'appliquent donc que lorsque la
   mesure d'audience est reellement en place et que le visiteur n'a pas
   encore repondu.

   Aucune couleur, police ni espacement nouveau : tout reprend les jetons de
   design deja definis en section 1.

   Placement : au-dessus de la barre d'action fixe mobile (section 8), pour
   ne jamais masquer les boutons APPELER et DEMANDER UN DEVIS.
   ========================================================================== */
.cookie-bandeau {
  position: fixed;
  left: 0; right: 0;
  bottom: calc(var(--actionbar-h) + env(safe-area-inset-bottom, 0px));
  z-index: 150;
  background: var(--surface-0);
  border-top: 3px solid var(--wr-orange);
  box-shadow: 0 -8px 24px rgba(15,30,46,.14);
  transform: translateY(100%);
  opacity: 0;
  transition: transform var(--t-move, .24s) var(--ease),
              opacity var(--t-color, .18s) var(--ease);
}
.cookie-bandeau[data-ouvert="true"] { transform: translateY(0); opacity: 1; }
.cookie-bandeau:focus { outline: none; }

/* A partir de 1100px la barre d'action mobile disparait (section 8) :
   le bandeau reprend le bas de l'ecran. */
@media (min-width: 1100px) {
  .cookie-bandeau { bottom: 0; }
}

.cookie-bandeau__contenu {
  max-width: 1160px;
  margin: 0 auto;
  padding: var(--sp-16) var(--gutter);
  display: flex;
  flex-direction: column;
  gap: var(--sp-16);
}
@media (min-width: 900px) {
  .cookie-bandeau__contenu {
    flex-direction: row;
    align-items: center;
    justify-content: space-between;
    gap: var(--sp-32);
    padding-block: var(--sp-20);
  }
}

.cookie-bandeau__titre {
  margin: 0 0 var(--sp-8);
  font-family: var(--font-title);
  font-size: 1.0625rem;
  font-weight: 700;
  color: var(--text-900);
}

.cookie-bandeau__texte p {
  margin: 0;
  max-width: 72ch;
  font-size: .9375rem;
  line-height: 1.6;
  color: var(--text-600);
}

.cookie-bandeau__lien { margin-top: var(--sp-8) !important; }
.cookie-bandeau__lien a { color: var(--wr-orange-action); font-weight: 600; }

.cookie-bandeau__actions {
  display: flex;
  gap: var(--sp-12);
  flex: none;
}
/* Les deux boutons ont le meme poids visuel : refuser doit etre aussi
   simple qu'accepter. */
.cookie-bandeau__actions .btn {
  flex: 1 1 auto;
  min-height: 48px;
  padding-inline: var(--sp-20);
  white-space: nowrap;
}
@media (min-width: 900px) {
  .cookie-bandeau__actions .btn { flex: none; min-height: 52px; }
}

/* Lien "Cookies" ajoute au pied de page par consent.js : il doit se
   presenter exactement comme les liens "Mentions legales" voisins. */
.footer-cookies {
  padding: 0;
  background: none;
  border: 0;
  font: inherit;
  color: #FFFFFF;              /* meme couleur que .site-footer a */
  text-decoration: none;
  cursor: pointer;
}
.footer-cookies:hover { text-decoration: underline; text-underline-offset: 3px; }
