/* ============================================================================
   IMMOVER, feuille DA "journal immobilier contemporain"
   ============================================================================
   Source       : maquette V2 Claude Design (étape 7 bis brique B, 2026-06-03)
   Statut       : remplacement complet de la DA v1 baseline (jalon 1).
   Backup v1    : clients/immover/audits/2026-05-refonte-cadrage/checkpoints/
                  2026-06-03-DA-v1-baseline/da-immover.css
   Scope        : la totalité des composants est scopée via "body.edition .xxx".
                  Le HTML doit déclarer <body class="edition"> pour activer la DA.
                  Les utilitaires (.u-*, .ph, .float-cta), le reset et les tokens
                  :root sont globaux et utilisables sans le scope.
   Doctrine     : voir clients/immover/audits/2026-05-refonte-cadrage/
                  da-doctrine-design-system.html (référentiel permanent).

   Structure du fichier :
     1. SOCLE (reset + tokens + utilitaires globaux)
     2. COMPOSANTS PAGE QUARTIER (scope .edition)
     3. EN-TÊTE REFONDU (étape 7 bis brique B)
     4. MARQUEUR DONNÉES INDICATIVES (étape 7 bis brique B)
     5. RESPONSIVE
   ============================================================================ */


/* ============================================================
   1. SOCLE : reset + tokens (palette, typo, hairlines) + utilitaires
   ============================================================ */

*, *::before, *::after { box-sizing: border-box; }
* { margin: 0; padding: 0; }
html { -webkit-text-size-adjust: 100%; text-size-adjust: 100%; }
body { line-height: 1.5; -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility; }
img, svg, iframe { display: block; max-width: 100%; }
button, input, select, textarea { font: inherit; color: inherit; }
button { cursor: pointer; background: none; border: none; }
a { color: inherit; }
ul, ol { list-style: none; }
table { border-collapse: collapse; width: 100%; }

:root {
  /* palette socle (commune aux 3 directions explorées par Claude Design) */
  --cream:        #F5F2EC;
  --cream-deep:   #ECE8DF;
  --white:        #FFFFFF;
  --ink:          #1A1916;         /* near-black, légèrement chaud */
  --ink-soft:     #3A3833;
  --gray:         #6B675E;         /* texte secondaire */
  --gray-2:       #6E6A60;         /* labels, captions — assombri pour contraste WCAG AA (TECH#2, ~4.6:1 sur crème) */
  --gray-3:       #BEB9AD;         /* hairline forte — RÉSERVÉ aux bordures/désactivés, jamais texte courant (contraste insuffisant) */
  --hair:         #E2DDD2;         /* hairline standard sur crème */
  --hair-white:   #EAE6DC;         /* hairline sur blanc */
  --blue:         #1B3A5C;         /* le 10% */
  --blue-700:     #142C46;
  --blue-300:     #5E7B97;
  --blue-tint:    #EDF1F5;         /* fond bleu très clair */

  --pos:          #2E6B4F;         /* hausse (discret) */
  --neg:          #9A3B2E;         /* baisse (discret) */

  /* tokens ajoutés pour le menu + footer "Le contraste journal" (étape 8.A.2).
     --gray / --gray-2 NON redéfinis : le menu/footer héritent des valeurs
     :root immover (décision pilotage 8.A.2, anti-override cross-pattern).
     --blue-light de Claude Design fusionné sur --blue-300 existant (pas de
     quasi-doublon de token, décision pilotage 8.A.2). */
  --ink-700:      #2A2823;         /* hover item du dropdown Outils (sur encre) */
  --ink-line:     rgba(255,255,255,.10); /* filets sur fond encre (footer, drawer) */
  --ink-copy:     #6E7C8C;         /* copyright footer (sur encre) */
  --font-serif:   "Fraunces", Georgia, "Times New Roman", serif;
  --font-sans:    "Inter", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  --font-mono:    "IBM Plex Mono", ui-monospace, monospace;
  --mn-h:         74px;            /* hauteur de référence en-tête (offset drawer mobile) */
}

/* utilitaires de largeur partagés.
   .u-cream / .u-white retirés (étape 7 ter, A8) : redondants avec le pattern
   .surface (blanc) / absence de classe (crème). L'alternance de fond se gère
   exclusivement via .surface, voir doctrine §4.2.
   .u-narrow conservé : encadrés étroits centrés (citation, bloc d'appel) à
   usage futur sur les pages article éditorial. */
.u-wrap   { width: 100%; max-width: 1080px; margin-inline: auto; padding-inline: clamp(20px, 5vw, 64px); }
.u-narrow { max-width: 760px; }

/* placeholder image rayé + label mono (jamais de SVG dessiné à la main) */
.ph {
  position: relative;
  background-color: var(--cream-deep);
  background-image: repeating-linear-gradient(
    -45deg,
    transparent 0 11px,
    rgba(26,25,22,.045) 11px 12px
  );
  border: 1px solid var(--hair);
  display: grid;
  place-items: center;
  color: var(--gray-2);
  font-family: "IBM Plex Mono", ui-monospace, "SFMono-Regular", Menlo, monospace;
  font-size: 12px;
  letter-spacing: .04em;
  text-transform: uppercase;
  text-align: center;
  padding: 16px;
}
.ph span { max-width: 80%; }

/* focus visible accessible, neutre */
:focus-visible { outline: 2px solid var(--blue); outline-offset: 2px; }

/* CTA flottant (commun à toutes les directions) */
.float-cta {
  position: fixed;
  right: clamp(16px, 3vw, 32px);
  bottom: clamp(16px, 3vw, 32px);
  z-index: 60;
  display: inline-flex;
  align-items: center;
  gap: 10px;
  padding: 14px 22px;
  background: var(--blue);
  color: #fff;
  font-weight: 600;
  font-size: 15px;
  letter-spacing: .01em;
  border-radius: 2px;
  box-shadow: 0 8px 28px rgba(20,30,46,.28);
  transform: translateY(140%);
  opacity: 0;
  transition: transform .42s cubic-bezier(.2,.7,.2,1), opacity .42s ease;
  text-decoration: none;
}
.float-cta.is-visible { transform: translateY(0); opacity: 1; }
.float-cta:hover { background: var(--blue-700); }
.float-cta .arrow { transition: transform .25s ease; }
.float-cta:hover .arrow { transform: translateX(3px); }
@media (max-width: 560px) {
  .float-cta { left: 16px; right: 16px; bottom: 16px; justify-content: center; }
}
@media (prefers-reduced-motion: reduce) {
  .float-cta { transition: opacity .3s ease; transform: none; }
}


/* ============================================================================
   1bis. MENU + FOOTER GLOBAL (direction "Le contraste journal", étape 8.A.2)
   ============================================================================
   Source     : Claude Design, direction retenue au cadrage 8.A.1.
   Préfixes   : .mn- (menu) · .ft- (footer). Scope body.edition.
   Statut     : intégré sur l'instance home pour audit visuel (8.A.2). Coexiste
                avec l'ancien en-tête .ehead (section 3) et l'ancien footer .foot
                tant que l'industrialisation 8.A.3 n'a pas migré les autres
                patterns. Doctrine (fiche Menu + Footer) à figer en 8.A.4.
   Variables  : aucun bloc de tokens local. Le menu/footer consomme les tokens
                du :root immover (décision pilotage 8.A.2). --gray / --gray-2 NON
                redéfinis (anti-override cross-pattern). --blue-light de Claude
                Design fusionné sur --blue-300. Tokens nouveaux (--ink-700,
                --ink-line, --ink-copy, --font-*, --mn-h) ajoutés au :root.
   Contraste signature : en-tête crème, footer encre.
   ============================================================================ */

body.edition .mn-head *, body.edition .ft-foot *{box-sizing:border-box;}

/* ----- EN-TÊTE · .mn- ----- */
body.edition .mn-head{position:sticky;top:0;z-index:200;background:var(--cream);
  border-bottom:2px solid var(--ink);transition:box-shadow .25s ease;}
body.edition .mn-head.is-stuck{box-shadow:0 10px 30px -22px rgba(26,25,22,.45);}

/* Sub-bar fil d'Ariane sous le .mn-head : l'hôte .ehead réduit à la seule
   sub-bar (classe .mn-subbar-host) perd son position:sticky hérité pour défiler
   normalement sous le menu sticky, sans chevauchement de deux contextes
   sticky top:0. Promu en CSS partagé à la clôture 8.A (toutes les instances). */
body.edition .mn-subbar-host{position:static;top:auto;z-index:auto;}
/* align-items:baseline (et non center) : le logo Fraunces 34px et les liens
   serif 18px partagent désormais la même ligne de base, alignement à l'œil
   (étape 8.A.2 patch 1, correction 4a). Repassé en center sous 860px (le burger
   n'a pas de baseline texte, voir @860). */
body.edition .mn-bar{max-width:1120px;margin-inline:auto;padding:22px clamp(20px,4vw,44px);
  display:flex;align-items:baseline;gap:24px;}

body.edition .mn-logo{font-family:var(--font-serif);font-weight:500;font-size:clamp(26px,3vw,34px);
  letter-spacing:-.02em;line-height:1;color:var(--ink);text-decoration:none;flex:none;}

/* margin-left : creuse l'espace logo -> premier lien (était 24px, +18 = ~42px),
   sans toucher au gap (étape 8.A.2 patch 1, correction 4b). Réinitialisé à 0
   sous 860px (la nav devient un tiroir position:fixed). */
body.edition .mn-nav{flex:1;display:flex;align-items:center;gap:clamp(20px,3vw,40px);margin-left:18px;}
body.edition .mn-tail{margin-left:auto;display:flex;align-items:center;gap:clamp(16px,2vw,24px);}

body.edition .mn-link{font-family:var(--font-serif);font-weight:400;font-size:18px;line-height:1;
  color:var(--ink);text-decoration:none;background:none;border:none;padding:6px 2px;cursor:pointer;transition:color .15s ease;}
body.edition .mn-link:hover{color:var(--blue);}
body.edition .mn-link:focus-visible{outline:2px solid var(--blue);outline-offset:3px;border-radius:2px;}

body.edition .mn-secondary{display:flex;align-items:center;gap:9px;}
body.edition .mn-sec-link{font-family:var(--font-mono);font-size:12px;letter-spacing:.04em;
  text-transform:uppercase;color:var(--gray);text-decoration:none;transition:color .15s ease;}
body.edition .mn-sec-link:hover{color:var(--ink);}
body.edition .mn-dot{color:var(--gray-3);}

body.edition .mn-cta{font-family:var(--font-sans);font-size:14px;font-weight:600;color:var(--blue);
  text-decoration:none;padding:10px 18px;border:1.5px solid var(--blue);border-radius:5px;background:transparent;
  white-space:nowrap;transition:background .15s ease,color .15s ease;}
body.edition .mn-cta:hover{background:var(--blue);color:var(--white);}
body.edition .mn-cta:focus-visible{outline:2px solid var(--blue);outline-offset:3px;}

/* déroulant Outils (sombre = rappel du footer) */
body.edition .mn-has-drop{position:relative;}
body.edition .mn-drop-toggle{display:inline-flex;align-items:center;gap:7px;}
body.edition .mn-caret{transition:transform .2s ease;}
body.edition .mn-has-drop.is-open .mn-caret{transform:rotate(180deg);}
body.edition .mn-drop{position:absolute;top:calc(100% + 16px);left:50%;transform:translateX(-50%) translateY(6px);
  min-width:300px;background:var(--ink);border:1px solid var(--ink);border-radius:8px;padding:9px;
  box-shadow:0 24px 56px -26px rgba(26,25,22,.7);opacity:0;visibility:hidden;pointer-events:none;
  transition:opacity .18s ease,transform .18s ease,visibility .18s;}
/* Pont hover : comble le gap de 16px (top:calc(100%+16px)) entre le bouton
   Outils et le panneau, pour que la souris ne quitte pas .mn-has-drop en
   descendant (sinon mouseleave -> fermeture). Transparent, visuel inchangé.
   (étape 8.B phase 1, fix dropdown hover-gap). */
body.edition .mn-drop::before{content:"";position:absolute;left:0;right:0;top:-16px;height:16px;}
body.edition .mn-has-drop.is-open .mn-drop{opacity:1;visibility:visible;pointer-events:auto;transform:translateX(-50%) translateY(0);}
body.edition .mn-drop-item{display:block;padding:11px 13px;border-radius:6px;text-decoration:none;transition:background .13s ease;}
body.edition a.mn-drop-item:hover{background:var(--ink-700);}
body.edition .mn-drop-item:focus-visible{outline:2px solid var(--blue-300);outline-offset:-2px;}
body.edition .mn-drop-t{display:block;font-family:var(--font-sans);font-size:14px;font-weight:600;color:var(--cream);}
body.edition .mn-drop-d{display:block;margin-top:2px;font-family:var(--font-sans);font-size:12.5px;color:var(--gray-3);}
body.edition .mn-drop-item.is-soon{opacity:.5;cursor:default;}
body.edition .mn-badge{font-family:var(--font-mono);font-size:9.5px;letter-spacing:.08em;text-transform:uppercase;
  color:var(--gray-3);border:1px solid rgba(255,255,255,.22);border-radius:3px;padding:1px 5px;margin-left:6px;vertical-align:middle;}

/* burger */
body.edition .mn-burger{display:none;flex-direction:column;justify-content:center;gap:5px;width:30px;height:24px;
  padding:0;background:none;border:none;cursor:pointer;margin-left:auto;}
body.edition .mn-burger span{display:block;height:2px;width:100%;background:var(--ink);border-radius:2px;
  transition:transform .22s ease,opacity .18s ease;}

/* ----- PIED DE PAGE · .ft- (rupture sombre) ----- */
body.edition .ft-foot{background:var(--ink);color:var(--cream);font-family:var(--font-sans);}
body.edition .ft-cta{border-bottom:1px solid var(--ink-line);}
body.edition .ft-cta-inner{max-width:1120px;margin-inline:auto;padding:clamp(44px,5vw,70px) clamp(20px,4vw,44px);
  display:grid;grid-template-columns:1fr auto;gap:34px;align-items:center;}
body.edition .ft-cta-title{font-family:var(--font-serif);font-weight:400;font-size:clamp(28px,3.6vw,48px);
  line-height:1.05;letter-spacing:-.015em;color:var(--white);max-width:16ch;}
body.edition .ft-cta-text{margin-top:12px;font-size:15px;line-height:1.55;color:var(--gray-3);max-width:44ch;}
body.edition .ft-cta-btn{display:inline-flex;align-items:center;gap:9px;font-size:15px;font-weight:600;color:var(--ink);
  text-decoration:none;background:var(--cream);padding:15px 26px;border-radius:5px;white-space:nowrap;transition:background .15s ease;}
body.edition .ft-cta-btn:hover{background:var(--white);}
body.edition .ft-cta-btn:focus-visible{outline:2px solid var(--blue-300);outline-offset:3px;}
body.edition .ft-ar{transition:transform .2s ease;}
body.edition .ft-cta-btn:hover .ft-ar{transform:translateX(3px);}

body.edition .ft-main{max-width:1120px;margin-inline:auto;padding:clamp(40px,4.5vw,56px) clamp(20px,4vw,44px);
  display:grid;grid-template-columns:1.6fr 1fr 1fr 1fr;gap:30px;}
body.edition .ft-brand-logo{font-family:var(--font-serif);font-weight:500;font-size:28px;letter-spacing:-.02em;color:var(--white);}
body.edition .ft-brand-sig{margin-top:14px;font-size:13.5px;line-height:1.6;color:var(--gray-3);max-width:34ch;}
body.edition .ft-brand-sig b{color:var(--cream);font-weight:600;}
body.edition .ft-col-head{font-family:var(--font-mono);font-size:11px;font-weight:500;letter-spacing:.1em;
  text-transform:uppercase;color:var(--blue-300);margin-bottom:15px;}
body.edition .ft-list{list-style:none;margin:0;padding:0;display:grid;gap:11px;}
body.edition .ft-list a{font-size:14px;color:var(--gray-3);text-decoration:none;transition:color .13s ease;}
body.edition .ft-list a:hover{color:var(--white);}
body.edition .ft-list a:focus-visible{outline:2px solid var(--blue-300);outline-offset:3px;border-radius:2px;}

body.edition .ft-legal{border-top:1px solid var(--ink-line);}
body.edition .ft-legal-inner{max-width:1120px;margin-inline:auto;padding:22px clamp(20px,4vw,44px);
  display:flex;flex-wrap:wrap;align-items:center;gap:10px 16px;}
body.edition .ft-copy{font-family:var(--font-mono);font-size:11px;color:var(--ink-copy);}
body.edition .ft-legal-spacer{margin-left:auto;}
body.edition .ft-legal a{font-size:12px;color:var(--gray-3);text-decoration:none;transition:color .13s ease;}
body.edition .ft-legal a:hover{color:var(--white);}
body.edition .ft-legal a:focus-visible{outline:2px solid var(--blue-300);outline-offset:3px;border-radius:2px;}
body.edition .ft-dot{color:#4A5563;}

/* ----- RESPONSIVE menu + footer ----- */
@media (max-width:900px){
  body.edition .ft-main{grid-template-columns:1fr 1fr;gap:30px 26px;}
  body.edition .ft-brand{grid-column:1 / -1;}
  body.edition .ft-cta-inner{grid-template-columns:1fr;gap:24px;}
}
@media (max-width:860px){
  body.edition .mn-bar{align-items:center;}
  body.edition .mn-burger{display:flex;}
  body.edition .mn-nav{position:fixed;inset:var(--mn-h) 0 0 0;flex-direction:column;align-items:stretch;gap:0;margin-left:0;
    background:var(--ink);padding:14px clamp(20px,6vw,28px) 28px;overflow-y:auto;transform:translateX(100%);
    visibility:hidden;transition:transform .28s cubic-bezier(.4,0,.2,1),visibility .28s;}
  body.edition .mn-head.is-nav-open .mn-nav{transform:translateX(0);visibility:visible;}
  body.edition .mn-nav > .mn-link, body.edition .mn-drop-toggle{color:var(--cream);font-size:24px;padding:16px 0;
    border-bottom:1px solid var(--ink-line);width:100%;text-align:left;justify-content:space-between;}
  body.edition .mn-link:hover, body.edition .mn-drop-toggle:hover{color:var(--blue-300);}
  body.edition .mn-has-drop{width:100%;}
  /* Sous-menu Outils mobile (BUG #23) : sous-items indentés, lisibles et tappables. */
  body.edition .mn-drop{position:static;transform:none;min-width:0;width:100%;background:transparent;border:none;
    box-shadow:none;padding:2px 0 6px 16px;margin-top:4px;opacity:1;visibility:visible;pointer-events:auto;max-height:0;overflow:hidden;transition:max-height .28s ease;border-left:2px solid var(--ink-line);}
  /* FIX #23 : annuler le transform de centrage desktop (.mn-has-drop.is-open .mn-drop
     a une spécificité supérieure et décalait le sous-menu de -50% sur mobile). */
  body.edition .mn-has-drop.is-open .mn-drop{max-height:600px;transform:none;left:auto;}
  body.edition .mn-drop-item{min-height:44px;}
  body.edition .mn-drop-item{display:block;padding:13px 0;}
  body.edition a.mn-drop-item:hover{background:transparent;}
  body.edition .mn-drop-t{color:var(--cream);font-size:18px;font-weight:500;}
  body.edition .mn-drop-item.is-soon .mn-drop-t{color:var(--gray-3);}
  body.edition .mn-has-drop.is-open .mn-drop-item:hover .mn-drop-t{color:var(--blue-300);}
  body.edition .mn-drop-d{display:block;color:var(--gray-3);font-size:13px;margin-top:2px;}
  body.edition .mn-tail{margin-left:0;flex-direction:column;align-items:stretch;gap:18px;margin-top:22px;}
  body.edition .mn-secondary{gap:14px;}
  body.edition .mn-sec-link{color:var(--gray-3);font-size:13px;}
  body.edition .mn-sec-link:hover{color:var(--cream);}
  body.edition .mn-dot{color:#4A5563;}
  body.edition .mn-cta{text-align:center;color:var(--cream);border-color:var(--cream);padding:14px;}
  body.edition .mn-cta:hover{background:var(--cream);color:var(--ink);}
  body.edition .mn-head.is-nav-open .mn-burger span:nth-child(1){transform:translateY(7px) rotate(45deg);}
  body.edition .mn-head.is-nav-open .mn-burger span:nth-child(2){opacity:0;}
  body.edition .mn-head.is-nav-open .mn-burger span:nth-child(3){transform:translateY(-7px) rotate(-45deg);}
}
@media (max-width:520px){
  body.edition .ft-main{grid-template-columns:1fr;gap:28px;}
  body.edition .ft-legal-inner{gap:10px 12px;}
  body.edition .ft-legal-spacer{display:none;width:100%;}
  body.edition .ft-copy{width:100%;}
}
@media (prefers-reduced-motion:reduce){
  body.edition .mn-head *, body.edition .ft-foot *{transition:none !important;}
}


/* ============================================================
   2. COMPOSANTS PAGE QUARTIER (scope .edition)
   "ÉDITION" : le journal raffiné (hybride équilibré)
   Fraunces (titres) + Inter (corps) + navy #1B3A5C
   ============================================================ */

body.edition {
  background: var(--cream); color: var(--ink);
  font-family: "Inter", system-ui, sans-serif; font-size: 17px; letter-spacing: -0.003em;
}
.edition ::selection { background: var(--blue); color: #fff; }
.edition h1, .edition h2, .edition h3 { font-family: "Fraunces", Georgia, serif; font-weight: 400; line-height: 1.06; letter-spacing: -0.01em; color: var(--ink); }
.edition p { color: var(--ink-soft); text-wrap: pretty; }
.edition .muted { color: var(--gray); }
.edition .serif { font-family: "Fraunces", serif; }

.edition .eyebrow { font-size: 12px; font-weight: 600; letter-spacing: .16em; text-transform: uppercase; color: var(--blue); }
.edition section { padding-block: clamp(44px, 6vw, 76px); }
.edition .surface { background: var(--white); }
.edition .rule-t { border-top: 1px solid var(--hair); }

.edition .sec-head { display: flex; align-items: baseline; gap: 16px; flex-wrap: wrap; border-bottom: 1px solid var(--gray-3); padding-bottom: 14px; margin-bottom: clamp(24px, 3vw, 36px); }
.edition .sec-head h2 { font-size: clamp(26px, 3.2vw, 38px); }
.edition .sec-head .eyebrow { margin-left: auto; }

/* 1. hero */
.edition .hero {
  /* Resserrement "option 3" (décision 2, étape 7 ter brique C, 2026-06-06) :
     rythme vertical réduit ~30 % pour que le haut de l'estimateur (bloc 2)
     affleure le bas d'un écran 1080p. Valeurs précédentes :
     padding-top clamp(36px,4vw,56px) / padding-bottom clamp(28px,3vw,44px). */
  padding-top: clamp(24px, 2.8vw, 38px);
  padding-bottom: clamp(18px, 2vw, 30px);
}
.edition .hero .eyebrow { display: block; margin-bottom: 10px; }

/* Signature éditoriale de marque (eyebrow-brand).
   Convention permanente : chaque type de page porte sa rubrique signature
   dans l'eyebrow du hero, distincte du surtitre kicker standard.
     - Pages quartier : "Le baromètre immover"
     - Pages ville (à venir, étape 8+) : "L'observatoire immover"
     - Autres types à définir au scaling.
   Différenciation visuelle vs .eyebrow standard :
     - couleur bleu navy (rubrique signature visuelle forte)
     - letter-spacing plus serré (.08em vs .16em) pour souder les mots
   Convention introduite étape 7 bis correction 1, 2026-06-04.
   Couleur révisée en bleu navy (correction 1 vague 2, 2026-06-04). */
.edition .eyebrow.eyebrow-brand {
  color: var(--blue);
  letter-spacing: .08em;
}
.edition .hero h1 { font-size: clamp(34px, 4.8vw, 58px); max-width: none; }
.edition .hero h1 .h1-main { display: block; white-space: nowrap; }
.edition .hero h1 .h1-sub { display: block; font-size: clamp(19px, 2.4vw, 28px); color: var(--gray); margin-top: 6px; white-space: nowrap; }
.edition .hero .deck { font-family: "Fraunces", serif; font-size: clamp(19px, 2.1vw, 24px); color: var(--ink-soft); max-width: 50ch; margin-top: 18px; line-height: 1.34; font-weight: 400; }
.edition .hero .meta { display: flex; gap: 22px; flex-wrap: wrap; margin-top: 12px; font-size: 13px; color: var(--gray); }
.edition .hero .meta b { color: var(--ink); font-weight: 600; }
/* hero-figure : ratio aplati 3/1 (était 16/7 ≈ 2.28) + marge réduite,
   resserrement option 3 (décision 2). Panoramique moins haut, présence
   préservée, pas d'effet bandeau plat. */
.edition .hero-figure { margin-top: clamp(18px, 2.4vw, 28px); aspect-ratio: 3/1; }

/* Variante image (étape 7 bis correction image, 2026-06-04 ; ratio révisé
   3/1 décision 2, 2026-06-06).
   Quand <img> remplace le placeholder <div class="ph">, on force aspect-ratio
   3/1 et object-fit:cover : homogénéise les rendus du scaling étape 8 quelle
   que soit la résolution source. Bordure 1px hair conservée pour cohérence
   avec le pattern .ph (cadre net autour de l'illustration).
   Le placeholder .ph reste en place dans le CSS et utilisable sur les futures
   pages quartier en attente d'illustration : pattern de scaling. */
.edition img.hero-figure {
  display: block;
  width: 100%;
  height: auto;
  aspect-ratio: 3/1;
  object-fit: cover;
  border: 1px solid var(--hair);
}
.edition .meta .m-short { display: none; }
/* Légende hero (cloture etape 7 bis, 2026-06-04) : formule automatisable
   "Illustration du quartier de {NomQuartier}, {Ville}." unifiee desktop
   et mobile. Système cap-full / cap-short retire (vague 4) puisque la
   nouvelle formule courte tient sur 1 ligne en mobile sans bascule. */
.edition .cap { font-size: 12.5px; color: var(--gray); margin-top: 6px; font-style: italic; }

/* Métadonnées : empilement classique sous le bloc titre (patch 4, 2026-06-06).
   La grille meta-sur-titre (@media min-width:761px sur .hero .u-wrap) a été
   retirée : sur les titres longs type quartier ("Prix au m² à Cimiez, Nice"),
   la cohabitation titre + meta à droite était trop serrée. Choix de pilotage :
   meta empilées partout (ville, quartier, arrondissement), desktop et mobile,
   pour la simplicité et la cohérence cross-pages. Le .meta reste en flux normal
   sous le H1 (voir .hero .meta margin-top en début de section hero). */

/* module (estimateur, simulateur) wrapper */
.edition .module { border: 1px solid var(--gray-3); background: var(--white); }
.edition .module .mbar { display: flex; justify-content: space-between; align-items: center; padding: 10px 18px; background: var(--ink); color: #fff; font-size: 11px; letter-spacing: .14em; text-transform: uppercase; font-weight: 600; }
.edition .module .mbar .tagm { color: rgba(255,255,255,.6); letter-spacing: .1em; font-weight: 500; text-transform: none; font-size: 11px; }
.edition .est { display: grid; grid-template-columns: 1fr 1fr; }
.edition .est .col { padding: clamp(22px, 2.8vw, 36px); }
.edition .est .col + .col { border-left: 1px solid var(--hair); }
.edition .est h2 { font-size: clamp(23px, 2.8vw, 30px); margin-bottom: 10px; }
.edition .field { display: grid; gap: 7px; margin-bottom: 16px; }
.edition .field .label { font-size: 12px; font-weight: 600; letter-spacing: .06em; text-transform: uppercase; color: var(--gray); }
.edition .seg { display: flex; }
.edition .seg button { flex: 1; padding: 11px; border: 1px solid var(--gray-3); background: var(--cream); font-weight: 500; font-size: 14px; }
.edition .seg button + button { border-left: 0; }
.edition .seg button.is-on { background: var(--ink); color: #fff; border-color: var(--ink); }
.edition input[type=number], .edition select { width: 100%; padding: 12px; border: 1px solid var(--gray-3); background: var(--white); font-size: 16px; }
.edition .est-out { border-top: 1px solid var(--ink); margin-top: 4px; padding-top: 14px; }
.edition .est-out .big { font-family: "Fraunces", serif; font-size: clamp(32px, 4.2vw, 46px); line-height: 1; display: block; }
.edition .est-out .rng { font-size: 13px; color: var(--gray); margin-top: 8px; }

.edition .btn { display: inline-flex; gap: 9px; align-items: center; justify-content: center; padding: 13px 24px; background: var(--blue); color: #fff; font-weight: 600; text-decoration: none; margin-top: 16px; font-size: 15px; border-radius: 2px; }
.edition .btn:hover { background: var(--blue-700); }
.edition .arrow { transition: transform .2s; } .edition .btn:hover .arrow { transform: translateX(3px); }

/* barres navy (cherrypick B1) */
.bar-track { height: 9px; background: var(--cream-deep); border-radius: 1px; overflow: hidden; }
.bar-track > i { display: block; height: 100%; width: var(--w, 0%); background: var(--blue); }
.bar-track.self > i { background: var(--ink); }

/* 3. prix m² */
.edition .stat-lead { display: grid; grid-template-columns: auto 1fr; gap: clamp(22px, 4vw, 44px); align-items: center; padding-bottom: 22px; border-bottom: 1px solid var(--gray-3); margin-bottom: 22px; }
.edition .stat-lead .big { font-family: "Fraunces", serif; font-size: clamp(58px, 9vw, 104px); line-height: .85; }
.edition .stat-lead .big sup { font-size: .26em; vertical-align: top; color: var(--gray); font-family: "Inter"; font-weight: 500; }
/* desc : pleine largeur du conteneur (décision 1, étape 7 ter brique C,
   2026-06-06). max-width: 38ch retiré : tous les paragraphes textuels des
   pages SEO prennent la pleine largeur (voir doctrine §2.5). */
.edition .stat-lead .desc { font-size: clamp(16px, 1.8vw, 18px); color: var(--ink-soft); }
.edition .pricebars { display: grid; gap: 0; }
.edition .pricebars .pb { display: grid; grid-template-columns: 130px 1fr 92px; gap: 18px; align-items: center; padding: 12px 0; border-bottom: 1px solid var(--hair); }
.edition .pricebars .pb .nm { font-weight: 500; font-size: 15px; }
.edition .pricebars .pb .v { font-family: "Fraunces", serif; font-size: 18px; text-align: right; font-variant-numeric: tabular-nums; }
.edition .secondrow { display: grid; grid-template-columns: repeat(4,1fr); gap: 1px; margin-top: 22px; background: var(--hair); border: 1px solid var(--hair); }
.edition .secondrow .c { background: var(--white); padding: 16px; }
.edition .secondrow .l { font-size: 11px; letter-spacing: .08em; text-transform: uppercase; color: var(--gray-2); }
.edition .secondrow .n { font-family: "Fraunces", serif; font-size: 24px; margin-top: 4px; font-variant-numeric: tabular-nums; }
.edition .secondrow .n.pos { color: var(--pos); }
.edition .secondrow .n.neg { color: var(--neg); }   /* KPI en repli, aligné sur .dl.neg du comparatif (étape 7 ter, A12) */
/* Mention source DVF + lien méthodologie sous le bloc prix (Phase 5). */
.edition .prix-source { margin-top: 18px; font-size: 13px; line-height: 1.55; color: var(--gray); }
.edition .prix-source a { color: var(--blue); text-decoration: underline; text-underline-offset: 2px; text-decoration-color: var(--gray-3); }
.edition .prix-source a:hover { text-decoration-color: var(--blue); }

/* 4. comparatif (barres) */
/* Colonne nom élargie 150 -> 200px (patch 6) : les communes longues du bloc
   ville "{Ville} sur la Côte d'Azur" (Saint-Jean-Cap-Ferrat, Villefranche-sur-Mer)
   tiennent sur 1 ligne (nowrap). La zone des barres (1fr) absorbe les -50px.
   Sur les pages quartier (noms courts), pas de régression : plus d'air à gauche. */
.edition .cmp-row { display: grid; grid-template-columns: 200px 1fr 92px 64px; gap: 16px; align-items: center; padding: 12px 0; border-bottom: 1px solid var(--hair); }
.edition .cmp-row .qn { font-weight: 500; white-space: nowrap; }
.edition .cmp-row.self .qn { font-weight: 600; }
.edition .cmp-row .pv { font-family: "Fraunces", serif; font-size: 18px; text-align: right; font-variant-numeric: tabular-nums; }
.edition .cmp-row .dl { text-align: right; font-size: 13px; font-variant-numeric: tabular-nums; }
.edition .cmp-row .dl.pos { color: var(--pos); } .edition .cmp-row .dl.neg { color: var(--neg); }
.edition .cmp-head { display: grid; grid-template-columns: 200px 1fr 92px 64px; gap: 16px; font-size: 11px; letter-spacing: .08em; text-transform: uppercase; color: var(--gray-2); font-weight: 600; padding-bottom: 9px; border-bottom: 1px solid var(--ink); }
.edition .cmp-head span:nth-child(n+3) { text-align: right; }

/* prose */
.edition .single { max-width: none; } .edition .single p { font-size: 17px; line-height: 1.62; }

/* Bloc Tendance : graphique principal (vague 8, 2026-06-04).
   Composant autonome préfixé .tc-* intégré depuis le standalone Claude Design
   "Variante B : courbe nette, valeur lisible à chaque nœud" (cf.
   clients/immover/audits/2026-05-refonte-cadrage/ pour le standalone source).
   Hérite des variables CSS du SOCLE (--blue, --ink, --hair, --gray-*), pas
   de duplication. Scopé sous .edition pour cohérence avec le reste du CSS.
   Le préfixe .tc-* permet la réutilisation sans collision sur les futures
   pages ville hub / arrondissement à l'étape 8+. */
.edition .tc-card {
  background: var(--white);
  border: 1px solid var(--hair);
  border-radius: 2px;
  padding: clamp(20px, 3vw, 30px) clamp(16px, 2.4vw, 26px) clamp(14px, 2vw, 20px);
}
.edition .tc-fig { margin: 0; }
.edition .tc-svg { display: block; width: 100%; height: auto; overflow: visible; }

.edition .tc-grid { stroke: var(--hair); stroke-width: 1; }
.edition .tc-baseline { stroke: var(--gray-3); stroke-width: 1; }

.edition .tc-ylab {
  font-family: "Inter", sans-serif;
  font-size: 13px;
  font-weight: 400;
  fill: var(--gray-2);
  font-variant-numeric: tabular-nums;
  letter-spacing: .01em;
}
.edition .tc-xlab {
  font-family: "Inter", sans-serif;
  font-size: 13px;
  font-weight: 500;
  fill: var(--gray);
  font-variant-numeric: tabular-nums;
  letter-spacing: .02em;
}

.edition .tc-line {
  fill: none;
  stroke: var(--blue);
  stroke-width: 1.75;
  stroke-linecap: round;
  stroke-linejoin: round;
}
.edition .tc-node { fill: var(--blue); }
.edition .tc-node-hi {
  fill: var(--blue);
  stroke: var(--white);
  stroke-width: 2;
}

.edition .tc-annot {
  font-family: "Inter", sans-serif;
  font-size: 14px;
  font-weight: 500;
  fill: var(--ink);
  font-variant-numeric: tabular-nums;
  letter-spacing: .005em;
}
.edition .tc-annot-sm {
  font-family: "Inter", sans-serif;
  font-size: 13px;
  font-weight: 500;
  fill: var(--ink);
  font-variant-numeric: tabular-nums;
}

.edition .tc-cap {
  margin-top: 14px;
  font-size: 12.5px;
  font-style: italic;
  color: var(--gray);
  line-height: 1.45;
}

.edition .trend-text {
  margin-top: clamp(24px, 4vw, 40px);
}
/* max-width none (vague 7) : pleine largeur conteneur, cohérent avec les
   autres blocs de prose. text-wrap pretty (hérité du standalone vague 8)
   pour une coupure visuelle plus propre. */
.edition .trend-text p {
  font-size: 17px;
  line-height: 1.62;
  max-width: none;
  text-wrap: pretty;
}
.edition .histoire { max-width: none; }
.edition .histoire p { font-size: 17px; line-height: 1.66; }
.edition .histoire p + p { margin-top: 1em; }
.edition .feature { columns: 2; column-gap: clamp(26px,3.5vw,44px); }
.edition .feature p { break-inside: avoid; } .edition .feature p + p { margin-top: 1em; }
.edition .dropcap::first-letter { font-family: "Fraunces", serif; float: left; font-size: 4.2em; line-height: .74; padding-right: .07em; color: var(--blue); }

/* accessibilité */
.edition .access { max-width: none; }
.edition .access li { display: grid; grid-template-columns: 170px 1fr; gap: 22px; padding: 14px 0; border-bottom: 1px solid var(--hair); align-items: baseline; }
.edition .access li span:last-child { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.edition .access .k { font-weight: 600; font-size: 12px; letter-spacing: .05em; text-transform: uppercase; color: var(--blue); padding-top: 2px; }

/* commerces */
.edition .cols3 { display: grid; grid-template-columns: repeat(3,1fr); gap: clamp(24px,3vw,40px); }
.edition .cols3 h3 { font-size: 21px; margin-bottom: 10px; padding-bottom: 10px; border-bottom: 2px solid var(--ink); }
.edition .cols3 p { font-size: 16px; }

/* carte */
.edition .map { border: 1px solid var(--gray-3); aspect-ratio: 16/8; overflow: hidden; background: var(--cream-deep); }
.edition .map iframe { width: 100%; height: 100%; border: 0; filter: grayscale(.55) contrast(.96); }
.edition .map-cap { font-size: 12px; color: var(--gray); font-style: italic; margin-top: 8px; }

/* faq */
.edition [data-faq-item] { border-bottom: 1px solid var(--hair); } .edition [data-faq-item]:first-child { border-top: 0; }
.edition [data-faq-q] { width: 100%; display: flex; justify-content: space-between; gap: 18px; align-items: baseline; text-align: left; padding: 20px 0; }
.edition [data-faq-q] .q { font-family: "Fraunces", serif; font-size: clamp(19px,2.2vw,24px); }
.edition [data-faq-q] .ic { font-size: 24px; color: var(--blue); line-height: 1; }
.edition [data-faq-item].is-open .ic { transform: rotate(45deg); }
.edition [data-faq-a] { max-height: 0; overflow: hidden; transition: max-height .3s; }
.edition [data-faq-item].is-open [data-faq-a] { max-height: 340px; }
/* réponse FAQ : pleine largeur (décision 1, étape 7 ter brique C). max-width:
   66ch retiré : c'était le seul resserrement 66ch du CSS, désormais réservé
   aux futurs articles éditoriaux et non aux pages SEO (voir doctrine §2.5). */
.edition [data-faq-a] p { padding-bottom: 22px; }

/* autres quartiers */
.edition .quartiers { display: grid; grid-template-columns: repeat(3,1fr); border-top: 1px solid var(--hair); border-left: 1px solid var(--hair); }
.edition .quartiers a { display: flex; justify-content: space-between; align-items: baseline; padding: 16px 18px; border-right: 1px solid var(--hair); border-bottom: 1px solid var(--hair); text-decoration: none; }
.edition .quartiers a:hover { background: var(--cream-deep); }
.edition .quartiers .qn { font-family: "Fraunces", serif; font-size: 20px; }
.edition .quartiers .qp { font-size: 14px; color: var(--gray); font-variant-numeric: tabular-nums; }

/* 13. simulateur sliders fins (cherrypick A1) */
.edition .sim { border: 1px solid var(--gray-3); border-left: 4px solid var(--blue); background: var(--white); }
.edition .sim .mbar { background: var(--blue); }
.edition .sim-grid { display: grid; grid-template-columns: 1fr 1fr; }
.edition .sim-grid .col { padding: clamp(22px,2.8vw,36px); }
.edition .sim-grid .col + .col { border-left: 1px solid var(--hair); background: var(--cream); }
.edition .sim h2 { font-size: clamp(23px,2.8vw,30px); margin-bottom: 10px; }
.edition .slider { margin-bottom: 18px; }
.edition .slider .top { display: flex; justify-content: space-between; align-items: baseline; margin-bottom: 8px; }
.edition .slider .lab { font-size: 12px; font-weight: 600; letter-spacing: .05em; text-transform: uppercase; color: var(--gray); }
.edition .slider .echo { font-family: "Fraunces", serif; font-size: 17px; font-variant-numeric: tabular-nums; }
.edition input[type=range] { -webkit-appearance: none; appearance: none; width: 100%; height: 3px; background: var(--gray-3); border-radius: 2px; outline-offset: 6px; }
.edition input[type=range]::-webkit-slider-thumb { -webkit-appearance: none; appearance: none; width: 16px; height: 16px; border-radius: 50%; background: var(--blue); border: 2px solid var(--white); box-shadow: 0 1px 4px rgba(20,30,46,.3); cursor: pointer; }
.edition input[type=range]::-moz-range-thumb { width: 16px; height: 16px; border-radius: 50%; background: var(--blue); border: 2px solid var(--white); cursor: pointer; }
.edition .sim-out { display: grid; gap: 0; }
.edition .sim-out .line { display: flex; justify-content: space-between; align-items: baseline; padding: 11px 0; border-bottom: 1px solid var(--hair); }
.edition .sim-out .line .lab { font-size: 12px; font-weight: 600; letter-spacing: .05em; text-transform: uppercase; color: var(--gray); }
.edition .sim-out .line .v { font-family: "Fraunces", serif; font-size: 17px; font-variant-numeric: tabular-nums; }
.edition .sim-out .net { border-bottom: 0; padding-top: 14px; }
.edition .sim-out .net .v { font-size: 28px; color: var(--blue); }

/* 14. cta final */
.edition .final { background: var(--blue); color: #fff; text-align: center; }
.edition .final .eyebrow { color: rgba(255,255,255,.7); }
.edition .final h2 { color: #fff; font-size: clamp(30px,4.4vw,52px); max-width: 16ch; margin: 12px auto 14px; }
.edition .final p { color: rgba(255,255,255,.78); max-width: 48ch; margin: 0 auto 26px; }
.edition .final .btn-light { display: inline-flex; gap: 10px; align-items: center; padding: 16px 32px; background: #fff; color: var(--blue); font-weight: 600; text-decoration: none; font-size: 16px; border-radius: 2px; }
.edition .final .btn-light:hover { background: var(--cream); }

.edition .foot { border-top: 1px solid var(--gray-3); font-size: 12px; color: var(--gray); }
.edition .foot .u-wrap { padding-block: 26px; display: flex; justify-content: space-between; gap: 16px; flex-wrap: wrap; letter-spacing: .04em; text-transform: uppercase; font-weight: 600; }
.edition .float-cta { border-radius: 2px; font-family: "Inter", sans-serif; }


/* ============================================================
   3. EN-TÊTE REFONDU (étape 7 bis brique B, 2026-06-03)
   Structure 3 zones : gauche (rubriques) + centre (CTA badge) + droite (utilitaires).
   Logo .wm en début de barre. Hamburger mobile sous 860px.
   ============================================================ */

.edition .ehead { background: var(--cream); border-bottom: 1px solid var(--gray-3); position: sticky; top: 0; z-index: 50; }
/* bar : gap augmenté de 22 à 28 pour creuser la respiration entre les 3
   zones (gauche / centre / droite). align-items center + line-heights
   harmonisés assurent un alignement vertical impeccable. */
.edition .ehead .bar { display: flex; align-items: center; gap: 28px; padding-block: 14px; }

.edition .ehead .wm {
  font-family: "Fraunces", serif;
  font-weight: 500;
  font-size: 23px;
  letter-spacing: .01em;
  text-decoration: none;
  color: var(--ink);
  flex-shrink: 0;
}

/* Rubriques principales gauche. gap interne 26 (en harmonie avec bar gap 28).
   line-height aligné sur celui des autres composantes pour baseline visuelle. */
.edition .nav-main { display: flex; align-items: center; gap: 26px; font-size: 14px; font-weight: 500; line-height: 1.2; }
.edition .nav-main .nav-link {
  text-decoration: none;
  color: var(--ink);
  padding: 4px 0;
  background: none;
  border: none;
  font-family: inherit;
  font-size: inherit;
  font-weight: inherit;
  line-height: 1.2;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  gap: 5px;
}
.edition .nav-main .nav-link:hover { color: var(--blue); }
.edition .nav-main .caret {
  font-size: 9px;
  color: var(--gray-2);
  transition: transform .2s;
}
.edition .nav-dropdown:hover .caret,
.edition .nav-dropdown:focus-within .caret { transform: rotate(180deg); color: var(--blue); }

/* Dropdown Outils */
.edition .nav-dropdown { position: relative; }
.edition .nav-submenu {
  position: absolute;
  top: calc(100% + 4px);
  left: -16px;
  min-width: 280px;
  background: var(--white);
  border: 1px solid var(--gray-3);
  padding: 8px 0;
  display: none;
  flex-direction: column;
  box-shadow: 0 8px 28px rgba(20,30,46,.08);
  z-index: 60;
}
.edition .nav-dropdown:hover .nav-submenu,
.edition .nav-dropdown:focus-within .nav-submenu { display: flex; }
.edition .nav-submenu a {
  padding: 10px 18px;
  text-decoration: none;
  color: var(--ink);
  font-size: 14px;
  font-weight: 500;
}
.edition .nav-submenu a:hover {
  background: var(--cream);
  color: var(--blue);
}
.edition .nav-submenu .nav-sep-row {
  height: 1px;
  background: var(--hair);
  margin: 6px 16px;
}
.edition .nav-submenu .nav-strategie {
  padding: 8px 18px 10px;
  font-size: 12px;
  color: var(--gray);
  font-style: italic;
}

/* CTA centre (badge plein). Allégé pour ne pas écraser le menu :
   padding réduit de 14×24 à 9×20, font-size aligné sur nav-main (14px),
   line-height harmonisé pour alignement baseline avec les rubriques.
   margin-inline:auto consomme l'espace libre, ce qui crée la respiration
   visible entre la zone gauche et la zone droite. */
.edition .nav-cta {
  margin-inline: auto;
  display: inline-block;
  padding: 9px 20px;
  background: var(--blue);
  color: #fff;
  font-size: 14px;
  font-weight: 600;
  line-height: 1.2;
  letter-spacing: .01em;
  text-decoration: none;
  border-radius: 6px;
  transition: background .2s;
  flex-shrink: 0;
}
.edition .nav-cta:hover { background: var(--blue-700); color: #fff; }

/* Liens utilitaires droite. line-height harmonisé pour baseline. */
.edition .nav-util { display: flex; align-items: center; gap: 8px; font-size: 13px; line-height: 1.2; color: var(--gray); flex-shrink: 0; }
.edition .nav-util a {
  text-decoration: none;
  color: var(--gray);
  transition: color .2s;
}
.edition .nav-util a:hover { color: var(--ink); }
.edition .nav-util .nav-sep { color: var(--gray-3); }

/* Hamburger mobile (caché desktop) */
.edition .nav-burger {
  display: none;
  flex-direction: column;
  gap: 5px;
  background: none;
  border: none;
  padding: 8px;
  cursor: pointer;
  margin-left: auto;
}
.edition .nav-burger span {
  display: block;
  width: 22px;
  height: 2px;
  background: var(--ink);
}

/* Sub-bar conservée (fil d'Ariane + tag Dossier) */
.edition .ehead .subbar { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding-block: 9px; border-top: 1px solid var(--hair); font-size: 12px; }
.edition .ehead .dossier { font-size: 11px; letter-spacing: .12em; text-transform: uppercase; color: var(--blue); font-weight: 600; }
.edition .crumbs { display: flex; gap: 8px; color: var(--gray); }
.edition .crumbs a { text-decoration: none; }
.edition .crumbs .sep { color: var(--gray-3); }

/* Panneau menu mobile (s'ouvre via hamburger) */
.edition .nav-mobile {
  display: none;
  flex-direction: column;
  padding: 20px clamp(20px, 5vw, 64px) 24px;
  border-top: 1px solid var(--hair);
  background: var(--cream);
}
.edition .nav-mobile.is-open { display: flex; }
.edition .nav-mobile-main a,
.edition .nav-mobile-main .nav-link {
  display: block;
  padding: 16px 0;
  font-size: 17px;
  font-weight: 500;
  text-decoration: none;
  color: var(--ink);
  border-bottom: 1px solid var(--hair);
  background: none;
  width: 100%;
  text-align: left;
  font-family: inherit;
  cursor: pointer;
}
.edition .nav-mobile-sub {
  padding-left: 18px;
  padding-bottom: 6px;
  border-bottom: 1px solid var(--hair);
}
.edition .nav-mobile-sub a {
  display: block;
  padding: 10px 0;
  font-size: 14px;
  color: var(--ink-soft);
  text-decoration: none;
  border: none;
}
.edition .nav-mobile-sub .nav-strategie {
  font-style: italic;
  color: var(--gray);
  font-size: 12px;
  padding-top: 4px;
}
.edition .nav-mobile .nav-cta {
  margin: 22px 0;
  text-align: center;
  display: block;
  font-size: 16px;
  padding: 16px 24px;
}
.edition .nav-mobile-util {
  display: flex;
  gap: 14px;
  justify-content: center;
  align-items: center;
  font-size: 13px;
  color: var(--gray);
  padding-top: 6px;
}
.edition .nav-mobile-util a {
  text-decoration: none;
  color: var(--gray);
}
.edition .nav-mobile-util .nav-sep { color: var(--gray-3); }


/* ============================================================
   4. MARQUEUR DONNÉES INDICATIVES (étape 7 bis brique B)
   Discret, intégré dans l'eyebrow du Bloc 3 prix au m².
   À retirer ou remplacer par la note de source DVF officielle
   à l'étape 8 (pipeline DVF branché).
   ============================================================ */

.edition .eyebrow-note {
  font-weight: 400;
  letter-spacing: .04em;
  color: var(--gray-2);
  text-transform: none;
  font-size: 11px;
  margin-left: 6px;
}


/* ============================================================
   5. RESPONSIVE
   Breakpoints : 860 (bascule mobile en-tête + grilles 2 cols),
                 760 (régime mobile éditorial), 520 (compactage fin).
   ============================================================ */

@media (max-width: 860px) {
  .edition .est, .edition .sim-grid { grid-template-columns: 1fr; }
  .edition .est .col + .col, .edition .sim-grid .col + .col { border-left: 0; border-top: 1px solid var(--hair); }
  .edition .feature { columns: 1; }
  .edition .cols3 { grid-template-columns: 1fr; }
  .edition .secondrow { grid-template-columns: repeat(2,1fr); }
  .edition .quartiers { grid-template-columns: repeat(2,1fr); }

  /* En-tête : bascule en hamburger */
  .edition .nav-main,
  .edition .nav-util { display: none; }
  /* Le badge CTA du header est masqué en mobile pour éviter le doublon avec
     le CTA flottant qui apparaît au scroll (vague 4 finitions mobile,
     2026-06-04). Sélecteur enfant direct .bar > .nav-cta pour ne PAS
     toucher le .nav-cta du panneau hamburger (qui reste visible une fois
     le menu ouvert). */
  .edition .ehead .bar > .nav-cta { display: none; }
  .edition .nav-burger { display: flex; margin-left: auto; }

}
@media (max-width: 760px) {
  /* Fil d'Ariane : scroll horizontal sur mobile (étape 7 ter brique D, patch 3).
     Quand le chemin est long (ex. article "Accueil / Journal / Actualités /
     Taxe foncière à Nice en 2026"), il passait sur 2-3 lignes. Désormais une
     seule ligne, swipe horizontal, scrollbar masquée, padding-right pour
     indiquer le contenu hors écran. Convention transverse à tous les types de
     pages (article, ville, quartier, index Journal). Sur desktop, inchangé. */
  .edition .ehead .subbar .crumbs {
    flex: 1 1 0;
    min-width: 0;
    flex-wrap: nowrap;
    white-space: nowrap;
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
    padding-right: 24px;
  }
  .edition .ehead .subbar .crumbs::-webkit-scrollbar { display: none; }
  .edition .ehead .subbar .crumbs > * { flex-shrink: 0; }

  /* H1 sur une seule ligne en mobile */
  .edition .hero h1 { font-size: clamp(21px, 6.1vw, 40px); }
  .edition .hero h1 .h1-main { white-space: nowrap; }
  .edition .hero h1 .h1-sub { white-space: nowrap; font-size: clamp(14px, 3.6vw, 22px); }
  /* métadonnées chapeau condensées */
  .edition .meta { gap: 0; flex-wrap: nowrap; font-size: 12px; }
  .edition .meta .m-full { display: none; }
  .edition .meta .m-short { display: inline; white-space: nowrap; }
  /* accessibilité : label resserré */
  .edition .access li { grid-template-columns: 130px 1fr; gap: 14px; align-items: center; }
  .edition .access li span:last-child { white-space: normal; overflow: visible; }
  .edition .access .k { padding-top: 0; }
  /* carte : plus grande et plus carrée, légende masquée */
  .edition .map { aspect-ratio: 1 / 1; }
  .edition .map-cap { display: none; }

  /* Eyebrows alignés à gauche sous le titre en mobile.
     Sur desktop l'eyebrow est à droite du H2 sur la même ligne (margin-left:
     auto dans .sec-head .eyebrow). Sur mobile on empile en colonne et on
     remet à gauche.

     Alignement du bord gauche eyebrow / H2 (corrigé patch 8, 2026-06-06,
     MESURÉ au canvas avec les vraies polices, pas estimé).
     Les boîtes de l'eyebrow et du H2 sont déjà parfaitement alignées (même
     bord gauche, vérifié : diff 0px). Le letter-spacing .16em est *trailing*
     (après chaque glyphe), il ne décale PAS le premier caractère : la prémisse
     des patches précédents était fausse. Le seul écart réel est la chasse
     gauche (sidebearing), sous-pixel : H2 Fraunces "T" ≈0,4px, eyebrow Inter
     uppercase ≈0,8px (L/É/P), ≈1,0px (+), ≈0,3px (€). text-indent idéal
     = chasse_H2 - chasse_eyebrow ≈ -0,4px ≈ -.03 à -.04em.
     Les -.16em puis -.1em précédents (≈ -1,9 / -1,2px) sur-tiraient l'eyebrow
     ~1px trop à gauche : C'ÉTAIT LA CAUSE DU DÉCALAGE VISIBLE.
     Patch 9 (finale) : -.04em laissait un résiduel gauche encore visible à
     l'œil sur écran réel (au-delà de ce que la mesure canvas reproduisait :
     optical-sizing Fraunces / DPR / hinting non captés). Nudge de +0,03em vers
     la droite après retour visuel : valeur portée à -.01em. Un em fixe ne peut
     être pixel-parfait pour tous les glyphes initiaux (chasses différentes),
     mais on est désormais au plus près de l'alignement pour les eyebrows réels.
     Reset margin/padding pour éliminer tout résiduel d'un user-agent stylesheet. */
  .edition .sec-head {
    flex-direction: column;
    align-items: flex-start;
    gap: 8px;
  }
  .edition .sec-head .eyebrow {
    display: block;
    margin: 0;
    padding: 0;
    text-indent: -.01em;
  }
  .edition .sec-head h2 {
    margin: 0;
    padding: 0;
  }

  /* Graphique Tendance .tc-* : compensation font-sizes SVG en mobile
     (vague 8, intégration variante B Claude Design ; relevé à 22px au patch 5,
     2026-06-06, suite audit visuel : 18px restait trop petit sur mobile).
     Avec viewBox 960x300 ramené à ~360px de largeur réelle (scale ~0.375),
     les font-sizes 13/14 desktop deviendraient illisibles (5 px visibles).
     22px en unités viewBox donne ~8,3 px visibles à l'écran (+22 % vs 18px).
     Padding card réduit pour gagner de la place utile au graphique. */
  .edition .tc-ylab,
  .edition .tc-xlab,
  .edition .tc-annot,
  .edition .tc-annot-sm { font-size: 22px; }
  /* padding-left élargi (24px) sur mobile (patch 6) : à 22px, les labels Y
     (« 5 250 € »…) ancrés à x=44 dans le viewBox débordaient vers la gauche
     et se collaient au bord. Les 22px sont conservés (lisibilité), la marge
     gauche de la card leur donne l'espace. Right/bottom inchangés. */
  .edition .tc-card { padding: 18px 12px 14px 24px; }
}
@media (max-width: 520px) {
  .edition .stat-lead { grid-template-columns: 1fr; gap: 14px; }
  .edition .secondrow { grid-template-columns: repeat(2,1fr); }
  .edition .quartiers { grid-template-columns: 1fr; }
  /* prix au m² : lignes compactes sur une seule ligne (barre incluse) */
  .edition .pricebars .pb { grid-template-columns: 92px 1fr 64px; gap: 12px; padding: 9px 0; }
  .edition .pricebars .pb .nm { font-size: 13.5px; }
  .edition .pricebars .pb .v { font-size: 15px; }
  .edition .secondrow .c { padding: 13px; }
  .edition .secondrow .n { font-size: 20px; }
  .edition .cmp-row, .edition .cmp-head { grid-template-columns: 1fr 78px 56px; }
  .edition .cmp-row .bar-track, .edition .cmp-head span:nth-child(2) { display: none; }
  /* sur très petit écran, la colonne nom passe en 1fr : on autorise le retour
     à la ligne des communes longues (patch 6) pour éviter tout débordement
     (le nowrap desktop ne s'applique plus ici). */
  .edition .cmp-row .qn { white-space: normal; }
}


/* ============================================================================
   CONSOLIDATION ÉTAPE 8.B (phase 1, tâche 2) — 2026-06-10
   Règles déplacées verbatim depuis les blocs <style> inline des instances
   figées, dédupliquées, regroupées par famille de pattern. Scope .edition
   conservé. Append en fin de fichier = ordre de cascade préservé.
   ============================================================================ */

/* ===== PATTERN ACCUEIL (.hm-*) ===== */
.edition .hm-trust-band { padding-top: 0; padding-bottom: clamp(28px, 4vw, 44px); }
.edition .hm-trust { display: grid; grid-template-columns: repeat(4, 1fr); gap: clamp(16px, 2.6vw, 36px); border-top: 1px solid var(--gray-3); border-bottom: 1px solid var(--gray-3); padding-block: clamp(20px, 2.6vw, 28px); }
.edition .hm-trust-item { display: flex; flex-direction: column; gap: 6px; }
.edition .hm-trust-v { font-family: "Fraunces", Georgia, serif; font-size: clamp(22px, 2.6vw, 30px); line-height: 1; letter-spacing: -.01em; color: var(--ink); }
.edition .hm-trust-l { font-size: 13px; line-height: 1.4; color: var(--gray); }
.edition .hm-cities { display: grid; grid-template-columns: repeat(3, 1fr); gap: clamp(14px, 1.8vw, 20px); }
.edition .hm-city { display: flex; flex-direction: column; gap: 8px; background: var(--cream); border: 1px solid var(--hair); border-radius: 2px; padding: clamp(16px, 2vw, 22px); text-decoration: none; color: inherit; transition: border-color .2s ease, box-shadow .2s ease, background .2s ease; }
.edition .hm-city:hover { border-color: var(--gray-3); background: var(--cream-deep); box-shadow: 0 6px 20px rgba(20,30,46,.05); }
.edition .hm-city:focus-visible { outline: 2px solid var(--blue); outline-offset: 2px; }
.edition .hm-city-top { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; }
.edition .hm-city-n { font-family: "Fraunces", Georgia, serif; font-size: 22px; line-height: 1.1; letter-spacing: -.01em; color: var(--ink); }
.edition .hm-city:hover .hm-city-n { text-decoration: underline; text-underline-offset: 3px; text-decoration-color: var(--gray-3); }
.edition .hm-city-e { font-size: 14px; font-weight: 500; font-variant-numeric: tabular-nums; white-space: nowrap; }
.edition .hm-city-e.pos { color: var(--pos); }
.edition .hm-city-e.neg { color: var(--neg); }
.edition .hm-city-e.flat { color: var(--blue-300); }
.edition .hm-city-p { font-size: 15px; color: var(--gray); font-variant-numeric: tabular-nums; }
.edition .hm-city-more { margin-top: 6px; font-size: 13px; font-weight: 600; color: var(--blue); }
.edition .hm-cities-foot { margin-top: clamp(20px, 2.6vw, 28px); }
.edition .hm-link-more { font-size: 14px; font-weight: 600; color: var(--blue); text-decoration: none; }
.edition .hm-link-more:hover { text-decoration: underline; text-underline-offset: 3px; }
.edition .hm-step-num { display: block; font-family: "Fraunces", Georgia, serif; font-size: clamp(34px, 4vw, 46px); line-height: 1; letter-spacing: -.01em; color: var(--gray-3); margin-bottom: 12px; }
.edition .hm-journal-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: clamp(16px, 2vw, 24px); }
.edition .hm-journal-foot { margin-top: clamp(20px, 2.6vw, 28px); }
.edition .hm-sign { margin-top: clamp(18px, 2.4vw, 26px); padding-top: 16px; border-top: 1px solid var(--hair); font-size: 14px; color: var(--gray); }
.edition .hm-sign b { color: var(--ink); font-weight: 600; }
@media (max-width: 860px) {
  .edition .hm-cities { grid-template-columns: repeat(2, 1fr); }
  .edition .hm-journal-grid { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 760px) {
  .edition .hm-trust { grid-template-columns: repeat(2, 1fr); gap: 18px clamp(16px, 4vw, 28px); }
}
@media (max-width: 520px) {
  .edition .hm-cities { grid-template-columns: 1fr; }
  .edition .hm-journal-grid { grid-template-columns: 1fr; }
}

/* ===== PATTERN JOURNAL — cartes & index (.jx-*) ===== */
.edition .jx-kicker { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.edition .jx-cat { font-size: 11px; font-weight: 600; letter-spacing: .1em; text-transform: uppercase; color: var(--blue); }
.edition .jx-kicker-sep { color: var(--gray-3); font-size: 11px; }
.edition .jx-loc-tag { font-size: 11px; font-weight: 600; letter-spacing: .08em; text-transform: uppercase; color: var(--gray-2); }
.edition .jx-card-fig.ph { border: 0; border-bottom: 1px solid var(--hair); }
.edition .jx-card { display: flex; flex-direction: column; background: var(--white); border: 1px solid var(--hair); border-radius: 2px; overflow: hidden; text-decoration: none; color: inherit; transition: border-color .2s ease, box-shadow .2s ease; }
.edition .jx-card:hover { border-color: var(--gray-3); box-shadow: 0 6px 20px rgba(20,30,46,.05); }
.edition .jx-card:focus-visible { outline: 2px solid var(--blue); outline-offset: 2px; }
.edition .jx-card-fig { aspect-ratio: 3 / 2; }
.edition .jx-card-body { display: flex; flex-direction: column; flex: 1; padding: clamp(16px, 2vw, 22px); }
.edition .jx-card-title { font-family: "Fraunces", Georgia, serif; font-size: 19px; line-height: 1.2; letter-spacing: -.01em; color: var(--ink); margin-top: 11px; }
.edition .jx-card:hover .jx-card-title { text-decoration: underline; text-underline-offset: 2px; text-decoration-color: var(--gray-3); }
.edition .jx-card-deck { font-size: 14px; line-height: 1.55; color: var(--gray); margin-top: 9px; }
.edition .jx-card-foot { margin-top: auto; padding-top: 15px; font-size: 12.5px; color: var(--gray); font-variant-numeric: tabular-nums; }
.edition .jx-filterbar { padding-top: 0; padding-bottom: clamp(28px, 4vw, 44px); }
.edition .jx-filters { display: flex; align-items: center; justify-content: space-between; gap: 14px 20px; flex-wrap: wrap; border-top: 1px solid var(--gray-3); border-bottom: 1px solid var(--gray-3); padding-block: 12px; }
.edition .jx-tabs { display: flex; gap: 4px; min-width: 0; }
.edition .jx-tab { font-family: inherit; font-size: 14px; font-weight: 500; line-height: 1; color: var(--gray); background: transparent; border: 0; border-radius: 2px; padding: 9px 14px; cursor: pointer; white-space: nowrap; letter-spacing: -.003em; transition: color .15s ease, background .15s ease; }
.edition .jx-tab:hover { color: var(--ink); background: var(--cream-deep); }
.edition .jx-tab.is-on { color: var(--white); background: var(--ink); }
.edition .jx-zone + .jx-zone { margin-top: clamp(40px, 5.5vw, 68px); }
.edition .jx-zone .sec-head { margin-bottom: clamp(20px, 2.6vw, 30px); }
.edition .jx-feature-fig.ph, .edition .jx-card-fig.ph { border: 0; border-bottom: 1px solid var(--hair); }
.edition .jx-feature { display: block; background: var(--white); border: 1px solid var(--gray-3); border-radius: 2px; overflow: hidden; text-decoration: none; color: inherit; transition: border-color .2s ease, box-shadow .2s ease; }
.edition .jx-feature:hover { border-color: var(--gray-2); box-shadow: 0 8px 28px rgba(20,30,46,.06); }
.edition .jx-feature:focus-visible { outline: 2px solid var(--blue); outline-offset: 2px; }
.edition .jx-feature-fig { aspect-ratio: 3 / 1; }
.edition .jx-feature-body { padding: clamp(24px, 3.6vw, 44px); }
.edition .jx-feature-title { font-family: "Fraunces", Georgia, serif; font-size: clamp(28px, 3.6vw, 44px); line-height: 1.08; letter-spacing: -.01em; color: var(--ink); margin-top: 13px; max-width: 22ch; }
.edition .jx-feature:hover .jx-feature-title { text-decoration: underline; text-underline-offset: 3px; text-decoration-color: var(--gray-3); }
.edition .jx-feature-deck { font-size: 18px; line-height: 1.6; color: var(--ink-soft); margin-top: 14px; max-width: 62ch; }
.edition .jx-feature-foot { display: flex; align-items: center; justify-content: space-between; gap: 12px 22px; margin-top: 22px; flex-wrap: wrap; }
.edition .jx-feature-byline { font-size: 13px; color: var(--gray); }
.edition .jx-feature-byline b { color: var(--ink); font-weight: 600; }
.edition .jx-feature-more { font-size: 14px; font-weight: 600; color: var(--blue); white-space: nowrap; }
.edition .jx-mid-grid, .edition .jx-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: clamp(18px, 2.4vw, 26px); }
.edition .jx-mid .jx-card-title { font-size: 22px; }
.edition .jx-mid .jx-card-deck { font-size: 15px; }
.edition .jx-empty { display: none; padding: clamp(36px, 6vw, 64px) 0; text-align: center; font-size: 16px; color: var(--gray); }
.edition .jx-empty.is-on { display: block; }
.edition .jx-pagination { display: flex; align-items: center; justify-content: center; gap: 18px; margin-top: clamp(36px, 5vw, 56px); padding-top: clamp(24px, 3vw, 32px); border-top: 1px solid var(--hair); }
.edition .jx-page-info { font-size: 13px; letter-spacing: .04em; text-transform: uppercase; font-weight: 600; color: var(--gray-2); font-variant-numeric: tabular-nums; }
.edition .jx-page-btn { font-family: inherit; font-size: 14px; font-weight: 600; color: var(--gray-3); background: transparent; border: 1px solid var(--hair); border-radius: 2px; padding: 10px 18px; cursor: not-allowed; }
.edition .jx-page-btn[aria-disabled="true"] { pointer-events: none; }
@media (max-width: 860px) {
  .edition .jx-mid-grid, .edition .jx-grid { grid-template-columns: repeat(2, 1fr); }
  .edition .jx-mid .jx-card-title { font-size: 20px; }
}
@media (max-width: 760px) {
  
  .edition .jx-tabs { overflow-x: auto; flex-wrap: nowrap; scrollbar-width: none; margin-inline: calc(-1 * clamp(20px, 5vw, 64px)); padding-inline: clamp(20px, 5vw, 64px); }
  .edition .jx-tabs::-webkit-scrollbar { display: none; }
  .edition .jx-filters { flex-wrap: wrap; }
  .edition .jx-feature-deck { font-size: 17px; }
}
@media (max-width: 520px) {
  .edition .jx-mid-grid, .edition .jx-grid { grid-template-columns: 1fr; }
  .edition .jx-feature-title { font-size: clamp(24px, 7vw, 32px); }
}

/* ===== PATTERN ARTICLE (.art-*) ===== */
.edition .art-kicker { display: flex; align-items: center; flex-wrap: wrap; gap: 8px 10px; margin-bottom: 10px; }
.edition .art-kicker .eyebrow-brand { display: inline; margin-bottom: 0; }
.edition .art-kicker-sep { color: var(--gray-3); font-size: 12px; }
.edition .art-kicker-loc { font-size: 12px; font-weight: 600; letter-spacing: .08em; text-transform: uppercase; color: var(--blue); text-decoration: none; }
.edition .art-kicker-loc:hover { text-decoration: underline; text-underline-offset: 2px; }
.edition .art-byline { display: flex; align-items: center; gap: 12px; margin-top: 22px; }
.edition .art-byline-photo { width: 36px; height: 36px; border-radius: 50%; flex-shrink: 0; background: var(--cream-deep); border: 1px solid var(--gray-3); }
.edition .art-byline-author { font-size: 15px; color: var(--ink); }
.edition .art-byline-author b { font-weight: 600; }
.edition .art-byline-meta { font-size: 13px; color: var(--gray); margin-top: 3px; }
.edition .art-prose .art-sec > p { font-size: 18px; line-height: 1.78; color: var(--ink-soft); margin-top: 1.5em; }
.edition .art-prose a { color: var(--blue); font-weight: 500; text-decoration: underline; text-underline-offset: 2px; text-decoration-color: var(--gray-3); }
.edition .art-prose a:hover { text-decoration-color: var(--blue); }
.edition .art-prose .dropcap::first-letter {  }
.edition .art-sec { scroll-margin-top: 92px; margin-top: clamp(40px, 5vw, 60px); }
.edition .art-sec > h2 { font-size: clamp(25px, 2.9vw, 33px); border-top: 1px solid var(--hair); padding-top: clamp(28px, 3.4vw, 38px); margin-bottom: .15em; }
.edition .art-sec h3 { font-size: 20px; margin-top: 1.7em; margin-bottom: .35em; color: var(--ink); }
.edition .art-prose ul.art-list { margin: 1.2em 0; }
.edition .art-prose ul.art-list li { position: relative; padding-left: 22px; margin-top: .75em; font-size: 18px; line-height: 1.68; color: var(--ink-soft); }
.edition .art-prose ul.art-list li::before { content: ""; position: absolute; left: 3px; top: .62em; width: 6px; height: 6px; background: var(--blue); border-radius: 50%; }
.edition .art-keypoints { margin-top: clamp(28px, 4vw, 40px); background: var(--white); border: 1px solid var(--gray-3); border-radius: 2px; padding: clamp(22px, 3vw, 30px); }
.edition .art-keypoints ul, .edition .art-sources ul, .edition .art-toc ol { list-style: none; margin: 0; padding: 0; }
.edition .art-keypoints .art-kp-lbl { display: block; font-size: 12px; font-weight: 600; letter-spacing: .16em; text-transform: uppercase; color: var(--blue); margin-bottom: 16px; }
.edition .art-keypoints ul { display: grid; gap: 13px; }
.edition .art-keypoints li { position: relative; padding-left: 28px; font-size: 16px; line-height: 1.5; color: var(--ink); }
.edition .art-keypoints li::before { content: ""; position: absolute; left: 2px; top: calc(0.75em - 4px); width: 13px; height: 7px; border-left: 2px solid var(--blue); border-bottom: 2px solid var(--blue); transform: rotate(-45deg); }
.edition .art-toc { margin-top: clamp(26px, 3.4vw, 36px); background: var(--white); border: 1px solid var(--hair); border-radius: 2px; padding: clamp(18px, 2.4vw, 24px) clamp(22px, 3vw, 30px) clamp(10px, 1.6vw, 14px); }
.edition .art-toc .art-toc-lbl { display: block; font-size: 12px; font-weight: 600; letter-spacing: .16em; text-transform: uppercase; color: var(--blue); margin-bottom: 6px; }
.edition .art-toc ol { counter-reset: toc; }
.edition .art-toc li { counter-increment: toc; border-top: 1px solid var(--hair); }
.edition .art-toc li:first-child { border-top: 0; }
.edition .art-toc a { display: flex; gap: 14px; align-items: baseline; padding: 11px 0; text-decoration: none; color: var(--ink); font-size: 15px; }
.edition .art-toc a::before { content: counter(toc, decimal-leading-zero); color: var(--blue); font-weight: 600; font-size: 12px; font-variant-numeric: tabular-nums; min-width: 20px; }
.edition .art-toc a:hover { color: var(--blue); }
.edition .art-answer { background: var(--cream-deep); border-left: 3px solid var(--blue); border-radius: 0 2px 2px 0; padding: 16px 20px; margin: 1.5em 0; }
.edition .art-answer .art-answer-lbl { display: block; font-size: 11px; font-weight: 600; letter-spacing: .1em; text-transform: uppercase; color: var(--blue); margin-bottom: 6px; }
.edition .art-answer p { font-size: 16px; line-height: 1.6; color: var(--ink); margin: 0; }
.edition .art-table-wrap { margin: 1.6em 0; border: 1px solid var(--hair); border-radius: 2px; overflow-x: auto; }
.edition .art-table { width: 100%; border-collapse: collapse; font-size: 15px; background: var(--white); }
.edition .art-table thead th { text-align: left; font-size: 11px; letter-spacing: .06em; text-transform: uppercase; color: var(--gray-2); font-weight: 600; padding: 12px 16px; border-bottom: 1px solid var(--ink); white-space: nowrap; }
.edition .art-table tbody td { padding: 12px 16px; border-bottom: 1px solid var(--hair); color: var(--ink-soft); }
.edition .art-table tbody tr:last-child td { border-bottom: 0; }
.edition .art-table tbody td:nth-child(n+2) { font-variant-numeric: tabular-nums; }
.edition .art-table tr.art-table-total td { font-weight: 600; color: var(--ink); background: var(--cream); border-top: 1px solid var(--gray-3); }
.edition .art-note { background: var(--white); border: 1px solid var(--hair); border-radius: 2px; padding: 16px 20px; margin: 1.6em 0; }
.edition .art-note .art-note-t { display: block; font-weight: 600; color: var(--ink); margin-bottom: 6px; font-size: 15px; }
.edition .art-note p { font-size: 15px; line-height: 1.6; color: var(--ink-soft); margin: 0; }
.edition .art-note .art-note-src { display: block; margin-top: 8px; font-size: 12.5px; font-style: italic; color: var(--gray); }
.edition .art-note.art-note-expert { border-left: 3px solid var(--blue); }
.edition .art-note.art-note-expert .art-note-t { color: var(--blue); text-transform: uppercase; font-size: 11px; letter-spacing: .1em; }
.edition .art-pull { margin: 1.9em 0; padding-left: 24px; border-left: 3px solid var(--blue); }
.edition .art-pull p { font-family: "Fraunces", Georgia, serif; font-size: clamp(21px, 2.5vw, 27px); line-height: 1.32; color: var(--ink); font-weight: 400; }
.edition .art-simu { background: var(--white); border: 1px solid var(--gray-3); border-left: 4px solid var(--blue); border-radius: 2px; padding: clamp(22px, 3vw, 30px); margin: 1.7em 0; }
.edition .art-simu .art-simu-t { font-family: "Fraunces", Georgia, serif; font-size: 22px; margin-bottom: 6px; }
.edition .art-simu .art-simu-help { font-size: 14px; color: var(--gray); margin-bottom: 18px; line-height: 1.5; }
.edition .art-simu .art-simu-field { display: grid; gap: 7px; margin-bottom: 18px; }
.edition .art-simu label { font-size: 12px; font-weight: 600; letter-spacing: .06em; text-transform: uppercase; color: var(--gray); }
.edition .art-simu .art-simu-out { border-top: 1px solid var(--ink); padding-top: 6px; }
.edition .art-simu .line { display: flex; justify-content: space-between; align-items: baseline; padding: 11px 0; border-bottom: 1px solid var(--hair); }
.edition .art-simu .line .lab { font-size: 12px; font-weight: 600; letter-spacing: .05em; text-transform: uppercase; color: var(--gray); }
.edition .art-simu .line .v { font-family: "Fraunces", Georgia, serif; font-size: 17px; font-variant-numeric: tabular-nums; }
.edition .art-simu .line.art-simu-hl { border-bottom: 0; padding-top: 14px; }
.edition .art-simu .line.art-simu-hl .v { font-size: 28px; color: var(--blue); }
.edition .art-simu .art-simu-note { font-size: 12.5px; color: var(--gray); line-height: 1.5; margin-top: 14px; font-style: italic; }
.edition .art-sources { margin-top: clamp(40px, 5vw, 56px); }
.edition .art-sources ul { border-top: 1px solid var(--hair); }
.edition .art-sources li { display: flex; justify-content: space-between; gap: 16px; align-items: baseline; padding: 11px 0; border-bottom: 1px solid var(--hair); font-size: 14px; }
.edition .art-sources .art-src-n { color: var(--ink-soft); }
.edition .art-sources .art-src-n a { color: var(--blue); text-decoration: none; }
.edition .art-sources .art-src-n a:hover { text-decoration: underline; }
.edition .art-sources .art-src-t { font-size: 11px; color: var(--gray-2); text-transform: uppercase; letter-spacing: .04em; white-space: nowrap; flex-shrink: 0; }
.edition .art-author { display: flex; gap: clamp(18px, 3vw, 28px); align-items: flex-start; background: var(--cream-deep); border-radius: 2px; padding: clamp(24px, 3.5vw, 36px); margin-top: clamp(40px, 6vw, 64px); }
.edition .art-author .art-author-photo { width: 84px; height: 84px; border-radius: 50%; flex-shrink: 0; display: grid; place-items: center; background: var(--cream); border: 1px solid var(--gray-3); font-family: "Fraunces", Georgia, serif; font-size: 30px; color: var(--blue); object-fit: cover; }
.edition .art-author .art-author-lbl { display: block; font-size: 11px; font-weight: 600; letter-spacing: .16em; text-transform: uppercase; color: var(--blue); margin-bottom: 7px; }
.edition .art-author .art-author-name { font-family: "Fraunces", Georgia, serif; font-size: 22px; }
.edition .art-author .art-author-role { font-size: 14px; color: var(--gray); margin-top: 2px; }
.edition .art-author .art-author-bio { font-size: 15px; line-height: 1.62; color: var(--ink-soft); margin-top: 12px; }
.edition .art-author .art-author-link { display: inline-flex; align-items: center; gap: 7px; margin-top: 14px; font-size: 14px; font-weight: 600; color: var(--blue); text-decoration: none; }
.edition .art-author .art-author-link:hover { color: var(--blue-700); text-decoration: underline; }
.edition .art-related .art-rel-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: clamp(16px, 2vw, 22px); }
.edition .art-rel-card { display: flex; flex-direction: column; background: var(--white); border: 1px solid var(--hair); border-radius: 2px; padding: clamp(20px, 2.6vw, 26px); text-decoration: none; transition: border-color .2s; }
.edition .art-rel-card:hover { border-color: var(--gray-3); }
.edition .art-rel-cat { font-size: 11px; font-weight: 600; letter-spacing: .1em; text-transform: uppercase; color: var(--blue); margin-bottom: 12px; }
.edition .art-rel-title { font-family: "Fraunces", Georgia, serif; font-size: 19px; line-height: 1.2; color: var(--ink); }
.edition .art-rel-exc { font-size: 14px; line-height: 1.55; color: var(--gray); margin-top: 11px; }
.edition .art-rel-more { margin-top: auto; padding-top: 16px; font-size: 13px; font-weight: 600; color: var(--blue); }
@media (max-width: 760px) {
  .edition .art-author { flex-direction: column; gap: 16px; }
  .edition .art-sec > p, .edition .art-prose ul.art-list li { font-size: 17px; }
  .edition .art-keypoints li { font-size: 15px; }

  
  .edition .art-table-wrap { border: 0; overflow: visible; margin: 1.4em 0; }
  .edition .art-table, .edition .art-table tbody, .edition .art-table tr, .edition .art-table td { display: block; width: 100%; }
  .edition .art-table thead { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
  .edition .art-table tr { border: 1px solid var(--hair); border-radius: 2px; background: var(--white); padding: 14px 16px; margin-bottom: 12px; }
  .edition .art-table tr:last-child { margin-bottom: 0; }
  .edition .art-table tr.art-table-total { background: var(--cream); border-color: var(--gray-3); }
  .edition .art-table td { padding: 0; border: 0; }
  .edition .art-table td:first-child { font-family: "Fraunces", Georgia, serif; font-size: 18px; color: var(--ink); margin-bottom: 8px; padding-bottom: 8px; border-bottom: 1px solid var(--hair); }
  .edition .art-table td:not(:first-child) { display: flex; justify-content: space-between; align-items: baseline; gap: 16px; margin-top: 7px; }
  .edition .art-table td:not(:first-child)::before { content: attr(data-label); font-size: 11px; font-weight: 600; letter-spacing: .04em; text-transform: uppercase; color: var(--gray-2); flex-shrink: 0; }

  
  .edition .art-related .art-rel-grid {
    display: flex;
    overflow-x: auto;
    scroll-snap-type: x mandatory;
    gap: 14px;
    -webkit-overflow-scrolling: touch;
    margin-inline: calc(-1 * clamp(20px, 5vw, 64px));
    padding-inline: clamp(20px, 5vw, 64px);
    scrollbar-width: none;
  }
  .edition .art-related .art-rel-grid::-webkit-scrollbar { display: none; }
  .edition .art-rel-card { flex: 0 0 80%; scroll-snap-align: start; }
}
@media (max-width: 760px) {
  .edition .art-author { flex-direction: column; gap: 16px; }
}

/* ===== PATTERN PRIX M² FRANCE (.ix-*, carte choroplèthe .ix-map-*) ===== */
.edition .ix-map-card { background: var(--white); border: 1px solid var(--hair); border-radius: 2px; padding: clamp(18px, 2.6vw, 30px); }
.edition .ix-map-wrap { position: relative; width: 100%; max-width: 600px; margin: 0 auto; }
.edition .ix-map-svg { display: block; width: 100%; height: auto; overflow: visible; }
.edition .ix-region { cursor: pointer; }
.edition .ix-region[data-active="true"] { cursor: pointer; }
.edition .ix-region path { stroke: var(--hair); stroke-width: 1; stroke-linejoin: round; transition: filter .18s ease, stroke .18s ease; }
.edition .ix-region.lv1 path { fill: var(--blue-tint); }
.edition .ix-region.lv2 path { fill: var(--blue-300); }
.edition .ix-region.lv3 path { fill: var(--blue); }
.edition .ix-region.lv4 path { fill: var(--blue-700); }
.edition .ix-region:hover path,
.edition .ix-region:focus-visible path { filter: brightness(1.14); stroke: var(--blue); stroke-width: 1.6; }
.edition .ix-region:focus { outline: none; }
.edition .ix-map-tip { position: absolute; left: 0; top: 0; background: var(--ink); color: #fff; padding: 7px 12px; border-radius: 3px; font-size: 13px; line-height: 1.32; white-space: nowrap; pointer-events: none; opacity: 0; transition: opacity .15s ease; z-index: 5; display: flex; flex-direction: column; gap: 1px; box-shadow: 0 6px 20px rgba(20,30,46,.24); }
.edition .ix-map-tip.is-on { opacity: 1; }
.edition .ix-tip-n { font-weight: 600; }
.edition .ix-tip-p { color: rgba(255,255,255,.72); font-variant-numeric: tabular-nums; }
.edition .ix-legend { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px 18px; margin-top: clamp(20px, 2.6vw, 28px); padding-top: 18px; border-top: 1px solid var(--hair); }
.edition .ix-legend-item { display: flex; align-items: center; gap: 8px; font-size: 13px; color: var(--gray); }
.edition .ix-swatch { width: 16px; height: 16px; border-radius: 3px; flex-shrink: 0; border: 1px solid rgba(26,25,22,.10); }
.edition .ix-swatch.lv1 { background: var(--blue-tint); }
.edition .ix-swatch.lv2 { background: var(--blue-300); }
.edition .ix-swatch.lv3 { background: var(--blue); }
.edition .ix-swatch.lv4 { background: var(--blue-700); }
.edition .ix-map-foot { margin-top: clamp(16px, 2vw, 22px); }
.edition .ix-top { display: grid; grid-template-columns: 1fr 1fr; gap: clamp(22px, 3.4vw, 48px); margin-top: clamp(20px, 3vw, 32px); }
.edition .ix-top-col h3 { font-size: 21px; margin-bottom: 4px; padding-bottom: 12px; border-bottom: 2px solid var(--ink); }
.edition .ix-rank { display: flex; flex-direction: column; }
.edition .ix-rank-row { display: grid; grid-template-columns: 22px 1fr auto auto; gap: 8px 14px; align-items: baseline; padding: 13px 2px; border-bottom: 1px solid var(--hair); text-decoration: none; color: inherit; transition: background .18s ease; }
.edition .ix-rank-row:hover { background: var(--cream); }
.edition .ix-rank-row:focus-visible { outline: 2px solid var(--blue); outline-offset: 2px; }
.edition .ix-rank-num { font-family: "Fraunces", Georgia, serif; font-size: 15px; color: var(--gray-3); font-variant-numeric: tabular-nums; }
.edition .ix-rank-n { font-weight: 500; font-size: 16px; }
.edition .ix-rank-row:hover .ix-rank-n { text-decoration: underline; text-underline-offset: 3px; text-decoration-color: var(--gray-3); }
.edition .ix-rank-p { font-family: "Fraunces", Georgia, serif; font-size: 18px; text-align: right; font-variant-numeric: tabular-nums; white-space: nowrap; }
.edition .ix-rank-e { font-size: 13px; font-weight: 500; text-align: right; font-variant-numeric: tabular-nums; white-space: nowrap; min-width: 56px; }
.edition .ix-rank-e.pos { color: var(--pos); }
.edition .ix-rank-e.neg { color: var(--neg); }
.edition .ix-rank-e.flat { color: var(--blue-300); }
.edition .ix-link-more { font-size: 14px; font-weight: 600; color: var(--blue); text-decoration: none; }
.edition .ix-link-more:hover { text-decoration: underline; text-underline-offset: 3px; }
@media (max-width: 860px) {
  .edition .ix-top { grid-template-columns: 1fr; gap: clamp(28px, 6vw, 40px); }
}
@media (max-width: 760px) {
  
  .edition .ix-map-card { padding: clamp(12px, 3.5vw, 18px); }
  .edition .ix-map-tip { font-size: 12px; padding: 6px 10px; }
  
  .edition .ix-legend { grid-template-columns: repeat(2, 1fr); gap: 12px 14px; }
}
@media (max-width: 520px) {
  
  .edition .ix-rank-row { grid-template-columns: 20px 1fr auto; gap: 6px 12px; }
  .edition .ix-rank-e { grid-column: 2 / -1; text-align: left; min-width: 0; margin-top: 2px; }
}

/* ===== PATTERN UTILITAIRES — contact, formulaire (.ct-* + globaux form) ===== */
.edition .ct-grid { display: grid; grid-template-columns: 1.15fr .85fr; gap: clamp(24px, 4vw, 56px); align-items: start; }
.edition .ct-card { background: var(--white); border: 1px solid var(--gray-3); border-radius: 2px; padding: clamp(22px, 2.8vw, 36px); }
.edition .ct-form-intro { font-size: 15px; color: var(--gray); line-height: 1.5; margin-bottom: clamp(16px, 2vw, 22px); }
.edition .ct-req { color: var(--blue); }
.edition input[type=text], .edition input[type=email], .edition textarea { width: 100%; padding: 12px; border: 1px solid var(--gray-3); background: var(--white); font-size: 16px; border-radius: 0; font-family: inherit; }
.edition textarea { min-height: 148px; resize: vertical; line-height: 1.55; }
.edition input:focus, .edition select:focus, .edition textarea:focus { outline: 2px solid var(--blue); outline-offset: 1px; border-color: var(--blue); }
.edition ::placeholder { color: var(--gray-2); }
.edition button.btn { border: 0; cursor: pointer; }
.edition .ct-note { font-size: 12.5px; color: var(--gray); line-height: 1.5; margin-top: 16px; }
.edition .ct-info-title { font-family: "Fraunces", Georgia, serif; font-size: 18px; margin-bottom: clamp(8px, 1.4vw, 14px); }
.edition .ct-info-list { display: flex; flex-direction: column; }
.edition .ct-info-item { display: flex; flex-direction: column; gap: 4px; padding: 16px 0; border-bottom: 1px solid var(--hair); }
.edition .ct-info-item:first-child { padding-top: 0; }
.edition .ct-info-k { font-size: 12px; font-weight: 600; letter-spacing: .05em; text-transform: uppercase; color: var(--blue); }
.edition .ct-info-v { font-size: 16px; color: var(--ink); }
.edition .ct-info-v a { color: inherit; text-decoration: none; border-bottom: 1px solid var(--gray-3); }
.edition .ct-info-v a:hover { color: var(--blue); border-bottom-color: var(--blue); }
.edition .ct-legal { margin-top: clamp(18px, 2.4vw, 24px); font-size: 14px; }
.edition .ct-legal a { color: var(--blue); font-weight: 600; text-decoration: none; }
.edition .ct-legal a:hover { text-decoration: underline; text-underline-offset: 3px; }
@media (max-width: 860px) {
  .edition .ct-grid { grid-template-columns: 1fr; gap: clamp(28px, 6vw, 40px); }
}

/* =============================================================================
   ESTIMATEUR REFONDU - tunnel de conversion (Phase 6 bis)
   Porté du package design validé (estimateur.css + est-mobile.css), adapté aux
   tokens du thème : var(--font-*) -> familles littérales, --blue-line -> #DCE4EC,
   --blue-light -> var(--blue-300). Préfixes du package conservés (.estx-* module,
   .qx-* questions desktop, .m-* / .b-* mobile bottom sheet) : namespaces distincts,
   aucune collision avec le module legacy .est / .est-out (retiré au déploiement).
   Le rendu DOM est produit par edition-estimateur.js (skin desktop ou mobile).
   ============================================================================= */

/* ---- Module (enveloppe) desktop ------------------------------------------- */
.edition .estx-module { border: 1px solid var(--gray-3); background: var(--white); box-shadow: 0 30px 60px -50px rgba(26,25,22,.5); }
.edition .estx-module.est-w-full { max-width: none; }
.edition .estx-module.est-w-centre { max-width: 720px; margin-inline: auto; }
.edition .estx-mbar { display: flex; justify-content: space-between; align-items: center; gap: 14px; padding: 11px 20px; background: var(--ink); color: #fff; font-family: "IBM Plex Mono", ui-monospace, "SFMono-Regular", Menlo, monospace; font-size: 11px; letter-spacing: .14em; text-transform: uppercase; }
.edition .estx-mbar .tagm { color: rgba(255,255,255,.55); letter-spacing: .04em; text-transform: none; font-weight: 400; font-size: 11px; }
.edition .estx-body { padding: clamp(18px,2vw,26px) clamp(20px,3vw,40px); position: relative; }

/* couche de mesure invisible : fige la hauteur sur l'étape la plus dense */
.edition .estx-measure { position: absolute; left: 0; right: 0; top: 0; visibility: hidden; pointer-events: none; z-index: -1; }
.edition .estx-measure > .estx-screen { position: absolute; left: 0; right: 0; animation: none; }

/* progression - rail fin, remplissage non linéaire */
.edition .estx-prog { margin-bottom: clamp(14px,1.8vw,18px); }
.edition .estx-rail { height: 3px; background: var(--cream-deep); border-radius: 1px; overflow: hidden; }
.edition .estx-rail > i { display: block; height: 100%; background: var(--blue); border-radius: 1px; transition: width .5s cubic-bezier(.2,.7,.2,1); }

/* zone de contenu - hauteur stable + micro-animation d'entrée */
.edition .estx-stage { display: flex; flex-direction: column; justify-content: center; transition: min-height 250ms ease; }
.edition .estx-screen.est-enter { animation: estIn .42s cubic-bezier(.2,.7,.2,1); }
@keyframes estIn { from { transform: translateY(12px); } to { transform: none; } }
@media (prefers-reduced-motion: reduce) { .edition .estx-screen.est-enter { animation: none; } .edition .estx-rail > i { transition: none; } }

/* nav bas de module */
.edition .estx-nav { display: flex; align-items: center; justify-content: space-between; gap: 16px; margin-top: clamp(14px,1.8vw,18px); padding-top: 14px; border-top: 1px solid var(--hair); }
.edition .estx-back { display: inline-flex; align-items: center; gap: 8px; background: none; border: none; white-space: nowrap; font-family: "Inter", system-ui, sans-serif; font-size: 14px; font-weight: 500; color: var(--gray); cursor: pointer; padding: 8px 2px; transition: color .15s ease; }
.edition .estx-back:hover { color: var(--ink); }
.edition .estx-back[hidden] { visibility: hidden; }
.edition .estx-next { display: inline-flex; align-items: center; gap: 10px; white-space: nowrap; padding: 11px 22px; background: var(--blue); color: #fff; border: none; cursor: pointer; font-family: "Inter", system-ui, sans-serif; font-size: 14px; font-weight: 600; border-radius: 2px; transition: background .15s ease, opacity .15s ease; }
.edition .estx-next:hover { background: var(--blue-700); box-shadow: 0 6px 16px -8px rgba(20,44,70,.6); }
.edition .estx-next:disabled { opacity: .4; cursor: not-allowed; }
.edition .estx-next .ar { transition: transform .2s ease; }
.edition .estx-next:not(:disabled):hover .ar { transform: translateX(3px); }
.edition .estx-noscript { font-size: 14px; color: var(--gray); padding: clamp(18px,2vw,26px) clamp(20px,3vw,40px); }

/* ---- Éléments de question ------------------------------------------------- */
.edition .qx-eyebrow { display: inline-flex; align-items: center; gap: 7px; padding: 5px 11px; background: var(--blue-tint); border-radius: 999px; font-family: "IBM Plex Mono", ui-monospace, "SFMono-Regular", Menlo, monospace; font-size: 10.5px; font-weight: 500; letter-spacing: .12em; text-transform: uppercase; color: var(--blue); }
.edition .qx-eyebrow .dot { width: 5px; height: 5px; border-radius: 50%; background: var(--blue); }
.edition .qx-title { font-family: "Fraunces", Georgia, serif; font-weight: 400; font-size: clamp(19px,2.2vw,24px); line-height: 1.12; letter-spacing: -.01em; color: var(--ink); margin: 10px 0 0; text-wrap: balance; }
.edition .qx-sub { font-size: 13.5px; color: var(--gray); margin: 6px 0 0; line-height: 1.45; }
.edition .qx-block { margin-top: clamp(13px,1.6vw,17px); }
.edition .qx-block + .qx-block { margin-top: clamp(13px,1.7vw,18px); }
.edition .qx-minlabel { font-family: "IBM Plex Mono", ui-monospace, "SFMono-Regular", Menlo, monospace; font-size: 11px; font-weight: 500; letter-spacing: .08em; text-transform: uppercase; color: var(--gray-2); margin: 0 0 10px; }

/* cartes à choix */
.edition .qx-cards { display: grid; grid-template-columns: repeat(auto-fit,minmax(158px,1fr)); gap: 8px; }
.edition .qx-cards.cols-2 { grid-template-columns: repeat(2,1fr); }
.edition .qx-card { position: relative; display: flex; align-items: flex-start; gap: 11px; text-align: left; width: 100%; padding: 11px 13px; background: var(--white); border: 1px solid var(--gray-3); border-radius: 2px; cursor: pointer; transition: border-color .14s, background .14s, box-shadow .14s; }
.edition .qx-card:hover { border-color: var(--gray); }
.edition .qx-card.is-on { border-color: var(--blue); background: var(--blue-tint); box-shadow: inset 0 0 0 1px var(--blue); }
.edition .qx-card .ic { flex: none; width: 23px; height: 23px; color: var(--ink); margin-top: 1px; }
.edition .qx-card.is-on .ic { color: var(--blue); }
.edition .qx-card .tx { flex: 1; min-width: 0; }
.edition .qx-card .t { font-size: 14.5px; font-weight: 600; color: var(--ink); line-height: 1.25; display: block; }
.edition .qx-card .d { font-size: 12px; color: var(--gray); margin-top: 3px; line-height: 1.35; display: block; }
.edition .qx-card .mk { flex: none; width: 18px; height: 18px; border-radius: 50%; border: 1.5px solid var(--gray-3); margin-top: 1px; display: grid; place-items: center; transition: border-color .14s, background .14s; }
.edition .qx-card.is-on .mk { border-color: var(--blue); background: var(--blue); }
.edition .qx-card .mk svg { width: 11px; height: 11px; color: #fff; opacity: 0; transition: opacity .14s; }
.edition .qx-card.is-on .mk svg { opacity: 1; }
.edition .qx-card.multi .mk { border-radius: 3px; }
.edition .qx-precise { margin-top: 10px; width: 100%; padding: 12px 14px; border: 1px solid var(--gray-3); background: var(--white); font-family: "Inter", system-ui, sans-serif; font-size: 15px; color: var(--ink); border-radius: 2px; }
.edition .qx-precise:focus { outline: none; border-color: var(--blue); box-shadow: 0 0 0 3px var(--blue-tint); }

/* chips */
.edition .qx-chips { display: flex; flex-wrap: wrap; gap: 8px; }
.edition .qx-chip { padding: 9px 15px; border: 1px solid var(--gray-3); background: var(--cream); font-family: "Inter", system-ui, sans-serif; font-size: 14px; font-weight: 500; color: var(--ink); border-radius: 2px; cursor: pointer; transition: all .13s ease; font-variant-numeric: tabular-nums; }
.edition .qx-chip:hover { border-color: var(--gray); }
.edition .qx-chip.is-on { background: var(--ink); color: #fff; border-color: var(--ink); }

/* toggle switch (ascenseur / piscine) */
.edition .qx-switch { display: flex; align-items: center; gap: 12px; margin-top: 12px; cursor: pointer; font-size: 14px; color: var(--ink-soft); }
.edition .qx-switch input { position: absolute; opacity: 0; pointer-events: none; }
.edition .qx-switch .track { position: relative; flex: none; width: 42px; height: 24px; border-radius: 999px; background: var(--gray-3); transition: background .18s ease; }
.edition .qx-switch .track::after { content: ""; position: absolute; top: 3px; left: 3px; width: 18px; height: 18px; border-radius: 50%; background: #fff; box-shadow: 0 1px 3px rgba(0,0,0,.25); transition: transform .18s ease; }
.edition .qx-switch input:checked + .track { background: var(--blue); }
.edition .qx-switch input:checked + .track::after { transform: translateX(18px); }

/* champ numérique surface */
.edition .qx-num { display: flex; align-items: stretch; max-width: 280px; border: 1px solid var(--gray-3); border-radius: 2px; overflow: hidden; background: var(--white); }
.edition .qx-num:focus-within { border-color: var(--blue); box-shadow: 0 0 0 3px var(--blue-tint); }
.edition .qx-num input { flex: 1; min-width: 0; border: none; background: transparent; padding: 11px 14px; font-family: "Fraunces", Georgia, serif; font-size: 23px; color: var(--ink); font-variant-numeric: tabular-nums; outline: none; }
.edition .qx-num input::-webkit-outer-spin-button, .edition .qx-num input::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
.edition .qx-num .unit { display: flex; align-items: center; padding: 0 18px; background: var(--cream-deep); font-family: "IBM Plex Mono", ui-monospace, "SFMono-Regular", Menlo, monospace; font-size: 14px; color: var(--gray); border-left: 1px solid var(--gray-3); }

/* barre d'adresse animée */
.edition .qx-addr-wrap { position: relative; margin-top: clamp(13px,1.6vw,17px); }
.edition .qx-addr { display: flex; align-items: center; gap: 12px; padding: 0 16px; height: 54px; background: var(--white); border: 1px solid var(--gray-3); border-radius: 2px; transition: border-color .15s ease, box-shadow .15s ease; }
.edition .qx-addr.focused { border-color: var(--blue); box-shadow: 0 0 0 4px var(--blue-tint); }
.edition .qx-addr .lupe { flex: none; width: 20px; height: 20px; color: var(--gray); }
.edition .qx-addr.focused .lupe { color: var(--blue); }
.edition .qx-addr input { flex: 1; min-width: 0; border: none; background: transparent; outline: none; padding: 0; font-family: "Inter", system-ui, sans-serif; font-size: clamp(15px,1.5vw,17px); color: var(--ink); }
.edition .qx-addr input::placeholder { color: var(--gray-2); }
.edition .qx-addr .ph-anim { position: absolute; left: 0; right: 0; pointer-events: none; font-family: "Inter", system-ui, sans-serif; font-size: clamp(15px,1.5vw,17px); color: var(--gray-2); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.edition .qx-addr .ph-anim .caret { display: inline-block; width: 1px; height: 1.1em; background: var(--blue); margin-left: 1px; vertical-align: -2px; animation: estCaret 1s steps(1) infinite; }
@keyframes estCaret { 50% { opacity: 0; } }
@media (prefers-reduced-motion: reduce) { .edition .qx-addr .ph-anim .caret { animation: none; } }
.edition .qx-addr .spin { flex: none; width: 18px; height: 18px; border: 2px solid var(--cream-deep); border-top-color: var(--blue); border-radius: 50%; animation: estSpin .7s linear infinite; }
@keyframes estSpin { to { transform: rotate(360deg); } }
.edition .qx-addr .clear { flex: none; width: 26px; height: 26px; border-radius: 50%; border: none; cursor: pointer; background: var(--cream-deep); color: var(--gray); display: grid; place-items: center; transition: background .14s, color .14s; }
.edition .qx-addr .clear:hover { background: var(--gray-3); color: var(--ink); }
.edition .qx-sug { position: absolute; left: 0; right: 0; top: calc(100% + 8px); z-index: 20; background: var(--white); border: 1px solid var(--gray-3); border-radius: 2px; box-shadow: 0 24px 50px -28px rgba(26,25,22,.55); overflow: hidden; }
.edition .qx-sug-head { padding: 9px 16px; font-family: "IBM Plex Mono", ui-monospace, "SFMono-Regular", Menlo, monospace; font-size: 10.5px; letter-spacing: .1em; text-transform: uppercase; color: var(--gray-2); border-bottom: 1px solid var(--hair); }
.edition .qx-sug-item { display: flex; align-items: center; gap: 13px; width: 100%; text-align: left; padding: 13px 16px; background: none; border: none; cursor: pointer; border-bottom: 1px solid var(--hair); transition: background .12s ease; }
.edition .qx-sug-item:last-child { border-bottom: none; }
.edition .qx-sug-item:hover, .edition .qx-sug-item.active { background: var(--blue-tint); }
.edition .qx-sug-item .pin { flex: none; width: 18px; height: 18px; color: var(--blue); }
.edition .qx-sug-item .l1 { font-size: 14.5px; font-weight: 500; color: var(--ink); }
.edition .qx-sug-item .l2 { font-size: 12.5px; color: var(--gray); margin-top: 1px; font-variant-numeric: tabular-nums; }

/* captation lead */
.edition .qx-form { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-top: clamp(13px,1.6vw,16px); }
.edition .qx-field { display: flex; flex-direction: column; gap: 5px; }
.edition .qx-field.full { grid-column: 1 / -1; }
.edition .qx-field label { font-family: "IBM Plex Mono", ui-monospace, "SFMono-Regular", Menlo, monospace; font-size: 11px; font-weight: 500; letter-spacing: .06em; text-transform: uppercase; color: var(--gray); }
.edition .qx-field label .req { color: var(--blue); }
.edition .qx-field input { padding: 10px 12px; border: 1px solid var(--gray-3); background: var(--white); font-family: "Inter", system-ui, sans-serif; font-size: 15px; color: var(--ink); border-radius: 2px; }
.edition .qx-field input:focus { outline: none; border-color: var(--blue); box-shadow: 0 0 0 3px var(--blue-tint); }
.edition .qx-field input.invalid { border-color: var(--neg); }
.edition .qx-field .hint { font-size: 11.5px; color: var(--gray-2); }
.edition .qx-rgpd { grid-column: 1 / -1; display: flex; gap: 11px; align-items: flex-start; margin-top: 2px; padding: 11px 14px; background: var(--cream); border: 1px solid var(--hair); border-radius: 2px; cursor: pointer; }
.edition .qx-rgpd input { margin-top: 2px; flex: none; width: 17px; height: 17px; accent-color: var(--blue); }
.edition .qx-rgpd .txt { font-size: 12.5px; color: var(--gray); line-height: 1.5; }
.edition .qx-rgpd .txt a { color: var(--blue); text-decoration: underline; }
.edition .qx-rgpd .txt b { color: var(--ink-soft); font-weight: 600; }

/* résultat */
.edition .qx-res-tag { display: inline-flex; align-items: center; gap: 8px; font-family: "IBM Plex Mono", ui-monospace, "SFMono-Regular", Menlo, monospace; font-size: 11px; letter-spacing: .1em; text-transform: uppercase; color: var(--pos); }
.edition .qx-res-tag .dot { width: 6px; height: 6px; border-radius: 50%; background: var(--pos); }
.edition .qx-res-h { font-family: "Fraunces", Georgia, serif; font-weight: 400; font-size: clamp(24px,3vw,32px); color: var(--ink); margin: 12px 0 0; letter-spacing: -.01em; }
.edition .qx-res-addr { font-size: 14px; color: var(--gray); margin: 6px 0 0; }
.edition .qx-price { margin-top: 22px; border: 1px solid var(--ink); background: var(--white); position: relative; overflow: hidden; }
.edition .qx-price-main { padding: clamp(22px,3vw,32px); }
.edition .qx-price-lab { font-family: "IBM Plex Mono", ui-monospace, "SFMono-Regular", Menlo, monospace; font-size: 11px; letter-spacing: .1em; text-transform: uppercase; color: var(--gray-2); }
.edition .qx-price-range { font-family: "Fraunces", Georgia, serif; font-weight: 400; font-size: clamp(30px,5vw,50px); line-height: 1; color: var(--ink); margin-top: 12px; font-variant-numeric: tabular-nums; letter-spacing: -.01em; }
.edition .qx-price-range .sep { color: var(--gray-3); font-size: .7em; margin: 0 .18em; }
.edition .qx-price-meta { display: flex; flex-wrap: wrap; gap: 26px; margin-top: 18px; }
.edition .qx-price-meta .m .mk { font-family: "IBM Plex Mono", ui-monospace, "SFMono-Regular", Menlo, monospace; font-size: 10.5px; letter-spacing: .08em; text-transform: uppercase; color: var(--gray-2); }
.edition .qx-price-meta .m .mv { font-family: "Fraunces", Georgia, serif; font-size: 22px; color: var(--blue); margin-top: 4px; font-variant-numeric: tabular-nums; white-space: nowrap; }
.edition .qx-recap { margin-top: 22px; border: 1px solid var(--hair); }
.edition .qx-recap-head { padding: 11px 16px; background: var(--cream); border-bottom: 1px solid var(--hair); font-family: "IBM Plex Mono", ui-monospace, "SFMono-Regular", Menlo, monospace; font-size: 11px; letter-spacing: .1em; text-transform: uppercase; color: var(--gray-2); }
.edition .qx-recap-grid { display: grid; grid-template-columns: repeat(3,1fr); }
.edition .qx-recap-grid .cell { padding: 13px 16px; border-right: 1px solid var(--hair); border-bottom: 1px solid var(--hair); }
.edition .qx-recap-grid .cell .k { font-size: 11px; color: var(--gray-2); letter-spacing: .04em; text-transform: uppercase; }
.edition .qx-recap-grid .cell .v { font-size: 14px; color: var(--ink); margin-top: 3px; font-weight: 500; }
.edition .qx-disclaimer { margin-top: 18px; font-size: 11.5px; color: var(--gray-2); line-height: 1.5; width: 100%; max-width: none; text-align: center; }
.edition .qx-res-cta { display: flex; flex-wrap: wrap; gap: 12px; align-items: center; justify-content: center; margin-top: 24px; }
.edition .qx-res-cta .qx-cta-primary { padding: 15px 34px; font-size: 15px; }
.edition .qx-cta-primary { display: inline-flex; align-items: center; gap: 8px; padding: 12px 22px; background: var(--blue); color: #fff; border: none; cursor: pointer; font-family: "Inter", system-ui, sans-serif; font-size: 14px; font-weight: 600; border-radius: 2px; text-decoration: none; transition: background .15s ease; }
.edition .qx-cta-primary svg { flex: none; width: 16px; height: 16px; }
.edition .qx-cta-primary:hover { background: var(--blue-700); }
.edition .qx-cta-ghost { display: inline-flex; align-items: center; gap: 8px; background: none; border: none; cursor: pointer; white-space: nowrap; font-family: "Inter", system-ui, sans-serif; font-size: 14px; font-weight: 500; color: var(--gray); padding: 8px 4px; }
.edition .qx-cta-ghost svg { flex: none; width: 15px; height: 15px; }
.edition .qx-cta-ghost:hover { color: var(--ink); }

@media (max-width: 760px) {
  .edition .qx-form { grid-template-columns: 1fr; }
  .edition .qx-recap-grid { grid-template-columns: 1fr 1fr; }
  .edition .qx-cards, .edition .qx-cards.cols-2 { grid-template-columns: 1fr; }
  .edition .estx-body { padding: 18px 18px; }
}
@media (max-width: 480px) {
  .edition .qx-recap-grid { grid-template-columns: 1fr; }
  .edition .qx-price-meta { gap: 18px; }
}

/* ---- MOBILE - bloc d'entrée + bottom sheet -------------------------------- */
.edition .m-est { font-family: "Inter", system-ui, sans-serif; color: var(--ink); }
.edition .m-est * { box-sizing: border-box; }

/* bloc d'entrée inline (empreinte minimale) */
.edition .b-card { border: 1px solid var(--gray-3); border-radius: 6px; background: var(--white); box-shadow: 0 18px 36px -28px rgba(26,25,22,.5); overflow: hidden; }
.edition .b-card .mbar { background: var(--ink); color: #fff; padding: 9px 14px; font-family: "IBM Plex Mono", ui-monospace, "SFMono-Regular", Menlo, monospace; font-size: 9.5px; letter-spacing: .12em; text-transform: uppercase; }
.edition .b-card .in { padding: 15px 14px; }
.edition .b-card .ct { font-family: "Fraunces", Georgia, serif; font-size: 18px; }
.edition .b-card .cd { font-size: 12.5px; color: var(--gray); margin-top: 3px; }
.edition .b-card .open { margin-top: 13px; width: 100%; min-height: 50px; display: flex; align-items: center; justify-content: center; gap: 8px; background: var(--blue); color: #fff; border: none; border-radius: 4px; font-family: inherit; font-size: 15px; font-weight: 600; cursor: pointer; }
.edition .b-card .open svg { width: 17px; height: 17px; }
.edition .b-addr-wrap { margin-top: 13px; position: relative; }

/* backdrop + feuille (overlay plein écran en production) */
.edition .b-backdrop { position: fixed; inset: 0; background: rgba(26,25,22,.42); z-index: 1000; animation: bFade .2s ease; }
@keyframes bFade { from { opacity: 0; } to { opacity: 1; } }
.edition .b-sheet { position: fixed; left: 0; right: 0; bottom: 0; height: 95vh; height: 95dvh; max-height: 95vh; max-height: 95dvh; z-index: 1001; background: var(--cream); border-top-left-radius: 18px; border-top-right-radius: 18px; display: flex; flex-direction: column; overflow: hidden; box-shadow: 0 -20px 50px -30px rgba(0,0,0,.5); animation: bUp .28s cubic-bezier(.2,.7,.2,1); }
@keyframes bUp { from { transform: translateY(100%); } to { transform: none; } }
@media (prefers-reduced-motion: reduce) { .edition .b-sheet { animation: none; } .edition .b-backdrop { animation: none; } }
.edition .b-grab { flex: none; display: flex; justify-content: center; padding: 9px 0 4px; }
.edition .b-grab span { width: 38px; height: 4px; border-radius: 2px; background: var(--gray-3); }

/* ossature interne de la feuille */
.edition .m-app { display: flex; flex-direction: column; flex: 1; min-height: 0; background: transparent; position: relative; }
.edition .m-prog { height: 3px; background: var(--cream-deep); flex: none; }
.edition .m-prog > i { display: block; height: 100%; background: var(--blue); transition: width .45s cubic-bezier(.2,.7,.2,1); }
@media (prefers-reduced-motion: reduce) { .edition .m-prog > i { transition: none; } }
.edition .m-bar { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 11px 16px 4px; flex: none; }
.edition .m-back { appearance: none; border: none; background: none; cursor: pointer; display: inline-flex; align-items: center; justify-content: center; width: 40px; height: 40px; padding: 0; margin: -8px -8px; color: var(--gray); }
.edition .m-back svg { width: 23px; height: 23px; }
.edition .m-back:active { color: var(--ink); }
.edition .m-back[hidden] { visibility: hidden; }
.edition .m-svc { font-family: "IBM Plex Mono", ui-monospace, "SFMono-Regular", Menlo, monospace; font-size: 9.5px; letter-spacing: .13em; text-transform: uppercase; color: var(--gray-2); }
.edition .m-body { flex: 1; display: flex; flex-direction: column; padding: 8px 18px 14px; min-height: 0; overflow-y: auto; -webkit-overflow-scrolling: touch; }
.edition .m-body.scroll { overflow-y: auto; -webkit-overflow-scrolling: touch; }
.edition .m-eyebrow { display: inline-flex; align-items: center; gap: 6px; align-self: flex-start; padding: 4px 10px; background: var(--blue-tint); border-radius: 999px; font-family: "IBM Plex Mono", ui-monospace, "SFMono-Regular", Menlo, monospace; font-size: 9.5px; font-weight: 500; letter-spacing: .11em; text-transform: uppercase; color: var(--blue); }
.edition .m-eyebrow .dot { width: 4px; height: 4px; border-radius: 50%; background: var(--blue); }
.edition .m-title { font-family: "Fraunces", Georgia, serif; font-weight: 400; font-size: 22px; line-height: 1.12; letter-spacing: -.01em; margin: 11px 0 0; text-wrap: balance; }
.edition .m-sub { font-size: 13px; color: var(--gray); margin: 6px 0 0; line-height: 1.4; }
.edition .m-content { margin-top: 16px; display: flex; flex-direction: column; gap: 8px; flex: 1; min-height: 0; justify-content: flex-start; }
.edition .m-rows { display: flex; flex-direction: column; gap: 8px; }
.edition .m-opt { display: flex; align-items: center; gap: 12px; width: 100%; min-height: 56px; padding: 11px 14px; background: var(--white); border: 1px solid var(--gray-3); border-radius: 4px; text-align: left; cursor: pointer; transition: border-color .13s, background .13s, box-shadow .13s; }
.edition .m-opt:active { transform: scale(.995); }
.edition .m-opt.on { border-color: var(--blue); background: var(--blue-tint); box-shadow: inset 0 0 0 1px var(--blue); }
.edition .m-opt .tx { flex: 1; min-width: 0; }
.edition .m-opt .t { display: block; font-size: 15.5px; font-weight: 600; line-height: 1.2; }
.edition .m-opt .d { display: block; font-size: 12.5px; color: var(--gray); margin-top: 2px; line-height: 1.3; }
.edition .m-opt .mk { flex: none; width: 22px; height: 22px; border-radius: 50%; border: 1.5px solid var(--gray-3); display: grid; place-items: center; transition: border-color .13s, background .13s; }
.edition .m-opt.multi .mk { border-radius: 5px; }
.edition .m-opt.on .mk { border-color: var(--blue); background: var(--blue); }
.edition .m-opt .mk svg { width: 13px; height: 13px; color: #fff; }
.edition .m-precise { width: 100%; margin-top: 2px; padding: 13px 14px; border: 1px solid var(--gray-3); border-radius: 4px; font-family: inherit; font-size: 16px; color: var(--ink); }
.edition .m-precise:focus { outline: none; border-color: var(--blue); box-shadow: 0 0 0 3px var(--blue-tint); }
.edition .m-chips { display: grid; grid-template-columns: repeat(3,1fr); gap: 8px; }
.edition .m-chip { min-height: 52px; display: flex; align-items: center; justify-content: center; text-align: center; padding: 8px 6px; border: 1px solid var(--gray-3); background: var(--white); border-radius: 4px; font-size: 14px; font-weight: 500; color: var(--ink); cursor: pointer; line-height: 1.15; font-variant-numeric: tabular-nums; transition: all .12s ease; }
.edition .m-chip.on { background: var(--ink); color: #fff; border-color: var(--ink); }
.edition .m-switch { display: flex; align-items: center; gap: 12px; margin-top: 14px; cursor: pointer; font-size: 14.5px; color: var(--ink-soft); min-height: 44px; }
.edition .m-switch input { position: absolute; opacity: 0; pointer-events: none; }
.edition .m-switch .tk { position: relative; flex: none; width: 46px; height: 27px; border-radius: 999px; background: var(--gray-3); transition: background .18s; }
.edition .m-switch .tk::after { content: ""; position: absolute; top: 3px; left: 3px; width: 21px; height: 21px; border-radius: 50%; background: #fff; box-shadow: 0 1px 3px rgba(0,0,0,.25); transition: transform .18s; }
.edition .m-switch input:checked + .tk { background: var(--blue); }
.edition .m-switch input:checked + .tk::after { transform: translateX(19px); }
.edition .m-num { display: flex; align-items: stretch; border: 1px solid var(--gray-3); border-radius: 4px; overflow: hidden; background: var(--white); }
.edition .m-num:focus-within { border-color: var(--blue); box-shadow: 0 0 0 3px var(--blue-tint); }
.edition .m-num input { flex: 1; min-width: 0; border: none; background: none; padding: 16px; font-family: "Fraunces", Georgia, serif; font-size: 26px; color: var(--ink); font-variant-numeric: tabular-nums; outline: none; }
.edition .m-num input::-webkit-outer-spin-button, .edition .m-num input::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
.edition .m-num .u { display: flex; align-items: center; padding: 0 18px; background: var(--cream-deep); font-family: "IBM Plex Mono", ui-monospace, "SFMono-Regular", Menlo, monospace; font-size: 15px; color: var(--gray); border-left: 1px solid var(--gray-3); }
.edition .m-addr { display: flex; align-items: center; gap: 10px; height: 54px; padding: 0 14px; background: var(--white); border: 1px solid var(--gray-3); border-radius: 4px; position: relative; }
.edition .m-addr.foc { border-color: var(--blue); box-shadow: 0 0 0 3px var(--blue-tint); }
.edition .m-addr .lupe { flex: none; width: 19px; height: 19px; color: var(--gray); }
.edition .m-addr.foc .lupe { color: var(--blue); }
.edition .m-addr input { flex: 1; min-width: 0; border: none; background: none; outline: none; padding: 0; font-size: 16px; color: var(--ink); }
.edition .m-addr .m-ph { position: absolute; left: 43px; right: 14px; pointer-events: none; color: var(--gray-2); font-family: "Inter", system-ui, sans-serif; font-size: 16px; letter-spacing: normal; text-transform: none; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; background: none; border: 0; padding: 0; }
.edition .m-addr .m-ph .car { display: inline-block; width: 1px; height: 1.05em; background: var(--blue); margin-left: 1px; vertical-align: -2px; animation: estCaret 1s steps(1) infinite; }
.edition .m-addr .x { flex: none; width: 26px; height: 26px; border: none; border-radius: 50%; background: var(--cream-deep); color: var(--gray); display: grid; place-items: center; cursor: pointer; }
.edition .m-addr .x svg { width: 13px; height: 13px; }
.edition .m-sugs { margin-top: 8px; border: 1px solid var(--gray-3); border-radius: 4px; overflow: hidden; background: var(--white); }
.edition .m-sug { display: flex; align-items: center; gap: 11px; width: 100%; text-align: left; padding: 12px 14px; background: none; border: none; border-bottom: 1px solid var(--hair); cursor: pointer; min-height: 52px; }
.edition .m-sug:last-child { border-bottom: none; }
.edition .m-sug:active { background: var(--blue-tint); }
.edition .m-sug .pin { flex: none; width: 17px; height: 17px; color: var(--blue); }
.edition .m-sug .l1 { display: block; font-size: 14.5px; font-weight: 500; }
.edition .m-sug .l2 { display: block; font-size: 12px; color: var(--gray); font-variant-numeric: tabular-nums; }
.edition .m-foot { flex: none; display: flex; align-items: center; gap: 12px; padding: 12px 18px calc(12px + env(safe-area-inset-bottom)); background: var(--cream); border-top: 1px solid var(--hair); }
.edition .m-cta { flex: 1; min-height: 52px; display: inline-flex; align-items: center; justify-content: center; gap: 9px; background: var(--blue); color: #fff; border: none; border-radius: 4px; cursor: pointer; font-family: inherit; font-size: 16px; font-weight: 600; text-decoration: none; transition: background .15s, opacity .15s; }
.edition .m-cta:disabled { opacity: .4; }
.edition .m-cta:active:not(:disabled) { background: var(--blue-700); }
.edition .m-cta svg { width: 18px; height: 18px; }
.edition .m-foot .m-ghost { flex: none; }
.edition .m-ghost { appearance: none; background: none; border: none; cursor: pointer; font-family: inherit; font-size: 14px; font-weight: 500; color: var(--gray); padding: 10px 6px; }
.edition .m-form { display: flex; flex-direction: column; gap: 11px; margin-top: 14px; }
.edition .m-field { display: flex; flex-direction: column; gap: 5px; position: relative; }
.edition .m-field label { font-family: "IBM Plex Mono", ui-monospace, "SFMono-Regular", Menlo, monospace; font-size: 10px; font-weight: 500; letter-spacing: .06em; text-transform: uppercase; color: var(--gray); }
.edition .m-field label .r { color: var(--blue); }
.edition .m-field input { padding: 14px; border: 1px solid var(--gray-3); border-radius: 4px; font-family: inherit; font-size: 16px; color: var(--ink); background: var(--white); }
.edition .m-field input:focus { outline: none; border-color: var(--blue); box-shadow: 0 0 0 3px var(--blue-tint); }
.edition .m-rgpd { display: flex; gap: 10px; align-items: flex-start; padding: 12px 13px; background: var(--white); border: 1px solid var(--hair); border-radius: 4px; cursor: pointer; }
.edition .m-rgpd input { margin-top: 1px; flex: none; width: 20px; height: 20px; accent-color: var(--blue); }
.edition .m-rgpd .t { font-size: 11.5px; color: var(--gray); line-height: 1.45; }
.edition .m-rgpd .t b { color: var(--ink-soft); }
.edition .m-rgpd .t a { color: var(--blue); text-decoration: underline; }
.edition .m-res-tag { display: inline-flex; align-items: center; gap: 7px; font-family: "IBM Plex Mono", ui-monospace, "SFMono-Regular", Menlo, monospace; font-size: 10px; letter-spacing: .1em; text-transform: uppercase; color: var(--pos); }
.edition .m-res-tag .dot { width: 6px; height: 6px; border-radius: 50%; background: var(--pos); }
.edition .m-res-h { font-family: "Fraunces", Georgia, serif; font-weight: 400; font-size: 23px; margin: 10px 0 0; letter-spacing: -.01em; }
.edition .m-res-addr { font-size: 13px; color: var(--gray); margin: 4px 0 0; }
.edition .m-price { margin-top: 16px; border: 1px solid var(--ink); border-radius: 4px; padding: 18px 16px; background: var(--white); }
.edition .m-price .lab { font-family: "IBM Plex Mono", ui-monospace, "SFMono-Regular", Menlo, monospace; font-size: 10px; letter-spacing: .09em; text-transform: uppercase; color: var(--gray-2); }
.edition .m-price .rng { font-family: "Fraunces", Georgia, serif; font-size: 30px; line-height: 1.05; margin-top: 8px; font-variant-numeric: tabular-nums; }
.edition .m-price .rng .sep { color: var(--gray-3); margin: 0 .12em; }
.edition .m-price .meta { display: flex; gap: 18px; margin-top: 14px; flex-wrap: wrap; }
.edition .m-price .meta .k { font-family: "IBM Plex Mono", ui-monospace, "SFMono-Regular", Menlo, monospace; font-size: 9.5px; letter-spacing: .07em; text-transform: uppercase; color: var(--gray-2); }
.edition .m-price .meta .v { font-family: "Fraunces", Georgia, serif; font-size: 18px; color: var(--blue); margin-top: 3px; font-variant-numeric: tabular-nums; white-space: nowrap; }
.edition .m-recap { margin-top: 14px; border: 1px solid var(--hair); border-radius: 4px; overflow: hidden; }
.edition .m-recap-h { padding: 9px 13px; background: var(--cream-deep); font-family: "IBM Plex Mono", ui-monospace, "SFMono-Regular", Menlo, monospace; font-size: 9.5px; letter-spacing: .09em; text-transform: uppercase; color: var(--gray-2); }
.edition .m-recap-grid { display: grid; grid-template-columns: 1fr 1fr; }
.edition .m-recap-grid .c { padding: 10px 13px; border-right: 1px solid var(--hair); border-bottom: 1px solid var(--hair); }
.edition .m-recap-grid .c:nth-child(2n) { border-right: none; }
.edition .m-recap-grid .c .k { font-size: 9.5px; color: var(--gray-2); letter-spacing: .04em; text-transform: uppercase; }
.edition .m-recap-grid .c .v { font-size: 13.5px; font-weight: 500; margin-top: 2px; }
.edition .m-disc { margin-top: 14px; font-size: 11px; color: var(--gray-2); line-height: 1.45; text-align: center; }
.edition .m-res-foot { flex: none; padding: 12px 18px calc(12px + env(safe-area-inset-bottom)); background: var(--cream); border-top: 1px solid var(--hair); display: flex; flex-direction: column; gap: 8px; }
.edition .m-res-foot .m-cta { width: 100%; }
.edition .m-res-foot .m-ghost { align-self: center; }
/* === fin estimateur refondu (Phase 6 bis) ================================== */

/* ===========================================================================
   SIMULATEUR DE PLUS-VALUE (Phase 6 ter) - clone STRICT du module estimateur
   -----------------------------------------------------------------------------
   Le scope .simx-* reprend a l'IDENTIQUE la structure .estx- (memes valeurs CSS,
   simple prefixe distinct pour ne pas s'ecraser) ; les primitifs de question
   (.qx-*), mobile (.m-*) et bottom sheet (.b-*) sont REUTILISES tels quels.
   AUCUNE differenciation par couleur : meme palette da-immover, meme typo, memes
   cards/chips/boutons/espacements que l'estimateur. La distinction entre les deux
   outils se fait par le contenu (libelles, questions) et le titre du mbar.
   =========================================================================== */
.edition .simx-module { border: 1px solid var(--gray-3); background: var(--white); box-shadow: 0 30px 60px -50px rgba(26,25,22,.5); }
.edition .simx-module.sim-w-full { max-width: none; }
.edition .simx-module.sim-w-centre { max-width: 720px; margin-inline: auto; }
.edition .simx-mbar { display: flex; justify-content: space-between; align-items: center; gap: 14px; padding: 11px 20px; background: var(--ink); color: #fff; font-family: "IBM Plex Mono", ui-monospace, "SFMono-Regular", Menlo, monospace; font-size: 11px; letter-spacing: .14em; text-transform: uppercase; }
.edition .simx-mbar .tagm { color: rgba(255,255,255,.55); letter-spacing: .04em; text-transform: none; font-weight: 400; font-size: 11px; }
.edition .simx-body { padding: clamp(18px,2vw,26px) clamp(20px,3vw,40px); position: relative; }
.edition .simx-measure { position: absolute; left: 0; right: 0; top: 0; visibility: hidden; pointer-events: none; z-index: -1; }
.edition .simx-measure > .simx-screen { position: absolute; left: 0; right: 0; animation: none; }
.edition .simx-prog { margin-bottom: clamp(14px,1.8vw,18px); }
.edition .simx-rail { height: 3px; background: var(--cream-deep); border-radius: 1px; overflow: hidden; }
.edition .simx-rail > i { display: block; height: 100%; background: var(--blue); border-radius: 1px; transition: width .5s cubic-bezier(.2,.7,.2,1); }
.edition .simx-stage { display: flex; flex-direction: column; justify-content: center; transition: min-height 250ms ease; }
.edition .simx-screen.sim-enter { animation: estIn .42s cubic-bezier(.2,.7,.2,1); }
@media (prefers-reduced-motion: reduce) { .edition .simx-screen.sim-enter { animation: none; } .edition .simx-rail > i { transition: none; } }
.edition .simx-nav { display: flex; align-items: center; justify-content: space-between; gap: 16px; margin-top: clamp(14px,1.8vw,18px); padding-top: 14px; border-top: 1px solid var(--hair); }
.edition .simx-back { display: inline-flex; align-items: center; gap: 8px; background: none; border: none; white-space: nowrap; font-family: "Inter", system-ui, sans-serif; font-size: 14px; font-weight: 500; color: var(--gray); cursor: pointer; padding: 8px 2px; transition: color .15s ease; }
.edition .simx-back:hover { color: var(--ink); }
.edition .simx-back[hidden] { visibility: hidden; }
.edition .simx-next { display: inline-flex; align-items: center; gap: 10px; white-space: nowrap; padding: 11px 22px; background: var(--blue); color: #fff; border: none; cursor: pointer; font-family: "Inter", system-ui, sans-serif; font-size: 14px; font-weight: 600; border-radius: 2px; transition: background .15s ease, opacity .15s ease; }
.edition .simx-next:hover { background: var(--blue-700); box-shadow: 0 6px 16px -8px rgba(20,44,70,.6); }
.edition .simx-next:disabled { opacity: .4; cursor: not-allowed; }
.edition .simx-next .ar { transition: transform .2s ease; }
.edition .simx-next:not(:disabled):hover .ar { transform: translateX(3px); }

/* helpers propres au simulateur (annees, frais, segmented, detail du calcul) */
.edition .sim-yrow { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
.edition .sim-yfield { display: flex; flex-direction: column; gap: 6px; }
.edition .sim-yfield > label { font-family: "IBM Plex Mono", ui-monospace, "SFMono-Regular", Menlo, monospace; font-size: 11px; font-weight: 500; letter-spacing: .06em; text-transform: uppercase; color: var(--gray); }
.edition .sim-duree { display: block; margin-top: 12px; font-size: 13.5px; color: var(--blue); font-weight: 500; }
.edition .sim-duree.warn { color: var(--neg); }
.edition .sim-note { margin: 8px 0 0; font-size: 12.5px; color: var(--gray); line-height: 1.45; }
.edition .sim-note.warn { color: var(--neg); }
.edition .sim-seg { display: inline-flex; flex-wrap: wrap; gap: 6px; }
.edition .sim-seg-b { padding: 9px 15px; border: 1px solid var(--gray-3); background: var(--cream); font-family: "Inter", system-ui, sans-serif; font-size: 13.5px; font-weight: 500; color: var(--ink); border-radius: 2px; cursor: pointer; transition: all .13s ease; }
.edition .sim-seg-b:hover { border-color: var(--gray); }
.edition .sim-seg-b.is-on { background: var(--blue); color: #fff; border-color: var(--blue); }
.edition .sim-break { margin-top: 22px; border: 1px solid var(--hair); border-radius: 2px; overflow: hidden; }
.edition .sim-row { display: flex; align-items: baseline; justify-content: space-between; gap: 16px; padding: 10px 16px; border-bottom: 1px solid var(--hair); }
.edition .sim-row:last-child { border-bottom: none; }
.edition .sim-row .k { font-size: 13.5px; color: var(--gray); }
.edition .sim-row .v { font-size: 14px; color: var(--ink); font-variant-numeric: tabular-nums; white-space: nowrap; font-weight: 500; }
.edition .sim-row.sub { background: var(--cream); }
.edition .sim-row.sub .k, .edition .sim-row.sub .v { font-weight: 600; color: var(--ink); }
.edition .sim-row.tot { background: var(--blue-tint); }
.edition .sim-row.tot .k { color: var(--ink); font-weight: 600; }
.edition .sim-row.tot .v { color: var(--blue); font-weight: 700; font-size: 15px; }
.edition .sim-disc-box { margin-top: 18px; padding: 13px 16px; border-radius: 2px; border: 1px solid var(--hair); background: var(--cream); }
.edition .sim-disc-box p { margin: 0; font-size: 12.5px; line-height: 1.5; color: var(--ink-soft); }
.edition .sim-disc-box.ok { border-color: var(--blue); background: var(--blue-tint); }
.edition .sim-disc-box.ok p { color: var(--blue-700); }
.edition .sim-disc-box.warn { border-color: var(--neg); background: #FBEDEA; }
.edition .sim-disc-box.warn p { color: #7A2E23; }
@media (max-width: 600px) {
  .edition .sim-row { padding: 9px 13px; }
  .edition .sim-row .k { font-size: 12.5px; }
}
/* === fin simulateur de plus-value (Phase 6 ter) ============================ */

/* ===== BLOC QUARTIERS QUI MONTENT (.qmove-*) + .lead-intro (hub ville) ===== */
.edition .lead-intro { margin-bottom: clamp(22px, 3vw, 30px); }
.edition .lead-intro p { font-size: 17px; line-height: 1.62; max-width: none; color: var(--ink-soft); text-wrap: pretty; }
.edition .qmove-row { display: flex; align-items: baseline; gap: 10px; padding: 11px 0; border-bottom: 1px solid var(--hair); }
.edition .qmove-row:last-child { border-bottom: 0; }
.edition .qmove-n { font-family: "Fraunces", Georgia, serif; font-size: 17px; margin-right: auto; }
.edition .qmove-p { font-size: 13px; color: var(--gray); font-variant-numeric: tabular-nums; }
.edition .qmove-e { font-size: 14px; font-weight: 500; font-variant-numeric: tabular-nums; min-width: 56px; text-align: right; }
.edition .qmove-e.pos  { color: var(--pos); }
.edition .qmove-e.neg  { color: var(--neg); }
.edition .qmove-e.flat { color: var(--blue-300); }

/* =============================================================================
   PRISE DE RENDEZ-VOUS V2 (chantier DETTE V2) - .rdvx-*
   -----------------------------------------------------------------------------
   Reutilise les composants estimateur deja styles (.estx-module/.estx-mbar/
   .estx-body/.estx-stage/.estx-screen/.estx-nav/.estx-next/.estx-back/
   .qx-eyebrow/.qx-title/.qx-sub/.qx-form/.qx-field/.qx-rgpd). N'ajoute ici que
   le stepper, le calendrier, les creneaux, le recap et la confirmation.
   ============================================================================= */

/* --- stepper desktop (3 etapes) --- */
.edition .rdvx-stepper { display: flex; align-items: center; gap: 8px; margin-bottom: clamp(16px,2.2vw,24px); }
.edition .rdvx-step { flex: 1; display: flex; align-items: center; gap: 8px; color: var(--gray-2); min-width: 0; }
.edition .rdvx-step:last-child { flex: 0 0 auto; }
.edition .rdvx-step .num { flex: none; width: 24px; height: 24px; border-radius: 50%; border: 1.5px solid var(--gray-3); background: var(--white); display: grid; place-items: center; font-family: "IBM Plex Mono", ui-monospace, monospace; font-size: 12px; color: var(--gray-2); transition: background .2s, border-color .2s, color .2s; }
.edition .rdvx-step .num svg { width: 12px; height: 12px; color: #fff; }
.edition .rdvx-step .lab { font-family: "IBM Plex Mono", ui-monospace, monospace; font-size: 11px; letter-spacing: .08em; text-transform: uppercase; white-space: nowrap; }
.edition .rdvx-step.is-on { color: var(--ink); }
.edition .rdvx-step.is-on .num { background: var(--blue); border-color: var(--blue); color: #fff; }
.edition .rdvx-step.is-done { color: var(--gray); }
.edition .rdvx-step.is-done .num { background: var(--blue); border-color: var(--blue); }
.edition .rdvx-step::after { content: ""; flex: 1; height: 1.5px; background: var(--hair); margin-left: 8px; }
.edition .rdvx-step:last-child::after { display: none; }
.edition .rdvx-step.is-done::after { background: var(--blue); }

/* --- lien retour vers l'estimation (continuite in-module estimateur -> RDV) --- */
.edition .rdvx-back-estim { display: inline-flex; align-items: center; gap: 7px; background: none; border: none; font-family: "Inter", system-ui, sans-serif; font-size: 13px; font-weight: 500; color: var(--gray); cursor: pointer; padding: 2px 0; margin: 0 0 14px; transition: color .15s ease; }
.edition .rdvx-back-estim:hover { color: var(--ink); }
.edition .rdvx-back-estim svg { width: 15px; height: 15px; transform: rotate(180deg); }

/* --- progression mobile (rail + ligne d'info) : masquees en desktop --- */
.edition .rdvx-mob-info { display: none; }
.edition .rdvx-prog { display: none; }

/* --- calendrier --- */
.edition .rdvx-cal-layout { display: grid; grid-template-columns: 1.05fr 1fr; gap: clamp(20px,3vw,34px); align-items: start; }
.edition .rdvx-cal { background: var(--cream); border: 1px solid var(--hair); padding: 18px 18px 14px; }
.edition .rdvx-cal-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 16px; }
.edition .rdvx-cal-mois { font-family: "Fraunces", Georgia, serif; font-size: 18px; color: var(--ink); }
.edition .rdvx-cal-nav { display: flex; gap: 6px; }
.edition .rdvx-cal-navbtn { width: 34px; height: 34px; border: 1px solid var(--gray-3); background: var(--white); color: var(--blue); cursor: pointer; display: grid; place-items: center; font-size: 19px; line-height: 1; border-radius: 2px; transition: background .15s, color .15s, border-color .15s; }
.edition .rdvx-cal-navbtn:hover:not(:disabled) { background: var(--blue); color: #fff; border-color: var(--blue); }
.edition .rdvx-cal-navbtn:disabled { opacity: .35; cursor: not-allowed; }
.edition .rdvx-cal-dow { display: grid; grid-template-columns: repeat(7,1fr); gap: 3px; margin-bottom: 6px; }
.edition .rdvx-cal-dow span { text-align: center; font-family: "IBM Plex Mono", ui-monospace, monospace; font-size: 11px; letter-spacing: .04em; text-transform: uppercase; color: var(--gray-2); padding: 6px 0; }
.edition .rdvx-cal-grid { display: grid; grid-template-columns: repeat(7,1fr); gap: 3px; }
.edition .rdvx-cal-day { height: 46px; border: none; background: none; font-family: "Inter", system-ui, sans-serif; font-size: 15px; font-weight: 500; color: var(--ink); cursor: pointer; border-radius: 2px; position: relative; display: grid; place-items: center; transition: background .14s, color .14s; }
.edition .rdvx-cal-day.empty { visibility: hidden; cursor: default; }
.edition .rdvx-cal-day:disabled { color: var(--gray-3); cursor: not-allowed; }
.edition .rdvx-cal-day.dispo:hover:not(.is-on) { background: var(--blue-tint); color: var(--blue); }
.edition .rdvx-cal-day.dispo::after { content: ""; position: absolute; bottom: 4px; left: 50%; transform: translateX(-50%); width: 4px; height: 4px; border-radius: 50%; background: var(--blue-300); }
.edition .rdvx-cal-day.is-on { background: var(--blue); color: #fff; }
.edition .rdvx-cal-day.is-on::after { display: none; }

/* --- creneaux --- */
.edition .rdvx-creneaux { display: flex; flex-direction: column; }
.edition .rdvx-creneaux-titre { font-family: "Fraunces", Georgia, serif; font-size: 16px; color: var(--ink); margin-bottom: 14px; }
.edition .rdvx-creneaux-grid { display: grid; grid-template-columns: repeat(3,1fr); gap: 8px; }
.edition .rdvx-creneau { padding: 11px 6px; border: 1px solid var(--gray-3); background: var(--white); font-family: "Inter", system-ui, sans-serif; font-size: 14px; font-weight: 500; color: var(--ink); cursor: pointer; border-radius: 2px; text-align: center; font-variant-numeric: tabular-nums; transition: background .14s, color .14s, border-color .14s; }
.edition .rdvx-creneau:hover:not(:disabled):not(.is-on) { border-color: var(--gray); background: var(--cream); }
.edition .rdvx-creneau:disabled { opacity: .4; cursor: not-allowed; text-decoration: line-through; }
.edition .rdvx-creneau.is-on { background: var(--blue); border-color: var(--blue); color: #fff; }
.edition .rdvx-creneaux-empty { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 10px; text-align: center; padding: 30px 18px; background: var(--cream); border: 1px solid var(--hair); color: var(--gray); }
.edition .rdvx-creneaux-empty svg { width: 30px; height: 30px; color: var(--blue-300); opacity: .6; }
.edition .rdvx-creneaux-empty span { font-size: 13px; line-height: 1.5; max-width: 220px; }

/* --- recap "Votre rendez-vous" --- */
.edition .rdvx-recap { display: flex; align-items: center; gap: 14px; padding: 13px 16px; background: var(--blue-tint); border: 1px solid #DCE4EC; margin-top: clamp(13px,1.6vw,16px); }
.edition .rdvx-recap-ic { flex: none; width: 38px; height: 38px; background: var(--white); display: grid; place-items: center; }
.edition .rdvx-recap-ic svg { width: 18px; height: 18px; color: var(--blue); }
.edition .rdvx-recap-tx { flex: 1; min-width: 0; }
.edition .rdvx-recap-lab { font-family: "IBM Plex Mono", ui-monospace, monospace; font-size: 10px; letter-spacing: .08em; text-transform: uppercase; color: var(--blue); margin-bottom: 2px; }
.edition .rdvx-recap-val { font-family: "Fraunces", Georgia, serif; font-size: 16px; color: var(--ink); }
.edition .rdvx-recap-edit { flex: none; background: none; border: 1px solid var(--blue); color: var(--blue); padding: 7px 14px; font-family: "Inter", system-ui, sans-serif; font-size: 13px; font-weight: 600; cursor: pointer; border-radius: 2px; transition: background .15s, color .15s; }
.edition .rdvx-recap-edit:hover { background: var(--blue); color: #fff; }

/* --- form (complement de .qx-form) --- */
.edition .rdvx-form textarea { padding: 10px 12px; border: 1px solid var(--gray-3); background: var(--white); font-family: "Inter", system-ui, sans-serif; font-size: 15px; color: var(--ink); border-radius: 2px; width: 100%; resize: vertical; min-height: 84px; }
.edition .rdvx-form textarea:focus { outline: none; border-color: var(--blue); box-shadow: 0 0 0 3px var(--blue-tint); }
.edition .rdvx-opt { margin-left: 6px; font-size: 10px; font-weight: 400; letter-spacing: 0; text-transform: none; color: var(--gray-2); }
.edition .rdvx-hp { position: absolute; left: -9999px; width: 1px; height: 1px; overflow: hidden; }
.edition .rdvx-error { color: var(--neg); font-size: 13px; margin-top: 12px; }

/* --- confirmation --- */
.edition .rdvx-confirm { text-align: center; padding: 14px 0 6px; }
.edition .rdvx-confirm-ic { width: 74px; height: 74px; border-radius: 50%; background: var(--blue-tint); display: grid; place-items: center; margin: 0 auto 22px; }
.edition .rdvx-confirm-ic svg { width: 36px; height: 36px; color: var(--blue); }
.edition .rdvx-confirm-h { font-family: "Fraunces", Georgia, serif; font-weight: 400; font-size: clamp(22px,2.6vw,28px); color: var(--ink); margin: 0; }
.edition .rdvx-confirm-desc { font-size: 15px; color: var(--gray); max-width: 420px; margin: 12px auto 26px; line-height: 1.6; }
.edition .rdvx-confirm-recap { display: grid; grid-template-columns: auto 1fr; gap: 10px 20px; max-width: 380px; margin: 0 auto 24px; text-align: left; background: var(--cream); border: 1px solid var(--hair); padding: 18px 22px; }
.edition .rdvx-confirm-k { font-family: "IBM Plex Mono", ui-monospace, monospace; font-size: 10px; letter-spacing: .06em; text-transform: uppercase; color: var(--blue); align-self: center; }
.edition .rdvx-confirm-v { font-family: "Fraunces", Georgia, serif; font-size: 15px; color: var(--ink); }
.edition .rdvx-confirm-back { justify-content: center; }
.edition .rdvx-confirm-back svg { transform: rotate(180deg); }
.edition .rdvx-noscript { padding: 16px; background: var(--cream); border: 1px solid var(--hair); color: var(--gray); font-size: 14px; }

/* --- responsive mobile (<= 760px) --- */
@media (max-width: 760px) {
  .edition .rdvx-stepper { display: none; }
  .edition .rdvx-mob-info { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; margin-bottom: 8px; }
  .edition .rdvx-mob-info .n { font-family: "IBM Plex Mono", ui-monospace, monospace; font-size: 11px; letter-spacing: .08em; text-transform: uppercase; color: var(--blue); }
  .edition .rdvx-mob-info .c { font-family: "Fraunces", Georgia, serif; font-size: 15px; color: var(--ink); }
  .edition .rdvx-prog { display: block; margin-bottom: 16px; }
  .edition .rdvx-rail { height: 3px; background: var(--cream-deep); border-radius: 1px; overflow: hidden; }
  .edition .rdvx-rail > i { display: block; height: 100%; background: var(--blue); border-radius: 1px; transition: width .4s cubic-bezier(.2,.7,.2,1); }
  .edition .rdvx-cal-layout { grid-template-columns: 1fr; gap: 20px; }
  .edition .rdvx-creneaux-grid { grid-template-columns: repeat(3,1fr); }
  .edition .rdvx-recap { gap: 10px; padding: 11px 13px; }
  .edition .rdvx-recap-ic { width: 32px; height: 32px; }
  .edition .rdvx-recap-val { font-size: 14px; }
  .edition .rdvx-recap-edit { padding: 6px 11px; font-size: 12px; }
}
@media (prefers-reduced-motion: reduce) { .edition .rdvx-rail > i { transition: none; } }

/* --- mobile RDV : la sheet réutilise .b-sheet/.b-backdrop/.b-grab/.m-* de
   l'estimateur (DA IDENTIQUE), créée et attachée à document.body par
   edition-rdv.js (mountResponsive). On ne définit ici QUE les spécifiques RDV
   (calendrier, créneaux, textarea) et le verrou de scroll de fond. Aucune
   règle de base .b-*/.m-* n'est modifiée (réutilisation seule). */
html.rdvx-sheet-lock, html.rdvx-sheet-lock body { overflow: hidden; }
.edition .b-sheet .rdvx-cal { background: var(--white); }
.edition .rdvx-m-cal { margin-top: 12px; }
.edition .rdvx-m-creneaux { margin-top: 14px; }
.edition .rdvx-m-textarea { padding: 14px; border: 1px solid var(--gray-3); border-radius: 4px; font-family: inherit; font-size: 16px; color: var(--ink); background: var(--white); width: 100%; resize: vertical; min-height: 80px; }
.edition .rdvx-m-textarea:focus { outline: none; border-color: var(--blue); box-shadow: 0 0 0 3px var(--blue-tint); }

/* ===== Pages texte (outils/légales) : espacement densifié (BUG visuel) =====
   Le padding des sections refonte (clamp 44-76px) laisse trop de vide sur du
   contenu tout-texte. On le resserre UNIQUEMENT sous body.page-text, sans
   toucher le hero ni le CTA final. */
body.page-text .edition section:not(.hero):not(.final),
body.page-text section:not(.hero):not(.final) { padding-block: clamp(34px, 4.2vw, 52px); }
/* "À retenir" et notes réutilisent les composants article (.art-keypoints,
   .art-answer, .art-note) : aucune classe nouvelle, rendu validé. Marge basse
   du dernier enfant d'un .single neutralisée pour un rythme net. */
.edition .single > .art-keypoints:last-child, .edition .single > .art-answer:last-child { margin-bottom: 0; }

/* ===== Skip-link accessibilité (TECH#3) : caché hors focus clavier ===== */
.edition .skip-link { position: absolute; left: -9999px; top: 0; z-index: 3000; background: var(--ink); color: #fff; padding: 12px 18px; font-family: "Inter", system-ui, sans-serif; font-size: 14px; font-weight: 600; border-radius: 0 0 4px 0; text-decoration: none; }
.edition .skip-link:focus { left: 0; }
#contenu { scroll-margin-top: 90px; }

/* ===== Featured images des cards Journal (BUG #2 / #15) ===== */
.edition .jx-card-fig img, .edition .jx-feature-fig img { width: 100%; height: 100%; object-fit: cover; display: block; }

/* ===== Photos auteur en <img> (BUG #24) : remplissent les pastilles ===== */
.edition img.art-byline-photo, .edition img.art-author-photo { object-fit: cover; }
.edition img.art-author-photo { border-radius: 50%; }

/* ===== Formulaire de contact (BUG #21) - DA immover ===== */
.edition .ct-form { display: flex; flex-direction: column; gap: 14px; }
.edition .ct-field { display: flex; flex-direction: column; gap: 5px; }
.edition .ct-field label { font-family: "IBM Plex Mono", ui-monospace, "SFMono-Regular", Menlo, monospace; font-size: 11px; font-weight: 500; letter-spacing: .06em; text-transform: uppercase; color: var(--gray); }
.edition .ct-field input, .edition .ct-field textarea { padding: 12px 14px; border: 1px solid var(--gray-3); background: var(--white); border-radius: 2px; font-family: "Inter", system-ui, sans-serif; font-size: 15px; color: var(--ink); width: 100%; }
.edition .ct-field input:focus, .edition .ct-field textarea:focus { outline: none; border-color: var(--blue); box-shadow: 0 0 0 3px var(--blue-tint); }
.edition .ct-field textarea { resize: vertical; min-height: 110px; }
.edition .ct-note { border-radius: 2px; font-size: 14px; line-height: 1.5; }
@media (max-width: 760px) { .edition .ct-field input, .edition .ct-field textarea { font-size: 16px; } }

/* ===== RESET prefers-reduced-motion (global) ===== */
@media (prefers-reduced-motion: no-preference) { html { scroll-behavior: smooth; } }
